admin
2020-05-06 24a8d17e007545f7426c48352109aa1a9c6587ee
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -1,6 +1,8 @@
package com.yeshi.fanli.service.impl.dynamic;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
@@ -14,13 +16,15 @@
import javax.annotation.Resource;
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;
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.ImageCropUtil;
import org.yeshi.utils.tencentcloud.COSManager;
import com.yeshi.fanli.dao.dynamic.GoodsEvaluateDao;
@@ -28,12 +32,11 @@
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.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;
@@ -41,27 +44,33 @@
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.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.exception.dynamic.ActivityUserException;
import com.yeshi.fanli.exception.dynamic.GoodsEvaluateException;
import com.yeshi.fanli.exception.goods.ConvertLinkExceptionException;
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.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;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.FilePathEnum;
import com.yeshi.fanli.util.FileUtil;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
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.DaTaoKeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.vo.goods.CouponInfoVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
@@ -81,40 +90,66 @@
   @Resource
   private HongBaoManageService hongBaoManageService;
   @Resource
   private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
   @Resource
   private JDGoodsCacheUtil jdGoodsCacheUtil;
   @Resource
   private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
   @Resource
   private ConfigService configService;
   @Resource
   private ShareGoodsService shareGoodsService;
   @Resource
   private ConvertLinkManager convertLinkManager;
   @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 {
      Integer state = record.getState();
      if (state == null) {
         state = 0;
      }
      record.setState(state);
      String tilte = record.getTitle();
      if (StringUtil.isNullOrEmpty(tilte)) {
         throw new GoodsEvaluateException(1, "推荐语不能为空");
      }
      try {
         ActivityUser activityUser = activityUserService.getActivityUserByNickName(record.getUser(), file);
         if (activityUser == null)
@@ -128,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();
@@ -136,8 +175,8 @@
         record.setDynamicType(1);
      }
      if (record.getShareNum() == null || record.getShareNum() <=0 ) {
         record.setShareNum((int)(Math.random()*5000)+1000);
      if (record.getShareNum() == null || record.getShareNum() <= 0) {
         record.setShareNum((int) (Math.random() * 5000) + 1000);
      }
      if (record.getWeight() == null)
@@ -145,7 +184,7 @@
      if (record.getStartTime() == null)
         record.setStartTime(new Date());
      record.setPublishTime(record.getStartTime());
      String id = record.getId();
@@ -154,18 +193,21 @@
         record.setId(id);
         record.setShareNumReal(0);
         record.setCreateTime(new Date());
         record.setUpdateTime(new Date());
         goodsEvaluateDao.save(record);
      } else {
         GoodsEvaluate resultObj = goodsEvaluateDao.getById(id);
         if (resultObj == null)
            throw new GoodsEvaluateException(1, "修改内容已不存在");
         resultObj.setState(record.getState());
         resultObj.setUser(record.getUser());
         resultObj.setShareNum(record.getShareNum());
         resultObj.setWeight(record.getWeight());
         resultObj.setStartTime(record.getStartTime());
         resultObj.setEndTime(record.getEndTime());
         resultObj.setTitle(tilte);
         resultObj.setUpdateTime(new Date());
         goodsEvaluateDao.save(resultObj);
      }
      return id;
@@ -187,6 +229,39 @@
      return COSManager.getInstance().uploadFile(inputStream, filePath).getUrl();
   }
   private ImgInfo uploadVideoPicture(MultipartFile filevideo) {
      try {
         File tempFile = new File(FileUtil.getCacheDir() + "/" + filevideo.getOriginalFilename());
         if (tempFile.exists())
            tempFile.delete();
         tempFile.createNewFile();
         filevideo.transferTo(tempFile);
         File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getOriginalFilename());
         // 裁剪视频封面,宽高比为2:1
         ImageCropUtil.centerCrop(tempFile, destFile, 2.0f);
         BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
         ImgInfo info = new ImgInfo();
         int width = sourceImg.getWidth();
         int height = sourceImg.getHeight();
         String picLink = uploadPicture(destFile, filevideo.getContentType());
         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);
      String filePath = FilePathEnum.goodsEvaluate.getPath() + UUID.randomUUID().toString().replace("-", "") + "."
            + type;
      return COSManager.getInstance().uploadFile(inputStream, filePath).getUrl();
   }
   /**
    * 删除图片
    * 
@@ -200,7 +275,7 @@
   }
   @Override
   public void saveSingleGoods(String pid, Long goodsId, Integer goodsType, String videoUrl, Integer picNum,
   public String saveSingleGoods(String pid, Long goodsId, Integer goodsType, String videoUrl, Integer picNum,
         String picUrls, MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
@@ -223,10 +298,10 @@
            ImgEnum type = info.getType();
            if (type == ImgEnum.video) {
               imgVideo = info;
            } else if (type == ImgEnum.goods ) {
            } else if (type == ImgEnum.goods) {
               listOld.add(info.getUrl());
               oldGoodsVO = info.getGoodsVO();
            } else if (type == ImgEnum.img){
            } else if (type == ImgEnum.img) {
               listOld.add(info.getUrl());
            }
         }
@@ -239,31 +314,28 @@
            if (StringUtil.isNullOrEmpty(videoUrl)) {
               throw new GoodsEvaluateException(1, "视频链接不能为空");
            }
            InputStream inputStream = filevideo.getInputStream();
            BufferedImage sourceImg = ImageIO.read(inputStream);
            int width = sourceImg.getWidth();
            int height = sourceImg.getHeight();
            String picLink = uploadPicture(filevideo);
            ImgInfo info = uploadVideoPicture(filevideo);
            if (info == null)
               throw new GoodsEvaluateException(2, "视频图片上传失败");
            if (imgVideo != null) {
               String url = imgVideo.getUrl();
               if (!StringUtil.isNullOrEmpty(url)) {
                  listDel.add(url);
               }
               imgVideo.setUrl(picLink);
               imgVideo.setUrlHD(picLink);
               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(picLink);
               imgVideo.setUrlHD(picLink);
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
               imgVideo.setVideoUrl(videoUrl);
               imgVideo.setType(ImgEnum.video);
            }
            imgVideo.setW(width);
            imgVideo.setH(height);
            imgVideo.setW(info.getW());
            imgVideo.setH(info.getH());
         }
      }
@@ -284,21 +356,28 @@
      }
      // 编辑图片
      List<String> listpic = null;
      List<String> listpic = new ArrayList<>();
      if (!StringUtil.isNullOrEmpty(picUrls)) {
         String[] pics = picUrls.split(",");
         if (pics != null) {
            listpic = new ArrayList<>();
            for (int i = 0; i < pics.length; i++) {
               String picLink = pics[i];
               if (fileRequest != null) {
                  MultipartFile file = fileRequest.getFile("file" + i);
                  if (file != null) {
                     picLink = uploadPicture(file);
                  }
               }
               if (picLink.startsWith("http")) {
                  listpic.add(picLink);
               }
            }
         }
      }
      // 上传文件替换
      if (fileRequest != null) {
         for (int i = 0; i < 9; i++) {
            MultipartFile file = fileRequest.getFile("file" + i);
            if (file != null) {
               String picLink = uploadPicture(file);
               if (i < listpic.size()) {
                  listpic.set(i, picLink);
               } else {
                  listpic.add(picLink);
               }
            }
@@ -313,10 +392,8 @@
      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);
      ConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         try {
            TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
@@ -331,7 +408,7 @@
         pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
         goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(pddGoods, params);
      }
      if (goodsDetailVO == null) {
         throw new GoodsEvaluateException(1, "该商品信息不存在");
      }
@@ -372,7 +449,7 @@
            totalImg++;
         }
      }
      if (tempList.size() > 0) {
         listImg.addAll(tempList);
      }
@@ -396,7 +473,9 @@
      if (totalImg > 0) {
         if (totalImg == 1) {
            lineNum = 1;
         } else if (totalImg <= 4) {
         } else if (totalImg == 3) {
            lineNum = 3;
         } else if (totalImg == 2 || totalImg == 4) {
            lineNum = 2;
         } else {
            lineNum = 3;
@@ -407,31 +486,31 @@
      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 && comments.size() > 0) {
         for (CommentInfo commentInfo: comments) {
         for (CommentInfo commentInfo : comments) {
            if (commentInfo.getTypeEnum() == CommentInfoEnum.goodsCoupon) {
               if (oldGoodsVO != null && oldGoodsVO.getGoodsId().longValue() == goodsId.longValue()
               if (oldGoodsVO != null && oldGoodsVO.getGoodsId().longValue() == goodsId.longValue()
                     && oldGoodsVO.getGoodsType() == goodsType) {
                  addComment = false;
               }
               }
               continue;
            }
            }
            commentsNew.add(commentInfo);
         }
      }
      }
      /*
       * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 = goodsDetailVO.getCouponInfo(); if
       * (couponInfo1 == null) { addComment = false; }
       * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 =
       * goodsDetailVO.getCouponInfo(); if (couponInfo1 == null) { addComment
       * = false; }
       */
      String commentText = "";
      if (addComment) {
         String commentText = "";
         if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsId, "0");
            String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
