yujian
2019-06-26 020d940ae4e16f55f69cef3dd4c8dc0b9764af07
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/RecommendController.java
@@ -41,6 +41,7 @@
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.bus.user.UserMoneyExtra;
import com.yeshi.fanli.entity.common.ImageInfo;
import com.yeshi.fanli.entity.common.JumpDetail;
import com.yeshi.fanli.entity.common.JumpDetailV2;
@@ -80,6 +81,8 @@
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.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.SuperSpecialService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
@@ -92,13 +95,20 @@
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoShopService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.service.inter.tlj.ConfigTaoLiJinService;
import com.yeshi.fanli.service.inter.tlj.DeviceTaoLiJinRecordService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService;
import com.yeshi.fanli.service.inter.user.ShamUserService;
import com.yeshi.fanli.service.inter.user.TBPidService;
import com.yeshi.fanli.service.inter.user.UserCustomSettingsService;
import com.yeshi.fanli.service.inter.user.UserGoodsStorageService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserMoneyExtraService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
@@ -110,7 +120,9 @@
import com.yeshi.fanli.util.taobao.TaoBaoCouponUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.taobao.TaoLiJinUtil;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import com.yeshi.fanli.vo.tlj.SpreadHongBao;
import com.yeshi.fanli.vo.user.UserSettingsVO;
import net.sf.json.JSONArray;
@@ -224,6 +236,33 @@
   @Resource
   private TaoBaoShopService taoBaoShopService;
   @Resource
   private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
   @Resource
   private UserMoneyExtraService userMoneyExtraService;
   @Resource
   private UserTaoLiJinOriginService userTaoLiJinOriginService;
   @Resource
   private ConfigTaoLiJinService configTaoLiJinService;
   @Resource
   private DeviceTaoLiJinRecordService deviceTaoLiJinRecordService;
   @Resource
   private DeviceSexService deviceSexService;
   @Resource
   private UserTaoLiJinRecordService userTaoLiJinRecordService;
   @Resource
   private RecommendGoodsDeleteHistoryService recommendGoodsDeleteHistoryService;
   @RequestMapping(value = "getHonestList")
   public void getHonestList(AcceptData acceptData, PrintWriter out) {
@@ -1304,14 +1343,24 @@
            if (result != null && result.getTaoBaoGoodsBriefs() != null) {
               // 筛选
               List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
               List<TaoBaoGoodsBriefExtra> 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 && !StringUtil.isNullOrEmpty(goods.getPictUrlWhite()))
                     goodsList.add(goods);
               }
               List<TaoBaoGoodsBrief> gList = recommendGoodsDeleteHistoryService
                     .filterGoods(acceptData.getDevice(), result.getTaoBaoGoodsBriefs());
               // 设备推荐
               if (gList != null)
                  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())) {
                        TaoBaoGoodsBriefExtra extra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(goods,
                              proportion.toString(), "");
                        extra.setRecommend(true);
                        goodsList.add(extra);
                     }
                  }
               try {
                  monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0,
                        (int) (java.lang.System.currentTimeMillis() - startTime), "推荐数量:" + goodsList.size()));
