admin
2020-03-05 58720dd94aae4c360e9a18c5e608033c85d4e11f
视频封面图片剪切
2个文件已修改
286 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/ImageCropUtil.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -1,6 +1,8 @@
package com.yeshi.fanli.service.impl.dynamic;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
@@ -20,7 +22,7 @@
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.ImageCropUtil;
import org.yeshi.utils.tencentcloud.COSManager;
import com.yeshi.fanli.dao.dynamic.GoodsEvaluateDao;
@@ -54,11 +56,11 @@
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.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.jd.JDUtil;
@@ -86,23 +88,20 @@
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    @Resource
    private JDGoodsCacheUtil jdGoodsCacheUtil;
    @Resource
    private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
    @Resource
    private ConfigService configService;
    @Resource
    private ShareGoodsService shareGoodsService;
    @Resource
    private ConvertLinkManager convertLinkManager;
    @Override
    public String saveHead(MultipartFile file, GoodsEvaluate record) throws GoodsEvaluateException {
@@ -115,7 +114,7 @@
        if (StringUtil.isNullOrEmpty(tilte)) {
            throw new GoodsEvaluateException(1, "推荐语不能为空");
        }
        try {
            ActivityUser activityUser = activityUserService.getActivityUserByNickName(record.getUser(), file);
            if (activityUser == null)
@@ -129,7 +128,7 @@
            if (record.getStartTime() != null && record.getEndTime().getTime() <= record.getStartTime().getTime())
                throw new GoodsEvaluateException(1, "截止时间必须大于开始时间");
        } else {
            record.setEndTime(DateUtil.plusDayDate(3,new Date()));
            record.setEndTime(DateUtil.plusDayDate(3, new Date()));
        }
        Integer dynamicType = record.getDynamicType();
@@ -137,8 +136,8 @@
            record.setDynamicType(1);
        }
        if (record.getShareNum() == null || record.getShareNum() <=0 ) {
            record.setShareNum((int)(Math.random()*5000)+1000);
        if (record.getShareNum() == null || record.getShareNum() <= 0) {
            record.setShareNum((int) (Math.random() * 5000) + 1000);
        }
        if (record.getWeight() == null)
@@ -146,7 +145,7 @@
        if (record.getStartTime() == null)
            record.setStartTime(new Date());
        record.setPublishTime(record.getStartTime());
        String id = record.getId();
@@ -182,6 +181,14 @@
    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();
    }
    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;
@@ -224,10 +231,10 @@
                ImgEnum type = info.getType();
                if (type == ImgEnum.video) {
                    imgVideo = info;
                } else if (type == ImgEnum.goods ) {
                } else if (type == ImgEnum.goods) {
                    listOld.add(info.getUrl());
                    oldGoodsVO = info.getGoodsVO();
                } else if (type == ImgEnum.img){
                } else if (type == ImgEnum.img) {
                    listOld.add(info.getUrl());
                }
            }
@@ -241,11 +248,16 @@
                    throw new GoodsEvaluateException(1, "视频链接不能为空");
                }
                InputStream inputStream = filevideo.getInputStream();
                BufferedImage sourceImg = ImageIO.read(inputStream);
                File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getName());
                // 裁剪视频封面,宽高比为2:1
                ImageCropUtil.centerCrop(inputStream, destFile, 2.0f);
                BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
                int width = sourceImg.getWidth();
                int height = sourceImg.getHeight();
                String picLink = uploadPicture(filevideo);
                String picLink =  uploadPicture(destFile,filevideo.getContentType());
                if (imgVideo != null) {
                    String url = imgVideo.getUrl();
                    if (!StringUtil.isNullOrEmpty(url)) {
@@ -332,7 +344,7 @@
            pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
            goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(pddGoods, params);
        }
        if (goodsDetailVO == null) {
            throw new GoodsEvaluateException(1, "该商品信息不存在");
        }
@@ -373,7 +385,7 @@
                totalImg++;
            }
        }
        if (tempList.size() > 0) {
            listImg.addAll(tempList);
        }
