yujian
2020-06-08 b3da9f82b7740d39742fef1a81a56c22fe1c8b9c
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -17,6 +17,7 @@
import javax.imageio.ImageIO;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
@@ -30,14 +31,14 @@
import com.yeshi.fanli.dto.ConfigParamsDTO;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
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.GoodsEvaluate.EvaluateEnum;
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;
@@ -55,6 +56,7 @@
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.service.manger.goods.ConvertLinkManager;
@@ -91,6 +93,9 @@
   @Resource
   private HongBaoManageService hongBaoManageService;
   @Resource
   private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
@@ -111,6 +116,26 @@
   @Resource
   private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
   @Override
   public void switchState(String id) throws GoodsEvaluateException {
      if (id == null) {
         throw new GoodsEvaluateException(1, "请传递正确参数");
      }
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(id);
      if (resultObj == null) {
         throw new GoodsEvaluateException(1, "此内容已不存在");
      }
      Integer state = resultObj.getState();
      if (state == null || state == 0) {
         state = 1;
      } else {
         state = 0;
      }
      goodsEvaluateDao.updateSatate(id, state);
   }
   @Override
   public String saveHead(MultipartFile file, GoodsEvaluate record) throws GoodsEvaluateException {
@@ -138,7 +163,11 @@
         if (record.getStartTime() != null && record.getEndTime().getTime() <= record.getStartTime().getTime())
            throw new GoodsEvaluateException(1, "截止时间必须大于开始时间");
      } else {
         record.setEndTime(DateUtil.plusDayDate(3, new Date()));
         if (record.getStartTime() == null) {
            record.setEndTime(DateUtil.plusDayDate(3, new Date()));
         } else {
            record.setEndTime(DateUtil.plusDayDate(3, record.getStartTime()));
         }
      }
      Integer dynamicType = record.getDynamicType();
@@ -225,6 +254,31 @@
      return null;
   }
   private ImgInfo uploadOriginalPicture(MultipartFile file) {
      try {
         InputStream inputStream = file.getInputStream();
         String contentType = file.getContentType();
         String type = contentType.substring(contentType.indexOf("/") + 1);
         String filePath = FilePathEnum.goodsEvaluate.getPath() + UUID.randomUUID().toString().replace("-", "") + "."
               + type;
         BufferedImage sourceImg = ImageIO.read(inputStream);
         ImgInfo info = new ImgInfo();
         int width = sourceImg.getWidth();
         int height = sourceImg.getHeight();
         String picLink = COSManager.getInstance().uploadFile(file.getInputStream(), filePath).getUrl();
         info.setH(height);
         info.setW(width);
         info.setUrl(picLink);
         return info;
      } catch (Exception e) {
         e.printStackTrace();
      }
      return null;
   }
   private String uploadPicture(File file, String contentType) throws Exception {
      InputStream inputStream = new FileInputStream(file);
      String type = contentType.substring(contentType.indexOf("/") + 1);
@@ -246,7 +300,7 @@
   }
   @Override
   public String saveSingleGoods(String pid, Long goodsId, Integer goodsType, String videoUrl, Integer picNum,
   public String saveSingleGoods(String pid, String goodsId, Integer goodsType, String videoUrl, Integer picNum,
         String picUrls, MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
@@ -339,8 +393,7 @@
            }
         }
      }
      // 上传文件替换
      if (fileRequest != null) {
         for (int i = 0; i < 9; i++) {
@@ -364,20 +417,20 @@
      GoodsDetailVO goodsDetailVO = null;
      JDGoods jdGoods = null;
      PDDGoodsDetail pddGoods = null;
      ConfigParamsDTO params = hongBaoManageService.getShowComputeRate("android", "55");
      ConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         try {
            TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
            TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(Long.parseLong(goodsId));
            goodsDetailVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
         } catch (TaobaoGoodsDownException e) {
            throw new GoodsEvaluateException(1, "商品已下架");
         }
      } else if (goodsType == Constant.SOURCE_TYPE_JD) {
         jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
         jdGoods = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
         goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(jdGoods, params);
      } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
         pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
         pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
         goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(pddGoods, params);
      }
@@ -447,7 +500,7 @@
            lineNum = 1;
         } else if (totalImg == 3) {
            lineNum = 3;
         } else if (totalImg <= 4) {
         } else if (totalImg == 2 || totalImg == 4) {
            lineNum = 2;
         } else {
            lineNum = 3;
@@ -465,7 +518,7 @@
      if (comments != null && comments.size() > 0) {
         for (CommentInfo commentInfo : comments) {
            if (commentInfo.getTypeEnum() == CommentInfoEnum.goodsCoupon) {
               if (oldGoodsVO != null && oldGoodsVO.getGoodsId().longValue() == goodsId.longValue()
               if (oldGoodsVO != null && oldGoodsVO.getGoodsId().equalsIgnoreCase(goodsId)
                     && oldGoodsVO.getGoodsType() == goodsType) {
                  addComment = false;
               }
@@ -476,14 +529,15 @@
      }
      /*
       * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 = goodsDetailVO.getCouponInfo(); if
       * (couponInfo1 == null) { addComment = false; }
       * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 =
       * goodsDetailVO.getCouponInfo(); if (couponInfo1 == null) { addComment
       * = false; }
       */
      String commentText = "";
      if (addComment) {
         if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsId, "0");
            TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, Long.parseLong(goodsId), "0");
            String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
            commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
         } else if (goodsType == Constant.SOURCE_TYPE_JD) {
@@ -501,7 +555,7 @@
            }
            commentText = template.replace("[链接]", jumpLink);
         } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", "1");
            String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(Long.parseLong(goodsId), PinDuoDuoApiUtil.PID_SHARE + "", "1");
            if (jumpLink == null) {
               throw new GoodsEvaluateException(1, "该商品转链失败");
            }
@@ -509,21 +563,25 @@
            commentText = template.replace("[链接]", jumpLink);
         }
