From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/GoodsControllerLijin.java |  363 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 335 insertions(+), 28 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/GoodsControllerLijin.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/GoodsControllerLijin.java
index 8ca536b..47979c0 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/GoodsControllerLijin.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/GoodsControllerLijin.java
@@ -1,36 +1,80 @@
 package com.yeshi.fanli.controller.client.lijin;
 
+import com.google.gson.Gson;
+import com.ks.lijin.exception.LiJinAmountException;
+import com.ks.lijin.exception.LiJinException;
+import com.ks.lijin.exception.LiJinGoodsException;
+import com.ks.lijin.exception.LiJinUserException;
+import com.ks.lijin.pojo.DO.LiJinExpendRecord;
+import com.ks.lijin.pojo.DTO.MoneyInfo;
+import com.ks.vip.pojo.Enums.VIPEnum;
+import com.yeshi.common.entity.taobao.TaoBaoShop;
 import com.yeshi.common.entity.taobao.TaoKeAppInfo;
+import com.yeshi.common.vo.ClientTextStyleVO;
+import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
 import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
 import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
 import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
+import com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.entity.SystemPIDInfo;
 import com.yeshi.fanli.entity.accept.AcceptData;
+import com.yeshi.fanli.entity.bus.user.ShamUser;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
 import com.yeshi.fanli.entity.jd.JDGoods;
+import com.yeshi.fanli.exception.goods.CommonGoodsException;
+import com.yeshi.fanli.exception.goods.ScanHistoryException;
 import com.yeshi.fanli.exception.pdd.PDDApiException;
 import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
+import com.yeshi.fanli.lijin.manager.GoodsLijinMnager;
+import com.yeshi.fanli.lijin.manager.UserLijinMnager;
+import com.yeshi.fanli.lijin.manager.UserLijinSendManager;
+import com.yeshi.fanli.log.vo.UserGoodsScanLog;
+import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
+import com.yeshi.fanli.service.inter.goods.ScanHistoryV2Service;
+import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
 import com.yeshi.fanli.service.inter.pdd.PDDAuthService;
 import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.TaoBaoConstant;
-import com.yeshi.fanli.util.ThreadUtil;
+import com.yeshi.fanli.service.inter.taobao.TaoBaoShopService;
+import com.yeshi.fanli.service.inter.user.ShamUserService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.manger.PIDManager;
+import com.yeshi.fanli.util.*;
 import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
+import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
+import com.yeshi.fanli.util.factory.goods.GoodsDetailVOLijinFactory;
+import com.yeshi.fanli.util.factory.goods.ShopInfoVOFactory;
 import com.yeshi.fanli.util.jd.JDApiUtil;
 import com.yeshi.fanli.util.jd.JDUtil;
 import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
 import com.yeshi.fanli.util.suning.SuningApiUtil;
 import com.yeshi.fanli.util.suning.SuningUtil;
+import com.yeshi.fanli.util.taobao.TaoBaoUtil;
 import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
 import com.yeshi.fanli.util.vipshop.VipShopApiUtil;
+import com.yeshi.fanli.lijin.vo.GoodsDetailVO;
 import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
+import net.sf.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.yeshi.utils.JsonUtil;
+import org.yeshi.utils.MoneyBigDecimalUtil;
+import org.yeshi.utils.NumberUtil;
 
 import javax.annotation.Resource;
