| | |
| | | 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.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.common.JumpDetailV2;
|
| | | import com.yeshi.fanli.entity.jd.JDGoods;
|
| | | 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.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.DaTaoKeGoodsDetailService;
|
| | | 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.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 HongBaoManageService hongBaoManageService;
|
| | |
|
| | | @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 DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
|
| | |
|
| | | @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;
|
| | | |
| | | |
| | |
|
| | | /**
|
| | | * 新版推荐专题管理(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.getByBannerCard("index_top");
|
| | | 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.getByBannerCard("index_invite");
|
| | | }
|
| | |
|
| | | 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("index_html_link_ios"));
|
| | | }
|
| | |
|
| | | 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<String> 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)) && dateNum < Integer.parseInt(dtoList.get(i + 1))) {
|
| | | timeStr = dtoList.get(i);
|
| | | nextPos = i + 1;
|
| | | break;
|
| | | }
|
| | | }
|
| | | |
| | | if (timeStr == null)
|
| | | timeStr = dtoList.get(dtoList.size() - 1);
|
| | |
|
| | | long nextTime = nowTime + 1000 * 60 * 60L;// 默认为1小时
|
| | | if (nextPos < dtoList.size()) {
|
| | | nextTime = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(nowTime, "yyyyMM") + dtoList.get(nextPos),
|
| | | "yyyyMMddHH");
|
| | | }
|
| | |
|
| | | JSONArray array = null;
|
| | | String timekey = String.format("spikeGoods_hour_new-%s-%s", acceptData.getPlatform(), acceptData.getVersion());
|
| | | String cachekey = String.format("spikeGoodsList_new-%s-%s", 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();
|
| | |
|
| | | BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
|
| | | BigDecimal shareRate = hongBaoManageService.getShareRate();
|
| | |
|
| | | 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);
|
| | |
|
| | | /* 遍历列表数据 */
|
| | |
|
| | | for (DaTaoKeDetailV2 detail : listGoods) {
|
| | | TaoBaoGoodsBrief taoBaoGoodsBrief = TaoBaoUtil.convert(detail);
|
| | | if (taoBaoGoodsBrief == null) {
|
| | | continue;
|
| | | }
|
| | | GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, null, fanLiRate,
|
| | | shareRate);
|
| | |
|
| | | JSONObject params = new JSONObject();
|
| | | params.put("url", configService.get("spike_goods_link") + "?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("spike_goods_link"));
|
| | | 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("spike_goods_link"));
|
| | | 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<SpikeTimeVO> list = new ArrayList<SpikeTimeVO>();
|
| | | SpikeTimeVO spikeTime1 = new SpikeTimeVO();
|
| | | spikeTime1.setTime("08:00");
|
| | | spikeTime1.setState("进行中");
|
| | | spikeTime1.setRequestTime("2408");
|
| | | |
| | | SpikeTimeVO spikeTime2 = new SpikeTimeVO();
|
| | | spikeTime2.setTime("10:00");
|
| | | spikeTime2.setState("进行中");
|
| | | spikeTime2.setChecked(true);
|
| | | spikeTime2.setRequestTime("2410");
|
| | | |
| | | SpikeTimeVO spikeTime3 = new SpikeTimeVO();
|
| | | spikeTime3.setTime("13:00");
|
| | | spikeTime3.setState("即将开始");
|
| | | spikeTime3.setRequestTime("2413");
|
| | | |
| | | SpikeTimeVO spikeTime4 = new SpikeTimeVO();
|
| | | spikeTime4.setTime("15:00");
|
| | | spikeTime4.setState("即将开始");
|
| | | spikeTime4.setRequestTime("2415");
|
| | | |
| | | list.add(spikeTime1);
|
| | | list.add(spikeTime2);
|
| | | list.add(spikeTime3);
|
| | | list.add(spikeTime4);
|
| | | |
| | | 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) {
|
| | | BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
|
| | | BigDecimal shareRate = hongBaoManageService.getShareRate();
|
| | | for (DaTaoKeDetailV2 detail : detailList) {
|
| | | array.add(gson.toJson(GoodsDetailVOFactory.convertTaoBao(TaoBaoUtil.convert(detail), null, fanLiRate, shareRate)));
|
| | | }
|
| | | }
|
| | |
|
| | | 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("search_discovery_h5_link"));
|
| | |
|
| | | 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) {
|
| | | }
|
| | | }
|
| | |
|
| | | BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
|
| | | BigDecimal shareRate = hongBaoManageService.getShareRate();
|
| | | for (TaoBaoGoodsBrief goods : goodsList) {
|
| | | GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate, shareRate);
|
| | | 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)
|
| | | for (int i = list.size() - 1; i >= 0; i--) {
|
| | | TLJBuyGoods goods = list.get(i);
|
| | | BigDecimal rateBuy = TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE;
|
| | | GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods.getGoods(), null, rateBuy,
|
| | | rateBuy);
|
| | |
|
| | | 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 = daTaoKeGoodsDetailService.filterTaoBaoGoods(gList);
|
| | | } catch (Exception e) {
|
| | | }
|
| | |
|
| | | // 设备推荐
|
| | | if (gList != null) {
|
| | | BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
|
| | | BigDecimal shareRate = hongBaoManageService.getShareRate();
|
| | |
|
| | | 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, null, fanLiRate,
|
| | | shareRate);
|
| | | 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);
|
| | | array.addAll(localArray);
|
| | | } else {// 从精选库来
|
| | | array = qualityGoodsService.getRecommendToIndexV2((page - 1) * pageSize, pageSize);
|
| | | 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) {
|
| | | BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
|
| | | BigDecimal shareRate = hongBaoManageService.getShareRate();
|
| | | Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
|
| | | .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
|
| | | for (JDGoods goods : goodsList) {
|
| | | GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, fanLiRate, shareRate);
|
| | | 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) {
|
| | | BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
|
| | | BigDecimal shareRate = hongBaoManageService.getShareRate();
|
| | |
|
| | | for (PDDGoodsDetail goods : goodsList) {
|
| | | GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, fanLiRate, shareRate);
|
| | | 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();
|
| | | BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
|
| | | BigDecimal shareRate = hongBaoManageService.getShareRate();
|
| | |
|
| | | 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), null,
|
| | | fanLiRate, shareRate));
|
| | | 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)
|
| | | special.setTimeTask(true);
|
| | | else
|
| | | special.setTimeTask(false);
|
| | | |
| | | if (special.isTimeTask()) {
|
| | | 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("tip_guide_new_user");
|
| | | } else {
|
| | | long rebateOrder = hongBaoV2CountService.countRebateOrder(uid);
|
| | | long shareOrInviteOrder = hongBaoV2CountService.countShareOrInviteOrder(uid);
|
| | | if (rebateOrder + shareOrInviteOrder >= 3) {
|
| | | // 熟客版
|
| | | } else if (rebateOrder <= 0 && shareOrInviteOrder <= 0) {
|
| | | // 新人版
|
| | | tips = configService.get("tip_guide_new_user");
|
| | | } else if (rebateOrder > 0 && shareOrInviteOrder <= 0) {
|
| | | // 省钱版
|
| | | tips = configService.get("tip_guide_save_money");
|
| | | } else {
|
| | | // 赚钱版
|
| | | tips = configService.get("tip_guide_share_invite");
|
| | | } |
| | | }
|
| | | |
| | | if (StringUtil.isNullOrEmpty(tips)) {
|
| | | out.print(JsonUtil.loadFalseResult("暂无提示"));
|
| | | return;
|
| | | }
|
| | | |
| | | JSONObject data = JSONObject.fromObject(tips);
|
| | | out.print(JsonUtil.loadTrueResult(data));
|
| | | }
|
| | |
|
| | | }
|
| | | package com.yeshi.fanli.controller.client.v2; |
| | | |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.GsonBuilder; |
| | | import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO; |
| | | import com.yeshi.fanli.dto.common.CommonContentResult; |
| | | import com.yeshi.fanli.dto.common.CommonContentTypeEnum; |
| | | import com.yeshi.fanli.entity.SystemEnum; |
| | | import com.yeshi.fanli.lijin.manager.GoodsLijinMnager; |
| | | import com.yeshi.fanli.service.inter.goods.CommonTemplateContentService; |
| | | import com.yeshi.goods.facade.dto.taobao.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.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.goods.facade.entity.taobao.TaoBaoGoodsBrief; |
| | | import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; |
| | | import com.yeshi.goods.facade.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.goods.facade.service.DaTaoKeGoodsDetailV2Service; |
| | | import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsService; |
| | | import com.yeshi.common.entity.PageEntity; |
| | | import com.yeshi.fanli.util.*; |
| | | 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.homemodule.BannerVO; |
| | | import com.yeshi.common.vo.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; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.yeshi.utils.JsonUtil; |
| | | import org.yeshi.utils.TimeUtil; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.io.PrintWriter; |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Calendar; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | @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; |
| | | |
| | | @Resource |
| | | private GoodsLijinMnager goodsLijinMnager; |
| | | |
| | | @Resource |
| | | private CommonTemplateContentService commonTemplateContentService; |
| | | |
| | | /** |
| | | * 新版推荐专题管理(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(), acceptData.getSystem()); |
| | | |
| | | // 1、专题模块 |
| | | JSONObject root = specialService.listCacheSpecialToIndex(acceptData, deviceSex, acceptData.getSystem()); |
| | | |
| | | // 2、顶部轮播图 |
| | | List<BannerVO> oldtopPicList = swiperPictureService.getByBannerCardAndVersion("index_top", |
| | | acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()), acceptData.getSystem()); |
| | | |
| | | List<BannerVO> topPicList = new ArrayList<>(); |
| | | if (oldtopPicList != null && oldtopPicList.size() > 0) |
| | | topPicList.addAll(oldtopPicList); |
| | | |
| | | root.put("topPicList", JsonUtil.getApiCommonGson().toJson(topPicList)); |
| | | |
| | | // 3、邀请有奖 |
| | | List<BannerVO> invitePicList = null; |
| | | if ("ios".equalsIgnoreCase(acceptData.getPlatform()) |
| | | && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()), acceptData.getSystem())) { |
| | | // 如果IOS当前版本处于审核状态就不返回 |
| | | } else { |
| | | invitePicList = swiperPictureService.getByBannerCardAndVersion("index_invite", acceptData.getPlatform(), |
| | | Integer.parseInt(acceptData.getVersion()), acceptData.getSystem()); |
| | | } |
| | | |
| | | if (invitePicList == null) { |
| | | invitePicList = new ArrayList<BannerVO>(); |
| | | } |
| | | root.put("invitePicList", JsonUtil.getApiCommonGson().toJson(invitePicList)); |
| | | |
| | | // 4、IOS的底部网页链接 |
| | | String platform = acceptData.getPlatform(); |
| | | if ("ios".equalsIgnoreCase(platform)) { |
| | | root.put("htmlLink", configService.getValue(ConfigKeyEnum.indexHtmlLinkIos.getKey(), acceptData.getSystem())); |
| | | } |
| | | |
| | | 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(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 特价推荐 |
| | | * |
| | | * @param acceptData |
| | | * @param uid |
| | | * @param out |
| | | */ |
| | | @RequestMapping(value = "getRecommendIndexTJ") |
| | | public void getRecommendIndexTJ(AcceptData acceptData, Long uid, PrintWriter out) { |
| | | try { |
| | | // 获取设备定义性别 |
| | | int deviceSex = deviceSexService.getDeviceSex(acceptData.getDevice(), acceptData.getSystem()); |
| | | |
| | | // 1、专题模块 |
| | | JSONObject root = specialService.listCacheSpecialToIndex(acceptData, deviceSex, acceptData.getSystem()); |
| | | |
| | | // 2、顶部轮播图 |
| | | List<BannerVO> oldtopPicList = swiperPictureService.getByBannerCardAndVersion("index_top", |
| | | acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()), acceptData.getSystem()); |
| | | |
| | | List<BannerVO> topPicList = new ArrayList<>(); |
| | | if (oldtopPicList != null && oldtopPicList.size() > 0) |
| | | topPicList.addAll(oldtopPicList); |
| | | |
| | | root.put("topPicList", JsonUtil.getApiCommonGson().toJson(topPicList)); |
| | | |
| | | // 3、邀请有奖 |
| | | List<BannerVO> invitePicList = null; |
| | | if ("ios".equalsIgnoreCase(acceptData.getPlatform()) |
| | | && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()), acceptData.getSystem())) { |
| | | // 如果IOS当前版本处于审核状态就不返回 |
| | | } else { |
| | | invitePicList = swiperPictureService.getByBannerCardAndVersion("index_invite", acceptData.getPlatform(), |
| | | Integer.parseInt(acceptData.getVersion()), acceptData.getSystem()); |
| | | } |
| | | |
| | | if (invitePicList == null) { |
| | | invitePicList = new ArrayList<BannerVO>(); |
| | | } |
| | | root.put("invitePicList", JsonUtil.getApiCommonGson().toJson(invitePicList)); |
| | | |
| | | // 4、IOS的底部网页链接 |
| | | String platform = acceptData.getPlatform(); |
| | | if ("ios".equalsIgnoreCase(platform)) { |
| | | root.put("htmlLink", configService.getValue(ConfigKeyEnum.indexHtmlLinkIos.getKey(), acceptData.getSystem())); |
| | | } |
| | | |
| | | 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)); |
| | | |
| | | |
| | | //今日爆款 |
| | | CommonContentResult commonContentResult = commonTemplateContentService.getContentList(CommonContentTypeEnum.pddHotGoodsRank, null, 1, 10, acceptData.getSystem()); |
| | | if (commonContentResult != null && commonContentResult.getGoodsList() != null && commonContentResult.getGoodsList().size() > 0) { |
| | | com.alibaba.fastjson.JSONObject hotSale = new com.alibaba.fastjson.JSONObject(); |
| | | JumpDetailV2 jumpDetailV2 = new JumpDetailV2(); |
| | | jumpDetailV2.setActivity("com.tejia.lijin.app.ui.sellwellcommodity.SellWellGoods"); |
| | | |
| | | hotSale.put("jumpDetail", jumpDetailV2); |
| | | com.alibaba.fastjson.JSONObject params = new com.alibaba.fastjson.JSONObject(); |
| | | String navs = "[{\"key\":\"pddHotGoodsRank\",\"title\":\"拼多多\"},{\"key\":\"jdHotGoodsRank\",\"title\":\"京东\"},{\"key\":\"tbHotGoodsRank\",\"title\":\"淘宝\"}]"; |
| | | params.put("navs", navs.replace("\"","\\"+"\"")); |
| | | hotSale.put("params", params); |
| | | |
| | | Collections.shuffle(commonContentResult.getGoodsList()); |
| | | |
| | | //获取goodsList |
| | | GoodsMoneyConfigParamsDTO configParamsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), |
| | | acceptData.getVersion(), acceptData.getSystem()); |
| | | List<GoodsDetailVO> goodsList = goodsLijinMnager.loadCommonGoodsMoneyInfo(acceptData.getSystem(), uid, commonContentResult.getGoodsList(), configParamsDTO); |
| | | JSONArray array = new JSONArray(); |
| | | Gson gson = new Gson(); |
| | | for (GoodsDetailVO vo : goodsList) { |
| | | array.add(gson.toJson(vo)); |
| | | } |
| | | hotSale.put("goodsList", array); |
| | | root.put("hotSales", hotSale); |
| | | } |
| | | |
| | | |
| | | 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",acceptData.getSystem()); |
| | | } else { |
| | | jumpDetail = jumpDetailV2Service.getByTypeCache("web",acceptData.getSystem()); |
| | | } |
| | | |
| | | 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); |
| | | |
| | | /* 遍历列表数据 */ |
| | | |
| | | GoodsMoneyConfigParamsDTO configParamsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), |
| | | acceptData.getVersion(), acceptData.getSystem()); |
| | | |
| | | 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.getValue(ConfigKeyEnum.spikeGoodsLink.getKey(), acceptData.getSystem()) + "?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.getValue(ConfigKeyEnum.spikeGoodsLink.getKey(), acceptData.getSystem())); |
| | | 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.getValue(ConfigKeyEnum.spikeGoodsLink.getKey(), acceptData.getSystem())); |
| | | 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 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 out |
| | | */ |
| | | @RequestMapping("getSpikeGoodsList") |
| | | public void getSpikeGoodsList(AcceptData acceptData, Integer page, String 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 ( TaoBaoUtil.isEqual( detailList.get(i).getGoodsId(), 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) { |
| | | GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), |
| | | acceptData.getVersion(), acceptData.getSystem()); |
| | | |
| | | 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()),acceptData.getSystem())); |
| | | |
| | | 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(acceptData.getSystem()); |
| | | 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.getValue(ConfigKeyEnum.searchDiscoveryH5Link.getKey(), acceptData.getSystem())); |
| | | |
| | | 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()),acceptData.getSystem())); |
| | | |
| | | root.put("jumpResult", jumpDetailV2Service.getByTypeCache("search_goods_result", |
| | | Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion()),acceptData.getSystem())); |
| | | root.put("keyList", array); |
| | | return root; |
| | | } |
| | | |
| | | /** |
| | | * 首页底部商品推荐 |
| | | * |
| | | * @param acceptData |
| | | * @param out |
| | | */ |
| | | @RequestMapping(value = "getGoodList") |
| | | public void getGoodList(AcceptData acceptData, Long uid, 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, uid, 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 page |
| | | * @param request |
| | | * @param out |
| | | */ |
| | | public void taoBaoGuessUserLikeByDevice(AcceptData acceptData, Long uid, int page, HttpServletRequest request, |
| | | PrintWriter out) { |
| | | int pageSize = Constant.PAGE_SIZE; |
| | | |
| | | 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) { |
| | | } |
| | | } |
| | | |
| | | GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), |
| | | acceptData.getVersion(), acceptData.getSystem()); |
| | | |
| | | |
| | | List<GoodsDetailVO> voList = goodsLijinMnager.loadTBMoneyInfo(acceptData.getSystem(), uid, goodsList, paramsDTO,false); |
| | | |
| | | for (GoodsDetailVO vo : voList) { |
| | | if (page < 3) |
| | | vo.setRecommend(true); |
| | | } |
| | | |
| | | if (page == 1) { |
| | | List<TLJBuyGoods> list = homeRecommendGoodsService.getZiGouLiJianHotGoods(acceptData.getDevice()); |
| | | if (list != null && list.size() > 0) { |
| | | BigDecimal rateBuy = TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE; |
| | | GoodsMoneyConfigParamsDTO paramsBuy = new GoodsMoneyConfigParamsDTO(rateBuy, rateBuy, Constant.MAX_REWARD_RATE, |
| | | hongBaoManageService.getFanLiRate(UserLevelEnum.superVIP, acceptData.getSystem())); |
| | | 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, false); |
| | | |
| | | 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); |
| | | voList.add(0, detailVO); |
| | | } |
| | | } |
| | | } |
| | | |
| | | JSONArray array = new JSONArray(); |
| | | for (GoodsDetailVO vo : voList) { |
| | | if (acceptData.getSystem() == SystemEnum.yhqjx||acceptData.getSystem() == SystemEnum.hsb) { |
| | | //暂时不筛选红包 |
| | | // if (!StringUtil.isNullOrEmpty(vo.getMoneyInfo().getHongBaoMoney())) { |
| | | array.add(gson.toJson(vo)); |
| | | // } |
| | | } else { |
| | | array.add(gson.toJson(vo)); |
| | | } |
| | | } |
| | | JSONObject data = new JSONObject(); |
| | | data.put("list", array); |
| | | data.put("count", 1000); |
| | | out.print(JsonUtil.loadTrueResult(data)); |
| | | return; |
| | | } |
| | | |
| | | // 从推荐来 |
| | | List<GoodsDetailVO> finalVOList = new ArrayList<>(); |
| | | if (page <= 1) { |
| | | 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) { |
| | | GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), |
| | | acceptData.getVersion(), acceptData.getSystem()); |
| | | |
| | | List<TaoBaoGoodsBrief> deviceGoodsList = new ArrayList<>(); |
| | | 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())) { |
| | | deviceGoodsList.add(goods); |
| | | } |
| | | } |
| | | List<GoodsDetailVO> voList = goodsLijinMnager.loadTBMoneyInfo(acceptData.getSystem(), uid, deviceGoodsList, paramsDTO,false); |
| | | for (GoodsDetailVO vo : voList) { |
| | | vo.setRecommend(true); |
| | | } |
| | | goodsList.addAll(voList); |
| | | } |
| | | |
| | | |
| | | 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; |
| | | finalVOList.addAll(goodsList); |
| | | } else { |
| | | try { |
| | | monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, |
| | | (int) (java.lang.System.currentTimeMillis() - startTime), "无推荐")); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | List<GoodsDetailVO> voList = qualityGoodsService.getRecommendToIndexV2((page - 1) * pageSize, pageSize, acceptData.getPlatform(), acceptData.getVersion(), acceptData.getSystem()); |
| | | if (voList != null) |
| | | finalVOList.addAll(voList); |
| | | |
| | | } else {// 从精选库来 |
| | | List<GoodsDetailVO> voList = qualityGoodsService.getRecommendToIndexV2((page - 1) * pageSize, pageSize, acceptData.getPlatform(), acceptData.getVersion(), acceptData.getSystem()); |
| | | if (voList == null || voList.size() == 0) { |
| | | out.print(JsonUtil.loadFalseResult("没有更多了")); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | JSONArray array = new JSONArray(); |
| | | for (GoodsDetailVO vo : finalVOList) { |
| | | if (acceptData.getSystem() == SystemEnum.yhqjx||acceptData.getSystem() == SystemEnum.hsb) { |
| | | if (!StringUtil.isNullOrEmpty(vo.getMoneyInfo().getHongBaoMoney())) { |
| | | array.add(gson.toJson(vo)); |
| | | } |
| | | } else { |
| | | array.add(gson.toJson(vo)); |
| | | } |
| | | } |
| | | |
| | | 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, acceptData.getSystem()); |
| | | 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) { |
| | | GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), |
| | | acceptData.getVersion(), acceptData.getSystem()); |
| | | |
| | | 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) { |
| | | GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), |
| | | acceptData.getVersion(), acceptData.getSystem()); |
| | | |
| | | 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(acceptData.getSystem()); |
| | | if (!StringUtil.isNullOrEmpty(keys)) { |
| | | JSONArray arrayKeys = JSONArray.fromObject(keys); |
| | | if (arrayKeys != null && arrayKeys.size() > 0) { |
| | | count = arrayKeys.size(); |
| | | GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), |
| | | acceptData.getVersion(), acceptData.getSystem()); |
| | | |
| | | 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()), acceptData.getSystem()); |
| | | |
| | | 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 out |
| | | */ |
| | | @RequestMapping(value = "getGuide") |
| | | public void getGuide(AcceptData acceptData, Long uid, PrintWriter out) { |
| | | String tips = null; |
| | | if (uid == null || uid <= 0) { |
| | | tips = configService.getValue(ConfigKeyEnum.tipGuideNewUser.getKey(), acceptData.getSystem()); |
| | | } else { |
| | | long rebateOrder = hongBaoV2CountService.countRebateOrder(uid); |
| | | long shareOrInviteOrder = hongBaoV2CountService.countShareOrInviteOrder(uid); |
| | | if (rebateOrder + shareOrInviteOrder >= 3) { |
| | | // 熟客版 |
| | | } else if (rebateOrder <= 0 && shareOrInviteOrder <= 0) { |
| | | // 新人版 |
| | | tips = configService.getValue(ConfigKeyEnum.tipGuideNewUser.getKey(), acceptData.getSystem()); |
| | | } else if (rebateOrder > 0 && shareOrInviteOrder <= 0) { |
| | | // 省钱版 |
| | | tips = configService.getValue(ConfigKeyEnum.tipGuideSaveMoney.getKey(), acceptData.getSystem()); |
| | | } else { |
| | | // 赚钱版 |
| | | tips = configService.getValue(ConfigKeyEnum.tipGuideShareInvite.getKey(), acceptData.getSystem()); |
| | | } |
| | | } |
| | | |
| | | if (StringUtil.isNullOrEmpty(tips)) { |
| | | out.print(JsonUtil.loadFalseResult("暂无提示")); |
| | | return; |
| | | } |
| | | |
| | | JSONObject data = JSONObject.fromObject(tips); |
| | | out.print(JsonUtil.loadTrueResult(data)); |
| | | } |
| | | |
| | | } |