| | |
| | | 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 javax.annotation.Resource; |
| | | import javax.imageio.ImageIO; |
| | | |
| | | import org.apache.commons.beanutils.PropertyUtils; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | | import org.springframework.core.task.TaskExecutor; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import org.springframework.web.multipart.MultipartHttpServletRequest; |
| | | import org.yeshi.utils.DateUtil; |
| | | import org.yeshi.utils.JsonUtil; |
| | | import org.yeshi.utils.ImageCropUtil; |
| | | import org.yeshi.utils.tencentcloud.COSManager; |
| | | |
| | | import com.yeshi.fanli.dao.dynamic.GoodsEvaluateDao; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | @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 { |
| | |
| | | if (StringUtil.isNullOrEmpty(tilte)) { |
| | | throw new GoodsEvaluateException(1, "推荐语不能为空"); |
| | | } |
| | | |
| | | |
| | | try { |
| | | ActivityUser activityUser = activityUserService.getActivityUserByNickName(record.getUser(), file); |
| | | if (activityUser == null) |
| | |
| | | } |
| | | |
| | | 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(); |
| | |
| | | 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); |
| | | |
| | | if (record.getStartTime() == null) |
| | | record.setStartTime(new Date()); |
| | | |
| | | record.setPublishTime(record.getStartTime()); |
| | | |
| | | String id = record.getId(); |
| | |
| | | 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 ImgInfo uploadVideoPicture(MultipartFile filevideo) { |
| | | try { |
| | | File tempFile = new File(FileUtil.getCacheDir() + "/" + filevideo.getOriginalFilename()); |
| | | if (tempFile.exists()) |
| | | tempFile.delete(); |
| | | tempFile.createNewFile(); |
| | | filevideo.transferTo(tempFile); |
| | | File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getOriginalFilename()); |
| | | // 裁剪视频封面,宽高比为2:1 |
| | | ImageCropUtil.centerCrop(tempFile, destFile, 2.0f); |
| | | BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile)); |
| | | ImgInfo info = new ImgInfo(); |
| | | int width = sourceImg.getWidth(); |
| | | int height = sourceImg.getHeight(); |
| | | String picLink = uploadPicture(destFile, filevideo.getContentType()); |
| | | info.setH(height); |
| | | info.setW(width); |
| | | info.setUrl(picLink); |
| | | return info; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private String uploadPicture(File file, String contentType) throws Exception { |
| | | InputStream inputStream = new FileInputStream(file); |
| | | String type = contentType.substring(contentType.indexOf("/") + 1); |
| | | String filePath = FilePathEnum.goodsEvaluate.getPath() + UUID.randomUUID().toString().replace("-", "") + "." |
| | | + type; |
| | |
| | | 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()); |
| | | } |
| | | } |
| | |
| | | if (StringUtil.isNullOrEmpty(videoUrl)) { |
| | | throw new GoodsEvaluateException(1, "视频链接不能为空"); |
| | | } |
| | | InputStream inputStream = filevideo.getInputStream(); |
| | | BufferedImage sourceImg = ImageIO.read(inputStream); |
| | | int width = sourceImg.getWidth(); |
| | | int height = sourceImg.getHeight(); |
| | | |
| | | String picLink = uploadPicture(filevideo); |
| | | ImgInfo info = uploadVideoPicture(filevideo); |
| | | if (info == null) |
| | | throw new GoodsEvaluateException(2, "视频图片上传失败"); |
| | | if (imgVideo != null) { |
| | | String url = imgVideo.getUrl(); |
| | | if (!StringUtil.isNullOrEmpty(url)) { |
| | | listDel.add(url); |
| | | } |
| | | imgVideo.setUrl(picLink); |
| | | imgVideo.setUrlHD(picLink); |
| | | imgVideo.setUrl(info.getUrl()); |
| | | imgVideo.setUrlHD(info.getUrl()); |
| | | } else { |
| | | imgVideo = new ImgInfo(); |
| | | imgVideo.setId(UUID.randomUUID().toString().replace("-", "")); |
| | | imgVideo.setLarge(true); |
| | | imgVideo.setPid(pid); |
| | | imgVideo.setUrl(picLink); |
| | | imgVideo.setUrlHD(picLink); |
| | | imgVideo.setUrl(info.getUrl()); |
| | | imgVideo.setUrlHD(info.getUrl()); |
| | | imgVideo.setVideoUrl(videoUrl); |
| | | imgVideo.setType(ImgEnum.video); |
| | | } |
| | | imgVideo.setW(width); |
| | | imgVideo.setH(height); |
| | | imgVideo.setW(info.getW()); |
| | | imgVideo.setH(info.getH()); |
| | | } |
| | | } |
| | | |
| | |
| | | pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId); |
| | | goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(pddGoods, params); |
| | | } |
| | | |
| | | |
| | | if (goodsDetailVO == null) { |
| | | 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); |
| | |
| | | } |
| | | 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) { |
| | |
| | | resultObj.setGoods(goodsDetailVO); |
| | | resultObj.setMainPicNum(picNum); |
| | | resultObj.setImgList(listImg); |
| | | |
| | | |
| | | boolean addComment = true; |
| | | List<CommentInfo> commentsNew = new ArrayList<>(); |
| | | List<CommentInfo> comments = resultObj.getComments(); |
| | | if (comments != null) { |
| | | for (CommentInfo commentInfo: comments) { |
| | | if (comments != null && comments.size() > 0) { |
| | | 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) { |
| | | TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsId, "0"); |
| | | String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey()); |
| | | commentText = template.replace("[口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken())); |
| | | commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken())); |
| | | } else if (goodsType == Constant.SOURCE_TYPE_JD) { |
| | | String couponUrl = null; |
| | | JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods); |
| | |
| | | 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("领券抢购", "抢购"); |
| | |
| | | } 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); |
| | |
| | | } |
| | | } |
| | | |
| | | 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(); |
| | |
| | | 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, "商品已下架"); |
| | |
| | | throw new GoodsEvaluateException(1, "视频链接不能为空"); |
| | | } |
| | | |
| | | InputStream inputStream = filevideo.getInputStream(); |
| | | BufferedImage sourceImg = ImageIO.read(inputStream); |
| | | int width = sourceImg.getWidth(); |
| | | int height = sourceImg.getHeight(); |
| | | ImgInfo info = uploadVideoPicture(filevideo); |
| | | if (info == null) |
| | | throw new GoodsEvaluateException(2, "视频图片上传失败"); |
| | | |
| | | String picLink = uploadPicture(filevideo); |
| | | if (imgVideo != null) { |
| | | String url = imgVideo.getUrl(); |
| | | if (!StringUtil.isNullOrEmpty(url)) { |
| | | listDel.add(url); |
| | | } |
| | | imgVideo.setUrl(picLink); |
| | | imgVideo.setUrlHD(picLink); |
| | | imgVideo.setUrl(info.getUrl()); |
| | | imgVideo.setUrlHD(info.getUrl()); |
| | | } else { |
| | | imgVideo = new ImgInfo(); |
| | | imgVideo.setId(UUID.randomUUID().toString().replace("-", "")); |
| | | imgVideo.setLarge(true); |
| | | imgVideo.setPid(pid); |
| | | imgVideo.setUrl(picLink); |
| | | imgVideo.setUrlHD(picLink); |
| | | imgVideo.setUrl(info.getUrl()); |
| | | imgVideo.setUrlHD(info.getUrl()); |
| | | imgVideo.setVideoUrl(videoUrl); |
| | | imgVideo.setType(ImgEnum.video); |
| | | } |
| | | imgVideo.setW(width); |
| | | imgVideo.setH(height); |
| | | imgVideo.setW(info.getW()); |
| | | imgVideo.setH(info.getH()); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | String picUrl = goodsDetailVO.getPicUrl(); |
| | | |
| | | if (fileRequest != null) { |
| | | MultipartFile file = fileRequest.getFile("file" + i); |
| | | if (file != null) { |
| | |
| | | } |
| | | imgInfo0.setGoods(simpleGoods); |
| | | imgInfo0.setGoodsVO(goodsDetailVO); |
| | | |
| | | |
| | | listImg.add(imgInfo0); |
| | | totalImg++; |
| | | } |
| | |
| | | } |
| | | |
| | | @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)) { |
| | | throw new GoodsEvaluateException(1, "请保存第一部分信息"); |
| | |
| | | |
| | | 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()); |
| | |
| | | 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); |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void saveSingleGoodsCoupon(String pid, CommentInfo commentInfo) throws GoodsEvaluateException, Exception { |
| | | public void saveCurrencyCoupon(String pid, int kind, CommentInfo commentInfo) |
| | | throws GoodsEvaluateException, Exception { |
| | | if (StringUtil.isNullOrEmpty(pid)) { |
| | | throw new GoodsEvaluateException(1, "请保存第一部分信息"); |
| | | } |
| | | |
| | | |
| | | if (StringUtil.isNullOrEmpty(commentInfo.getCoupon())) { |
| | | throw new GoodsEvaluateException(1, "券面额不能为空"); |
| | | } |
| | | |
| | | |
| | | if (StringUtil.isNullOrEmpty(commentInfo.getTagDesc())) { |
| | | throw new GoodsEvaluateException(1, "描述语不能为空"); |
| | | } |
| | | |
| | | |
| | | |
| | | String tagUrl = commentInfo.getTagUrl(); |
| | | String content = commentInfo.getContent(); |
| | | if (StringUtil.isNullOrEmpty(tagUrl) && StringUtil.isNullOrEmpty(content) ) { |
| | | if (StringUtil.isNullOrEmpty(tagUrl) && StringUtil.isNullOrEmpty(content)) { |
| | | throw new GoodsEvaluateException(1, "评论语和链接不能同时为空"); |
| | | } |
| | | |
| | |
| | | } else { |
| | | 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, "包含不可转链的口令与链接"); |
| | | } |
| | | } |
| | | |
| | | |
| | | GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid); |
| | | if (resultObj == null) |
| | | throw new GoodsEvaluateException(1, "第一部分信息缺失"); |
| | | |
| | | CommentInfo goodsCoupon = null; |
| | | List<CommentInfo> comments = new ArrayList<>(); |
| | | CommentInfo currencyCoupon = null; |
| | | List<CommentInfo> oldComments = resultObj.getComments(); |
| | | if (oldComments != null) { |
| | | for (CommentInfo info : oldComments) { |
| | | if (CommentInfoEnum.goodsCoupon == info.getTypeEnum()) { |
| | | goodsCoupon = info; |
| | | comments.add(info); |
| | | } else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) { |
| | | currencyCoupon = info; |
| | | } |
| | | } |
| | | } |
| | | |
| | | List<CommentInfo> comments = new ArrayList<>(); |
| | | if (goodsCoupon != null) { |
| | | comments.add(goodsCoupon); |
| | | } |
| | | |
| | | if (commentInfo != null) { |
| | |
| | | commentInfo.setId(UUID.randomUUID().toString().replace("-", "")); |
| | | } |
| | | // 券类型 |
| | | |
| | | String tags = commentInfo.getTags(); |
| | | if (StringUtil.isNullOrEmpty(tags)) { |
| | | commentInfo.setType(CommentInfoEnum.currencyCoupon.getDesc()); |
| | | } else { |
| | | commentInfo.setType(tags); |
| | | } |
| | | |
| | | commentInfo.setType(commentInfo.getTags()); |
| | | commentInfo.setTypeEnum(CommentInfoEnum.currencyCoupon); |
| | | |
| | | |
| | | // 标签信息 |
| | | List<ClientTextStyleVO> tagList = new ArrayList<>(); |
| | | String couponSource = commentInfo.getCouponSource(); |
| | |
| | | } |
| | | |
| | | resultObj.setComments(comments); |
| | | |
| | | goodsEvaluateDao.save(resultObj); |
| | | } |
| | | |
| | |
| | | if (filevideo != null) { |
| | | removePicture(videoPic); |
| | | |
| | | InputStream inputStream = filevideo.getInputStream(); |
| | | BufferedImage sourceImg = ImageIO.read(inputStream); |
| | | width = sourceImg.getWidth(); |
| | | height = sourceImg.getHeight(); |
| | | String picLink = uploadPicture(filevideo); |
| | | videoPic = picLink; |
| | | ImgInfo info = uploadVideoPicture(filevideo); |
| | | if (info == null) |
| | | throw new GoodsEvaluateException(2, "视频图片上传失败"); |
| | | videoPic = info.getUrl(); |
| | | width=info.getW(); |
| | | height=info.getH(); |
| | | } |
| | | |
| | | MultipartFile activityfile = fileRequest.getFile("activityfile"); |
| | |
| | | if (StringUtil.isNullOrEmpty(videoUrl)) { |
| | | throw new GoodsEvaluateException(1, "视频链接不能为空"); |
| | | } |
| | | InputStream inputStream = filevideo.getInputStream(); |
| | | BufferedImage sourceImg = ImageIO.read(inputStream); |
| | | int width = sourceImg.getWidth(); |
| | | int height = sourceImg.getHeight(); |
| | | |
| | | String picLink = uploadPicture(filevideo); |
| | | ImgInfo info = uploadVideoPicture(filevideo); |
| | | if (info == null) |
| | | throw new GoodsEvaluateException(2, "视频图片上传失败"); |
| | | if (imgVideo != null) { |
| | | String url = imgVideo.getUrl(); |
| | | if (!StringUtil.isNullOrEmpty(url)) { |
| | | listDel.add(url); |
| | | } |
| | | imgVideo.setUrl(picLink); |
| | | imgVideo.setUrlHD(picLink); |
| | | imgVideo.setUrl(info.getUrl()); |
| | | imgVideo.setUrlHD(info.getUrl()); |
| | | } else { |
| | | imgVideo = new ImgInfo(); |
| | | imgVideo.setId(UUID.randomUUID().toString().replace("-", "")); |
| | | imgVideo.setLarge(true); |
| | | imgVideo.setPid(pid); |
| | | imgVideo.setUrl(picLink); |
| | | imgVideo.setUrlHD(picLink); |
| | | imgVideo.setUrl(info.getUrl()); |
| | | imgVideo.setUrlHD(info.getUrl()); |
| | | imgVideo.setVideoUrl(videoUrl); |
| | | imgVideo.setType(ImgEnum.video); |
| | | } |
| | | imgVideo.setW(width); |
| | | imgVideo.setH(height); |
| | | imgVideo.setW(info.getW()); |
| | | imgVideo.setH(info.getH()); |
| | | } |
| | | |
| | | activityFile = fileRequest.getFile("activityFile"); |
| | |
| | | } |
| | | |
| | | @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); |
| | | |
| | | if (list == null) { |
| | | list = new ArrayList<>(); |
| | | } |
| | | Date now = new Date(); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | |
| | | 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 comment = 0; |
| | | List<CommentInfo> comments = evaluateNew.getComments(); |
| | | if (comments != null && comments.size() > 0) { |
| | | EvaluateEnum typeEnum = evaluateNew.getType(); |
| | | List<CommentInfo> commentNew = new ArrayList<>(); |
| | | |
| | | for (CommentInfo commentInfo : comments) { |
| | | comment++; |
| | | CommentInfoEnum typeComment = commentInfo.getTypeEnum(); |
| | | if (typeComment != null && typeComment == CommentInfoEnum.goodsCoupon) { |
| | | GoodsDetailVO goods = evaluateNew.getGoods(); |
| | | if (goods.isHasCoupon()) { |
| | | commentNew.add(commentInfo); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | String coupon = commentInfo.getCoupon(); |
| | | String endTime = commentInfo.getEndTime(); |
| | | if (!StringUtil.isNullOrEmpty(coupon) && !StringUtil.isNullOrEmpty(endTime)) { |
| | | Date endDay = sdf.parse(endTime); |
| | | if (endDay.getTime() > now.getTime()) { |
| | | int daysBetween = DateUtil.daysBetween(now, endDay); |
| | | if (daysBetween > 0) { |
| | | 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); |
| | | } |
| | | evaluateNew.setComments(commentNew); |
| | | |
| | | if (typeEnum != null && typeEnum == EvaluateEnum.single) { |
| | | if (comment > 0 && commentNew.size() == 0) { // 所有券评论下架 |
| | | GoodsDetailVO goods = evaluateNew.getGoods(); |
| | | if (goods != null) { |
| | | goods.setState(1); // 评论不存在 下架 |
| | | LogHelper.test("获取列表商品下架1"); |
| | | } |
| | | |
| | | List<ImgInfo> imgList = evaluateNew.getImgList(); |
| | | if (imgList != null) { |
| | | for (ImgInfo imgInfo : imgList) { |
| | | SimpleGoods simpleGoods = imgInfo.getGoods(); |
| | | if (simpleGoods != null) { |
| | | simpleGoods.setState(1); |
| | | LogHelper.test("获取列表商品下架2"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | listNew.add(evaluateNew); |
| | | } |
| | | |
| | | List<GoodsEvaluate> listOBJ = list; |
| | | // 更新商品信息 |
| | | executor.execute(new Runnable() { |
| | |
| | | } |
| | | }); |
| | | |
| | | if (list == null) { |
| | | list = new ArrayList<>(); |
| | | } |
| | | Date now = new Date(); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | for (GoodsEvaluate goodsEvaluate: list) { |
| | | List<CommentInfo> comments = goodsEvaluate.getComments(); |
| | | if (comments != null) { |
| | | 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("通用优惠券"); |
| | | } |
| | | |
| | | CommentInfoEnum typeComment = commentInfo.getTypeEnum(); |
| | | if (typeComment != null && typeComment ==CommentInfoEnum.goodsCoupon) { |
| | | GoodsDetailVO goods = goodsEvaluate.getGoods(); |
| | | if (goods.isHasCoupon()) { |
| | | commentNew.add(commentInfo); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | String coupon = commentInfo.getCoupon(); |
| | | String endTime = commentInfo.getEndTime(); |
| | | if (!StringUtil.isNullOrEmpty(coupon) && !StringUtil.isNullOrEmpty(endTime)) { |
| | | Date endDay = sdf.parse(endTime); |
| | | if (endDay.getTime() > now.getTime()) { |
| | | int daysBetween = DateUtil.daysBetween(endDay, now); |
| | | if (daysBetween > 0) { |
| | | ClientTextStyleVO styleVO = new ClientTextStyleVO(); |
| | | styleVO.setColor("#E5005C"); |
| | | styleVO.setContent(daysBetween + "天后过期"); |
| | | styleVO.setContent(coupon); |
| | | |
| | | List<ClientTextStyleVO> tagList = commentInfo.getTagList(); |
| | | tagList.add(styleVO); |
| | | |
| | | commentInfo.setTagList(tagList); |
| | | |
| | | if (typeEnum != null && typeEnum == EvaluateEnum.single) { |
| | | //新增 |
| | | commentNew.add(commentInfo); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | goodsEvaluate.setComments(commentNew); |
| | | |
| | | if (typeEnum != null && typeEnum == EvaluateEnum.single) { |
| | | if (commentNew.size() == 0) { |
| | | GoodsDetailVO goods = goodsEvaluate.getGoods(); |
| | | if (goods != null) { |
| | | goods.setState(1); // 评论不存在 下架 |
| | | } |
| | | |
| | | List<ImgInfo> imgList = goodsEvaluate.getImgList(); |
| | | if (imgList != null) { |
| | | for (ImgInfo imgInfo: imgList) { |
| | | SimpleGoods simpleGoods = imgInfo.getGoods(); |
| | | if (simpleGoods != null) { |
| | | simpleGoods.setState(1); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | return list; |
| | | return listNew; |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | 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); |
| | | if (endDay.getTime() < now.getTime()) { |
| | | goodsEvaluate.setState(1); // 活动过期 |
| | | goodsEvaluate.setState(0); // 活动过期 |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | GoodsDetailVO goods = goodsEvaluate.getGoods(); |
| | | if (goods != null) { |
| | | GoodsDetailVO goodsNew = getGoodsNewInfo(goods.getGoodsId(), goods.getGoodsType(), paramsDTO); |
| | |
| | | paramsDTO); |
| | | if (goodsDetailVO != null) { |
| | | simpleGoods.setPrice(goodsDetailVO.getCouponPrice()); |
| | | simpleGoods.setState(0); |
| | | CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo(); |
| | | if (couponInfo == null) { |
| | | simpleGoods.setPrice(goodsDetailVO.getZkPrice()); |
| | |
| | | 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); |
| | |
| | | |
| | | @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("-", "")); |
| | |
| | | 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) { |
| | |
| | | } else { |
| | | simpleGoods.setPrice(goodsVO.getCouponPrice()); |
| | | simpleGoods.setAmount(couponInfo.getAmount()); |
| | | |
| | | TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsVO.getGoodsId(), null); |
| | | String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey()); |
| | | String commentText = template.replace("[口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken())); |
| | | |
| | | commentText = commentText.replace("[原价]", goodsVO.getZkPrice().toString()); |
| | | if (!goodsVO.isHasCoupon()) { |
| | | commentText = commentText.replace("领券抢购", "抢购"); |
| | | commentText = commentText.replace("【券后价】[券后价]元", ""); |
| | | } else { |
| | | commentText = commentText.replace("[券后价]", goodsVO.getCouponPrice().toString()); |
| | | } |
| | | commentText =commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n"); |
| | | |
| | | |
| | | CommentInfo commentInfo = new CommentInfo(); |
| | | commentInfo.setId(UUID.randomUUID().toString().replace("-", "")); |
| | | commentInfo.setContent(commentText); |
| | | commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon); |
| | | commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc()); |
| | | |
| | | List<CommentInfo> commentsNew = new ArrayList<>(); |
| | | commentsNew.add(commentInfo); |
| | | goodsEvaluate.setComments(commentsNew); |
| | | } |
| | | 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("领券抢购", "抢购"); |
| | | commentText = commentText.replace("【券后价】[券后价]元", ""); |
| | | } else { |
| | | commentText = commentText.replace("[券后价]", goodsVO.getCouponPrice().toString()); |
| | | } |
| | | commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n") |
| | | .replace("\r\n\r\n", "\r\n"); |
| | | |
| | | CommentInfo commentInfo = new CommentInfo(); |
| | | commentInfo.setId(UUID.randomUUID().toString().replace("-", "")); |
| | | commentInfo.setContent(commentText); |
| | | commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon); |
| | | commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc()); |
| | | |
| | | List<CommentInfo> commentsNew = new ArrayList<>(); |
| | | commentsNew.add(commentInfo); |
| | | goodsEvaluate.setComments(commentsNew); |
| | | |
| | | goodsEvaluate.setGoods(goodsVO); |
| | | |
| | | |
| | | } |
| | | imgList.add(imgInfo); |
| | | } |