admin
2020-03-05 536987bf3cdde54110dae300cfe091c4d45a5321
Merge remote-tracking branch 'origin/div' into div
7个文件已修改
360 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/admin/GoodsEvaluateAdminController.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/dynamic/ImgInfo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java 236 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/Constant.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/ImageUtil.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/GoodsEvaluateAdminController.java
@@ -24,6 +24,7 @@
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
import com.yeshi.fanli.entity.dynamic.ImgInfo;
import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum;
import com.yeshi.fanli.entity.dynamic.ListComment;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -41,8 +42,6 @@
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import net.sf.json.JSONObject;
@@ -152,14 +151,14 @@
     * 保存信息
     * 
     * @param callback
     * @param special
     *            0a39676f138c4dcba722e321d43c4284
     * @param pid
     * @param kind : 1单品  2多品 3活动
     * @param out
     */
    @RequestMapping(value = "saveSingleGoodsCoupon")
    public void saveSingleGoodsCoupon(String callback, String pid, CommentInfo commentInfo, PrintWriter out) {
    @RequestMapping(value = "saveCurrencyCoupon")
    public void saveCurrencyCoupon(String callback, String pid, int kind, CommentInfo commentInfo, PrintWriter out) {
        try {
            goodsEvaluateService.saveSingleGoodsCoupon(pid, commentInfo);
            goodsEvaluateService.saveCurrencyCoupon(pid, kind,commentInfo);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("保存成功"));
        } catch (GoodsEvaluateException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
@@ -304,8 +303,75 @@
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("保存失败"));
            e.printStackTrace();
            LogHelper.errorDetailInfo(e);
            LogHelper.test(e);
        }
    }
    /**
     *
     * @param callback
     * @param comments
     * @param out
     */
    @RequestMapping(value = "saveGoodsComment")
    public void saveGoodsComment(String callback, String id, int kind, ListComment comments, PrintWriter out) {
        try {
            if (StringUtil.isNullOrEmpty(id)) {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请先保存推荐语信息"));
                return;
            }
            if (comments == null) {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("文本内容为空"));
                return;
            }
            goodsEvaluateService.saveGoodsComment(id, kind, comments.getComment());
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("成功"));
        } catch (GoodsEvaluateException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("保存失败"));
            e.printStackTrace();
        }
    }
    /**
     *
     * @param callback
     * @param comments
     * @param out
     */
    @RequestMapping(value = "getGoodsComment")
    public void getGoodsComment(String callback, String id, PrintWriter out) {
        try {
            if (StringUtil.isNullOrEmpty(id)) {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请先保存推荐语信息"));
                return;
            }
            List<CommentInfo> newList = new ArrayList<>();
            GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
            if (goodsEvaluate != null) {
                List<CommentInfo> comments = goodsEvaluate.getComments();
                if (comments != null && comments.size() > 0) {
                    for (CommentInfo commentInfo: comments) {
                        CommentInfoEnum typeEnum = commentInfo.getTypeEnum();
                        if (typeEnum == CommentInfoEnum.goodsCoupon) {
                            newList.add(commentInfo);
                        }
                    }
                }
            }
            JSONObject data = new JSONObject();
            data.put("list", newList);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("保存失败"));
            e.printStackTrace();
        }
    }
    /**
     * 获取多个商品信息
@@ -442,6 +508,7 @@
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("保存失败"));
            e.printStackTrace();
            LogHelper.errorDetailInfo(e);
            LogHelper.test(e);
        }
    }
@@ -691,6 +758,20 @@
            if (commonGoods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
                try {
                    TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(commonGoods.getGoodsId());
                    String pictUrlWhite = goodsBrief.getPictUrlWhite();
                    if (!StringUtil.isNullOrEmpty(pictUrlWhite)) {
                        goodsBrief.setPictUrl(pictUrlWhite);
                        List<String> picList = new ArrayList<>();
                        picList.add(pictUrlWhite);
                        List<String> imgList = goodsBrief.getImgList();
                        if (imgList != null) {
                            picList.addAll(imgList);
                        }
                        goodsBrief.setImgList(picList);
                    }
                    goodsDetail = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
                } catch (TaobaoGoodsDownException e) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该商品已下架"));
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -129,6 +129,11 @@
    @Resource
    private ConvertLinkManager convertLinkManager;
    @Resource
    private ShareGoodsService shareGoodsService;
    private final static long TYPE_REXIAO = 1;// 热销
    private final static long TYPE_TUIJIAN = 2;// 推荐
    private final static long TYPE_HAODIAN = 3;// 好店
@@ -719,6 +724,7 @@
    @RequestMapping(value = "evaluateShare", method = RequestMethod.POST)
    public void evaluateShare(AcceptData acceptData, Long uid, String id, Integer type, Long goodsId, Integer goodsType,
            PrintWriter out) {
        try {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
@@ -791,6 +797,9 @@
            // 单品
            if (goodsEvaluate.getType() == EvaluateEnum.single) {
                for (ImgInfo imgInfo : imgs) {
                        if ( type == 3 && imgInfo.getType() == ImgEnum.video)
                            continue;
                    GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
                    if (goodsVO == null) {
                        list.add(StringUtil.isNullOrEmpty(imgInfo.getUrlHD()) ? imgInfo.getUrl() : imgInfo.getUrlHD());
@@ -860,10 +869,12 @@
        data.put("count", shareCount);
        data.put("list", list);
        out.print(JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult("分享图生成失败"));
            return;
        }
    }
    @Resource
    private ShareGoodsService shareGoodsService;
    private String getJumpLink(GoodsDetailVO goodsVO, UserInfo user, String relationId, String inviteCode) {
        String jumpLink = null;
fanli/src/main/java/com/yeshi/fanli/entity/dynamic/ImgInfo.java
@@ -60,6 +60,7 @@
    private GoodsDetailVO goodsVO;
    private String activityPic;
    @Expose
    private String activityUrl;
    
    public ImgEnum getType() {
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -43,6 +43,7 @@
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
import com.yeshi.fanli.exception.dynamic.ActivityUserException;
import com.yeshi.fanli.exception.dynamic.GoodsEvaluateException;
import com.yeshi.fanli.exception.goods.ConvertLinkExceptionException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.activity.ActivityUserService;
@@ -57,6 +58,7 @@
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;
@@ -83,6 +85,7 @@
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    @Resource
    private JDGoodsCacheUtil jdGoodsCacheUtil;
@@ -123,11 +126,10 @@
        }
        if (record.getEndTime() != null) {
            if (record.getEndTime().getTime() <= java.lang.System.currentTimeMillis())
                throw new GoodsEvaluateException(1, "截止时间必须大于当前时间");
            if (record.getStartTime() != null && record.getEndTime().getTime() <= record.getStartTime().getTime())
                throw new GoodsEvaluateException(1, "截止时间必须大于开始时间");
        } else {
            record.setEndTime(DateUtil.plusDayDate(3,new Date()));
        }
        Integer dynamicType = record.getDynamicType();
@@ -135,8 +137,9 @@
            record.setDynamicType(1);
        }
        if (record.getShareNum() == null)
            record.setShareNum(0);
        if (record.getShareNum() == null || record.getShareNum() <=0 ) {
            record.setShareNum((int)(Math.random()*5000)+1000);
        }
        if (record.getWeight() == null)
            record.setWeight(0.0);
@@ -334,9 +337,10 @@
            throw new GoodsEvaluateException(1, "该商品信息不存在");
        }
        List<ImgInfo> tempList = new ArrayList<ImgInfo>();
        int totalImg = 0;
        if (listpic != null && listpic.size() > 0) {
            for (int i = 0; i < listpic.size(); i++) {
            for (int i = 0; i < listpic.size() && i < 9; i++) {
                ImgInfo imgInfo0 = new ImgInfo();
                imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
                imgInfo0.setW(1);
@@ -361,12 +365,17 @@
                    }
                    imgInfo0.setGoods(simpleGoods);
                    imgInfo0.setGoodsVO(goodsDetailVO);
                    listImg.add(imgInfo0);
                } else {
                    imgInfo0.setType(ImgEnum.img);
                    tempList.add(imgInfo0);
                }
                listImg.add(imgInfo0);
                totalImg++;
            }
        }
        if (tempList.size() > 0) {
            listImg.addAll(tempList);
        }
        if (listOld != null && listOld.size() > 0) {
@@ -403,7 +412,7 @@
        boolean addComment = true;
        List<CommentInfo> commentsNew = new ArrayList<>();
        List<CommentInfo> comments = resultObj.getComments();
        if (comments != null) {
        if (comments != null && comments.size() > 0) {
            for (CommentInfo commentInfo: comments) {
                if (commentInfo.getTypeEnum() == CommentInfoEnum.goodsCoupon) {
                    if (oldGoodsVO != null && oldGoodsVO.getGoodsId().longValue() == goodsId.longValue() 
@@ -416,11 +425,10 @@
            }
        } 
        
        CouponInfoVO couponInfo1 = goodsDetailVO.getCouponInfo();
        if (couponInfo1 == null) {
            addComment = false;
        }
        /*
         * // 无券不能自动 生成评论 CouponInfoVO couponInfo1 = goodsDetailVO.getCouponInfo(); if
         * (couponInfo1 == null) { addComment = false; }
         */
        
        
        if (addComment) {
@@ -475,6 +483,42 @@
        }
    }
    private String createTokenAndLink(GoodsDetailVO goodsDetailVO) throws Exception {
        String commentText = "";
        if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsDetailVO.getGoodsId(), "0");
            String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
            commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
        } else if (goodsDetailVO.getGoodsType()  == Constant.SOURCE_TYPE_JD) {
            String couponUrl = null;
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsDetailVO.getGoodsId());
            JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
            if (couponInfo != null) {
                couponUrl = couponInfo.getLink();
            }
            String materialId = "https://item.jd.com/" + goodsDetailVO.getGoodsId() + ".html";
            String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "","1");
            String template = configService.get(ConfigKeyEnum.quickShareJDCommentText.getKey());
            commentText = template.replace("[链接]", jumpLink);
        } else if (goodsDetailVO.getGoodsType()  == Constant.SOURCE_TYPE_PDD) {
            String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsDetailVO.getGoodsId(), PinDuoDuoApiUtil.PID_SHARE + "", "1");
            String template = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
            commentText = template.replace("[链接]", jumpLink);
        }
        commentText = commentText.replace("[原价]", goodsDetailVO.getZkPrice().toString());
        if (!goodsDetailVO.isHasCoupon()) {
            commentText = commentText.replace("领券抢购", "抢购");
            commentText = commentText.replace("【券后价】[券后价]元", "");
        } else {
            commentText = commentText.replace("[券后价]", goodsDetailVO.getCouponPrice().toString());
        }
        return commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
    }
    public GoodsDetailVO getGoodsDetailVO(Long goodsId, Integer goodsType) throws GoodsEvaluateException {
        GoodsDetailVO goodsDetail = null;
        BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
@@ -484,6 +528,10 @@
        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, "商品已下架");