@@ -443,33 +522,45 @@
               couponUrl = couponInfo.getLink();
            }
            String materialId = "https://item.jd.com/" + goodsId + ".html";
            String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "","1");
            String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl,
                  JDApiUtil.POSITION_SHARE + "", "1");
            String template = configService.get(ConfigKeyEnum.quickShareJDCommentText.getKey());
            commentText = template.replace("[链接]", jumpLink);
            if (jumpLink == null) {
               throw new GoodsEvaluateException(1, "该商品转链失败");
            }
            commentText = template.replace("[链接]", jumpLink);
         } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", "1");
            if (jumpLink == null) {
               throw new GoodsEvaluateException(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");
         // 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);
      }
      resultObj.setUpdateTime(new Date());
      goodsEvaluateDao.save(resultObj);
      // 删除图片
@@ -480,14 +571,51 @@
            }
         }
      }
      return commentText;
   }
   private String createTokenAndLink(GoodsDetailVO goodsDetailVO) throws Exception {
      String commentText = "";
      if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
         TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, 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());
         JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
         if (couponInfo != null) {
            couponUrl = couponInfo.getLink();
         }
         String materialId = "https://item.jd.com/" + goodsDetailVO.getGoodsId() + ".html";
         String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
               "1");
         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(),
               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());
      }
      return commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
   }
   public GoodsDetailVO getGoodsDetailVO(Long goodsId, Integer goodsType) throws GoodsEvaluateException {
      GoodsDetailVO goodsDetail = null;
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      BigDecimal vipFanLiRate = hongBaoManageService.getVIPFanLiRate();
      ConfigParamsDTO params = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE, vipFanLiRate);
      ConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         try {
            TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
@@ -546,31 +674,29 @@
               throw new GoodsEvaluateException(1, "视频链接不能为空");
            }
            InputStream inputStream = filevideo.getInputStream();
            BufferedImage sourceImg = ImageIO.read(inputStream);
            int width = sourceImg.getWidth();
            int height = sourceImg.getHeight();
            ImgInfo info = uploadVideoPicture(filevideo);
            if (info == null)
               throw new GoodsEvaluateException(2, "视频图片上传失败");
            String picLink = uploadPicture(filevideo);
            if (imgVideo != null) {
               String url = imgVideo.getUrl();
               if (!StringUtil.isNullOrEmpty(url)) {
                  listDel.add(url);
               }
               imgVideo.setUrl(picLink);
               imgVideo.setUrlHD(picLink);
               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(picLink);
               imgVideo.setUrlHD(picLink);
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
               imgVideo.setVideoUrl(videoUrl);
               imgVideo.setType(ImgEnum.video);
            }
            imgVideo.setW(width);
            imgVideo.setH(height);
            imgVideo.setW(info.getW());
            imgVideo.setH(info.getH());
         }
      }