@@ -408,29 +420,29 @@
        resultObj.setGoods(goodsDetailVO);
        resultObj.setMainPicNum(picNum);
        resultObj.setImgList(listImg);
        boolean addComment = true;
        List<CommentInfo> commentsNew = new ArrayList<>();
        List<CommentInfo> comments = resultObj.getComments();
        if (comments != null && comments.size() > 0) {
            for (CommentInfo commentInfo: comments) {
            for (CommentInfo commentInfo : comments) {
                if (commentInfo.getTypeEnum() == CommentInfoEnum.goodsCoupon) {
                    if (oldGoodsVO != null && oldGoodsVO.getGoodsId().longValue() == goodsId.longValue()
                    if (oldGoodsVO != null && oldGoodsVO.getGoodsId().longValue() == goodsId.longValue()
                            && oldGoodsVO.getGoodsType() == goodsType) {
                        addComment = false;
                    }
                    }
                    continue;
                }
                }
                commentsNew.add(commentInfo);
            }
        }
        }
        /*
         * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 = goodsDetailVO.getCouponInfo(); if
         * (couponInfo1 == null) { addComment = false; }
         * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 =
         * goodsDetailVO.getCouponInfo(); if (couponInfo1 == null) { addComment
         * = false; }
         */
        if (addComment) {
            String commentText = "";
            if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
@@ -444,15 +456,16 @@
                    couponUrl = couponInfo.getLink();
                }
                String materialId = "https://item.jd.com/" + goodsId + ".html";
                String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "","1");
                String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl,
                        JDApiUtil.POSITION_SHARE + "", "1");
                String template = configService.get(ConfigKeyEnum.quickShareJDCommentText.getKey());
                commentText = template.replace("[链接]", jumpLink);
                commentText = template.replace("[链接]", jumpLink);
            } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
                String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", "1");
                String template = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
                commentText = template.replace("[链接]", jumpLink);
            }
            commentText = commentText.replace("[原价]", goodsDetailVO.getZkPrice().toString());
            if (!goodsDetailVO.isHasCoupon()) {
                commentText = commentText.replace("领券抢购", "抢购");
@@ -460,10 +473,10 @@
            } else {
                commentText = commentText.replace("[券后价]", goodsDetailVO.getCouponPrice().toString());
            }
            commentText =commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
            commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n",
                    "\r\n");
            CommentInfo commentInfo = new CommentInfo();
            commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
            commentInfo.setContent(commentText);
@@ -483,31 +496,32 @@
        }
    }
    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) {
        } else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
            String couponUrl = null;
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsDetailVO.getGoodsId());
            JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
            if (couponInfo != null) {
                couponUrl = couponInfo.getLink();
            }
            String materialId = "https://item.jd.com/" + goodsDetailVO.getGoodsId() + ".html";
            String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "","1");
            String 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");
            commentText = template.replace("[链接]", jumpLink);
        } else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
            String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsDetailVO.getGoodsId(),
                    PinDuoDuoApiUtil.PID_SHARE + "", "1");
            String template = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
            commentText = template.replace("[链接]", jumpLink);
        }
        commentText = commentText.replace("[原价]", goodsDetailVO.getZkPrice().toString());
        if (!goodsDetailVO.isHasCoupon()) {
            commentText = commentText.replace("领券抢购", "抢购");
@@ -515,10 +529,10 @@
        } else {
            commentText = commentText.replace("[券后价]", goodsDetailVO.getCouponPrice().toString());
        }
        return commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
    }
    public GoodsDetailVO getGoodsDetailVO(Long goodsId, Integer goodsType) throws GoodsEvaluateException {
        GoodsDetailVO goodsDetail = null;
        BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
@@ -584,11 +598,15 @@
                }
                InputStream inputStream = filevideo.getInputStream();
                BufferedImage sourceImg = ImageIO.read(inputStream);
                File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getName());
                // 裁剪视频封面,宽高比为2:1
                ImageCropUtil.centerCrop(inputStream, destFile, 2.0f);
                BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
                int width = sourceImg.getWidth();
                int height = sourceImg.getHeight();
                String picLink = uploadPicture(filevideo);
                String picLink = uploadPicture(destFile,filevideo.getContentType());
                if (imgVideo != null) {
                    String url = imgVideo.getUrl();
                    if (!StringUtil.isNullOrEmpty(url)) {
@@ -640,7 +658,7 @@
                    }
                    String picUrl = goodsDetailVO.getPicUrl();
                    if (fileRequest != null) {
                        MultipartFile file = fileRequest.getFile("file" + i);
                        if (file != null) {
@@ -671,7 +689,7 @@
                    }
                    imgInfo0.setGoods(simpleGoods);
                    imgInfo0.setGoodsVO(goodsDetailVO);
                    listImg.add(imgInfo0);
                    totalImg++;
                }
@@ -743,37 +761,37 @@
        }
    }
    @Override
    public void saveGoodsComment(String id, int kind, List<CommentInfo> comments) throws GoodsEvaluateException, Exception {
        if (comments == null || comments.size() == 0 ) {
    public void saveGoodsComment(String id, int kind, List<CommentInfo> comments)
            throws GoodsEvaluateException, Exception {
        if (comments == null || comments.size() == 0) {
            throw new GoodsEvaluateException(1, "内容不能为空");
        }
        GoodsEvaluate resultObj = goodsEvaluateDao.getById(id);
        if (resultObj == null)
            throw new GoodsEvaluateException(1, "第一部分信息缺失");
        GoodsDetailVO goods = resultObj.getGoods();
        if(kind == 1 && goods == null) {
        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 ++) {
            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);
        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) {
@@ -788,15 +806,15 @@
                    throw new GoodsEvaluateException(1, "不包含可转链的口令与链接");
                }
            }
            if (StringUtil.isNullOrEmpty(commentInfo.getId())) {
                commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
            }
            commentInfo.setType(commentInfo.getTags());
            commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
            newList.add(commentInfo);
        }
        }
        if (currencyCoupon != null) {
            comments.add(currencyCoupon);
        }
