package com.yeshi.fanli.service.impl.dynamic;
|
|
import java.awt.image.BufferedImage;
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.InputStream;
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.UUID;
|
|
import javax.annotation.Resource;
|
import javax.imageio.ImageIO;
|
|
import org.apache.commons.beanutils.PropertyUtils;
|
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.core.task.TaskExecutor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
import org.yeshi.utils.DateUtil;
|
import org.yeshi.utils.ImageCropUtil;
|
import org.yeshi.utils.tencentcloud.COSManager;
|
|
import com.yeshi.fanli.dao.dynamic.GoodsEvaluateDao;
|
import com.yeshi.fanli.dto.ConfigParamsDTO;
|
import com.yeshi.fanli.dto.jd.JDCouponInfo;
|
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
|
import com.yeshi.fanli.entity.bus.activity.ActivityUser;
|
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
|
import com.yeshi.fanli.entity.dynamic.CommentInfo;
|
import com.yeshi.fanli.entity.dynamic.CommentInfo.CommentInfoEnum;
|
import com.yeshi.fanli.entity.dynamic.DynamicInfo;
|
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
|
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate.EvaluateEnum;
|
import com.yeshi.fanli.entity.dynamic.GoodsPicture;
|
import com.yeshi.fanli.entity.dynamic.ImgInfo;
|
import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum;
|
import com.yeshi.fanli.entity.dynamic.SimpleGoods;
|
import com.yeshi.fanli.entity.jd.JDGoods;
|
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
|
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
|
import com.yeshi.fanli.exception.dynamic.ActivityUserException;
|
import com.yeshi.fanli.exception.dynamic.GoodsEvaluateException;
|
import com.yeshi.fanli.exception.goods.ConvertLinkExceptionException;
|
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.activity.ActivityUserService;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
|
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
|
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
|
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service;
|
import com.yeshi.fanli.service.manger.goods.ConvertLinkManager;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.FilePathEnum;
|
import com.yeshi.fanli.util.FileUtil;
|
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
import com.yeshi.fanli.util.RedisManager;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
|
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
|
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
|
import com.yeshi.fanli.util.jd.JDApiUtil;
|
import com.yeshi.fanli.util.jd.JDUtil;
|
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
|
import com.yeshi.fanli.util.taobao.DaTaoKeUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.vo.goods.CouponInfoVO;
|
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
|
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
|
|
@Service
|
public class GoodsEvaluateServiceImpl implements GoodsEvaluateService {
|
|
@Resource
|
private GoodsEvaluateDao goodsEvaluateDao;
|
|
@Resource
|
private ActivityUserService activityUserService;
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Resource
|
private HongBaoManageService hongBaoManageService;
|
|
@Resource(name = "taskExecutor")
|
private TaskExecutor executor;
|
|
@Resource
|
private JDGoodsCacheUtil jdGoodsCacheUtil;
|
|
@Resource
|
private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private ShareGoodsService shareGoodsService;
|
|
@Resource
|
private ConvertLinkManager convertLinkManager;
|
|
@Resource
|
private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
|
|
@Override
|
public String saveHead(MultipartFile file, GoodsEvaluate record) throws GoodsEvaluateException {
|
Integer state = record.getState();
|
if (state == null) {
|
state = 0;
|
}
|
record.setState(state);
|
|
String tilte = record.getTitle();
|
if (StringUtil.isNullOrEmpty(tilte)) {
|
throw new GoodsEvaluateException(1, "推荐语不能为空");
|
}
|
|
try {
|
ActivityUser activityUser = activityUserService.getActivityUserByNickName(record.getUser(), file);
|
if (activityUser == null)
|
throw new GoodsEvaluateException(1, "请选择发布者");
|
record.setUser(activityUser);
|
} catch (ActivityUserException e) {
|
throw new GoodsEvaluateException(1, e.getMsg());
|
}
|
|
if (record.getEndTime() != null) {
|
if (record.getStartTime() != null && record.getEndTime().getTime() <= record.getStartTime().getTime())
|
throw new GoodsEvaluateException(1, "截止时间必须大于开始时间");
|
} else {
|
record.setEndTime(DateUtil.plusDayDate(3, new Date()));
|
}
|
|
Integer dynamicType = record.getDynamicType();
|
if (dynamicType == null) {
|
record.setDynamicType(1);
|
}
|
|
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();
|
if (StringUtil.isNullOrEmpty(id)) {
|
id = UUID.randomUUID().toString().replace("-", "");
|
record.setId(id);
|
record.setShareNumReal(0);
|
record.setCreateTime(new Date());
|
record.setUpdateTime(new Date());
|
goodsEvaluateDao.save(record);
|
} else {
|
GoodsEvaluate resultObj = goodsEvaluateDao.getById(id);
|
if (resultObj == null)
|
throw new GoodsEvaluateException(1, "修改内容已不存在");
|
|
resultObj.setState(record.getState());
|
resultObj.setUser(record.getUser());
|
resultObj.setShareNum(record.getShareNum());
|
resultObj.setWeight(record.getWeight());
|
resultObj.setStartTime(record.getStartTime());
|
resultObj.setEndTime(record.getEndTime());
|
resultObj.setTitle(tilte);
|
resultObj.setUpdateTime(new Date());
|
goodsEvaluateDao.save(resultObj);
|
}
|
return id;
|
}
|
|
/**
|
* 上传图片
|
*
|
* @param file
|
* @return
|
* @throws Exception
|
*/
|
private String uploadPicture(MultipartFile file) throws Exception {
|
InputStream inputStream = file.getInputStream();
|
String contentType = file.getContentType();
|
String type = contentType.substring(contentType.indexOf("/") + 1);
|
String filePath = FilePathEnum.goodsEvaluate.getPath() + UUID.randomUUID().toString().replace("-", "") + "."
|
+ type;
|
return COSManager.getInstance().uploadFile(inputStream, filePath).getUrl();
|
}
|
|
private ImgInfo uploadVideoPicture(MultipartFile filevideo) {
|
try {
|
File tempFile = new File(FileUtil.getCacheDir() + "/" + filevideo.getOriginalFilename());
|
if (tempFile.exists())
|
tempFile.delete();
|
tempFile.createNewFile();
|
filevideo.transferTo(tempFile);
|
File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getOriginalFilename());
|
// 裁剪视频封面,宽高比为2:1
|
ImageCropUtil.centerCrop(tempFile, destFile, 2.0f);
|
BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
|
ImgInfo info = new ImgInfo();
|
int width = sourceImg.getWidth();
|
int height = sourceImg.getHeight();
|
String picLink = uploadPicture(destFile, filevideo.getContentType());
|
info.setH(height);
|
info.setW(width);
|
info.setUrl(picLink);
|
return info;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
private String uploadPicture(File file, String contentType) throws Exception {
|
InputStream inputStream = new FileInputStream(file);
|
String type = contentType.substring(contentType.indexOf("/") + 1);
|
String filePath = FilePathEnum.goodsEvaluate.getPath() + UUID.randomUUID().toString().replace("-", "") + "."
|
+ type;
|
return COSManager.getInstance().uploadFile(inputStream, filePath).getUrl();
|
}
|
|
/**
|
* 删除图片
|
*
|
* @param record
|
* @throws Exception
|
*/
|
private void removePicture(String picture) throws Exception {
|
if (picture != null && picture.trim().length() > 0) {
|
COSManager.getInstance().deleteFile(picture);
|
}
|
}
|
|
@Override
|
public String saveSingleGoods(String pid, Long goodsId, Integer goodsType, String videoUrl, Integer picNum,
|
String picUrls, MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception {
|
if (StringUtil.isNullOrEmpty(pid)) {
|
throw new GoodsEvaluateException(1, "请保存第一部分信息");
|
}
|
|
GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
|
if (resultObj == null)
|
throw new GoodsEvaluateException(1, "第一部分信息缺失");
|
|
// 原封视频面图
|
ImgInfo imgVideo = null;
|
List<String> listDel = new ArrayList<String>();
|
List<String> listOld = new ArrayList<String>();
|
|
// 处理图片
|
GoodsDetailVO oldGoodsVO = null;
|
List<ImgInfo> resultList = resultObj.getImgList();
|
if (resultList != null && resultList.size() > 0) {
|
for (ImgInfo info : resultList) {
|
ImgEnum type = info.getType();
|
if (type == ImgEnum.video) {
|
imgVideo = info;
|
} else if (type == ImgEnum.goods) {
|
listOld.add(info.getUrl());
|
oldGoodsVO = info.getGoodsVO();
|
} else if (type == ImgEnum.img) {
|
listOld.add(info.getUrl());
|
}
|
}
|
}
|
|
// 视频部分
|
if (fileRequest != null) {
|
MultipartFile filevideo = fileRequest.getFile("filevideo");
|
if (filevideo != null) {
|
if (StringUtil.isNullOrEmpty(videoUrl)) {
|
throw new GoodsEvaluateException(1, "视频链接不能为空");
|
}
|
ImgInfo info = uploadVideoPicture(filevideo);
|
if (info == null)
|
throw new GoodsEvaluateException(2, "视频图片上传失败");
|
if (imgVideo != null) {
|
String url = imgVideo.getUrl();
|
if (!StringUtil.isNullOrEmpty(url)) {
|
listDel.add(url);
|
}
|
imgVideo.setUrl(info.getUrl());
|
imgVideo.setUrlHD(info.getUrl());
|
} else {
|
imgVideo = new ImgInfo();
|
imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
|
imgVideo.setLarge(true);
|
imgVideo.setPid(pid);
|
imgVideo.setUrl(info.getUrl());
|
imgVideo.setUrlHD(info.getUrl());
|
imgVideo.setVideoUrl(videoUrl);
|
imgVideo.setType(ImgEnum.video);
|
}
|
imgVideo.setW(info.getW());
|
imgVideo.setH(info.getH());
|
}
|
}
|
|
List<ImgInfo> listImg = new ArrayList<ImgInfo>();
|
if (imgVideo != null) {
|
if (!StringUtil.isNullOrEmpty(videoUrl)) {
|
if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
|
throw new GoodsEvaluateException(1, "视频封面图不能为空");
|
}
|
imgVideo.setVideoUrl(videoUrl);
|
listImg.add(imgVideo);
|
} else {
|
String url = imgVideo.getUrl();
|
if (!StringUtil.isNullOrEmpty(url)) {
|
listDel.add(url);
|
}
|
}
|
}
|
|
// 编辑图片
|
List<String> listpic = new ArrayList<>();
|
if (!StringUtil.isNullOrEmpty(picUrls)) {
|
String[] pics = picUrls.split(",");
|
if (pics != null) {
|
for (int i = 0; i < pics.length; i++) {
|
String picLink = pics[i];
|
if (picLink.startsWith("http")) {
|
listpic.add(picLink);
|
}
|
}
|
}
|
}
|
|
// 上传文件替换
|
if (fileRequest != null) {
|
for (int i = 0; i < 9; i++) {
|
MultipartFile file = fileRequest.getFile("file" + i);
|
if (file != null) {
|
String picLink = uploadPicture(file);
|
if (i < listpic.size()) {
|
listpic.set(i, picLink);
|
} else {
|
listpic.add(picLink);
|
}
|
}
|
}
|
}
|
|
// 指定主图
|
if (picNum == null || picNum > 9 || picNum < 1) {
|
picNum = 1;
|
}
|
|
GoodsDetailVO goodsDetailVO = null;
|
JDGoods jdGoods = null;
|
PDDGoodsDetail pddGoods = null;
|
ConfigParamsDTO params = hongBaoManageService.getShowComputeRate("android", "55");
|
params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
|
if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
|
try {
|
TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
|
goodsDetailVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
|
} catch (TaobaoGoodsDownException e) {
|
throw new GoodsEvaluateException(1, "商品已下架");
|
}
|
} else if (goodsType == Constant.SOURCE_TYPE_JD) {
|
jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
|
goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(jdGoods, params);
|
} else if (goodsType == Constant.SOURCE_TYPE_PDD) {
|
pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
|
goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(pddGoods, params);
|
}
|
|
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 < 9; i++) {
|
ImgInfo imgInfo0 = new ImgInfo();
|
imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
|
imgInfo0.setW(1);
|
imgInfo0.setH(1);
|
imgInfo0.setLarge(false);
|
imgInfo0.setPid(pid);
|
imgInfo0.setUrl(listpic.get(i));
|
imgInfo0.setUrlHD(listpic.get(i));
|
|
if (picNum - 1 == i) {
|
imgInfo0.setType(ImgEnum.goods);
|
SimpleGoods simpleGoods = new SimpleGoods();
|
simpleGoods.setState(goodsDetailVO.getState());
|
simpleGoods.setGoodsId(goodsId);
|
simpleGoods.setGoodsType(goodsType);
|
CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
|
if (couponInfo == null) {
|
simpleGoods.setPrice(goodsDetailVO.getZkPrice());
|
} else {
|
simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
|
simpleGoods.setAmount(couponInfo.getAmount());
|
}
|
imgInfo0.setGoods(simpleGoods);
|
imgInfo0.setGoodsVO(goodsDetailVO);
|
listImg.add(imgInfo0);
|
} else {
|
imgInfo0.setType(ImgEnum.img);
|
tempList.add(imgInfo0);
|
}
|
totalImg++;
|
}
|
}
|
|
if (tempList.size() > 0) {
|
listImg.addAll(tempList);
|
}
|
|
if (listOld != null && listOld.size() > 0) {
|
for (int j = 0; j < listOld.size(); j++) {
|
boolean del = true;
|
String oldPic = listOld.get(j);
|
for (ImgInfo imgInfo : listImg) {
|
String url = imgInfo.getUrl();
|
if (url.equals(oldPic)) {
|
del = false;
|
}
|
}
|
if (del)
|
listDel.add(listOld.get(j));
|
}
|
}
|
|
int lineNum = 0;
|
if (totalImg > 0) {
|
if (totalImg == 1) {
|
lineNum = 1;
|
} else if (totalImg == 3) {
|
lineNum = 3;
|
} else if (totalImg <= 4) {
|
lineNum = 2;
|
} else {
|
lineNum = 3;
|
}
|
}
|
|
resultObj.setLineNum(lineNum);
|
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) {
|
if (commentInfo.getTypeEnum() == CommentInfoEnum.goodsCoupon) {
|
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; }
|
*/
|
|
String commentText = "";
|
if (addComment) {
|
if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
|
TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsId, "0");
|
String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
|
commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
|
} else if (goodsType == Constant.SOURCE_TYPE_JD) {
|
String couponUrl = null;
|
JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
|
if (couponInfo != null) {
|
couponUrl = couponInfo.getLink();
|
}
|
String materialId = "https://item.jd.com/" + goodsId + ".html";
|
String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl,
|
JDApiUtil.POSITION_SHARE + "", "1");
|
String template = configService.get(ConfigKeyEnum.quickShareJDCommentText.getKey());
|
if (jumpLink == null) {
|
throw new GoodsEvaluateException(1, "该商品转链失败");
|
}
|
commentText = template.replace("[链接]", jumpLink);
|
} else if (goodsType == Constant.SOURCE_TYPE_PDD) {
|
String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", "1");
|
if (jumpLink == null) {
|
throw new GoodsEvaluateException(1, "该商品转链失败");
|
}
|
String template = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
|
commentText = template.replace("[链接]", jumpLink);
|
}
|
|
// commentText = commentText.replace("[原价]",
|
// MoneyBigDecimalUtil.getWithNoZera(goodsDetailVO.getZkPrice())+"");
|
// if (!goodsDetailVO.isHasCoupon()) {
|
// commentText = commentText.replace("领券抢购", "抢购");
|
// commentText = commentText.replace("【券后价】[券后价]元", "");
|
// } else {
|
// commentText = commentText.replace("[券后价]",
|
// MoneyBigDecimalUtil.getWithNoZera(goodsDetailVO.getCouponPrice())+"");
|
// }
|
//
|
// commentText = commentText.replace("\r\n\r\n",
|
// "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n",
|
// "\r\n");
|
|
CommentInfo commentInfo = new CommentInfo();
|
commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
|
commentInfo.setContent(commentText);
|
commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
|
commentsNew.add(commentInfo);
|
resultObj.setComments(commentsNew);
|
}
|
resultObj.setUpdateTime(new Date());
|
goodsEvaluateDao.save(resultObj);
|
|
// 删除图片
|
if (listDel.size() > 0) {
|
for (String url : listDel) {
|
if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
|
removePicture(url);
|
}
|
}
|
}
|
|
return commentText;
|
}
|
|
private String createTokenAndLink(GoodsDetailVO goodsDetailVO) throws Exception {
|
String commentText = "";
|
if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
|
TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsDetailVO.getGoodsId(), "0");
|
String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
|
commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
|
} else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
|
String couponUrl = null;
|
|
JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsDetailVO.getGoodsId());
|
JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
|
if (couponInfo != null) {
|
couponUrl = couponInfo.getLink();
|
}
|
String materialId = "https://item.jd.com/" + goodsDetailVO.getGoodsId() + ".html";
|
String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
|
"1");
|
String template = configService.get(ConfigKeyEnum.quickShareJDCommentText.getKey());
|
commentText = template.replace("[链接]", jumpLink);
|
} else if (goodsDetailVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
|
String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsDetailVO.getGoodsId(),
|
PinDuoDuoApiUtil.PID_SHARE + "", "1");
|
String template = configService.get(ConfigKeyEnum.quickSharePDDCommentText.getKey());
|
commentText = template.replace("[链接]", jumpLink);
|
}
|
|
commentText = commentText.replace("[原价]", goodsDetailVO.getZkPrice().toString());
|
if (!goodsDetailVO.isHasCoupon()) {
|
commentText = commentText.replace("领券抢购", "抢购");
|
commentText = commentText.replace("【券后价】[券后价]元", "");
|
} else {
|
commentText = commentText.replace("[券后价]", goodsDetailVO.getCouponPrice().toString());
|
}
|
|
return commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
|
}
|
|
public GoodsDetailVO getGoodsDetailVO(Long goodsId, Integer goodsType) throws GoodsEvaluateException {
|
GoodsDetailVO goodsDetail = null;
|
ConfigParamsDTO params = hongBaoManageService.getShowComputeRate("android", "55");
|
params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
|
if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
|
try {
|
TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
|
String pictUrlWhite = goodsBrief.getPictUrlWhite();
|
if (!StringUtil.isNullOrEmpty(pictUrlWhite)) {
|
goodsBrief.setPictUrl(pictUrlWhite);
|
}
|
goodsDetail = GoodsDetailVOFactory.convertTaoBao(goodsBrief, params);
|
} catch (TaobaoGoodsDownException e) {
|
throw new GoodsEvaluateException(1, "商品已下架");
|
}
|
} else if (goodsType == Constant.SOURCE_TYPE_JD) {
|
JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(goodsId);
|
goodsDetail = GoodsDetailVOFactory.convertJDGoods(goodsInfo, params);
|
} else if (goodsType == Constant.SOURCE_TYPE_PDD) {
|
PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
|
goodsDetail = GoodsDetailVOFactory.convertPDDGoods(goodsInfo, params);
|
}
|
return goodsDetail;
|
}
|
|
@Override
|
public void saveMultipleGoods(String pid, String videoUrl, String goodsList,
|
MultipartHttpServletRequest fileRequest) throws GoodsEvaluateException, Exception {
|
if (StringUtil.isNullOrEmpty(pid)) {
|
throw new GoodsEvaluateException(1, "请保存第一部分信息");
|
}
|
|
GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
|
if (resultObj == null)
|
throw new GoodsEvaluateException(1, "第一部分信息缺失");
|
|
// 原封视频面图
|
ImgInfo imgVideo = null;
|
List<String> listDel = new ArrayList<String>();
|
List<ImgInfo> oldGoodsList = new ArrayList<ImgInfo>();
|
|
// 处理图片
|
List<ImgInfo> resultList = resultObj.getImgList();
|
if (resultList != null && resultList.size() > 0) {
|
for (ImgInfo info : resultList) {
|
ImgEnum type = info.getType();
|
if (type == ImgEnum.video) {
|
imgVideo = info;
|
} else if (type == ImgEnum.goods) {
|
oldGoodsList.add(info);
|
}
|
}
|
}
|
|
// 视频部分
|
if (fileRequest != null) {
|
MultipartFile filevideo = fileRequest.getFile("filevideo");
|
if (filevideo != null) {
|
if (StringUtil.isNullOrEmpty(videoUrl)) {
|
throw new GoodsEvaluateException(1, "视频链接不能为空");
|
}
|
|
ImgInfo info = uploadVideoPicture(filevideo);
|
if (info == null)
|
throw new GoodsEvaluateException(2, "视频图片上传失败");
|
|
if (imgVideo != null) {
|
String url = imgVideo.getUrl();
|
if (!StringUtil.isNullOrEmpty(url)) {
|
listDel.add(url);
|
}
|
imgVideo.setUrl(info.getUrl());
|
imgVideo.setUrlHD(info.getUrl());
|
} else {
|
imgVideo = new ImgInfo();
|
imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
|
imgVideo.setLarge(true);
|
imgVideo.setPid(pid);
|
imgVideo.setUrl(info.getUrl());
|
imgVideo.setUrlHD(info.getUrl());
|
imgVideo.setVideoUrl(videoUrl);
|
imgVideo.setType(ImgEnum.video);
|
}
|
imgVideo.setW(info.getW());
|
imgVideo.setH(info.getH());
|
}
|
}
|
|
List<ImgInfo> listImg = new ArrayList<ImgInfo>();
|
if (imgVideo != null) {
|
if (!StringUtil.isNullOrEmpty(videoUrl)) {
|
if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
|
throw new GoodsEvaluateException(1, "视频封面图不能为空");
|
}
|
imgVideo.setVideoUrl(videoUrl);
|
listImg.add(imgVideo);
|
} else {
|
String url = imgVideo.getUrl();
|
if (!StringUtil.isNullOrEmpty(url)) {
|
listDel.add(url);
|
}
|
}
|
}
|
|
int totalImg = 0;
|
if (!StringUtil.isNullOrEmpty(goodsList)) {
|
String[] goodsArray = goodsList.split(",");
|
if (goodsArray != null && goodsArray.length > 0) {
|
for (int i = 0; i < goodsArray.length && i < 9; i++) {
|
String goodsids = goodsArray[i];
|
String[] g = goodsids.split("-");
|
GoodsDetailVO goodsDetailVO = getGoodsDetailVO(Long.parseLong(g[0]), Integer.parseInt(g[1]));
|
if (goodsDetailVO == null) {
|
continue;
|
}
|
|
String picUrl = goodsDetailVO.getPicUrl();
|
if (fileRequest != null) {
|
MultipartFile file = fileRequest.getFile("file" + i);
|
if (file != null) {
|
picUrl = uploadPicture(file);
|
}
|
}
|
|
ImgInfo imgInfo0 = new ImgInfo();
|
imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
|
imgInfo0.setW(1);
|
imgInfo0.setH(1);
|
imgInfo0.setLarge(false);
|
imgInfo0.setPid(pid);
|
imgInfo0.setUrl(picUrl);
|
imgInfo0.setUrlHD(picUrl);
|
imgInfo0.setType(ImgEnum.goods);
|
|
SimpleGoods simpleGoods = new SimpleGoods();
|
simpleGoods.setState(goodsDetailVO.getState());
|
simpleGoods.setGoodsId(goodsDetailVO.getGoodsId());
|
simpleGoods.setGoodsType(goodsDetailVO.getGoodsType());
|
CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
|
if (couponInfo == null) {
|
simpleGoods.setPrice(goodsDetailVO.getZkPrice());
|
} else {
|
simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
|
simpleGoods.setAmount(couponInfo.getAmount());
|
}
|
imgInfo0.setGoods(simpleGoods);
|
imgInfo0.setGoodsVO(goodsDetailVO);
|
|
listImg.add(imgInfo0);
|
totalImg++;
|
}
|
}
|
}
|
|
|
|
// 数据对比 删除图片
|
if (oldGoodsList != null && oldGoodsList.size() > 0) {
|
for (ImgInfo old : oldGoodsList) {
|
ImgEnum type = old.getType();
|
if (type != ImgEnum.goods) {
|
continue;
|
}
|
|
boolean del = false;
|
long oldGoodsId = old.getGoods().getGoodsId().longValue();
|
int oldGoodsType = old.getGoods().getGoodsType().intValue();
|
for (ImgInfo newInfo : listImg) {
|
ImgEnum type2 = old.getType();
|
if (type2 != ImgEnum.goods) {
|
continue;
|
}
|
|
if (oldGoodsId == newInfo.getGoods().getGoodsId().longValue()
|
&& oldGoodsType == newInfo.getGoods().getGoodsType().intValue()) {
|
String url = newInfo.getUrl();
|
if (url.equals(old.getUrl())) {
|
|
} else if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
|
del = true;
|
} else {
|
newInfo.setUrl(old.getUrl());
|
newInfo.setUrlHD(old.getUrlHD());
|
}
|
break;
|
}
|
}
|
|
if (del) {
|
listDel.add(old.getUrl());
|
}
|
}
|
}
|
|
int lineNum = 0;
|
if (totalImg > 0) {
|
if (totalImg == 1) {
|
lineNum = 1;
|
} else if (totalImg == 3) {
|
lineNum = 3;
|
} else if (totalImg <= 4) {
|
lineNum = 2;
|
} else {
|
lineNum = 3;
|
}
|
}
|
|
resultObj.setLineNum(lineNum);
|
|
// 保存图片信息
|
resultObj.setImgList(listImg);
|
goodsEvaluateDao.save(resultObj);
|
|
// 删除图片
|
if (listDel.size() > 0) {
|
for (String url : listDel) {
|
if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
|
removePicture(url);
|
}
|
}
|
}
|
}
|
|
@Override
|
public void 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);
|
resultObj.setUpdateTime(new Date());
|
goodsEvaluateDao.save(resultObj);
|
}
|
|
@Override
|
public void saveGoodsCoupon(String pid, String content) throws GoodsEvaluateException, Exception {
|
if (StringUtil.isNullOrEmpty(pid)) {
|
throw new GoodsEvaluateException(1, "请保存第一部分信息");
|
}
|
|
GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
|
if (resultObj == null)
|
throw new GoodsEvaluateException(1, "第一部分信息缺失");
|
|
CommentInfo goodsCoupon = null;
|
CommentInfo currencyCoupon = null;
|
List<CommentInfo> oldComments = resultObj.getComments();
|
if (oldComments != null) {
|
for (CommentInfo info : oldComments) {
|
if (CommentInfoEnum.goodsCoupon == info.getTypeEnum()) {
|
goodsCoupon = info;
|
} else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
|
currencyCoupon = info;
|
}
|
}
|
}
|
|
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());
|
} else {
|
commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
|
}
|
commentInfo.setContent(content);
|
commentInfo.setType(commentInfo.getTags());
|
commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
|
comments.add(commentInfo);
|
}
|
|
if (currencyCoupon != null) {
|
comments.add(currencyCoupon);
|
}
|
|
resultObj.setComments(comments);
|
goodsEvaluateDao.save(resultObj);
|
}
|
|
@Override
|
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)) {
|
throw new GoodsEvaluateException(1, "评论语和链接不能同时为空");
|
}
|
|
String endTime = commentInfo.getEndTime();
|
if (!StringUtil.isNullOrEmpty(endTime)) {
|
try {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
sdf.parse(endTime);
|
} catch (Exception e) {
|
throw new GoodsEvaluateException(1, "请填写正确的时间格式:2020-03-05");
|
}
|
} else {
|
throw new GoodsEvaluateException(1, "请填写券截止时间");
|
}
|
|
if (!StringUtil.isNullOrEmpty(content) && kind != 3) { // 活动不验证
|
try {
|
convertLinkManager.convertLinkFromText(content, Constant.LINK_TOKEN_VERIFY_UID, true);
|
} catch (ConvertLinkExceptionException e) {
|
if (ConvertLinkExceptionException.CODE_NONE != e.getCode()) {
|
throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
|
}
|
} catch (Exception e) {
|
throw new GoodsEvaluateException(1, "包含不可转链的口令与链接");
|
}
|
}
|
|
GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
|
if (resultObj == null)
|
throw new GoodsEvaluateException(1, "第一部分信息缺失");
|
|
List<CommentInfo> comments = new ArrayList<>();
|
CommentInfo currencyCoupon = null;
|
List<CommentInfo> oldComments = resultObj.getComments();
|
if (oldComments != null) {
|
for (CommentInfo info : oldComments) {
|
if (CommentInfoEnum.goodsCoupon == info.getTypeEnum()) {
|
comments.add(info);
|
} else if (CommentInfoEnum.currencyCoupon == info.getTypeEnum()) {
|
currencyCoupon = info;
|
}
|
}
|
}
|
|
if (commentInfo != null) {
|
if (currencyCoupon != null) {
|
commentInfo.setId(currencyCoupon.getId());
|
} else {
|
commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
|
}
|
// 券类型
|
|
commentInfo.setType(commentInfo.getTags());
|
commentInfo.setTypeEnum(CommentInfoEnum.currencyCoupon);
|
|
// 标签信息
|
List<ClientTextStyleVO> tagList = new ArrayList<>();
|
String couponSource = commentInfo.getCouponSource();
|
if (!StringUtil.isNullOrEmpty(couponSource)) {
|
ClientTextStyleVO styleVO = new ClientTextStyleVO();
|
styleVO.setColor("#16C253");
|
styleVO.setContent(couponSource);
|
tagList.add(styleVO);
|
}
|
String coupon = commentInfo.getCoupon();
|
if (!StringUtil.isNullOrEmpty(coupon)) {
|
ClientTextStyleVO styleVO = new ClientTextStyleVO();
|
styleVO.setColor("#E5005C");
|
styleVO.setContent(coupon);
|
tagList.add(styleVO);
|
}
|
commentInfo.setTagList(tagList);
|
|
comments.add(commentInfo);
|
}
|
|
resultObj.setComments(comments);
|
goodsEvaluateDao.save(resultObj);
|
}
|
|
@Override
|
public void saveActivityPic(String pid, ImgInfo imgInfo, MultipartHttpServletRequest fileRequest)
|
throws GoodsEvaluateException, Exception {
|
if (StringUtil.isNullOrEmpty(pid)) {
|
throw new GoodsEvaluateException(1, "请保存第一部分信息");
|
}
|
|
GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
|
if (resultObj == null)
|
throw new GoodsEvaluateException(1, "第一部分信息缺失");
|
|
String videoPic = null;
|
String activityPic = null;
|
ImgInfo imgVideo = null;
|
ImgInfo imgactivity = null;
|
List<ImgInfo> resultList = resultObj.getImgList();
|
if (resultList != null && resultList.size() > 0) {
|
for (ImgInfo info : resultList) {
|
if (info.getType() == ImgEnum.activity) {
|
activityPic = info.getActivityPic();
|
imgactivity = info;
|
} else {
|
imgVideo = info;
|
videoPic = info.getUrl();
|
}
|
}
|
}
|
|
int width = 0;
|
int height = 0;
|
int width2 = 0;
|
int height2 = 0;
|
List<ImgInfo> listImg = new ArrayList<ImgInfo>();
|
if (fileRequest != null) {
|
MultipartFile filevideo = fileRequest.getFile("filevideo");
|
if (filevideo != null) {
|
removePicture(videoPic);
|
|
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 (activityfile != null) {
|
removePicture(activityPic);
|
InputStream inputStream = activityfile.getInputStream();
|
BufferedImage sourceImg = ImageIO.read(inputStream);
|
width2 = sourceImg.getWidth();
|
height2 = sourceImg.getHeight();
|
String picLink = uploadPicture(activityfile);
|
activityPic = picLink;
|
}
|
}
|
|
if (!StringUtil.isNullOrEmpty(videoPic) || !StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
|
if (imgVideo != null) {
|
imgVideo.setUrl(videoPic);
|
imgVideo.setUrlHD(videoPic);
|
imgVideo.setVideoUrl(imgInfo.getVideoUrl());
|
} else {
|
imgVideo = new ImgInfo();
|
imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
|
imgVideo.setLarge(true);
|
imgVideo.setPid(pid);
|
imgVideo.setUrl(videoPic);
|
imgVideo.setUrlHD(videoPic);
|
imgVideo.setVideoUrl(imgInfo.getVideoUrl());
|
imgVideo.setType(ImgEnum.video);
|
}
|
if (width > 0) {
|
imgVideo.setW(width);
|
imgVideo.setH(height);
|
} else {
|
imgVideo.setW(imgVideo.getW());
|
imgVideo.setH(imgVideo.getH());
|
}
|
listImg.add(imgVideo);
|
}
|
|
int totalImg = 0;
|
if (!StringUtil.isNullOrEmpty(activityPic) || !StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
|
if (imgactivity != null) {
|
imgactivity.setUrl(activityPic);
|
imgactivity.setUrlHD(activityPic);
|
imgactivity.setActivityUrl(imgInfo.getActivityUrl());
|
} else {
|
imgactivity = new ImgInfo();
|
imgactivity.setId(UUID.randomUUID().toString().replace("-", ""));
|
imgactivity.setLarge(true);
|
imgactivity.setPid(pid);
|
imgactivity.setUrl(activityPic);
|
imgactivity.setUrlHD(activityPic);
|
imgactivity.setActivityUrl(imgInfo.getActivityUrl());
|
imgactivity.setType(ImgEnum.activity);
|
}
|
if (width2 > 0) {
|
imgactivity.setW(width2);
|
imgactivity.setH(height2);
|
} else {
|
imgactivity.setW(imgactivity.getW());
|
imgactivity.setH(imgactivity.getH());
|
}
|
listImg.add(imgactivity);
|
totalImg++;
|
}
|
|
int lineNum = 0;
|
if (totalImg > 0) {
|
if (totalImg == 1) {
|
lineNum = 1;
|
} else if (totalImg == 3) {
|
lineNum = 3;
|
} else if (totalImg <= 4) {
|
lineNum = 2;
|
} else {
|
lineNum = 3;
|
}
|
}
|
|
resultObj.setLineNum(lineNum);
|
resultObj.setImgList(listImg);
|
goodsEvaluateDao.save(resultObj);
|
}
|
|
@Override
|
public void saveSuCai(String pid, String videoUrl, String picUrls, MultipartHttpServletRequest fileRequest)
|
throws GoodsEvaluateException, Exception {
|
if (StringUtil.isNullOrEmpty(pid)) {
|
throw new GoodsEvaluateException(1, "请保存第一部分信息");
|
}
|
|
GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
|
if (resultObj == null)
|
throw new GoodsEvaluateException(1, "第一部分信息缺失");
|
|
// 原封视频面图
|
ImgInfo imgVideo = null;
|
ImgInfo imgActivity = null;
|
List<String> listDel = new ArrayList<String>();
|
List<String> listOld = new ArrayList<String>();
|
|
List<ImgInfo> listOldImgInfo = new ArrayList<ImgInfo>();
|
// 处理图片
|
List<ImgInfo> resultList = resultObj.getImgList();
|
if (resultList != null && resultList.size() > 0) {
|
for (ImgInfo info : resultList) {
|
ImgEnum type = info.getType();
|
if (type == ImgEnum.video) {
|
imgVideo = info;
|
} else if (type == ImgEnum.img) {
|
listOldImgInfo.add(info);
|
String url = info.getUrl();
|
if (!StringUtil.isNullOrEmpty(url)) {
|
listOld.add(url);
|
}
|
} else if (type == ImgEnum.activity) {
|
imgActivity = info;
|
}
|
}
|
}
|
|
MultipartFile activityFile = null;
|
// 视频部分
|
if (fileRequest != null) {
|
MultipartFile filevideo = fileRequest.getFile("filevideo");
|
if (filevideo != null) {
|
if (StringUtil.isNullOrEmpty(videoUrl)) {
|
throw new GoodsEvaluateException(1, "视频链接不能为空");
|
}
|
ImgInfo info = uploadVideoPicture(filevideo);
|
if (info == null)
|
throw new GoodsEvaluateException(2, "视频图片上传失败");
|
if (imgVideo != null) {
|
String url = imgVideo.getUrl();
|
if (!StringUtil.isNullOrEmpty(url)) {
|
listDel.add(url);
|
}
|
imgVideo.setUrl(info.getUrl());
|
imgVideo.setUrlHD(info.getUrl());
|
} else {
|
imgVideo = new ImgInfo();
|
imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
|
imgVideo.setLarge(true);
|
imgVideo.setPid(pid);
|
imgVideo.setUrl(info.getUrl());
|
imgVideo.setUrlHD(info.getUrl());
|
imgVideo.setVideoUrl(videoUrl);
|
imgVideo.setType(ImgEnum.video);
|
}
|
imgVideo.setW(info.getW());
|
imgVideo.setH(info.getH());
|
}
|
|
activityFile = fileRequest.getFile("activityFile");
|
}
|
|
List<ImgInfo> listImg = new ArrayList<ImgInfo>();
|
if (imgVideo != null) {
|
if (!StringUtil.isNullOrEmpty(videoUrl)) {
|
if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
|
throw new GoodsEvaluateException(1, "视频封面图不能为空");
|
}
|
|
imgVideo.setVideoUrl(videoUrl);
|
listImg.add(imgVideo);
|
} else {
|
String url = imgVideo.getUrl();
|
if (!StringUtil.isNullOrEmpty(url)) {
|
listDel.add(url);
|
}
|
}
|
}
|
|
if (activityFile != null) {
|
InputStream inputStream = activityFile.getInputStream();
|
BufferedImage sourceImg = ImageIO.read(inputStream);
|
int width = sourceImg.getWidth();
|
int height = sourceImg.getHeight();
|
|
String picLink = uploadPicture(activityFile);
|
|
ImgInfo activity = new ImgInfo();
|
activity.setId(UUID.randomUUID().toString().replace("-", ""));
|
activity.setLarge(true);
|
activity.setPid(pid);
|
activity.setUrl(picLink);
|
activity.setUrlHD(picLink);
|
activity.setActivityPic(picLink);
|
activity.setW(width);
|
activity.setH(height);
|
activity.setType(ImgEnum.activity);
|
listImg.add(activity);
|
} else if (imgActivity != null) {
|
listImg.add(imgActivity);
|
}
|
|
// 编辑图片
|
List<String> listpic = new ArrayList<>();
|
if (!StringUtil.isNullOrEmpty(picUrls)) {
|
String[] pics = picUrls.split(",");
|
if (pics != null) {
|
for (int i = 0; i < pics.length; i++) {
|
String picLink = pics[i];
|
if (picLink.startsWith("http")) {
|
listpic.add(picLink);
|
}
|
}
|
}
|
}
|
|
// 上传文件替换
|
if (fileRequest != null) {
|
for (int i = 0; i < 9; i++) {
|
MultipartFile file = fileRequest.getFile("file" + i);
|
if (file != null) {
|
String picLink = uploadPicture(file);
|
if (i < listpic.size()) {
|
listpic.set(i, picLink);
|
} else {
|
listpic.add(picLink);
|
}
|
}
|
}
|
}
|
|
int totalImg = 0;
|
for (String pic : listpic) {
|
ImgInfo imgInfo0 = new ImgInfo();
|
imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
|
imgInfo0.setLarge(false);
|
imgInfo0.setPid(pid);
|
imgInfo0.setUrl(pic);
|
imgInfo0.setUrlHD(pic);
|
imgInfo0.setType(ImgEnum.img);
|
imgInfo0.setW(1);
|
imgInfo0.setH(1);
|
listImg.add(imgInfo0);
|
totalImg++;
|
}
|
|
|
// 清理老图片
|
if (listOld != null && listOld.size() > 0) {
|
for (int j = 0; j < listOld.size(); j++) {
|
boolean del = true;
|
String oldPic = listOld.get(j);
|
for (ImgInfo imgInfo : listImg) {
|
String url = imgInfo.getUrl();
|
if (url.equals(oldPic)) {
|
del = false;
|
}
|
}
|
if (del)
|
listDel.add(listOld.get(j));
|
}
|
}
|
|
int lineNum = 0;
|
if (totalImg > 0) {
|
if (totalImg == 1) {
|
lineNum = 1;
|
} else if (totalImg == 3) {
|
lineNum = 3;
|
} else if (totalImg <= 4) {
|
lineNum = 2;
|
} else {
|
lineNum = 3;
|
}
|
}
|
|
resultObj.setLineNum(lineNum);
|
resultObj.setImgList(listImg);
|
goodsEvaluateDao.save(resultObj);
|
|
// 删除图片
|
if (listDel.size() > 0) {
|
for (String url : listDel) {
|
if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
|
removePicture(url);
|
}
|
}
|
}
|
}
|
|
@Override
|
public void deleteBatchByPrimaryKey(List<String> list) {
|
if (list == null || list.size() == 0) {
|
return;
|
}
|
for (String id : list) {
|
goodsEvaluateDao.deleteById(id);
|
}
|
}
|
|
@Override
|
public GoodsEvaluate getById(String id) {
|
return goodsEvaluateDao.getById(id);
|
}
|
|
@Override
|
public void saveComment(String pid, CommentInfo commentInfo) throws GoodsEvaluateException {
|
GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(pid);
|
if (goodsEvaluate == null) {
|
throw new GoodsEvaluateException(1, "动态已不存在");
|
}
|
|
String tags = commentInfo.getTags();
|
if (!StringUtil.isNullOrEmpty(tags)) {
|
String[] arrayTags = tags.split("\\s+");
|
if (arrayTags != null && arrayTags.length > 0) {
|
String[] arrayTagsColour = null;
|
String tagsColour = commentInfo.getTagsColour();
|
if (!StringUtil.isNullOrEmpty(tagsColour)) {
|
arrayTagsColour = tagsColour.split("\\s+");
|
}
|
|
String color = "#E5005C";
|
List<ClientTextStyleVO> tagList = new ArrayList<ClientTextStyleVO>();
|
for (int i = 0; i < arrayTags.length; i++) {
|
String tag = arrayTags[i];
|
if (arrayTagsColour != null && arrayTagsColour.length == arrayTags.length) {
|
color = arrayTagsColour[i];
|
}
|
ClientTextStyleVO styleVO = new ClientTextStyleVO();
|
styleVO.setColor(color);
|
styleVO.setContent(tag);
|
tagList.add(styleVO);
|
}
|
commentInfo.setTagList(tagList);
|
}
|
}
|
|
List<CommentInfo> comments = goodsEvaluate.getComments();
|
if (comments == null) {
|
comments = new ArrayList<>();
|
}
|
|
Integer weight = commentInfo.getWeight();
|
if (weight == null)
|
commentInfo.setWeight(1);
|
|
comments.add(commentInfo);
|
|
Collections.shuffle(comments);
|
Comparator<CommentInfo> cm = new Comparator<CommentInfo>() {
|
@Override
|
public int compare(CommentInfo o1, CommentInfo o2) {
|
return o1.getWeight() != null && o2.getWeight() != null ? o2.getWeight() - o1.getWeight() : 0;
|
}
|
};
|
Collections.sort(comments, cm);
|
|
goodsEvaluate.setComments(comments);
|
goodsEvaluateDao.save(goodsEvaluate);
|
}
|
|
@Override
|
public void release(String id) throws GoodsEvaluateException {
|
GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(id);
|
if (goodsEvaluate == null) {
|
throw new GoodsEvaluateException(1, "动态已不存在");
|
}
|
goodsEvaluate.setState(1);
|
goodsEvaluateDao.save(goodsEvaluate);
|
}
|
|
@Override
|
public void deleteComment(String pid, List<String> list) throws GoodsEvaluateException {
|
if (list == null || list.size() == 0) {
|
return;
|
}
|
GoodsEvaluate goodsEvaluate = goodsEvaluateDao.getById(pid);
|
if (goodsEvaluate == null) {
|
throw new GoodsEvaluateException(1, "动态已不存在");
|
}
|
|
List<CommentInfo> comments = goodsEvaluate.getComments();
|
if (comments == null || comments.size() == 0) {
|
return;
|
}
|
|
for (String id : list) {
|
for (int i = 0; i < comments.size(); i++) {
|
CommentInfo commentInfo = comments.get(i);
|
if (id.equals(commentInfo.getId())) {
|
comments.remove(i);
|
i--;
|
}
|
}
|
}
|
goodsEvaluate.setComments(comments);
|
goodsEvaluateDao.save(goodsEvaluate);
|
}
|
|
@Override
|
public void addShareNum(String id) {
|
GoodsEvaluate article = goodsEvaluateDao.getById(id);
|
if (article != null) {
|
Integer num = article.getShareNum();
|
if (num == null) {
|
num = 0;
|
}
|
article.setShareNum(num + 1);
|
|
Integer numReal = article.getShareNumReal();
|
if (numReal == null) {
|
numReal = 0;
|
}
|
article.setShareNumReal(numReal + 1);
|
|
goodsEvaluateDao.save(article);
|
}
|
}
|
|
@Override
|
public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType) {
|
return goodsEvaluateDao.query(start, count, key, state, dynamicType);
|
}
|
|
@Override
|
public long count(String key, Integer state, int dynamicType) {
|
return goodsEvaluateDao.count(key, state, dynamicType);
|
}
|
|
@Override
|
public void addRanDomShareCount() {
|
// 发圈
|
try {
|
List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(0, Integer.MAX_VALUE, 1);
|
if (list != null) {
|
for (GoodsEvaluate goodsEvaluate : list) {
|
Integer shareNum = goodsEvaluate.getShareNum();
|
if (shareNum == null) {
|
shareNum = 0;
|
}
|
goodsEvaluate.setShareNum(shareNum + (int) (Math.random() * 100) + 10);
|
goodsEvaluateDao.save(goodsEvaluate);
|
}
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
}
|
|
// 素材
|
try {
|
List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(0, Integer.MAX_VALUE, 2);
|
if (list != null) {
|
for (GoodsEvaluate goodsEvaluate : list) {
|
Integer shareNum = goodsEvaluate.getShareNum();
|
if (shareNum == null) {
|
shareNum = 0;
|
}
|
goodsEvaluate.setShareNum(shareNum + (int) (Math.random() * 100) + 10);
|
goodsEvaluateDao.save(goodsEvaluate);
|
}
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
}
|
}
|
|
@Override
|
@Cacheable(value = "dynamicCache", key = "'queryValidEvaluateCache-'+#start")
|
public List<GoodsEvaluate> queryValidEvaluateCache(int start, int count) {
|
List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(start, count, 1);
|
|
// 更新商品信息
|
executor.execute(new Runnable() {
|
@Override
|
public void run() {
|
// 更新信息
|
updateGoodInfo(list);
|
|
// 删除已过期
|
removeOverdue();
|
}
|
});
|
|
return list;
|
}
|
|
@Override
|
public long countValid() {
|
return goodsEvaluateDao.countValid(1);
|
}
|
|
@Override
|
@Cacheable(value = "dynamicCache", key = "'queryMaterialsCache-'+#start+'-'+#type")
|
public List<GoodsEvaluate> queryMaterialsCache(int start, int count, int type) throws Exception {
|
List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(start, count, type);
|
if (list == null) {
|
list = new ArrayList<>();
|
}
|
Date now = new Date();
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
List<GoodsEvaluate> listNew = new ArrayList<>();
|
for (GoodsEvaluate goodsEvaluate : list) {
|
GoodsEvaluate evaluateNew = new GoodsEvaluate();
|
try {
|
PropertyUtils.copyProperties(evaluateNew, goodsEvaluate);
|
} catch (Exception e) {
|
e.printStackTrace();
|
continue;
|
}
|
|
// 按照发布显示时间段起始时间为准。
|
goodsEvaluate.setPublishTime(goodsEvaluate.getStartTime());
|
|
|
List<CommentInfo> comments = evaluateNew.getComments();
|
if (comments != null && comments.size() > 0) {
|
EvaluateEnum typeEnum = evaluateNew.getType();
|
List<CommentInfo> commentNew = new ArrayList<>();
|
|
boolean singleCoupn = true;
|
boolean currencyCoupon = true;
|
for (CommentInfo commentInfo : comments) {
|
if (StringUtil.isNullOrEmpty(commentInfo.getContent())
|
&& StringUtil.isNullOrEmpty(commentInfo.getCoupon())) {
|
continue;
|
}
|
|
CommentInfo commentInfoNew = new CommentInfo();
|
try {
|
PropertyUtils.copyProperties(commentInfoNew, commentInfo);
|
} catch (Exception e) {
|
e.printStackTrace();
|
continue;
|
}
|
|
if (typeEnum != null && typeEnum == EvaluateEnum.single) {
|
GoodsDetailVO goods = evaluateNew.getGoods();
|
if (goods != null) {
|
String content = commentInfoNew.getContent();
|
if (!StringUtil.isNullOrEmpty(content)) {
|
content = content.replace("[原价]",
|
MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "");
|
if (goods.isHasCoupon()) {
|
content = content.replace("[券后价]",
|
MoneyBigDecimalUtil.getWithNoZera(goods.getCouponPrice()) + "");
|
} else {
|
singleCoupn = false;
|
content = content.replace("领券抢购", "抢购");
|
content = content.replace("【券后价】[券后价]元", "");
|
}
|
content = content.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
|
// 替换淘宝官方活动
|
List<String> activityIdList = convertLinkManager.getTaoBaoOfficialActivityId(content);
|
for (String st : activityIdList)
|
content = content.replace(st, "");
|
|
commentInfoNew.setContent(content);
|
}
|
}
|
}
|
if (typeEnum != null && typeEnum == EvaluateEnum.activity) {
|
// 替换淘宝官方活动
|
String content = commentInfoNew.getContent();
|
List<String> activityIdList = convertLinkManager.getTaoBaoOfficialActivityId(content);
|
for (String st : activityIdList)
|
content = content.replace(st, "");
|
commentInfoNew.setContent(content);
|
}
|
|
CommentInfoEnum typeComment = commentInfoNew.getTypeEnum();
|
if (typeComment != null && typeComment == CommentInfoEnum.goodsCoupon) {
|
GoodsDetailVO goods = evaluateNew.getGoods();
|
if (goods != null && goods.isHasCoupon()) {
|
commentNew.add(commentInfoNew);
|
continue;
|
}
|
}
|
|
String coupon = commentInfoNew.getCoupon();
|
String endTime = commentInfoNew.getEndTime();
|
if (!StringUtil.isNullOrEmpty(coupon) && !StringUtil.isNullOrEmpty(endTime)) {
|
Date endDay = sdf.parse(endTime);
|
if (endDay.getTime() > now.getTime()) {
|
String daysBetween = DateUtil.dateDiff5(now, endDay);
|
if (!StringUtil.isNullOrEmpty(daysBetween)) {
|
List<ClientTextStyleVO> tagListNew = new ArrayList<>();
|
List<ClientTextStyleVO> tagList = commentInfoNew.getTagList();
|
if (tagList != null) {
|
tagListNew.addAll(tagList);
|
}
|
|
ClientTextStyleVO styleVO = new ClientTextStyleVO();
|
styleVO.setColor("#E5005C");
|
styleVO.setContent(daysBetween + "后过期");
|
tagListNew.add(styleVO);
|
commentInfoNew.setTagList(tagListNew);
|
commentNew.add(commentInfoNew);
|
continue;
|
} else {
|
currencyCoupon = false;
|
continue;
|
}
|
} else {
|
currencyCoupon = false;
|
continue;
|
}
|
}
|
|
commentNew.add(commentInfoNew);
|
}
|
evaluateNew.setComments(commentNew);
|
|
if (typeEnum != null && typeEnum == EvaluateEnum.single) {
|
if (!currencyCoupon && !singleCoupn) { // 所有券评论下架
|
GoodsDetailVO goods = evaluateNew.getGoods();
|
if (goods != null) {
|
goods.setState(1); // 评论不存在 下架
|
evaluateNew.setRemarks("评论验证下架");
|
}
|
|
List<ImgInfo> imgList = evaluateNew.getImgList();
|
if (imgList != null) {
|
for (ImgInfo imgInfo : imgList) {
|
SimpleGoods simpleGoods = imgInfo.getGoods();
|
if (simpleGoods != null) {
|
simpleGoods.setState(1);
|
simpleGoods.setRemarks("评论验证下架");
|
}
|
}
|
|
}
|
}
|
}
|
}
|
|
listNew.add(evaluateNew);
|
}
|
|
List<GoodsEvaluate> listOBJ = list;
|
// 更新商品信息
|
executor.execute(new Runnable() {
|
@Override
|
public void run() {
|
updateGoodInfo(listOBJ);
|
|
// 删除已过期
|
removeOverdue();
|
}
|
});
|
|
return listNew;
|
}
|
|
@Override
|
public long countValidMaterials(int type) {
|
return goodsEvaluateDao.countValid(type);
|
}
|
|
/**
|
* 更新商品信息
|
*/
|
public void updateGoodInfo(List<GoodsEvaluate> list) {
|
if (!Constant.IS_OUTNET) {
|
return; // 外网进行更新
|
}
|
|
if (list == null || list.size() == 0) {
|
return;
|
}
|
|
try {
|
Date now = new Date();
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
ConfigParamsDTO params = hongBaoManageService.getShowComputeRate("android", "55");
|
params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
|
for (GoodsEvaluate goodsEvaluate : list) {
|
// 是否2个小时之内已更新
|
Date updateTime = goodsEvaluate.getUpdateTime();
|
if (updateTime != null) {
|
long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
|
long nh = 1000 * 60 * 60;// 一小时的毫秒数
|
long diff = System.currentTimeMillis() - updateTime.getTime();
|
long day = diff / nd;// 计算差多少天
|
long hour = diff % nd / nh + day * 24;// 计算差多少小时
|
if (hour < 2) {
|
continue;
|
}
|
}
|
|
EvaluateEnum type = goodsEvaluate.getType();
|
if (type != null && type == EvaluateEnum.activity) {
|
List<CommentInfo> comments = goodsEvaluate.getComments();
|
if (comments != null) {
|
for (CommentInfo commentInfo : comments) {
|
CommentInfoEnum commentInfoEnum = commentInfo.getTypeEnum();
|
if (commentInfoEnum != null && commentInfoEnum == CommentInfoEnum.currencyCoupon) {
|
String endTime = commentInfo.getEndTime();
|
if (!StringUtil.isNullOrEmpty(endTime)) {
|
Date endDay = sdf.parse(endTime);
|
if (endDay.getTime() < now.getTime()) {
|
goodsEvaluate.setState(0); // 活动过期
|
}
|
}
|
}
|
|
}
|
}
|
}
|
|
GoodsDetailVO goods = goodsEvaluate.getGoods();
|
if (goods != null) {
|
GoodsDetailVO goodsNew = getGoodsNewInfo(goods.getGoodsId(), goods.getGoodsType(), params);
|
if (goodsNew != null) {
|
goodsEvaluate.setGoods(goodsNew);
|
} else {
|
goodsEvaluate.setRemarks("更新-位置找到商品信息");
|
goodsEvaluate.setState(0); // 已商品下架
|
goods.setState(1);
|
goodsEvaluate.setGoods(goods);
|
}
|
}
|
// 更新商品信息
|
List<ImgInfo> imgList = goodsEvaluate.getImgList();
|
if (imgList == null || imgList.size() == 0) {
|
continue;
|
}
|
|
for (ImgInfo imgInfo : imgList) {
|
SimpleGoods simpleGoods = imgInfo.getGoods();
|
if (simpleGoods == null) {
|
continue;
|
}
|
|
GoodsDetailVO goodsDetailVO = getGoodsNewInfo(simpleGoods.getGoodsId(), simpleGoods.getGoodsType(),
|
params);
|
if (goodsDetailVO != null) {
|
simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
|
simpleGoods.setState(0);
|
CouponInfoVO couponInfo = goodsDetailVO.getCouponInfo();
|
if (couponInfo == null) {
|
simpleGoods.setPrice(goodsDetailVO.getZkPrice());
|
} else {
|
simpleGoods.setPrice(goodsDetailVO.getCouponPrice());
|
simpleGoods.setAmount(couponInfo.getAmount());
|
}
|
imgInfo.setGoods(simpleGoods);
|
imgInfo.setGoodsVO(goodsDetailVO);
|
} else {
|
simpleGoods.setRemarks("更新-位置找到商品信息");
|
simpleGoods.setState(1);
|
imgInfo.setGoods(simpleGoods);
|
GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
|
if (goodsVO != null) {
|
goodsVO.setState(1);
|
imgInfo.setGoodsVO(goodsVO);
|
}
|
}
|
}
|
goodsEvaluate.setImgList(imgList);
|
goodsEvaluate.setUpdateTime(new Date());
|
goodsEvaluateDao.save(goodsEvaluate);
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
}
|
}
|
|
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);
|
if (goodsInfo != null) {
|
vo = GoodsDetailVOFactory.convertJDGoods(goodsInfo, paramsDTO);
|
}
|
} else if (goodsType == Constant.SOURCE_TYPE_PDD) {
|
PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
|
if (goodsInfo != null)
|
vo = GoodsDetailVOFactory.convertPDDGoods(goodsInfo, paramsDTO);
|
}
|
return vo;
|
}
|
|
@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("-", ""));
|
ActivityUser user = info.getUser();
|
goodsEvaluate.setUser(user);
|
goodsEvaluate.setState(1);
|
goodsEvaluate.setDynamicType(1);
|
goodsEvaluate.setType(EvaluateEnum.single);
|
goodsEvaluate.setLineNum(2);
|
goodsEvaluate.setShareNum(info.getShareCount());
|
goodsEvaluate.setShareNumReal(0);
|
goodsEvaluate.setPublishTime(info.getCreateTime());
|
goodsEvaluate.setCreateTime(new Date());
|
goodsEvaluate.setUpdateTime(new Date());
|
goodsEvaluate.setWeight(0.0);
|
goodsEvaluate.setStartTime(new Date());
|
goodsEvaluate.setEndTime(DateUtil.plusDayDate(3, new Date()));
|
|
List<ClientTextStyleVO> titles = info.getTitle();
|
if (titles != null) {
|
goodsEvaluate.setTitle(info.getTitle().get(0).getContent());
|
} else {
|
goodsEvaluate.setTitle("");
|
}
|
|
List<ImgInfo> imgList = new ArrayList<>();
|
|
List<GoodsPicture> imgs = info.getImgs();
|
for (GoodsPicture goodsPicture : imgs) {
|
ImgInfo imgInfo = new ImgInfo();
|
imgInfo.setH(1);
|
imgInfo.setW(1);
|
imgInfo.setLarge(false);
|
imgInfo.setUrl(goodsPicture.getUrl());
|
imgInfo.setUrlHD(goodsPicture.getUrl());
|
|
GoodsDetailVO goodsVO = goodsPicture.getGoodsVO();
|
if (goodsVO == null) {
|
imgInfo.setType(ImgEnum.img);
|
} else {
|
imgInfo.setType(ImgEnum.goods);
|
SimpleGoods simpleGoods = new SimpleGoods();
|
simpleGoods.setGoodsId(goodsVO.getGoodsId());
|
simpleGoods.setGoodsType(goodsVO.getGoodsType());
|
simpleGoods.setState(goodsVO.getState());
|
CouponInfoVO couponInfo = goodsVO.getCouponInfo();
|
if (couponInfo == null) {
|
simpleGoods.setPrice(goodsVO.getZkPrice());
|
} else {
|
simpleGoods.setPrice(goodsVO.getCouponPrice());
|
simpleGoods.setAmount(couponInfo.getAmount());
|
}
|
imgInfo.setGoods(simpleGoods);
|
|
TaoBaoLink taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(1L, goodsVO.getGoodsId(), "0");
|
|
// TaoBaoLink taoBaoLink =
|
// shareGoodsService.getTaoBaoLinkForShare(Constant.LINK_TOKEN_VERIFY_UID,
|
// 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);
|
}
|
goodsEvaluate.setImgList(imgList);
|
goodsEvaluateDao.save(goodsEvaluate);
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
}
|
}
|
|
@Override
|
public void addGoodsEvaluateByDaTaoKe() {
|
List<Long> listId = null;
|
List<GoodsEvaluate> listExist = goodsEvaluateDao.querySingleExist();
|
if (listExist != null && listExist.size() > 0) {
|
listId = new ArrayList<Long>();
|
for (GoodsEvaluate goodsEvaluate : listExist) {
|
GoodsDetailVO goods = goodsEvaluate.getGoods();
|
if (goods != null && goods.getGoodsType() == 1) {
|
listId.add(goods.getGoodsId());
|
}
|
}
|
}
|
// 热销单品的分类
|
List<GoodsClass> listClass = DaTaoKeUtil.goodsClasses;
|
int ci = (int) (Math.random() * listClass.size());
|
Long subId = listClass.get(ci).getId();
|
|
List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Service.getGoodsNotInList(subId, listId, 1);
|
if (list == null || list.size() == 0) {
|
return;
|
}
|
|
for (int i = 0; i < list.size(); i++) {
|
boolean cerateGoods = cerateGoods(list.get(i));
|
if (cerateGoods) {
|
break;
|
}
|
}
|
}
|
|
private boolean cerateGoods(DaTaoKeDetailV2 daTaoKe) {
|
try {
|
TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(daTaoKe.getGoodsId());
|
if (goodsBrief == null) {
|
return false;
|
}
|
|
BigDecimal couponAmount = goodsBrief.getCouponAmount();
|
if (couponAmount == null || couponAmount.compareTo(new BigDecimal(0)) < 1) {
|
return false;
|
}
|
|
ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate("android", "55");
|
paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
|
GoodsDetailVO goodsVO = GoodsDetailVOFactory.convertTaoBao(goodsBrief, paramsDTO);
|
// 发布用户
|
ActivityUser user = activityUserService.getRandomByDaTaoKeCid(daTaoKe.getCid());
|
|
String desc = daTaoKe.getDesc().replace(",", ",");
|
String[] split = desc.split(",");
|
int max = 1;
|
if (Math.random() > 0.5) {
|
max = 2;
|
}
|
int e = 0;
|
String emojis = "";
|
String descNew = "";
|
if (split.length > 0) {
|
for (int i = 0; i < split.length; i++) {
|
if (Math.random() > 0.5 && e < max) {
|
for (int j = 0; j < 10; j++) {
|
String emojisTemp = DaTaoKeUtil.getEvaluateEmojis();
|
if (!emojis.equals(emojisTemp)) {
|
emojis = emojisTemp;
|
break;
|
}
|
}
|
e++;
|
descNew += split[i] + emojis;
|
} else {
|
descNew += split[i] + ",";
|
}
|
}
|
} else {
|
descNew = desc;
|
}
|
|
if (descNew.endsWith(",")) {
|
descNew = descNew.substring(0, descNew.length() - 1);
|
}
|
|
GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
|
goodsEvaluate.setId(UUID.randomUUID().toString().replace("-", ""));
|
goodsEvaluate.setUser(user);
|
goodsEvaluate.setTitle(descNew);
|
goodsEvaluate.setState(1);
|
goodsEvaluate.setDynamicType(1);
|
goodsEvaluate.setType(EvaluateEnum.single);
|
|
goodsEvaluate.setShareNum((int) (Math.random() * 5000) + 1000);
|
goodsEvaluate.setShareNumReal(0);
|
goodsEvaluate.setWeight(0.0);
|
goodsEvaluate.setStartTime(new Date());
|
goodsEvaluate.setEndTime(DateUtil.plusDayDate(3, new Date()));
|
goodsEvaluate.setPublishTime(new Date());
|
goodsEvaluate.setCreateTime(new Date());
|
goodsEvaluate.setUpdateTime(new Date());
|
|
List<String> goodsimgs = goodsBrief.getImgList();
|
|
List<String> imgs = new ArrayList<>();
|
if (!StringUtil.isNullOrEmpty(goodsBrief.getPictUrlWhite())) {
|
imgs.add(goodsBrief.getPictUrlWhite());
|
}
|
imgs.addAll(goodsimgs);
|
|
int lineNum = 0;
|
if (imgs.size() > 0) {
|
if (imgs.size() == 1) {
|
lineNum = 1;
|
} else if (imgs.size() == 3) {
|
lineNum = 3;
|
} else if (imgs.size() <= 4) {
|
lineNum = 2;
|
} else {
|
lineNum = 3;
|
}
|
}
|
goodsEvaluate.setLineNum(lineNum);
|
|
int i = 0;
|
List<ImgInfo> imgList = new ArrayList<>();
|
for (String img : imgs) {
|
ImgInfo imgInfo = new ImgInfo();
|
imgInfo.setH(1);
|
imgInfo.setW(1);
|
imgInfo.setLarge(false);
|
imgInfo.setUrl(img);
|
imgInfo.setUrlHD(img);
|
if (i != 0) {
|
imgInfo.setType(ImgEnum.img);
|
} else {
|
imgInfo.setType(ImgEnum.goods);
|
SimpleGoods simpleGoods = new SimpleGoods();
|
simpleGoods.setGoodsId(goodsVO.getGoodsId());
|
simpleGoods.setGoodsType(goodsVO.getGoodsType());
|
simpleGoods.setState(goodsVO.getState());
|
CouponInfoVO couponInfo = goodsVO.getCouponInfo();
|
if (couponInfo == null) {
|
simpleGoods.setPrice(goodsVO.getZkPrice());
|
} else {
|
simpleGoods.setPrice(goodsVO.getCouponPrice());
|
simpleGoods.setAmount(couponInfo.getAmount());
|
}
|
imgInfo.setGoods(simpleGoods);
|
imgInfo.setGoodsVO(goodsVO);
|
|
// TaoBaoLink taoBaoLink =
|
// shareGoodsService.getTaoBaoLinkForShare(Constant.LINK_TOKEN_VERIFY_UID,
|
// goodsVO.getGoodsId(), null);
|
|
String token = shareGoodsService.createTaoBaoToken(Constant.LINK_TOKEN_VERIFY_UID, goodsBrief);
|
|
String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
|
String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(token));
|
|
commentText = commentText.replace("[原价]",
|
MoneyBigDecimalUtil.getWithNoZera(goodsVO.getZkPrice()) + "");
|
if (!goodsVO.isHasCoupon()) {
|
commentText = commentText.replace("领券抢购", "抢购");
|
commentText = commentText.replace("【券后价】[券后价]元", "");
|
} else {
|
commentText = commentText.replace("[券后价]",
|
MoneyBigDecimalUtil.getWithNoZera(goodsVO.getCouponPrice()) + "");
|
}
|
commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n")
|
.replace("\r\n\r\n", "\r\n");
|
|
CommentInfo commentInfo = new CommentInfo();
|
commentInfo.setId(UUID.randomUUID().toString().replace("-", ""));
|
commentInfo.setContent(commentText);
|
commentInfo.setTypeEnum(CommentInfoEnum.goodsCoupon);
|
commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
|
|
String text2 = "";
|
String evaluateEmojis = configService.get(ConfigKeyEnum.evaluateEmojis.getKey());
|
if (!StringUtil.isNullOrEmpty(evaluateEmojis)) {
|
text2 = evaluateEmojis + "\n";
|
}
|
|
String evaluateText = configService.get(ConfigKeyEnum.evaluateText.getKey());
|
if (!StringUtil.isNullOrEmpty(evaluateText)) {
|
text2 += evaluateText;
|
}
|
|
String dtitle = daTaoKe.getDtitle();
|
if (!StringUtil.isNullOrEmpty(dtitle)) {
|
text2 = text2 + dtitle + "\n";
|
} else if (!StringUtil.isNullOrEmpty(evaluateText)) {
|
text2 += "\n";
|
}
|
text2 += "先领【" + couponAmount + "元优惠券】下单";
|
|
CommentInfo commentInfo2 = new CommentInfo();
|
commentInfo2.setId(UUID.randomUUID().toString().replace("-", ""));
|
commentInfo2.setContent(text2);
|
commentInfo2.setTypeEnum(CommentInfoEnum.goodsCoupon);
|
commentInfo2.setType("");
|
|
List<CommentInfo> commentsNew = new ArrayList<>();
|
commentsNew.add(commentInfo);
|
commentsNew.add(commentInfo2);
|
goodsEvaluate.setComments(commentsNew);
|
|
goodsEvaluate.setGoods(goodsVO);
|
}
|
imgList.add(imgInfo);
|
i++;
|
}
|
goodsEvaluate.setImgList(imgList);
|
goodsEvaluateDao.save(goodsEvaluate);
|
} catch (Exception e) {
|
e.printStackTrace();
|
LogHelper.errorDetailInfo(e);
|
return false;
|
}
|
return true;
|
}
|
|
private String getDesc(String desc) {
|
System.out.println(desc);
|
String newDesc = "";
|
int emoji = 0;
|
String content = desc.replace(",", ",");
|
while (content.length() > 0) {
|
int length = 0;
|
boolean end = true;
|
for (int i = 0; i < content.length(); i++) {
|
if (content.substring(0, i).length() >= 18) {
|
length = i;
|
end = false;
|
break;
|
}
|
}
|
|
if (end) {
|
length = content.length();
|
}
|
|
String introduce = content.substring(0, length);
|
System.out.println(introduce);
|
if (verify(introduce)) {
|
if (emoji >= 4) {
|
introduce = introduce.replace(",", "\n"); // 需要换行
|
} else {
|
emoji++;
|
introduce = introduce.replace(",", DaTaoKeUtil.getRandomCommonEmoji() + "\n"); // 需要换行
|
}
|
}
|
|
// 随机替换emoji
|
if (emoji <= 4 && Math.random() > 0.5) {
|
introduce = introduce.replace(",", DaTaoKeUtil.getRandomCommonEmoji());
|
emoji++;
|
}
|
newDesc += introduce;
|
content = content.substring(length);
|
}
|
return newDesc;
|
}
|
|
private boolean verify(String content) {
|
// 18个字符内(包含标点也算一个字符)有多个逗号,则不换行
|
char d = ',';
|
int count = 0;
|
char chs[] = content.toCharArray();// 转换成char数组
|
for (int i = 0; i < chs.length; i++) {
|
if (d == chs[i]) {
|
count++;
|
}
|
}
|
if (count > 1) {
|
return false;
|
}
|
|
// 书名号,大括号,小括号里面的内容不换行
|
if (content.contains("[") && content.contains("]")) {
|
return false;
|
} else if (content.contains("【") && content.contains("】")) {
|
return false;
|
} else if (content.contains("{") && content.contains("}")) {
|
return false;
|
} else if (content.contains("(") && content.contains(")")) {
|
return false;
|
}
|
|
int index = content.lastIndexOf(",");
|
// (除开逗号以外的符号)感叹号/句号/问号前面有逗号,不换行
|
if (content.contains("!") && index < content.lastIndexOf("!")) {
|
return false;
|
}
|
|
if (content.contains("!") && index < content.lastIndexOf("!")) {
|
return false;
|
}
|
|
if (content.contains("。") && index < content.lastIndexOf("。")) {
|
return false;
|
}
|
|
if (content.contains("?") && index < content.lastIndexOf("?")) {
|
return false;
|
}
|
|
if (content.contains("?") && index < content.lastIndexOf("?")) {
|
return false;
|
}
|
|
if (content.contains(":")) {
|
return false;
|
}
|
return true;
|
}
|
|
@Override
|
public void updateTaoBaoGoods(TaoBaoGoodsBrief goods) {
|
try {
|
if (goods == null) {
|
return;
|
}
|
List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_TAOBAO,
|
goods.getAuctionId());
|
if (queryExist == null || queryExist.size() == 0) {
|
return;
|
}
|
|
ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate("android", "55");
|
paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
|
GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
|
updateGoods(queryExist, goodsNew);
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
@Override
|
public void updateJDGoods(JDGoods jdGoods) {
|
if (jdGoods == null) {
|
return;
|
}
|
List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_JD, jdGoods.getSkuId());
|
if (queryExist == null || queryExist.size() == 0) {
|
return;
|
}
|
|
ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate("android", "55");
|
paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
|
GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertJDGoods(jdGoods, paramsDTO);
|
|
updateGoods(queryExist, goodsNew);
|
}
|
|
@Override
|
public void updatePDDGoods(PDDGoodsDetail pddGoods) {
|
if (pddGoods == null) {
|
return;
|
}
|
List<GoodsEvaluate> queryExist = goodsEvaluateDao.queryExist(Constant.SOURCE_TYPE_PDD, pddGoods.getGoodsId());
|
if (queryExist == null || queryExist.size() == 0) {
|
return;
|
}
|
|
ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate("android", "55");
|
paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
|
GoodsDetailVO goodsNew = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
|
updateGoods(queryExist, goodsNew);
|
}
|
|
private void updateGoods(List<GoodsEvaluate> listExist, GoodsDetailVO goodsNew) {
|
long goodsId = goodsNew.getGoodsId();
|
int goodsType = goodsNew.getGoodsType();
|
for (GoodsEvaluate goodsEvaluate : listExist) {
|
GoodsDetailVO goodsDetailVO = goodsEvaluate.getGoods();
|
if (goodsDetailVO != null && goodsDetailVO.getGoodsId() != null && goodsDetailVO.getGoodsId() == goodsId
|
&& goodsDetailVO.getGoodsType() == goodsType) {
|
goodsEvaluate.setGoods(goodsNew);
|
}
|
|
// 更新商品信息
|
List<ImgInfo> imgList = goodsEvaluate.getImgList();
|
if (imgList == null || imgList.size() == 0) {
|
continue;
|
}
|
|
for (ImgInfo imgInfo : imgList) {
|
SimpleGoods simpleGoods = imgInfo.getGoods();
|
if (simpleGoods == null || simpleGoods.getGoodsId() != goodsId
|
|| goodsType != simpleGoods.getGoodsType()) {
|
continue;
|
}
|
|
simpleGoods.setState(0);
|
simpleGoods.setPrice(goodsNew.getCouponPrice());
|
CouponInfoVO couponInfo = goodsNew.getCouponInfo();
|
if (couponInfo == null) {
|
simpleGoods.setPrice(goodsNew.getZkPrice());
|
} else {
|
simpleGoods.setPrice(goodsNew.getCouponPrice());
|
simpleGoods.setAmount(couponInfo.getAmount());
|
}
|
|
imgInfo.setGoods(simpleGoods);
|
imgInfo.setGoodsVO(goodsNew);
|
}
|
|
goodsEvaluate.setImgList(imgList);
|
goodsEvaluate.setUpdateTime(new Date());
|
goodsEvaluateDao.save(goodsEvaluate);
|
}
|
}
|
|
private void removeOverdue() {
|
List<GoodsEvaluate> list = goodsEvaluateDao.queryOverdue();
|
if (list == null || list.size() == 0) {
|
return;
|
}
|
long nm = 1000 * 60;// 一分钟的毫秒数
|
long nh = 1000 * 60 * 60;// 一小时的毫秒数
|
long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
|
|
long time = java.lang.System.currentTimeMillis();
|
for (GoodsEvaluate goodsEvaluate : list) {
|
long diff = time - goodsEvaluate.getEndTime().getTime();
|
long min = diff % nd % nh / nm;
|
|
// 过期超过10分钟就删除
|
if (min > 10) {
|
goodsEvaluateDao.remove(goodsEvaluate);
|
}
|
}
|
}
|
}
|