@@ -603,7 +729,6 @@
               }
               String picUrl = goodsDetailVO.getPicUrl();
               if (fileRequest != null) {
                  MultipartFile file = fileRequest.getFile("file" + i);
                  if (file != null) {
@@ -634,7 +759,7 @@
               }
               imgInfo0.setGoods(simpleGoods);
               imgInfo0.setGoodsVO(goodsDetailVO);
               listImg.add(imgInfo0);
               totalImg++;
            }
@@ -683,7 +808,9 @@
      if (totalImg > 0) {
         if (totalImg == 1) {
            lineNum = 1;
         } else if (totalImg <= 4) {
         } else if (totalImg == 3) {
            lineNum = 3;
         } else if (totalImg == 2 || totalImg == 4) {
            lineNum = 2;
         } else {
            lineNum = 3;
@@ -707,77 +834,88 @@
   }
   @Override
   public void saveGoodsCoupon(String pid, String content) throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
   public void saveGoodsComment(String id, int kind, List<CommentInfo> comments)
         throws GoodsEvaluateException, Exception {
      if (comments == null || comments.size() == 0) {
         throw new GoodsEvaluateException(1, "内容不能为空");
      }
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(id);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
      CommentInfo goodsCoupon = null;
      GoodsDetailVO goods = resultObj.getGoods();
      if (kind == 1 && goods == null) {
         throw new GoodsEvaluateException(1, "请先录入商品信息");
      }
      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()) {
         for (int i = 0; i < oldComments.size(); i++) {
            CommentInfo info = oldComments.get(i);
            if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
               currencyCoupon = info;
               continue;
            }
         }
      }
      List<CommentInfo> comments = new ArrayList<>();
      if (!StringUtil.isNullOrEmpty(content)) {
         if(!StringUtil.isNullOrEmpty(content)) {
      List<CommentInfo> newList = new ArrayList<>();
      for (int i = 0; i < comments.size(); i++) {
         CommentInfo commentInfo = comments.get(i);
         String content = commentInfo.getContent();
         if (StringUtil.isNullOrEmpty(content)) {
            if (i == 0 && kind == 1) {
               content = createTokenAndLink(goods);
            } else {
               continue;
            }
         } else if (i == 0 && kind == 1) {
            try {
               convertLinkManager.convertLinkFromText(content, 1L, true);
               convertLinkManager.convertLinkFromText(content, Constant.LINK_TOKEN_VERIFY_UID, true);
            } catch (Exception e) {
               throw new GoodsEvaluateException(1, "不包含可转链的口令与链接");
            }
         }
         CommentInfo commentInfo = new CommentInfo();
         if (goodsCoupon != null) {
            commentInfo.setId(goodsCoupon.getId());
         } else {
         if (StringUtil.isNullOrEmpty(commentInfo.getId())) {
            commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
         }
         commentInfo.setContent(content);
         commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
         commentInfo.setNeedSpin(true);
         commentInfo.setType(commentInfo.getTags());
         commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
         comments.add(commentInfo);
         newList.add(commentInfo);
      }
      if (currencyCoupon != null) {
         comments.add(currencyCoupon);
      }
      resultObj.setComments(comments);
      resultObj.setUpdateTime(new Date());
      goodsEvaluateDao.save(resultObj);
   }
   @Override
   public void saveSingleGoodsCoupon(String pid, CommentInfo commentInfo) throws GoodsEvaluateException, Exception {
   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) ) {
      if (StringUtil.isNullOrEmpty(tagUrl) && StringUtil.isNullOrEmpty(content)) {
         throw new GoodsEvaluateException(1, "评论语和链接不能同时为空");
      }
@@ -792,35 +930,38 @@
      } else {
         throw new GoodsEvaluateException(1, "请填写券截止时间");
      }
      if(!StringUtil.isNullOrEmpty(content)) {
         try {
            convertLinkManager.convertLinkFromText(content, 1L, true);
         } catch (Exception e) {
            throw new GoodsEvaluateException(1, "不包含可转链的口令与链接");
         }
      if (commentInfo.getNeedSpin() == null) {
         commentInfo.setNeedSpin(false);
      }
      
      if (!StringUtil.isNullOrEmpty(content) && commentInfo.getNeedSpin()) {
         try {
            convertLinkManager.convertLinkFromText(content, Constant.LINK_TOKEN_VERIFY_UID, true);
         } catch (ConvertLinkExceptionException e) {
            if (ConvertLinkExceptionException.CODE_NONE != e.getCode()) {
               throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
            }
         } catch (Exception e) {
            throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
         }
      }
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
      CommentInfo goodsCoupon = null;
      List<CommentInfo> comments = new ArrayList<>();
      CommentInfo currencyCoupon = null;
      List<CommentInfo> oldComments = resultObj.getComments();
      if (oldComments != null) {
         for (CommentInfo info : oldComments) {
            if (CommentInfoEnum.goodsCoupon == info.getTypeEnum()) {
               goodsCoupon = info;
               comments.add(info);
            } else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
               currencyCoupon = info;
            }
         }
      }
      List<CommentInfo> comments = new ArrayList<>();
      if (goodsCoupon != null) {
         comments.add(goodsCoupon);
      }
      if (commentInfo != null) {
@@ -830,15 +971,10 @@
            commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
         }
         // 券类型
         String tags = commentInfo.getTags();
         if (StringUtil.isNullOrEmpty(tags)) {
            commentInfo.setType(CommentInfoEnum.currencyCoupon.getDesc());
         } else {
            commentInfo.setType(tags);
         }
         commentInfo.setType(commentInfo.getTags());
         commentInfo.setTypeEnum(CommentInfoEnum.currencyCoupon);
         // 标签信息
         List<ClientTextStyleVO> tagList = new ArrayList<>();
         String couponSource = commentInfo.getCouponSource();
@@ -861,7 +997,6 @@
      }
      resultObj.setComments(comments);
      goodsEvaluateDao.save(resultObj);
   }
