admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -1,36 +1,16 @@
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;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.UUID;
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.ImageCropUtil;
import org.yeshi.utils.tencentcloud.COSManager;
import com.yeshi.common.vo.ClientTextStyleVO;
import com.yeshi.fanli.dao.dynamic.GoodsEvaluateDao;
import com.yeshi.fanli.dto.ConfigParamsDTO;
import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.entity.SystemPIDInfo;
import com.yeshi.fanli.entity.bus.activity.ActivityRuleUser;
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
import com.yeshi.fanli.entity.dynamic.CommentInfo;
@@ -42,13 +22,13 @@
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.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.goods.ConvertLinkException;
import com.yeshi.fanli.exception.taobao.TaoBaoConvertLinkException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.lijin.manager.GoodsLijinMnager;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.activity.ActivityUserService;
import com.yeshi.fanli.service.inter.config.ConfigService;
@@ -56,2410 +36,2939 @@
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.PIDManager;
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.service.manger.goods.TaoBaoLinkManager;
import com.yeshi.fanli.service.manger.goods.tb.DaTaoKeTipOffManager;
import com.yeshi.fanli.util.*;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.goods.douyin.vo.DYGoods;
import com.yeshi.fanli.util.goods.douyin.vo.DYGoodsDetail;
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.DaTaoKeTipOffUtil;
import com.yeshi.fanli.util.taobao.DaTaoKeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.vo.goods.CouponInfoVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeListTopOffDTO;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.goods.facade.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.goods.facade.service.DaTaoKeGoodsDetailV2Service;
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.ImageCropUtil;
import org.yeshi.utils.MoneyBigDecimalUtil;
import org.yeshi.utils.TimeUtil;
import org.yeshi.utils.tencentcloud.COSManager;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
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;
import java.util.*;
@Service
public class GoodsEvaluateServiceImpl implements GoodsEvaluateService {
   @Resource
   private GoodsEvaluateDao goodsEvaluateDao;
    @Resource
    private GoodsEvaluateDao goodsEvaluateDao;
   @Resource
   private ActivityUserService activityUserService;
    @Resource
    private ActivityUserService activityUserService;
   @Resource
   private RedisManager redisManager;
    @Resource
    private RedisManager redisManager;
   @Resource
   private HongBaoManageService hongBaoManageService;
   @Resource
   private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
    @Resource
    private HongBaoManageService hongBaoManageService;
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
    @Resource
    private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
   @Resource
   private JDGoodsCacheUtil jdGoodsCacheUtil;
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
   @Resource
   private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
    @Resource
    private JDGoodsCacheUtil jdGoodsCacheUtil;
   @Resource
   private ConfigService configService;
    @Resource
    private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
   @Resource
   private ShareGoodsService shareGoodsService;
    @Resource
    private ConfigService configService;
   @Resource
   private ConvertLinkManager convertLinkManager;
    @Resource
    private ShareGoodsService shareGoodsService;
   @Resource
   private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
    @Resource
    private TaoBaoLinkManager taoBaoLinkManager;
   @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);
    @Resource
    private ConvertLinkManager convertLinkManager;
      String tilte = record.getTitle();
      if (StringUtil.isNullOrEmpty(tilte)) {
         throw new GoodsEvaluateException(1, "推荐语不能为空");
      }
    @Resource
    private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
      try {
         ActivityUser activityUser = activityUserService.getActivityUserByNickName(record.getUser(), file);
         if (activityUser == null)
            throw new GoodsEvaluateException(1, "请选择发布者");
         record.setUser(activityUser);
      } catch (ActivityUserException e) {
         throw new GoodsEvaluateException(1, e.getMsg());
      }
      if (record.getEndTime() != null) {
         if (record.getStartTime() != null && record.getEndTime().getTime() <= record.getStartTime().getTime())
            throw new GoodsEvaluateException(1, "截止时间必须大于开始时间");
      } else {
         if (record.getStartTime() == null) {
            record.setEndTime(DateUtil.plusDayDate(3, new Date()));
         } else {
            record.setEndTime(DateUtil.plusDayDate(3, record.getStartTime()));
         }
      }
    @Resource
    private PIDManager pidManager;
      Integer dynamicType = record.getDynamicType();
      if (dynamicType == null) {
         record.setDynamicType(1);
      }
    @Resource
    private GoodsLijinMnager goodsLijinMnager;
      if (record.getShareNum() == null || record.getShareNum() <= 0) {
         record.setShareNum((int) (Math.random() * 5000) + 1000);
      }
    @Override
    public void switchState(String id) throws GoodsEvaluateException {
        if (id == null) {
            throw new GoodsEvaluateException(1, "请传递正确参数");
        }
      if (record.getWeight() == null)
         record.setWeight(0.0);
        GoodsEvaluate resultObj = goodsEvaluateDao.getById(id);
        if (resultObj == null) {
            throw new GoodsEvaluateException(1, "此内容已不存在");
        }
      if (record.getStartTime() == null)
         record.setStartTime(new Date());
        Integer state = resultObj.getState();
        if (state == null || state == 0) {
            state = 1;
        } else {
            state = 0;
        }
        goodsEvaluateDao.updateSatate(id, state);
    }
      record.setPublishTime(record.getStartTime());
    @Override
    public String saveHead(MultipartFile file, GoodsEvaluate record) throws GoodsEvaluateException {
        Integer state = record.getState();
        if (state == null) {
            state = 0;
        }
        record.setState(state);
      String id = record.getId();
      if (StringUtil.isNullOrEmpty(id)) {
         id = UUID.randomUUID().toString().replace("-", "");
         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, "修改内容已不存在");
        String tilte = record.getTitle();
        if (StringUtil.isNullOrEmpty(tilte)) {
            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;
   }
        try {
            ActivityUser activityUser = activityUserService.getActivityUserByNickName(record.getUser(), file);
            if (activityUser == null)
                throw new GoodsEvaluateException(1, "请选择发布者");
            record.setUser(activityUser);
        } catch (ActivityUserException e) {
            throw new GoodsEvaluateException(1, e.getMsg());
        }
   /**
    * 上传图片
    *
    * @param file
    * @return
    * @throws Exception
    */
   private String uploadPicture(MultipartFile file) throws Exception {
      InputStream inputStream = file.getInputStream();
      String contentType = file.getContentType();
      String type = contentType.substring(contentType.indexOf("/") + 1);
      String filePath = FilePathEnum.goodsEvaluate.getPath() + UUID.randomUUID().toString().replace("-", "") + "."
            + type;
      return COSManager.getInstance().uploadFile(inputStream, filePath).getUrl();
   }
        if (record.getEndTime() != null) {
            if (record.getStartTime() != null && record.getEndTime().getTime() <= record.getStartTime().getTime())
                throw new GoodsEvaluateException(1, "截止时间必须大于开始时间");
        } else {
            if (record.getStartTime() == null) {
                record.setEndTime(DateUtil.plusDayDate(3, new Date()));
            } else {
                record.setEndTime(DateUtil.plusDayDate(3, record.getStartTime()));
            }
        }
   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;
   }
        Integer dynamicType = record.getDynamicType();
        if (dynamicType == null) {
            record.setDynamicType(1);
        }
   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();
   }
        if (record.getShareNum() == null || record.getShareNum() <= 0) {
            record.setShareNum((int) (Math.random() * 5000) + 1000);
        }
   /**
    * 删除图片
    *
    * @param record
    * @throws Exception
    */
   private void removePicture(String picture) throws Exception {
      if (picture != null && picture.trim().length() > 0) {
         COSManager.getInstance().deleteFile(picture);
      }
   }
        if (record.getWeight() == null)
            record.setWeight(0.0);
   @Override
   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, "请保存第一部分信息");
      }
        if (record.getStartTime() == null)
            record.setStartTime(new Date());
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
        record.setPublishTime(record.getStartTime());
      // 原封视频面图
      ImgInfo imgVideo = null;
      List<String> listDel = new ArrayList<String>();
      List<String> listOld = new ArrayList<String>();
        String id = record.getId();
        if (StringUtil.isNullOrEmpty(id)) {
            id = UUID.randomUUID().toString().replace("-", "");
            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, "修改内容已不存在");
      // 处理图片
      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) {
               listOld.add(info.getUrl());
               oldGoodsVO = info.getGoodsVO();
            } else if (type == ImgEnum.img) {
               listOld.add(info.getUrl());
            }
         }
      }
            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;
    }
      // 视频部分
      if (fileRequest != null) {
         MultipartFile filevideo = fileRequest.getFile("filevideo");
         if (filevideo != null) {
            if (StringUtil.isNullOrEmpty(videoUrl)) {
               throw new GoodsEvaluateException(1, "视频链接不能为空");
            }
            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(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
            } else {
               imgVideo = new ImgInfo();
               imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
               imgVideo.setLarge(true);
               imgVideo.setPid(pid);
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
               imgVideo.setVideoUrl(videoUrl);
               imgVideo.setType(ImgEnum.video);
            }
            imgVideo.setW(info.getW());
            imgVideo.setH(info.getH());
         }
      }
    /**
     * 上传图片
     *
     * @param file
     * @return
     * @throws Exception
     */
    private String uploadPicture(MultipartFile file) throws Exception {
        InputStream inputStream = file.getInputStream();
        String contentType = file.getContentType();
        String type = contentType.substring(contentType.indexOf("/") + 1);
        String filePath = FilePathEnum.goodsEvaluate.getPath() + UUID.randomUUID().toString().replace("-", "") + "."
                + type;
        return COSManager.getInstance().uploadFile(inputStream, filePath).getUrl();
    }
      List<ImgInfo> listImg = new ArrayList<ImgInfo>();
      if (imgVideo != null) {
         if (!StringUtil.isNullOrEmpty(videoUrl)) {
            if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
               throw new GoodsEvaluateException(1, "视频封面图不能为空");
            }
            imgVideo.setVideoUrl(videoUrl);
            listImg.add(imgVideo);
         } else {
            String url = imgVideo.getUrl();
            if (!StringUtil.isNullOrEmpty(url)) {
               listDel.add(url);
            }
         }
      }
    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;
    }
      // 编辑图片
      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 (picLink.startsWith("http")) {
                  listpic.add(picLink);
               }
            }
         }
      }
    private ImgInfo uploadOriginalPicture(MultipartFile file) {
        try {
            InputStream inputStream = file.getInputStream();
            String contentType = file.getContentType();
            String type = contentType.substring(contentType.indexOf("/") + 1);
            String filePath = FilePathEnum.goodsEvaluate.getPath() + UUID.randomUUID().toString().replace("-", "") + "."
                    + type;
      // 上传文件替换
      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);
               }
            }
         }
      }
            BufferedImage sourceImg = ImageIO.read(inputStream);
            ImgInfo info = new ImgInfo();
            int width = sourceImg.getWidth();
            int height = sourceImg.getHeight();
      // 指定主图
      if (picNum == null || picNum > 9 || picNum < 1) {
         picNum = 1;
      }
            String picLink = COSManager.getInstance().uploadFile(file.getInputStream(), filePath).getUrl();
      GoodsDetailVO goodsDetailVO = null;
      JDGoods jdGoods = null;
      PDDGoodsDetail pddGoods = null;
      ConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      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);
      }
            info.setH(height);
            info.setW(width);
            info.setUrl(picLink);
            return info;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
      if (goodsDetailVO == null) {
         throw new GoodsEvaluateException(1, "该商品信息不存在");
      }
    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();
    }
      List<ImgInfo> tempList = new ArrayList<ImgInfo>();
      int totalImg = 0;
      if (listpic != null && listpic.size() > 0) {
         for (int i = 0; i < listpic.size() && i < 9; i++) {
            ImgInfo imgInfo0 = new ImgInfo();
            imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
            imgInfo0.setW(1);
            imgInfo0.setH(1);
            imgInfo0.setLarge(false);
            imgInfo0.setPid(pid);
            imgInfo0.setUrl(listpic.get(i));
            imgInfo0.setUrlHD(listpic.get(i));
    /**
     * 删除图片
     *
     * @param picture
     * @throws Exception
     */
    private void removePicture(String picture) throws Exception {
        if (picture != null && picture.trim().length() > 0) {
            COSManager.getInstance().deleteFile(picture);
        }
    }
            if (picNum - 1 == i) {
               imgInfo0.setType(ImgEnum.goods);
               SimpleGoods simpleGoods = new SimpleGoods();
               simpleGoods.setState(goodsDetailVO.getState());
               simpleGoods.setGoodsId(goodsId);
               simpleGoods.setGoodsType(goodsType);
               CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
               if (couponInfo == null) {
                  simpleGoods.setPrice(goodsDetailVO.getZkPrice());
               } else {
                  simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                  simpleGoods.setAmount(couponInfo.getAmount());
               }
               imgInfo0.setGoods(simpleGoods);
               imgInfo0.setGoodsVO(goodsDetailVO);
               listImg.add(imgInfo0);
            } else {
               imgInfo0.setType(ImgEnum.img);
               tempList.add(imgInfo0);
            }
            totalImg++;
         }
      }
    @Override
    public String saveSingleGoods(String pid, String goodsId, Integer goodsType, String videoUrl, Integer picNum,
                                  String picUrls, SystemEnum system, MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
            throw new GoodsEvaluateException(1, "请保存第一部分信息");
        }
      if (tempList.size() > 0) {
         listImg.addAll(tempList);
      }
        GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
        if (resultObj == null)
            throw new GoodsEvaluateException(1, "第一部分信息缺失");
      if (listOld != null && listOld.size() > 0) {
         for (int j = 0; j < listOld.size(); j++) {
            boolean del = true;
            String oldPic = listOld.get(j);
            for (ImgInfo imgInfo : listImg) {
               String url = imgInfo.getUrl();
               if (url.equals(oldPic)) {
                  del = false;
               }
            }
            if (del)
               listDel.add(listOld.get(j));
         }
      }
        // 原封视频面图
        ImgInfo imgVideo = null;
        List<String> listDel = new ArrayList<String>();
        List<String> listOld = new ArrayList<String>();
      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;
         }
      }
        // 处理图片
        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) {
                    listOld.add(info.getUrl());
                    oldGoodsVO = info.getGoodsVO();
                } else if (type == ImgEnum.img) {
                    listOld.add(info.getUrl());
                }
            }
        }
        if (oldGoodsVO != null) {
            oldGoodsVO.setCreatetime(null);
        }
      resultObj.setLineNum(lineNum);
      resultObj.setGoods(goodsDetailVO);
      resultObj.setMainPicNum(picNum);
      resultObj.setImgList(listImg);
        // 视频部分
        if (fileRequest != null) {
            MultipartFile filevideo = fileRequest.getFile("filevideo");
            if (filevideo != null) {
                if (StringUtil.isNullOrEmpty(videoUrl)) {
                    throw new GoodsEvaluateException(1, "视频链接不能为空");
                }
                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(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                } else {
                    imgVideo = new ImgInfo();
                    imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
                    imgVideo.setLarge(true);
                    imgVideo.setPid(pid);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                    imgVideo.setVideoUrl(videoUrl);
                    imgVideo.setType(ImgEnum.video);
                }
                imgVideo.setW(info.getW());
                imgVideo.setH(info.getH());
            }
        }
      boolean addComment = true;
      List<CommentInfo> commentsNew = new ArrayList<>();
      List<CommentInfo> comments = resultObj.getComments();
      if (comments != null && comments.size() > 0) {
         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);
         }
      }
        List<ImgInfo> listImg = new ArrayList<ImgInfo>();
        if (imgVideo != null) {
            if (!StringUtil.isNullOrEmpty(videoUrl)) {
                if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
                    throw new GoodsEvaluateException(1, "视频封面图不能为空");
                }
                imgVideo.setVideoUrl(videoUrl);
                listImg.add(imgVideo);
            } else {
                String url = imgVideo.getUrl();
                if (!StringUtil.isNullOrEmpty(url)) {
                    listDel.add(url);
                }
            }
        }
      /*
       * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 =
       * goodsDetailVO.getCouponInfo(); if (couponInfo1 == null) { addComment
       * = false; }
       */
        // 编辑图片
        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 (picLink.startsWith("http")) {
                        listpic.add(picLink);
                    }
                }
            }
        }
      String commentText = "";
      if (addComment) {
         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());
            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);
         }
        // 上传文件替换
        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);
                    }
                }
            }
        }
         // 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");
        // 指定主图
        if (picNum == null || picNum > 9 || picNum < 1) {
            picNum = 1;
        }
         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);
        GoodsDetailVO goodsDetailVO = null;
        JDGoods jdGoods = null;
        PDDGoodsDetail pddGoods = null;
        GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
        params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
        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 (listDel.size() > 0) {
         for (String url : listDel) {
            if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
               removePicture(url);
            }
         }
      }
        if (goodsDetailVO == null) {
            throw new GoodsEvaluateException(1, "该商品信息不存在");
        }
      return commentText;
   }
        goodsDetailVO.setCreatetime(null);
   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;
        List<ImgInfo> tempList = new ArrayList<ImgInfo>();
        int totalImg = 0;
        if (listpic != null && listpic.size() > 0) {
            for (int i = 0; i < listpic.size() && i < 9; i++) {
                ImgInfo imgInfo0 = new ImgInfo();
                imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
                imgInfo0.setW(1);
                imgInfo0.setH(1);
                imgInfo0.setLarge(false);
                imgInfo0.setPid(pid);
                imgInfo0.setUrl(listpic.get(i));
                imgInfo0.setUrlHD(listpic.get(i));
         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);
      }
                if (picNum - 1 == i) {
                    imgInfo0.setType(ImgEnum.goods);
                    SimpleGoods simpleGoods = new SimpleGoods();
                    simpleGoods.setState(goodsDetailVO.getState());
                    simpleGoods.setGoodsId(goodsId);
                    simpleGoods.setGoodsType(goodsType);
                    CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
                    if (couponInfo == null) {
                        simpleGoods.setPrice(goodsDetailVO.getZkPrice());
                    } else {
                        simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                        simpleGoods.setAmount(couponInfo.getAmount());
                    }
                    imgInfo0.setGoods(simpleGoods);
                    imgInfo0.setGoodsVO(goodsDetailVO);
                    listImg.add(imgInfo0);
                } else {
                    imgInfo0.setType(ImgEnum.img);
                    tempList.add(imgInfo0);
                }
                totalImg++;
            }
        }
      commentText = commentText.replace("[原价]", goodsDetailVO.getZkPrice().toString());
      if (!goodsDetailVO.isHasCoupon()) {
         commentText = commentText.replace("领券抢购", "抢购");
         commentText = commentText.replace("【券后价】[券后价]元", "");
      } else {
         commentText = commentText.replace("[券后价]", goodsDetailVO.getCouponPrice().toString());
      }
        if (tempList.size() > 0) {
            listImg.addAll(tempList);
        }
      return commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
   }
        if (listOld != null && listOld.size() > 0) {
            for (int j = 0; j < listOld.size(); j++) {
                boolean del = true;
                String oldPic = listOld.get(j);
                for (ImgInfo imgInfo : listImg) {
                    String url = imgInfo.getUrl();
                    if (url.equals(oldPic)) {
                        del = false;
                    }
                }
                if (del)
                    listDel.add(listOld.get(j));
            }
        }
   public GoodsDetailVO getGoodsDetailVO(Long goodsId, Integer goodsType) throws GoodsEvaluateException {
      GoodsDetailVO goodsDetail = null;
      ConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         try {
            TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
            String pictUrlWhite = goodsBrief.getPictUrlWhite();
            if (!StringUtil.isNullOrEmpty(pictUrlWhite)) {
               goodsBrief.setPictUrl(pictUrlWhite);
            }
            goodsDetail = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
         } catch (TaobaoGoodsDownException e) {
            throw new GoodsEvaluateException(1, "商品已下架");
         }
      } else if (goodsType == Constant.SOURCE_TYPE_JD) {
         JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
         goodsDetail = GoodsDetailVOFactory.convertJDGoods(goodsInfo, params);
      } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
         PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
         goodsDetail = GoodsDetailVOFactory.convertPDDGoods(goodsInfo, params);
      }
      return goodsDetail;
   }
        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;
            }
        }
   @Override
   public void saveMultipleGoods(String pid, String videoUrl, String goodsList,
         MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
      }
        resultObj.setLineNum(lineNum);
        resultObj.setGoods(goodsDetailVO);
        resultObj.setMainPicNum(picNum);
        resultObj.setImgList(listImg);
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
        boolean addComment = true;
        List<CommentInfo> commentsNew = new ArrayList<>();
        List<CommentInfo> comments = resultObj.getComments();
        if (comments != null && comments.size() > 0) {
            for (CommentInfo commentInfo : comments) {
                if (commentInfo.getTypeEnum() == CommentInfoEnum.goodsCoupon) {
                    if (oldGoodsVO != null && oldGoodsVO.getGoodsId().equalsIgnoreCase(goodsId)
                            && oldGoodsVO.getGoodsType() == goodsType) {
                        addComment = false;
                    }
                    continue;
                }
                commentsNew.add(commentInfo);
            }
        }
      // 原封视频面图
      ImgInfo imgVideo = null;
      List<String> listDel = new ArrayList<String>();
      List<ImgInfo> oldGoodsList = new ArrayList<ImgInfo>();
        /*
         * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 =
         * goodsDetailVO.getCouponInfo(); if (couponInfo1 == null) { addComment
         * = false; }
         */
      // 处理图片
      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) {
               oldGoodsList.add(info);
            }
         }
      }
        String commentText = "";
        if (addComment) {
            if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
                TaoBaoLink taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForShare(system, 1L, goodsId, "0", null);
                String template = configService.getValue(ConfigKeyEnum.quickShareTBCommentText.getKey(), system);
                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, null,
                        pidManager.getPidCache(system, Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share), "1");
                String template = configService.getValue(ConfigKeyEnum.quickShareJDCommentText.getKey(), system);
                if (jumpLink == null) {
                    throw new GoodsEvaluateException(1, "该商品转链失败");
                }
                commentText = template.replace("[链接]", jumpLink);
            } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
                String sharePid = pidManager.getPidCache(system, Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.share);
                PDDGoodsDetail goodsDetail = PinDuoDuoApiUtil.getGoodsDetail(goodsId, sharePid, "1");
                String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsDetail.getGoodsSign(), sharePid, "1");
                if (jumpLink == null) {
                    throw new GoodsEvaluateException(1, "该商品转链失败");
                }
                String template = configService.getValue(ConfigKeyEnum.quickSharePDDCommentText.getKey(), system);
                commentText = template.replace("[链接]", jumpLink);
            }
      // 视频部分
      if (fileRequest != null) {
         MultipartFile filevideo = fileRequest.getFile("filevideo");
         if (filevideo != null) {
            if (StringUtil.isNullOrEmpty(videoUrl)) {
               throw new GoodsEvaluateException(1, "视频链接不能为空");
            }
            // 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");
            ImgInfo info = uploadVideoPicture(filevideo);
            if (info == null)
               throw new GoodsEvaluateException(2, "视频图片上传失败");
            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);
            if (imgVideo != null) {
               String url = imgVideo.getUrl();
               if (!StringUtil.isNullOrEmpty(url)) {
                  listDel.add(url);
               }
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
            } else {
               imgVideo = new ImgInfo();
               imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
               imgVideo.setLarge(true);
               imgVideo.setPid(pid);
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
               imgVideo.setVideoUrl(videoUrl);
               imgVideo.setType(ImgEnum.video);
            }
            imgVideo.setW(info.getW());
            imgVideo.setH(info.getH());
         }
      }
        // 删除图片
        if (listDel.size() > 0) {
            for (String url : listDel) {
                if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
                    removePicture(url);
                }
            }
        }
      List<ImgInfo> listImg = new ArrayList<ImgInfo>();
      if (imgVideo != null) {
         if (!StringUtil.isNullOrEmpty(videoUrl)) {
            if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
               throw new GoodsEvaluateException(1, "视频封面图不能为空");
            }
            imgVideo.setVideoUrl(videoUrl);
            listImg.add(imgVideo);
         } else {
            String url = imgVideo.getUrl();
            if (!StringUtil.isNullOrEmpty(url)) {
               listDel.add(url);
            }
         }
      }
        return commentText;
    }
      int totalImg = 0;
      if (!StringUtil.isNullOrEmpty(goodsList)) {
         String[] goodsArray = goodsList.split(",");
         if (goodsArray != null && goodsArray.length > 0) {
            for (int i = 0; i < goodsArray.length && i < 9; i++) {
               String goodsids = goodsArray[i];
               String[] g = goodsids.split("-");
               GoodsDetailVO goodsDetailVO = getGoodsDetailVO(Long.parseLong(g[0]), Integer.parseInt(g[1]));
               if (goodsDetailVO == null) {
                  continue;
               }
    private String createTokenAndLink(GoodsDetailVO goodsDetailVO, SystemEnum system) throws Exception {
        String commentText = "";
        if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForShare(system, 1L, goodsDetailVO.getGoodsId(), "0", null);
            String template = configService.getValue(ConfigKeyEnum.quickShareTBCommentText.getKey(), system);
            commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
        } else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
            String couponUrl = null;
               String picUrl = goodsDetailVO.getPicUrl();
               if (fileRequest != null) {
                  MultipartFile file = fileRequest.getFile("file" + i);
                  if (file != null) {
                     picUrl = uploadPicture(file);
                  }
               }
            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, null, pidManager.getPidCache(system, Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share),
                    "1");
            String template = configService.getValue(ConfigKeyEnum.quickShareJDCommentText.getKey(), system);
            commentText = template.replace("[链接]", jumpLink);
        } else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
               ImgInfo imgInfo0 = new ImgInfo();
               imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
               imgInfo0.setW(1);
               imgInfo0.setH(1);
               imgInfo0.setLarge(false);
               imgInfo0.setPid(pid);
               imgInfo0.setUrl(picUrl);
               imgInfo0.setUrlHD(picUrl);
               imgInfo0.setType(ImgEnum.goods);
            String sharePid = pidManager.getPidCache(system, Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.share);
               SimpleGoods simpleGoods = new SimpleGoods();
               simpleGoods.setState(goodsDetailVO.getState());
               simpleGoods.setGoodsId(goodsDetailVO.getGoodsId());
               simpleGoods.setGoodsType(goodsDetailVO.getGoodsType());
               CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
               if (couponInfo == null) {
                  simpleGoods.setPrice(goodsDetailVO.getZkPrice());
               } else {
                  simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                  simpleGoods.setAmount(couponInfo.getAmount());
               }
               imgInfo0.setGoods(simpleGoods);
               imgInfo0.setGoodsVO(goodsDetailVO);
            PDDGoodsDetail goodsDetail = PinDuoDuoApiUtil.getGoodsDetail(goodsDetailVO.getGoodsId(),
                    sharePid, "1");
               listImg.add(imgInfo0);
               totalImg++;
            }
         }
      }
            String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsDetail.getGoodsSign(),
                    sharePid, "1");
            String template = configService.getValue(ConfigKeyEnum.quickSharePDDCommentText.getKey(), system);
            commentText = template.replace("[链接]", jumpLink);
        }
      // 数据对比 删除图片
      if (oldGoodsList != null && oldGoodsList.size() > 0) {
         for (ImgInfo old : oldGoodsList) {
            ImgEnum type = old.getType();
            if (type != ImgEnum.goods) {
               continue;
            }
        commentText = commentText.replace("[原价]", goodsDetailVO.getZkPrice().toString());
        if (!goodsDetailVO.isHasCoupon()) {
            commentText = commentText.replace("领券抢购", "抢购");
            commentText = commentText.replace("【券后价】[券后价]元", "");
        } else {
            commentText = commentText.replace("[券后价]", goodsDetailVO.getCouponPrice().toString());
        }
            boolean del = false;
            long oldGoodsId = old.getGoods().getGoodsId().longValue();
            int oldGoodsType = old.getGoods().getGoodsType().intValue();
            for (ImgInfo newInfo : listImg) {
               ImgEnum type2 = old.getType();
               if (type2 != ImgEnum.goods) {
                  continue;
               }
        return commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
    }
               if (oldGoodsId == newInfo.getGoods().getGoodsId().longValue()
                     && oldGoodsType == newInfo.getGoods().getGoodsType().intValue()) {
                  String url = newInfo.getUrl();
                  if (url.equals(old.getUrl())) {
    public GoodsDetailVO getGoodsDetailVO(String goodsId, Integer goodsType, SystemEnum system) throws GoodsEvaluateException {
        GoodsDetailVO goodsDetail = null;
        GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
        params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            try {
                TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
                String pictUrlWhite = goodsBrief.getPictUrlWhite();
                if (!StringUtil.isNullOrEmpty(pictUrlWhite)) {
                    goodsBrief.setPictUrl(pictUrlWhite);
                }
                goodsDetail = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
            } catch (TaobaoGoodsDownException e) {
                throw new GoodsEvaluateException(1, "商品已下架");
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
            goodsDetail = GoodsDetailVOFactory.convertJDGoods(goodsInfo, params);
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
            goodsDetail = GoodsDetailVOFactory.convertPDDGoods(goodsInfo, params);
        }
        if (goodsDetail != null)
            goodsDetail.setCreatetime(null);
        return goodsDetail;
    }
                  } else if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
                     del = true;
                  } else {
                     newInfo.setUrl(old.getUrl());
                     newInfo.setUrlHD(old.getUrlHD());
                  }
                  break;
               }
            }
    @Override
    public void saveMultipleGoods(String pid, String videoUrl, String goodsList,
                                  MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
            throw new GoodsEvaluateException(1, "请保存第一部分信息");
        }
            if (del) {
               listDel.add(old.getUrl());
            }
         }
      }
        GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
        if (resultObj == null)
            throw new GoodsEvaluateException(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;
         }
      }
        // 原封视频面图
        ImgInfo imgVideo = null;
        List<String> listDel = new ArrayList<String>();
        List<ImgInfo> oldGoodsList = new ArrayList<ImgInfo>();
      resultObj.setLineNum(lineNum);
        // 处理图片
        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) {
                    oldGoodsList.add(info);
                }
            }
        }
      // 保存图片信息
      resultObj.setImgList(listImg);
      goodsEvaluateDao.save(resultObj);
        // 视频部分
        if (fileRequest != null) {
            MultipartFile filevideo = fileRequest.getFile("filevideo");
            if (filevideo != null) {
                if (StringUtil.isNullOrEmpty(videoUrl)) {
                    throw new GoodsEvaluateException(1, "视频链接不能为空");
                }
      // 删除图片
      if (listDel.size() > 0) {
         for (String url : listDel) {
            if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
               removePicture(url);
            }
         }
      }
   }
                ImgInfo info = uploadVideoPicture(filevideo);
                if (info == null)
                    throw new GoodsEvaluateException(2, "视频图片上传失败");
   @Override
   public void saveGoodsComment(String id, int kind, List<CommentInfo> comments)
         throws GoodsEvaluateException, Exception {
      if (comments == null || comments.size() == 0) {
         throw new GoodsEvaluateException(1, "内容不能为空");
      }
                if (imgVideo != null) {
                    String url = imgVideo.getUrl();
                    if (!StringUtil.isNullOrEmpty(url)) {
                        listDel.add(url);
                    }
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                } else {
                    imgVideo = new ImgInfo();
                    imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
                    imgVideo.setLarge(true);
                    imgVideo.setPid(pid);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                    imgVideo.setVideoUrl(videoUrl);
                    imgVideo.setType(ImgEnum.video);
                }
                imgVideo.setW(info.getW());
                imgVideo.setH(info.getH());
            }
        }
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(id);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
        List<ImgInfo> listImg = new ArrayList<ImgInfo>();
        if (imgVideo != null) {
            if (!StringUtil.isNullOrEmpty(videoUrl)) {
                if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
                    throw new GoodsEvaluateException(1, "视频封面图不能为空");
                }
                imgVideo.setVideoUrl(videoUrl);
                listImg.add(imgVideo);
            } else {
                String url = imgVideo.getUrl();
                if (!StringUtil.isNullOrEmpty(url)) {
                    listDel.add(url);
                }
            }
        }
      GoodsDetailVO goods = resultObj.getGoods();
      if (kind == 1 && goods == null) {
         throw new GoodsEvaluateException(1, "请先录入商品信息");
      }
        int totalImg = 0;
        if (!StringUtil.isNullOrEmpty(goodsList)) {
            String[] goodsArray = goodsList.split(",");
            if (goodsArray != null && goodsArray.length > 0) {
                for (int i = 0; i < goodsArray.length && i < 9; i++) {
                    String goodsids = goodsArray[i];
                    String[] g = goodsids.split("-");
                    GoodsDetailVO goodsDetailVO = getGoodsDetailVO(g[0], Integer.parseInt(g[1]), resultObj.getSystem());
                    if (goodsDetailVO == null) {
                        continue;
                    }
      CommentInfo currencyCoupon = null;
      List<CommentInfo> oldComments = resultObj.getComments();
      if (oldComments != null) {
         for (int i = 0; i < oldComments.size(); i++) {
            CommentInfo info = oldComments.get(i);
            if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
               currencyCoupon = info;
               continue;
            }
         }
      }
                    String picUrl = goodsDetailVO.getPicUrl();
                    if (fileRequest != null) {
                        MultipartFile file = fileRequest.getFile("file" + i);
                        if (file != null) {
                            picUrl = uploadPicture(file);
                        }
                    }
      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, Constant.LINK_TOKEN_VERIFY_UID, true);
            } catch (Exception e) {
               throw new GoodsEvaluateException(1, "不包含可转链的口令与链接");
            }
         }
                    ImgInfo imgInfo0 = new ImgInfo();
                    imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
                    imgInfo0.setW(1);
                    imgInfo0.setH(1);
                    imgInfo0.setLarge(false);
                    imgInfo0.setPid(pid);
                    imgInfo0.setUrl(picUrl);
                    imgInfo0.setUrlHD(picUrl);
                    imgInfo0.setType(ImgEnum.goods);
         if (StringUtil.isNullOrEmpty(commentInfo.getId())) {
            commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
         }
         commentInfo.setNeedSpin(true);
         commentInfo.setType(commentInfo.getTags());
         commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
         newList.add(commentInfo);
      }
      if (currencyCoupon != null) {
         comments.add(currencyCoupon);
      }
                    SimpleGoods simpleGoods = new SimpleGoods();
                    simpleGoods.setState(goodsDetailVO.getState());
                    simpleGoods.setGoodsId(goodsDetailVO.getGoodsId());
                    simpleGoods.setGoodsType(goodsDetailVO.getGoodsType());
                    CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
                    if (couponInfo == null) {
                        simpleGoods.setPrice(goodsDetailVO.getZkPrice());
                    } else {
                        simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                        simpleGoods.setAmount(couponInfo.getAmount());
                    }
                    imgInfo0.setGoods(simpleGoods);
                    imgInfo0.setGoodsVO(goodsDetailVO);
      resultObj.setComments(comments);
      resultObj.setUpdateTime(new Date());
      goodsEvaluateDao.save(resultObj);
   }
                    listImg.add(imgInfo0);
                    totalImg++;
                }
            }
        }
   @Override
   public void saveCurrencyCoupon(String pid, int kind, CommentInfo commentInfo)
         throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
      }
        // 数据对比 删除图片
        if (oldGoodsList != null && oldGoodsList.size() > 0) {
            for (ImgInfo old : oldGoodsList) {
                ImgEnum type = old.getType();
                if (type != ImgEnum.goods) {
                    continue;
                }
      if (StringUtil.isNullOrEmpty(commentInfo.getCoupon())) {
         throw new GoodsEvaluateException(1, "券面额不能为空");
      }
                boolean del = false;
                String oldGoodsId = old.getGoods().getGoodsId();
                int oldGoodsType = old.getGoods().getGoodsType().intValue();
                for (ImgInfo newInfo : listImg) {
                    ImgEnum type2 = old.getType();
                    if (type2 != ImgEnum.goods) {
                        continue;
                    }
      if (StringUtil.isNullOrEmpty(commentInfo.getTagDesc())) {
         throw new GoodsEvaluateException(1, "描述语不能为空");
      }
                    if (oldGoodsId.equalsIgnoreCase(newInfo.getGoods().getGoodsId())
                            && oldGoodsType == newInfo.getGoods().getGoodsType().intValue()) {
                        String url = newInfo.getUrl();
                        if (url.equals(old.getUrl())) {
      String tagUrl = commentInfo.getTagUrl();
      String content = commentInfo.getContent();
      if (StringUtil.isNullOrEmpty(tagUrl) && StringUtil.isNullOrEmpty(content)) {
         throw new GoodsEvaluateException(1, "评论语和链接不能同时为空");
      }
                        } else if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
                            del = true;
                        } else {
                            newInfo.setUrl(old.getUrl());
                            newInfo.setUrlHD(old.getUrlHD());
                        }
                        break;
                    }
                }
      String endTime = commentInfo.getEndTime();
      if (!StringUtil.isNullOrEmpty(endTime)) {
         try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            sdf.parse(endTime);
         } catch (Exception e) {
            throw new GoodsEvaluateException(1, "请填写正确的时间格式:2020-03-05");
         }
      } else {
         throw new GoodsEvaluateException(1, "请填写券截止时间");
      }
                if (del) {
                    listDel.add(old.getUrl());
                }
            }
        }
      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, "包含不可转链的口令与链接");
         }
      }
        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;
            }
        }
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
        resultObj.setLineNum(lineNum);
      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()) {
               comments.add(info);
            } else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
               currencyCoupon = info;
            }
         }
      }
        // 保存图片信息
        resultObj.setImgList(listImg);
        goodsEvaluateDao.save(resultObj);
      if (commentInfo != null) {
         if (currencyCoupon != null) {
            commentInfo.setId(currencyCoupon.getId());
         } else {
            commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
         }
         // 券类型
        // 删除图片
        if (listDel.size() > 0) {
            for (String url : listDel) {
                if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
                    removePicture(url);
                }
            }
        }
    }
         commentInfo.setType(commentInfo.getTags());
         commentInfo.setTypeEnum(CommentInfoEnum.currencyCoupon);
    @Override
    public void saveGoodsComment(String id, int kind, List<CommentInfo> comments, SystemEnum system)
            throws GoodsEvaluateException, Exception {
        if (comments == null || comments.size() == 0) {
            throw new GoodsEvaluateException(1, "内容不能为空");
        }
        GoodsEvaluate resultObj = goodsEvaluateDao.getById(id);
        if (resultObj == null)
            throw new GoodsEvaluateException(1, "第一部分信息缺失");
        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 (int i = 0; i < oldComments.size(); i++) {
                CommentInfo info = oldComments.get(i);
                if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
                    currencyCoupon = info;
                    continue;
                }
            }
        }
        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, system);
                } else {
                    continue;
                }
            } else if (i == 0 && kind == 1) {
                try {
                    convertLinkManager.convertLinkFromText(system, content, Constant.LINK_TOKEN_VERIFY_UID, true, false);
                } catch (Exception e) {
                    throw new GoodsEvaluateException(1, "不包含可转链的口令与链接");
                }
            }
            if (StringUtil.isNullOrEmpty(commentInfo.getId())) {
                commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
            }
            commentInfo.setNeedSpin(true);
            commentInfo.setType(commentInfo.getTags());
            commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
            newList.add(commentInfo);
        }
        if (currencyCoupon != null) {
            comments.add(currencyCoupon);
        }
        resultObj.setComments(comments);
        resultObj.setUpdateTime(new Date());
        goodsEvaluateDao.save(resultObj);
    }
    @Override
    public void saveCurrencyCoupon(SystemEnum system, String pid, int kind, CommentInfo commentInfo)
            throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
            throw new GoodsEvaluateException(1, "请保存第一部分信息");
        }
        GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
        if (resultObj == null)
            throw new GoodsEvaluateException(1, "第一部分信息缺失");
        if (EvaluateEnum.activity != resultObj.getType()) {
            if (StringUtil.isNullOrEmpty(commentInfo.getCoupon())) {
                throw new GoodsEvaluateException(1, "券面额不能为空");
            }
            if (StringUtil.isNullOrEmpty(commentInfo.getTagDesc())) {
                throw new GoodsEvaluateException(1, "描述语不能为空");
            }
            String tagUrl = commentInfo.getTagUrl();
            String content = commentInfo.getContent();
            if (StringUtil.isNullOrEmpty(tagUrl) && StringUtil.isNullOrEmpty(content)) {
                throw new GoodsEvaluateException(1, "评论语和链接不能同时为空");
            }
            String endTime = commentInfo.getEndTime();
            if (!StringUtil.isNullOrEmpty(endTime)) {
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    sdf.parse(endTime);
                } catch (Exception e) {
                    throw new GoodsEvaluateException(1, "请填写正确的时间格式:2020-03-05");
                }
            } else {
                throw new GoodsEvaluateException(1, "请填写券截止时间");
            }
        }
        if (commentInfo.getNeedSpin() == null) {
            commentInfo.setNeedSpin(false);
        }
        String content = commentInfo.getContent();
        if (!StringUtil.isNullOrEmpty(content) && commentInfo.getNeedSpin()) {
            try {
                convertLinkManager.convertLinkFromText(system, content, Constant.LINK_TOKEN_VERIFY_UID, true, false);
            } catch (ConvertLinkException e) {
                if (ConvertLinkException.CODE_NONE != e.getCode()) {
                    throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
                }
            } catch (Exception e) {
                throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
            }
        }
        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()) {
                    comments.add(info);
                } else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
                    currencyCoupon = info;
                }
            }
        }
        if (commentInfo != null) {
            if (currencyCoupon != null) {
                commentInfo.setId(currencyCoupon.getId());
            } else {
                commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
            }
            // 券类型
            commentInfo.setType(commentInfo.getTags());
            commentInfo.setTypeEnum(CommentInfoEnum.currencyCoupon);
            // 标签信息
            List<ClientTextStyleVO> tagList = new ArrayList<>();
            String couponSource = commentInfo.getCouponSource();
            if (!StringUtil.isNullOrEmpty(couponSource)) {
                ClientTextStyleVO styleVO = new ClientTextStyleVO();
                styleVO.setColor("#16C253");
                styleVO.setContent(couponSource);
                tagList.add(styleVO);
            }
            String coupon = commentInfo.getCoupon();
            if (!StringUtil.isNullOrEmpty(coupon)) {
                ClientTextStyleVO styleVO = new ClientTextStyleVO();
                styleVO.setColor("#E5005C");
                styleVO.setContent(coupon);
                tagList.add(styleVO);
            }
            commentInfo.setTagList(tagList);
            comments.add(commentInfo);
        }
        resultObj.setComments(comments);
        goodsEvaluateDao.save(resultObj);
    }
    @Override
    public void saveActivityPic(String pid, ImgInfo imgInfo, String picUrls, MultipartHttpServletRequest fileRequest)
            throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
            throw new GoodsEvaluateException(1, "请保存第一部分信息");
        }
        GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
        if (resultObj == null)
            throw new GoodsEvaluateException(1, "第一部分信息缺失");
        if (imgInfo == null || StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
            throw new GoodsEvaluateException(1, "活动链接不能为空");
        }
        ImgInfo imgVideo = null;
        List<String> listDel = new ArrayList<String>();
        List<ImgInfo> listOld = new ArrayList<ImgInfo>();
        List<ImgInfo> resultList = resultObj.getImgList();
        if (resultList != null && resultList.size() > 0) {
            for (ImgInfo info : resultList) {
                if (info.getType() == ImgEnum.video) {
                    imgVideo = info;
                } else {
                    listOld.add(info);
                }
            }
        }
        // 视频部分
        if (fileRequest != null) {
            MultipartFile filevideo = fileRequest.getFile("filevideo");
            if (filevideo != null) {
                if (StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
                    throw new GoodsEvaluateException(1, "视频链接不能为空");
                }
                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(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                } else {
                    imgVideo = new ImgInfo();
                    imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
                    imgVideo.setLarge(true);
                    imgVideo.setPid(pid);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                    imgVideo.setVideoUrl(imgInfo.getVideoUrl());
                    imgVideo.setType(ImgEnum.video);
                }
                imgVideo.setW(info.getW());
                imgVideo.setH(info.getH());
            }
        }
        List<ImgInfo> listImg = new ArrayList<ImgInfo>();
        if (imgVideo != null) {
            if (!StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
                if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
                    throw new GoodsEvaluateException(1, "视频封面图不能为空");
                }
                imgVideo.setVideoUrl(imgInfo.getVideoUrl());
                listImg.add(imgVideo);
            } else {
                String url = imgVideo.getUrl();
                if (!StringUtil.isNullOrEmpty(url)) {
                    listDel.add(url);
                }
            }
        }
        String activityUrl = imgInfo.getActivityUrl();
        // 编辑图片
        List<ImgInfo> tempList = new ArrayList<ImgInfo>();
        if (!StringUtil.isNullOrEmpty(picUrls)) {
            String[] pics = picUrls.split(",");
            if (pics != null) {
                for (int i = 0; i < pics.length; i++) {
                    String picLink = pics[i];
                    if (picLink.startsWith("http")) {
                        if (listOld != null) {
                            for (ImgInfo info : listOld) {
                                if (info.getUrl().equals(picLink)) {
                                    info.setActivityUrl(activityUrl);
                                    tempList.add(info);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
        // 上传文件替换
        if (fileRequest != null) {
            for (int i = 0; i < 9; i++) {
                MultipartFile file = fileRequest.getFile("file" + i);
                if (file != null) {
                    ImgInfo info = uploadOriginalPicture(file);
                    ImgInfo imgInfo0 = new ImgInfo();
                    imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
                    imgInfo0.setLarge(false);
                    imgInfo0.setPid(pid);
                    imgInfo0.setUrl(info.getUrl());
                    imgInfo0.setUrlHD(info.getUrl());
                    imgInfo0.setType(ImgEnum.activity);
                    imgInfo0.setW(info.getW());
                    imgInfo0.setH(info.getH());
                    imgInfo0.setActivityUrl(activityUrl);
                    if (i < tempList.size()) {
                        tempList.set(i, imgInfo0);
                    } else {
                        tempList.add(imgInfo0);
                    }
                }
            }
        }
        int lineNum = 0;
        int totalImg = tempList.size();
        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;
            }
        }
        // 一张图显示为大图
        if (tempList.size() == 1) {
            tempList.get(0).setLarge(true);
        }
        if (tempList.size() > 0) {
            listImg.addAll(tempList);
        }
        // 清理老图片
        if (listOld != null && listOld.size() > 0) {
            for (ImgInfo infoOld : listOld) {
                boolean del = true;
                String oldPic = infoOld.getUrl();
                for (ImgInfo info : listImg) {
                    if (info.getUrl().equals(oldPic)) {
                        del = false;
                    }
                }
                if (del)
                    listDel.add(infoOld.getUrl());
            }
        }
        resultObj.setJumpLink(activityUrl);
        resultObj.setLineNum(lineNum);
        resultObj.setImgList(listImg);
        goodsEvaluateDao.save(resultObj);
        // 删除图片
        if (listDel.size() > 0) {
            for (String url : listDel) {
                if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
                    removePicture(url);
                }
            }
        }
    }
    @Override
    public void saveSuCai(String pid, String videoUrl, String picUrls, MultipartHttpServletRequest fileRequest)
            throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
            throw new GoodsEvaluateException(1, "请保存第一部分信息");
        }
        GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
        if (resultObj == null)
            throw new GoodsEvaluateException(1, "第一部分信息缺失");
        // 原封视频面图
        ImgInfo imgVideo = null;
        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();
        if (resultList != null && resultList.size() > 0) {
            for (ImgInfo info : resultList) {
                ImgEnum type = info.getType();
                if (type == ImgEnum.video) {
                    imgVideo = info;
                } else if (type == ImgEnum.img) {
                    listOldImgInfo.add(info);
                    String url = info.getUrl();
                    if (!StringUtil.isNullOrEmpty(url)) {
                        listOld.add(url);
                    }
                } else if (type == ImgEnum.activity) {
                    imgActivity = info;
                }
            }
        }
        MultipartFile activityFile = null;
        // 视频部分
        if (fileRequest != null) {
            MultipartFile filevideo = fileRequest.getFile("filevideo");
            if (filevideo != null) {
                if (StringUtil.isNullOrEmpty(videoUrl)) {
                    throw new GoodsEvaluateException(1, "视频链接不能为空");
                }
                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(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                } else {
                    imgVideo = new ImgInfo();
                    imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
                    imgVideo.setLarge(true);
                    imgVideo.setPid(pid);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                    imgVideo.setVideoUrl(videoUrl);
                    imgVideo.setType(ImgEnum.video);
                }
                imgVideo.setW(info.getW());
                imgVideo.setH(info.getH());
            }
            activityFile = fileRequest.getFile("activityFile");
        }
        List<ImgInfo> listImg = new ArrayList<ImgInfo>();
        if (imgVideo != null) {
            if (!StringUtil.isNullOrEmpty(videoUrl)) {
                if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
                    throw new GoodsEvaluateException(1, "视频封面图不能为空");
                }
                imgVideo.setVideoUrl(videoUrl);
                listImg.add(imgVideo);
            } else {
                String url = imgVideo.getUrl();
                if (!StringUtil.isNullOrEmpty(url)) {
                    listDel.add(url);
                }
            }
        }
        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);
            activity.setPid(pid);
            activity.setUrl(picLink);
            activity.setUrlHD(picLink);
            activity.setActivityPic(picLink);
            activity.setW(width);
            activity.setH(height);
            activity.setType(ImgEnum.activity);
            listImg.add(activity);
        } else if (imgActivity != null) {
            listImg.add(imgActivity);
        }
        // 编辑图片
        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 (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);
                    }
                }
            }
        }
        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;
                String oldPic = listOld.get(j);
                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) {
                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);
        // 删除图片
        if (listDel.size() > 0) {
            for (String url : listDel) {
                if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
                    removePicture(url);
                }
            }
        }
    }
    @Override
    public void deleteBatchByPrimaryKey(List<String> list) {
        if (list == null || list.size() == 0) {
            return;
        }
        for (String id : list) {
            goodsEvaluateDao.deleteById(id);
        }
    }
    @Override
    public GoodsEvaluate getById(String id) {
        return goodsEvaluateDao.getById(id);
    }
    @Override
    public List<GoodsEvaluate> listByStartTime(Date date) {
        return goodsEvaluateDao.listByStartTime(date);
    }
    @Override
    public List<GoodsEvaluate> queryValidSortASC(int start, int count, EvaluateEnum tyepEnum, boolean sortDesc) {
        return goodsEvaluateDao.queryValidSortASC(start, count, tyepEnum, sortDesc);
    }
    @Override
    public List<GoodsEvaluate> queryValidZeroPoint(int start, int count) {
        return goodsEvaluateDao.queryValidZeroPoint(start, count);
    }
    @Override
    public void saveComment(String pid, CommentInfo commentInfo) throws GoodsEvaluateException {
        GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(pid);
        if (goodsEvaluate == null) {
            throw new GoodsEvaluateException(1, "动态已不存在");
        }
        String tags = commentInfo.getTags();
        if (!StringUtil.isNullOrEmpty(tags)) {
            String[] arrayTags = tags.split("\\s+");
            if (arrayTags != null && arrayTags.length > 0) {
                String[] arrayTagsColour = null;
                String tagsColour = commentInfo.getTagsColour();
                if (!StringUtil.isNullOrEmpty(tagsColour)) {
                    arrayTagsColour = tagsColour.split("\\s+");
                }
                String color = "#E5005C";
                List<ClientTextStyleVO> tagList = new ArrayList<ClientTextStyleVO>();
                for (int i = 0; i < arrayTags.length; i++) {
                    String tag = arrayTags[i];
                    if (arrayTagsColour != null && arrayTagsColour.length == arrayTags.length) {
                        color = arrayTagsColour[i];
                    }
                    ClientTextStyleVO styleVO = new ClientTextStyleVO();
                    styleVO.setColor(color);
                    styleVO.setContent(tag);
                    tagList.add(styleVO);
                }
                commentInfo.setTagList(tagList);
            }
        }
        List<CommentInfo> comments = goodsEvaluate.getComments();
        if (comments == null) {
            comments = new ArrayList<>();
        }
        Integer weight = commentInfo.getWeight();
        if (weight == null)
            commentInfo.setWeight(1);
        comments.add(commentInfo);
        Collections.shuffle(comments);
        Comparator<CommentInfo> cm = new Comparator<CommentInfo>() {
            @Override
            public int compare(CommentInfo o1, CommentInfo o2) {
                return o1.getWeight() != null && o2.getWeight() != null ? o2.getWeight() - o1.getWeight() : 0;
            }
        };
        Collections.sort(comments, cm);
        goodsEvaluate.setComments(comments);
        goodsEvaluateDao.save(goodsEvaluate);
    }
    @Override
    public void release(String id) throws GoodsEvaluateException {
        GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(id);
        if (goodsEvaluate == null) {
            throw new GoodsEvaluateException(1, "动态已不存在");
        }
        goodsEvaluate.setState(1);
        goodsEvaluateDao.save(goodsEvaluate);
    }
    @Override
    public void deleteComment(String pid, List<String> list) throws GoodsEvaluateException {
        if (list == null || list.size() == 0) {
            return;
        }
        GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(pid);
        if (goodsEvaluate == null) {
            throw new GoodsEvaluateException(1, "动态已不存在");
        }
        List<CommentInfo> comments = goodsEvaluate.getComments();
        if (comments == null || comments.size() == 0) {
            return;
        }
        for (String id : list) {
            for (int i = 0; i < comments.size(); i++) {
                CommentInfo commentInfo = comments.get(i);
                if (id.equals(commentInfo.getId())) {
                    comments.remove(i);
                    i--;
                }
            }
        }
        goodsEvaluate.setComments(comments);
        goodsEvaluateDao.save(goodsEvaluate);
    }
    @Override
    public void addShareNum(String id) {
        GoodsEvaluate article = goodsEvaluateDao.getById(id);
        if (article != null) {
            Integer num = article.getShareNum();
            if (num == null) {
                num = 0;
            }
            article.setShareNum(num + 1);
            Integer numReal = article.getShareNumReal();
            if (numReal == null) {
                numReal = 0;
            }
            article.setShareNumReal(numReal + 1);
            goodsEvaluateDao.save(article);
        }
    }
    @Override
    public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType,
                                     String typeEnum, SystemEnum system) {
        return goodsEvaluateDao.query(start, count, key, state, dynamicType, typeEnum, system);
    }
    @Override
    public long count(String key, Integer state, int dynamicType, String typeEnum, SystemEnum system) {
        return goodsEvaluateDao.count(key, state, dynamicType, typeEnum, system);
    }
    @Override
    public void addRanDomShareCount(SystemEnum system) {
        // 发圈
        try {
            List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(0, Integer.MAX_VALUE, 1, system);
            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, system);
            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, SystemEnum system) {
        List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(start, count, 1, system);
        // 更新商品信息
        executor.execute(new Runnable() {
            @Override
            public void run() {
                // 更新信息
                updateGoodInfo(list);
                // 删除已过期
                removeOverdue();
                removeDownGoods();
            }
        });
        return list;
    }
    @Override
    public long countValid(SystemEnum system) {
        return goodsEvaluateDao.countValid(1, system);
    }
    @Override
    @Cacheable(value = "dynamicCache", key = "'queryMaterialsCache-'+#start+'-'+#type+'-'+#system")
    public List<GoodsEvaluate> queryMaterialsCache(int start, int count, int type, SystemEnum system) throws Exception {
        List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(start, count, type, system);
        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;
            }
            // 按照发布显示时间段起始时间为准。
            evaluateNew.setPublishTime(evaluateNew.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();
                        goods.setCreatetime(null);
                        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, "");
                                content = content.replace("{relationId}", "");
                                if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
                                    content = content.replace("\n", "<br>");
                                }
                                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, "");
                        content = content.replace("{relationId}", "");
                        commentInfoNew.setContent(content);
                    }
                    CommentInfoEnum typeComment = commentInfoNew.getTypeEnum();
                    if (typeComment != null && typeComment == CommentInfoEnum.goodsCoupon) {
                        GoodsDetailVO goods = evaluateNew.getGoods();
                        goods.setCreatetime(null);
                        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;
                        }
                    }
         // 标签信息
         List<ClientTextStyleVO> tagList = new ArrayList<>();
         String couponSource = commentInfo.getCouponSource();
         if (!StringUtil.isNullOrEmpty(couponSource)) {
            ClientTextStyleVO styleVO = new ClientTextStyleVO();
            styleVO.setColor("#16C253");
            styleVO.setContent(couponSource);
            tagList.add(styleVO);
         }
         String coupon = commentInfo.getCoupon();
         if (!StringUtil.isNullOrEmpty(coupon)) {
            ClientTextStyleVO styleVO = new ClientTextStyleVO();
            styleVO.setColor("#E5005C");
            styleVO.setContent(coupon);
            tagList.add(styleVO);
         }
         commentInfo.setTagList(tagList);
                    commentNew.add(commentInfoNew);
                }
                evaluateNew.setComments(commentNew);
         comments.add(commentInfo);
      }
                if (typeEnum != null && typeEnum == EvaluateEnum.single) {
      resultObj.setComments(comments);
      goodsEvaluateDao.save(resultObj);
   }
                    if (!SystemInfoUtil.hasFunctions(system, SystemFunction.share)) {
                        List<ImgInfo> imgList = evaluateNew.getImgList();
                        if (imgList != null) {
                            for (ImgInfo imgInfo : imgList) {
                                imgInfo.setGoods(null);
                                if (imgInfo.getType() == ImgEnum.goods)
                                    imgInfo.setType(ImgEnum.img);
                            }
                        }
                    }
   @Override
   public void saveActivityPic(String pid, ImgInfo imgInfo, String picUrls, MultipartHttpServletRequest fileRequest)
         throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
      }
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
      if (imgInfo == null || StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
         throw new GoodsEvaluateException(1, "活动链接不能为空");
      }
                    if (!currencyCoupon && !singleCoupn) { // 所有券评论下架
                        GoodsDetailVO goods = evaluateNew.getGoods();
                        if (goods != null) {
                            goods.setCreatetime(null);
                            goods.setState(1); // 评论不存在 下架
                            evaluateNew.setRemarks("评论验证下架");
                        }
      ImgInfo imgVideo = null;
      List<String> listDel = new ArrayList<String>();
      List<ImgInfo> listOld = new ArrayList<ImgInfo>();
      List<ImgInfo> resultList = resultObj.getImgList();
      if (resultList != null && resultList.size() > 0) {
         for (ImgInfo info : resultList) {
            if (info.getType() == ImgEnum.video) {
               imgVideo = info;
            } else {
               listOld.add(info);
            }
         }
      }
      // 视频部分
      if (fileRequest != null) {
         MultipartFile filevideo = fileRequest.getFile("filevideo");
         if (filevideo != null) {
            if (StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
               throw new GoodsEvaluateException(1, "视频链接不能为空");
            }
            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(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
            } else {
               imgVideo = new ImgInfo();
               imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
               imgVideo.setLarge(true);
               imgVideo.setPid(pid);
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
               imgVideo.setVideoUrl(imgInfo.getVideoUrl());
               imgVideo.setType(ImgEnum.video);
            }
            imgVideo.setW(info.getW());
            imgVideo.setH(info.getH());
         }
      }
                        List<ImgInfo> imgList = evaluateNew.getImgList();
                        if (imgList != null) {
                            for (ImgInfo imgInfo : imgList) {
                                SimpleGoods simpleGoods = imgInfo.getGoods();
                                if (simpleGoods != null) {
                                    simpleGoods.setState(1);
                                    simpleGoods.setRemarks("评论验证下架");
                                }
                                if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
                                    imgInfo.setGoods(null);
                                }
                            }
      List<ImgInfo> listImg = new ArrayList<ImgInfo>();
      if (imgVideo != null) {
         if (!StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
            if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
               throw new GoodsEvaluateException(1, "视频封面图不能为空");
            }
            imgVideo.setVideoUrl(imgInfo.getVideoUrl());
            listImg.add(imgVideo);
         } else {
            String url = imgVideo.getUrl();
            if (!StringUtil.isNullOrEmpty(url)) {
               listDel.add(url);
            }
         }
      }
      // 编辑图片
      List<ImgInfo> tempList = new ArrayList<ImgInfo>();
      if (!StringUtil.isNullOrEmpty(picUrls)) {
         String[] pics = picUrls.split(",");
         if (pics != null) {
            for (int i = 0; i < pics.length; i++) {
               String picLink = pics[i];
               if (picLink.startsWith("http")) {
                  if (listOld != null) {
                     for (ImgInfo info: listOld) {
                        if (info.getUrl().equals(picLink)) {
                           tempList.add(info);
                           break;
                        }
                     }
                  }
               }
            }
         }
      }
                        }
                    }
                }
            }
      // 上传文件替换
      if (fileRequest != null) {
         for (int i = 0; i < 9; i++) {
            MultipartFile file = fileRequest.getFile("file" + i);
            if (file != null) {
               ImgInfo info = uploadVideoPicture(file);
               ImgInfo imgInfo0 = new ImgInfo();
               imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
               imgInfo0.setLarge(false);
               imgInfo0.setPid(pid);
               imgInfo0.setUrl(info.getUrl());
               imgInfo0.setUrlHD(info.getUrl());
               imgInfo0.setType(ImgEnum.img);
               imgInfo0.setW(info.getW());
               imgInfo0.setH(info.getH());
               if (i < tempList.size()) {
                  tempList.set(i, imgInfo0);
               } else {
                  tempList.add(imgInfo0);
               }
            }
         }
      }
      int lineNum = 0;
      int totalImg = tempList.size();
      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;
         }
      }
      if (tempList.size() > 0) {
         listImg.addAll(tempList);
      }
      // 清理老图片
      if (listOld != null && listOld.size() > 0) {
         for (ImgInfo infoOld: listOld) {
            boolean del = true;
            String oldPic = infoOld.getUrl();
            for (ImgInfo info : listImg) {
               if (info.getUrl().equals(oldPic)) {
                  del = false;
               }
            }
            if (del)
               listDel.add(infoOld.getUrl());
         }
      }
      resultObj.setJumpLink(imgInfo.getActivityUrl());
      resultObj.setLineNum(lineNum);
      resultObj.setImgList(listImg);
      goodsEvaluateDao.save(resultObj);
      // 删除图片
      if (listDel.size() > 0) {
         for (String url : listDel) {
            if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
               removePicture(url);
            }
         }
      }
   }
            listNew.add(evaluateNew);
        }
   @Override
   public void saveSuCai(String pid, String videoUrl, String picUrls, MultipartHttpServletRequest fileRequest)
         throws GoodsEvaluateException, Exception {
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new GoodsEvaluateException(1, "请保存第一部分信息");
      }
        List<GoodsEvaluate> listOBJ = list;
        // 更新商品信息
        executor.execute(new
      GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
      if (resultObj == null)
         throw new GoodsEvaluateException(1, "第一部分信息缺失");
                                 Runnable() {
                                     @Override
                                     public void run() {
                                         updateGoodInfo(listOBJ);
      // 原封视频面图
      ImgInfo imgVideo = null;
      ImgInfo imgActivity = null;
      List<String> listDel = new ArrayList<String>();
      List<String> listOld = new ArrayList<String>();
                                         // 删除已过期
                                         removeOverdue();
      List<ImgInfo> listOldImgInfo = new ArrayList<ImgInfo>();
      // 处理图片
      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.img) {
               listOldImgInfo.add(info);
               String url = info.getUrl();
               if (!StringUtil.isNullOrEmpty(url)) {
                  listOld.add(url);
               }
            } else if (type == ImgEnum.activity) {
               imgActivity = info;
            }
         }
      }
                                         removeDownGoods();
                                     }
                                 });
      MultipartFile activityFile = null;
      // 视频部分
      if (fileRequest != null) {
         MultipartFile filevideo = fileRequest.getFile("filevideo");
         if (filevideo != null) {
            if (StringUtil.isNullOrEmpty(videoUrl)) {
               throw new GoodsEvaluateException(1, "视频链接不能为空");
            }
            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(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
            } else {
               imgVideo = new ImgInfo();
               imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
               imgVideo.setLarge(true);
               imgVideo.setPid(pid);
               imgVideo.setUrl(info.getUrl());
               imgVideo.setUrlHD(info.getUrl());
               imgVideo.setVideoUrl(videoUrl);
               imgVideo.setType(ImgEnum.video);
            }
            imgVideo.setW(info.getW());
            imgVideo.setH(info.getH());
         }
        return listNew;
    }
         activityFile = fileRequest.getFile("activityFile");
      }
    @Override
    public long countValidMaterials(int type, SystemEnum system) {
        return goodsEvaluateDao.countValid(type, system);
    }
      List<ImgInfo> listImg = new ArrayList<ImgInfo>();
      if (imgVideo != null) {
         if (!StringUtil.isNullOrEmpty(videoUrl)) {
            if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
               throw new GoodsEvaluateException(1, "视频封面图不能为空");
            }
    /**
     * 更新商品信息
     */
    public void updateGoodInfo(List<GoodsEvaluate> list) {
        if (!Constant.IS_OUTNET) {
            return; // 外网进行更新
        }
            imgVideo.setVideoUrl(videoUrl);
            listImg.add(imgVideo);
         } else {
            String url = imgVideo.getUrl();
            if (!StringUtil.isNullOrEmpty(url)) {
               listDel.add(url);
            }
         }
      }
        if (list == null || list.size() == 0) {
            return;
        }
      if (activityFile != null) {
         InputStream inputStream = activityFile.getInputStream();
         BufferedImage sourceImg = ImageIO.read(inputStream);
         int width = sourceImg.getWidth();
         int height = sourceImg.getHeight();
        try {
            Date now = new Date();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String picLink = uploadPicture(activityFile);
            for (GoodsEvaluate goodsEvaluate : list) {
                GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", goodsEvaluate.getSystem());
                params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(goodsEvaluate.getSystem()));
                // 是否2个小时之内已更新
                Date updateTime = goodsEvaluate.getUpdateTime();
                if (updateTime != null) {
                    long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
                    long nh = 1000 * 60 * 60;// 一小时的毫秒数
                    long diff = System.currentTimeMillis() - updateTime.getTime();
                    long day = diff / nd;// 计算差多少天
                    long hour = diff % nd / nh + day * 24;// 计算差多少小时
                    if (hour < 2) {
                        continue;
                    }
                }
         ImgInfo activity = new ImgInfo();
         activity.setId(UUID.randomUUID().toString().replace("-", ""));
         activity.setLarge(true);
         activity.setPid(pid);
         activity.setUrl(picLink);
         activity.setUrlHD(picLink);
         activity.setActivityPic(picLink);
         activity.setW(width);
         activity.setH(height);
         activity.setType(ImgEnum.activity);
         listImg.add(activity);
      } else if (imgActivity != null) {
         listImg.add(imgActivity);
      }
                EvaluateEnum type = goodsEvaluate.getType();
                if (type != null && type == EvaluateEnum.activity) {
                    List<CommentInfo> comments = goodsEvaluate.getComments();
                    if (comments != null) {
                        for (CommentInfo commentInfo : comments) {
                            CommentInfoEnum commentInfoEnum = commentInfo.getTypeEnum();
                            if (commentInfoEnum != null && commentInfoEnum == CommentInfoEnum.currencyCoupon) {
                                String endTime = commentInfo.getEndTime();
                                if (!StringUtil.isNullOrEmpty(endTime)) {
                                    Date endDay = format.parse(endTime);
                                    if (endDay.getTime() < now.getTime()) {
                                        goodsEvaluate.setState(0); // 活动过期
                                    }
                                }
                            }
      // 编辑图片
      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 (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);
               }
            }
         }
      }
                GoodsDetailVO goods = goodsEvaluate.getGoods();
                if (goods != null) {
                    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);
                    }
                }
                // 更新商品信息
                List<ImgInfo> imgList = goodsEvaluate.getImgList();
                if (imgList == null || imgList.size() == 0) {
                    continue;
                }
      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++;
      }
                for (ImgInfo imgInfo : imgList) {
                    SimpleGoods simpleGoods = imgInfo.getGoods();
                    if (simpleGoods == null) {
                        continue;
                    }
      // 清理老图片
      if (listOld != null && listOld.size() > 0) {
         for (int j = 0; j < listOld.size(); j++) {
            boolean del = true;
            String oldPic = listOld.get(j);
            for (ImgInfo imgInfo : listImg) {
               String url = imgInfo.getUrl();
               if (url.equals(oldPic)) {
                  del = false;
               }
            }
            if (del)
               listDel.add(listOld.get(j));
         }
      }
                    GoodsDetailVO goodsDetailVO = getGoodsNewInfo(simpleGoods.getGoodsId(), simpleGoods.getGoodsType(),
                            params);
                    if (goodsDetailVO != null) {
                        simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                        simpleGoods.setState(0);
                        CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
                        if (couponInfo == null) {
                            simpleGoods.setPrice(goodsDetailVO.getZkPrice());
                        } else {
                            simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                            simpleGoods.setAmount(couponInfo.getAmount());
                        }
                        imgInfo.setGoods(simpleGoods);
                        imgInfo.setGoodsVO(goodsDetailVO);
                    } else {
                        simpleGoods.setRemarks("更新-位置找到商品信息");
                        simpleGoods.setState(1);
                        imgInfo.setGoods(simpleGoods);
                        GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
                        if (goodsVO != null) {
                            goodsVO.setState(1);
                            imgInfo.setGoodsVO(goodsVO);
                        }
                    }
                }
                goodsEvaluate.setImgList(imgList);
                goodsEvaluate.setUpdateTime(new Date());
                goodsEvaluateDao.save(goodsEvaluate);
            }
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
    }
      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;
         }
      }
    private GoodsDetailVO getGoodsNewInfo(String goodsId, int goodsType, GoodsMoneyConfigParamsDTO paramsDTO) {
        GoodsDetailVO vo = null;
        if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoGoodsBrief goods;
            try {
                goods = redisManager.getTaoBaoGoodsBrief(goodsId);
                if (goods != null) {
                    vo = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
                }
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            }
      resultObj.setLineNum(lineNum);
      resultObj.setImgList(listImg);
      goodsEvaluateDao.save(resultObj);
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
            if (goodsInfo != null) {
                vo = GoodsDetailVOFactory.convertJDGoods(goodsInfo, paramsDTO);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
            if (goodsInfo != null)
                vo = GoodsDetailVOFactory.convertPDDGoods(goodsInfo, paramsDTO);
        }
        return vo;
    }
      // 删除图片
      if (listDel.size() > 0) {
         for (String url : listDel) {
            if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
               removePicture(url);
            }
         }
      }
   }
    @Override
    public void addGoodsEvaluate(String goodsId, List<ImgInfo> imgList, ActivityUser user, String title, String comment,
                                 Date startTime, SystemEnum system) throws GoodsEvaluateException {
        if (goodsId == null || user == null || StringUtil.isNullOrEmpty(title)) {
            throw new GoodsEvaluateException(1, "相关参数不能为空");
        }
   @Override
   public void deleteBatchByPrimaryKey(List<String> list) {
      if (list == null || list.size() == 0) {
         return;
      }
      for (String id : list) {
         goodsEvaluateDao.deleteById(id);
      }
   }
        Date limitDate = DateUtil.reduceDay(new Date(), 7);
   @Override
   public GoodsEvaluate getById(String id) {
      return goodsEvaluateDao.getById(id);
   }
        List<GoodsEvaluate> evaluateList = goodsEvaluateDao.queryExistLimitTime(Constant.SOURCE_TYPE_TAOBAO, goodsId, limitDate);
        if (evaluateList != null && evaluateList.size() > 0)
            throw new GoodsEvaluateException(1, "该商品已存在");
   @Override
   public void saveComment(String pid, CommentInfo commentInfo) throws GoodsEvaluateException {
      GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(pid);
      if (goodsEvaluate == null) {
         throw new GoodsEvaluateException(1, "动态已不存在");
      }
        TaoBaoGoodsBrief goodsBrief = null;
        try {
            goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
        } catch (TaobaoGoodsDownException e) {
            throw new GoodsEvaluateException(1, "商品已下架");
        }
      String tags = commentInfo.getTags();
      if (!StringUtil.isNullOrEmpty(tags)) {
         String[] arrayTags = tags.split("\\s+");
         if (arrayTags != null && arrayTags.length > 0) {
            String[] arrayTagsColour = null;
            String tagsColour = commentInfo.getTagsColour();
            if (!StringUtil.isNullOrEmpty(tagsColour)) {
               arrayTagsColour = tagsColour.split("\\s+");
            }
        if (goodsBrief == null) {
            throw new GoodsEvaluateException(1, "未找到商品信息");
        }
            String color = "#E5005C";
            List<ClientTextStyleVO> tagList = new ArrayList<ClientTextStyleVO>();
            for (int i = 0; i < arrayTags.length; i++) {
               String tag = arrayTags[i];
               if (arrayTagsColour != null && arrayTagsColour.length == arrayTags.length) {
                  color = arrayTagsColour[i];
               }
               ClientTextStyleVO styleVO = new ClientTextStyleVO();
               styleVO.setColor(color);
               styleVO.setContent(tag);
               tagList.add(styleVO);
            }
            commentInfo.setTagList(tagList);
         }
      }
        BigDecimal couponAmount = goodsBrief.getCouponAmount();
        if (couponAmount == null || couponAmount.compareTo(new BigDecimal(0)) < 1) {
            throw new GoodsEvaluateException(1, "该商品无券");
        }
      List<CommentInfo> comments = goodsEvaluate.getComments();
      if (comments == null) {
         comments = new ArrayList<>();
      }
        // 白底图
        List<String> imgs = new ArrayList<>();
      Integer weight = commentInfo.getWeight();
      if (weight == null)
         commentInfo.setWeight(1);
        imgs.addAll(goodsBrief.getImgList());
      comments.add(commentInfo);
        // 商品VO
        GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
        GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, paramsDTO);
      Collections.shuffle(comments);
      Comparator<CommentInfo> cm = new Comparator<CommentInfo>() {
         @Override
         public int compare(CommentInfo o1, CommentInfo o2) {
            return o1.getWeight() != null && o2.getWeight() != null ? o2.getWeight() - o1.getWeight() : 0;
         }
      };
      Collections.sort(comments, cm);
        // 商品图片信息
        int i = 0;
        if (imgList == null)
            imgList = new ArrayList<ImgInfo>();
      goodsEvaluate.setComments(comments);
      goodsEvaluateDao.save(goodsEvaluate);
   }
        if (imgList.size() == 0)
            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);
                }
                imgList.add(imgInfo);
                i++;
            }
   @Override
   public void release(String id) throws GoodsEvaluateException {
      GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(id);
      if (goodsEvaluate == null) {
         throw new GoodsEvaluateException(1, "动态已不存在");
      }
      goodsEvaluate.setState(1);
      goodsEvaluateDao.save(goodsEvaluate);
   }
        // 评论内容
        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 {
            goodsBrief.setCouponLink(null);
            String token = shareGoodsService.createTaoBaoToken(Constant.LINK_TOKEN_VERIFY_UID, goodsBrief);
            String template = configService.getValue(ConfigKeyEnum.quickShareTBCommentText.getKey(), system);
            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());
        }
   @Override
   public void deleteComment(String pid, List<String> list) throws GoodsEvaluateException {
      if (list == null || list.size() == 0) {
         return;
      }
      GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(pid);
      if (goodsEvaluate == null) {
         throw new GoodsEvaluateException(1, "动态已不存在");
      }
        List<CommentInfo> commentsNew = new ArrayList<>();
        commentsNew.add(commentInfo);
      List<CommentInfo> comments = goodsEvaluate.getComments();
      if (comments == null || comments.size() == 0) {
         return;
      }
        // 一行显示多少个图片
        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;
            }
        }
      for (String id : list) {
         for (int i = 0; i < comments.size(); i++) {
            CommentInfo commentInfo = comments.get(i);
            if (id.equals(commentInfo.getId())) {
               comments.remove(i);
               i--;
            }
         }
      }
      goodsEvaluate.setComments(comments);
      goodsEvaluateDao.save(goodsEvaluate);
   }
        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);
        goodsEvaluate.setSystem(system);
        goodsEvaluateDao.save(goodsEvaluate);
    }
   @Override
   public void addShareNum(String id) {
      GoodsEvaluate article = goodsEvaluateDao.getById(id);
      if (article != null) {
         Integer num = article.getShareNum();
         if (num == null) {
            num = 0;
         }
         article.setShareNum(num + 1);
         Integer numReal = article.getShareNumReal();
         if (numReal == null) {
            numReal = 0;
         }
         article.setShareNumReal(numReal + 1);
    @Override
    public int addGoodsEvaluate(TaoBaoGoodsBrief goodsBrief, List<String> imgs, ActivityUser user, String title, SystemEnum system) throws GoodsEvaluateException {
        if (goodsBrief == null || user == null || StringUtil.isNullOrEmpty(title)) {
            throw new GoodsEvaluateException(1, "相关参数不能为空");
        }
        Date limitDate = DateUtil.reduceDay(new Date(), 7);
         goodsEvaluateDao.save(article);
      }
   }
        String goodsId = goodsBrief.getAuctionId();
        List<GoodsEvaluate> evaluateList = goodsEvaluateDao.queryExistLimitTime(Constant.SOURCE_TYPE_TAOBAO, goodsId + "", limitDate);
        if (evaluateList != null && evaluateList.size() > 0)
            throw new GoodsEvaluateException(1, "该商品已存在");
   @Override
   public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType, String typeEnum) {
      return goodsEvaluateDao.query(start, count, key, state, dynamicType, typeEnum);
   }
        if (imgs == null) {
            imgs = new ArrayList<>();
        }
        if (imgs.size() == 0) {
            imgs.addAll(goodsBrief.getImgList());
        }
   @Override
   public long count(String key, Integer state, int dynamicType, String typeEnum) {
      return goodsEvaluateDao.count(key, state, dynamicType, typeEnum);
   }
        // 商品VO
        GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
        GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, paramsDTO);
   @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);
      }
        // 商品图片信息
        int i = 0;
        List<ImgInfo> imgList = new ArrayList<>();
      // 素材
      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);
      }
   }
        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);
            }
            imgList.add(imgInfo);
            i++;
        }
   @Override
   @Cacheable(value = "dynamicCache", key = "'queryValidEvaluateCache-'+#start")
   public List<GoodsEvaluate> queryValidEvaluateCache(int start, int count) {
      List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(start, count, 1);
      // 更新商品信息
      executor.execute(new Runnable() {
         @Override
         public void run() {
            // 更新信息
            updateGoodInfo(list);
        // 生成口令
        String token = null;
        try {
            TaoBaoLink taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForShare(system, Constant.LINK_TOKEN_VERIFY_UID, goodsBrief.getAuctionId(), Constant.LINK_TOKEN_VERIFY_RELATION_ID, null);
            token = taoBaoLink.getTaoToken();
        } catch (TaoBaoConvertLinkException e) {
            e.printStackTrace();
            throw new GoodsEvaluateException(1, "转链失败");
        }
            // 删除已过期
            removeOverdue();
            removeDownGoods();
         }
      });
      return list;
   }
        String template = configService.getValue(ConfigKeyEnum.quickShareTBCommentText.getKey(), system);
        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 commentInfo = new CommentInfo();
        commentInfo.setNeedSpin(true);
        commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
        commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
        commentInfo.setContent(commentText);
        commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
   @Override
   public long countValid() {
      return goodsEvaluateDao.countValid(1);
   }
        List<CommentInfo> commentsNew = new ArrayList<>();
        commentsNew.add(commentInfo);
   @Override
   @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");
        // 一行显示多少个图片
        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;
            }
        }
      List<GoodsEvaluate> listNew = new ArrayList<>();
      for (GoodsEvaluate goodsEvaluate : list) {
         GoodsEvaluate evaluateNew = new GoodsEvaluate();
         try {
            PropertyUtils.copyProperties(evaluateNew, goodsEvaluate);
         } catch (Exception e) {
            e.printStackTrace();
            continue;
         }
        int result = 0;
        int zeroPoint = 0;
        // ★深夜大福利:先抢券,0点准时下单★
        // 含这种文本的定于每晚10点在动态-发圈 集中发,每晚10点在群发单中只发一条。
        Date startTime = new Date();
        if (!StringUtil.isNullOrEmpty(title)) {
            String value = configService.getValue(ConfigKeyEnum.evaluateZeroKey.getKey(), system);
            if (!StringUtil.isNullOrEmpty(value)) {
                List<String> asList = Arrays.asList(value.split(","));
                if (asList != null && asList.size() > 0) {
                    boolean zero = false;
                    for (String zerokey : asList) {
                        if (title.contains(zerokey)) {
                            zero = true;
                            break;
                        }
                    }
         // 按照发布显示时间段起始时间为准。
         goodsEvaluate.setPublishTime(goodsEvaluate.getStartTime());
                    if (zero) {
                        result = 1;
                        zeroPoint = 1;
                        startTime = TimeUtil.parseYYYYMMDD_HHMM(TimeUtil.getGernalTime(startTime) + " 22:00");
                    }
                }
            }
        }
         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;
               }
        GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
        goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
        goodsEvaluate.setUser(user);
        goodsEvaluate.setTitle(getDescNew(title));
        goodsEvaluate.setState(1);
        goodsEvaluate.setZeroPoint(zeroPoint);
        goodsEvaluate.setDynamicType(1);
        goodsEvaluate.setType(EvaluateEnum.single);
        goodsEvaluate.setShareNum((int) (Math.random() * 5000) + 1000);
        goodsEvaluate.setShareNumReal(0);
        goodsEvaluate.setWeight(0.0);
        goodsEvaluate.setStartTime(startTime);
        goodsEvaluate.setEndTime(DateUtil.plusDayDate(3, startTime));
        goodsEvaluate.setPublishTime(new Date());
        goodsEvaluate.setCreateTime(new Date());
        goodsEvaluate.setUpdateTime(new Date());
        goodsEvaluate.setGoods(goodsVO);
        goodsEvaluate.setLineNum(lineNum);
        goodsEvaluate.setImgList(imgList);
        goodsEvaluate.setComments(commentsNew);
        goodsEvaluate.setSystem(system);
        goodsEvaluateDao.save(goodsEvaluate);
        return result;
    }
               CommentInfo commentInfoNew = new CommentInfo();
               try {
                  PropertyUtils.copyProperties(commentInfoNew, commentInfo);
               } catch (Exception e) {
                  e.printStackTrace();
                  continue;
               }
    @Resource
    private DaTaoKeTipOffManager daTaoKeTipOffManager;
               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, "");
    @Override
    public int addGoodsEvaluate(DaTaoKeListTopOffDTO dto, ActivityUser user, SystemEnum system) throws GoodsEvaluateException {
        if (dto == null || user == null || system == null) {
            throw new GoodsEvaluateException(1, "相关参数不能为空");
        }
                        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);
               }
        String title = null;
               CommentInfoEnum typeComment = commentInfoNew.getTypeEnum();
               if (typeComment != null && typeComment == CommentInfoEnum.goodsCoupon) {
                  GoodsDetailVO goods = evaluateNew.getGoods();
                  if (goods != null && goods.isHasCoupon()) {
                     commentNew.add(commentInfoNew);
                     continue;
                  }
               }
        try {
            title = daTaoKeTipOffManager.convertLinkForEvaluateWithEncode(dto, system);
        } catch (Exception e) {
            throw new GoodsEvaluateException(1, "转链出错");
        }
               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;
                  }
               }
        Date limitDate = DateUtil.reduceDay(new Date(), 7);
               commentNew.add(commentInfoNew);
            }
            evaluateNew.setComments(commentNew);
        String identifyCode = "dataoke-" + StringUtil.Md5(DaTaoKeTipOffUtil.getRecoomendDesc(dto));
            if (typeEnum != null && typeEnum == EvaluateEnum.single) {
               if (!currencyCoupon && !singleCoupn) { // 所有券评论下架
                  GoodsDetailVO goods = evaluateNew.getGoods();
                  if (goods != null) {
                     goods.setState(1); // 评论不存在 下架
                     evaluateNew.setRemarks("评论验证下架");
                  }
        GoodsEvaluate evaluate = goodsEvaluateDao.selectExistLimitTime(identifyCode, limitDate);
        if (evaluate != null)
            throw new GoodsEvaluateException(1, "线报已存在");
                  List<ImgInfo> imgList = evaluateNew.getImgList();
                  if (imgList != null) {
                     for (ImgInfo imgInfo : imgList) {
                        SimpleGoods simpleGoods = imgInfo.getGoods();
                        if (simpleGoods != null) {
                           simpleGoods.setState(1);
                           simpleGoods.setRemarks("评论验证下架");
                        }
                     }
        List<String> imgs = new ArrayList<>();
        if (!StringUtil.isNullOrEmpty(dto.getPicUrls())) {
            imgs.addAll(Arrays.asList(dto.getPicUrls().split(",")));
        }
                  }
               }
            }
         }
        GoodsDetailVO goods = null;
         listNew.add(evaluateNew);
      }
        //获取图片
        if (!StringUtil.isNullOrEmpty( dto.getItemIds())) {
            Set<String> imgSet = new HashSet<>();
            imgSet.addAll(imgs);
            String id = dto.getItemIds().split(",")[0];
            String source = dto.getPlatform();
            switch (source) {
                case "淘宝":
                    try {
                        TaoBaoGoodsBrief goodsBrief = TaoKeApiUtil.searchGoodsDetail(id);
                        if (goodsBrief != null && goodsBrief.getImgList() != null) {
                            GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
                            goods = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
                            goods = goodsLijinMnager.loadTBMoneyInfo(system, null, goodsBrief, goods, false);
                            for (String img : goodsBrief.getImgList()) {
                                if (!imgSet.contains(img) && imgs.size() < 9) {
                                    imgSet.add(img);
                                    imgs.add(img);
                                }
                            }
                        }
      List<GoodsEvaluate> listOBJ = list;
      // 更新商品信息
      executor.execute(new Runnable() {
         @Override
         public void run() {
            updateGoodInfo(listOBJ);
                    } catch (TaobaoGoodsDownException e) {
                        e.printStackTrace();
                    }
                    break;
                case "京东": {
                    JDGoods jdGoods = JDApiUtil.queryGoodsDetail(id);
                    if (jdGoods != null && jdGoods.getImageList() != null) {
                        GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
                        goods = GoodsDetailVOFactory.convertJDGoods(jdGoods, params);
                        goods = goodsLijinMnager.loadOtherMoneyInfo(system, null, CommonGoodsFactory.create(jdGoods), goods);
                        for (String img : jdGoods.getImageList()) {
                            if (!imgSet.contains(img) && imgs.size() < 9) {
                                imgSet.add(img);
                                imgs.add(img);
                            }
                        }
                    }
                }
                break;
                case "拼多多": {
                    PDDGoodsDetail goodsDetail = PinDuoDuoApiUtil.getGoodsDetail(id);
                    if (goodsDetail != null && goodsDetail.getGoodsGalleryUrls() != null) {
                        GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
                        goods = GoodsDetailVOFactory.convertPDDGoods(goodsDetail, params);
                        goods = goodsLijinMnager.loadOtherMoneyInfo(system, null, CommonGoodsFactory.create(goodsDetail), goods);
            // 删除已过期
            removeOverdue();
            removeDownGoods();
         }
      });
                        for (String img : goodsDetail.getGoodsGalleryUrls()) {
                            if (!imgSet.contains(img) && imgs.size() < 9) {
                                imgSet.add(img);
                                imgs.add(img);
                            }
                        }
                    }
                }
                break;
                default:
                    throw new GoodsEvaluateException(1, "不支持的source:" + source);
            }
        }
      return listNew;
   }
   @Override
   public long countValidMaterials(int type) {
      return goodsEvaluateDao.countValid(type);
   }
        // 商品图片信息
        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);
            imgInfo.setType(ImgEnum.img);
            imgList.add(imgInfo);
        }
   /**
    * 更新商品信息
    */
   public void updateGoodInfo(List<GoodsEvaluate> list) {
      if (!Constant.IS_OUTNET) {
         return; // 外网进行更新
      }
        // 一行显示多少个图片
        int lineNum = 3;
        int result = 0;
        int zeroPoint = 0;
        Date startTime = new Date();
      if (list == null || list.size() == 0) {
         return;
      }
      try {
         Date now = new Date();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         ConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
         params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
         for (GoodsEvaluate goodsEvaluate : list) {
            // 是否2个小时之内已更新
            Date updateTime = goodsEvaluate.getUpdateTime();
            if (updateTime != null) {
               long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
               long nh = 1000 * 60 * 60;// 一小时的毫秒数
               long diff = System.currentTimeMillis() - updateTime.getTime();
               long day = diff / nd;// 计算差多少天
               long hour = diff % nd / nh + day * 24;// 计算差多少小时
               if (hour < 2) {
                  continue;
               }
            }
        GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
        goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
        goodsEvaluate.setUser(user);
        goodsEvaluate.setTitle(title);
        goodsEvaluate.setState(1);
        goodsEvaluate.setZeroPoint(zeroPoint);
        goodsEvaluate.setDynamicType(1);
        goodsEvaluate.setType(EvaluateEnum.single);
        goodsEvaluate.setShareNum((int) (Math.random() * 5000) + 1000);
        goodsEvaluate.setShareNumReal(0);
        goodsEvaluate.setWeight(0.0);
        goodsEvaluate.setStartTime(startTime);
        goodsEvaluate.setEndTime(DateUtil.plusDayDate(3, startTime));
        goodsEvaluate.setPublishTime(new Date());
        goodsEvaluate.setCreateTime(new Date());
        goodsEvaluate.setUpdateTime(new Date());
        //线报不显示商品
        if (goods != null && goods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
            goods.setCreatetime(null);
            goodsEvaluate.setGoods(goods);
        }
        goodsEvaluate.setLineNum(lineNum);
        goodsEvaluate.setImgList(imgList);
        goodsEvaluate.setComments(null);
        goodsEvaluate.setSystem(system);
        goodsEvaluate.setIdentifyCode(identifyCode);
        goodsEvaluateDao.save(goodsEvaluate);
        return result;
    }
            EvaluateEnum type = goodsEvaluate.getType();
            if (type != null && type == EvaluateEnum.activity) {
               List<CommentInfo> comments = goodsEvaluate.getComments();
               if (comments != null) {
                  for (CommentInfo commentInfo : comments) {
                     CommentInfoEnum commentInfoEnum = commentInfo.getTypeEnum();
                     if (commentInfoEnum != null && commentInfoEnum == CommentInfoEnum.currencyCoupon) {
                        String endTime = commentInfo.getEndTime();
                        if (!StringUtil.isNullOrEmpty(endTime)) {
                           Date endDay = sdf.parse(endTime);
                           if (endDay.getTime() < now.getTime()) {
                              goodsEvaluate.setState(0); // 活动过期
                           }
                        }
                     }
    @Override
    public void addGoodsEvaluateByDaTaoKe(SystemEnum system) {
        List<Long> listId = null;
        List<GoodsEvaluate> listExist = goodsEvaluateDao.querySingleExist(system);
        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(Long.parseLong(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;
        }
            GoodsDetailVO goods = goodsEvaluate.getGoods();
            if (goods != null) {
               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);
               }
            }
            // 更新商品信息
            List<ImgInfo> imgList = goodsEvaluate.getImgList();
            if (imgList == null || imgList.size() == 0) {
               continue;
            }
        for (int i = 0; i < list.size(); i++) {
            boolean cerateGoods = addByDaTaoKeGoods(list.get(i), system);
            if (cerateGoods) {
                break;
            }
        }
    }
            for (ImgInfo imgInfo : imgList) {
               SimpleGoods simpleGoods = imgInfo.getGoods();
               if (simpleGoods == null) {
                  continue;
               }
               GoodsDetailVO goodsDetailVO = getGoodsNewInfo(simpleGoods.getGoodsId(), simpleGoods.getGoodsType(),
                     params);
               if (goodsDetailVO != null) {
                  simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                  simpleGoods.setState(0);
                  CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
                  if (couponInfo == null) {
                     simpleGoods.setPrice(goodsDetailVO.getZkPrice());
                  } else {
                     simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                     simpleGoods.setAmount(couponInfo.getAmount());
                  }
                  imgInfo.setGoods(simpleGoods);
                  imgInfo.setGoodsVO(goodsDetailVO);
               } else {
                  simpleGoods.setRemarks("更新-位置找到商品信息");
                  simpleGoods.setState(1);
                  imgInfo.setGoods(simpleGoods);
                  GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
                  if (goodsVO != null) {
                     goodsVO.setState(1);
                     imgInfo.setGoodsVO(goodsVO);
                  }
               }
            }
            goodsEvaluate.setImgList(imgList);
            goodsEvaluate.setUpdateTime(new Date());
            goodsEvaluateDao.save(goodsEvaluate);
         }
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
   }
    @Override
    public boolean addByDaTaoKeGoods(DaTaoKeDetailV2 daTaoKe, SystemEnum system) {
        try {
            Date limitDate = DateUtil.reduceDay(new Date(), 7);
   private GoodsDetailVO getGoodsNewInfo(Long goodsId, int goodsType, ConfigParamsDTO paramsDTO) {
      GoodsDetailVO vo = null;
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         TaoBaoGoodsBrief goods;
         try {
            goods = redisManager.getTaoBaoGoodsBrief(goodsId);
            if (goods != null) {
               vo = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
            }
         } catch (TaobaoGoodsDownException e) {
            e.printStackTrace();
         }
            List<GoodsEvaluate> evaluateList = goodsEvaluateDao.queryExistLimitTime(Constant.SOURCE_TYPE_TAOBAO,
                    daTaoKe.getGoodsId() + "", limitDate);
            if (evaluateList != null && evaluateList.size() > 0)
                return false;
      } else if (goodsType == Constant.SOURCE_TYPE_JD) {
         JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
         if (goodsInfo != null) {
            vo = GoodsDetailVOFactory.convertJDGoods(goodsInfo, paramsDTO);
         }
      } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
         PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
         if (goodsInfo != null)
            vo = GoodsDetailVOFactory.convertPDDGoods(goodsInfo, paramsDTO);
      }
      return vo;
   }
            TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(daTaoKe.getGoodsId());
            if (goodsBrief == null) {
                return false;
            }
   @Override
   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, "相关参数不能为空");
      }
            BigDecimal couponAmount = goodsBrief.getCouponAmount();
            if (couponAmount == null || couponAmount.compareTo(new BigDecimal(0)) < 1) {
                return false;
            }
      List<GoodsEvaluate> evaluateList = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO, goodsId);
      if (evaluateList != null && evaluateList.size() > 0)
         return;
            GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
            paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
            GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, paramsDTO);
      TaoBaoGoodsBrief goodsBrief = null;
      try {
         goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
      } catch (TaobaoGoodsDownException e) {
         throw new GoodsEvaluateException(1, "商品已下架");
      }
            ActivityUser user = null;
            if (daTaoKe.getCid() != null) {
                user = activityUserService.getRandomByDaTaoKeCid(daTaoKe.getCid());
            } else {
                List<ActivityRuleUser> ruleList = activityUserService.listByRuleCode(ActivityRuleUser.RULE_HAOHUO, 1, 20);
                user = ruleList.get((int) (ruleList.size() * Math.random())).getActivityUser();
            }
      if (goodsBrief == null) {
         throw new GoodsEvaluateException(1, "未找到商品信息");
      }
      BigDecimal couponAmount = goodsBrief.getCouponAmount();
      if (couponAmount == null || couponAmount.compareTo(new BigDecimal(0)) < 1) {
         throw new GoodsEvaluateException(1, "该商品无券");
      }
            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;
            }
      // 白底图
      List<String> imgs = new ArrayList<>();
      if (!StringUtil.isNullOrEmpty(goodsBrief.getPictUrlWhite())) {
         imgs.add(goodsBrief.getPictUrlWhite());
      }
      imgs.addAll(goodsBrief.getImgList());
            if (descNew.endsWith(",")) {
                descNew = descNew.substring(0, descNew.length() - 1);
            }
      // 商品VO
      ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, paramsDTO);
            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());
            goodsEvaluate.setSystem(system);
      // 商品图片信息
      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(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);
            }
            imgList.add(imgInfo);
            i++;
         }
            List<String> goodsimgs = goodsBrief.getImgList();
      // 评论内容
      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<String> imgs = new ArrayList<>();
            imgs.addAll(goodsimgs);
      List<CommentInfo> commentsNew = new ArrayList<>();
      commentsNew.add(commentInfo);
            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);
      // 一行显示多少个图片
      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;
         }
      }
                    // TaoBaoLink taoBaoLink =
                    // shareGoodsService.getTaoBaoLinkForShare(Constant.LINK_TOKEN_VERIFY_UID,
                    // goodsVO.getGoodsId(), null);
      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);
   }
                    String token = shareGoodsService.createTaoBaoToken(Constant.LINK_TOKEN_VERIFY_UID, goodsBrief);
   @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();
                    String template = configService.getValue(ConfigKeyEnum.quickShareTBCommentText.getKey(), system);
                    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");
                    }
      List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Service.getGoodsNotInList(subId, listId, 1);
      if (list == null || list.size() == 0) {
         return;
      }
                    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());
      for (int i = 0; i < list.size(); i++) {
         boolean cerateGoods = cerateGoods(list.get(i));
         if (cerateGoods) {
            break;
         }
      }
   }
                    String text2 = "";
                    String evaluateEmojis = configService.getValue(ConfigKeyEnum.evaluateEmojis.getKey(), system);
                    if (!StringUtil.isNullOrEmpty(evaluateEmojis)) {
                        text2 = evaluateEmojis + "\n";
                    }
   private boolean cerateGoods(DaTaoKeDetailV2 daTaoKe) {
      try {
         TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(daTaoKe.getGoodsId());
         if (goodsBrief == null) {
            return false;
         }
                    String evaluateText = configService.getValue(ConfigKeyEnum.evaluateText.getKey(), system);
                    if (!StringUtil.isNullOrEmpty(evaluateText)) {
                        text2 += evaluateText;
                    }
         BigDecimal couponAmount = goodsBrief.getCouponAmount();
         if (couponAmount == null || couponAmount.compareTo(new BigDecimal(0)) < 1) {
            return false;
         }
                    String dtitle = daTaoKe.getDtitle();
                    if (!StringUtil.isNullOrEmpty(dtitle)) {
                        text2 = text2 + dtitle + "\n";
                    } else if (!StringUtil.isNullOrEmpty(evaluateText)) {
                        text2 += "\n";
                    }
                    text2 += "先领【" + couponAmount + "元优惠券】下单";
         ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
         paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
         GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, paramsDTO);
         // 发布用户
         ActivityUser user = activityUserService.getRandomByDaTaoKeCid(daTaoKe.getCid());
                    CommentInfo commentInfo2 = new CommentInfo();
                    commentInfo2.setId(UUID.randomUUID().toString().replace("-", ""));
                    commentInfo2.setContent(text2);
                    commentInfo2.setTypeEnum(CommentInfoEnum.goodsCoupon);
                    commentInfo2.setType("");
                    commentInfo2.setNeedSpin(true);
         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;
         }
                    List<CommentInfo> commentsNew = new ArrayList<>();
                    commentsNew.add(commentInfo);
                    commentsNew.add(commentInfo2);
                    goodsEvaluate.setComments(commentsNew);
                }
                imgList.add(imgInfo);
                i++;
            }
         if (descNew.endsWith(",")) {
            descNew = descNew.substring(0, descNew.length() - 1);
         }
            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 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.setGoods(goodsVO);
            goodsEvaluate.setImgList(imgList);
            goodsEvaluateDao.save(goodsEvaluate);
        } catch (Exception e) {
            e.printStackTrace();
            LogHelper.errorDetailInfo(e);
            return false;
        }
        return true;
    }
         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());
    /**
     * 发圈标题 加入表情
     *
     * @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;
        }
         List<String> goodsimgs = goodsBrief.getImgList();
        if (descNew.endsWith(",")) {
            descNew = descNew.substring(0, descNew.length() - 1);
        }
        return descNew;
    }
         List<String> imgs = new ArrayList<>();
         if (!StringUtil.isNullOrEmpty(goodsBrief.getPictUrlWhite())) {
            imgs.add(goodsBrief.getPictUrlWhite());
         }
         imgs.addAll(goodsimgs);
    @Override
    public void updateTaoBaoGoods(TaoBaoGoodsBrief goods) {
        try {
            if (goods == null) {
                return;
            }
            for (SystemEnum system : SystemEnum.values()) {
                List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO,
                        goods.getAuctionId(), system);
                if (queryExist == null || queryExist.size() == 0) {
                    continue;
                }
                GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
                paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
                GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
                updateGoods(queryExist, goodsNew);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
         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);
    @Override
    public void updateJDGoods(JDGoods jdGoods) {
        if (jdGoods == null) {
            return;
        }
        for (SystemEnum system : SystemEnum.values()) {
            List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_JD, jdGoods.getItemId() + "", system);
            if (queryExist == null || queryExist.size() == 0) {
                continue;
            }
               // TaoBaoLink taoBaoLink =
               // shareGoodsService.getTaoBaoLinkForShare(Constant.LINK_TOKEN_VERIFY_UID,
               // goodsVO.getGoodsId(), null);
            GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
            paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
            GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertJDGoods(jdGoods, paramsDTO);
               String token = shareGoodsService.createTaoBaoToken(Constant.LINK_TOKEN_VERIFY_UID, goodsBrief);
            updateGoods(queryExist, goodsNew);
        }
    }
               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");
               }
    @Override
    public void updatePDDGoods(PDDGoodsDetail pddGoods) {
        if (pddGoods == null) {
            return;
        }
        for (SystemEnum system : SystemEnum.values()) {
            List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_PDD, pddGoods.getGoodsId() + "", system);
            if (queryExist == null || queryExist.size() == 0) {
                continue;
            }
               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());
            GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
            paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
            GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
            updateGoods(queryExist, goodsNew);
        }
    }
               String text2 = "";
               String evaluateEmojis = configService.get(ConfigKeyEnum.evaluateEmojis.getKey());
               if (!StringUtil.isNullOrEmpty(evaluateEmojis)) {
                  text2 = evaluateEmojis + "\n";
               }
    @Override
    public void updateVIPGoods(VIPGoodsInfo goods) {
        if (goods == null) {
            return;
        }
        for (SystemEnum system : SystemEnum.values()) {
            List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_VIP,
                    goods.getGoodsId(), system);
            if (queryExist == null || queryExist.size() == 0) {
                continue;
            }
               String evaluateText = configService.get(ConfigKeyEnum.evaluateText.getKey());
               if (!StringUtil.isNullOrEmpty(evaluateText)) {
                  text2 += evaluateText;
               }
            GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
            paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
            GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertVIPGoods(goods, paramsDTO);
            updateGoods(queryExist, goodsNew);
        }
    }
               String dtitle = daTaoKe.getDtitle();
               if (!StringUtil.isNullOrEmpty(dtitle)) {
                  text2 = text2 + dtitle + "\n";
               } else if (!StringUtil.isNullOrEmpty(evaluateText)) {
                  text2 += "\n";
               }
               text2 += "先领【" + couponAmount + "元优惠券】下单";
    @Override
    public void updateDYGoods(DYGoodsDetail goods) {
        if (goods == null) {
            return;
        }
        for (SystemEnum system : SystemEnum.values()) {
            List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_DY,
                    goods.getProduct_id()+"", system);
            if (queryExist == null || queryExist.size() == 0) {
                continue;
            }
               CommentInfo commentInfo2 = new CommentInfo();
               commentInfo2.setId(UUID.randomUUID().toString().replace("-", ""));
               commentInfo2.setContent(text2);
               commentInfo2.setTypeEnum(CommentInfoEnum.goodsCoupon);
               commentInfo2.setType("");
               commentInfo2.setNeedSpin(true);
            GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
            paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
            GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertDYGoods(goods, paramsDTO);
            updateGoods(queryExist, goodsNew);
        }
    }
               List<CommentInfo> commentsNew = new ArrayList<>();
               commentsNew.add(commentInfo);
               commentsNew.add(commentInfo2);
               goodsEvaluate.setComments(commentsNew);
            }
            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);
    @Override
    public void updateSuningGoods(SuningGoodsInfo goods) {
        if (goods == null) {
            return;
        }
        for (SystemEnum system : SystemEnum.values()) {
            List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_SUNING,
                    goods.getCommodityInfo().getCommodityCode(), system);
            if (queryExist == null || queryExist.size() == 0) {
                continue;
            }
            GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", system);
            paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(system));
            GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertSuningGoods(goods, paramsDTO);
            updateGoods(queryExist, goodsNew);
        }
    }
         goodsEvaluate.setGoods(goodsVO);
         goodsEvaluate.setImgList(imgList);
         goodsEvaluateDao.save(goodsEvaluate);
      } catch (Exception e) {
         e.printStackTrace();
         LogHelper.errorDetailInfo(e);
         return false;
      }
      return true;
   }
    private void updateGoods(List<GoodsEvaluate> listExist, GoodsDetailVO goodsNew) {
        for (GoodsEvaluate goodsEvaluate : listExist) {
            String goodsId = goodsNew.getGoodsId();
            int goodsType = goodsNew.getGoodsType();
   /**
    * 发圈标题 加入表情
    * @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;
      }
            GoodsDetailVO goodsDetailVO = goodsEvaluate.getGoods();
            if (goodsDetailVO != null && goodsDetailVO.getGoodsId() != null && goodsDetailVO.getGoodsId().equalsIgnoreCase(goodsId)
                    && goodsDetailVO.getGoodsType() == goodsType) {
                goodsEvaluate.setGoods(goodsNew);
            }
      if (descNew.endsWith(",")) {
         descNew = descNew.substring(0, descNew.length() - 1);
      }
      return descNew;
   }
            // 更新商品信息
            List<ImgInfo> imgList = goodsEvaluate.getImgList();
            if (imgList == null || imgList.size() == 0) {
                continue;
            }
   @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;
         }
            for (ImgInfo imgInfo : imgList) {
                SimpleGoods simpleGoods = imgInfo.getGoods();
                if (simpleGoods == null || !simpleGoods.getGoodsId().equalsIgnoreCase(goodsId)
                        || goodsType != simpleGoods.getGoodsType()) {
                    continue;
                }
         ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
         paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
         GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
         updateGoods(queryExist, goodsNew);
                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());
                }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
                imgInfo.setGoods(simpleGoods);
                imgInfo.setGoodsVO(goodsNew);
            }
   @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;
      }
            goodsEvaluate.setImgList(imgList);
            goodsEvaluate.setUpdateTime(new Date());
            goodsEvaluateDao.save(goodsEvaluate);
        }
    }
      ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertJDGoods(jdGoods, paramsDTO);
    @Override
    public void offlineTaoBaoGoods(String goodsId) {
        try {
            if (goodsId == null) {
                return;
            }
      updateGoods(queryExist, goodsNew);
   }
            for (SystemEnum system : SystemEnum.values()) {
                List<GoodsEvaluate> list = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO, goodsId, system);
                if (list == null || list.size() == 0) {
                    continue;
                }
                // 下架商品
                offlineGoods(list, Constant.SOURCE_TYPE_TAOBAO, goodsId);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   @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;
      }
    @CacheEvict(value = "dynamicCache", allEntries = true)
    public void offlineGoods(List<GoodsEvaluate> list, int goodsType, String goodsId) {
      ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55");
      paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
      GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
      updateGoods(queryExist, goodsNew);
   }
        for (GoodsEvaluate goodsEvaluate : list) {
            // 商品下架
            GoodsDetailVO goodsDetailVO = goodsEvaluate.getGoods();
            goodsDetailVO.setState(1);
   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) {
                goodsEvaluate.setUpdateTime(new Date());
                goodsEvaluateDao.save(goodsEvaluate);
                continue;
            }
         // 更新商品信息
         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(1);
                GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
                goodsVO.setState(1);
         for (ImgInfo imgInfo : imgList) {
            SimpleGoods simpleGoods = imgInfo.getGoods();
            if (simpleGoods == null || simpleGoods.getGoodsId() != goodsId
                  || goodsType != simpleGoods.getGoodsType()) {
               continue;
            }
                imgInfo.setGoods(simpleGoods);
                imgInfo.setGoodsVO(goodsVO);
            }
            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());
            }
            goodsEvaluate.setImgList(imgList);
            goodsEvaluate.setUpdateTime(new Date());
            goodsEvaluateDao.save(goodsEvaluate);
        }
    }
            imgInfo.setGoods(simpleGoods);
            imgInfo.setGoodsVO(goodsNew);
         }
    /**
     * 删除已过期时间
     */
    private void removeOverdue() {
        if (1 > 0)
            return;
         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();
      }
   }
        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;// 一天的毫秒数
   @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;
         }
        long time = java.lang.System.currentTimeMillis();
        for (GoodsEvaluate goodsEvaluate : list) {
            long diff = time - goodsEvaluate.getEndTime().getTime();
            long min = diff % nd % nh / nm;
         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);
         }
            // 过期超过10分钟就删除
            if (min > 10) {
                goodsEvaluateDao.remove(goodsEvaluate);
            }
        }
    }
         goodsEvaluate.setImgList(imgList);
         goodsEvaluate.setUpdateTime(new Date());
         goodsEvaluateDao.save(goodsEvaluate);
      }
   }
    /**
     * 删除商品已下架-单品
     */
    private void removeDownGoods() {
        if (1 > 0)
            return;
        try {
            List<GoodsEvaluate> list = goodsEvaluateDao.removeDownGoods();
            if (list == null || list.size() == 0) {
                return;
            }
   /**
    * 删除已过期时间
    */
   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;// 一天的毫秒数
            for (GoodsEvaluate goodsEvaluate : list) {
                goodsEvaluateDao.remove(goodsEvaluate);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
      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);
         }
      }
   }
    @Override
    public GoodsEvaluate queryExistSingle(String goodsId, int goodsType, SystemEnum system) {
        List<GoodsEvaluate> list = goodsEvaluateDao.queryExistSingle(goodsType, goodsId, system);
        if (list != null && list.size() > 0)
            return list.get(0);
        return null;
    }
   /**
    * 删除商品已下架-单品
    */
   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();
      }
   }
}