@@ -1321,8 +1370,8 @@
               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(), "")));
               for (TaoBaoGoodsBriefExtra goods : goodsList) {
                  array.add(gson.toJson(goods));
               }
            } else {
               try {
@@ -1574,8 +1623,11 @@
   @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);
         JSONObject root = specialService.listCacheSpecialToIndex(acceptData, deviceSex);
         // 2、顶部轮播图
         List<SwiperPicture> topPicList = getSwiperByCard("index_top");
@@ -1688,8 +1740,8 @@
      nextTime.set(Calendar.MILLISECOND, 0);
      JSONArray array = null;
      String timekey = String.format("spikeGoods_hour-%s-%s",acceptData.getPlatform(),acceptData.getVersion());
      String cachekey = String.format("spikeGoodsList-%s-%s",acceptData.getPlatform(),acceptData.getVersion());
      String timekey = String.format("spikeGoods_hour-%s-%s", acceptData.getPlatform(), acceptData.getVersion());
      String cachekey = String.format("spikeGoodsList-%s-%s", acceptData.getPlatform(), acceptData.getVersion());
      String timeValue = redisManager.getCommonString(timekey);
      if (timeValue == null || !timeValue.equals(hour + "")) {
@@ -1779,13 +1831,9 @@
    * @param out
    */
   @RequestMapping(value = "getgoodsinfo", method = RequestMethod.POST)
   public void getGoodsInfo(AcceptData acceptData, String id, String uid, String from, PrintWriter out) {
   public void getGoodsInfo(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
      if ("0".equalsIgnoreCase(uid)) {
         uid = "";
      }
      if (StringUtil.isNullOrEmpty(id)) {
      if (id == null) {
         out.print(JsonUtil.loadFalseResult(1, "请上传id"));
         return;
      }
@@ -1829,14 +1877,14 @@
      if (!convertInServer) {
         try {
            goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(Long.parseLong(id));
            goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(id);
            if (goods == null) {
               TaoKeAppInfo app = new TaoKeAppInfo();
               app.setAppKey(TaoBaoConstant.TAOBAO_COMMON_APPKEY);
               app.setAppSecret(TaoBaoConstant.TAOBAO_COMMON_APPSECRET);
               app.setPid(TaoBaoConstant.TAOBAO_COMMON_PID);
               app.setAdzoneId(TaoBaoConstant.TAOBAO_COMMON_PID.split("_")[3]);
               goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app);
               goods = TaoKeApiUtil.searchGoodsDetail(id, app);
               final TaoBaoGoodsBrief finalGoods = goods;
               if (goods != null) {
                  ThreadUtil.run(new Runnable() {
@@ -1851,7 +1899,7 @@
            // 商品下架
            ThreadUtil.run(new Runnable() {
               public void run() {
                  taoBaoGoodsUpdateService.offlineTaoBaoGoods(Long.parseLong(id));
                  taoBaoGoodsUpdateService.offlineTaoBaoGoods(id);
               }
            });
@@ -1868,7 +1916,7 @@
         app.setPid(clientPid);
         try {
            goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app);
            goods = TaoKeApiUtil.searchGoodsDetail(id, app);
            if (goods != null) {
               ticket.put("clickUrl", goods.getAuctionUrl());
               // 测试使用
@@ -1890,7 +1938,7 @@
         } catch (TaobaoGoodsDownException e) {
            ThreadUtil.run(new Runnable() {
               public void run() {
                  taoBaoGoodsUpdateService.offlineTaoBaoGoods(Long.parseLong(id));
                  taoBaoGoodsUpdateService.offlineTaoBaoGoods(id);
               }
            });
         }
@@ -1936,13 +1984,19 @@
      if (!StringUtil.isNullOrEmpty(tb.getPictUrlWhite()))
         finalImgList.add(0, tb.getPictUrlWhite());
      // 大淘客商品过滤
      try {
         goods = daTaoKeGoodsDetailService.filterTaoBaoGoods(goods);
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
      JSONObject goodsJson = new JSONObject();
      goodsJson.put("auctionId", tb.getAuctionId());
      goodsJson.put("imgList", finalImgList);
      goodsJson.put("title", tb.getTitle());
      goodsJson.put("userType", tb.getUserType() == 1 ? 2 : 1);
      goodsJson.put("price", tb.getReservePrice().toString());
      goodsJson.put("zkPrice", tb.getZkPrice().toString());
      goodsJson.put("zkPrice", MoneyBigDecimalUtil.getWithNoZera(tb.getZkPrice()).toString());
      // 30天销量
      goodsJson.put("saleCount", TaoBaoUtil.getSaleCount(tb.getBiz30day()));
@@ -1958,11 +2012,10 @@
      }
      // 判断收藏
      if (StringUtil.isNullOrEmpty(uid)) {
      if (uid == null) {
         data.put("collected", false);
      } else {
         CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(Long.parseLong(uid),
               Long.parseLong(id));
         CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid,   id);
         data.put("collected", collectionGoods != null ? true : false);
      }
@@ -1988,10 +2041,12 @@
      String hongBao = null;
      // 获取券信息
      if (!StringUtil.isNullOrEmpty(tb.getCouponInfo())) {
      if (!StringUtil.isNullOrEmpty(tb.getCouponInfo()) && tb.getCouponAmount() != null
            && tb.getCouponAmount().compareTo(new BigDecimal(0)) > 0 && tb.getCouponEffectiveStartTime() != null
            && tb.getCouponEffectiveEndTime() != null) {
         BigDecimal quanPrice = TaoBaoUtil.getAfterUseCouplePrice(tb);
         JSONObject couponInfo = new JSONObject();
         couponInfo.put("couponPrice", quanPrice.toString());
         couponInfo.put("couponPrice", MoneyBigDecimalUtil.getWithNoZera(quanPrice).toString());
         if (from != null && from.equals("miandan")) {
            // 免单商品
@@ -2006,7 +2061,9 @@
               redisManager.saveCommonTaoToken(tb.getAuctionId(), token);
            }
         }
         tb.setCouponLinkTaoToken(token);
         // 测试
         if (!Constant.IS_TEST)
            tb.setCouponLinkTaoToken(token);
         // 服务端转链
         // if (convertInServer &&
@@ -2018,11 +2075,14 @@
         // tb.getAuctionId() + ""));
         // }
         couponInfo.put("couponAmount", NumberUtil.subZeroAndDot(tb.getCouponAmount().toString()));
         couponInfo.put("couponAmount", MoneyBigDecimalUtil.getWithNoZera(tb.getCouponAmount()).toString());
         couponInfo.put("couponTime", "使用期限:" + tb.getCouponEffectiveStartTime().replace("-", ".") + "-"
               + tb.getCouponEffectiveEndTime().replace("-", "."));
         // 券的口令
         couponInfo.put("couponToken", token);
         // 测试
         if (!Constant.IS_TEST)
            couponInfo.put("couponToken", token);
         goodsJson.put("couponInfo", couponInfo);
         if (tb.getBiz30day() >= 1000) {
@@ -2088,26 +2148,23 @@
         goodsJson.put("shopInfo", tbShopInfo);
      }
      goodsJson.put("fanliValid", true);// 是否有返利
      // 分享路径
      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));
      if (uid != null) {
         storageState = userGoodsStorageService.isExistStorage(uid, id);
      }
      data.put("storageState", storageState);
      data.put("shareUrl", shareUrl);
      data.put("goods", goodsJson);
      data.put("shareUsers", listShareUser);
      data.put("couponUsers", listCouponUser);
      data.put("detailWebUrl", "http://apph5.yeshitv.com/apppage/goods_img.html?id=" + id);
      data.put("noRebateHelpLink", configService.get("no_rebate_help_link"));
      String noRebateHelpLink = null;
      // 商品链接
      String h5Url = String.format("http://%s%s?id=%s&appType=flq", configService.getH5Host(),
@@ -2117,7 +2174,88 @@
      } catch (Exception e) {
         data.put("h5Url", h5Url);
      }
      // 是否有返利
      boolean fanliValid = true;
      //资金类型 1-返  2-奖
      int moneyType = 1;
      // 推广红包
      if (from != null && from.equals("taolijin")) {
         // 计算推广红包
         String warningRate = configTaoLiJinService.getValueByKey("warning_value");
         BigDecimal spreadMoney = TaoLiJinUtil.getSpreadMoney(warningRate, goods);
         // 推广红包 不能小于1
         if (spreadMoney.compareTo(new BigDecimal(1.1)) < 0) {
            out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
            return;
         }
         // 是否为新用户
         boolean isNewUser = userInfoExtraService.isNewUser(uid);
         if (isNewUser) {
            // 判定为老用户: 新人只要使用了新人红包,也就是那1块钱,那么,他看到的分享爆款中的商品-就只能分享。
            long countRecord = userTaoLiJinRecordService.countRecordByUid(uid);
            if (countRecord > 0) {
               isNewUser = false;
            }
         }
         SpreadHongBao spreadHongBao = new SpreadHongBao();
         if (isNewUser) {
            spreadHongBao.setMoney("1");
         } else {
            spreadHongBao.setMoney(spreadMoney.toString());
            moneyType = 2;
            fanliValid = false;
            ClientTextStyleVO textStyleVO1 = new ClientTextStyleVO();
            textStyleVO1.setContent("分享");
            textStyleVO1.setColor("#666666");
            ClientTextStyleVO textStyleVO2 = new ClientTextStyleVO();
            textStyleVO2.setContent("赚奖金");
            textStyleVO2.setColor("#F14242");
            ClientTextStyleVO textStyleVO3 = new ClientTextStyleVO();
            textStyleVO3.setContent(",好友");
            textStyleVO3.setColor("#666666");
            ClientTextStyleVO textStyleVO4 = new ClientTextStyleVO();
            textStyleVO4.setContent("领红包!");
            textStyleVO4.setColor("#F14242");
            List<ClientTextStyleVO> listText = new ArrayList<ClientTextStyleVO>();
            listText.add(textStyleVO1);
            listText.add(textStyleVO2);
            listText.add(textStyleVO3);
            listText.add(textStyleVO4);
            data.put("listTip", listText);
         }
         spreadHongBao.setTip("当日领取,两天内使用,过时无效");
         goodsJson.put("spreadHongBao", spreadHongBao);
         // 用户剩余可以淘礼金验证
         UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid);
         if (userMoneyExtra == null ||  userMoneyExtra.getTlj() == null) {
            data.put("userHongbao", new BigDecimal(0).setScale(2).toString());
         } else {
            data.put("userHongbao", userMoneyExtra.getTlj().setScale(2).toString());
         }
         noRebateHelpLink = configTaoLiJinService.getValueByKey("share_goods_help_link");
      }
      goodsJson.put("moneyType", moneyType);
      goodsJson.put("fanliValid", fanliValid);
      data.put("goods", goodsJson);
      if (!StringUtil.isNullOrEmpty(noRebateHelpLink)) {
         data.put("noRebateHelpLink", noRebateHelpLink);
      } else {
         data.put("noRebateHelpLink", configService.get("no_rebate_help_link"));
      }
      // 取消分享活动
      // if (!StringUtil.isNullOrEmpty(uid)
      // &&
@@ -2138,15 +2276,12 @@
      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);
               scanHistoryV2Service.addScanHistory(uid, acceptData.getDevice(),goodsInfo);
            } catch (Exception e) {
               e.printStackTrace();
            }
@@ -2247,7 +2382,7 @@
         e1.printStackTrace();
      }
      if (goodsList != null)
      if (goodsList != null && goodsList.size() > 0)
         goodsList.parallelStream().forEach(goods -> {
            // 获取详情
@@ -2344,18 +2479,48 @@
      }
      try {
         List<Special> list = new ArrayList<Special>();
         // 专题活动
         String specialCard = "special_activities";
         List<Special> listSpecial = specialService.listPageBySystemAndCard(0, Integer.MAX_VALUE, specialCard,
               system.getId());
         if (listSpecial == null) {
            listSpecial = new ArrayList<Special>();
         if (listSpecial != null) {
            list.addAll(listSpecial);
         }
         for (int i = 0; i < list.size(); i++) {
            Special special = list.get(i);
            JumpDetailV2 jumpDetail = special.getJumpDetail();
            if (jumpDetail != null) {
               jumpDetail.setNeedLogin(special.isJumpLogin());
               special.setJumpDetail(jumpDetail);
            }
            String name = special.getName();
            if (StringUtil.isNullOrEmpty(name)) {
               continue;
            }
            // 是否需要弹出框
            if (name.equals("账户等级特权")) {
               if (!VersionUtil.greaterThan_1_5_60(acceptData.getPlatform(), acceptData.getVersion())) {
                  list.remove(i);
                  i--;
               } else {
                  if (uid != null) {
                     special.setElastic(userTaoLiJinOriginService.hasRankHongBao(uid));
                  }
               }
            }
         }
         JSONObject root = new JSONObject();
         root.put("special", JsonUtil.getApiCommonGson().toJson(listSpecial));
         root.put("special", JsonUtil.getApiCommonGson().toJson(list));
         out.print(JsonUtil.loadTrueResult(root));
      } catch (Exception e) {