@@ -804,7 +822,7 @@
        resultObj.setComments(comments);
        goodsEvaluateDao.save(resultObj);
    }
    @Override
    public void saveGoodsCoupon(String pid, String content) throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
@@ -830,15 +848,15 @@
        List<CommentInfo> comments = new ArrayList<>();
        if (!StringUtil.isNullOrEmpty(content)) {
            if(!StringUtil.isNullOrEmpty(content)) {
            if (!StringUtil.isNullOrEmpty(content)) {
                try {
                    convertLinkManager.convertLinkFromText(content, 1L, true);
                } catch (Exception e) {
                    throw new GoodsEvaluateException(1, "不包含可转链的口令与链接");
                }
            }
            CommentInfo commentInfo = new CommentInfo();
            if (goodsCoupon != null) {
                commentInfo.setId(goodsCoupon.getId());
@@ -860,22 +878,23 @@
    }
    @Override
    public void saveCurrencyCoupon(String pid, int kind, CommentInfo commentInfo) throws GoodsEvaluateException, Exception {
    public void saveCurrencyCoupon(String pid, int kind, CommentInfo commentInfo)
            throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
            throw new GoodsEvaluateException(1, "请保存第一部分信息");
        }
        if (StringUtil.isNullOrEmpty(commentInfo.getCoupon())) {
            throw new GoodsEvaluateException(1, "券面额不能为空");
        }
        if (StringUtil.isNullOrEmpty(commentInfo.getTagDesc())) {
            throw new GoodsEvaluateException(1, "描述语不能为空");
        }
        String tagUrl = commentInfo.getTagUrl();
        String content = commentInfo.getContent();
        if (StringUtil.isNullOrEmpty(tagUrl) && StringUtil.isNullOrEmpty(content) ) {
        if (StringUtil.isNullOrEmpty(tagUrl) && StringUtil.isNullOrEmpty(content)) {
            throw new GoodsEvaluateException(1, "评论语和链接不能同时为空");
        }
@@ -890,8 +909,8 @@
        } else {
            throw new GoodsEvaluateException(1, "请填写券截止时间");
        }
        if(!StringUtil.isNullOrEmpty(content) && kind != 3) { // 活动不验证
        if (!StringUtil.isNullOrEmpty(content) && kind != 3) { // 活动不验证
            try {
                convertLinkManager.convertLinkFromText(content, Constant.LINK_TOKEN_VERIFY_UID, true);
            } catch (ConvertLinkExceptionException e) {
@@ -902,7 +921,7 @@
                throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
            }
        }
        GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
        if (resultObj == null)
            throw new GoodsEvaluateException(1, "第一部分信息缺失");
@@ -927,10 +946,10 @@
                commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
            }
            // 券类型
            commentInfo.setType(commentInfo.getTags());
            commentInfo.setTypeEnum(CommentInfoEnum.currencyCoupon);
            // 标签信息
            List<ClientTextStyleVO> tagList = new ArrayList<>();
            String couponSource = commentInfo.getCouponSource();
@@ -995,10 +1014,15 @@
                removePicture(videoPic);
                InputStream inputStream = filevideo.getInputStream();
                BufferedImage sourceImg = ImageIO.read(inputStream);
                File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getName());
                // 裁剪视频封面,宽高比为2:1
                ImageCropUtil.centerCrop(inputStream, destFile, 2.0f);
                BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
                width = sourceImg.getWidth();
                height = sourceImg.getHeight();
                String picLink = uploadPicture(filevideo);
                String picLink =  uploadPicture(destFile,filevideo.getContentType());
                videoPic = picLink;
            }