@@ -903,12 +1038,12 @@
         if (filevideo != null) {
            removePicture(videoPic);
            InputStream inputStream = filevideo.getInputStream();
            BufferedImage sourceImg = ImageIO.read(inputStream);
            width = sourceImg.getWidth();
            height = sourceImg.getHeight();
            String picLink = uploadPicture(filevideo);
            videoPic = picLink;
            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");
@@ -948,6 +1083,7 @@
         listImg.add(imgVideo);
      }
      int totalImg = 0;
      if (!StringUtil.isNullOrEmpty(activityPic) || !StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
         if (imgactivity != null) {
            imgactivity.setUrl(activityPic);
@@ -971,8 +1107,23 @@
            imgactivity.setH(imgactivity.getH());
         }
         listImg.add(imgactivity);
         totalImg++;
      }
      resultObj.setLineNum(1);
      int lineNum = 0;
      if (totalImg > 0) {
         if (totalImg == 1) {
            lineNum = 1;
         } else if (totalImg == 3) {
            lineNum = 3;
         } else if (totalImg == 2 || totalImg == 4) {
            lineNum = 2;
         } else {
            lineNum = 3;
         }
      }
      resultObj.setLineNum(lineNum);
      resultObj.setImgList(listImg);
      goodsEvaluateDao.save(resultObj);
   }
@@ -1022,31 +1173,28 @@
            if (StringUtil.isNullOrEmpty(videoUrl)) {
               throw new GoodsEvaluateException(1, "视频链接不能为空");
            }
            InputStream inputStream = filevideo.getInputStream();
            BufferedImage sourceImg = ImageIO.read(inputStream);
            int width = sourceImg.getWidth();
            int height = sourceImg.getHeight();
            String picLink = uploadPicture(filevideo);
            ImgInfo info = uploadVideoPicture(filevideo);
            if (info == null)
               throw new GoodsEvaluateException(2, "视频图片上传失败");
            if (imgVideo != null) {
               String url = imgVideo.getUrl();
               if (!StringUtil.isNullOrEmpty(url)) {
                  listDel.add(url);
               }
               imgVideo.setUrl(picLink);
               imgVideo.setUrlHD(picLink);
               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(picLink);
               imgVideo.setUrlHD(picLink);
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
               imgVideo.setVideoUrl(videoUrl);
               imgVideo.setType(ImgEnum.video);
            }
            imgVideo.setW(width);
            imgVideo.setH(height);
            imgVideo.setW(info.getW());
            imgVideo.setH(info.getH());
         }
         activityFile = fileRequest.getFile("activityFile");
@@ -1093,45 +1241,50 @@
      }
      // 编辑图片
      List<String> listpic = new ArrayList<>();
      if (!StringUtil.isNullOrEmpty(picUrls)) {
         String[] pics = picUrls.split(",");
         if (pics != null) {
            for (int i = 0; i < pics.length; i++) {
               String picLink = pics[i];
               if (fileRequest != null) {
                  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);
                     imgInfo0.setPid(pid);
                     imgInfo0.setUrl(picLink);
                     imgInfo0.setUrlHD(picLink);
                     imgInfo0.setType(ImgEnum.img);
                     imgVideo.setW(1);
                     imgVideo.setH(1);
                     listImg.add(imgInfo0);
                     continue;
                  }
               }
               if (picLink.startsWith("http")) {
                  if (listOldImgInfo != null) {
                     for (ImgInfo imgInfo : listOldImgInfo) {
                        String url = imgInfo.getUrl();
                        if (picLink.equals(url)) {
                           listImg.add(imgInfo);
                           break;
                        }
                     }
                  }
                  listpic.add(picLink);
               }
            }
         }
      }
      // 上传文件替换
      if (fileRequest != null) {
         for (int i = 0; i < 9; i++) {
            MultipartFile file = fileRequest.getFile("file" + i);
            if (file != null) {
               String picLink = uploadPicture(file);
               if (i < listpic.size()) {
                  listpic.set(i, picLink);
               } else {
                  listpic.add(picLink);
               }
            }
         }
      }
      int totalImg = 0;
      for (String pic : listpic) {
         ImgInfo imgInfo0 = new ImgInfo();
         imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
         imgInfo0.setLarge(false);
         imgInfo0.setPid(pid);
         imgInfo0.setUrl(pic);
         imgInfo0.setUrlHD(pic);
         imgInfo0.setType(ImgEnum.img);
         imgInfo0.setW(1);
         imgInfo0.setH(1);
         listImg.add(imgInfo0);
         totalImg++;
      }
      // 清理老图片
      if (listOld != null && listOld.size() > 0) {
         for (int j = 0; j < listOld.size(); j++) {
            boolean del = true;
@@ -1146,7 +1299,21 @@
               listDel.add(listOld.get(j));
         }
      }
      resultObj.setLineNum(1);
      int lineNum = 0;
      if (totalImg > 0) {
         if (totalImg == 1) {
            lineNum = 1;
         } else if (totalImg == 3) {
            lineNum = 3;
         } else if (totalImg == 2 || totalImg == 4) {
            lineNum = 2;
         } else {
            lineNum = 3;
         }
      }
      resultObj.setLineNum(lineNum);
      resultObj.setImgList(listImg);
      goodsEvaluateDao.save(resultObj);
