yj
2020-03-04 b416c2ffd263ca9d191fc1109bd72d10f8c5176d
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -3,6 +3,7 @@
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -18,27 +19,38 @@
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.tencentcloud.COSManager;
import com.yeshi.fanli.dao.dynamic.GoodsEvaluateDao;
import com.yeshi.fanli.dto.ConfigParamsDTO;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
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;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
import com.yeshi.fanli.exception.dynamic.ActivityUserException;
import com.yeshi.fanli.exception.dynamic.GoodsEvaluateException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.activity.ActivityUserService;
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.config.HongBaoManageService;
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.RedisManager;
@@ -46,6 +58,10 @@
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
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.TaoBaoUtil;
import com.yeshi.fanli.vo.goods.CouponInfoVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
@@ -73,6 +89,17 @@
   @Resource
   private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
   @Resource
   private ConfigService configService;
   @Resource
   private ShareGoodsService shareGoodsService;
   @Resource
   private ConvertLinkManager convertLinkManager;
   @Override
   public String saveHead(MultipartFile file, GoodsEvaluate record) throws GoodsEvaluateException {
@@ -85,7 +112,7 @@
      if (StringUtil.isNullOrEmpty(tilte)) {
         throw new GoodsEvaluateException(1, "推荐语不能为空");
      }
      try {
         ActivityUser activityUser = activityUserService.getActivityUserByNickName(record.getUser(), file);
         if (activityUser == null)
@@ -107,7 +134,7 @@
      if (dynamicType == null) {
         record.setDynamicType(1);
      }
      if (record.getShareNum() == null)
         record.setShareNum(0);
@@ -186,17 +213,18 @@
      List<String> listOld = new ArrayList<String>();
      // 处理图片
      GoodsDetailVO oldGoodsVO = null;
      List<ImgInfo> resultList = resultObj.getImgList();
      if (resultList != null && resultList.size() > 0) {
         for (ImgInfo info : resultList) {
            ImgEnum type = info.getType();
            if (type == ImgEnum.video) {
               imgVideo = info;
            } else if (type == ImgEnum.goods || type == ImgEnum.img) {
               String url = info.getUrl();
               if (!StringUtil.isNullOrEmpty(url)) {
                  listOld.add(url);
               }
            } else if (type == ImgEnum.goods ) {
               listOld.add(info.getUrl());
               oldGoodsVO = info.getGoodsVO();
            } else if (type == ImgEnum.img){
               listOld.add(info.getUrl());
            }
         }
      }
@@ -212,7 +240,7 @@
            BufferedImage sourceImg = ImageIO.read(inputStream);
            int width = sourceImg.getWidth();
            int height = sourceImg.getHeight();
            String picLink = uploadPicture(filevideo);
            if (imgVideo != null) {
               String url = imgVideo.getUrl();
@@ -265,7 +293,7 @@
                  if (file != null) {
                     picLink = uploadPicture(file);
                  }
               }
               if (picLink.startsWith("http")) {
                  listpic.add(picLink);
@@ -279,11 +307,32 @@
         picNum = 1;
      }
      GoodsDetailVO goodsDetailVO = getGoodsDetailVO(goodsId, goodsType);;
      GoodsDetailVO goodsDetailVO = null;
      JDGoods jdGoods = null;
      PDDGoodsDetail pddGoods = null;
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      BigDecimal vipFanLiRate = hongBaoManageService.getVIPFanLiRate();
      ConfigParamsDTO params = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE, vipFanLiRate);
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         try {
            TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
            goodsDetailVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
         } catch (TaobaoGoodsDownException e) {
            throw new GoodsEvaluateException(1, "商品已下架");
         }
      } else if (goodsType == Constant.SOURCE_TYPE_JD) {
         jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
         goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(jdGoods, params);
      } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
         pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
         goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(pddGoods, params);
      }
      if (goodsDetailVO == null) {
         throw new GoodsEvaluateException(1, "该商品信息不存在");
      }
      int totalImg = 0;
      if (listpic != null && listpic.size() > 0) {
         for (int i = 0; i < listpic.size(); i++) {
@@ -299,17 +348,15 @@
            if (picNum - 1 == i) {
               imgInfo0.setType(ImgEnum.goods);
               SimpleGoods simpleGoods = new SimpleGoods();
               simpleGoods.setState(goodsDetailVO.getState());
               simpleGoods.setGoodsId(goodsId);
               simpleGoods.setGoodsType(goodsType);
               simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
               CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
               if (couponInfo == null) {
                  simpleGoods.setPrice(goodsDetailVO.getZkPrice());
                  simpleGoods.setState(1);
               } else {
                  simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                  simpleGoods.setAmount(couponInfo.getAmount());
                  simpleGoods.setState(0);
               }
               imgInfo0.setGoods(simpleGoods);
               imgInfo0.setGoodsVO(goodsDetailVO);
@@ -317,7 +364,7 @@
               imgInfo0.setType(ImgEnum.img);
            }
            listImg.add(imgInfo0);
            totalImg ++;
            totalImg++;
         }
      }