@@ -1112,13 +1136,20 @@
            if (filevideo != null) {
                if (StringUtil.isNullOrEmpty(videoUrl)) {
                    throw new GoodsEvaluateException(1, "视频链接不能为空");
                }
                }
                InputStream inputStream = filevideo.getInputStream();
                BufferedImage sourceImg = ImageIO.read(inputStream);
                File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getName());
                // 裁剪视频封面,宽高比为2:1
                ImageCropUtil.centerCrop(inputStream, destFile, 2.0f);
                BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
                int width = sourceImg.getWidth();
                int height = sourceImg.getHeight();
                String picLink = uploadPicture(filevideo);
                String picLink =  uploadPicture(destFile,filevideo.getContentType());
                if (imgVideo != null) {
                    String url = imgVideo.getUrl();
                    if (!StringUtil.isNullOrEmpty(url)) {
@@ -1416,7 +1447,7 @@
    @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);
        List<GoodsEvaluate> listOBJ = list;
        // 更新商品信息
        executor.execute(new Runnable() {
@@ -1431,26 +1462,26 @@
        }
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for (GoodsEvaluate goodsEvaluate: list) {
        for (GoodsEvaluate goodsEvaluate : list) {
            int comment = 0;
            List<CommentInfo> comments = goodsEvaluate.getComments();
            if (comments != null && comments.size() > 0) {
                EvaluateEnum typeEnum = goodsEvaluate.getType();
                List<CommentInfo> commentNew = new ArrayList<>();
                for (CommentInfo commentInfo: comments) {
                    comment ++;
                for (CommentInfo commentInfo : comments) {
                    comment++;
                    CommentInfoEnum typeComment = commentInfo.getTypeEnum();
                    if (typeComment != null && typeComment ==CommentInfoEnum.goodsCoupon) {
                    if (typeComment != null && typeComment == CommentInfoEnum.goodsCoupon) {
                        GoodsDetailVO goods = goodsEvaluate.getGoods();
                        if (goods.isHasCoupon()) {
                            commentNew.add(commentInfo);
                            continue;
                        }
                    }
                    String coupon = commentInfo.getCoupon();
                    String endTime = commentInfo.getEndTime();
                    if (!StringUtil.isNullOrEmpty(coupon) && !StringUtil.isNullOrEmpty(endTime)) {
@@ -1461,45 +1492,45 @@
                                ClientTextStyleVO styleVO = new ClientTextStyleVO();
                                styleVO.setColor("#E5005C");
                                styleVO.setContent(daysBetween + "天后过期");
                                List<ClientTextStyleVO> tagList = commentInfo.getTagList();
                                tagList.add(styleVO);
                                commentInfo.setTagList(tagList);
                                commentNew.add(commentInfo);
                                continue;
                            }
                        }
                    }
                    commentNew.add(commentInfo);
                }
                goodsEvaluate.setComments(commentNew);
                if (typeEnum != null && typeEnum == EvaluateEnum.single) {
                    if (comment > 0 && commentNew.size() == 0) { // 所有券评论下架
                         GoodsDetailVO goods = goodsEvaluate.getGoods();
                         if (goods != null) {
                             goods.setState(1); // 评论不存在 下架
                             LogHelper.test("获取列表商品下架1");
                         }
                         List<ImgInfo> imgList = goodsEvaluate.getImgList();
                         if (imgList != null) {
                            for (ImgInfo imgInfo: imgList) {
                        GoodsDetailVO goods = goodsEvaluate.getGoods();
                        if (goods != null) {
                            goods.setState(1); // 评论不存在 下架
                            LogHelper.test("获取列表商品下架1");
                        }
                        List<ImgInfo> imgList = goodsEvaluate.getImgList();
                        if (imgList != null) {
                            for (ImgInfo imgInfo : imgList) {
                                SimpleGoods simpleGoods = imgInfo.getGoods();
                                if (simpleGoods != null) {
                                    simpleGoods.setState(1);
                                     LogHelper.test("获取列表商品下架2");
                                    LogHelper.test("获取列表商品下架2");
                                }
                            }
                         }
                     }
                        }
                    }
                }
            }
        }
        return list;
    }
@@ -1543,12 +1574,12 @@
                }
                EvaluateEnum type = goodsEvaluate.getType();
                if (type != null &&  type == EvaluateEnum.activity) {
                if (type != null && type == EvaluateEnum.activity) {
                    List<CommentInfo> comments = goodsEvaluate.getComments();
                    if (comments != null) {
                        for (CommentInfo commentInfo: comments) {
                        for (CommentInfo commentInfo : comments) {
                            CommentInfoEnum commentInfoEnum = commentInfo.getTypeEnum();
                            if (commentInfoEnum != null && commentInfoEnum== CommentInfoEnum.currencyCoupon) {
                            if (commentInfoEnum != null && commentInfoEnum == CommentInfoEnum.currencyCoupon) {
                                String endTime = commentInfo.getEndTime();
                                if (!StringUtil.isNullOrEmpty(endTime)) {
                                    Date endDay = sdf.parse(endTime);
@@ -1557,11 +1588,11 @@
                                    }
                                }
                            }
                        }
                    }
                }
                GoodsDetailVO goods = goodsEvaluate.getGoods();
                if (goods != null) {
                    GoodsDetailVO goodsNew = getGoodsNewInfo(goods.getGoodsId(), goods.getGoodsType(), paramsDTO);
@@ -1630,7 +1661,7 @@
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
            if (goodsInfo != null) {
@@ -1649,11 +1680,11 @@
        if (1 > 0) {
            return; // 暂不启用自动生成
        }
        if (info == null) {
            return;
        }
        try {
            GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
            goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
@@ -1670,7 +1701,7 @@
            goodsEvaluate.setUpdateTime(new Date());
            goodsEvaluate.setWeight(0.0);
            goodsEvaluate.setStartTime(new Date());
            goodsEvaluate.setEndTime(DateUtil.plusDayDate(3,new Date()));
            goodsEvaluate.setEndTime(DateUtil.plusDayDate(3, new Date()));
            List<ClientTextStyleVO> titles = info.getTitle();
            if (titles != null) {
@@ -1707,11 +1738,11 @@
                        simpleGoods.setAmount(couponInfo.getAmount());
                    }
                    imgInfo.setGoods(simpleGoods);
                    TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsVO.getGoodsId(), null);
                    String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
                    String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
                    commentText = commentText.replace("[原价]", goodsVO.getZkPrice().toString());
                    if (!goodsVO.isHasCoupon()) {
                        commentText = commentText.replace("领券抢购", "抢购");
@@ -1719,21 +1750,21 @@
                    } else {
                        commentText = commentText.replace("[券后价]", goodsVO.getCouponPrice().toString());
                    }
                    commentText =commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
                    commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n")
                            .replace("\r\n\r\n", "\r\n");
                    CommentInfo commentInfo = new CommentInfo();
                    commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
                    commentInfo.setContent(commentText);
                    commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
                    commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
                    List<CommentInfo> commentsNew = new ArrayList<>();
                    commentsNew.add(commentInfo);
                    goodsEvaluate.setComments(commentsNew);
                    goodsEvaluate.setGoods(goodsVO);
                }
                imgList.add(imgInfo);
            }
utils/src/main/java/org/yeshi/utils/ImageCropUtil.java
@@ -3,6 +3,7 @@
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
@@ -23,9 +24,9 @@
     * @throws FileNotFoundException
     * @throws Exception
     */
    public static void centerCrop(File sourceImage, File destImage, float ratio)
    public static void centerCrop(InputStream sourceImage, File destImage, float ratio)
            throws FileNotFoundException, Exception {
        if (!sourceImage.exists())
        if (sourceImage==null)
            throw new FileNotFoundException();
        BufferedImage image = Thumbnails.of(sourceImage).scale(1.0f).asBufferedImage();
        int width = image.getWidth();