+import java.io.PrintWriter;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 @Controller
 @RequestMapping("api/lijin/goods")
 public class GoodsControllerLijin {
+    Logger userGoodsScanLogger = LoggerFactory.getLogger("userGoodsScanLog");
+
 
     @Resource
     private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil;
@@ -41,6 +85,37 @@
     @Resource
     private PDDAuthService pddAuthService;
 
+    @Resource
+    private CollectionGoodsV2Service collectionGoodsV2Service;
+
+    @Resource
+    private ShamUserService shamUserService;
+
+    @Resource
+    private TaoBaoShopService taoBaoShopService;
+
+    @Resource
+    private GoodsLijinMnager goodsLijinMnager;
+
+
+    @Resource
+    private UserLijinMnager userLijinMnager;
+
+    @Resource
+    private UserLijinSendManager userLijinSendManager;
+
+    @Resource
+    private PIDManager pidManager;
+    @Resource
+    private ScanHistoryV2Service scanHistoryV2Service;
+
+    @Resource
+    private UserInfoService userInfoService;
+
+    @Resource
+    private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
+
+
     /**
      * 鑾峰彇鍟嗗搧璇︽儏
      *
@@ -50,63 +125,295 @@
      * @param from
      * @return
      */
-    @RequestMapping("getGoodsDetail")
-    @ResponseBody
-    public String getGoodsDetail(AcceptData acceptData, int goodsType, String goodsId, Long uid, String from) {
 
+    @RequestMapping("getGoodsDetail")
+    public void getGoodsDetail(AcceptData acceptData, int goodsType, String goodsId, Long uid, String from, PrintWriter out) {
+        GoodsDetailVO goodsDetailVO = new GoodsDetailVO();
+        GoodsDetailVO.GoodsExtraVO extraVO = new GoodsDetailVO.GoodsExtraVO();
+        GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
+                acceptData.getVersion(), acceptData.getSystem());
+
+        paramsDTO.setFanLiRate(goodsLijinMnager.getFanLiRate(uid));
+        // 棰嗗埜浜哄垪琛�
+        List<ShamUser> listCouponUser = new ArrayList<>();
+        Long goodsIdSuning = null;
         switch (goodsType) {
             case Constant
                     .SOURCE_TYPE_TAOBAO:
-                TaoBaoGoodsBrief taobaoGoods = getTaoBaoGoods(Long.parseLong(goodsId));
-                if (taobaoGoods == null) {
+
+                if (uid != null) {
+                    ThreadUtil.run(new Runnable() {
+                        @Override
+                        public void run() {
+                            //灏忎簬10鍧楄嚜鍔ㄥ彂鏀惧閲�
+                            userLijinSendManager.autoSendLijin(uid, new BigDecimal(10));
+                        }
+                    });
 
                 }
 
+                TaoBaoGoodsBrief goods = getTaoBaoGoods(goodsId);
+
+                //鍔犺浇璧勯噾淇℃伅
+                com.yeshi.fanli.vo.goods.GoodsDetailVO goodsDetailVO1 = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
+                goodsDetailVO1 = goodsLijinMnager.loadTBMoneyInfo(acceptData.getSystem(), uid, goods, goodsDetailVO1, true);
+
+                goodsDetailVO.setGoods(GoodsDetailVOLijinFactory.convertTaoBao(goods, paramsDTO));
+                //閲嶇疆璧勯噾淇℃伅
+                goodsDetailVO.getGoods().setMoneyInfo(goodsDetailVO1.getMoneyInfo());
+
+
+                GoodsDetailVOLijinFactory.fillRights(goodsDetailVO.getGoods());
+
+                // 搴楅摵淇℃伅
+                TaoBaoShop shop = taoBaoShopService.getTaoBaoShop(goods.getAuctionId(), goods.getSellerId());
+                if (shop != null) {
+                    String shopLink = shop.getShopLink();
+                    if (StringUtil.isNullOrEmpty(shopLink)) {
+                        shop.setShopLink(TaoBaoUtil.getShopLink(shop.getId()));
+                    }
+                    goodsDetailVO.getGoods().setShopInfo(ShopInfoVOFactory.convertTaoBaoShop(shop));
+                }
+
+                extraVO.setDetailUrl("http://apph5.banliapp.com/apppage/goods_img_tb.html?id=" + goodsId);
+                ThreadUtil.run(new Runnable() {
+                    @Override
+                    public void run() {
+                        try {
+                            scanHistoryV2Service.addScanHistory(uid, acceptData.getDevice(), goods);
+                        } catch (CommonGoodsException e) {
+                            e.printStackTrace();
+                        } catch (ScanHistoryException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                });
                 break;
 
             case Constant
                     .SOURCE_TYPE_JD:
-                JDGoods jdGoods = getJDGoods(Long.parseLong(goodsId));
-
+                JDGoods jdGoods = getJDGoods(goodsId);
+                goodsDetailVO.setGoods(GoodsDetailVOLijinFactory.convertJDGoods(jdGoods, paramsDTO));
+                extraVO.setDetailUrl("https://in.m.jd.com/product/jieshao/video/" + goodsId + ".html");
+                ThreadUtil.run(new Runnable() {
+                    @Override
+                    public void run() {
+                        try {
+                            scanHistoryV2Service.addJDScanHistory(uid, acceptData.getDevice(), jdGoods);
+                        } catch (CommonGoodsException e) {
+                            e.printStackTrace();
+                        } catch (ScanHistoryException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                });
                 break;
 
             case Constant
                     .SOURCE_TYPE_PDD:
-                PDDGoodsDetail pddGoodsDetail = getPDDGoods(Long.parseLong(goodsId), uid);
-
+                PDDGoodsDetail pddGoodsDetail = getPDDGoods(acceptData.getSystem(), goodsId, uid);
+                goodsDetailVO.setGoods(GoodsDetailVOLijinFactory.convertPDDGoods(pddGoodsDetail, paramsDTO));
+                extraVO.setDetailUrl("http://apph5.banliapp.com/apppage/goods_img_pdd.html?id=" + goodsId);
+                ThreadUtil.run(new Runnable() {
+                    @Override
+                    public void run() {
+                        try {
+                            scanHistoryV2Service.addPDDScanHistory(uid, acceptData.getDevice(), pddGoodsDetail);
+                        } catch (CommonGoodsException e) {
+                            e.printStackTrace();
+                        } catch (ScanHistoryException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                });
                 break;
 
             case Constant
                     .SOURCE_TYPE_VIP:
                 VIPGoodsInfo vipGoodsInfo = VipShopApiUtil.getGoodsDetail(goodsId);
-
+                goodsDetailVO.setGoods(GoodsDetailVOLijinFactory.convertVIPGoods(vipGoodsInfo, paramsDTO));
+                ThreadUtil.run(new Runnable() {
+                    @Override
+                    public void run() {
+                        try {
+                            scanHistoryV2Service.addVIPScanHistory(uid, acceptData.getDevice(), vipGoodsInfo);
+                        } catch (CommonGoodsException e) {
+                            e.printStackTrace();
+                        } catch (ScanHistoryException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                });
                 break;
 
             case Constant
                     .SOURCE_TYPE_SUNING:
                 String[] ids = SuningUtil.getGoodsIdDetail(goodsId);
                 SuningGoodsInfo suningGoodsInfo = SuningApiUtil.getGoodsDetail(ids[1], ids[0]);
+                goodsIdSuning = Long.parseLong(suningGoodsInfo.getCommodityInfo().getCommodityCode());
+
+                goodsDetailVO.setGoods(GoodsDetailVOLijinFactory.convertSuningGoods(suningGoodsInfo, paramsDTO));
+                extraVO.setDetailUrl("http://apph5.banliapp.com/apppage/goods_img_suning.html?id="
+                        + suningGoodsInfo.getCommodityInfo().getCommodityCode() + "&supplierCode="
+                        + suningGoodsInfo.getCommodityInfo().getSupplierCode());
+
+                ThreadUtil.run(new Runnable() {
+                    @Override
+                    public void run() {
+                        try {
+                            scanHistoryV2Service.addSuningScanHistory(uid, acceptData.getDevice(), suningGoodsInfo);
+                        } catch (CommonGoodsException e) {
+                            e.printStackTrace();
+                        } catch (ScanHistoryException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                });
 
                 break;
-
-
         }
 
+        ThreadUtil.run(new Runnable() {
 
-        return null;
+
+            @Override
+            public void run() {
+                try {
+                    userGoodsScanLogger.info("{}", new Gson().toJson(UserGoodsScanLog.UserGoodsScanLogFactory.create(goodsDetailVO.getGoods(), uid, acceptData.getUtdid(), acceptData.getDevice())));
+                } catch (Exception e) {
+
+                }
+            }
+        });
+
+
+        //鏄惁鏀惰棌
+        extraVO.setCollected(false);
+        if (uid != null) {
+            CollectionGoodsV2 collectionGoodsV2 = collectionGoodsV2Service.findByUidAndAuctionId(uid, goodsType == Constant.SOURCE_TYPE_SUNING ? goodsIdSuning + "" : goodsDetailVO.getGoods().getGoodsId(), goodsType);
+            if (collectionGoodsV2 != null) {
+                extraVO.setCollected(true);
+            }
+        }
+
+        if (goodsDetailVO.getGoods().getTempCoupon() != null && goodsDetailVO.getGoods().getTempCoupon().getAmount() != null
+                && goodsDetailVO.getGoods().getTempCoupon().getAmount().compareTo(new BigDecimal(0)) > 0) {
+            listCouponUser = shamUserService.listRandCouponUser(5, 1, 300);
+        }
+        extraVO.setFanliValid(true);
+        extraVO.setBuyValid(true);
+        extraVO.setListCouponUser(listCouponUser);
+        goodsDetailVO.setExtra(extraVO);
+        try {
+            loadLijinInfo(uid, acceptData.getSystem(), goodsDetailVO);
+        } catch (Exception e) {
+            if (goodsDetailVO.getGoods().getMoneyInfo() != null) {
+                goodsDetailVO.getGoods().getMoneyInfo().setHongBaoMoney("0.00");
+            }
+        }
+        //娓呴櫎涓存椂淇℃伅
+        goodsDetailVO.getGoods().setTempCoupon(null);
+        if (goodsDetailVO.getGoods().getLabels() == null)
+            goodsDetailVO.getGoods().setLabels(new ArrayList<>());
+        goodsDetailVO.getGoods().getLabels().add(0, new ClientTextStyleVO(ShopUtil.getShopTypeName(goodsDetailVO.getGoods().getShopType()), "#FF2C4A"));
+        out.print(JsonUtil.loadTrueResult(new Gson().toJson(goodsDetailVO)));
     }
 
-    private TaoBaoGoodsBrief getTaoBaoGoods(Long id) {
+    @RequestMapping("buyWithLijin")
+    public void buyWithLijin(AcceptData acceptData, int goodsType, String goodsId, String lijinId, Long uid, String from, PrintWriter out) {
+        String[] lijinTypes = lijinId.split("#");
+        String lijinType = lijinTypes[0];
+        if (lijinType.equalsIgnoreCase(GoodsDetailVO.GoodsHongBaoListVO.TYPE_LIJIN_LINK)) {
+            //绀奸噾閾炬帴
+            //TODO 鑾峰彇閾炬帴
+        } else {
+            //鍟嗗搧鏈韩绀奸噾
+            //鑾峰彇鐢ㄦ埛娉ㄥ唽鏃堕棿
+            UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
+
+            try {
+                userLijinSendManager.autoSendLijin(uid, new BigDecimal(10));
+                userLijinSendManager.autoRecieveLijin(acceptData.getSystem(), acceptData.getDevice(), uid);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+
+            try {
+                LiJinExpendRecord record = goodsLijinMnager.createTBLijin(goodsId, uid, new Date(user.getCreatetime()));
+                String sendUrl = record.getSendUrl();
+                if (StringUtil.isNullOrEmpty(sendUrl)) {
+                    out.print(JsonUtil.loadFalseResult("绀奸噾鍒涘缓澶辫触"));
+                    return;
+                }
+
+                JSONObject data = new JSONObject();
+                JSONObject link = new JSONObject();
+                link.put("clickUrl", sendUrl);
+                data.put("type", 1);
+                data.put("link", link);
+                data.put("native", true);
+                data.put("userLevel", userLijinMnager.getUserLevelInfo(uid, acceptData.getSystem()));
+                //鑾峰彇浠婃棩鐨勫墿浣欐鏁�
+                try {
+                    int leftCount = goodsLijinMnager.getTodayLeftCount(uid, new Date(user.getCreatetime()));
+                    data.put("todayLeftCount", "绔嬪噺鏈轰細锛�-1娆� 浠婃棩鍓╀綑锛�" + leftCount + "娆�");
+                } catch (Exception e) {
+                }
+                out.print(JsonUtil.loadTrueResult(data));
+            } catch (LiJinException e) {
+                out.print(JsonUtil.loadFalseResult(e.getMsg()));
+                return;
+            } catch (LiJinGoodsException e) {
+                out.print(JsonUtil.loadFalseResult(e.getMsg()));
+                return;
+            } catch (LiJinAmountException e) {
+                out.print(JsonUtil.loadFalseResult(e.getMsg()));
+                return;
+            } catch (LiJinUserException e) {
+                if (e.getCode() == LiJinUserException.CODE_USER_BALANCE_NOT_ENOUGH) {
+                    //TODO 浣欓涓嶈冻
+                }
+                out.print(JsonUtil.loadFalseResult(2001, "浠婃棩棰嗗彇绾㈠寘娆℃暟瓒呴檺"));
+                return;
+            }
+        }
+    }
+
+    /**
+     * 鍔犺浇绀奸噾淇℃伅
+     *
+     * @param goodsDetailVO
+     */
+    private void loadLijinInfo(Long uid, SystemEnum system, GoodsDetailVO goodsDetailVO) {
+        VIPEnum vipRank = userLijinMnager.getVIPRank(uid);
+        GoodsDetailVO.GoodsHongBaoListVO.UserLevelVO userLevelVO = goodsLijinMnager.getUserLevel(system, vipRank, true);
+        //杩斿埄UserLevel
+        if (goodsDetailVO.getGoods().getPriceList() != null && goodsDetailVO.getGoods().getPriceList().size() > 0)
+            goodsDetailVO.getGoods().getPriceList().get(0).setUserLevel(userLevelVO);
+        //绀奸噾UserLevel
+        userLevelVO = goodsLijinMnager.getUserLevel(system, vipRank, false);
+        goodsLijinMnager.loadLijinInfo(vipRank, goodsDetailVO, userLevelVO);
+    }
+
+
+    private TaoBaoGoodsBrief getTaoBaoGoods(String id) {
         try {
             TaoBaoGoodsBrief goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(id);
             if (goods != null) {
                 return goods;
             }
             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]);
+            if (NumberUtil.isNumeric(id)) {
+                app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
+                app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
+                app.setPid(TaoBaoConstant.TAOBAO_PID_DEFAULT);
+            } else {
+                app.setAppKey(TaoBaoConstant.TAOBAO_COMMON_APPKEY);
+                app.setAppSecret(TaoBaoConstant.TAOBAO_COMMON_APPSECRET);
+                app.setPid(TaoBaoConstant.TAOBAO_COMMON_PID);
+            }
+            app.setAdzoneId(app.getPid().split("_")[3]);
             goods = TaoKeApiUtil.searchGoodsDetail(id, app);
 
             final TaoBaoGoodsBrief finalGoods = goods;
@@ -131,25 +438,25 @@
         return null;
     }
 
-
-    private JDGoods getJDGoods(Long id) {
+    private JDGoods getJDGoods(String id) {
         JDGoods jdGoods = JDApiUtil.queryGoodsDetail(id); // 楂樼骇鎺ュ彛
         if (jdGoods == null) {
-            jdGoods = JDUtil.getGoodsDetail(id); // 鐖彇缃戦〉
+//            jdGoods = JDUtil.getGoodsDetail(id); // 鐖彇缃戦〉
             // jdGoods = JDApiUtil.getGoodsDetail(id); // 鏅�氭帴鍙�
         }
         return jdGoods;
     }
 
-    private PDDGoodsDetail getPDDGoods(Long id, Long uid) {
+    private PDDGoodsDetail getPDDGoods(SystemEnum system, String id, Long uid) {
+        String pid = pidManager.getPidCache(system, Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.fanli);
         PDDGoodsDetail pddGoods = null;
         try {
-            pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id, PinDuoDuoApiUtil.PID_FANLI, pddAuthService.getFanliCustomParams(uid));
+            pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id, pid, pddAuthService.getFanliCustomParams(uid));
         } catch (PDDApiException e) {
             e.printStackTrace();
             if (e.getCode() == PDDApiException.CODE_NOT_AUTH) {
                 try {
-                    pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id, PinDuoDuoApiUtil.PID_FANLI, Constant.PDD_SEARCH_CUSTOMER_PARAMS);
+                    pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id, pid, Constant.PDD_SEARCH_CUSTOMER_PARAMS);
                 } catch (PDDApiException e1) {
                 }
             }

--
Gitblit v1.8.0