@@ -325,17 +372,17 @@
         for (int j = 0; j < listOld.size(); j++) {
            boolean del = true;
            String oldPic = listOld.get(j);
            for (ImgInfo imgInfo: listImg) {
            for (ImgInfo imgInfo : listImg) {
               String url = imgInfo.getUrl();
               if (url.equals(oldPic)) {
                  del = false;
               }
               }
            }
            if (del)
               listDel.add(listOld.get(j));
         }
      }
      int lineNum = 0;
      if (totalImg > 0) {
         if (totalImg == 1) {
@@ -346,11 +393,68 @@
            lineNum = 3;
         }
      }
      resultObj.setLineNum(lineNum);
      resultObj.setGoods(goodsDetailVO);
      resultObj.setMainPicNum(picNum);
      resultObj.setImgList(listImg);
      boolean addComment = true;
      List<CommentInfo> commentsNew = new ArrayList<>();
      List<CommentInfo> comments = resultObj.getComments();
      if (comments != null) {
         for (CommentInfo commentInfo: comments) {
            if (commentInfo.getTypeEnum() == CommentInfoEnum.goodsCoupon) {
               if (oldGoodsVO != null && oldGoodsVO.getGoodsId().longValue() == goodsId.longValue()
                     && oldGoodsVO.getGoodsType() == goodsType) {
                  addComment = false;
               }
               continue;
            }
            commentsNew.add(commentInfo);
         }
      }
      if (addComment) {
         String commentText = "";
         if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsId, "0");
            String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
            commentText = template.replace("[口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
         } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            String couponUrl = null;
            JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
            if (couponInfo != null) {
               couponUrl = couponInfo.getLink();
            }
            String materialId = "https://item.jd.com/" + goodsId + ".html";
            String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "","1");
            String template = configService.get(ConfigKeyEnum.quickShareJDCommentText.getKey());
            commentText = template.replace("[链接]", jumpLink);
         } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", "1");
            String template = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
            commentText = template.replace("[链接]", jumpLink);
         }
         commentText = commentText.replace("[原价]", goodsDetailVO.getZkPrice().toString());
         if (!goodsDetailVO.isHasCoupon()) {
            commentText = commentText.replace("领券抢购", "抢购");
            commentText = commentText.replace("【券后价】[券后价]元", "");
         } else {
            commentText = commentText.replace("[券后价]", goodsDetailVO.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);
         commentsNew.add(commentInfo);
         resultObj.setComments(commentsNew);
      }
      goodsEvaluateDao.save(resultObj);
      // 删除图片
@@ -427,7 +531,7 @@
            BufferedImage sourceImg = ImageIO.read(inputStream);
            int width = sourceImg.getWidth();
            int height = sourceImg.getHeight();
            String picLink = uploadPicture(filevideo);
            if (imgVideo != null) {
               String url = imgVideo.getUrl();
@@ -498,20 +602,21 @@
               imgInfo0.setType(ImgEnum.goods);
               SimpleGoods simpleGoods = new SimpleGoods();
               simpleGoods.setState(goodsDetailVO.getState());
               simpleGoods.setGoodsId(goodsDetailVO.getGoodsId());
               simpleGoods.setGoodsType(goodsDetailVO.getGoodsType());
               simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
               CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
               if (couponInfo == null) {
                  simpleGoods.setState(1);
                  simpleGoods.setPrice(goodsDetailVO.getZkPrice());
               } else {
                  simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                  simpleGoods.setAmount(couponInfo.getAmount());
                  simpleGoods.setState(0);
               }
               imgInfo0.setGoods(simpleGoods);
               imgInfo0.setGoodsVO(goodsDetailVO);
               listImg.add(imgInfo0);
               totalImg ++;
               totalImg++;
            }
         }
      }
@@ -564,9 +669,9 @@
            lineNum = 3;
         }
      }
      resultObj.setLineNum(lineNum);
      // 保存图片信息
      resultObj.setImgList(listImg);
      goodsEvaluateDao.save(resultObj);
@@ -582,7 +687,7 @@
   }
   @Override
   public void saveGoodsCoupon(String pid, String tags, String content) throws GoodsEvaluateException, Exception {
   public void saveGoodsCoupon(String pid, String content) throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
      }
