package com.yeshi.fanli.controller.client; import java.io.PrintWriter; import java.lang.reflect.Type; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.yeshi.utils.BigDecimalUtil; import org.yeshi.utils.IPUtil; import org.yeshi.utils.JsonUtil; import org.yeshi.utils.NumberUtil; import org.yeshi.utils.taobao.TbImgUtil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.homemodule.Special; import com.yeshi.fanli.entity.bus.homemodule.SuperSpecial; import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture; import com.yeshi.fanli.entity.bus.lable.QualityFactory; import com.yeshi.fanli.entity.bus.recommend.Honest; import com.yeshi.fanli.entity.bus.recommend.RecommendBanner; import com.yeshi.fanli.entity.bus.recommend.RecommendBannerV2; import com.yeshi.fanli.entity.bus.recommend.RecommendSection; import com.yeshi.fanli.entity.bus.recommend.RecommendSectionGoods; import com.yeshi.fanli.entity.bus.recommend.RecommendSpecial; import com.yeshi.fanli.entity.bus.su.recommend.SuperRecommendBanner; import com.yeshi.fanli.entity.bus.su.recommend.SuperRecommendBannerV2; import com.yeshi.fanli.entity.bus.su.recommend.SuperRecommendSection; import com.yeshi.fanli.entity.bus.su.recommend.SuperRecommendSpecial; import com.yeshi.fanli.entity.bus.user.Order; import com.yeshi.fanli.entity.bus.user.ShamUser; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.common.ImageInfo; import com.yeshi.fanli.entity.common.JumpDetail; import com.yeshi.fanli.entity.common.JumpDetailV2; import com.yeshi.fanli.entity.goods.CollectionGoodsV2; import com.yeshi.fanli.entity.goods.CommonGoods; import com.yeshi.fanli.entity.goods.ScanHistoryV2; import com.yeshi.fanli.entity.system.System; import com.yeshi.fanli.entity.system.SystemClientParams; import com.yeshi.fanli.entity.taobao.ClientTBPid; import com.yeshi.fanli.entity.taobao.PidUser; import com.yeshi.fanli.entity.taobao.SearchFilter; import com.yeshi.fanli.entity.taobao.TBPid; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; import com.yeshi.fanli.entity.taobao.TaoBaoShopInfo; import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig; import com.yeshi.fanli.entity.taobao.TaoKeAppInfo; import com.yeshi.fanli.exception.goods.CommonGoodsException; import com.yeshi.fanli.exception.goods.ScanHistoryException; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.exception.taobao.TaobaoGoodsUpdateException; 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.config.JumpDetailService; import com.yeshi.fanli.service.inter.config.SystemClientParamsService; import com.yeshi.fanli.service.inter.config.SystemConfigService; import com.yeshi.fanli.service.inter.config.SystemService; import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service; import com.yeshi.fanli.service.inter.goods.CommonGoodsService; import com.yeshi.fanli.service.inter.goods.RecommendBannerService; import com.yeshi.fanli.service.inter.goods.RecommendSectionGoodsService; import com.yeshi.fanli.service.inter.goods.ScanHistoryV2Service; import com.yeshi.fanli.service.inter.goods.SuperRecommendBannerService; import com.yeshi.fanli.service.inter.goods.SuperRecommendBannerV2Service; import com.yeshi.fanli.service.inter.goods.SuperRecommendSectionService; import com.yeshi.fanli.service.inter.goods.SuperRecommendSpecialService; import com.yeshi.fanli.service.inter.goods.TaoBaoCouponService; import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService; import com.yeshi.fanli.service.inter.homemodule.SpecialService; import com.yeshi.fanli.service.inter.homemodule.SuperSpecialService; import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService; import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; import com.yeshi.fanli.service.inter.lable.QualityGoodsService; import com.yeshi.fanli.service.inter.monitor.MonitorService; import com.yeshi.fanli.service.inter.order.OrderService; import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService; import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; import com.yeshi.fanli.service.inter.user.ShamUserService; import com.yeshi.fanli.service.inter.user.ShareManageService; import com.yeshi.fanli.service.inter.user.TBPidService; import com.yeshi.fanli.service.inter.user.UserGoodsStorageService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.ThreadUtil; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.Utils; import com.yeshi.fanli.util.factory.MonitorFactory; import com.yeshi.fanli.util.taobao.TaoBaoCouponUtil; import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @Controller @RequestMapping("api/v1/user") public class RecommendController { @Resource private RecommendBannerService recommendService; @Resource private SystemService systemService; @Resource private SuperRecommendBannerService superRecommendBannerService; @Resource private SuperRecommendSectionService superRecommendSectionService; @Resource private SuperRecommendSpecialService superRecommendSpecialService; @Resource private RecommendSectionGoodsService recommendSectionGoodsService; @Resource private OrderService orderService; @Resource private ScanHistoryV2Service scanHistoryV2Service; @Resource private ShareManageService shareManageService; @Resource private ConfigService configService; @Resource private HongBaoManageService hongBaoManageService; @Resource private UserInfoService userInfoService; @Resource private TaoBaoOrderUtil taoBaoOrderUtil; @Resource private TaoBaoCouponService taoBaoCouponService; @Resource private JumpDetailService jumpDetailService; @Resource private SystemConfigService systemConfigService; @Resource private CollectionGoodsV2Service collectionGoodsV2Service; @Resource private HongBaoManageMapper hongBaoManageMapper; @Resource private TaoBaoGoodsBriefService taoBaoGoodsBriefService; @Resource private RedisManager redisManager; @Resource private TBPidService tbPidService; @Resource private SystemClientParamsService systemClientParamsService; @Resource private HongBaoManageService manageService; @Resource private TaoBaoUnionConfigService taoBaoUnionConfigService; @Resource private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService; @Resource private QualityGoodsService qualityGoodsService; @Resource private SuperSpecialService superSpecialService; @Resource private SuperRecommendBannerV2Service superRecommendBannerV2Service; @Resource private ShamUserService shamUserService; @Resource private SpecialService specialService; @Resource private SwiperPictureService swiperPictureService; @Resource private MonitorService monitorService; @Resource private CommonGoodsService commonGoodsService; @Resource private UserGoodsStorageService userGoodsStorageService; @Resource private JumpDetailV2Service jumpDetailV2Service; @RequestMapping(value = "getrecommendsection") public void getRecommendSection(AcceptData acceptData, int index, PrintWriter out) { if (index < 0) { index = 0; } System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } List superRecommendSectionList = superRecommendSectionService .getSuperRecommendSectionBySystemId(system.getId()); List recommendSectionList = null; for (SuperRecommendSection superRecommendSection : superRecommendSectionList) { if (recommendSectionList == null) { recommendSectionList = new ArrayList(); } RecommendSection recommendSection = superRecommendSection.getRecommendSection(); // 暂时改变淘特价的跳转地址 if (system.getId() == 7) { recommendSection.setJumpUrl(recommendSection.getJumpUrl().replace("column.html", "column_ttj.html")); } recommendSectionList.add(recommendSection); } if (recommendSectionList == null) { out.print(JsonUtil.loadFalseResult(1, "暂无数据")); return; } Utils.sort(recommendSectionList); int size = recommendSectionList.size(); List recommendSectionGoodsList = null; JSONObject data = new JSONObject(); data.put("count", size); JSONArray dataArr = new JSONArray(); JSONObject validData = null; Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); BigDecimal proportion = manageService.getFanLiRate(); Map> map = recommendSectionGoodsService.getAllSectionGoodsMap(); for (int i = 0; i < size; i++) { validData = new JSONObject(); RecommendSection recommendSection = recommendSectionList.get(i); recommendSectionGoodsList = map.get(recommendSection.getId()); if (recommendSectionGoodsList == null) { continue; } Utils.sort(recommendSectionGoodsList); if (recommendSection.getCounts() < recommendSectionGoodsList.size()) { recommendSectionGoodsList = recommendSectionGoodsList.subList(0, recommendSection.getCounts()); } validData.put("count", recommendSectionGoodsList.size()); validData.put("recommendSection", gson.toJson(recommendSection)); // 替换TaoBaoGoodsBrief JSONArray array = new JSONArray(); Gson gson2 = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); for (RecommendSectionGoods rss : recommendSectionGoodsList) { JSONObject obj = JSONObject.fromObject(gson2.toJson(rss)); String json = gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra( gson2.fromJson(obj.optJSONObject("taoBaoGoodsBrief").toString(), TaoBaoGoodsBrief.class), proportion.toString(), "")); obj.put("taoBaoGoodsBrief", json); array.add(obj); } validData.put("recommendSectionGoodsList", array); dataArr.add(validData); } data.put("data", dataArr); String result = JsonUtil.loadTrueResult(data); if (Constant.IS_OUTNET) redisManager.cacheCommonString("client-api-getRecommendSection", result, 3 * 60); out.print(result); return; } @RequestMapping(value = "getHonestList") public void getHonestList(AcceptData acceptData, PrintWriter out) { System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); List honestList = null; List configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); if ((Integer.parseInt(acceptData.getVersion()) >= 20 && "android".equalsIgnoreCase(acceptData.getPlatform())) || ("ios".equalsIgnoreCase(acceptData.getPlatform()) && Integer.parseInt(acceptData.getVersion()) >= 32))// Android // 大于20的版本和ios大于31的版本返回新的内容 { honestList = new ArrayList<>(); JumpDetail detail = new JumpDetail(); detail.setActivity(String.format("%s.ui.invite.ShareBrowserActivity", Constant.systemCommonConfig.getAndroidBaseactivityName())); detail.setName("网页"); detail.setController("ShonpingShareViewController"); Honest honest = new Honest(); honest.setName("9.9包邮"); honest.setJumpDetail(detail); JSONObject params = new JSONObject(); params.put("url", "http://cdn.apph5.yeshitv.com/special/jingXuanN_9.html?type=9_9"); honest.setParams(params.toString()); honest.setPicture("http://ec-1255749512.file.myqcloud.com/resource/special/9k9.jpg"); honest.setType(1); /* 1:9块9 2:19块9 3:特价好货 4:分享有礼 */ honestList.add(honest); honest = new Honest(); honest.setName("今日新品"); honest.setJumpDetail(detail); params = new JSONObject(); params.put("url", "http://cdn.apph5.yeshitv.com/special/todayNew.html"); honest.setParams(params.toString()); honest.setPicture( "http://ec-1255749512.file.myqcloud.com/resource/special/%E4%BB%8A%E6%97%A5%E6%96%B0%E5%93%81.jpg"); honest.setType(1); honestList.add(honest); honest = new Honest(); honest.setName("大额券"); honest.setJumpDetail(detail); params = new JSONObject(); params.put("url", "http://cdn.apph5.yeshitv.com/special/daEQuan.html"); honest.setParams(params.toString()); honest.setPicture( "http://ec-1255749512.file.myqcloud.com/resource/special/%E5%A4%A7%E9%A2%9D%E5%88%B8.jpg"); honest.setType(1); honestList.add(honest); honest = new Honest(); honest.setName("超高返"); honest.setJumpDetail(detail); params = new JSONObject(); params.put("url", "http://cdn.apph5.yeshitv.com/special/chaoGaoJiangJin.html"); honest.setParams(params.toString()); honest.setPicture( "http://ec-1255749512.file.myqcloud.com/resource/special/%E8%B6%85%E9%AB%98%E8%BF%94.jpg"); honest.setType(1); honestList.add(honest); if (Constant.IS_TEST) { honest = new Honest(); honest.setName("超高返"); honest.setJumpDetail(detail); params = new JSONObject(); params.put("url", "http://cdn.apph5.yeshitv.com/special/chaoGaoJiangJin.html"); honest.setParams(params.toString()); honest.setPicture( "http://ec-1255749512.file.myqcloud.com/resource/special/%E8%B6%85%E9%AB%98%E8%BF%94.jpg"); honest.setType(1); honestList.add(honest); } // if (acceptData.getPlatform().equalsIgnoreCase("ios") // && // configService.iosOnLining(Integer.parseInt(acceptData.getVersion()))) // { // honest = new Honest(); // honest.setName("今日必抢"); // honest.setJumpDetail(detail); // params = new JSONObject(); // params.put("url", // "https://pages.tmall.com/wow/a/act/20051/upr?spm=a219t.7664554.1998457203.704.2ae335d9FKajS5&wh_pid=industry-151736&wh_weex=true&wh_biz=tm"); // honest.setParams(params.toString()); // honest.setPicture("http://ec-1255749512.file.myqcloud.com/resource/jrbq.png"); // honest.setType(1); // honestList.add(honest); // } else { // honest = new Honest(); // honest.setType(4); // honest.setName("邀请有奖"); // honest.setJumpDetail(null); // honest.setPicture( // "http://ec-1255749512.file.myqcloud.com/resource/%E9%82%80%E8%AF%B7%E6%9C%89%E5%A5%96.png"); // honestList.add(honest); // } } else { honestList = new ArrayList<>(); JumpDetail detail = new JumpDetail(); detail.setActivity( String.format("%s.ui.BrowserActivity", Constant.systemCommonConfig.getAndroidBaseactivityName())); detail.setName("网页"); // GoodsDetailController detail.setController("BrowserController"); Honest honest = new Honest(); honest.setName("9块9"); honest.setJumpDetail(detail); JSONObject params = new JSONObject(); params.put("url", "https://temai.m.taobao.com/9k9?pid=" + configList.get(0).getDefaultPid()); honest.setParams(params.toString()); honest.setPicture("http://ec-1255749512.file.myqcloud.com/resource/9.9.png"); honest.setType(1); /* 1:9块9 2:19块9 3:特价好货 4:分享有礼 */ honestList.add(honest); honest = new Honest(); honest.setName("淘宝特卖"); honest.setJumpDetail(detail); params = new JSONObject(); params.put("url", "https://temai.m.taobao.com/index.htm?pid=" + configList.get(0).getDefaultPid()); honest.setParams(params.toString()); honest.setPicture( "http://ec-1255749512.file.myqcloud.com/resource/%E7%89%B9%E4%BB%B7%E5%A5%BD%E8%B4%A7.png"); honest.setType(1); honestList.add(honest); honest = new Honest(); honest.setName("旅游出行"); honest.setJumpDetail(detail); params = new JSONObject(); params.put("url", "https://s.click.taobao.com/t?e=m%3D2%26s%3DBYnJkWG4TG0cQipKwQzePCperVdZeJviEViQ0P1Vf2kguMN8XjClAu02u1KR7qygWNI3LssOJ1ZWrun95JZUdbCdKVyILC1Y4MhN4biK4jW7lfuQJIvfPIK88P%2FKzi0kxxWvg6Zgs%2BufKdnhu%2B44hB9qAVPM25K0cj5d26O5JTnBV7GfGbfBR06AKI8EMgZwgGJ6r9DajuEo%2Bq0qHgj4%2Fr%2BOY9SrDkfyH5S%2BAXadU8u31WUvb1IPCiGFCzYOOqAQ"); honest.setParams(params.toString()); honest.setPicture( "http://ec-1255749512.file.myqcloud.com/resource/%E6%97%85%E6%B8%B8%E5%87%BA%E8%A1%8C.png"); honest.setType(1); honestList.add(honest); if (acceptData.getPlatform().equalsIgnoreCase("ios") && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()))) { honest = new Honest(); honest.setName("今日必抢"); honest.setJumpDetail(detail); params = new JSONObject(); params.put("url", "https://pages.tmall.com/wow/a/act/20051/upr?spm=a219t.7664554.1998457203.704.2ae335d9FKajS5&wh_pid=industry-151736&wh_weex=true&wh_biz=tm"); honest.setParams(params.toString()); honest.setPicture("http://ec-1255749512.file.myqcloud.com/resource/jrbq.png"); honest.setType(1); honestList.add(honest); } else { honest = new Honest(); honest.setType(4); honest.setName("邀请有奖"); honest.setJumpDetail(null); honest.setPicture( "http://ec-1255749512.file.myqcloud.com/resource/%E9%82%80%E8%AF%B7%E6%9C%89%E5%A5%96.png"); honestList.add(honest); } } String result = JsonUtil.loadTrueResult(honestList); out.print(result); return; } @RequestMapping(value = "getrecommendspecial") public void getRecommendSpecial(AcceptData acceptData, PrintWriter out) { System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } String version = acceptData.getVersion(); JumpDetail jumpDetail = null; if (!"1".equals(version) && "android".equalsIgnoreCase(acceptData.getPlatform())) { jumpDetail = jumpDetailService.getlastJumpDetailCache(); } List superRecommendSpecialList = superRecommendSpecialService .getSuperRecommendSpecialBySystemId(system.getId()); List recommendSpecialList = null; for (SuperRecommendSpecial superRecommendSpecial : superRecommendSpecialList) { if (recommendSpecialList == null) { recommendSpecialList = new ArrayList(); } RecommendSpecial recommendSpecial = superRecommendSpecial.getRecommendSpecial(); if (jumpDetail != null) { recommendSpecial.setJumpDetail(jumpDetail); } recommendSpecialList.add(recommendSpecial); } if (recommendSpecialList == null || recommendSpecialList.size() == 0) { out.print(JsonUtil.loadFalseResult(1, "暂无数据")); return; } JSONObject data = new JSONObject(); data.put("count", recommendSpecialList.size()); Gson gson = new Gson(); data.put("data", gson.toJson(recommendSpecialList)); String json = JsonUtil.loadTrueResult(data); out.print(json); } // 猜你喜欢 @RequestMapping(value = "guessLike", method = RequestMethod.POST) public void guessLike(AcceptData acceptData, PrintWriter out) { System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } List taoBaoGoodsBriefs1 = taoBaoCouponService.getTaoBaoCouponList(2); List taoBaoGoodsBriefs2 = new ArrayList<>(); taoBaoGoodsBriefs2.addAll(taoBaoGoodsBriefs1); List taoBaoGoodsBriefs = new ArrayList<>(); for (int i = 0; i < taoBaoGoodsBriefs2.size(); i++) { if (taoBaoGoodsBriefs2.size() > 0 && taoBaoGoodsBriefs.size() < 6) { int pos = (int) (Math.random() * taoBaoGoodsBriefs2.size()); taoBaoGoodsBriefs.add(taoBaoGoodsBriefs2.get(pos)); taoBaoGoodsBriefs2.remove(pos); i--; } } BigDecimal proportion = manageService.getFanLiRate(); JSONArray array = new JSONArray(); TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra; Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create(); for (TaoBaoGoodsBrief taoBaoGoodsBrief : taoBaoGoodsBriefs) { taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), ""); array.add(gson.toJson(taoBaoGoodsBriefExtra)); } JSONObject data = new JSONObject(); data.put("goods", array); data.put("count", array.size()); out.print(JsonUtil.loadTrueResult(data)); } @RequestMapping(value = "getrecommendbanner") public void getRecommendBanner(AcceptData acceptData, PrintWriter out) { System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); JSONObject json = new JSONObject(); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } List superRecommendBanners = superRecommendBannerService .getSuperRecommendBannersBySystem(system); List list = null; for (SuperRecommendBanner superRecommendBanner : superRecommendBanners) { if (list == null) { list = new ArrayList(); } RecommendBanner recommendBanner = superRecommendBanner.getRecommendBanner(); // 淘特价暂时修改 if (system.getId() == 7) { recommendBanner.getJumpDetail().setActivity(recommendBanner.getJumpDetail().getActivity() .replace("com.yeshi.ec.rebate.myapplication", "com.yeshi.ec.taospecial")); } list.add(recommendBanner); } // 测试 // 添加跳转商品详情 // RecommendBanner banner = new RecommendBanner(); // banner.setId(1); // JumpDetail jumpDetail = new JumpDetail(); // jumpDetail.setActivity("com.yeshi.ec.rebate.myapplication.ui.recommend.GoodsBrowserActivity"); // jumpDetail.setController("GoodsDetailController"); // jumpDetail.setName("商品详情"); // // banner.setJumpDetail(jumpDetail); // banner.setName("详情"); // banner.setOrderby(1); // JSONObject param = new JSONObject(); // param.put("id", "568650986077"); // banner.setParams(param.toString()); // banner.setPicture( // "https://gd3.alicdn.com/imgextra/i2/266969832/TB2iiKjoAyWBuNjy0FpXXassXXa_!!266969832.jpg_400x400.jpg_.webp"); // list.add(banner); if (list == null) { json.put("code", "1"); json.put("msg", "暂无数据"); out.print(json); java.lang.System.out.println("json-" + json); return; } json.put("code", 0); JSONObject data = new JSONObject(); data.put("count", list.size()); Gson gson = new Gson(); data.put("data", gson.toJson(list)); json.put("data", data); out.print(json); return; } // 获取商品详情 @RequestMapping(value = "getgoodsdetail", method = RequestMethod.POST) public void getGoodsDetail(final AcceptData acceptData, final String id, final String uid, PrintWriter out) { long begin = java.lang.System.currentTimeMillis(); if (StringUtil.isNullOrEmpty(id)) { out.print(JsonUtil.loadFalseResult(1, "请上传id")); return; } System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); // 淘特价 if (system.getId() == 7) { system = systemService.getSystem("ANDROID", Constant.systemCommonConfig.getAndroidPackageName()); } if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } // 获取淘客参数 ClientTBPid clientTBPid = null; // 用户已经登录 if (!StringUtil.isNullOrEmpty(uid) && Long.parseLong(uid) > 0) { TBPid tbPid = null; if (acceptData.getPlatform().equalsIgnoreCase("android")) { tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_FANLI_ANDROID); if (tbPid != null) { String siteId = tbPid.getPid().split("_")[2]; String adzoneId = tbPid.getPid().split("_")[3]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId); clientTBPid = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId); } else { clientTBPid = tbPidService.getAndroidDefault(); } } else { tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_FANLI_IOS); if (tbPid != null) { String siteId = tbPid.getPid().split("_")[2]; String adzoneId = tbPid.getPid().split("_")[3]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId); clientTBPid = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId); } else { clientTBPid = tbPidService.getIOSDefault(); } } } else { if (acceptData.getPlatform().equalsIgnoreCase("android")) clientTBPid = tbPidService.getAndroidDefault(); else clientTBPid = tbPidService.getIOSDefault(); } TaoBaoGoodsBrief tb = null; try { TaoKeAppInfo app = new TaoKeAppInfo(); TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(clientTBPid.getSiteId()); app.setAdzoneId(clientTBPid.getAdZoneId()); app.setAppKey(clientTBPid.getAppKey()); app.setAppSecret(config.getAppSecret()); app.setPid(clientTBPid.getPid()); tb = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app); } catch (NumberFormatException e1) { e1.printStackTrace(); } catch (TaobaoGoodsDownException e1) { out.print(JsonUtil.loadFalseResult(2, "商品已下架")); return; } if (tb != null) { // tb.setAuctionUrl(null); tb.setId(null); int type = 0; if ("android".equalsIgnoreCase(acceptData.getPlatform())) type = PidUser.TYPE_FANLI_ANDROID; else type = PidUser.TYPE_FANLI_IOS; List configList = taoBaoUnionConfigService.getConfigByTypeCache(type); Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); JSONObject data = new JSONObject(); TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(tb, configList.get(0)); if (!StringUtil.isNullOrEmpty(tb.getCouponLink()) && taoBaoGoodsBriefExtra.getTaoBaoQuanInfo() != null) taoBaoGoodsBriefExtra.getTaoBaoQuanInfo().setCouponLink(tb.getCouponLink()); taoBaoGoodsBriefExtra.setAuctionUrl(tb.getAuctionUrl()); if (uid != null && !"".equals(uid.trim())) { CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(Long.parseLong(uid), Long.parseLong(id)); data.put("collection", collectionGoods != null ? true : false); } data.put("tbPidInfo", clientTBPid); JSONObject taobaoJson = JSONObject.fromObject(gson.toJson(taoBaoGoodsBriefExtra)); if (taoBaoGoodsBriefExtra.getImgList() != null) taoBaoGoodsBriefExtra.getImgList().add(0, taoBaoGoodsBriefExtra.getPictUrl()); taobaoJson.put("imgList", taoBaoGoodsBriefExtra.getImgList()); taobaoJson.put("saleCount", taoBaoGoodsBriefExtra.getSalesCount());// 销量(和salesCount一致,此处处理兼容) if (taoBaoGoodsBriefExtra.getTaoBaoQuanInfo() != null) taobaoJson.put("coupon", true); else taobaoJson.put("coupon", false); // taoBaoGoodsBriefExtra.setAuctionUrl(null); data.put("taobao", taobaoJson); String info = configService.get("detail_prompt"); data.put("info", info); String onlyInfo = configService.get("only_info"); data.put("only", onlyInfo); data.put("helpUrl", configService.get("old_goods_detail_help_url")); int showType = taoBaoGoodsBriefExtra.getShowType(); String price = ""; if (showType == 1 || showType == 3) { price = taoBaoGoodsBriefExtra.getQuanPrice() + ""; } else { price = taoBaoGoodsBriefExtra.getZkPrice() + ""; } String appName = systemConfigService.get("appName", system); data.put("sharePrice", "¥" + price + "元 送" + appName + "红包¥" + taoBaoGoodsBriefExtra.getTaoBaoHongBaoInfo().getHongbao() + "元 "); data.put("shareTitle", taoBaoGoodsBriefExtra.getTitle()); data.put("shareContent", "¥" + price + "元"); data.put("shareImg", taoBaoGoodsBriefExtra.getPictUrl()); String html = configService.get("downAPP"); data.put("downAPP", html); String shareSinaContent = configService.get("shareSinaContent"); data.put("shareSina", "¥" + price + "元 送" + appName + "红包¥" + taoBaoGoodsBriefExtra.getTaoBaoHongBaoInfo().getHongbao() + "元 " + taoBaoGoodsBriefExtra.getTitle() + shareSinaContent); data.put("sharemoney", "分享奖金 ¥" + taoBaoGoodsBriefService.getShareGoodsUserHongBao(tb) + "元"); data.put("shareHongBao", "¥" + taoBaoGoodsBriefService.getShareGoodsUserHongBao(tb)); out.print(JsonUtil.loadTrueResult(data)); final TaoBaoGoodsBrief tbb = tb; ThreadUtil.run(new Runnable() { public void run() { // 添加浏览记录 try { scanHistoryV2Service.addScanHistory(StringUtil.isNullOrEmpty(uid) ? null : Long.parseLong(uid), acceptData.getDevice(), tbb); } catch (Exception e) { e.printStackTrace(); } } }); } else { out.print(JsonUtil.loadFalseResult(2, "商品已下架")); ThreadUtil.run(new Runnable() { public void run() { recommendSectionGoodsService.deleteRecommendSectionGoodsByTbAuctionId(Long.parseLong(id)); } }); } long end = java.lang.System.currentTimeMillis(); java.lang.System.out.println("耗时:" + (end - begin)); return; } // 新版商品图文详情 @RequestMapping(value = "getnewgoodsdetail", method = RequestMethod.POST) public void getNewGoodsDetail(AcceptData acceptData, String id, String uid, HttpServletRequest request, PrintWriter out) { if ("0".equalsIgnoreCase(uid)) uid = ""; if (StringUtil.isNullOrEmpty(id)) { out.print(JsonUtil.loadFalseResult(1, "请上传id")); return; } System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } JSONObject data = new JSONObject(); data.put("invalid", false); // IOS是否正在上线 if ("ios".equalsIgnoreCase(acceptData.getPlatform())) { data.put("iosOnling", configService.iosOnLining(Integer.parseInt(acceptData.getVersion()))); } long startTime = java.lang.System.currentTimeMillis(); // 获取淘客参数 ClientTBPid clientTBPid = null; // 用户已经登录 if (!StringUtil.isNullOrEmpty(uid)) { TBPid tbPid = null; if (acceptData.getPlatform().equalsIgnoreCase("android")) { tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_FANLI_ANDROID); if (tbPid != null) { String siteId = tbPid.getPid().split("_")[2]; String adzoneId = tbPid.getPid().split("_")[3]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId); clientTBPid = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId); } else { clientTBPid = tbPidService.getAndroidDefault(); } } else { tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_FANLI_IOS); if (tbPid != null) { String siteId = tbPid.getPid().split("_")[2]; String adzoneId = tbPid.getPid().split("_")[3]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId); clientTBPid = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId); } else { clientTBPid = tbPidService.getIOSDefault(); } } } else { if (acceptData.getPlatform().equalsIgnoreCase("android")) clientTBPid = tbPidService.getAndroidDefault(); else clientTBPid = tbPidService.getIOSDefault(); } LogHelper.test("获取PID耗时:" + (java.lang.System.currentTimeMillis() - startTime)); // 是否在服务端进行转链 boolean convertInServer = configService.isConvertTaoBaoLinkInServer(); final String clientPid = clientTBPid.getPid(); List taskList = new ArrayList<>(); taskList.add("goods"); taskList.add("imgs"); List detailImgs = new ArrayList<>(); JSONArray detailImgsSize = new JSONArray(); final List goodsList = new ArrayList<>(); taskList.stream().parallel().forEach(task -> { if (task.equalsIgnoreCase("goods")) {// 获取商品详情 // TaoBaoGoodsBrief tb = null; JSONObject ticket = new JSONObject(); TaoBaoGoodsBrief goods = null; if (convertInServer) { String appId = clientPid.split("_")[2]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(appId); TaoKeAppInfo app = new TaoKeAppInfo(); app.setAdzoneId(clientPid.split("_")[3]); app.setAppKey(config.getAppKey()); app.setAppSecret(config.getAppSecret()); app.setPid(clientPid); try { goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app); if (goods != null) { ticket.put("clickUrl", goods.getAuctionUrl()); // 测试使用 ticket.put("couponUrl", goods.getCouponLink()); data.put("ticket", ticket); } } catch (NumberFormatException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { try { monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, 0, "商品下架")); } catch (Exception e1) { e1.printStackTrace(); } } } else { try { goods = redisManager.getTaoBaoGoodsBrief(Long.parseLong(id)); } catch (TaobaoGoodsDownException e) { try { monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, 0, "商品下架")); } catch (Exception e1) { e1.printStackTrace(); } // 商品下架 ThreadUtil.run(new Runnable() { public void run() { taoBaoGoodsUpdateService.deleteTaoBaoGoods(Long.parseLong(id)); } }); } } if (goods != null) { goodsList.add(goods); final TaoBaoGoodsBrief newGoods = goods; ThreadUtil.run(new Runnable() { public void run() { try { // 更新商品 LogHelper.test("更新商品详情:" + newGoods.getAuctionId()); taoBaoGoodsUpdateService.updateTaoBaoGoods(newGoods); } catch (TaobaoGoodsUpdateException e) { } } }); } } else if (task.equalsIgnoreCase("imgs")) {// 获取图文详情 List imgs = redisManager.getTaoBaoGoodsDetailImgs(Long.parseLong(id)); if (imgs != null && imgs.size() > 0) { detailImgs.clear(); detailImgsSize.clear(); for (ImageInfo imgInfo : imgs) { detailImgs.add(imgInfo.getPicture()); } for (ImageInfo imgInfo : imgs) { if (imgInfo.getWidth() <= 0) { detailImgsSize.clear(); break; } else { JSONObject size = new JSONObject(); size.put("w", imgInfo.getWidth()); size.put("h", imgInfo.getHeight()); detailImgsSize.add(size); } } } } }); TaoBaoGoodsBrief tb = null; if (goodsList.size() > 0) tb = goodsList.get(0); if (tb == null) { out.print(JsonUtil.loadFalseResult(2, "商品不存在")); return; } // 获取PID String pid = ""; JSONObject goods = new JSONObject(); // if (tb.getImgList() == null) tb.setImgList(new ArrayList<>()); tb.getImgList().add(0, tb.getPictUrl()); List finalImgList = new ArrayList<>(); for (String img : tb.getImgList()) { // img=TbImgUtil.getTBSizeImgWebp(img, 600); finalImgList.add(img); } goods.put("auctionId", tb.getAuctionId()); goods.put("imgList", finalImgList); goods.put("title", tb.getTitle()); goods.put("userType", tb.getUserType() == 1 ? 2 : 1); goods.put("price", tb.getReservePrice().toString()); goods.put("zkPrice", tb.getZkPrice().toString()); BigDecimal proportion = manageService.getFanLiRate(); String hongBao = TaoBaoUtil.getGoodsHongBaoInfo(tb, proportion); goods.put("hongBao", hongBao); // 30天销量 goods.put("saleCount", TaoBaoUtil.getSaleCount(tb.getBiz30day())); // 获取详细的图文信息 goods.put("detailImgs", detailImgs); goods.put("detailImgsSize", detailImgsSize); String jumpUrl = "https://item.taobao.com/item.htm?id=" + tb.getAuctionId(); // 分享赚 data.put("shareMoney", "¥" + taoBaoGoodsBriefService.getShareGoodsUserHongBao(tb)); // 判断收藏 if (!StringUtil.isNullOrEmpty(uid)) { CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(Long.parseLong(uid), Long.parseLong(id)); data.put("collected", collectionGoods != null ? true : false); } else data.put("collected", false); pid = clientTBPid.getPid(); LogHelper.test(String.format("PID: uid-%s pid-%s", uid + "", pid)); SystemClientParams params = systemClientParamsService.getSystemClientParamsBySystemAndKey(system, "goods_detail_jump_taobao"); // 测试 if ("1".equalsIgnoreCase((params.getValue() + "").trim())) data.put("native", true); else data.put("native", false); goods.put("coupon", StringUtil.isNullOrEmpty(tb.getCouponInfo()) ? false : true); // 获取券信息 if (!StringUtil.isNullOrEmpty(tb.getCouponInfo())) { BigDecimal quanPrice = TaoBaoUtil.getAfterUseCouplePrice(tb); JSONObject couponInfo = new JSONObject(); couponInfo.put("couponPrice", quanPrice.toString()); // 服务端转链 if (convertInServer && !StringUtil.isNullOrEmpty(tb.getCouponLink())) couponInfo.put("couponUrl", tb.getCouponLink()); else couponInfo.put("couponUrl", TaoBaoCouponUtil.getCoupleUrl(tb.getCouponActivityId() + "", pid, tb.getAuctionId() + "")); couponInfo.put("couponAmount", NumberUtil.subZeroAndDot(tb.getCouponAmount().toString())); couponInfo.put("couponTime", "使用期限:" + tb.getCouponEffectiveStartTime().replace("-", ".") + "-" + tb.getCouponEffectiveEndTime().replace("-", ".")); goods.put("couponInfo", couponInfo); } // 測試 // clientTBPid.setAdZoneId("12"); // clientTBPid.setPid("mm_123123_123123_123213"); data.put("tbPidInfo", clientTBPid); if (!StringUtil.isNullOrEmpty(tb.getCouponActivityId())) {// 有券,跳转券链接 jumpUrl = TaoBaoCouponUtil.getCoupleUrl(tb.getCouponActivityId(), clientTBPid.getPid(), "" + tb.getAuctionId()); } // 设置跳转链接 if (convertInServer) { if (!StringUtil.isNullOrEmpty(tb.getCouponLink())) jumpUrl = tb.getCouponLink(); else jumpUrl = tb.getAuctionUrl(); } goods.put("jumpUrl", jumpUrl); goods.put("shopInfo", redisManager.getTBShopInfo(tb.getShopTitle(), tb.getSellerId(), tb.getAuctionId())); data.put("goods", goods); String shareUrl = String.format("%s?id=" + tb.getAuctionId(), Constant.systemCommonConfig.getAppShareInfoUrl()); data.put("shareUrl", shareUrl); out.print(JsonUtil.loadTrueResult(data)); final String tempUid = uid; final TaoBaoGoodsBrief goodsInfo = tb; ThreadUtil.run(new Runnable() { public void run() { // 添加浏览记录 try { scanHistoryV2Service.addScanHistory( StringUtil.isNullOrEmpty(tempUid) ? null : Long.parseLong(tempUid), acceptData.getDevice(), goodsInfo); } catch (NumberFormatException e) { e.printStackTrace(); } catch (CommonGoodsException e) { e.printStackTrace(); } catch (ScanHistoryException e) { e.printStackTrace(); } } }); } /** * 淘宝转链 * * @param acceptData * @param uid * @param id * @param out */ @RequestMapping(value = "gettaobaolink") public void getTaobaoLink(AcceptData acceptData, String uid, Long id, PrintWriter out) { ClientTBPid clientTBPid = null; // 用户已经登录 if (!StringUtil.isNullOrEmpty(uid)) { TBPid tbPid = null; if (acceptData.getPlatform().equalsIgnoreCase("android")) { tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_FANLI_ANDROID); if (tbPid != null) { String siteId = tbPid.getPid().split("_")[2]; String adzoneId = tbPid.getPid().split("_")[3]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId); clientTBPid = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId); } else { clientTBPid = tbPidService.getAndroidDefault(); } } else { tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_FANLI_IOS); if (tbPid != null) { String siteId = tbPid.getPid().split("_")[2]; String adzoneId = tbPid.getPid().split("_")[3]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId); clientTBPid = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId); } else { clientTBPid = tbPidService.getIOSDefault(); } } } else { if (acceptData.getPlatform().equalsIgnoreCase("android")) clientTBPid = tbPidService.getAndroidDefault(); else clientTBPid = tbPidService.getIOSDefault(); } JSONObject data = new JSONObject(); // 是否在服务端进行转链 boolean convertInServer = configService.isConvertTaoBaoLinkInServer(); TaoBaoGoodsBrief tb = null; JSONObject ticket = new JSONObject(); if (convertInServer) { String appId = clientTBPid.getPid().split("_")[2]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(appId); TaoKeAppInfo app = new TaoKeAppInfo(); app.setAdzoneId(clientTBPid.getPid().split("_")[3]); app.setAppKey(config.getAppKey()); app.setAppSecret(config.getAppSecret()); app.setPid(clientTBPid.getPid()); try { tb = TaoKeApiUtil.searchGoodsDetail(id, app); if (tb != null) { ticket.put("clickUrl", tb.getAuctionUrl()); ticket.put("couponUrl", tb.getCouponLink()); data.put("ticket", ticket); } } catch (NumberFormatException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } } data.put("pidInfo", clientTBPid); out.print(JsonUtil.loadTrueResult(data)); } // 根据商品获取推荐 @RequestMapping(value = "getgoodsrecommend", method = RequestMethod.POST) public void getGoodsRecommend(final AcceptData acceptData, long id, PrintWriter out) { System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } List goodsList = TaoKeApiUtil.getRelationGoodsRecommend(id, 6); if (goodsList == null) goodsList = new ArrayList<>(); if (goodsList == null || goodsList.size() == 0)// 重新做推荐 { TaoBaoGoodsBrief goods = null; try { goods = redisManager.getTaoBaoGoodsBrief(id); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } if (goods == null)// 商品下线 { // 从我们的商品库搜索 CommonGoods cgoods = commonGoodsService.getCommonGoodsByGoodsIdAndGoodsType(id, CommonGoods.GOODS_TYPE_TB); if (cgoods != null) {// 商品有本地缓存 // 按名字搜索商品 SearchFilter sf = new SearchFilter(); sf.setKey(cgoods.getTitle().substring(0, cgoods.getTitle().length() / 2)); TaoBaoSearchResult result = TaoBaoUtil.search(sf); if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 0) for (TaoBaoGoodsBrief gds : result.getTaoBaoGoodsBriefs()) { if (goodsList.size() < 6) goodsList.add(gds); } } } // 需要另做推荐 if (goodsList.size() < 6) { List list = recommendSectionGoodsService.getSectionGoods(10); if (list != null) for (int i = 0; i < list.size(); i++) { if (goodsList.size() < 6) goodsList.add(list.get(i).getTaoBaoGoodsBrief()); } } } final List recommendGoodsList = new ArrayList<>(); goodsList.parallelStream().forEach(goods -> { // 获取详情 TaoBaoGoodsBrief taoBaoGoodsBrief = null; try { taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(goods.getAuctionId()); } catch (Exception e) { e.printStackTrace(); } if (taoBaoGoodsBrief != null) recommendGoodsList.add(taoBaoGoodsBrief); }); // 取偶数个数据 if (recommendGoodsList.size() % 2 != 0) { recommendGoodsList.remove(recommendGoodsList.size() - 1); } List re = new ArrayList(); BigDecimal proportion = manageService.getFanLiRate(); if (recommendGoodsList != null) for (TaoBaoGoodsBrief taoBaoGoodsBrief : recommendGoodsList) { if (taoBaoGoodsBrief == null) continue; re.add(TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), "")); } out.print(JsonUtil.loadTrueResult(JsonUtil.getApiCommonGson().toJson(re))); } // 上传订单 @RequestMapping(value = "reportorder", method = RequestMethod.POST) public void reportOrder(AcceptData acceptData, String order, String auctionUrl, String money, long uid, PrintWriter out, HttpServletRequest request) { LogHelper.userOrder("[ip:" + IPUtil.getRemotIP(request) + "],上传的淘宝订单ID:" + order + ",用户ID:" + uid + ",订单金额:" + money + ",商品链接:" + auctionUrl); if (StringUtil.isNullOrEmpty(order)) { out.print(JsonUtil.loadFalseResult(1, "请上传order")); LogHelper.userOrder("[ip:" + IPUtil.getRemotIP(request) + "] 上传的订单为空!上传订单失败!"); return; } UserInfo user = userInfoService.getUserById(uid); if (user == null) { out.print(JsonUtil.loadFalseResult(1, "请上传uid")); LogHelper.userOrder("[ip:" + IPUtil.getRemotIP(request) + "] 用户不存在!上传订单失败!"); return; } order = order.replace("[", "").replace("]", ""); String[] orderArr = order.split(","); for (String tbOrder : orderArr) { Order or = new Order(); or.setBeizhu("系统添加"); or.setCreatetime(java.lang.System.currentTimeMillis()); or.setDrawbackTime(0L); or.setOrderId(tbOrder.trim()); or.setOrderType(1); or.setState(1); or.setUserInfo(new UserInfo(uid)); or.setVersion(2); boolean b; try { b = orderService.addOrder(or); } catch (Exception e) { e.printStackTrace(); b = false; } if (b) { LogHelper.userOrder("用户ID" + uid + "下单成功!订单ID[" + or.getOrderId() + "]"); } else { LogHelper.userOrder("用户ID" + uid + "下单失败!订单ID[" + or.getOrderId() + "]"); } } out.print(JsonUtil.loadTrueResult("上报成功")); return; } // 获取浏览记录 @RequestMapping(value = "getscanhistory", method = RequestMethod.POST) public void getScanHistory(AcceptData acceptData, String uid, int page, PrintWriter out) { if (page < 0) { out.print(JsonUtil.loadFalseResult(1, "page不小于0")); return; } page = page + 1; System sys = systemService.getSystem(acceptData.getPlatform(), acceptData.getPackages()); if (sys == null) { out.print(JsonUtil.loadFalseResult(1, "不存在该系统")); return; } List list = scanHistoryV2Service.getScanHistoryByDeviceOrUid( StringUtil.isNullOrEmpty(uid) ? null : Long.parseLong(uid), acceptData.getDevice(), page, 20); long count = scanHistoryV2Service.getCountByDeviceOrUid( StringUtil.isNullOrEmpty(uid) ? null : Long.parseLong(uid), acceptData.getDevice()); JSONObject data = new JSONObject(); data.put("count", count); JSONArray array = new JSONArray(); GsonBuilder gsonBuilder = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()); gsonBuilder.excludeFieldsWithoutExposeAnnotation(); gsonBuilder.registerTypeAdapter(Date.class, new JsonSerializer() { @Override public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) { if (value == null) { return new JsonPrimitive(""); } else { return new JsonPrimitive(value.getTime() + ""); } } }); Gson gson = gsonBuilder.create(); if (list != null) { BigDecimal proportion = manageService.getFanLiRate(); for (ScanHistoryV2 sh : list) { TaoBaoGoodsBrief goods = TaoBaoUtil.convert(sh.getCommonGoods()); goods.setId(sh.getId()); TaoBaoGoodsBriefExtra extra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(goods, proportion.toString(), ""); extra.setCreatetime(sh.getCreateTime()); array.add(gson.toJson(extra)); } } data.put("data", array); out.print(JsonUtil.loadTrueResult(data)); return; } @RequestMapping(value = "deletescanhistory", method = RequestMethod.POST) public void deleteScanHistory(AcceptData acceptData, String type, String uid, String ids, PrintWriter out) { System sys = systemService.getSystem(acceptData.getPlatform(), acceptData.getPackages()); if (sys == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } if ("0".equals(type)) { String[] idStr = ids.split(","); for (String auctionIdStr : idStr) { scanHistoryV2Service.deleteByAuctionIdAndDeviceOrUid( StringUtil.isNullOrEmpty(uid) ? null : Long.parseLong(uid), acceptData.getDevice(), Long.parseLong(auctionIdStr)); } } else { scanHistoryV2Service.deleteByDeviceOrUid(StringUtil.isNullOrEmpty(uid) ? null : Long.parseLong(uid), acceptData.getDevice()); } out.print(JsonUtil.loadTrueResult("")); return; } // 根据原链接获取推广链接 @RequestMapping(value = "getTaoBaoLink", method = RequestMethod.POST) public void getTaoBaoLink(AcceptData acceptData, String url, PrintWriter out) { if (!url.contains("//detail.m.tmall.com/item.htm") && !url.contains("h5.m.taobao.com/awp/core/detail.htm") && !url.contains("item.taobao.com/item.htm")) { out.print(JsonUtil.loadFalseResult(1, "链接错误")); return; } String params = url.split("\\?")[1]; String[] ps = params.split("&"); String id = ""; for (String st : ps) { if (st.contains("id=")) { id = st.replace("id=", ""); break; } } if (StringUtil.isNullOrEmpty(id)) { out.print(JsonUtil.loadFalseResult(1, "商品ID错误")); return; } /** * 防止请求频率过高 * */ if (Constant.IS_OUTNET) { String key = "linkParse-" + acceptData.getDevice() + "-" + id; String value = redisManager.getCommonString(key); if (!StringUtil.isNullOrEmpty(value)) { out.print(JsonUtil.loadFalseResult(11, "请求频率限制")); return; } redisManager.cacheCommonString(key, "1", 5);// 5s间隔 } TaoBaoGoodsBrief goods = null; try { goods = redisManager.getTaoBaoGoodsBrief(Long.parseLong(id)); } catch (NumberFormatException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } if (goods == null) { out.print(JsonUtil.loadFalseResult(2, "商品")); return; } JSONObject data = new JSONObject(); data.put("id", id); out.print(JsonUtil.loadTrueResult(data)); return; } /** * 根据设备信息获取猜你喜欢的内容 * * @param acceptData * @param imei * -Android的IMEI信息 * @param idfa * -IOS的idfa广告标识信息 */ @RequestMapping(value = "guessLikeByDevice") public void guessUserLikeByDevice(AcceptData acceptData, String imei, String idfa, int page, HttpServletRequest request, PrintWriter out) { int pageSize = Constant.PAGE_SIZE; JSONArray array = new JSONArray(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create(); // 从推荐来 if (page <= 1) { array.clear(); Map map = hongBaoManageService.convertMap(); BigDecimal proportion = manageService.getFanLiRate(); 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 goodsList = new ArrayList<>(); for (TaoBaoGoodsBrief goods : result.getTaoBaoGoodsBriefs()) { if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && goods.getCouponAmount() != null && goods.getCouponAmount().compareTo(new BigDecimal("5")) >= 0 && goods.getBiz30day() > 1000) goodsList.add(goods); } 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 (TaoBaoGoodsBrief goods : goodsList) { array.add(gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(goods, proportion.toString(), ""))); } } else { try { monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, (int) (java.lang.System.currentTimeMillis() - startTime), "无推荐")); } catch (Exception e) { e.printStackTrace(); } } } JSONArray localArray = qualityGoodsService.getRecommendToIndex((page - 1) * pageSize, pageSize, proportion.toString()); array.addAll(localArray); } else {// 从精选库来 Map map = hongBaoManageService.convertMap(); BigDecimal proportion = manageService.getFanLiRate(); array = qualityGoodsService.getRecommendToIndex((page - 1) * pageSize, pageSize, proportion.toString()); if (array == null) { out.print(JsonUtil.loadFalseResult("没有更多了")); return; } long count = qualityGoodsService.countRecommendToIndex(proportion.toString()); } JSONObject data = new JSONObject(); data.put("data", array); data.put("count", 1000); out.print(JsonUtil.loadTrueResult(data)); } /** * 获取首页推荐信息 * * @param acceptData * @param out */ @RequestMapping(value = "getRecommendInfo") public void getRecommendHomeInfo(AcceptData acceptData, PrintWriter out) { System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } // 首页Banner List listBanner = null; List listRecommendBanner = superRecommendBannerV2Service .getSuperRecommendBannerV2sBySystem(system); if (listRecommendBanner != null && listRecommendBanner.size() > 0) { listBanner = new ArrayList(); for (SuperRecommendBannerV2 superRecommendBanner : listRecommendBanner) { RecommendBannerV2 recommendBanner = superRecommendBanner.getRecommendBanner(); // 淘特价暂时修改 if (system.getId() == 7) { recommendBanner.getJumpDetail().setActivity(recommendBanner.getJumpDetail().getActivity() .replace("com.yeshi.ec.rebate.myapplication", "com.yeshi.ec.taospecial")); } listBanner.add(recommendBanner); } } JSONObject root = new JSONObject(); root.put("banner", listBanner); List honestList = null; List specialList = null; Special miaoShaSpecial = new Special(); // 首页推荐专题 List listSuper = superSpecialService.listBySystemAndCardCache(system.getId(), "index"); if (listSuper != null && listSuper.size() > 0) { honestList = new ArrayList(); specialList = new ArrayList(); for (int i = 0; i < listSuper.size(); i++) { Special special = listSuper.get(i).getSpecial(); special.setCreatetime(null); special.setUpdatetime(null); if ("限时秒杀".equals(special.getName())) { miaoShaSpecial = special; continue; } if (i < 5) { // 5大专题 honestList.add(special); } else { // 其他专题 specialList.add(special); } } } root.put("honest", honestList); root.put("special", specialList); /* 限时秒杀 - 时间处理 */ JSONObject msJSON = JSONObject.fromObject(new Gson().toJson(miaoShaSpecial)); // 获取秒杀 int[] hours = new int[] { 0, 9, 12, 14, 16, 20, 22 }; int hour = -1; Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(Long.parseLong(acceptData.getTime())); int nowHour = calendar.get(Calendar.HOUR_OF_DAY); for (int i = 0; i < hours.length - 1; i++) { if (nowHour >= hours[i] && nowHour < hours[i + 1]) { hour = hours[i + 1]; break; } } if (hour < 0) hour = 24; long time = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(calendar.getTimeInMillis(), "yyyy-MM-dd"), "yyyy-MM-dd") + 1000 * 60 * 60 * hour; msJSON.put("time", time); root.put("miaoSha", msJSON); out.print(JsonUtil.loadTrueResult(root)); } /** * 新版推荐专题管理(1.4.0) * * @param acceptData * @param out */ @RequestMapping(value = "getNewRecommendInfo") public void getNewRecommendInfo(AcceptData acceptData, String specialCard, String swiperCard, PrintWriter out) { System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } List listswiper = null; if (!StringUtil.isNullOrEmpty(specialCard)) { try { listswiper = swiperPictureService.getByBannerCard(swiperCard); if (listswiper != null && listswiper.size() > 0) { for (SwiperPicture swiperPicture : listswiper) { swiperPicture.setBannerId(null); swiperPicture.setCreatetime(null); swiperPicture.setUpdatetime(null); swiperPicture.setState(null); swiperPicture.setRemark(null); } } } catch (Exception e) { e.printStackTrace(); } } Special miaoShaSpecial = null; List honestList = new ArrayList(); List specialList = new ArrayList(); if (!StringUtil.isNullOrEmpty(specialCard)) { try { List listSpecial = specialService.listBySystemAndCard(specialCard, system.getId()); if (listSpecial != null && listSpecial.size() > 0) { for (Special special : listSpecial) { special.setCreatetime(null); special.setUpdatetime(null); special.setState(null); special.setRemark(null); special.setCard(null); special.setCardId(null); if ("限时秒杀".equals(special.getName())) { miaoShaSpecial = special; continue; } if ("arc".equals(special.getShowType())) { // 同一行专题 honestList.add(special); } else { // 其他专题 specialList.add(special); } } } } catch (Exception e) { e.printStackTrace(); } } /* 限时秒杀 - 时间处理 */ JSONObject msJSON = JSONObject.fromObject(new Gson().toJson(miaoShaSpecial)); if (miaoShaSpecial != null) { // 获取秒杀 int[] hours = new int[] { 0, 9, 12, 14, 16, 20, 22 }; int hour = -1; Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(Long.parseLong(acceptData.getTime())); int nowHour = calendar.get(Calendar.HOUR_OF_DAY); for (int i = 0; i < hours.length - 1; i++) { if (nowHour >= hours[i] && nowHour < hours[i + 1]) { hour = hours[i + 1]; break; } } if (hour < 0) hour = 24; long time = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(calendar.getTimeInMillis(), "yyyy-MM-dd"), "yyyy-MM-dd") + 1000 * 60 * 60 * hour; msJSON.put("time", time); } JSONObject root = new JSONObject(); root.put("banner", listswiper); root.put("honest", honestList); root.put("special", specialList); root.put("miaoSha", msJSON); // 增加邀请有奖 JSONObject invite = new JSONObject(); JumpDetailV2 jumpDetail = jumpDetailV2Service.getByTypeCache("invite"); invite.put("jumpDetail", jumpDetail); invite.put("picture", "http://ec-1255749512.file.myqcloud.com/resource/weex/img/invite_input_img.png"); if ("ios".equalsIgnoreCase(acceptData.getPlatform()) && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()))) { // 如果IOS当前版本处于审核状态就不返回 } else { // 按照版本返回,版本覆盖足够后可删除 if (("android".equalsIgnoreCase(acceptData.getPlatform()) && Integer.parseInt(acceptData.getVersion()) > 30) || ("ios".equalsIgnoreCase(acceptData.getPlatform()) && Integer.parseInt(acceptData.getVersion()) > 37)) { root.put("invite", invite); } } out.print(JsonUtil.loadTrueResult(root)); } /** * 商品基本详情 (1.4.0) * * @param acceptData * @param id * @param uid * @param out */ @RequestMapping(value = "getgoodsinfo", method = RequestMethod.POST) public void getGoodsInfo(AcceptData acceptData, String id, String uid, PrintWriter out) { if ("0".equalsIgnoreCase(uid)) { uid = ""; } if (StringUtil.isNullOrEmpty(id)) { out.print(JsonUtil.loadFalseResult(1, "请上传id")); return; } System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } JSONObject data = new JSONObject(); data.put("invalid", false); // IOS是否正在上线 if ("ios".equalsIgnoreCase(acceptData.getPlatform())) { String version = acceptData.getVersion(); data.put("iosOnling", configService.iosOnLining(Integer.parseInt(version))); } long startTime = java.lang.System.currentTimeMillis(); // 获取淘客参数 ClientTBPid clientTBPid = null; if (StringUtil.isNullOrEmpty(uid)) { // 用户未登录 if (acceptData.getPlatform().equalsIgnoreCase("android")) { clientTBPid = tbPidService.getAndroidDefault(); } else { clientTBPid = tbPidService.getIOSDefault(); } } else { // 用户已经登录 TBPid tbPid = null; if (acceptData.getPlatform().equalsIgnoreCase("android")) { tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_FANLI_ANDROID); if (tbPid == null) { clientTBPid = tbPidService.getAndroidDefault(); } else { String siteId = tbPid.getPid().split("_")[2]; String adzoneId = tbPid.getPid().split("_")[3]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId); clientTBPid = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId); } } else { tbPid = tbPidService.getTBPid(Long.parseLong(uid), PidUser.TYPE_FANLI_IOS); if (tbPid == null) { clientTBPid = tbPidService.getIOSDefault(); } else { String siteId = tbPid.getPid().split("_")[2]; String adzoneId = tbPid.getPid().split("_")[3]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId); clientTBPid = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId); } } } LogHelper.test("获取PID耗时:" + (java.lang.System.currentTimeMillis() - startTime)); final String clientPid = clientTBPid.getPid(); final List goodsList = new ArrayList<>(); // 是否在服务端进行转链 boolean convertInServer = configService.isConvertTaoBaoLinkInServer(); List taskList = new ArrayList<>(); // 获取商品基本信息 taskList.add("goods"); taskList.stream().parallel().forEach(task -> { if (task.equalsIgnoreCase("goods")) { JSONObject ticket = new JSONObject(); TaoBaoGoodsBrief goods = null; if (!convertInServer) { try { goods = redisManager.getTaoBaoGoodsBrief(Long.parseLong(id)); } catch (TaobaoGoodsDownException e) { // 商品下架 ThreadUtil.run(new Runnable() { public void run() { taoBaoGoodsUpdateService.offlineTaoBaoGoods(Long.parseLong(id)); } }); } } else { String appId = clientPid.split("_")[2]; TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(appId); TaoKeAppInfo app = new TaoKeAppInfo(); app.setAdzoneId(clientPid.split("_")[3]); app.setAppKey(config.getAppKey()); app.setAppSecret(config.getAppSecret()); app.setPid(clientPid); try { goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app); if (goods != null) { ticket.put("clickUrl", goods.getAuctionUrl()); // 测试使用 ticket.put("couponUrl", goods.getCouponLink()); data.put("ticket", ticket); } } catch (NumberFormatException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { ThreadUtil.run(new Runnable() { public void run() { taoBaoGoodsUpdateService.offlineTaoBaoGoods(Long.parseLong(id)); } }); } } if (goods != null) { goodsList.add(goods); final TaoBaoGoodsBrief newGoods = goods; ThreadUtil.run(new Runnable() { public void run() { try { // 更新商品 LogHelper.test("更新商品详情:" + newGoods.getAuctionId()); taoBaoGoodsUpdateService.updateTaoBaoGoods(newGoods); } catch (TaobaoGoodsUpdateException e) { } } }); } } }); TaoBaoGoodsBrief tb = null; if (goodsList.size() > 0) { tb = goodsList.get(0); } if (tb == null) { out.print(JsonUtil.loadFalseResult(2, "商品不存在")); return; } if (tb.getImgList() == null) { tb.setImgList(new ArrayList<>()); } tb.getImgList().add(0, tb.getPictUrl()); List finalImgList = new ArrayList<>(); for (String img : tb.getImgList()) { finalImgList.add(TbImgUtil.getTBSizeImg(img, 600)); } JSONObject goods = new JSONObject(); goods.put("auctionId", tb.getAuctionId()); goods.put("imgList", finalImgList); goods.put("title", tb.getTitle()); goods.put("userType", tb.getUserType() == 1 ? 2 : 1); goods.put("price", tb.getReservePrice().toString()); goods.put("zkPrice", tb.getZkPrice().toString()); // 红包 BigDecimal proportion = manageService.getFanLiRate(); String hongBao = TaoBaoUtil.getGoodsHongBaoInfo(tb, proportion); goods.put("hongBao", hongBao); // 30天销量 goods.put("saleCount", TaoBaoUtil.getSaleCount(tb.getBiz30day())); // 分享赚 BigDecimal shareMoney = taoBaoGoodsBriefService.getShareGoodsUserHongBao(tb); data.put("shareMoney", "¥" + shareMoney); // 分享赚人提示 List listShareUser = new ArrayList(); if (tb.getBiz30day() >= 1000) { listShareUser = shamUserService.listRandShareUser(10, shareMoney, 1, 5); } // 判断收藏 if (StringUtil.isNullOrEmpty(uid)) { data.put("collected", false); } else { CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(Long.parseLong(uid), Long.parseLong(id)); data.put("collected", collectionGoods != null ? true : false); } // 测试 SystemClientParams params = systemClientParamsService.getSystemClientParamsBySystemAndKey(system, "goods_detail_jump_taobao"); if ("1".equalsIgnoreCase((params.getValue() + "").trim())) { data.put("native", true); } else { data.put("native", false); } // 获取PID String pid = clientTBPid.getPid(); LogHelper.test(String.format("PID: uid-%s pid-%s", uid + "", pid)); // 是否有券 goods.put("coupon", StringUtil.isNullOrEmpty(tb.getCouponInfo()) ? false : true); // 领券人列表 List listCouponUser = new ArrayList(); // 获取券信息 if (!StringUtil.isNullOrEmpty(tb.getCouponInfo())) { BigDecimal quanPrice = TaoBaoUtil.getAfterUseCouplePrice(tb); JSONObject couponInfo = new JSONObject(); couponInfo.put("couponPrice", quanPrice.toString()); // 服务端转链 if (convertInServer && !StringUtil.isNullOrEmpty(tb.getCouponLink())) { couponInfo.put("couponUrl", tb.getCouponLink()); } else { couponInfo.put("couponUrl", TaoBaoCouponUtil.getCoupleUrl(tb.getCouponActivityId() + "", pid, tb.getAuctionId() + "")); } couponInfo.put("couponAmount", NumberUtil.subZeroAndDot(tb.getCouponAmount().toString())); couponInfo.put("couponTime", "使用期限:" + tb.getCouponEffectiveStartTime().replace("-", ".") + "-" + tb.getCouponEffectiveEndTime().replace("-", ".")); goods.put("couponInfo", couponInfo); if (tb.getBiz30day() >= 1000) { // 领券人列表 listCouponUser = shamUserService.listRandCouponUser(5, 1, 300); } } data.put("tbPidInfo", clientTBPid); String jumpUrl = "https://item.taobao.com/item.htm?id=" + tb.getAuctionId(); if (!StringUtil.isNullOrEmpty(tb.getCouponActivityId())) {// 有券,跳转券链接 jumpUrl = TaoBaoCouponUtil.getCoupleUrl(tb.getCouponActivityId(), clientTBPid.getPid(), "" + tb.getAuctionId()); } // 设置跳转链接 if (convertInServer) { if (!StringUtil.isNullOrEmpty(tb.getCouponLink())) jumpUrl = tb.getCouponLink(); else jumpUrl = tb.getAuctionUrl(); } goods.put("jumpUrl", jumpUrl); TaoBaoShopInfo tbShopInfo = redisManager.getTBShopInfo(tb.getShopTitle(), tb.getSellerId(), tb.getAuctionId()); if (tbShopInfo != null) { String shopType = tbShopInfo.getShopType(); if (!StringUtil.isNullOrEmpty(shopType) && shopType.contains("tm.png")) { tbShopInfo.setUserType("1"); } else { tbShopInfo.setUserType("0"); } } // 店铺 goods.put("shopInfo", tbShopInfo); // 分享路径 String shareUrl = String.format("%s?id=" + tb.getAuctionId(), Constant.systemCommonConfig.getAppShareInfoUrl()); // 是否加入选品库: 0未加入 1 已加入 boolean storageState = false; if (uid != null && uid.trim().length() > 0) { storageState = userGoodsStorageService.isExistStorage(Long.parseLong(uid), Long.parseLong(id)); } data.put("storageState", storageState); data.put("shareUrl", shareUrl); data.put("goods", goods); data.put("shareUsers", listShareUser); data.put("couponUsers", listCouponUser); data.put("detailWebUrl", "http://apph5.yeshitv.com/apppage/goods_img.html?id=" + id); out.print(JsonUtil.loadTrueResult(data)); final String tempUid = uid; final TaoBaoGoodsBrief goodsInfo = tb; ThreadUtil.run(new Runnable() { public void run() { // 添加浏览记录 try { scanHistoryV2Service.addScanHistory( StringUtil.isNullOrEmpty(tempUid) ? null : Long.parseLong(tempUid), acceptData.getDevice(), goodsInfo); } catch (Exception e) { e.printStackTrace(); } } }); } /** * 获取图文详情(1.4.0) * * @param acceptData * @param id * @param out */ @RequestMapping(value = "getgoodsdetailimgs", method = RequestMethod.POST) public void getgoodsdetailimgs(AcceptData acceptData, String id, PrintWriter out) { if (StringUtil.isNullOrEmpty(id)) { out.print(JsonUtil.loadFalseResult(1, "请上传id")); return; } List detailImgs = new ArrayList<>(); JSONArray detailImgsSize = new JSONArray(); List imgs = redisManager.getTaoBaoGoodsDetailImgs(Long.parseLong(id)); if (imgs != null && imgs.size() > 0) { for (ImageInfo imgInfo : imgs) { detailImgs.add(imgInfo.getPicture()); } for (ImageInfo imgInfo : imgs) { if (imgInfo.getWidth() <= 0) { detailImgsSize.clear(); break; } JSONObject size = new JSONObject(); size.put("w", imgInfo.getWidth()); size.put("h", imgInfo.getHeight()); detailImgsSize.add(size); } } JSONObject data = new JSONObject(); data.put("detailImgs", detailImgs); data.put("detailImgsSize", detailImgsSize); out.print(JsonUtil.loadTrueResult(data)); } /** * 商品详情推荐1.4.0 * * @param acceptData * @param id * @param out */ @RequestMapping(value = "getgoodsderivation", method = RequestMethod.POST) public void getRecommendGoods(AcceptData acceptData, long id, PrintWriter out) { System system = systemService.getSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult(1, "系统不存在")); return; } List goodsList = TaoKeApiUtil.getRelationGoodsRecommend(id, 10); // 初始化 if (goodsList == null) { goodsList = new ArrayList(); } BigDecimal proportion = manageService.getFanLiRate(); List listExtra = new ArrayList(); goodsList.parallelStream().forEach(goods -> { // 获取详情 TaoBaoGoodsBrief taoBaoGoodsBrief = null; try { taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(goods.getAuctionId()); } catch (Exception e) { e.printStackTrace(); } if (taoBaoGoodsBrief != null) { listExtra.add(TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), "")); } }); List listQuality = new ArrayList(); try { List listRecommend = qualityGoodsService.recommendByAuctionId(id); if (listRecommend != null && listRecommend.size() > 1) { for (QualityFactory quality : listRecommend) { TaoBaoGoodsBrief taoBaoGoodsBrief = quality.getTaoBaoGoodsBrief(); if (taoBaoGoodsBrief == null) { continue; } int biz30day = taoBaoGoodsBrief.getBiz30day(); if (biz30day >= 10000) { double sales = biz30day; String salesCountMidea = String.format("%.1f", sales / 10000); taoBaoGoodsBrief.setSalesCount(salesCountMidea + "万"); } else { taoBaoGoodsBrief.setSalesCount(biz30day + ""); } // 改变图片尺寸 String pictUrl = taoBaoGoodsBrief.getPictUrl(); if (!StringUtil.isNullOrEmpty(pictUrl) && !pictUrl.contains("320x320")) { taoBaoGoodsBrief.setPictUrl(TbImgUtil.getTBSize320Img(pictUrl)); } listQuality.add(TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null)); } } } catch (Exception e2) { e2.printStackTrace(); } // 取偶数个数据 if (listExtra.size() % 2 != 0) { listExtra.remove(listExtra.size() - 1); } if (listQuality.size() % 2 != 0) { listQuality.remove(listQuality.size() - 1); } JSONObject data = new JSONObject(); data.put("listGuess", JsonUtil.getApiCommonGson().toJson(listExtra)); data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listQuality)); out.print(JsonUtil.loadTrueResult(data)); } }