@@ -1301,6 +1468,43 @@
   }
   @Override
   public void addRanDomShareCount() {
      // 发圈
      try {
         List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(0, Integer.MAX_VALUE, 1);
         if (list != null) {
            for (GoodsEvaluate goodsEvaluate : list) {
               Integer shareNum = goodsEvaluate.getShareNum();
               if (shareNum == null) {
                  shareNum = 0;
               }
               goodsEvaluate.setShareNum(shareNum + (int) (Math.random() * 100) + 10);
               goodsEvaluateDao.save(goodsEvaluate);
            }
         }
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
      // 素材
      try {
         List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(0, Integer.MAX_VALUE, 2);
         if (list != null) {
            for (GoodsEvaluate goodsEvaluate : list) {
               Integer shareNum = goodsEvaluate.getShareNum();
               if (shareNum == null) {
                  shareNum = 0;
               }
               goodsEvaluate.setShareNum(shareNum + (int) (Math.random() * 100) + 10);
               goodsEvaluateDao.save(goodsEvaluate);
            }
         }
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
   }
   @Override
   @Cacheable(value = "dynamicCache", key = "'queryValidEvaluateCache-'+#start")
   public List<GoodsEvaluate> queryValidEvaluateCache(int start, int count) {
      List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(start, count, 1);
@@ -1309,7 +1513,13 @@
      executor.execute(new Runnable() {
         @Override
         public void run() {
            // 更新信息
            updateGoodInfo(list);
            // 删除已过期
            removeOverdue();
            removeDownGoods();
         }
      });
@@ -1325,102 +1535,164 @@
   @Cacheable(value = "dynamicCache", key = "'queryMaterialsCache-'+#start+'-'+#type")
   public List<GoodsEvaluate> queryMaterialsCache(int start, int count, int type) throws Exception {
      List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(start, count, type);
      if (list == null) {
         list = new ArrayList<>();
      }
      Date now = new Date();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      List<GoodsEvaluate> listNew = new ArrayList<>();
      for (GoodsEvaluate goodsEvaluate : list) {
         GoodsEvaluate evaluateNew = new GoodsEvaluate();
         try {
            PropertyUtils.copyProperties(evaluateNew, goodsEvaluate);
         } catch (Exception e) {
            e.printStackTrace();
            continue;
         }
         // 按照发布显示时间段起始时间为准。
         goodsEvaluate.setPublishTime(goodsEvaluate.getStartTime());
         List<CommentInfo> comments = evaluateNew.getComments();
         if (comments != null && comments.size() > 0) {
            EvaluateEnum typeEnum = evaluateNew.getType();
            List<CommentInfo> commentNew = new ArrayList<>();
            boolean singleCoupn = true;
            boolean currencyCoupon = true;
            for (CommentInfo commentInfo : comments) {
               if (StringUtil.isNullOrEmpty(commentInfo.getContent())
                     && StringUtil.isNullOrEmpty(commentInfo.getCoupon())) {
                  continue;
               }
               CommentInfo commentInfoNew = new CommentInfo();
               try {
                  PropertyUtils.copyProperties(commentInfoNew, commentInfo);
               } catch (Exception e) {
                  e.printStackTrace();
                  continue;
               }
               if (typeEnum != null && typeEnum == EvaluateEnum.single) {
                  GoodsDetailVO goods = evaluateNew.getGoods();
                  if (goods != null) {
                     String content = commentInfoNew.getContent();
                     if (!StringUtil.isNullOrEmpty(content)) {
                        content = content.replace("[原价]",
                              MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "");
                        if (goods.isHasCoupon()) {
                           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();
                  if (goods != null && goods.isHasCoupon()) {
                     commentNew.add(commentInfoNew);
                     continue;
                  }
               }
               String coupon = commentInfoNew.getCoupon();
               String endTime = commentInfoNew.getEndTime();
               if (!StringUtil.isNullOrEmpty(coupon) && !StringUtil.isNullOrEmpty(endTime)) {
                  Date endDay = sdf.parse(endTime);
                  if (endDay.getTime() > now.getTime()) {
                     String daysBetween = DateUtil.dateDiff5(now, endDay);
                     if (!StringUtil.isNullOrEmpty(daysBetween)) {
                        List<ClientTextStyleVO> tagListNew = new ArrayList<>();
                        List<ClientTextStyleVO> tagList = commentInfoNew.getTagList();
                        if (tagList != null) {
                           tagListNew.addAll(tagList);
                        }
                        ClientTextStyleVO styleVO = new ClientTextStyleVO();
                        styleVO.setColor("#E5005C");
                        styleVO.setContent(daysBetween + "后过期");
                        tagListNew.add(styleVO);
                        commentInfoNew.setTagList(tagListNew);
                        commentNew.add(commentInfoNew);
                        continue;
                     } else {
                        currencyCoupon = false;
                        continue;
                     }
                  } else {
                     currencyCoupon = false;
                     continue;
                  }
               }
               commentNew.add(commentInfoNew);
            }
            evaluateNew.setComments(commentNew);
            if (typeEnum != null && typeEnum == EvaluateEnum.single) {
               if (!currencyCoupon && !singleCoupn) { // 所有券评论下架
                  GoodsDetailVO goods = evaluateNew.getGoods();
                  if (goods != null) {
                     goods.setState(1); // 评论不存在 下架
                     evaluateNew.setRemarks("评论验证下架");
                  }
                  List<ImgInfo> imgList = evaluateNew.getImgList();
                  if (imgList != null) {
                     for (ImgInfo imgInfo : imgList) {
                        SimpleGoods simpleGoods = imgInfo.getGoods();
                        if (simpleGoods != null) {
                           simpleGoods.setState(1);
                           simpleGoods.setRemarks("评论验证下架");
                        }
                     }
                  }
               }
            }
         }
         listNew.add(evaluateNew);
      }
      List<GoodsEvaluate> listOBJ = list;
      // 更新商品信息
      executor.execute(new Runnable() {
         @Override
         public void run() {
            updateGoodInfo(listOBJ);
            // 删除已过期
            removeOverdue();
            removeDownGoods();
         }
      });
      if (list == null) {
         list = new ArrayList<>();
      }
      Date now = new Date();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      for (GoodsEvaluate goodsEvaluate: list) {
         int comment = 0;
         List<CommentInfo> comments = goodsEvaluate.getComments();
         if (comments != null && comments.size() > 0) {
            EvaluateEnum typeEnum = goodsEvaluate.getType();
            List<CommentInfo> commentNew = new ArrayList<>();
            for (CommentInfo commentInfo: comments) {
               comment ++;
               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("通用优惠券");
               }
               CommentInfoEnum typeComment = commentInfo.getTypeEnum();
               if (typeComment != null && typeComment ==CommentInfoEnum.goodsCoupon) {
                  GoodsDetailVO goods = goodsEvaluate.getGoods();
                  if (goods.isHasCoupon()) {
                     commentNew.add(commentInfo);
                     continue;
                  }
               }
               String coupon = commentInfo.getCoupon();
               String endTime = commentInfo.getEndTime();
               if (!StringUtil.isNullOrEmpty(coupon) && !StringUtil.isNullOrEmpty(endTime)) {
                  Date endDay = sdf.parse(endTime);
                  if (endDay.getTime() > now.getTime()) {
                     int daysBetween = DateUtil.daysBetween(endDay, now);
                     if (daysBetween > 0) {
                        ClientTextStyleVO styleVO = new ClientTextStyleVO();
                        styleVO.setColor("#E5005C");
                        styleVO.setContent(daysBetween + "天后过期");
                        styleVO.setContent(coupon);
                        List<ClientTextStyleVO> tagList = commentInfo.getTagList();
                        tagList.add(styleVO);
                        commentInfo.setTagList(tagList);
                        commentNew.add(commentInfo);
                     }
                  }
               }
            }
            goodsEvaluate.setComments(commentNew);
            if (typeEnum != null && typeEnum == EvaluateEnum.single) {
               if (comment > 0 && commentNew.size() == 0) { // 所有券评论下架
                   GoodsDetailVO goods = goodsEvaluate.getGoods();
                   if (goods != null) {
                      goods.setState(1); // 评论不存在 下架
                      LogHelper.test("获取列表商品下架1");
                   }
                   List<ImgInfo> imgList = goodsEvaluate.getImgList();
                   if (imgList != null) {
                     for (ImgInfo imgInfo: imgList) {
                        SimpleGoods simpleGoods = imgInfo.getGoods();
                        if (simpleGoods != null) {
                           simpleGoods.setState(1);
                            LogHelper.test("获取列表商品下架2");
                        }
                     }
                   }
                }
            }
         }
      }
      return list;
      return listNew;
   }
   @Override
@@ -1443,11 +1715,8 @@
      try {
         Date now = new Date();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
         BigDecimal shareRate = hongBaoManageService.getShareRate();
         BigDecimal vipFanLiRate = hongBaoManageService.getVIPFanLiRate();
         ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE,
               vipFanLiRate);
         ConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
         params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
         for (GoodsEvaluate goodsEvaluate : list) {
            // 是否2个小时之内已更新
            Date updateTime = goodsEvaluate.getUpdateTime();
@@ -1463,12 +1732,12 @@
            }
            EvaluateEnum type = goodsEvaluate.getType();
            if (type != null &&  type == EvaluateEnum.activity) {
            if (type != null && type == EvaluateEnum.activity) {
               List<CommentInfo> comments = goodsEvaluate.getComments();
               if (comments != null) {
                  for (CommentInfo commentInfo: comments) {
                  for (CommentInfo commentInfo : comments) {
                     CommentInfoEnum commentInfoEnum = commentInfo.getTypeEnum();
                     if (commentInfoEnum != null && commentInfoEnum== CommentInfoEnum.currencyCoupon) {
                     if (commentInfoEnum != null && commentInfoEnum == CommentInfoEnum.currencyCoupon) {
                        String endTime = commentInfo.getEndTime();
                        if (!StringUtil.isNullOrEmpty(endTime)) {
                           Date endDay = sdf.parse(endTime);
@@ -1477,17 +1746,18 @@
                           }
                        }
                     }
                  }
               }
            }
            GoodsDetailVO goods = goodsEvaluate.getGoods();
            if (goods != null) {
               GoodsDetailVO goodsNew = getGoodsNewInfo(goods.getGoodsId(), goods.getGoodsType(), paramsDTO);
               GoodsDetailVO goodsNew = getGoodsNewInfo(goods.getGoodsId(), goods.getGoodsType(), params);
               if (goodsNew != null) {
                  goodsEvaluate.setGoods(goodsNew);
               } else {
                  goodsEvaluate.setRemarks("更新-位置找到商品信息");
                  goodsEvaluate.setState(0); // 已商品下架
                  goods.setState(1);
                  goodsEvaluate.setGoods(goods);
@@ -1506,7 +1776,7 @@
               }
               GoodsDetailVO goodsDetailVO = getGoodsNewInfo(simpleGoods.getGoodsId(), simpleGoods.getGoodsType(),
                     paramsDTO);
                     params);
               if (goodsDetailVO != null) {
                  simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                  simpleGoods.setState(0);
@@ -1520,6 +1790,7 @@
                  imgInfo.setGoods(simpleGoods);
                  imgInfo.setGoodsVO(goodsDetailVO);
               } else {
                  simpleGoods.setRemarks("更新-位置找到商品信息");
                  simpleGoods.setState(1);
                  imgInfo.setGoods(simpleGoods);
                  GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
@@ -1529,7 +1800,7 @@
                  }
               }
            }
            goodsEvaluate.setImgList(imgList);
            goodsEvaluate.setUpdateTime(new Date());
            goodsEvaluateDao.save(goodsEvaluate);
         }
@@ -1550,7 +1821,7 @@
         } catch (TaobaoGoodsDownException e) {
            e.printStackTrace();
         }
      } else if (goodsType == Constant.SOURCE_TYPE_JD) {
         JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
         if (goodsInfo != null) {
@@ -1565,45 +1836,55 @@
   }
   @Override
   public void addGoodsEvaluateByDynamicInfo(DynamicInfo info) {
   public void addGoodsEvaluate(Long 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, "相关参数不能为空");
      }
      List<GoodsEvaluate> evaluateList = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO, goodsId);
      if (evaluateList != null && evaluateList.size() > 0)
         return;
      TaoBaoGoodsBrief goodsBrief = null;
      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()));
         goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
      } catch (TaobaoGoodsDownException e) {
         throw new GoodsEvaluateException(1, "商品已下架");
      }
         List<ClientTextStyleVO> titles = info.getTitle();
         if (titles != null) {
            goodsEvaluate.setTitle(info.getTitle().get(0).getContent());
         } else {
            goodsEvaluate.setTitle("");
         }
      if (goodsBrief == null) {
         throw new GoodsEvaluateException(1, "未找到商品信息");
      }
         List<ImgInfo> imgList = new ArrayList<>();
      BigDecimal couponAmount = goodsBrief.getCouponAmount();
      if (couponAmount == null || couponAmount.compareTo(new BigDecimal(0)) < 1) {
         throw new GoodsEvaluateException(1, "该商品无券");
      }
         List<GoodsPicture> imgs = info.getImgs();
         for (GoodsPicture goodsPicture : imgs) {
      // 白底图
      List<String> imgs = new ArrayList<>();
      if (!StringUtil.isNullOrEmpty(goodsBrief.getPictUrlWhite())) {
         imgs.add(goodsBrief.getPictUrlWhite());
      }
      imgs.addAll(goodsBrief.getImgList());
      // 商品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);
@@ -1619,41 +1900,522 @@
                  simpleGoods.setAmount(couponInfo.getAmount());
               }
               imgInfo.setGoods(simpleGoods);
               TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsVO.getGoodsId(), null);
               imgInfo.setGoodsVO(goodsVO);
            }
            imgList.add(imgInfo);
            i++;
         }
      // 评论内容
      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
   public void addGoodsEvaluateByDaTaoKe() {
      List<Long> listId = null;
      List<GoodsEvaluate> listExist = goodsEvaluateDao.querySingleExist();
      if (listExist != null && listExist.size() > 0) {
         listId = new ArrayList<Long>();
         for (GoodsEvaluate goodsEvaluate : listExist) {
            GoodsDetailVO goods = goodsEvaluate.getGoods();
            if (goods != null && goods.getGoodsType() == 1) {
               listId.add(goods.getGoodsId());
            }
         }
      }
      // 热销单品的分类
      List<GoodsClass> listClass = DaTaoKeUtil.goodsClasses;
      int ci = (int) (Math.random() * listClass.size());
      Long subId = listClass.get(ci).getId();
      List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Service.getGoodsNotInList(subId, listId, 1);
      if (list == null || list.size() == 0) {
         return;
      }
      for (int i = 0; i < list.size(); i++) {
         boolean cerateGoods = cerateGoods(list.get(i));
         if (cerateGoods) {
            break;
         }
      }
   }
   private boolean cerateGoods(DaTaoKeDetailV2 daTaoKe) {
      try {
         TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(daTaoKe.getGoodsId());
         if (goodsBrief == null) {
            return false;
         }
         BigDecimal couponAmount = goodsBrief.getCouponAmount();
         if (couponAmount == null || couponAmount.compareTo(new BigDecimal(0)) < 1) {
            return false;
         }
         ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
         paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
         GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, paramsDTO);
         // 发布用户
         ActivityUser user = activityUserService.getRandomByDaTaoKeCid(daTaoKe.getCid());
         String desc = daTaoKe.getDesc().replace(",", ",");
         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 {
                  descNew += split[i] + ",";
               }
            }
         } else {
            descNew = desc;
         }
         if (descNew.endsWith(",")) {
            descNew = descNew.substring(0, descNew.length() - 1);
         }
         GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
         goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
         goodsEvaluate.setUser(user);
         goodsEvaluate.setTitle(descNew);
         goodsEvaluate.setState(1);
         goodsEvaluate.setDynamicType(1);
         goodsEvaluate.setType(EvaluateEnum.single);
         goodsEvaluate.setShareNum((int) (Math.random() * 5000) + 1000);
         goodsEvaluate.setShareNumReal(0);
         goodsEvaluate.setWeight(0.0);
         goodsEvaluate.setStartTime(new Date());
         goodsEvaluate.setEndTime(DateUtil.plusDayDate(3, new Date()));
         goodsEvaluate.setPublishTime(new Date());
         goodsEvaluate.setCreateTime(new Date());
         goodsEvaluate.setUpdateTime(new Date());
         List<String> goodsimgs = goodsBrief.getImgList();
         List<String> imgs = new ArrayList<>();
         if (!StringUtil.isNullOrEmpty(goodsBrief.getPictUrlWhite())) {
            imgs.add(goodsBrief.getPictUrlWhite());
         }
         imgs.addAll(goodsimgs);
         int i = 0;
         List<ImgInfo> imgList = new ArrayList<>();
         for (String img : imgs) {
            ImgInfo imgInfo = new ImgInfo();
            imgInfo.setH(1);
            imgInfo.setW(1);
            imgInfo.setLarge(false);
            imgInfo.setUrl(img);
            imgInfo.setUrlHD(img);
            if (i != 0) {
               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);
               imgInfo.setGoodsVO(goodsVO);
               // TaoBaoLink taoBaoLink =
               // shareGoodsService.getTaoBaoLinkForShare(Constant.LINK_TOKEN_VERIFY_UID,
               // goodsVO.getGoodsId(), null);
               String token = shareGoodsService.createTaoBaoToken(Constant.LINK_TOKEN_VERIFY_UID, goodsBrief);
               String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
               String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
               commentText = commentText.replace("[原价]", goodsVO.getZkPrice().toString());
               String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(token));
               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");
                  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);
               commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
               String text2 = "";
               String evaluateEmojis = configService.get(ConfigKeyEnum.evaluateEmojis.getKey());
               if (!StringUtil.isNullOrEmpty(evaluateEmojis)) {
                  text2 = evaluateEmojis + "\n";
               }
               String evaluateText = configService.get(ConfigKeyEnum.evaluateText.getKey());
               if (!StringUtil.isNullOrEmpty(evaluateText)) {
                  text2 += evaluateText;
               }
               String dtitle = daTaoKe.getDtitle();
               if (!StringUtil.isNullOrEmpty(dtitle)) {
                  text2 = text2 + dtitle + "\n";
               } else if (!StringUtil.isNullOrEmpty(evaluateText)) {
                  text2 += "\n";
               }
               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) {
         e.printStackTrace();
         LogHelper.errorDetailInfo(e);
         return false;
      }
      return true;
   }
   /**
    * 发圈标题 加入表情
    * @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 {
               descNew += split[i] + ",";
            }
         }
      } else {
         descNew = desc;
      }
      if (descNew.endsWith(",")) {
         descNew = descNew.substring(0, descNew.length() - 1);
      }
      return descNew;
   }
   @Override
   public void updateTaoBaoGoods(TaoBaoGoodsBrief goods) {
      try {
         if (goods == null) {
            return;
         }
         List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO,
               goods.getAuctionId());
         if (queryExist == null || queryExist.size() == 0) {
            return;
         }
         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());
      if (queryExist == null || queryExist.size() == 0) {
         return;
      }
      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());
      if (queryExist == null || queryExist.size() == 0) {
         return;
      }
      ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
      updateGoods(queryExist, goodsNew);
   }
   private void updateGoods(List<GoodsEvaluate> listExist, GoodsDetailVO goodsNew) {
      long goodsId = goodsNew.getGoodsId();
      int goodsType = goodsNew.getGoodsType();
      for (GoodsEvaluate goodsEvaluate : listExist) {
         GoodsDetailVO goodsDetailVO = goodsEvaluate.getGoods();
         if (goodsDetailVO != null && goodsDetailVO.getGoodsId() != null && goodsDetailVO.getGoodsId() == goodsId
               && goodsDetailVO.getGoodsType() == goodsType) {
            goodsEvaluate.setGoods(goodsNew);
         }
         // 更新商品信息
         List<ImgInfo> imgList = goodsEvaluate.getImgList();
         if (imgList == null || imgList.size() == 0) {
            continue;
         }
         for (ImgInfo imgInfo : imgList) {
            SimpleGoods simpleGoods = imgInfo.getGoods();
            if (simpleGoods == null || simpleGoods.getGoodsId() != goodsId
                  || goodsType != simpleGoods.getGoodsType()) {
               continue;
            }
            simpleGoods.setState(0);
            simpleGoods.setPrice(goodsNew.getCouponPrice());
            CouponInfoVO couponInfo = goodsNew.getCouponInfo();
            if (couponInfo == null) {
               simpleGoods.setPrice(goodsNew.getZkPrice());
            } else {
               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(Long 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, Long 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() {
      List<GoodsEvaluate> list = goodsEvaluateDao.queryOverdue();
      if (list == null || list.size() == 0) {
         return;
      }
      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) {
         long diff = time - goodsEvaluate.getEndTime().getTime();
         long min = diff % nd % nh / nm;
         // 过期超过10分钟就删除
         if (min > 10) {
            goodsEvaluateDao.remove(goodsEvaluate);
         }
      }
   }
   /**
    * 删除商品已下架-单品
    */
   private void removeDownGoods() {
      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();
      }
   }
}