@@ -592,6 +640,7 @@
                    }
                    String picUrl = goodsDetailVO.getPicUrl();
                    if (fileRequest != null) {
                        MultipartFile file = fileRequest.getFile("file" + i);
                        if (file != null) {
@@ -694,6 +743,68 @@
        }
    }
    @Override
    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) {
            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);
                } 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, "不包含可转链的口令与链接");
                }
            }
            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);
        }
        resultObj.setComments(comments);
        goodsEvaluateDao.save(resultObj);
    }
    @Override
    public void saveGoodsCoupon(String pid, String content) throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
@@ -719,6 +830,15 @@
        List<CommentInfo> comments = new ArrayList<>();
        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());
@@ -726,7 +846,7 @@
                commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
            }
            commentInfo.setContent(content);
            commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
            commentInfo.setType(commentInfo.getTags());
            commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
            comments.add(commentInfo);
        }
@@ -740,7 +860,7 @@
    }
    @Override
    public void saveSingleGoodsCoupon(String pid, CommentInfo commentInfo) throws GoodsEvaluateException, Exception {
    public void saveCurrencyCoupon(String pid, int kind, CommentInfo commentInfo) throws GoodsEvaluateException, Exception {
        if (StringUtil.isNullOrEmpty(pid)) {
            throw new GoodsEvaluateException(1, "请保存第一部分信息");
        }
@@ -752,7 +872,6 @@
        if (StringUtil.isNullOrEmpty(commentInfo.getTagDesc())) {
            throw new GoodsEvaluateException(1, "描述语不能为空");
        }
        
        String tagUrl = commentInfo.getTagUrl();
        String content = commentInfo.getContent();
@@ -772,11 +891,15 @@
            throw new GoodsEvaluateException(1, "请填写券截止时间");
        }
        
        if(!StringUtil.isNullOrEmpty(content)) {
        if(!StringUtil.isNullOrEmpty(content) && kind != 3) { // 活动不验证
            try {
                convertLinkManager.convertLinkFromText(content, 1L, true);
                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, "转链失败");
                throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
            }
        }
        
@@ -784,22 +907,17 @@
        if (resultObj == null)
            throw new GoodsEvaluateException(1, "第一部分信息缺失");
        CommentInfo goodsCoupon = null;
        List<CommentInfo> comments = new ArrayList<>();
        CommentInfo currencyCoupon = null;
        List<CommentInfo> oldComments = resultObj.getComments();
        if (oldComments != null) {
            for (CommentInfo info : oldComments) {
                if (CommentInfoEnum.goodsCoupon == info.getTypeEnum()) {
                    goodsCoupon = info;
                    comments.add(info);
                } else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
                    currencyCoupon = info;
                }
            }
        }
        List<CommentInfo> comments = new ArrayList<>();
        if (goodsCoupon != null) {
            comments.add(goodsCoupon);
        }
        if (commentInfo != null) {
@@ -810,12 +928,7 @@
            }
            // 券类型
            
            String tags = commentInfo.getTags();
            if (StringUtil.isNullOrEmpty(tags)) {
                commentInfo.setType(CommentInfoEnum.currencyCoupon.getDesc());
            } else {
                commentInfo.setType(tags);
            }
            commentInfo.setType(commentInfo.getTags());
            commentInfo.setTypeEnum(CommentInfoEnum.currencyCoupon);
            
            // 标签信息
