package com.yeshi.fanli.controller.client.v2;
|
|
import java.io.PrintWriter;
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Collections;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.yeshi.utils.JsonUtil;
|
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.yeshi.fanli.dto.ConfigParamsDTO;
|
import com.yeshi.fanli.dto.dataoke.DingDongTime;
|
import com.yeshi.fanli.dto.jd.JDSearchResult;
|
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
|
import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.homemodule.Special;
|
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
|
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
|
import com.yeshi.fanli.entity.common.JumpDetailV2;
|
import com.yeshi.fanli.entity.jd.JDGoods;
|
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
import com.yeshi.fanli.entity.taobao.TLJBuyGoods;
|
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
|
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
|
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.HongBaoV2CountService;
|
import com.yeshi.fanli.service.inter.goods.recommend.HomeRecommendGoodsService;
|
import com.yeshi.fanli.service.inter.goods.recommend.RecommendGoodsDeleteHistoryService;
|
import com.yeshi.fanli.service.inter.homemodule.DeviceSexService;
|
import com.yeshi.fanli.service.inter.homemodule.SpecialService;
|
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
|
import com.yeshi.fanli.service.inter.jd.JDGoodsService;
|
import com.yeshi.fanli.service.inter.lable.QualityFlashSaleService;
|
import com.yeshi.fanli.service.inter.lable.QualityGoodsService;
|
import com.yeshi.fanli.service.inter.monitor.MonitorService;
|
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
|
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
|
import com.yeshi.fanli.service.inter.pdd.PDDGoodsService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
|
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service;
|
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsService;
|
import com.yeshi.fanli.tag.PageEntity;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.RedisKeyEnum;
|
import com.yeshi.fanli.util.RedisManager;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.TaoBaoConstant;
|
import com.yeshi.fanli.util.TimeUtil;
|
import com.yeshi.fanli.util.VersionUtil;
|
import com.yeshi.fanli.util.factory.MonitorFactory;
|
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
|
import com.yeshi.fanli.util.taobao.DaTaoKeUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
|
import com.yeshi.fanli.vo.goods.OtherInfo;
|
import com.yeshi.fanli.vo.goods.SpikeTimeVO;
|
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
|
import com.yeshi.fanli.vo.search.SearchKeyTOPVO;
|
import com.yeshi.fanli.vo.search.SearchKeyVO;
|
import com.yeshi.fanli.vo.tlj.ReduceHongBao;
|
|
import net.sf.json.JSONArray;
|
import net.sf.json.JSONObject;
|
|
@Controller
|
@RequestMapping("api/v2/recommend")
|
public class RecommendControllerV2 {
|
|
@Resource
|
private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
|
|
@Resource
|
private QualityGoodsService qualityGoodsService;
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Resource
|
private HomeRecommendGoodsService homeRecommendGoodsService;
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private MonitorService monitorService;
|
|
@Resource
|
private QualityFlashSaleService qualityFlashSaleService;
|
|
@Resource
|
private RecommendGoodsDeleteHistoryService recommendGoodsDeleteHistoryService;
|
|
@Resource
|
private JumpDetailV2Service jumpDetailV2Service;
|
|
@Resource
|
private DeviceSexService deviceSexService;
|
|
@Resource
|
private SpecialService specialService;
|
|
@Resource
|
private SwiperPictureService swiperPictureService;
|
|
@Resource
|
private JDGoodsService jdGoodsService;
|
|
@Resource
|
private PDDGoodsService pddGoodsService;
|
|
@Resource
|
private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService;
|
|
@Resource
|
private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
|
|
@Resource
|
private DaTaoKeGoodsService daTaoKeGoodsService;
|
|
@Resource
|
private HongBaoV2CountService hongBaoV2CountService;
|
|
@Resource
|
private HongBaoManageService hongBaoManageService;
|
|
/**
|
* 新版推荐专题管理(1.5.3)
|
*
|
* @param acceptData
|
* @param out
|
*/
|
@RequestMapping(value = "getRecommendIndex")
|
public void getRecommendIndex(AcceptData acceptData, Long uid, PrintWriter out) {
|
try {
|
// 获取设备定义性别
|
int deviceSex = deviceSexService.getDeviceSex(acceptData.getDevice());
|
|
// 1、专题模块
|
JSONObject root = specialService.listCacheSpecialToIndex(acceptData, deviceSex);
|
|
// 2、顶部轮播图
|
List<SwiperPicture> oldtopPicList = swiperPictureService.getByBannerCardAndVersion("index_top",
|
acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
|
|
List<SwiperPicture> topPicList = new ArrayList<>();
|
if (oldtopPicList != null && oldtopPicList.size() > 0)
|
topPicList.addAll(oldtopPicList);
|
|
root.put("topPicList", JsonUtil.getApiCommonGson().toJson(topPicList));
|
|
// 3、邀请有奖
|
List<SwiperPicture> invitePicList = null;
|
if ("ios".equalsIgnoreCase(acceptData.getPlatform())
|
&& configService.iosOnLining(Integer.parseInt(acceptData.getVersion()))) {
|
// 如果IOS当前版本处于审核状态就不返回
|
} else {
|
invitePicList = swiperPictureService.getByBannerCardAndVersion("index_invite", acceptData.getPlatform(),
|
Integer.parseInt(acceptData.getVersion()));
|
}
|
|
if (invitePicList == null) {
|
invitePicList = new ArrayList<SwiperPicture>();
|
}
|
root.put("invitePicList", JsonUtil.getApiCommonGson().toJson(invitePicList));
|
|
// 4、IOS的底部网页链接
|
String platform = acceptData.getPlatform();
|
if ("ios".equalsIgnoreCase(platform)) {
|
root.put("htmlLink", configService.get(ConfigKeyEnum.indexHtmlLinkIos.getKey()));
|
}
|
|
root.put("spikeGoods", getSpikeGoodsContent(acceptData));
|
if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion()))
|
root.put("scoreExchange", getScoreExchangeInfo(acceptData));
|
|
if (VersionUtil.greaterThan_2_0(acceptData.getPlatform(), acceptData.getVersion()))
|
root.put("searchDiscovery", getSearchDiscoveryInfo(acceptData));
|
|
out.print(JsonUtil.loadTrueResult(root));
|
} catch (Exception e) {
|
out.print(JsonUtil.loadFalseResult(1, "获取数据失败"));
|
try {
|
LogHelper.errorDetailInfo(e);
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
}
|
}
|
|
/**
|
* 限时秒杀 1.5.3
|
*
|
* @param acceptData
|
* @param out
|
*/
|
@RequestMapping(value = "getSpikeGoods")
|
public void getSpikeGoods(AcceptData acceptData, PrintWriter out) {
|
JSONObject root = getSpikeGoodsContent(acceptData);
|
out.print(JsonUtil.loadTrueResult(root));
|
}
|
|
private JSONObject getSpikeGoodsContent(AcceptData acceptData) {
|
long nowTime = System.currentTimeMillis();
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTimeInMillis(nowTime);
|
List<DingDongTime> dtoList = DaTaoKeUtil.getDingDongQiangTime(calendar);
|
int dateNum = Integer.parseInt(TimeUtil.getGernalTime(nowTime, "ddHH"));
|
String timeStr = null;
|
int nextPos = 0;
|
for (int i = 0; i < dtoList.size() - 1; i++) {
|
if (dateNum >= Integer.parseInt(dtoList.get(i).getTime())
|
&& dateNum < Integer.parseInt(dtoList.get(i + 1).getTime())) {
|
timeStr = dtoList.get(i).getTime();
|
nextPos = i + 1;
|
break;
|
}
|
}
|
|
if (timeStr == null)
|
timeStr = dtoList.get(dtoList.size() - 1).getTime();
|
|
long nextTime = nowTime + 1000 * 60 * 60L;// 默认为1小时
|
if (nextPos < dtoList.size()) {
|
nextTime = TimeUtil.convertToTimeTemp(
|
TimeUtil.getGernalTime(nowTime, "yyyyMM") + dtoList.get(nextPos).getTime(), "yyyyMMddHH");
|
}
|
|
JSONArray array = null;
|
String timekey = RedisKeyEnum.getRedisKey(RedisKeyEnum.spikeGoodsHourNew,acceptData.getPlatform() +"-"+acceptData.getVersion());
|
String cachekey = RedisKeyEnum.getRedisKey(RedisKeyEnum.spikeGoodsListNew,acceptData.getPlatform() +"-"+acceptData.getVersion());
|
|
|
Calendar nowCalendar = Calendar.getInstance();
|
nowCalendar.setTimeInMillis(nowTime);
|
int hour = nowCalendar.get(Calendar.HOUR_OF_DAY);
|
|
String timeValue = redisManager.getCommonString(timekey);
|
if (timeValue == null || !timeValue.equals(hour + "")) {
|
redisManager.cacheCommonString(timekey, hour + "", 60 * 30);
|
} else {
|
String cacheValue = redisManager.getCommonString(cachekey);
|
if (!StringUtil.isNullOrEmpty(cacheValue)) {
|
array = JSONArray.fromObject(cacheValue);
|
}
|
}
|
|
JumpDetailV2 jumpDetail = null;
|
if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
|
jumpDetail = jumpDetailV2Service.getByTypeCache("spike_goods_list");
|
} else {
|
jumpDetail = jumpDetailV2Service.getByTypeCache("web");
|
}
|
|
if (array == null) {
|
array = new JSONArray();
|
Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
|
.excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
|
|
// 缓存中不存在
|
List<DaTaoKeDetailV2> listGoods = daTaoKeGoodsDetailV2Service.getDingDongQiangData(timeStr);
|
if (listGoods == null) {
|
listGoods = new ArrayList<>();
|
}
|
|
if (listGoods != null && listGoods.size() > 3)
|
listGoods = listGoods.subList(0, 3);
|
|
/* 遍历列表数据 */
|
|
ConfigParamsDTO configParamsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
|
acceptData.getVersion());
|
|
for (DaTaoKeDetailV2 detail : listGoods) {
|
TaoBaoGoodsBrief taoBaoGoodsBrief = TaoBaoUtil.convert(detail);
|
if (taoBaoGoodsBrief == null) {
|
continue;
|
}
|
GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, configParamsDTO);
|
|
JSONObject params = new JSONObject();
|
params.put("url", configService.get(ConfigKeyEnum.spikeGoodsLink.getKey()) + "?id=" + taoBaoGoodsBrief.getAuctionId());
|
|
JSONObject goods = new JSONObject();
|
goods.put("goods", gson.toJson(detailVO));
|
goods.put("params", params);
|
goods.put("jumpDetail", jumpDetail);
|
|
// 1.5.4及以后返回
|
if (VersionUtil.greaterThan_1_5_40(acceptData.getPlatform(), acceptData.getVersion())) {
|
array.add(goods);
|
} else {
|
array.add(goods.optJSONObject("goods"));
|
}
|
}
|
|
// 缓存半个小时
|
redisManager.cacheCommonString(cachekey, array.toString(), 60 * 30);
|
}
|
|
// 获取今天的数据
|
|
Long endTime = nextTime - nowTime;
|
|
JSONObject root = new JSONObject();
|
|
if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) {
|
root.put("time", nextTime);
|
root.put("endTime", endTime > 0 ? endTime : 0);
|
JSONArray imgArray = new JSONArray();
|
if (array != null)
|
for (int i = 0; i < array.size(); i++) {
|
imgArray.add(array.optJSONObject(i).optJSONObject("goods").optString("picUrl"));
|
}
|
root.put("imgList", imgArray);
|
JSONObject params = new JSONObject();
|
params.put("url", configService.get(ConfigKeyEnum.spikeGoodsLink.getKey()));
|
root.put("params", params);
|
root.put("jumpDetail", jumpDetail);
|
root.put("name", "限时秒杀");
|
root.put("desc", "整点更新,好物抢购");
|
} else {
|
root.put("time", nextTime);
|
root.put("endTime", endTime > 0 ? endTime : 0);
|
root.put("listgoods", array);
|
JSONObject params = new JSONObject();
|
params.put("url", configService.get(ConfigKeyEnum.spikeGoodsLink.getKey()));
|
root.put("params", params);
|
root.put("jumpDetail", jumpDetail);
|
}
|
|
root.put("time", nextTime);
|
root.put("endTime", endTime > 0 ? endTime : 0);
|
root.put("listgoods", array);
|
|
return root;
|
}
|
|
/**
|
* 限时秒杀列表
|
*
|
* @param acceptData
|
* @param page
|
* @param auctionId
|
* @param time
|
* @param out
|
*/
|
@RequestMapping("getSpikTime")
|
public void getSpikTime(AcceptData acceptData, PrintWriter out) {
|
List<DingDongTime> timeList = DaTaoKeUtil.getDingDongQiangTime(Calendar.getInstance());
|
List<SpikeTimeVO> list = new ArrayList<SpikeTimeVO>();
|
for (int i = 0; i < timeList.size(); i++) {
|
SpikeTimeVO spikeTime1 = new SpikeTimeVO();
|
spikeTime1.setTime(timeList.get(i).getTime().subSequence(2, 4) + ":00");
|
if (timeList.get(i).getState() <= 0)
|
spikeTime1.setState("进行中");
|
else
|
spikeTime1.setState("即将开始");
|
if (timeList.get(i).getState() == 0)
|
spikeTime1.setChecked(true);
|
spikeTime1.setRequestTime(timeList.get(i).getTime());
|
list.add(spikeTime1);
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("count", list.size());
|
data.put("list", list);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 限时秒杀列表
|
*
|
* @param acceptData
|
* @param page
|
* @param auctionId
|
* @param time
|
* @param out
|
*/
|
@RequestMapping("getSpikeGoodsList")
|
public void getSpikeGoodsList(AcceptData acceptData, Integer page, Long goodsId, String qtime, PrintWriter out) {
|
List<DaTaoKeDetailV2> detailList0 = daTaoKeGoodsDetailV2Service.getDingDongQiangData(qtime);
|
if (detailList0 == null)
|
detailList0 = new ArrayList<>();
|
|
List<DaTaoKeDetailV2> detailList = new ArrayList<>();
|
detailList.addAll(detailList0);
|
JSONArray array = new JSONArray();
|
if (page == 1 && goodsId != null && detailList != null) {
|
for (int i = 0; i < detailList.size(); i++) {
|
if (detailList.get(i).getGoodsId().longValue() == goodsId) {
|
DaTaoKeDetailV2 goods = detailList.get(i);
|
detailList.remove(i);
|
detailList.add(0, goods);
|
break;
|
}
|
}
|
}
|
|
Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
|
.excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
|
if (detailList != null) {
|
ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
|
acceptData.getVersion());
|
|
for (DaTaoKeDetailV2 detail : detailList) {
|
array.add(gson.toJson(GoodsDetailVOFactory.convertTaoBao(TaoBaoUtil.convert(detail), paramsDTO)));
|
}
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("count", detailList.size());
|
data.put("list", array);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 金币兑换信息
|
*
|
* @param acceptData
|
* @return
|
*/
|
private JSONObject getScoreExchangeInfo(AcceptData acceptData) {
|
|
JSONObject root = new JSONObject();
|
JSONArray array = new JSONArray();
|
array.add("http://img.flqapp.com/resource/integral/integral_home_icon_2.png");
|
array.add("http://img.flqapp.com/resource/integral/integral_home_icon_1.png");
|
root.put("imgList", array);
|
JSONObject params = new JSONObject();
|
params.put("balanceMore", true);
|
root.put("params", params);
|
root.put("jumpDetail", jumpDetailV2Service.getByTypeCache("integralExchange",
|
Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion())));
|
|
root.put("name", "金币兑换");
|
root.put("desc", "每日签到,惊喜不停");
|
root.put("tagImg", "http://img.flqapp.com/resource/score_exchange_tag.png");
|
return root;
|
}
|
|
/**
|
* 金币兑换信息
|
*
|
* @param acceptData
|
* @return
|
*/
|
private JSONObject getSearchDiscoveryInfo(AcceptData acceptData) {
|
JSONArray array = new JSONArray();
|
String keys = configService.getSearchDiscoveryKeys();
|
if (!StringUtil.isNullOrEmpty(keys)) {
|
JSONArray arrayKeys = JSONArray.fromObject(keys);
|
for (int i = 0; i < arrayKeys.size(); i++) {
|
String name = arrayKeys.get(i).toString();
|
JSONObject params = new JSONObject();
|
params.put("content", name);
|
|
SearchKeyVO keyVO = new SearchKeyVO();
|
keyVO.setName(name);
|
keyVO.setParams(params.toString());
|
array.add(keyVO);
|
}
|
}
|
|
JSONObject params = new JSONObject();
|
params.put("url", configService.get(ConfigKeyEnum.searchDiscoveryH5Link.getKey()));
|
|
JSONObject root = new JSONObject();
|
root.put("picture", "http://img.flqapp.com/resource/home_search_found.png");
|
root.put("params", params);
|
root.put("jumpDetail", jumpDetailV2Service.getByTypeCache("web",
|
Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion())));
|
|
root.put("jumpResult", jumpDetailV2Service.getByTypeCache("search_goods_result",
|
Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion())));
|
root.put("keyList", array);
|
return root;
|
}
|
|
/**
|
* 首页底部商品推荐
|
*
|
* @param acceptData
|
* @param out
|
*/
|
@RequestMapping(value = "getGoodList")
|
public void getGoodList(AcceptData acceptData, Integer goodsType, Integer page, HttpServletRequest request,
|
PrintWriter out) {
|
|
if (goodsType == null || page == null) {
|
out.print(JsonUtil.loadFalseResult("参数信息不正常"));
|
return;
|
}
|
|
try {
|
if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
|
taoBaoGuessUserLikeByDevice(acceptData, page, request, out);
|
return;
|
}
|
|
if (goodsType == Constant.SOURCE_TYPE_JD) {
|
getIndexJDGoods(acceptData, page, out);
|
return;
|
}
|
|
if (goodsType == Constant.SOURCE_TYPE_PDD) {
|
getIndexPDDGoods(acceptData, page, out);
|
return;
|
}
|
out.print(JsonUtil.loadFalseResult("商品类型错误"));
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
JSONObject data = new JSONObject();
|
data.put("list", new JSONArray());
|
data.put("count", 0);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
}
|
|
/**
|
* 根据设备信息获取猜你喜欢的内容
|
*
|
* @param acceptData
|
* @param imei
|
* -Android的IMEI信息
|
* @param idfa
|
* -IOS的idfa广告标识信息
|
*/
|
public void taoBaoGuessUserLikeByDevice(AcceptData acceptData, int page, HttpServletRequest request,
|
PrintWriter out) {
|
int pageSize = Constant.PAGE_SIZE;
|
JSONArray array = new JSONArray();
|
Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create();
|
|
String idfa = acceptData.getIdfa();
|
String imei = acceptData.getImei();
|
if (VersionUtil.greaterThan_1_5_70(acceptData.getPlatform(), acceptData.getVersion())) {
|
List<TaoBaoGoodsBrief> goodsList = homeRecommendGoodsService.listGoodsByPage(null, acceptData.getDevice(),
|
imei, idfa, page);
|
|
if (page < 4) {// 前三页加入更新
|
try {
|
taoBaoGoodsUpdateService.addUpdateQueueAsync(goodsList);
|
} catch (Exception e) {
|
}
|
}
|
|
ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
|
acceptData.getVersion());
|
|
for (TaoBaoGoodsBrief goods : goodsList) {
|
GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
|
if (page < 3)
|
detailVO.setRecommend(true);
|
|
try {
|
array.add(gson.toJson(detailVO));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
if (page == 1) {
|
List<TLJBuyGoods> list = homeRecommendGoodsService.getZiGouLiJianHotGoods(acceptData.getDevice());
|
if (list != null && list.size() > 0) {
|
BigDecimal rateBuy = TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE;
|
ConfigParamsDTO paramsBuy = new ConfigParamsDTO(rateBuy, rateBuy, Constant.MAX_REWARD_RATE,
|
hongBaoManageService.getFanLiRate(UserLevelEnum.superVIP));
|
for (int i = list.size() - 1; i >= 0; i--) {
|
TLJBuyGoods goods = list.get(i);
|
GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods.getGoods(), paramsBuy);
|
|
String hongBao = TaoBaoUtil.getGoodsHongBaoInfo(goods.getGoods(),
|
TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE);
|
|
ReduceHongBao reduceHongBao = new ReduceHongBao();
|
reduceHongBao.setLeft(goods.getLeftHongBaoCount());
|
reduceHongBao.setMoney(hongBao);
|
reduceHongBao.setName("付款立减 ");
|
reduceHongBao.setTip("");
|
reduceHongBao.setTotal(goods.getTotalHongBaoCount());
|
|
OtherInfo otherInfo = new OtherInfo();
|
otherInfo.setReduceHongBao(reduceHongBao);
|
|
detailVO.setOtherInfo(otherInfo);
|
detailVO.setPictureTag(new ClientTextStyleVO("立减TOP" + (i + 1), "#E5005C", "#FCE431", null));
|
detailVO.setRecommend(true);
|
array.add(0, gson.toJson(detailVO));
|
}
|
}
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("list", array);
|
data.put("count", 1000);
|
out.print(JsonUtil.loadTrueResult(data));
|
return;
|
}
|
|
// 从推荐来
|
if (page <= 1) {
|
array.clear();
|
if (!StringUtil.isNullOrEmpty(imei) || !StringUtil.isNullOrEmpty(idfa)) {
|
long startTime = java.lang.System.currentTimeMillis();
|
|
TaoBaoSearchResult result = TaoKeApiUtil.guessDeviceLike(page, 50, imei, idfa,"");
|
|
if (result != null && result.getTaoBaoGoodsBriefs() != null) {
|
// 筛选
|
List<GoodsDetailVO> goodsList = new ArrayList<>();
|
|
List<TaoBaoGoodsBrief> gList = recommendGoodsDeleteHistoryService
|
.filterGoods(acceptData.getDevice(), result.getTaoBaoGoodsBriefs());
|
|
// filter
|
try {
|
gList = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(gList);
|
} catch (Exception e) {
|
}
|
|
// 设备推荐
|
if (gList != null) {
|
ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
|
acceptData.getVersion());
|
for (TaoBaoGoodsBrief goods : gList) {
|
if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && goods.getCouponAmount() != null
|
&& goods.getCouponAmount().compareTo(new BigDecimal("5")) >= 0
|
&& goods.getBiz30day() > 1000
|
&& !StringUtil.isNullOrEmpty(goods.getPictUrlWhite())) {
|
|
GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
|
detailVO.setRecommend(true);
|
goodsList.add(detailVO);
|
}
|
}
|
}
|
|
try {
|
monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0,
|
(int) (java.lang.System.currentTimeMillis() - startTime), "推荐数量:" + goodsList.size()));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
Collections.shuffle(goodsList);
|
goodsList = goodsList.size() > 20 ? goodsList.subList(0, 20) : goodsList;
|
for (GoodsDetailVO goods : goodsList) {
|
array.add(gson.toJson(goods));
|
}
|
} else {
|
try {
|
monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0,
|
(int) (java.lang.System.currentTimeMillis() - startTime), "无推荐"));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
JSONArray localArray = qualityGoodsService.getRecommendToIndexV2((page - 1) * pageSize, pageSize,acceptData.getPlatform(),acceptData.getVersion());
|
array.addAll(localArray);
|
} else {// 从精选库来
|
array = qualityGoodsService.getRecommendToIndexV2((page - 1) * pageSize, pageSize,acceptData.getPlatform(),acceptData.getVersion());
|
if (array == null) {
|
out.print(JsonUtil.loadFalseResult("没有更多了"));
|
return;
|
}
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("list", array);
|
data.put("count", 1000);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 京东首页商品
|
*
|
* @param acceptData
|
* @param page
|
* @param out
|
*/
|
private void getIndexJDGoods(AcceptData acceptData, int page, PrintWriter out) {
|
JDSearchResult result = jdGoodsService.getIndexJDGoods(page);
|
long count = 0;
|
JSONObject data = new JSONObject();
|
JSONArray array = new JSONArray();
|
if (result != null) {
|
PageEntity pageEntity = result.getPageEntity();
|
if (pageEntity != null) {
|
count = pageEntity.getTotalCount();
|
}
|
|
List<JDGoods> goodsList = result.getGoodsList();
|
if (goodsList != null && goodsList.size() > 0) {
|
ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
|
acceptData.getVersion());
|
|
Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
|
.excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
|
for (JDGoods goods : goodsList) {
|
GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO);
|
array.add(gson.toJson(goodsDetailVO));
|
}
|
}
|
}
|
|
data.put("list", array);
|
data.put("count", count);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 爆款排行商品-实时热销榜
|
*
|
* @param acceptData
|
* @param page
|
* @param out
|
*/
|
private void getIndexPDDGoods(AcceptData acceptData, int page, PrintWriter out) {
|
PDDGoodsResult result = pddGoodsService.getTopGoodsList(page, 1);
|
int count = 0;
|
JSONArray array = new JSONArray();
|
if (result != null) {
|
count = result.getTotalCount();
|
Gson gson = JsonUtil.getApiCommonGson();
|
List<PDDGoodsDetail> goodsList = result.getGoodsList();
|
if (goodsList != null && goodsList.size() > 0) {
|
ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
|
acceptData.getVersion());
|
|
for (PDDGoodsDetail goods : goodsList) {
|
GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO);
|
array.add(gson.toJson(goodsDetailVO));
|
}
|
}
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("list", array);
|
data.put("count", count);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 搜索发现列表
|
*
|
* @param acceptData
|
* @param uid
|
* @param page
|
* @param out
|
*/
|
@RequestMapping(value = "getSearchDiscoveryTop")
|
public void getSearchDiscoveryTop(AcceptData acceptData, Long uid, Integer page, String callback, PrintWriter out) {
|
int count = 0;
|
List<SearchKeyTOPVO> list = new ArrayList<SearchKeyTOPVO>();
|
|
String keys = configService.getSearchDiscoveryKeys();
|
if (!StringUtil.isNullOrEmpty(keys)) {
|
JSONArray arrayKeys = JSONArray.fromObject(keys);
|
if (arrayKeys != null && arrayKeys.size() > 0) {
|
count = arrayKeys.size();
|
ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
|
acceptData.getVersion());
|
|
int j = 1;
|
for (int i = (page - 1) * 3; i < arrayKeys.size(); i++) {
|
if (j > 3)
|
break;
|
|
String words = arrayKeys.get(i).toString();
|
List<GoodsDetailVO> listGoods = new ArrayList<GoodsDetailVO>();
|
|
List<DaTaoKeDetailV2> listTaoKe = daTaoKeGoodsService.getSearchDiscoveryGoods(words);
|
if (listTaoKe != null && listTaoKe.size() > 0) {
|
for (DaTaoKeDetailV2 daTaoKeDetailV2 : listTaoKe) {
|
listGoods.add(
|
GoodsDetailVOFactory.convertTaoBao(TaoBaoUtil.convert(daTaoKeDetailV2), paramsDTO));
|
if (listGoods.size() >= 3)
|
break;
|
}
|
}
|
|
SearchKeyTOPVO keyTOPVO = new SearchKeyTOPVO();
|
keyTOPVO.setName(words);
|
keyTOPVO.setListGoods(listGoods);
|
list.add(keyTOPVO);
|
|
j++;
|
}
|
}
|
}
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
JSONObject data = new JSONObject();
|
data.put("count", count);
|
data.put("list", gson.toJson(list));
|
if (!StringUtil.isNullOrEmpty(callback)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
|
} else
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 获取专题渠道活动
|
*
|
* @param acceptData
|
* @param uid
|
* @param callback
|
* @param out
|
*/
|
@RequestMapping(value = "getSpecialChannelActivity")
|
public void getSpecialChannelActivity(AcceptData acceptData, Long uid, String callback, PrintWriter out) {
|
|
int platformCode = Constant.getPlatformCode(acceptData.getPlatform());
|
|
List<Special> list = specialService.listByPlaceKey("special_channel_activity", 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) {
|
list.remove(i--);
|
} else {
|
if (special.getStartTime() != null && special.getEndTime() != null) {
|
if (time < special.getStartTime().getTime() || time > special.getEndTime().getTime()) {
|
list.remove(i--);
|
} else// 设置倒计时
|
{
|
special.setCountDownTime((special.getEndTime().getTime() - time) / 1000);
|
}
|
}
|
}
|
}
|
|
GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
|
Gson gson = gsonBuilder.create();
|
JSONObject data = new JSONObject();
|
data.put("count", list.size());
|
data.put("list", gson.toJson(list));
|
if (!StringUtil.isNullOrEmpty(callback)) {
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
|
} else
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 获取专题渠道活动
|
*
|
* @param acceptData
|
* @param uid
|
* @param callback
|
* @param out
|
*/
|
@RequestMapping(value = "getGuide")
|
public void getGuide(AcceptData acceptData, Long uid, PrintWriter out) {
|
String tips = null;
|
if (uid == null || uid <= 0) {
|
tips = configService.get(ConfigKeyEnum.tipGuideNewUser.getKey());
|
} else {
|
long rebateOrder = hongBaoV2CountService.countRebateOrder(uid);
|
long shareOrInviteOrder = hongBaoV2CountService.countShareOrInviteOrder(uid);
|
if (rebateOrder + shareOrInviteOrder >= 3) {
|
// 熟客版
|
} else if (rebateOrder <= 0 && shareOrInviteOrder <= 0) {
|
// 新人版
|
tips = configService.get(ConfigKeyEnum.tipGuideNewUser.getKey());
|
} else if (rebateOrder > 0 && shareOrInviteOrder <= 0) {
|
// 省钱版
|
tips = configService.get(ConfigKeyEnum.tipGuideSaveMoney.getKey());
|
} else {
|
// 赚钱版
|
tips = configService.get(ConfigKeyEnum.tipGuideShareInvite.getKey());
|
}
|
}
|
|
if (StringUtil.isNullOrEmpty(tips)) {
|
out.print(JsonUtil.loadFalseResult("暂无提示"));
|
return;
|
}
|
|
JSONObject data = JSONObject.fromObject(tips);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
}
|