package com.yeshi.fanli.controller.h5; import java.io.PrintWriter; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.yeshi.utils.JsonUtil; import org.yeshi.utils.taobao.TbImgUtil; import com.google.gson.Gson; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.recommend.RecommendBanner; import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory; import com.yeshi.fanli.entity.bus.su.recommend.SuperRecommendBanner; import com.yeshi.fanli.entity.system.BusinessSystem; import com.yeshi.fanli.entity.taobao.ClientTBPid; import com.yeshi.fanli.entity.taobao.PidUser; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoLink; import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig; import com.yeshi.fanli.entity.taobao.TaoKeAppInfo; import com.yeshi.fanli.exception.ShareGoodsException; import com.yeshi.fanli.exception.share.UserShareGoodsRecordException; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.service.inter.config.BusinessSystemService; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.config.SystemConfigService; import com.yeshi.fanli.service.inter.goods.ShareGoodsService; import com.yeshi.fanli.service.inter.goods.SuperRecommendBannerService; import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService; import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; import com.yeshi.fanli.service.inter.user.TBPidService; import com.yeshi.fanli.service.inter.user.UserShareGoodsGroupService; import com.yeshi.fanli.util.AESUtil; 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.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import net.sf.json.JSONObject; @Controller @RequestMapping("api/h5/v1/webRecommend") public class H5RecommendController { @Resource private H5ControllerUtil h5ControllerUtil; @Resource private SuperRecommendBannerService superRecommendBannerService; @Resource private HongBaoManageService hongBaoManageService; @Resource private RedisManager redisManager; @Resource private BusinessSystemService businessSystemService; @Resource private ConfigService configService; @Resource private SystemConfigService systemConfigService; @Resource private TaoBaoGoodsBriefService taoBaoGoodsBriefService; @Resource private TBPidService tbPidService; @Resource private ShareGoodsService shareGoodsService; @Resource private TaoBaoUnionConfigService taoBaoUnionConfigService; @Resource private UserShareGoodsGroupService userShareGoodsGroupService; /** * * 方法说明: 推荐轮播商品信息 * * @author mawurui createTime 2018年5月11日 上午11:13:47 * @param acceptData * @param out */ @RequestMapping(value = "getRecommenBanner", method = RequestMethod.GET) public void getRecommendBanner(AcceptData acceptData, String callback, PrintWriter out) { BusinessSystem system = businessSystemService.getBusinessSystem("WEB", Constant.systemCommonConfig.getH5PackageName()); JSONObject json = new JSONObject(); if (system == null) { out.print(JsonUtil.loadFalseResult(1, H5ControllerUtil.NOSYSTEM)); 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); } if (list == null) { json.put("code", "1"); json.put("msg", H5ControllerUtil.NODATA); 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); // jsonp方式返回 out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(json))); return; } /** * * 方法说明: 获取商品详情 * * @author mawurui createTime 2018年5月11日 上午11:37:02 * @param acceptData * @param id * @param uid * @param out */ @SuppressWarnings("unused") @RequestMapping(value = "getGoodsDetail", method = RequestMethod.GET) public void getGoodsDetail(final AcceptData acceptData, final String id, String uid, String callback, PrintWriter out) { long begin = java.lang.System.currentTimeMillis(); if (StringUtil.isNullOrEmpty(id)) { out.print(JsonUtil.loadFalseResult(1, "请上传id")); return; } if (!StringUtil.isNullOrEmpty(uid)) { uid = AESUtil.decrypt(uid, Constant.UIDAESKEY); } TaoBaoGoodsBrief goods = null; String token = null; if (!StringUtil.isNullOrEmpty(uid)) { // 查询是否有分享记录 UserShareGoodsHistory shareHistory = null; try { shareHistory = shareGoodsService.getShareGoodsHistoryDetail(Long.parseLong(uid), Long.parseLong(id)); } catch (NumberFormatException e) { e.printStackTrace(); } catch (ShareGoodsException e) { e.printStackTrace(); } if (shareHistory != null) {// 有分享记录 token = shareHistory.getTkCode(); goods = redisManager.getTaoBaoGoodsTemp(Long.parseLong(id)); if (goods == null) try { goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id)); } catch (NumberFormatException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } } else {// 没有分享记录,需要直接分享 List configList = taoBaoUnionConfigService .getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS); String pid = null; ClientTBPid tbPid = tbPidService.getSharePid(); if (tbPid != null) pid = tbPid.getPid(); else { pid = configList.get(0).getDefaultPid(); } // 获取 TaoKeAppInfo app = new TaoKeAppInfo(); app.setAdzoneId(pid.split("_")[3]); app.setAppKey(configList.get(0).getAppKey()); app.setAppSecret(configList.get(0).getAppSecret()); app.setPid(pid); try { goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app); } catch (NumberFormatException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } if (goods != null) { String url = goods.getAuctionUrl(); if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) { url = goods.getCouponLink(); } token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url); } } } else { List configList = taoBaoUnionConfigService .getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS); String pid = tbPidService.getSharePid().getPid(); TaoKeAppInfo app = new TaoKeAppInfo(); app.setAdzoneId(pid.split("_")[3]); app.setAppKey(configList.get(0).getAppKey()); app.setAppSecret(configList.get(0).getAppSecret()); app.setPid(pid); try { goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app); } catch (NumberFormatException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } if (goods != null) { String url = goods.getAuctionUrl(); if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) { url = goods.getCouponLink(); } if (!url.contains("uland.taobao.com") && !url.contains("s.click.taobao.com")) { TaoBaoGoodsBrief linkInfo = TaoKeApiUtil.specialConvertCoupon(Long.parseLong(id), app); url = linkInfo.getCouponLink(); if (StringUtil.isNullOrEmpty(url)) url = linkInfo.getAuctionUrl(); } token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url); } } if (goods == null) { out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("商品信息获取失败"))); return; } if (StringUtil.isNullOrEmpty(token)) { out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("口令生成失败"))); return; } // 券后价 BigDecimal afterCouponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods); TaoBaoLink link = new TaoBaoLink(); link.setTaoToken(token); JSONObject data = new JSONObject(); data.put("title", goods.getTitle()); if (goods.getImgList() == null) goods.setImgList(new ArrayList<>()); goods.getImgList().add(0, TbImgUtil.getTBSizeImg(goods.getPictUrl(), 300)); data.put("imgs", goods.getImgList()); data.put("quanPrice", afterCouponPrice); data.put("zkPrice", goods.getZkPrice()); data.put("shareContent", "长按复制本段文字,打开【手机淘宝】即可领取【特别优惠券】购买下单,"); data.put("token", link.getTaoToken()); data.put("quan", !StringUtil.isNullOrEmpty(goods.getCouponInfo())); data.put("reservePrice", goods.getReservePrice()); data.put("shopType", goods.getUserType() == 1 ? 2 : 1); out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); final String tempUid = uid; ThreadUtil.run(new Runnable() { @Override public void run() { try { if (!StringUtil.isNullOrEmpty(tempUid)) userShareGoodsGroupService.updateBrowseRecord(Long.parseLong(tempUid), Long.parseLong(id), 1); } catch (NumberFormatException e) { e.printStackTrace(); } catch (UserShareGoodsRecordException e) { e.printStackTrace(); } } }); return; } }