@@ -840,7 +953,6 @@
        }
        resultObj.setComments(comments);
        goodsEvaluateDao.save(resultObj);
    }
@@ -1301,7 +1413,7 @@
    }
    @Override
//    @Cacheable(value = "dynamicCache", key = "'queryMaterialsCache-'+#start+'-'+#type")
    @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);
        
@@ -1320,24 +1432,15 @@
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for (GoodsEvaluate goodsEvaluate: list) {
            int comment = 0;
            List<CommentInfo> comments = goodsEvaluate.getComments();
            if (comments != null) {
            if (comments != null && comments.size() > 0) {
                EvaluateEnum typeEnum = goodsEvaluate.getType();
                List<CommentInfo> commentNew = new ArrayList<>();
                
                for (CommentInfo commentInfo: comments) {
                    String typeCoupon = commentInfo.getType();
                    if (StringUtil.isNullOrEmpty(typeCoupon)) {
                        if (commentInfo.getTypeEnum() == null) {
                            commentInfo.setType("");
                        } else {
                            commentInfo.setType(commentInfo.getTypeEnum().getDesc());
                        }
                    } else if (typeCoupon.equals(CommentInfoEnum.goodsCoupon.name())) {
                        commentInfo.setType("商品优惠券");
                    } else if (typeCoupon.equals(CommentInfoEnum.currencyCoupon.name())) {
                        commentInfo.setType("通用优惠券");
                    }
                    comment ++;
                    
                    CommentInfoEnum typeComment = commentInfo.getTypeEnum();
                    if (typeComment != null && typeComment ==CommentInfoEnum.goodsCoupon) {
@@ -1353,33 +1456,32 @@
                    if (!StringUtil.isNullOrEmpty(coupon) && !StringUtil.isNullOrEmpty(endTime)) {
                        Date endDay = sdf.parse(endTime);
                        if (endDay.getTime() > now.getTime()) {
                            int daysBetween = DateUtil.daysBetween(endDay, now);
                            int daysBetween = DateUtil.daysBetween(now, endDay);
                            if (daysBetween > 0) {
                                ClientTextStyleVO styleVO = new ClientTextStyleVO();
                                styleVO.setColor("#E5005C");
                                styleVO.setContent(daysBetween + "天后过期");
                                styleVO.setContent(coupon);
                                
                                List<ClientTextStyleVO> tagList = commentInfo.getTagList();
                                tagList.add(styleVO);
                                commentInfo.setTagList(tagList);
                                
                                if (typeEnum != null && typeEnum == EvaluateEnum.single) {
                                    //新增
                                    commentNew.add(commentInfo);
                                continue;
                                }
                            }
                        }
                    }
                    commentNew.add(commentInfo);
                }
                goodsEvaluate.setComments(commentNew);
                
                if (typeEnum != null && typeEnum == EvaluateEnum.single) {
                     if (commentNew.size() == 0) {
                    if (comment > 0 && commentNew.size() == 0) { // 所有券评论下架
                         GoodsDetailVO goods = goodsEvaluate.getGoods();
                         if (goods != null) {
                             goods.setState(1); // 评论不存在 下架
                             LogHelper.test("获取列表商品下架1");
                         }
                         
                         List<ImgInfo> imgList = goodsEvaluate.getImgList();
@@ -1388,6 +1490,7 @@
                                SimpleGoods simpleGoods = imgInfo.getGoods();
                                if (simpleGoods != null) {
                                    simpleGoods.setState(1);
                                     LogHelper.test("获取列表商品下架2");
                                }
                            }
                            
@@ -1450,7 +1553,7 @@
                                if (!StringUtil.isNullOrEmpty(endTime)) {
                                    Date endDay = sdf.parse(endTime);
                                    if (endDay.getTime() < now.getTime()) {
                                        goodsEvaluate.setState(1); // 活动过期
                                        goodsEvaluate.setState(0); // 活动过期
                                    }
                                }
                            }
@@ -1486,6 +1589,7 @@
                            paramsDTO);
                    if (goodsDetailVO != null) {
                        simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
                        simpleGoods.setState(0);
                        CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
                        if (couponInfo == null) {
                            simpleGoods.setPrice(goodsDetailVO.getZkPrice());
@@ -1517,6 +1621,15 @@
    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();
            }
        } else if (goodsType == Constant.SOURCE_TYPE_JD) {
            JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
@@ -1533,6 +1646,14 @@
    @Override
    public void addGoodsEvaluateByDynamicInfo(DynamicInfo info) {
        if (1 > 0) {
            return; // 暂不启用自动生成
        }
        if (info == null) {
            return;
        }
        try {
            GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
            goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
@@ -1584,6 +1705,8 @@
                    } else {
                        simpleGoods.setPrice(goodsVO.getCouponPrice());
                        simpleGoods.setAmount(couponInfo.getAmount());
                    }
                    imgInfo.setGoods(simpleGoods);
                        
                        TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsVO.getGoodsId(), null);
                        String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
@@ -1608,8 +1731,7 @@
                        List<CommentInfo> commentsNew = new ArrayList<>();
                        commentsNew.add(commentInfo);
                        goodsEvaluate.setComments(commentsNew);
                    }
                    imgInfo.setGoods(simpleGoods);
                    goodsEvaluate.setGoods(goodsVO);
                    
                }
fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java
@@ -85,7 +85,7 @@
     * @throws GoodsEvaluateException
     * @throws Exception
     */
    public void saveSingleGoodsCoupon(String pid, CommentInfo commentInfo) throws GoodsEvaluateException, Exception;
    public void saveCurrencyCoupon(String pid, int kind, CommentInfo commentInfo) throws GoodsEvaluateException, Exception;
    public void saveActivityPic(String pid, ImgInfo imgInfo, MultipartHttpServletRequest fileRequest)
@@ -138,4 +138,7 @@
    public void addGoodsEvaluateByDynamicInfo(DynamicInfo info);
    public void saveGoodsComment(String id, int kind, List<CommentInfo> comments) throws GoodsEvaluateException, Exception;
}
fanli/src/main/java/com/yeshi/fanli/util/Constant.java
@@ -25,6 +25,10 @@
    public static boolean IS_TEST = true;
    public static int PAGE_SIZE = 20;
    // 验证文本口令或链接uid
    public static Long LINK_TOKEN_VERIFY_UID = 437032L;
    public static String YINGYONGBAO_LINK = "https://w.url.cn/s/AHUuT7i";
fanli/src/main/java/com/yeshi/fanli/util/ImageUtil.java
@@ -379,10 +379,12 @@
            InputStream ziying = null;
            if (goods.getShopType() == 21) {
                ziying = ImageUtil.class.getClassLoader().getResourceAsStream("image/icon_ziying.png");
                g2d.drawImage(ImageIO.read(ziying), baoYouLength, y + 150, 60, 30, null);
            } else if (goods.isBaoyou()) {
                ziying = ImageUtil.class.getClassLoader().getResourceAsStream("image/icon_baoyou.png");
            }
            g2d.drawImage(ImageIO.read(ziying), baoYouLength, y + 150, 60, 30, null);
            }
            // 销量
            String sale = null;