@@ -595,15 +700,15 @@
      CommentInfo currencyCoupon = null;
      List<CommentInfo> oldComments = resultObj.getComments();
      if (oldComments != null) {
         for (CommentInfo info: oldComments) {
            if(CommentInfoEnum.goodsCoupon == info.getType()) {
         for (CommentInfo info : oldComments) {
            if (CommentInfoEnum.goodsCoupon == info.getTypeEnum()) {
               goodsCoupon = info;
            } else if (CommentInfoEnum.currencyCoupon == info.getType()) {
            } else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
               currencyCoupon = info;
            }
         }
      }
      List<CommentInfo> comments = new ArrayList<>();
      if (!StringUtil.isNullOrEmpty(content)) {
         CommentInfo commentInfo = new CommentInfo();
@@ -613,24 +718,57 @@
            commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
         }
         commentInfo.setContent(content);
         commentInfo.setType(CommentInfoEnum.goodsCoupon);
         commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
         commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
         comments.add(commentInfo);
      }
      if (currencyCoupon != null) {
         comments.add(currencyCoupon);
      }
      resultObj.setComments(comments);
      goodsEvaluateDao.save(resultObj);
   }
   @Override
   public void saveSingleGoodsCoupon(String pid, 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");
         }
      }
      if(!StringUtil.isNullOrEmpty(content)) {
         try {
            convertLinkManager.convertLinkFromText(content, 1L, true);
         } catch (Exception e) {
            throw new GoodsEvaluateException(1, "转链失败");
         }
      }
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
@@ -639,27 +777,35 @@
      CommentInfo currencyCoupon = null;
      List<CommentInfo> oldComments = resultObj.getComments();
      if (oldComments != null) {
         for (CommentInfo info: oldComments) {
            if(CommentInfoEnum.goodsCoupon == info.getType()) {
         for (CommentInfo info : oldComments) {
            if (CommentInfoEnum.goodsCoupon == info.getTypeEnum()) {
               goodsCoupon = info;
            } else if (CommentInfoEnum.currencyCoupon == info.getType()) {
            } else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
               currencyCoupon = info;
            }
         }
      }
      List<CommentInfo> comments = new ArrayList<>();
      if (goodsCoupon != null) {
         comments.add(goodsCoupon);
      }
      if (commentInfo != null) {
         if (currencyCoupon != null) {
            commentInfo.setId(currencyCoupon.getId());
         } else {
            commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
         }
         commentInfo.setType(CommentInfoEnum.currencyCoupon);
         // 券类型
         String tags = commentInfo.getTags();
         if (StringUtil.isNullOrEmpty(tags)) {
            commentInfo.setType(CommentInfoEnum.currencyCoupon.getDesc());
         } else {
            commentInfo.setType(tags);
         }
         commentInfo.setTypeEnum(CommentInfoEnum.currencyCoupon);
         
         // 标签信息
         List<ClientTextStyleVO> tagList = new ArrayList<>();
@@ -678,10 +824,10 @@
            tagList.add(styleVO);
         }
         commentInfo.setTagList(tagList);
         comments.add(commentInfo);
      }
      resultObj.setComments(comments);
      goodsEvaluateDao.save(resultObj);
@@ -724,7 +870,7 @@
         MultipartFile filevideo = fileRequest.getFile("filevideo");
         if (filevideo != null) {
            removePicture(videoPic);
            InputStream inputStream = filevideo.getInputStream();
            BufferedImage sourceImg = ImageIO.read(inputStream);
            width = sourceImg.getWidth();
@@ -800,8 +946,8 @@
   }
   @Override
   public void saveSuCai(String pid, String videoUrl, String picUrls,
         MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception {
   public void saveSuCai(String pid, String videoUrl, String picUrls, MultipartHttpServletRequest fileRequest)
         throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
      }
@@ -815,7 +961,7 @@
      ImgInfo imgActivity = null;
      List<String> listDel = new ArrayList<String>();
      List<String> listOld = new ArrayList<String>();
      List<ImgInfo> listOldImgInfo = new ArrayList<ImgInfo>();
      // 处理图片
      List<ImgInfo> resultList = resultObj.getImgList();
@@ -848,7 +994,7 @@
            BufferedImage sourceImg = ImageIO.read(inputStream);
            int width = sourceImg.getWidth();
            int height = sourceImg.getHeight();
            String picLink = uploadPicture(filevideo);
            if (imgVideo != null) {
               String url = imgVideo.getUrl();
@@ -870,8 +1016,7 @@
            imgVideo.setW(width);
            imgVideo.setH(height);
         }
         activityFile = fileRequest.getFile("activityFile");
      }
