package com.yeshi.fanli.controller.client.v2;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.PrintWriter;
|
import java.lang.reflect.Type;
|
import java.math.BigDecimal;
|
import java.net.MalformedURLException;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.UUID;
|
|
import javax.annotation.Resource;
|
|
import org.apache.commons.beanutils.PropertyUtils;
|
import org.springframework.core.task.TaskExecutor;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.yeshi.utils.HttpUtil;
|
import org.yeshi.utils.JsonUtil;
|
import org.yeshi.utils.QRCodeUtil;
|
import org.yeshi.utils.entity.FileUploadResult;
|
import org.yeshi.utils.tencentcloud.COSManager;
|
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.JsonElement;
|
import com.google.gson.JsonPrimitive;
|
import com.google.gson.JsonSerializationContext;
|
import com.google.gson.JsonSerializer;
|
import com.yeshi.fanli.dto.jd.JDCouponInfo;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
|
import com.yeshi.fanli.entity.bus.homemodule.CommonShareInfo;
|
import com.yeshi.fanli.entity.bus.homemodule.CommonShareInfo.CommonShareInfoEnum;
|
import com.yeshi.fanli.entity.bus.homemodule.Special;
|
import com.yeshi.fanli.entity.bus.homemodule.SpecialLabel;
|
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
|
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.common.JumpDetailV2;
|
import com.yeshi.fanli.entity.dynamic.CommentInfo;
|
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.ImgInfo;
|
import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum;
|
import com.yeshi.fanli.entity.jd.JDGoods;
|
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
|
import com.yeshi.fanli.exception.goods.ConvertLinkExceptionException;
|
import com.yeshi.fanli.exception.share.ShareGoodsException;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.count.DailyCountMomentsService;
|
import com.yeshi.fanli.service.inter.dynamic.ArticleOfficialService;
|
import com.yeshi.fanli.service.inter.dynamic.DynamicInfoService;
|
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
|
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
|
import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
|
import com.yeshi.fanli.service.inter.homemodule.CommonShareInfoService;
|
import com.yeshi.fanli.service.inter.homemodule.SpecialService;
|
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
|
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
|
import com.yeshi.fanli.service.inter.user.QrCodeService;
|
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.service.inter.user.cloud.UserCloudService;
|
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
|
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.ImageUtil;
|
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.TimeUtil;
|
import com.yeshi.fanli.util.VersionUtil;
|
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
|
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.pinduoduo.PinDuoDuoUtil;
|
import com.yeshi.fanli.util.taobao.DaTaoKeUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.vo.dynamic.ArticleVO;
|
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
|
import com.yeshi.fanli.vo.homemodule.BannerVO;
|
import com.yeshi.fanli.vo.homemodule.SpecialVO;
|
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
|
|
import net.sf.json.JSONArray;
|
import net.sf.json.JSONObject;
|
|
/**
|
* 动态
|
*
|
* @author Administrator
|
*
|
*/
|
@Controller
|
@RequestMapping("api/v2/dynamic")
|
public class DynamicControllerV2 {
|
|
@Resource
|
private HongBaoManageService hongBaoManageService;
|
|
@Resource
|
private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
|
|
@Resource
|
private JumpDetailV2Service jumpDetailV2Service;
|
|
@Resource
|
private DynamicInfoService dynamicInfoService;
|
|
@Resource
|
private SpecialService specialService;
|
|
@Resource
|
private ArticleOfficialService articleOfficialService;
|
|
@Resource
|
private SwiperPictureService swiperPictureService;
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private GoodsEvaluateService goodsEvaluateService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
@Resource
|
private UserInfoExtraService userInfoExtraService;
|
|
@Resource
|
private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
|
|
@Resource
|
private JDGoodsCacheUtil jdGoodsCacheUtil;
|
|
@Resource
|
private QrCodeService qrCodeService;
|
|
@Resource
|
private ConvertLinkManager convertLinkManager;
|
|
@Resource
|
private ShareGoodsService shareGoodsService;
|
|
@Resource
|
private DailyCountMomentsService dailyCountMomentsService;
|
|
@Resource
|
private CommonShareInfoService commonShareInfoService;
|
|
@Resource
|
private UserCloudService userCloudService;
|
|
@Resource(name = "taskExecutor")
|
private TaskExecutor executor;
|
|
private final static long TYPE_REXIAO = 1;// 热销
|
private final static long TYPE_TUIJIAN = 2;// 推荐
|
private final static long TYPE_HAODIAN = 3;// 好店
|
private final static long TYPE_YAOQING = 4;// 邀请
|
private final static long TYPE_HUODONG = 5;// 活动
|
private final static long TYPE_XUEYUAN = 6;// 学院
|
private final static long TYPE_FAQUAN = 7;// 发圈
|
private final static long TYPE_SUCAI = 8;// 素材
|
|
private static Map<Long, GoodsClass> classMap = null;
|
|
private Map<Long, GoodsClass> getAllDynamicClass() {
|
if (classMap != null && classMap.size() > 0)
|
return classMap;
|
classMap = new HashMap<Long, GoodsClass>();
|
List<GoodsClass> listSub = new ArrayList<GoodsClass>();
|
listSub.add(new GoodsClass(0L, "今日单品"));
|
listSub.addAll(DaTaoKeUtil.goodsClasses);
|
|
GoodsClass menu = new GoodsClass(TYPE_REXIAO, "热销");
|
menu.setListSub(listSub);
|
classMap.put(TYPE_REXIAO, menu);
|
|
menu = new GoodsClass(TYPE_TUIJIAN, "推荐");
|
menu.setListSub(new ArrayList<GoodsClass>());
|
classMap.put(TYPE_TUIJIAN, menu);
|
|
menu = new GoodsClass(TYPE_HAODIAN, "好店");
|
menu.setListSub(new ArrayList<GoodsClass>());
|
classMap.put(TYPE_HAODIAN, menu);
|
|
menu = new GoodsClass(TYPE_YAOQING, "邀请");
|
menu.setListSub(new ArrayList<GoodsClass>());
|
classMap.put(TYPE_YAOQING, menu);
|
|
menu = new GoodsClass(TYPE_HUODONG, "活动");
|
List<GoodsClass> sub5 = new ArrayList<GoodsClass>();
|
sub5.add(new GoodsClass(0L, "全部"));
|
sub5.add(new GoodsClass(1L, "淘宝"));
|
sub5.add(new GoodsClass(2L, "京东"));
|
sub5.add(new GoodsClass(3L, "拼多多"));
|
menu.setListSub(sub5);
|
classMap.put(TYPE_HUODONG, menu);
|
|
menu = new GoodsClass(TYPE_XUEYUAN, "学院");
|
menu.setListSub(new ArrayList<GoodsClass>());
|
classMap.put(TYPE_XUEYUAN, menu);
|
|
menu = new GoodsClass(TYPE_FAQUAN, "发圈");
|
menu.setListSub(new ArrayList<GoodsClass>());
|
classMap.put(TYPE_FAQUAN, menu);
|
|
menu = new GoodsClass(TYPE_SUCAI, "素材");
|
menu.setListSub(new ArrayList<GoodsClass>());
|
classMap.put(TYPE_SUCAI, menu);
|
return classMap;
|
}
|
|
/**
|
* 查询顶部分类
|
*
|
* @param acceptData
|
* @param page
|
* @param cid
|
* @param out
|
*/
|
@RequestMapping(value = "getClass", method = RequestMethod.POST)
|
public void getClass(AcceptData acceptData, Long cid, PrintWriter out) {
|
// ios 只返回子集分类
|
if (cid != null) {
|
Map<Long, GoodsClass> map = getAllDynamicClass();
|
JSONObject data = new JSONObject();
|
data.put("list", JsonUtil.getApiCommonGson().toJson(map.get(cid).getListSub()));
|
out.print(JsonUtil.loadTrueResult(data));
|
return;
|
}
|
|
// Android 返回分类以及顶部数据
|
List<GoodsClass> listSub = new ArrayList<GoodsClass>();
|
listSub.add(new GoodsClass(0L, "今日单品"));
|
listSub.addAll(DaTaoKeUtil.goodsClasses);
|
|
GoodsClass menu1 = new GoodsClass(1L, "热销");
|
menu1.setListSub(listSub);
|
|
GoodsClass menu2 = new GoodsClass(2L, "推荐");
|
menu2.setListSub(new ArrayList<GoodsClass>());
|
|
GoodsClass menu3 = new GoodsClass(3L, "好店");
|
menu3.setListSub(new ArrayList<GoodsClass>());
|
|
GoodsClass menu4 = new GoodsClass(4L, "邀请");
|
menu4.setListSub(new ArrayList<GoodsClass>());
|
|
GoodsClass menu5 = new GoodsClass(5L, "活动");
|
List<GoodsClass> sub5 = new ArrayList<GoodsClass>();
|
sub5.add(new GoodsClass(0L, "全部"));
|
sub5.add(new GoodsClass(1L, "淘宝"));
|
sub5.add(new GoodsClass(2L, "京东"));
|
sub5.add(new GoodsClass(3L, "拼多多"));
|
menu5.setListSub(sub5);
|
|
GoodsClass menu6 = new GoodsClass(6L, "学院");
|
menu6.setListSub(new ArrayList<GoodsClass>());
|
|
List<GoodsClass> list = new ArrayList<GoodsClass>();
|
|
Map<Long, GoodsClass> map = getAllDynamicClass();
|
|
if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
|
// 2.0.7返回发圈+活动+学院+素材
|
list.add(map.get(TYPE_FAQUAN));
|
list.add(map.get(TYPE_HUODONG));
|
// list.add(map.get(TYPE_XUEYUAN));
|
list.add(map.get(TYPE_SUCAI));
|
} else if (VersionUtil.greaterThan_2_0_6(acceptData.getPlatform(), acceptData.getVersion())) {
|
// 2.0.6返回热销+活动+推荐+学院+邀请
|
list.add(map.get(TYPE_REXIAO));
|
list.add(map.get(TYPE_HUODONG));
|
list.add(map.get(TYPE_TUIJIAN));
|
// list.add(map.get(TYPE_XUEYUAN));
|
list.add(map.get(TYPE_YAOQING));
|
} else if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
|
// 2.0.5返回热销+活动+推荐+邀请
|
list.add(map.get(TYPE_REXIAO));
|
list.add(map.get(TYPE_HUODONG));
|
list.add(map.get(TYPE_TUIJIAN));
|
list.add(map.get(TYPE_YAOQING));
|
} else {
|
// 2.0.5以前的版本返回热销+活动+推荐+好店+邀请
|
list.add(map.get(TYPE_REXIAO));
|
list.add(map.get(TYPE_HUODONG));
|
list.add(map.get(TYPE_TUIJIAN));
|
list.add(map.get(TYPE_HAODIAN));
|
list.add(map.get(TYPE_YAOQING));
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("list", JsonUtil.getApiCommonGson().toJson(list));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 动态商品列表
|
*
|
* @param acceptData
|
* @param page
|
* @param cid
|
* @param subId
|
* @param out
|
*/
|
@RequestMapping(value = "getList", method = RequestMethod.POST)
|
public void getList(AcceptData acceptData, Integer page, Long cid, Long subId, PrintWriter out) {
|
if (cid == null) {
|
out.print(JsonUtil.loadFalseResult("主分类id不能为空"));
|
return;
|
}
|
|
if (cid != null) {
|
if (cid == 5) { // 活动主题
|
getSpecialList(acceptData, page, subId, out);
|
return;
|
} else if (cid == 6) { // 学院
|
getArticleList(acceptData, page, null, false, out);
|
return;
|
}
|
}
|
|
long count = 0;
|
|
int platform = 1;
|
if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
|
platform = 2;
|
}
|
|
int version = Integer.parseInt(acceptData.getVersion());
|
List<DynamicInfo> list = dynamicInfoService.queryV2(platform, version, (page - 1) * Constant.PAGE_SIZE,
|
Constant.PAGE_SIZE, cid, subId);
|
if (list == null) {
|
list = new ArrayList<DynamicInfo>();
|
} else {
|
count = dynamicInfoService.count(cid, subId);
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("count", count);
|
data.put("list", getGson().toJson(list));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 活动列表
|
*
|
* @param acceptData
|
* @param out
|
*/
|
private void getSpecialList(AcceptData acceptData, Integer page, Long subId, PrintWriter out) {
|
if (subId == null) {
|
out.print(JsonUtil.loadFalseResult("分类id不能为空"));
|
return;
|
}
|
|
// 平台区分
|
int platformCode = Constant.getPlatformCode(acceptData.getPlatform());
|
List<String> listKey = new ArrayList<String>();
|
|
if (subId == 1) { // 淘宝
|
listKey.add("special_channel_tb");
|
} else if (subId == 2) { // 京东
|
listKey.add("special_channel_jd");
|
} else if (subId == 3) { // 拼多多
|
listKey.add("special_channel_pdd");
|
} else { // 全部
|
listKey.add("special_channel_tb");
|
listKey.add("special_channel_jd");
|
listKey.add("special_channel_pdd");
|
}
|
|
List<SpecialVO> list = specialService.listByPlaceKeyHasLabel((page - 1) * Constant.PAGE_SIZE,
|
Constant.PAGE_SIZE, listKey, platformCode, Integer.parseInt(acceptData.getVersion()));
|
|
long time = System.currentTimeMillis();
|
|
// 删除尚未启用的过期的
|
for (int i = 0; i < list.size(); i++) {
|
Special special = list.get(i);
|
if (special.getState() == 1L) {
|
continue;
|
}
|
|
// 是否活动已过期
|
if (special.getStartTime() != null && special.getEndTime() != null) {
|
if (time < special.getStartTime().getTime() || time > special.getEndTime().getTime()) {
|
continue;
|
} else {
|
special.setTimeTask(true);
|
special.setCountDownTime((special.getEndTime().getTime() - time) / 1000);
|
}
|
}
|
|
// 设置标签
|
List<SpecialLabel> listLabels = special.getListLabels();
|
if (listLabels != null && !listLabels.isEmpty()) {
|
List<ClientTextStyleVO> labels = new ArrayList<>();
|
for (SpecialLabel specialLabel : listLabels) {
|
labels.add(new ClientTextStyleVO(specialLabel.getName(), specialLabel.getBgColor()));
|
}
|
special.setLabels(labels);
|
}
|
|
}
|
|
long count = specialService.countByPlaceKeyList(listKey, platformCode,
|
Integer.parseInt(acceptData.getVersion()));
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
JSONObject data = new JSONObject();
|
data.put("count", count);
|
data.put("list", gson.toJson(list));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 时间处理
|
*
|
* @return
|
*/
|
private Gson getGson() {
|
GsonBuilder gb = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder());
|
gb.excludeFieldsWithoutExposeAnnotation();
|
gb.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
|
@Override
|
public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
|
String desc = "";
|
if (value != null) {
|
// 判断是否是同一天
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(value);
|
int y1 = calendar.get(Calendar.YEAR);// 获取年份
|
int d1 = calendar.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
|
|
Date nowDate = new Date();
|
Calendar calendar2 = Calendar.getInstance();
|
calendar2.setTime(nowDate);
|
int y2 = calendar2.get(Calendar.YEAR);// 获取年份
|
int d2 = calendar2.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
|
|
long old = value.getTime();
|
long now = nowDate.getTime();
|
if (y1 == y2) {
|
if (d1 == d2) {
|
long cha = now - old;
|
if (cha < 1000 * 60 * 2L) {
|
desc = "刚刚";
|
} else if (cha < 1000 * 60 * 60L) {
|
desc = (cha / (1000 * 60)) + "分钟前";
|
} else {
|
desc = (cha / (1000 * 60 * 60)) + "小时前";
|
}
|
} else if (d2 - d1 == 1) {
|
desc = "昨天";
|
} else {
|
desc = (d2 - d1) + "天前";
|
}
|
} else {
|
int timeDistance = 0;
|
for (int i = y1; i < y2; i++) {
|
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
|
timeDistance += 366; // 闰年
|
} else {
|
timeDistance += 365; // 不是闰年
|
}
|
}
|
desc = timeDistance + (d2 - d1) + "天前";
|
}
|
|
return new JsonPrimitive(desc);
|
}
|
|
return new JsonPrimitive("");
|
}
|
});
|
|
Gson gson = gb.create();
|
return gson;
|
}
|
|
/**
|
* 活动列表
|
*
|
* @param acceptData
|
* @param out
|
*/
|
private void getArticleList(AcceptData acceptData, Integer page, String key, boolean search, PrintWriter out) {
|
List<ArticleVO> list = articleOfficialService.queryValid((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE,
|
key);
|
if (list != null) {
|
for (ArticleVO article : list) {
|
String tags = article.getTags();
|
if (StringUtil.isNullOrEmpty(tags)) {
|
continue;
|
}
|
|
String[] arrayTags = tags.split("\\s+");
|
if (arrayTags == null || arrayTags.length == 0) {
|
continue;
|
}
|
|
String[] arrayTagsColour = null;
|
String tagsColour = article.getTagsColour();
|
if (!StringUtil.isNullOrEmpty(tagsColour)) {
|
arrayTagsColour = tagsColour.split("\\s+");
|
}
|
|
String color = "#FE0014";
|
List<ClientTextStyleVO> labels = 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);
|
labels.add(styleVO);
|
}
|
article.setLabels(labels);
|
}
|
}
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
|
JSONObject data = new JSONObject();
|
if (page == 1 && !search) {
|
List<BannerVO> banners = swiperPictureService.getByBannerCardAndVersion("article_banners",
|
acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
|
if (banners == null)
|
banners = new ArrayList<>();
|
data.put("banners", gson.toJson(banners));
|
|
List<SpecialVO> listSpecial = specialService.listByVersion(0, Integer.MAX_VALUE, "article_specials",
|
acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
|
if (listSpecial == null)
|
listSpecial = new ArrayList<>();
|
|
for (SpecialVO special : listSpecial) {
|
boolean needLogin = special.isJumpLogin();
|
JumpDetailV2 jumpDetail = special.getJumpDetail();
|
if (jumpDetail != null) {
|
jumpDetail.setNeedLogin(needLogin);
|
special.setJumpDetail(jumpDetail);
|
}
|
}
|
data.put("specials", gson.toJson(listSpecial));
|
}
|
data.put("count", articleOfficialService.countValid(key));
|
data.put("list", gson.toJson(list));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 文章搜索
|
*
|
* @param acceptData
|
* @param page
|
* @param key
|
* @param out
|
*/
|
@RequestMapping(value = "readArticle", method = RequestMethod.POST)
|
public void readArticle(AcceptData acceptData, String id, PrintWriter out) {
|
if (StringUtil.isNullOrEmpty(id)) {
|
out.print(JsonUtil.loadFalseResult("id不能为空"));
|
return;
|
}
|
articleOfficialService.updateReadNum(id);
|
out.print(JsonUtil.loadTrueResult("操作成功"));
|
}
|
|
/**
|
* 文章搜索
|
*
|
* @param acceptData
|
* @param page
|
* @param key
|
* @param out
|
*/
|
@RequestMapping(value = "searchArticle", method = RequestMethod.POST)
|
public void searchArticle(AcceptData acceptData, Integer page, String key, PrintWriter out) {
|
getArticleList(acceptData, page, key, true, out);
|
}
|
|
/**
|
* 文章搜索
|
*
|
* @param acceptData
|
* @param page
|
* @param key
|
* @param out
|
*/
|
@RequestMapping(value = "getArticleHot", method = RequestMethod.POST)
|
public void getArticleHot(AcceptData acceptData, PrintWriter out) {
|
JSONObject data = new JSONObject();
|
data.put("words", configService.get(ConfigKeyEnum.articleHotWords.getKey()));
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 2.0.7版本后调用 动态列表(适用于发圈与素材)
|
*
|
* @param acceptData
|
* @param page
|
* @param cid
|
* @param subId
|
* @param out
|
*/
|
@RequestMapping(value = "getDynamicList", method = RequestMethod.POST)
|
public void getDynamicListNew(AcceptData acceptData, Integer page, Long cid, String subId, Long uid, PrintWriter out) {
|
try {
|
int type = 1;
|
if (cid == TYPE_FAQUAN) {
|
type = 1;
|
} else if (cid == TYPE_SUCAI) {
|
type = 2;
|
}
|
List<GoodsEvaluate> listNew = new ArrayList<GoodsEvaluate>();
|
|
List<GoodsEvaluate> list = goodsEvaluateService.queryMaterialsCache((page - 1) * Constant.PAGE_SIZE,
|
Constant.PAGE_SIZE, type);
|
|
if (!VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
|
listNew.addAll(list);
|
} else if (list.size() > 0) { // 活动图片不允许跳转
|
|
// 云发单是否开启
|
boolean cloudOpen = configService.isRobotCloudOpen();
|
if (!cloudOpen && uid != null) {
|
List<String> testUsers = configService.getTestUsers();
|
if (testUsers != null && testUsers.contains(uid+"")) {
|
cloudOpen = true;
|
}
|
}
|
|
for (GoodsEvaluate goodsEvaluate : list) {
|
GoodsEvaluate evaluateNew = new GoodsEvaluate();
|
try {
|
PropertyUtils.copyProperties(evaluateNew, goodsEvaluate);
|
} catch (Exception e) {
|
e.printStackTrace();
|
continue;
|
}
|
|
EvaluateEnum evaluateEnum = evaluateNew.getType();
|
// 单品 活动可以一键云发单
|
if (evaluateEnum == EvaluateEnum.activity || evaluateEnum == EvaluateEnum.single) {
|
evaluateNew.setCloud(cloudOpen);
|
}
|
|
if (evaluateEnum != EvaluateEnum.activity) {
|
listNew.add(evaluateNew);
|
continue;
|
}
|
|
|
// 跳转过渡页
|
// String jumpLink =
|
// configService.get(ConfigKeyEnum.activityDetailLink.getKey())
|
// + "?type=%s&id=%s";
|
// jumpLink = String.format(jumpLink, "circle",
|
// evaluateNew.getId());
|
// evaluateNew.setJumpLink(jumpLink);
|
|
// 图片数量
|
if (evaluateNew.getImgList() != null && evaluateNew.getImgList().size() > 0) {
|
int size = evaluateNew.getImgList().size();
|
List<ImgInfo> listInfoNew = new ArrayList<ImgInfo>();
|
|
for (ImgInfo imgInfo : goodsEvaluate.getImgList()) {
|
if (imgInfo.getType() != ImgEnum.activity) {
|
listInfoNew.add(imgInfo);
|
continue;
|
}
|
ImgInfo infoNew = new ImgInfo();
|
try {
|
PropertyUtils.copyProperties(infoNew, imgInfo);
|
} catch (Exception e) {
|
e.printStackTrace();
|
continue;
|
}
|
infoNew.setType(ImgEnum.img);
|
// 图片大于一张时 显示九宫格图
|
if (size > 1) {
|
infoNew.setW(1);
|
infoNew.setH(1);
|
}
|
listInfoNew.add(infoNew);
|
}
|
evaluateNew.setImgList(listInfoNew);
|
}
|
listNew.add(evaluateNew);
|
}
|
}
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
gsonBuilder.registerTypeAdapter(ImgEnum.class, new JsonSerializer<ImgEnum>() {
|
@Override
|
public JsonElement serialize(ImgEnum value, Type theType, JsonSerializationContext context) {
|
if (value == null) {
|
return new JsonPrimitive("");
|
} else {
|
return new JsonPrimitive(value.getVlaue());
|
}
|
}
|
}).registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
|
@Override
|
public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
|
if (value == null) {
|
return new JsonPrimitive("");
|
} else {
|
// 保留2位小数
|
return new JsonPrimitive(MoneyBigDecimalUtil.getWithNoZera(value) + "");
|
}
|
}
|
}).registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
|
@Override
|
public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
|
String desc = "";
|
if (value != null) {
|
// 判断是否是同一天
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(value);
|
int y1 = calendar.get(Calendar.YEAR);// 获取年份
|
int d1 = calendar.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
|
|
Date nowDate = new Date();
|
Calendar calendar2 = Calendar.getInstance();
|
calendar2.setTime(nowDate);
|
int y2 = calendar2.get(Calendar.YEAR);// 获取年份
|
int d2 = calendar2.get(Calendar.DAY_OF_YEAR);// 获取年中第几天
|
|
long old = value.getTime();
|
long now = nowDate.getTime();
|
if (y1 == y2) {
|
if (d1 == d2) {
|
long cha = now - old;
|
if (cha < 1000 * 60 * 2L) {
|
desc = "刚刚";
|
} else if (cha < 1000 * 60 * 60L) {
|
desc = (cha / (1000 * 60)) + "分钟前";
|
} else {
|
desc = (cha / (1000 * 60 * 60)) + "小时前";
|
}
|
} else if (d2 - d1 == 1) {
|
desc = "昨天";
|
} else {
|
desc = (d2 - d1) + "天前";
|
}
|
} else {
|
int timeDistance = 0;
|
for (int i = y1; i < y2; i++) {
|
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
|
timeDistance += 366; // 闰年
|
} else {
|
timeDistance += 365; // 不是闰年
|
}
|
}
|
desc = timeDistance + (d2 - d1) + "天前";
|
}
|
|
return new JsonPrimitive(desc);
|
}
|
|
return new JsonPrimitive("");
|
}
|
});
|
Gson gson = gsonBuilder.create();
|
long count = goodsEvaluateService.countValidMaterials(type);
|
|
JSONArray jsonArray = new JSONArray();
|
|
String listStr = gson.toJson(listNew);
|
JSONArray array = JSONArray.fromObject(listStr);
|
for (int i = 0; i < array.size(); i++) {
|
Object object = array.get(i);
|
JSONObject json = JSONObject.fromObject(object);
|
Object shareNum = json.get("shareNum");
|
if (shareNum != null) {
|
int num = Integer.parseInt(shareNum.toString());
|
|
if (num >= 100000000) {
|
double sales = num;
|
String salesCountMidea = String.format("%.1f", sales / 100000000);
|
json.put("shareNum", salesCountMidea + "亿");
|
} else if (num >= 10000) {
|
double sales = num;
|
String salesCountMidea = String.format("%.1f", sales / 10000);
|
json.put("shareNum", salesCountMidea + "万");
|
}
|
}
|
jsonArray.add(json);
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("count", count);
|
data.put("list", jsonArray);
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (Exception e) {
|
e.printStackTrace();
|
out.print(JsonUtil.loadFalseResult(1, "查询信息失败"));
|
LogHelper.errorDetailInfo(e);
|
}
|
|
}
|
|
/**
|
*
|
* @param acceptData
|
* @param uid
|
* @param id
|
* @param type
|
* 1-放大 2-保存 3-分享
|
* @param goodsId
|
* @param goodsType
|
* @param out
|
*/
|
@RequestMapping(value = "evaluateShare", method = RequestMethod.POST)
|
public void evaluateShare(AcceptData acceptData, Long uid, String id, Integer type, String goodsId,
|
Integer goodsType, PrintWriter out) {
|
try {
|
if (uid == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
if (StringUtil.isNullOrEmpty(id) || type == null) {
|
out.print(JsonUtil.loadFalseResult("传递参数不能为空"));
|
return;
|
}
|
|
if (type == 1 && (StringUtil.isNullOrEmpty(goodsId) || goodsType == null)) {
|
out.print(JsonUtil.loadFalseResult("商品参数不能为空"));
|
return;
|
}
|
|
GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
|
if (goodsEvaluate == null) {
|
out.print(JsonUtil.loadFalseResult("该内容已不存在"));
|
return;
|
}
|
|
UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
|
if (user == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
|
out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
|
return;
|
}
|
|
UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
|
String relationId = null;
|
if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
|
&& taoBaoInfo.getRelationValid() == true)
|
relationId = taoBaoInfo.getRelationId();
|
|
if (StringUtil.isNullOrEmpty(relationId)) {
|
out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
|
return;
|
}
|
|
String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
|
if (StringUtil.isNullOrEmpty(inviteCode)) {
|
out.print(JsonUtil.loadFalseResult(1, "邀请码未激活"));
|
return;
|
}
|
|
List<ImgInfo> imgs = goodsEvaluate.getImgList();
|
if (imgs == null) {
|
out.print(JsonUtil.loadFalseResult("该图片内容已不存在"));
|
return;
|
}
|
|
List<String> list = new ArrayList<>();
|
Integer dynamicType = goodsEvaluate.getDynamicType();
|
if (dynamicType == null || dynamicType.intValue() == 2) {
|
for (ImgInfo imgInfo : imgs) {
|
if (imgInfo.getType() == ImgEnum.goods || imgInfo.getType() == ImgEnum.video)
|
continue;
|
if (imgInfo.getType() == ImgEnum.img)
|
list.add(StringUtil.isNullOrEmpty(imgInfo.getUrlHD()) ? imgInfo.getUrl() : imgInfo.getUrlHD());
|
else if (imgInfo.getType() == ImgEnum.activity)
|
if (!StringUtil.isNullOrEmpty(imgInfo.getActivityPic())) {
|
list.add(imgInfo.getActivityPic());
|
}
|
}
|
} else {
|
// 单品
|
if (goodsEvaluate.getType() == EvaluateEnum.single) {
|
for (ImgInfo imgInfo : imgs) {
|
if (imgInfo.getType() == ImgEnum.video)
|
continue;
|
|
GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
|
if (goodsVO == null) {
|
list.add(StringUtil.isNullOrEmpty(imgInfo.getUrlHD()) ? imgInfo.getUrl()
|
: imgInfo.getUrlHD());
|
continue;
|
}
|
|
String jumpLink = getJumpLink(goodsVO, user, relationId, inviteCode, imgInfo.getUrl());
|
if (!StringUtil.isNullOrEmpty(jumpLink)) {
|
list.add(jumpLink);
|
}
|
}
|
|
} else if (goodsEvaluate.getType() == EvaluateEnum.multiple) {
|
if (type == 1) {
|
for (ImgInfo imgInfo : imgs) {
|
if (imgInfo.getGoodsVO() != null)
|
if (imgInfo.getGoodsVO().getGoodsId().equalsIgnoreCase(goodsId)
|
&& imgInfo.getGoodsVO().getGoodsType() == goodsType.intValue()) {
|
String jumpLink = getJumpLink(imgInfo.getGoodsVO(), user, relationId, inviteCode,
|
imgInfo.getUrl());
|
if (!StringUtil.isNullOrEmpty(jumpLink)) {
|
list.add(jumpLink);
|
}
|
break;
|
}
|
}
|
} else if (type == 2 || type == 3) {
|
for (ImgInfo imgInfo : imgs) {
|
if (imgInfo.getGoodsVO() != null) {
|
String jumpLink = getJumpLink(imgInfo.getGoodsVO(), user, relationId, inviteCode,
|
imgInfo.getUrl());
|
if (!StringUtil.isNullOrEmpty(jumpLink)) {
|
list.add(jumpLink);
|
}
|
}
|
}
|
}
|
|
} else if (goodsEvaluate.getType() == EvaluateEnum.activity) {
|
for (ImgInfo imgInfo : imgs) {
|
if (imgInfo.getType() == ImgEnum.goods || imgInfo.getType() == ImgEnum.video)
|
continue;
|
if (imgInfo.getType() == ImgEnum.img)
|
list.add(StringUtil.isNullOrEmpty(imgInfo.getUrlHD()) ? imgInfo.getUrl()
|
: imgInfo.getUrlHD());
|
else if (imgInfo.getType() == ImgEnum.activity)
|
if (!StringUtil.isNullOrEmpty(imgInfo.getActivityPic())) {
|
list.add(imgInfo.getActivityPic());
|
} else if (!StringUtil.isNullOrEmpty(imgInfo.getUrl())) {
|
list.add(imgInfo.getUrl());
|
}
|
}
|
}
|
}
|
|
Integer shareCount = goodsEvaluate.getShareNum();
|
if (shareCount == null) {
|
shareCount = 0;
|
}
|
|
if (type == 3) {
|
shareCount++;
|
goodsEvaluateService.addShareNum(id);
|
|
executor.execute(new Runnable() {
|
@Override
|
public void run() { // 添加每日统计
|
dailyCountMomentsService.addShareClick();
|
}
|
});
|
}
|
|
if (list.size() == 0) {
|
out.print(JsonUtil.loadFalseResult("该信息已下架"));
|
return;
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("count", shareCount);
|
data.put("list", list);
|
out.print(JsonUtil.loadTrueResult(data));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult("分享图生成失败"));
|
return;
|
}
|
}
|
|
private String getJumpLink(GoodsDetailVO goodsVO, UserInfo user, String relationId, String inviteCode,
|
String mainPic) {
|
String jumpLink = null;
|
if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
|
TaoBaoLink taoBaoLink = null;
|
try {
|
taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(user.getId(), Long.parseLong(goodsVO.getGoodsId()),
|
relationId);
|
} catch (ShareGoodsException e) {
|
e.printStackTrace();
|
}
|
jumpLink = ShareControllerV2.getERCodeContentNew(
|
configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()), taoBaoLink.getGoods(),
|
TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
|
} else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
|
JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsVO.getGoodsId()));
|
if (jdGoods == null) {
|
return null;
|
}
|
|
String couponUrl = null;
|
JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
|
if (couponInfo != null) {
|
couponUrl = couponInfo.getLink();
|
}
|
String materialId = "https://item.jd.com/" + goodsVO.getGoodsId() + ".html";
|
jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
|
user.getId() + "");
|
} else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
|
jumpLink = PinDuoDuoApiUtil.getPromotionUrl(Long.parseLong(goodsVO.getGoodsId()),
|
PinDuoDuoApiUtil.PID_SHARE + "", user.getId() + "");
|
}
|
|
FileUploadResult uploadResult = qrCodeService.drawDynamicGoodsPoster(jumpLink, user.getPortrait(), inviteCode,
|
mainPic, goodsVO);
|
if (uploadResult != null) {
|
return uploadResult.getUrl();
|
}
|
return null;
|
}
|
|
/**
|
* 评论复制-H5
|
*
|
* @param acceptData
|
* @param id
|
* @param cid
|
* 评论id
|
* @param out
|
*/
|
@RequestMapping(value = "evaluateComment", method = RequestMethod.POST)
|
public void evaluateComment(AcceptData acceptData, Long uid, String id, String cid, PrintWriter out) {
|
if (StringUtil.isNullOrEmpty(id)) {
|
out.print(JsonUtil.loadFalseResult("id不能为空"));
|
return;
|
}
|
|
GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
|
if (goodsEvaluate == null) {
|
out.print(JsonUtil.loadFalseResult("该内容已不存在"));
|
return;
|
}
|
|
UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
|
if (user == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
|
out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
|
return;
|
}
|
|
UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
|
String relationId = null;
|
if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
|
&& taoBaoInfo.getRelationValid() == true)
|
relationId = taoBaoInfo.getRelationId();
|
|
if (StringUtil.isNullOrEmpty(relationId)) {
|
out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
|
return;
|
}
|
|
String text = "";
|
CommentInfo comment = null;
|
List<CommentInfo> comments = goodsEvaluate.getComments();
|
if (comments != null) {
|
for (CommentInfo commentInfo : comments) {
|
if (cid.equals(commentInfo.getId())) {
|
text = commentInfo.getContent();
|
comment = commentInfo;
|
break;
|
}
|
}
|
}
|
|
String newText = text; // 非通用券需要验证
|
if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
|
try {
|
newText = convertLinkManager.convertLinkFromText(text, uid, true);
|
} catch (ConvertLinkExceptionException e) {
|
if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
|
out.print(JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
out.print(JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
}
|
|
// 替换价格
|
if (goodsEvaluate.getType() == EvaluateEnum.single) {
|
GoodsDetailVO goods = goodsEvaluate.getGoods();
|
newText = newText.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "");
|
if (!goods.isHasCoupon()) {
|
newText = newText.replace("领券抢购", "抢购");
|
newText = newText.replace("【券后价】[券后价]元", "");
|
} else {
|
newText = newText.replace("[券后价]", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponPrice()) + "");
|
}
|
newText = newText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("text", newText);
|
out.print(JsonUtil.loadTrueResult(data));
|
|
executor.execute(new Runnable() {
|
@Override
|
public void run() { // 添加每日统计
|
dailyCountMomentsService.addCopyComment();
|
}
|
});
|
}
|
|
/**
|
* 评论复制-专题
|
*
|
* @param acceptData
|
* @param id
|
* @param out
|
*/
|
@RequestMapping(value = "copySpecialComment", method = RequestMethod.POST)
|
public void copySpecialComment(AcceptData acceptData, Long uid, Long id, PrintWriter out) {
|
if (uid == null || id == null) {
|
out.print(JsonUtil.loadFalseResult("参数不能为空"));
|
return;
|
}
|
|
CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(id, CommonShareInfoEnum.special.name());
|
if (shareInfo == null || StringUtil.isNullOrEmpty(shareInfo.getComment())) {
|
out.print(JsonUtil.loadFalseResult("该内容已不存在"));
|
return;
|
}
|
|
UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
|
if (user == null) {
|
out.print(JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
|
out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
|
return;
|
}
|
|
UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
|
String relationId = null;
|
if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
|
&& taoBaoInfo.getRelationValid() == true)
|
relationId = taoBaoInfo.getRelationId();
|
|
if (StringUtil.isNullOrEmpty(relationId)) {
|
out.print(JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
|
return;
|
}
|
|
String text = shareInfo.getComment();
|
String newText = text;
|
if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
|
try {
|
newText = convertLinkManager.convertLinkFromText(text, uid, true);
|
} catch (ConvertLinkExceptionException e) {
|
if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
|
out.print(JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
out.print(JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("text", newText);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
@RequestMapping(value = "getActivityDetail")
|
public void getActivityDetail(String callback, AcceptData acceptData, Long uid, String type, String id,
|
PrintWriter out) {
|
if (uid == null || StringUtil.isNullOrEmpty(id) || StringUtil.isNullOrEmpty(type)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
|
return;
|
}
|
|
String title = "";
|
String comment = "";
|
String params = "";
|
String desc = "";
|
Date startTime = null;
|
Date endTime = null;
|
JumpDetailV2 jumpDetail = null;
|
List<String> imgs = new ArrayList<>();
|
if ("circle".equalsIgnoreCase(type)) { // 发圈活动
|
GoodsEvaluate evaluate = goodsEvaluateService.getById(id);
|
if (evaluate == null) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该活动已下架"));
|
return;
|
}
|
|
title = evaluate.getTitle();
|
List<CommentInfo> comments = evaluate.getComments();
|
if (comments != null && comments.size() > 0) {
|
comment = comments.get(0).getContent();
|
}
|
|
String jumpLink = null;
|
if (!StringUtil.isNullOrEmpty(evaluate.getJumpLink())) {
|
jumpLink = evaluate.getJumpLink();
|
}
|
|
List<ImgInfo> imgList = evaluate.getImgList();
|
if (imgList != null && imgList.size() > 0) {
|
for (ImgInfo imgInfo : imgList) {
|
if (!StringUtil.isNullOrEmpty(imgInfo.getUrl())
|
&& (imgInfo.getType() == ImgEnum.img || imgInfo.getType() == ImgEnum.activity)) {
|
imgs.add(imgInfo.getUrl());
|
}
|
|
if (imgInfo.getType() == ImgEnum.img || imgInfo.getType() == ImgEnum.activity) {
|
if (StringUtil.isNullOrEmpty(jumpLink) && !StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
|
jumpLink = imgInfo.getActivityUrl();
|
}
|
}
|
}
|
}
|
|
int platformCode = Constant.getPlatformCode(acceptData.getPlatform());
|
jumpDetail = jumpDetailV2Service.getByTypeCache("web", platformCode,
|
Integer.parseInt(acceptData.getVersion()));
|
JSONObject inner = new JSONObject();
|
inner.put("url", jumpLink);
|
params = inner.toString();
|
} else {
|
long pid = Long.parseLong(id);
|
if (CommonShareInfoEnum.special.name().equalsIgnoreCase(type)) {
|
Special special = specialService.selectByPrimaryKey(pid);
|
if (special == null) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该活动已下架"));
|
return;
|
}
|
|
params = special.getParams();
|
jumpDetail = special.getJumpDetail();
|
if (!StringUtil.isNullOrEmpty(special.getPicture())) {
|
imgs.add(special.getPicture());
|
}
|
|
title = special.getName();
|
|
desc = special.getRemark();
|
startTime = special.getStartTime();
|
endTime = special.getEndTime();
|
} else if (CommonShareInfoEnum.banner.name().equalsIgnoreCase(type)) {
|
SwiperPicture swiper = swiperPictureService.selectByPrimaryKey(pid);
|
if (swiper == null) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该活动已下架"));
|
return;
|
}
|
params = swiper.getParams();
|
jumpDetail = swiper.getJumpDetail();
|
if (!StringUtil.isNullOrEmpty(swiper.getSrc())) {
|
imgs.add(swiper.getSrc());
|
}
|
|
title = swiper.getTitle();
|
desc = swiper.getDesc();
|
startTime = swiper.getStartTime();
|
endTime = swiper.getEndTime();
|
}
|
CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
|
if (shareInfo != null && !StringUtil.isNullOrEmpty(shareInfo.getComment())) {
|
comment = shareInfo.getComment();
|
}
|
}
|
|
if (!StringUtil.isNullOrEmpty(comment)) { // 替换淘宝官方活动
|
List<String> activityIdList = convertLinkManager.getTaoBaoOfficialActivityId(comment);
|
for (String st : activityIdList)
|
comment = comment.replace(st, "");
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("title", title);
|
data.put("desc", desc);
|
data.put("comment", comment);
|
data.put("params", params);
|
data.put("jumpDetail", jumpDetail);
|
data.put("imgs", imgs);
|
if (startTime != null) {
|
data.put("startTime", TimeUtil.getGernalTime(startTime.getTime(), "yyyy.MM.dd"));
|
}
|
|
if (endTime != null) {
|
data.put("endTime", TimeUtil.getGernalTime(endTime.getTime(), "yyyy.MM.dd"));
|
}
|
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 评论复制-专题
|
*
|
* @param acceptData
|
* @param id
|
* @param out
|
*/
|
@RequestMapping(value = "copyShareComment")
|
public void copyShareComment(String callback, AcceptData acceptData, Long uid, String id, String type,
|
PrintWriter out) {
|
if (uid == null || StringUtil.isNullOrEmpty(id) || StringUtil.isNullOrEmpty(type)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
|
return;
|
}
|
|
if ("circle".equalsIgnoreCase(type)) { // 发圈活动
|
copyActivityComment(callback, acceptData, uid, id, out);
|
return;
|
}
|
|
long pid = Long.parseLong(id);
|
CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
|
if (shareInfo == null || StringUtil.isNullOrEmpty(shareInfo.getComment())) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该内容已不存在"));
|
return;
|
}
|
|
UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
|
if (user == null) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
|
JsonUtil.printMode(out, callback,
|
JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
|
return;
|
}
|
|
UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
|
String relationId = null;
|
if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
|
&& taoBaoInfo.getRelationValid() == true)
|
relationId = taoBaoInfo.getRelationId();
|
|
if (StringUtil.isNullOrEmpty(relationId)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
|
return;
|
}
|
|
String text = shareInfo.getComment();
|
String newText = text;
|
if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
|
try {
|
newText = convertLinkManager.convertLinkFromText(text, uid, true);
|
} catch (ConvertLinkExceptionException e) {
|
if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("text", newText);
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 活动分享绘图
|
* @Title: createActivityShareImg
|
* @Description:
|
* @param title
|
* @param desc
|
* @param imgUrl
|
* @param erCodeContent
|
* @return
|
* String 返回类型
|
* @throws
|
*/
|
private String createActivityShareImg(String type, String id, String erCodeContent) {
|
|
String title = "";
|
String desc = "";
|
String img = "";
|
if ("circle".equalsIgnoreCase(type)) {
|
|
} else if ("banner".equalsIgnoreCase(type)) {
|
SwiperPicture picture = swiperPictureService.selectByPrimaryKey(Long.parseLong(id));
|
title = picture.getTitle();
|
desc = picture.getDesc();
|
img = picture.getSrc();
|
} else if ("special".equalsIgnoreCase(type)) {
|
Special special = specialService.selectByPrimaryKey(Long.parseLong(id));
|
title = special.getName();
|
desc = special.getRemark();
|
img = special.getPicture();
|
}
|
|
try {
|
InputStream erCodeInputStream = null;
|
erCodeInputStream = QRCodeUtil.getInstance(250).encode(erCodeContent);
|
int[] size = new int[2];
|
try {
|
size = ImageUtil.getImgWidthAndHeight(img);
|
} catch (MalformedURLException e) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
InputStream resultInputStream = ImageUtil.drawActivityShareImg(HttpUtil.getAsInputStream(img),
|
(float) size[0] / size[1], title, desc, erCodeInputStream);
|
if (resultInputStream != null) {
|
String filePath = FilePathEnum.activityShare.getPath() + UUID.randomUUID().toString().replace("-", "")
|
+ ".png";
|
FileUploadResult result = COSManager.getInstance().uploadFile(resultInputStream, filePath);
|
if (result != null)
|
return result.getUrl();
|
}
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
|
return null;
|
}
|
|
/**
|
* 评论复制-专题
|
*
|
* @param acceptData
|
* @param id
|
* @param out
|
*/
|
@RequestMapping(value = "getActivityShareImg")
|
public void getActivityShareImg(String callback, AcceptData acceptData, Long uid, String id, String type,
|
PrintWriter out) {
|
if (uid == null || StringUtil.isNullOrEmpty(id) || StringUtil.isNullOrEmpty(type)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
|
return;
|
}
|
|
if ("circle".equalsIgnoreCase(type)) { // 发圈活动
|
// copyActivityComment(callback, acceptData, uid, id, out);
|
// TODO 分享发圈的图
|
return;
|
}
|
|
long pid = Long.parseLong(id);
|
CommonShareInfo shareInfo = commonShareInfoService.getByPidAndType(pid, type);
|
if (shareInfo == null || StringUtil.isNullOrEmpty(shareInfo.getComment())) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该内容已不存在"));
|
return;
|
}
|
|
UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
|
if (user == null) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
|
JsonUtil.printMode(out, callback,
|
JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
|
return;
|
}
|
|
UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
|
String relationId = null;
|
if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
|
&& taoBaoInfo.getRelationValid() == true)
|
relationId = taoBaoInfo.getRelationId();
|
|
if (StringUtil.isNullOrEmpty(relationId)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
|
return;
|
}
|
|
String text = shareInfo.getComment();
|
String newText = text;
|
String imgUrl = null;
|
if (shareInfo.getNeedSpin() != null && shareInfo.getNeedSpin()) {
|
try {
|
String erCodeContent = "";
|
newText = convertLinkManager.convertLinkFromText(text, uid, true);
|
// 获取口令
|
List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText);
|
if (tokenList != null && tokenList.size() > 0) {
|
// 构造分享链接
|
erCodeContent = ShareControllerV2.getTaoBaoActiivtyERCodeContentNew(
|
configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()), tokenList.get(0));
|
} else {
|
// 获取链接
|
List<String> urlList = JDUtil.getJDShortLinksFromText(newText);
|
if (urlList != null && urlList.size() > 0) {
|
erCodeContent = urlList.get(0);
|
} else {
|
urlList = PinDuoDuoUtil.getPDDShortLinksFromText(newText);
|
if (urlList != null && urlList.size() > 0) {
|
erCodeContent = urlList.get(0);
|
}
|
}
|
}
|
|
imgUrl = createActivityShareImg(type, id, erCodeContent);
|
} catch (ConvertLinkExceptionException e) {
|
if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
}
|
|
if (StringUtil.isNullOrEmpty(imgUrl)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("分享图生成失败"));
|
} else {
|
JSONObject data = new JSONObject();
|
data.put("text", newText);
|
data.put("img", imgUrl);
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
|
}
|
}
|
|
/**
|
* 评论复制
|
*
|
* @param acceptData
|
* @param id
|
* @param out
|
*/
|
private void copyActivityComment(String callback, AcceptData acceptData, Long uid, String id, PrintWriter out) {
|
if (StringUtil.isNullOrEmpty(id)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("id不能为空"));
|
return;
|
}
|
|
GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(id);
|
if (goodsEvaluate == null) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该内容已不存在"));
|
return;
|
}
|
|
UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
|
if (user == null) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
|
return;
|
}
|
|
if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
|
JsonUtil.printMode(out, callback,
|
JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
|
return;
|
}
|
|
UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
|
String relationId = null;
|
if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
|
&& taoBaoInfo.getRelationValid() == true)
|
relationId = taoBaoInfo.getRelationId();
|
|
if (StringUtil.isNullOrEmpty(relationId)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"));
|
return;
|
}
|
|
String text = "";
|
CommentInfo comment = null;
|
List<CommentInfo> comments = goodsEvaluate.getComments();
|
if (comments != null && comments.size() > 0) {
|
CommentInfo info = comments.get(0);
|
text = info.getContent();
|
comment = info;
|
}
|
|
String newText = text; // 非通用券需要验证
|
if (comment != null && (comment.getNeedSpin() == null || comment.getNeedSpin())) {
|
try {
|
newText = convertLinkManager.convertLinkFromText(text, uid, true);
|
} catch (ConvertLinkExceptionException e) {
|
if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("评论生成失败"));
|
return;
|
}
|
}
|
JSONObject data = new JSONObject();
|
data.put("text", newText);
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
|
|
executor.execute(new Runnable() {
|
@Override
|
public void run() { // 添加每日统计
|
dailyCountMomentsService.addCopyComment();
|
}
|
});
|
}
|
|
}
|