//         commentText = commentText.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goodsDetailVO.getZkPrice())+"");
//         if (!goodsDetailVO.isHasCoupon()) {
//            commentText = commentText.replace("领券抢购", "抢购");
//            commentText = commentText.replace("【券后价】[券后价]元", "");
//         } else {
//            commentText = commentText.replace("[券后价]",  MoneyBigDecimalUtil.getWithNoZera(goodsDetailVO.getCouponPrice())+"");
//         }
//
//         commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n",
//               "\r\n");
         // commentText = commentText.replace("[原价]",
         // MoneyBigDecimalUtil.getWithNoZera(goodsDetailVO.getZkPrice())+"");
         // if (!goodsDetailVO.isHasCoupon()) {
         // commentText = commentText.replace("领券抢购", "抢购");
         // commentText = commentText.replace("【券后价】[券后价]元", "");
         // } else {
         // commentText = commentText.replace("[券后价]",
         // MoneyBigDecimalUtil.getWithNoZera(goodsDetailVO.getCouponPrice())+"");
         // }
         //
         // commentText = commentText.replace("\r\n\r\n",
         // "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n",
         // "\r\n");
         CommentInfo commentInfo = new CommentInfo();
         commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
         commentInfo.setContent(commentText);
         commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
         commentInfo.setNeedSpin(true);
         commentsNew.add(commentInfo);
         resultObj.setComments(commentsNew);
      }
@@ -545,13 +603,13 @@
   private String createTokenAndLink(GoodsDetailVO goodsDetailVO) throws Exception {
      String commentText = "";
      if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
         TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsDetailVO.getGoodsId(), "0");
         TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L,Long.parseLong(goodsDetailVO.getGoodsId()), "0");
         String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
         commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
      } else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
         String couponUrl = null;
         JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsDetailVO.getGoodsId());
         JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsDetailVO.getGoodsId()));
         JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
         if (couponInfo != null) {
            couponUrl = couponInfo.getLink();
@@ -562,7 +620,7 @@
         String template = configService.get(ConfigKeyEnum.quickShareJDCommentText.getKey());
         commentText = template.replace("[链接]", jumpLink);
      } else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
         String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsDetailVO.getGoodsId(),
         String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(Long.parseLong(goodsDetailVO.getGoodsId()),
               PinDuoDuoApiUtil.PID_SHARE + "", "1");
         String template = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
         commentText = template.replace("[链接]", jumpLink);