@@ -881,7 +1026,7 @@
            if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
               throw new GoodsEvaluateException(1, "视频封面图不能为空");
            }
            imgVideo.setVideoUrl(videoUrl);
            listImg.add(imgVideo);
         } else {
@@ -891,15 +1036,15 @@
            }
         }
      }
      if (activityFile != null) {
         InputStream inputStream = activityFile.getInputStream();
         BufferedImage sourceImg = ImageIO.read(inputStream);
         int width = sourceImg.getWidth();
         int height = sourceImg.getHeight();
         String picLink = uploadPicture(activityFile);
         ImgInfo activity = new ImgInfo();
         activity.setId(UUID.randomUUID().toString().replace("-", ""));
         activity.setLarge(true);
@@ -914,8 +1059,6 @@
      } else if (imgActivity != null) {
         listImg.add(imgActivity);
      }
      // 编辑图片
      if (!StringUtil.isNullOrEmpty(picUrls)) {
@@ -927,7 +1070,7 @@
                  MultipartFile file = fileRequest.getFile("file" + i);
                  if (file != null) {
                     picLink = uploadPicture(file);
                     ImgInfo imgInfo0 = new ImgInfo();
                     imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
                     imgInfo0.setLarge(true);
@@ -941,12 +1084,12 @@
                     continue;
                  }
               }
               if (picLink.startsWith("http")) {
                  if(listOldImgInfo != null) {
                     for (ImgInfo imgInfo:listOldImgInfo) {
                  if (listOldImgInfo != null) {
                     for (ImgInfo imgInfo : listOldImgInfo) {
                        String url = imgInfo.getUrl();
                        if (picLink.equals(url)){
                        if (picLink.equals(url)) {
                           listImg.add(imgInfo);
                           break;
                        }
@@ -961,11 +1104,11 @@
         for (int j = 0; j < listOld.size(); j++) {
            boolean del = true;
            String oldPic = listOld.get(j);
            for (ImgInfo imgInfo: listImg) {
            for (ImgInfo imgInfo : listImg) {
               String url = imgInfo.getUrl();
               if (url.equals(oldPic)) {
                  del = false;
               }
               }
            }
            if (del)
               listDel.add(listOld.get(j));
@@ -984,7 +1127,7 @@
         }
      }
   }
   @Override
   public void deleteBatchByPrimaryKey(List<String> list) {
      if (list == null || list.size() == 0) {
@@ -1056,7 +1199,7 @@
      goodsEvaluate.setComments(comments);
      goodsEvaluateDao.save(goodsEvaluate);
   }
   @Override
   public void release(String id) throws GoodsEvaluateException {
      GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(id);
@@ -1066,7 +1209,6 @@
      goodsEvaluate.setState(1);
      goodsEvaluateDao.save(goodsEvaluate);
   }
   @Override
   public void deleteComment(String pid, List<String> list) throws GoodsEvaluateException {
@@ -1146,18 +1288,72 @@
   public long countValid() {
      return goodsEvaluateDao.countValid(1);
   }
   @Override
   @Cacheable(value = "dynamicCache", key = "'queryMaterialsCache-'+#start+'-'+#type")
   public List<GoodsEvaluate> queryMaterialsCache(int start, int count, int type) {
   public List<GoodsEvaluate> queryMaterialsCache(int start, int count, int type) throws Exception {
      List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(start, count, type);
      List<GoodsEvaluate> listOBJ = list;
      // 更新商品信息
      executor.execute(new Runnable() {
         @Override
         public void run() {
            updateGoodInfo(list);
            updateGoodInfo(listOBJ);
         }
      });
      if (list == null) {
         list = new ArrayList<>();
      }
      for (GoodsEvaluate goodsEvaluate: list) {
         List<CommentInfo> comments = goodsEvaluate.getComments();
         if (comments != null) {
            Date now = new Date();
            for (CommentInfo commentInfo: comments) {
               String typeCoupon = commentInfo.getType();
               if (StringUtil.isNullOrEmpty(typeCoupon)) {
                  if (commentInfo.getTypeEnum() == null) {
                     commentInfo.setType("");
                  } else {
                     commentInfo.setType(commentInfo.getTypeEnum().getDesc());
                  }
               } else if (typeCoupon.equals(CommentInfoEnum.goodsCoupon.name())) {
                  commentInfo.setType("商品优惠券");
               } else if (typeCoupon.equals(CommentInfoEnum.currencyCoupon.name())) {
                  commentInfo.setType("通用优惠券");
               }
               String coupon = commentInfo.getCoupon();
               String endTime = commentInfo.getEndTime();
               if (!StringUtil.isNullOrEmpty(coupon) && !StringUtil.isNullOrEmpty(endTime)) {
                  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                  Date endDay = sdf.parse(endTime);
                  if (endDay.getTime() <= now.getTime()) {
                     continue;
                  }
                  int daysBetween = DateUtil.daysBetween(endDay, now);
                  if (daysBetween <= 0) {
                     continue;
                  }
                  ClientTextStyleVO styleVO = new ClientTextStyleVO();
                  styleVO.setColor("#E5005C");
                  styleVO.setContent(daysBetween + "天后过期");
                  styleVO.setContent(coupon);
                  List<ClientTextStyleVO> tagList = commentInfo.getTagList();
                  tagList.add(styleVO);
                  commentInfo.setTagList(tagList);
               }
            }
         }
      }
      return list;
   }
@@ -1201,38 +1397,49 @@
            GoodsDetailVO goods = goodsEvaluate.getGoods();
            if (goods != null) {
               GoodsDetailVO goodsNew = getGoodsNewInfo(goods.getGoodsId(), goods.getGoodsType(), paramsDTO);
               if (goodsNew != null)
               if (goodsNew != null) {
                  goodsEvaluate.setGoods(goodsNew);
               } else {
                  goods.setState(1);
                  goodsEvaluate.setGoods(goods);
               }
            }
            // 更新商品信息
            List<ImgInfo> imgList = goodsEvaluate.getImgList();
            if (imgList == null || imgList.size() == 0) {
               continue;
            }
            for (ImgInfo imgInfo: imgList) {
            for (ImgInfo imgInfo : imgList) {
               SimpleGoods simpleGoods = imgInfo.getGoods();
               if (simpleGoods == null) {
                  continue;
               }
               GoodsDetailVO goodsDetailVO = getGoodsNewInfo(simpleGoods.getGoodsId(), simpleGoods.getGoodsType(), paramsDTO);
               GoodsDetailVO goodsDetailVO = getGoodsNewInfo(simpleGoods.getGoodsId(), simpleGoods.getGoodsType(),
                     paramsDTO);
               if (goodsDetailVO != null) {
                  simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                  CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
                  if (couponInfo == null) {
                     simpleGoods.setPrice(goodsDetailVO.getZkPrice());
                     simpleGoods.setState(1);
                  } else {
                     simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                     simpleGoods.setAmount(couponInfo.getAmount());
                     simpleGoods.setState(0);
                  }
                  imgInfo.setGoods(simpleGoods);
                  imgInfo.setGoodsVO(goodsDetailVO);
               } else {
                  simpleGoods.setState(1);
                  imgInfo.setGoods(simpleGoods);
                  GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
                  if (goodsVO != null) {
                     goodsVO.setState(1);
                     imgInfo.setGoodsVO(goodsVO);
                  }
               }
            }
            goodsEvaluate.setUpdateTime(new Date());
            goodsEvaluateDao.save(goodsEvaluate);
         }
@@ -1258,5 +1465,95 @@
      return vo;
   }
}
   @Override
   public void addGoodsEvaluateByDynamicInfo(DynamicInfo info) {
      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.plusYears(new Date(), 100));
         List<ClientTextStyleVO> titles = info.getTitle();
         if (titles != null) {
            goodsEvaluate.setTitle(info.getTitle().get(0).getContent());
         } else {
            goodsEvaluate.setTitle("");
         }
         List<ImgInfo> imgList = new ArrayList<>();
         List<GoodsPicture> imgs = info.getImgs();
         for (GoodsPicture goodsPicture : 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.setType(ImgEnum.img);
            } else {
               imgInfo.setType(ImgEnum.goods);
               SimpleGoods simpleGoods = new SimpleGoods();
               simpleGoods.setGoodsId(goodsVO.getGoodsId());
               simpleGoods.setGoodsType(goodsVO.getGoodsType());
               simpleGoods.setState(goodsVO.getState());
               CouponInfoVO couponInfo = goodsVO.getCouponInfo();
               if (couponInfo == null) {
                  simpleGoods.setPrice(goodsVO.getZkPrice());
               } else {
                  simpleGoods.setPrice(goodsVO.getCouponPrice());
                  simpleGoods.setAmount(couponInfo.getAmount());
               }
               imgInfo.setGoods(simpleGoods);
               goodsEvaluate.setGoods(goodsVO);
               TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, 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);
            }
            imgList.add(imgInfo);
         }
         goodsEvaluate.setImgList(imgList);
         goodsEvaluateDao.save(goodsEvaluate);
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
   }
}