@@ -581,7 +639,7 @@
   public GoodsDetailVO getGoodsDetailVO(Long goodsId, Integer goodsType) throws GoodsEvaluateException {
      GoodsDetailVO goodsDetail = null;
      ConfigParamsDTO params = hongBaoManageService.getShowComputeRate("android", "55");
      ConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         try {
@@ -696,7 +754,6 @@
               }
               String picUrl = goodsDetailVO.getPicUrl();
               if (fileRequest != null) {
                  MultipartFile file = fileRequest.getFile("file" + i);
                  if (file != null) {
@@ -743,7 +800,7 @@
            }
            boolean del = false;
            long oldGoodsId = old.getGoods().getGoodsId().longValue();
            String oldGoodsId = old.getGoods().getGoodsId();
            int oldGoodsType = old.getGoods().getGoodsType().intValue();
            for (ImgInfo newInfo : listImg) {
               ImgEnum type2 = old.getType();
@@ -751,7 +808,7 @@
                  continue;
               }
               if (oldGoodsId == newInfo.getGoods().getGoodsId().longValue()
               if (oldGoodsId .equalsIgnoreCase(newInfo.getGoods().getGoodsId())
                     && oldGoodsType == newInfo.getGoods().getGoodsType().intValue()) {
                  String url = newInfo.getUrl();
                  if (url.equals(old.getUrl())) {
@@ -778,7 +835,7 @@
            lineNum = 1;
         } else if (totalImg == 3) {
            lineNum = 3;
         } else if (totalImg <= 4) {
         } else if (totalImg == 2 || totalImg == 4) {
            lineNum = 2;
         } else {
            lineNum = 3;
@@ -851,6 +908,7 @@
            commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
         }
         commentInfo.setNeedSpin(true);
         commentInfo.setType(commentInfo.getTags());
         commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
         newList.add(commentInfo);
@@ -865,7 +923,8 @@
   }
   @Override
   public void saveGoodsCoupon(String pid, String content) throws GoodsEvaluateException, Exception {
   public void saveCurrencyCoupon(String pid, int kind, CommentInfo commentInfo)
         throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
      }
@@ -874,84 +933,40 @@
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
      CommentInfo goodsCoupon = null;
      CommentInfo currencyCoupon = null;
      List<CommentInfo> oldComments = resultObj.getComments();
      if (oldComments != null) {
         for (CommentInfo info : oldComments) {
            if (CommentInfoEnum.goodsCoupon == info.getTypeEnum()) {
               goodsCoupon = info;
            } else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
               currencyCoupon = info;
            }
      if (EvaluateEnum.activity != resultObj.getType()) {
         if (StringUtil.isNullOrEmpty(commentInfo.getCoupon())) {
            throw new GoodsEvaluateException(1, "券面额不能为空");
         }
      }
      List<CommentInfo> comments = new ArrayList<>();
      if (!StringUtil.isNullOrEmpty(content)) {
         if (StringUtil.isNullOrEmpty(commentInfo.getTagDesc())) {
            throw new GoodsEvaluateException(1, "描述语不能为空");
         }
         if (!StringUtil.isNullOrEmpty(content)) {
         String tagUrl = commentInfo.getTagUrl();
         String content = commentInfo.getContent();
         if (StringUtil.isNullOrEmpty(tagUrl) && StringUtil.isNullOrEmpty(content)) {
            throw new GoodsEvaluateException(1, "评论语和链接不能同时为空");
         }
         String endTime = commentInfo.getEndTime();
         if (!StringUtil.isNullOrEmpty(endTime)) {
            try {
               convertLinkManager.convertLinkFromText(content, 1L, true);
               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
               sdf.parse(endTime);
            } catch (Exception e) {
               throw new GoodsEvaluateException(1, "不包含可转链的口令与链接");
               throw new GoodsEvaluateException(1, "请填写正确的时间格式:2020-03-05");
            }
         }
         CommentInfo commentInfo = new CommentInfo();
         if (goodsCoupon != null) {
            commentInfo.setId(goodsCoupon.getId());
         } else {
            commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
            throw new GoodsEvaluateException(1, "请填写券截止时间");
         }
         commentInfo.setContent(content);
         commentInfo.setType(commentInfo.getTags());
         commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
         comments.add(commentInfo);
      }
      if (currencyCoupon != null) {
         comments.add(currencyCoupon);
      if (commentInfo.getNeedSpin() == null) {
         commentInfo.setNeedSpin(false);
      }
      resultObj.setComments(comments);
      goodsEvaluateDao.save(resultObj);
   }
   @Override
   public void saveCurrencyCoupon(String pid, int kind, CommentInfo commentInfo)
         throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
      }
      if (StringUtil.isNullOrEmpty(commentInfo.getCoupon())) {
         throw new GoodsEvaluateException(1, "券面额不能为空");
      }
      if (StringUtil.isNullOrEmpty(commentInfo.getTagDesc())) {
         throw new GoodsEvaluateException(1, "描述语不能为空");
      }
      String tagUrl = commentInfo.getTagUrl();
      String content = commentInfo.getContent();
      if (StringUtil.isNullOrEmpty(tagUrl) && StringUtil.isNullOrEmpty(content)) {
         throw new GoodsEvaluateException(1, "评论语和链接不能同时为空");
      }
      String endTime = commentInfo.getEndTime();
      if (!StringUtil.isNullOrEmpty(endTime)) {
         try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            sdf.parse(endTime);
         } catch (Exception e) {
            throw new GoodsEvaluateException(1, "请填写正确的时间格式:2020-03-05");
         }
      } else {
         throw new GoodsEvaluateException(1, "请填写券截止时间");
      }
      if (!StringUtil.isNullOrEmpty(content) && kind != 3) { // 活动不验证
      if (!StringUtil.isNullOrEmpty(content) && commentInfo.getNeedSpin()) {
         try {
            convertLinkManager.convertLinkFromText(content, Constant.LINK_TOKEN_VERIFY_UID, true);
         } catch (ConvertLinkExceptionException e) {
@@ -962,10 +977,6 @@
            throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
         }
      }
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
      List<CommentInfo> comments = new ArrayList<>();
      CommentInfo currencyCoupon = null;
@@ -1017,7 +1028,7 @@
   }
   @Override
   public void saveActivityPic(String pid, ImgInfo imgInfo, MultipartHttpServletRequest fileRequest)
   public void saveActivityPic(String pid, ImgInfo imgInfo, String picUrls, MultipartHttpServletRequest fileRequest)
         throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
@@ -1027,121 +1038,171 @@
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
      String videoPic = null;
      String activityPic = null;
      if (imgInfo == null || StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
         throw new GoodsEvaluateException(1, "活动链接不能为空");
      }
      ImgInfo imgVideo = null;
      ImgInfo imgactivity = null;
      List<String> listDel = new ArrayList<String>();
      List<ImgInfo> listOld = new ArrayList<ImgInfo>();
      List<ImgInfo> resultList = resultObj.getImgList();
      if (resultList != null && resultList.size() > 0) {
         for (ImgInfo info : resultList) {
            if (info.getType() == ImgEnum.activity) {
               activityPic = info.getActivityPic();
               imgactivity = info;
            } else {
            if (info.getType() == ImgEnum.video) {
               imgVideo = info;
               videoPic = info.getUrl();
            } else {
               listOld.add(info);
            }
         }
      }
      int width = 0;
      int height = 0;
      int width2 = 0;
      int height2 = 0;
      List<ImgInfo> listImg = new ArrayList<ImgInfo>();
      // 视频部分
      if (fileRequest != null) {
         MultipartFile filevideo = fileRequest.getFile("filevideo");
         if (filevideo != null) {
            removePicture(videoPic);
            if (StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
               throw new GoodsEvaluateException(1, "视频链接不能为空");
            }
            ImgInfo info = uploadVideoPicture(filevideo);
            if (info == null)
               throw new GoodsEvaluateException(2, "视频图片上传失败");
            videoPic = info.getUrl();
            width = info.getW();
            height = info.getH();
         }
         MultipartFile activityfile = fileRequest.getFile("activityfile");
         if (activityfile != null) {
            removePicture(activityPic);
            InputStream inputStream = activityfile.getInputStream();
            BufferedImage sourceImg = ImageIO.read(inputStream);
            width2 = sourceImg.getWidth();
            height2 = sourceImg.getHeight();
            String picLink = uploadPicture(activityfile);
            activityPic = picLink;
            if (imgVideo != null) {
               String url = imgVideo.getUrl();
               if (!StringUtil.isNullOrEmpty(url)) {
                  listDel.add(url);
               }
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
            } else {
               imgVideo = new ImgInfo();
               imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
               imgVideo.setLarge(true);
               imgVideo.setPid(pid);
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
               imgVideo.setVideoUrl(imgInfo.getVideoUrl());
               imgVideo.setType(ImgEnum.video);
            }
            imgVideo.setW(info.getW());
            imgVideo.setH(info.getH());
         }
      }
      if (!StringUtil.isNullOrEmpty(videoPic) || !StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
         if (imgVideo != null) {
            imgVideo.setUrl(videoPic);
            imgVideo.setUrlHD(videoPic);
      List<ImgInfo> listImg = new ArrayList<ImgInfo>();
      if (imgVideo != null) {
         if (!StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
            if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
               throw new GoodsEvaluateException(1, "视频封面图不能为空");
            }
            imgVideo.setVideoUrl(imgInfo.getVideoUrl());
            listImg.add(imgVideo);
         } else {
            imgVideo = new ImgInfo();
            imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
            imgVideo.setLarge(true);
            imgVideo.setPid(pid);
            imgVideo.setUrl(videoPic);
            imgVideo.setUrlHD(videoPic);
            imgVideo.setVideoUrl(imgInfo.getVideoUrl());
            imgVideo.setType(ImgEnum.video);
            String url = imgVideo.getUrl();
            if (!StringUtil.isNullOrEmpty(url)) {
               listDel.add(url);
            }
         }
         if (width > 0) {
            imgVideo.setW(width);
            imgVideo.setH(height);
         } else {
            imgVideo.setW(imgVideo.getW());
            imgVideo.setH(imgVideo.getH());
         }
         listImg.add(imgVideo);
      }
      int totalImg = 0;
      if (!StringUtil.isNullOrEmpty(activityPic) || !StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
         if (imgactivity != null) {
            imgactivity.setUrl(activityPic);
            imgactivity.setUrlHD(activityPic);
            imgactivity.setActivityUrl(imgInfo.getActivityUrl());
         } else {
            imgactivity = new ImgInfo();
            imgactivity.setId(UUID.randomUUID().toString().replace("-", ""));
            imgactivity.setLarge(true);
            imgactivity.setPid(pid);
            imgactivity.setUrl(activityPic);
            imgactivity.setUrlHD(activityPic);
            imgactivity.setActivityUrl(imgInfo.getActivityUrl());
            imgactivity.setType(ImgEnum.activity);
      String activityUrl = imgInfo.getActivityUrl();
      // 编辑图片
      List<ImgInfo> tempList = new ArrayList<ImgInfo>();
      if (!StringUtil.isNullOrEmpty(picUrls)) {
         String[] pics = picUrls.split(",");
         if (pics != null) {
            for (int i = 0; i < pics.length; i++) {
               String picLink = pics[i];
               if (picLink.startsWith("http")) {
                  if (listOld != null) {
                     for (ImgInfo info : listOld) {
                        if (info.getUrl().equals(picLink)) {
                           info.setActivityUrl(activityUrl);
                           tempList.add(info);
                           break;
                        }
                     }
                  }
               }
            }
         }
         if (width2 > 0) {
            imgactivity.setW(width2);
            imgactivity.setH(height2);
         } else {
            imgactivity.setW(imgactivity.getW());
            imgactivity.setH(imgactivity.getH());
      }
      // 上传文件替换
      if (fileRequest != null) {
         for (int i = 0; i < 9; i++) {
            MultipartFile file = fileRequest.getFile("file" + i);
            if (file != null) {
               ImgInfo info = uploadOriginalPicture(file);
               ImgInfo imgInfo0 = new ImgInfo();
               imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
               imgInfo0.setLarge(false);
               imgInfo0.setPid(pid);
               imgInfo0.setUrl(info.getUrl());
               imgInfo0.setUrlHD(info.getUrl());
               imgInfo0.setType(ImgEnum.activity);
               imgInfo0.setW(info.getW());
               imgInfo0.setH(info.getH());
               imgInfo0.setActivityUrl(activityUrl);
               if (i < tempList.size()) {
                  tempList.set(i, imgInfo0);
               } else {
                  tempList.add(imgInfo0);
               }
            }
         }
         listImg.add(imgactivity);
         totalImg++;
      }
      int lineNum = 0;
      int totalImg = tempList.size();
      if (totalImg > 0) {
         if (totalImg == 1) {
            lineNum = 1;
         } else if (totalImg == 3) {
            lineNum = 3;
         } else if (totalImg <= 4) {
         } else if (totalImg == 2 || totalImg == 4) {
            lineNum = 2;
         } else {
            lineNum = 3;
         }
      }
      // 一张图显示为大图
      if (tempList.size() == 1) {
         tempList.get(0).setLarge(true);
      }
      if (tempList.size() > 0) {
         listImg.addAll(tempList);
      }
      // 清理老图片
      if (listOld != null && listOld.size() > 0) {
         for (ImgInfo infoOld : listOld) {
            boolean del = true;
            String oldPic = infoOld.getUrl();
            for (ImgInfo info : listImg) {
               if (info.getUrl().equals(oldPic)) {
                  del = false;
               }
            }
            if (del)
               listDel.add(infoOld.getUrl());
         }
      }
      resultObj.setJumpLink(activityUrl);
      resultObj.setLineNum(lineNum);
      resultObj.setImgList(listImg);
      goodsEvaluateDao.save(resultObj);
      // 删除图片
      if (listDel.size() > 0) {
         for (String url : listDel) {
            if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
               removePicture(url);
            }
         }
      }
   }
   @Override
@@ -1269,7 +1330,7 @@
            }
         }
      }
      // 上传文件替换
      if (fileRequest != null) {
         for (int i = 0; i < 9; i++) {
@@ -1284,7 +1345,7 @@
            }
         }
      }
      int totalImg = 0;
      for (String pic : listpic) {
         ImgInfo imgInfo0 = new ImgInfo();
@@ -1300,6 +1361,7 @@
         totalImg++;
      }
      // 清理老图片
      if (listOld != null && listOld.size() > 0) {
         for (int j = 0; j < listOld.size(); j++) {
            boolean del = true;
@@ -1321,7 +1383,7 @@
            lineNum = 1;
         } else if (totalImg == 3) {
            lineNum = 3;
         } else if (totalImg <= 4) {
         } else if (totalImg == 2 || totalImg == 4) {
            lineNum = 2;
         } else {
            lineNum = 3;
@@ -1356,7 +1418,14 @@
   public GoodsEvaluate getById(String id) {
      return goodsEvaluateDao.getById(id);
   }
   @Override
   public List<GoodsEvaluate> listByStartTime(Date date) {
      return goodsEvaluateDao.listByStartTime(date);
   }
   @Override
   public void saveComment(String pid, CommentInfo commentInfo) throws GoodsEvaluateException {
      GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(pid);
@@ -1473,23 +1542,23 @@
   }
   @Override
   public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType) {
      return goodsEvaluateDao.query(start, count, key, state, dynamicType);
   public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType,
         String typeEnum) {
      return goodsEvaluateDao.query(start, count, key, state, dynamicType, typeEnum);
   }
   @Override
   public long count(String key, Integer state, int dynamicType) {
      return goodsEvaluateDao.count(key, state, dynamicType);
   public long count(String key, Integer state, int dynamicType, String typeEnum) {
      return goodsEvaluateDao.count(key, state, dynamicType, typeEnum);
   }
   @Override
   public void addRanDomShareCount() {
      // 发圈
      try {
         List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(0, Integer.MAX_VALUE, 1);
         if (list != null) {
            for (GoodsEvaluate goodsEvaluate: list) {
            for (GoodsEvaluate goodsEvaluate : list) {
               Integer shareNum = goodsEvaluate.getShareNum();
               if (shareNum == null) {
                  shareNum = 0;
@@ -1501,12 +1570,12 @@
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
      // 素材
      try {
         List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(0, Integer.MAX_VALUE, 2);
         if (list != null) {
            for (GoodsEvaluate goodsEvaluate: list) {
            for (GoodsEvaluate goodsEvaluate : list) {
               Integer shareNum = goodsEvaluate.getShareNum();
               if (shareNum == null) {
                  shareNum = 0;
@@ -1519,8 +1588,7 @@
         LogHelper.errorDetailInfo(e);
      }
   }
   @Override
   @Cacheable(value = "dynamicCache", key = "'queryValidEvaluateCache-'+#start")
   public List<GoodsEvaluate> queryValidEvaluateCache(int start, int count) {
@@ -1532,9 +1600,11 @@
         public void run() {
            // 更新信息
            updateGoodInfo(list);
            // 删除已过期
            removeOverdue();
            removeDownGoods();
         }
      });
@@ -1566,6 +1636,9 @@
            continue;
         }
         // 按照发布显示时间段起始时间为准。
         evaluateNew.setPublishTime(evaluateNew.getStartTime());
         List<CommentInfo> comments = evaluateNew.getComments();
         if (comments != null && comments.size() > 0) {
            EvaluateEnum typeEnum = evaluateNew.getType();
@@ -1592,20 +1665,35 @@
                  if (goods != null) {
                     String content = commentInfoNew.getContent();
                     if (!StringUtil.isNullOrEmpty(content)) {
                        content = content.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice())+"");
                        content = content.replace("[原价]",
                              MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "");
                        if (goods.isHasCoupon()) {
                           content = content.replace("[券后价]",MoneyBigDecimalUtil.getWithNoZera(goods.getCouponPrice())+"");
                           content = content.replace("[券后价]",
                                 MoneyBigDecimalUtil.getWithNoZera(goods.getCouponPrice()) + "");
                        } else {
                           singleCoupn = false;
                           content = content.replace("领券抢购", "抢购");
                           content = content.replace("【券后价】[券后价]元", "");
                        }
                        content = content.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
                        // 替换淘宝官方活动
                        List<String> activityIdList = convertLinkManager.getTaoBaoOfficialActivityId(content);
                        for (String st : activityIdList)
                           content = content.replace(st, "");
                        commentInfoNew.setContent(content);
                     }
                  }
               }
               if (typeEnum != null && typeEnum == EvaluateEnum.activity) {
                  // 替换淘宝官方活动
                  String content = commentInfoNew.getContent();
                  List<String> activityIdList = convertLinkManager.getTaoBaoOfficialActivityId(content);
                  for (String st : activityIdList)
                     content = content.replace(st, "");
                  commentInfoNew.setContent(content);
               }
               CommentInfoEnum typeComment = commentInfoNew.getTypeEnum();
               if (typeComment != null && typeComment == CommentInfoEnum.goodsCoupon) {
                  GoodsDetailVO goods = evaluateNew.getGoods();
@@ -1681,9 +1769,11 @@
         @Override
         public void run() {
            updateGoodInfo(listOBJ);
            // 删除已过期
            removeOverdue();
            removeDownGoods();
         }
      });
@@ -1709,8 +1799,8 @@
      try {
         Date now = new Date();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         ConfigParamsDTO params = hongBaoManageService.getShowComputeRate("android", "55");
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         ConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
         params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
         for (GoodsEvaluate goodsEvaluate : list) {
            // 是否2个小时之内已更新
@@ -1735,7 +1825,7 @@
                     if (commentInfoEnum != null && commentInfoEnum == CommentInfoEnum.currencyCoupon) {
                        String endTime = commentInfo.getEndTime();
                        if (!StringUtil.isNullOrEmpty(endTime)) {
                           Date endDay = sdf.parse(endTime);
                           Date endDay = format.parse(endTime);
                           if (endDay.getTime() < now.getTime()) {
                              goodsEvaluate.setState(0); // 活动过期
                           }
@@ -1804,12 +1894,12 @@
      }
   }
   private GoodsDetailVO getGoodsNewInfo(Long goodsId, int goodsType, ConfigParamsDTO paramsDTO) {
   private GoodsDetailVO getGoodsNewInfo(String goodsId, int goodsType, ConfigParamsDTO paramsDTO) {
      GoodsDetailVO vo = null;
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         TaoBaoGoodsBrief goods;
         try {
            goods = redisManager.getTaoBaoGoodsBrief(goodsId);
            goods = redisManager.getTaoBaoGoodsBrief(Long.parseLong(goodsId));
            if (goods != null) {
               vo = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
            }
@@ -1818,12 +1908,12 @@
         }
      } else if (goodsType == Constant.SOURCE_TYPE_JD) {
         JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
         JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
         if (goodsInfo != null) {
            vo = GoodsDetailVOFactory.convertJDGoods(goodsInfo, paramsDTO);
         }
      } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
         PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
         PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
         if (goodsInfo != null)
            vo = GoodsDetailVOFactory.convertPDDGoods(goodsInfo, paramsDTO);
      }
@@ -1831,53 +1921,55 @@
   }
   @Override
   public void addGoodsEvaluateByDynamicInfo(DynamicInfo info) {
      if (1 > 0) {
         return; // 暂不启用自动生成
   public void addGoodsEvaluate(String goodsId, List<ImgInfo> imgList, ActivityUser user, String title, String comment,
         Date startTime) throws GoodsEvaluateException {
      if (goodsId == null || user == null || StringUtil.isNullOrEmpty(title)) {
         throw new GoodsEvaluateException(1, "相关参数不能为空");
      }
      if (info == null) {
      List<GoodsEvaluate> evaluateList = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO, goodsId);
      if (evaluateList != null && evaluateList.size() > 0)
         return;
      TaoBaoGoodsBrief goodsBrief = null;
      try {
         goodsBrief = redisManager.getTaoBaoGoodsBrief(Long.parseLong(goodsId));
      } catch (TaobaoGoodsDownException e) {
         throw new GoodsEvaluateException(1, "商品已下架");
      }
      try {
         GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
         goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
         ActivityUser user = info.getUser();
         goodsEvaluate.setUser(user);
         goodsEvaluate.setState(1);
         goodsEvaluate.setDynamicType(1);
         goodsEvaluate.setType(EvaluateEnum.single);
         goodsEvaluate.setLineNum(2);
         goodsEvaluate.setShareNum(info.getShareCount());
         goodsEvaluate.setShareNumReal(0);
         goodsEvaluate.setPublishTime(info.getCreateTime());
         goodsEvaluate.setCreateTime(new Date());
         goodsEvaluate.setUpdateTime(new Date());
         goodsEvaluate.setWeight(0.0);
         goodsEvaluate.setStartTime(new Date());
         goodsEvaluate.setEndTime(DateUtil.plusDayDate(3, new Date()));
      if (goodsBrief == null) {
         throw new GoodsEvaluateException(1, "未找到商品信息");
      }
         List<ClientTextStyleVO> titles = info.getTitle();
         if (titles != null) {
            goodsEvaluate.setTitle(info.getTitle().get(0).getContent());
         } else {
            goodsEvaluate.setTitle("");
         }
      BigDecimal couponAmount = goodsBrief.getCouponAmount();
      if (couponAmount == null || couponAmount.compareTo(new BigDecimal(0)) < 1) {
         throw new GoodsEvaluateException(1, "该商品无券");
      }
         List<ImgInfo> imgList = new ArrayList<>();
      // 白底图
      List<String> imgs = new ArrayList<>();
      if (!StringUtil.isNullOrEmpty(goodsBrief.getPictUrlWhite())) {
         imgs.add(goodsBrief.getPictUrlWhite());
      }
      imgs.addAll(goodsBrief.getImgList());
         List<GoodsPicture> imgs = info.getImgs();
         for (GoodsPicture goodsPicture : imgs) {
      // 商品VO
      ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, paramsDTO);
      // 商品图片信息
      int i = 0;
      if (imgList == null || imgList.size() == 0)
         for (String img : imgs) {
            ImgInfo imgInfo = new ImgInfo();
            imgInfo.setH(1);
            imgInfo.setW(1);
            imgInfo.setLarge(false);
            imgInfo.setUrl(goodsPicture.getUrl());
            imgInfo.setUrlHD(goodsPicture.getUrl());
            GoodsDetailVO goodsVO = goodsPicture.getGoodsVO();
            if (goodsVO == null) {
            imgInfo.setUrl(img);
            imgInfo.setUrlHD(img);
            if (i != 0) {
               imgInfo.setType(ImgEnum.img);
            } else {
               imgInfo.setType(ImgEnum.goods);
@@ -1893,43 +1985,73 @@
                  simpleGoods.setAmount(couponInfo.getAmount());
               }
               imgInfo.setGoods(simpleGoods);
               TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsVO.getGoodsId(), "0");
//               TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(Constant.LINK_TOKEN_VERIFY_UID, goodsVO.getGoodsId(), null);
               String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
               String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
               commentText = commentText.replace("[原价]", goodsVO.getZkPrice().toString());
               if (!goodsVO.isHasCoupon()) {
                  commentText = commentText.replace("领券抢购", "抢购");
                  commentText = commentText.replace("【券后价】[券后价]元", "");
               } else {
                  commentText = commentText.replace("[券后价]", goodsVO.getCouponPrice().toString());
               }
               commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n")
                     .replace("\r\n\r\n", "\r\n");
               CommentInfo commentInfo = new CommentInfo();
               commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
               commentInfo.setContent(commentText);
               commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
               commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
               List<CommentInfo> commentsNew = new ArrayList<>();
               commentsNew.add(commentInfo);
               goodsEvaluate.setComments(commentsNew);
               goodsEvaluate.setGoods(goodsVO);
               imgInfo.setGoodsVO(goodsVO);
            }
            imgList.add(imgInfo);
            i++;
         }
         goodsEvaluate.setImgList(imgList);
         goodsEvaluateDao.save(goodsEvaluate);
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      // 评论内容
      CommentInfo commentInfo = new CommentInfo();
      commentInfo.setNeedSpin(true);
      commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
      commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
      if (!StringUtil.isNullOrEmpty(comment)) {
         commentInfo.setContent(comment);
         commentInfo.setType("");
      } else {
         String token = shareGoodsService.createTaoBaoToken(Constant.LINK_TOKEN_VERIFY_UID, goodsBrief);
         String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
         String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(token));
         if (!goodsVO.isHasCoupon()) {
            commentText = commentText.replace("领券抢购", "抢购");
            commentText = commentText.replace("【券后价】[券后价]元", "");
            commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n",
                  "\r\n");
         }
         commentInfo.setContent(commentText);
         commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
      }
      List<CommentInfo> commentsNew = new ArrayList<>();
      commentsNew.add(commentInfo);
      // 一行显示多少个图片
      int lineNum = 0;
      if (imgList.size() > 0) {
         if (imgList.size() == 1) {
            lineNum = 1;
         } else if (imgList.size() == 3) {
            lineNum = 3;
         } else if (imgList.size() == 2 || imgList.size() == 4) {
            lineNum = 2;
         } else {
            lineNum = 3;
         }
      }
      GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
      goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
      goodsEvaluate.setUser(user);
      goodsEvaluate.setTitle(getDescNew(title));
      goodsEvaluate.setState(1);
      goodsEvaluate.setDynamicType(1);
      goodsEvaluate.setType(EvaluateEnum.single);
      goodsEvaluate.setShareNum((int) (Math.random() * 5000) + 1000);
      goodsEvaluate.setShareNumReal(0);
      goodsEvaluate.setWeight(0.0);
      if (startTime == null)
         startTime = new Date();
      goodsEvaluate.setStartTime(startTime);
      goodsEvaluate.setEndTime(DateUtil.plusDayDate(3, new Date()));
      goodsEvaluate.setPublishTime(new Date());
      goodsEvaluate.setCreateTime(new Date());
      goodsEvaluate.setUpdateTime(new Date());
      goodsEvaluate.setGoods(goodsVO);
      goodsEvaluate.setLineNum(lineNum);
      goodsEvaluate.setImgList(imgList);
      goodsEvaluate.setComments(commentsNew);
      goodsEvaluateDao.save(goodsEvaluate);
   }
   @Override
@@ -1941,7 +2063,7 @@
         for (GoodsEvaluate goodsEvaluate : listExist) {
            GoodsDetailVO goods = goodsEvaluate.getGoods();
            if (goods != null && goods.getGoodsType() == 1) {
               listId.add(goods.getGoodsId());
               listId.add(Long.parseLong(goods.getGoodsId()));
            }
         }
      }
@@ -1975,7 +2097,7 @@
            return false;
         }
         ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate("android", "55");
         ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
         paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
         GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, paramsDTO);
         // 发布用户
@@ -2039,20 +2161,6 @@
         }
         imgs.addAll(goodsimgs);
         int lineNum = 0;
         if (imgs.size() > 0) {
            if (imgs.size() == 1) {
               lineNum = 1;
            } else if (imgs.size() == 3) {
               lineNum = 3;
            } else if (imgs.size() <= 4) {
               lineNum = 2;
            } else {
               lineNum = 3;
            }
         }
         goodsEvaluate.setLineNum(lineNum);
         int i = 0;
         List<ImgInfo> imgList = new ArrayList<>();
         for (String img : imgs) {
@@ -2088,18 +2196,15 @@
               String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
               String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(token));
               commentText = commentText.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goodsVO.getZkPrice())+"");
               if (!goodsVO.isHasCoupon()) {
                  commentText = commentText.replace("领券抢购", "抢购");
                  commentText = commentText.replace("【券后价】[券后价]元", "");
               } else {
                  commentText = commentText.replace("[券后价]", MoneyBigDecimalUtil.getWithNoZera(goodsVO.getCouponPrice())+"");
                  commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n")
                        .replace("\r\n\r\n", "\r\n");
               }
               commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n")
                     .replace("\r\n\r\n", "\r\n");
               CommentInfo commentInfo = new CommentInfo();
               commentInfo.setNeedSpin(true);
               commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
               commentInfo.setContent(commentText);
               commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
@@ -2115,32 +2220,46 @@
               if (!StringUtil.isNullOrEmpty(evaluateText)) {
                  text2 += evaluateText;
               }
               String dtitle = daTaoKe.getDtitle();
               if (!StringUtil.isNullOrEmpty(dtitle)) {
                  text2 = text2 + dtitle +"\n";
                  text2 = text2 + dtitle + "\n";
               } else if (!StringUtil.isNullOrEmpty(evaluateText)) {
                  text2 += "\n";
               }
               text2 += "先领【"+ couponAmount +"元优惠券】下单";
               text2 += "先领【" + couponAmount + "元优惠券】下单";
               CommentInfo commentInfo2 = new CommentInfo();
               commentInfo2.setId(UUID.randomUUID().toString().replace("-", ""));
               commentInfo2.setContent(text2);
               commentInfo2.setTypeEnum(CommentInfoEnum.goodsCoupon);
               commentInfo2.setType("");
               commentInfo2.setNeedSpin(true);
               List<CommentInfo> commentsNew = new ArrayList<>();
               commentsNew.add(commentInfo);
               commentsNew.add(commentInfo2);
               goodsEvaluate.setComments(commentsNew);
               goodsEvaluate.setGoods(goodsVO);
            }
            imgList.add(imgInfo);
            i++;
         }
         int lineNum = 0;
         if (imgList.size() > 0) {
            if (imgList.size() == 1) {
               lineNum = 1;
            } else if (imgList.size() == 3) {
               lineNum = 3;
            } else if (imgList.size() == 2 || imgList.size() == 4) {
               lineNum = 2;
            } else {
               lineNum = 3;
            }
         }
         goodsEvaluate.setLineNum(lineNum);
         goodsEvaluate.setGoods(goodsVO);
         goodsEvaluate.setImgList(imgList);
         goodsEvaluateDao.save(goodsEvaluate);
      } catch (Exception e) {
@@ -2151,165 +2270,145 @@
      return true;
   }
   private String getDesc(String desc) {
      System.out.println(desc);
      String newDesc = "";
      int emoji = 0;
      String content = desc.replace(",", ",");
      while (content.length() > 0) {
         int length = 0;
         boolean end = true;
         for (int i = 0; i < content.length(); i++) {
            if (content.substring(0, i).length() >= 18) {
               length = i;
               end = false;
               break;
            }
         }
         if (end) {
            length = content.length();
         }
         String introduce = content.substring(0, length);
         System.out.println(introduce);
         if (verify(introduce)) {
            if (emoji >= 4) {
               introduce = introduce.replace(",", "\n"); // 需要换行
   /**
    * 发圈标题 加入表情
    * @param desc
    * @return
    */
   private String getDescNew(String desc) {
      String[] split = desc.split(",");
      int max = 1;
      if (Math.random() > 0.5) {
         max = 2;
      }
      int e = 0;
      String emojis = "";
      String descNew = "";
      if (split.length > 0) {
         for (int i = 0; i < split.length; i++) {
            if (Math.random() > 0.5 && e < max) {
               for (int j = 0; j < 10; j++) {
                  String emojisTemp = DaTaoKeUtil.getEvaluateEmojis();
                  if (!emojis.equals(emojisTemp)) {
                     emojis = emojisTemp;
                     break;
                  }
               }
               e++;
               descNew += split[i] + emojis;
            } else {
               emoji++;
               introduce = introduce.replace(",", DaTaoKeUtil.getRandomCommonEmoji() + "\n"); // 需要换行
               descNew += split[i] + ",";
            }
         }
         // 随机替换emoji
         if (emoji <= 4 && Math.random() > 0.5) {
            introduce = introduce.replace(",", DaTaoKeUtil.getRandomCommonEmoji());
            emoji++;
         }
         newDesc += introduce;
         content = content.substring(length);
      } else {
         descNew = desc;
      }
      return newDesc;
      if (descNew.endsWith(",")) {
         descNew = descNew.substring(0, descNew.length() - 1);
      }
      return descNew;
   }
   private boolean verify(String content) {
      // 18个字符内(包含标点也算一个字符)有多个逗号,则不换行
      char d = ',';
      int count = 0;
      char chs[] = content.toCharArray();// 转换成char数组
      for (int i = 0; i < chs.length; i++) {
         if (d == chs[i]) {
            count++;
         }
      }
      if (count > 1) {
         return false;
      }
      // 书名号,大括号,小括号里面的内容不换行
      if (content.contains("[") && content.contains("]")) {
         return false;
      } else if (content.contains("【") && content.contains("】")) {
         return false;
      } else if (content.contains("{") && content.contains("}")) {
         return false;
      } else if (content.contains("(") && content.contains(")")) {
         return false;
      }
      int index = content.lastIndexOf(",");
      // (除开逗号以外的符号)感叹号/句号/问号前面有逗号,不换行
      if (content.contains("!") && index < content.lastIndexOf("!")) {
         return false;
      }
      if (content.contains("!") && index < content.lastIndexOf("!")) {
         return false;
      }
      if (content.contains("。") && index < content.lastIndexOf("。")) {
         return false;
      }
      if (content.contains("?") && index < content.lastIndexOf("?")) {
         return false;
      }
      if (content.contains("?") && index < content.lastIndexOf("?")) {
         return false;
      }
      if (content.contains(":")) {
         return false;
      }
      return true;
   }
   @Override
   public void updateTaoBaoGoods(TaoBaoGoodsBrief goods) {
      try {
         if (goods == null) {
            return;
         }
         List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO, goods.getAuctionId());
         List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO,
               goods.getAuctionId()+"");
         if (queryExist == null || queryExist.size() == 0) {
            return;
         }
         ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate("android", "55");
         ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
         paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
         GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
         updateGoods(queryExist, goodsNew);
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   @Override
   public void updateJDGoods(JDGoods jdGoods) {
      if (jdGoods == null) {
         return;
      }
      List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_JD, jdGoods.getSkuId());
      List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_JD, jdGoods.getSkuId()+"");
      if (queryExist == null || queryExist.size() == 0) {
         return;
      }
      ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate("android", "55");
      ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertJDGoods(jdGoods, paramsDTO);
      updateGoods(queryExist, goodsNew);
   }
   @Override
   public void updatePDDGoods(PDDGoodsDetail pddGoods) {
      if (pddGoods == null) {
         return;
      }
      List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_PDD, pddGoods.getGoodsId());
      List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_PDD, pddGoods.getGoodsId()+"");
      if (queryExist == null || queryExist.size() == 0) {
         return;
      }
      ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate("android", "55");
      ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
      updateGoods(queryExist, goodsNew);
   }
   @Override
   public void updateVIPGoods(VIPGoodsInfo goods) {
      if (goods == null) {
         return;
      }
      List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_VIP,
            goods.getGoodsId());
      if (queryExist == null || queryExist.size() == 0) {
         return;
      }
      ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertVIPGoods(goods, paramsDTO);
      updateGoods(queryExist, goodsNew);
   }
   @Override
   public void updateSuningGoods(SuningGoodsInfo goods) {
      if (goods == null) {
         return;
      }
      List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_SUNING,
            goods.getCommodityInfo().getCommodityCode());
      if (queryExist == null || queryExist.size() == 0) {
         return;
      }
      ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertSuningGoods(goods, paramsDTO);
      updateGoods(queryExist, goodsNew);
   }
   private void updateGoods(List<GoodsEvaluate> listExist, GoodsDetailVO goodsNew) {
      long goodsId = goodsNew.getGoodsId();
      String goodsId = goodsNew.getGoodsId();
      int goodsType = goodsNew.getGoodsType();
      for (GoodsEvaluate goodsEvaluate: listExist) {
      for (GoodsEvaluate goodsEvaluate : listExist) {
         GoodsDetailVO goodsDetailVO = goodsEvaluate.getGoods();
         if (goodsDetailVO != null && goodsDetailVO.getGoodsId() != null
            && goodsDetailVO.getGoodsId() == goodsId && goodsDetailVO.getGoodsType() == goodsType) {
         if (goodsDetailVO != null && goodsDetailVO.getGoodsId() != null && goodsDetailVO.getGoodsId().equalsIgnoreCase(goodsId)
               && goodsDetailVO.getGoodsType() == goodsType) {
            goodsEvaluate.setGoods(goodsNew);
         }
         // 更新商品信息
         List<ImgInfo> imgList = goodsEvaluate.getImgList();
         if (imgList == null || imgList.size() == 0) {
@@ -2318,12 +2417,11 @@
         for (ImgInfo imgInfo : imgList) {
            SimpleGoods simpleGoods = imgInfo.getGoods();
            if (simpleGoods == null || simpleGoods.getGoodsId() != goodsId
            if (simpleGoods == null || !simpleGoods.getGoodsId().equalsIgnoreCase(goodsId)
                  || goodsType != simpleGoods.getGoodsType()) {
               continue;
            }
            simpleGoods.setState(0);
            simpleGoods.setPrice(goodsNew.getCouponPrice());
            CouponInfoVO couponInfo = goodsNew.getCouponInfo();
@@ -2333,18 +2431,77 @@
               simpleGoods.setPrice(goodsNew.getCouponPrice());
               simpleGoods.setAmount(couponInfo.getAmount());
            }
            imgInfo.setGoods(simpleGoods);
            imgInfo.setGoodsVO(goodsNew);
         }
         goodsEvaluate.setImgList(imgList);
         goodsEvaluate.setUpdateTime(new Date());
         goodsEvaluateDao.save(goodsEvaluate);
      }
   }
   @Override
   public void offlineTaoBaoGoods(String goodsId) {
      try {
         if (goodsId == null) {
            return;
         }
         List<GoodsEvaluate> list = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO,goodsId);
         if (list == null || list.size() == 0) {
            return;
         }
         // 下架商品
         offlineGoods(list, Constant.SOURCE_TYPE_TAOBAO, goodsId);
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   @CacheEvict(value = "dynamicCache", allEntries = true)
   private void offlineGoods(List<GoodsEvaluate> list, int goodsType, String goodsId) {
      for (GoodsEvaluate goodsEvaluate : list) {
         // 商品下架
         GoodsDetailVO goodsDetailVO = goodsEvaluate.getGoods();
         goodsDetailVO.setState(1);
         List<ImgInfo> imgList = goodsEvaluate.getImgList();
         if (imgList == null || imgList.size() == 0) {
            goodsEvaluate.setUpdateTime(new Date());
            goodsEvaluateDao.save(goodsEvaluate);
            continue;
         }
         for (ImgInfo imgInfo : imgList) {
            SimpleGoods simpleGoods = imgInfo.getGoods();
            if (simpleGoods == null || simpleGoods.getGoodsId() != goodsId
                  || goodsType != simpleGoods.getGoodsType()) {
               continue;
            }
            simpleGoods.setState(1);
            GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
            goodsVO.setState(1);
            imgInfo.setGoods(simpleGoods);
            imgInfo.setGoodsVO(goodsVO);
         }
         goodsEvaluate.setImgList(imgList);
         goodsEvaluate.setUpdateTime(new Date());
         goodsEvaluateDao.save(goodsEvaluate);
      }
   }
   /**
    * 删除已过期时间
    */
   private void removeOverdue() {
      if (1 > 0)
         return;
      List<GoodsEvaluate> list = goodsEvaluateDao.queryOverdue();
      if (list == null || list.size() == 0) {
         return;
@@ -2352,16 +2509,47 @@
      long nm = 1000 * 60;// 一分钟的毫秒数
      long nh = 1000 * 60 * 60;// 一小时的毫秒数
      long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
      long time = java.lang.System.currentTimeMillis();
      for (GoodsEvaluate goodsEvaluate: list) {
      for (GoodsEvaluate goodsEvaluate : list) {
         long diff = time - goodsEvaluate.getEndTime().getTime();
         long min = diff % nd % nh / nm;
         long min = diff % nd % nh / nm;
         // 过期超过10分钟就删除
         if (min > 10) {
            goodsEvaluateDao.remove(goodsEvaluate);
         }
      }
   }
   /**
    * 删除商品已下架-单品
    */
   private void removeDownGoods() {
      if (1 > 0)
         return;
      try {
         List<GoodsEvaluate> list = goodsEvaluateDao.removeDownGoods();
         if (list == null || list.size() == 0) {
            return;
         }
         for (GoodsEvaluate goodsEvaluate : list) {
            goodsEvaluateDao.remove(goodsEvaluate);
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   @Override
   public GoodsEvaluate queryExistSingle(String goodsId, int goodsType) {
      List<GoodsEvaluate> list = goodsEvaluateDao.queryExistSingle(goodsType, goodsId);
      if (list != null && list.size() > 0)
         return list.get(0);
      return null;
   }
}