admin
2022-08-25 c9db68e33f90231b064b8864fc69ccf7d25f5e0b
facade-lijin/src/main/java/com/ks/lijin/utils/taobao/TaoKeApiUtil.java
@@ -1,6 +1,7 @@
package com.ks.lijin.utils.taobao;
import com.google.gson.Gson;
import com.ks.lijin.exception.*;
import com.ks.lijin.pojo.DTO.taobao.*;
import com.ks.lijin.pojo.PageEntity;
@@ -25,9 +26,9 @@
    private static Map<String, Integer> invalidMap = new HashMap<>();
    // 淘礼金创建
    public static TaoLiJinDTO createTaoLiJin(Long auctionId, String name, BigDecimal perface, int totalNum,
    public static TaoLiJinDTO createTaoLiJin(String auctionId, String name, BigDecimal perface, int totalNum,
                                             Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime, TaoKeAppInfo app)
            throws LiJinAccountException, LiJinException, LiJinGoodsException {
            throws LiJinAccountException, LiJinAmountException, LiJinException, LiJinGoodsException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.vegas.tlj.create");
        map.put("adzone_id", app.getPid().split("_")[3]);
@@ -68,6 +69,7 @@
                // 接口返回异常
                String msgCode = root.optJSONObject("result").optString("msg_code");
                String msgInfo = root.optJSONObject("result").optString("msg_info");
                if (!StringUtil.isNullOrEmpty(msgCode)) {
                    // TLJLogHelper.info(auctionId, root.toString());// 淘礼金异常信息记录  TODO
                    switch (msgCode) {
@@ -79,10 +81,162 @@
                            throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_NO_MONEY, "官方玩法钱包余额不足");
                        case "ASSET_ACCOUNT_BALANCE_NOT_ENOUGH":
                            throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_NO_MONEY, "账户预算不足");
                        case "FAIL_CHECK_MEMBER_DAILY_SEND_ITEM_ABOVE_LIMIT_ERROR":
                            throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_NO_GOODS, "今日商品创建数已超上限,请您明日再试");
                        case "DAILY_DRAW_ITEM_ABOVE_LIMIT":
                        case "FAIL_CHECK_ITEM_DAILY_SEND_NUM_CHECK_ERROR":
                            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_CREATED_NUM_FULL, "今日该商品淘礼金创建数已超上限,请您明日再试");
                            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_CREATED_FULL, "今日该商品淘礼金创建数已超上限,请您明日再试");
                        case "FAIL_CHECK_TLJ_MIN_FACE_ERROR":
                            throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, msgInfo);
                        default:
                            throw new LiJinException(Integer.parseInt(msgCode), root.toString());
                            throw new LiJinException(1, root.toString());
                    }
                }
            }
        } catch (LiJinException e) {
            throw e;
        }
        return null;
    }
    /**
     * 淘礼金报告
     *
     * @param rightsId
     * @param app
     * @return
     * @throws LiJinAccountException
     * @throws LiJinAmountException
     * @throws LiJinException
     * @throws LiJinGoodsException
     */
    public static TaoLiJinReportDTO taolijinReport(String rightsId, TaoKeAppInfo app) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.vegas.tlj.report");
        map.put("adzone_id", app.getPid().split("_")[3]);
        map.put("rights_id", rightsId);
        String result = baseRequestForThreeTimes(map, app);
        JSONObject json = JSONObject.fromObject(result);
        System.out.println(json);
        JSONObject root = json.optJSONObject("tbk_dg_vegas_tlj_report_response");
        if (root != null && root.optBoolean("result_success")) {
            JSONObject modelJson = root.optJSONObject("model").optJSONObject("extra");
            if (modelJson != null && modelJson.size() > 0) {
                TaoLiJinReportDTO report = new TaoLiJinReportDTO();
                report.setWin_amount(new BigDecimal(modelJson.optString("win_sum_amt")));
                report.setWin_num(modelJson.optInt("win_pv"));
                report.setRefund_amount(new BigDecimal(modelJson.optString("refund_sum_amt")));
                report.setRefund_num(modelJson.optInt("refund_num"));
                report.setAlipay_amount(new BigDecimal(modelJson.optString("alipay_amt")));
                report.setUse_amount(new BigDecimal(modelJson.optString("use_sum_amt")));
                report.setUse_num(modelJson.optInt("use_num"));
                report.setUnfreeze_amount(new BigDecimal(modelJson.optString("remaining_amt")));
                report.setUnfreeze_num(modelJson.optInt("remaining_num"));
                report.setPre_commission_amount(new BigDecimal(modelJson.optString("pre_pub_share_fee_for_disp")));
                return report;
            }
        }
//        if (root != null && root.optJSONObject("result") != null) {
//            if (root.optJSONObject("result").optBoolean("success")) {
//                JSONObject modelJson = root.optJSONObject("result").optJSONObject("model");
//                TaoLiJinReportDTO dto = new Gson().fromJson(modelJson.toString(), TaoLiJinReportDTO.class);
//                return dto;
//            } else {
//                // 日志记录  TODO
//            }
//        }
        return null;
    }
    // 裂淘礼金创建
    public static TaoLiJinDTO createLieBianTaoLiJin(String auctionId, String name, BigDecimal perface, int totalNum,
                                                    Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime, TaoKeAppInfo app)
            throws LiJinAccountException, LiJinAmountException, LiJinException, LiJinGoodsException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.vegas.lbtlj.create");
        map.put("adzone_id", app.getPid().split("_")[3]);
        map.put("item_id", auctionId + "");
        //淘礼金总个数
        map.put("rights_num", totalNum + "");
        //裂变淘礼金总个数
        map.put("task_rights_num", totalNum + "");
        //裂变单个淘礼金面额,支持两位小数,单位元
        map.put("task_rights_per_face", "1.01");
        //裂变淘礼金邀请人数
        map.put("invite_num", "2");
        //裂变淘礼金邀请时长;单位:分钟;最大120分钟
        map.put("invite_time_limit", "60");
        map.put("name", name);
        map.put("user_total_win_num_limit", "1");
        map.put("security_switch", "false");
        map.put("rights_per_face", perface.toString());
        map.put("send_start_time", TimeUtil.getGernalTime(sendStartTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        if (sendEndTime != null)
            map.put("send_end_time", TimeUtil.getGernalTime(sendEndTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        if (useEndTime != null) {
            map.put("use_end_time", TimeUtil.getGernalTime(useEndTime.getTime(), "yyyy-MM-dd"));
            map.put("use_end_time_mode", "2");
        }
        map.put("accept_start_time", TimeUtil.getGernalTime(sendStartTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        map.put("accept_end_time", TimeUtil.getGernalTime(sendEndTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        if (useStartTime != null)
            map.put("use_start_time", TimeUtil.getGernalTime(useStartTime.getTime(), "yyyy-MM-dd"));
        try {
            String result = baseRequestForThreeTimes(map, app);
            JSONObject json = JSONObject.fromObject(result);
            System.out.println(result);
            JSONObject root = json.optJSONObject("tbk_dg_vegas_tlj_create_response");
            if (root != null && root.optJSONObject("result") != null) {
                if (root.optJSONObject("result").optBoolean("success")) {
                    JSONObject modelJson = root.optJSONObject("result").optJSONObject("model");
                    TaoLiJinDTO dto = new TaoLiJinDTO();
                    dto.setRightsId(modelJson.optString("rights_id"));
                    dto.setSendUrl(modelJson.optString("send_url"));
                    return dto;
                } else {
                    // 日志记录  TODO
                }
                // 接口返回异常
                String msgCode = root.optJSONObject("result").optString("msg_code");
                String msgInfo = root.optJSONObject("result").optString("msg_info");
                if (!StringUtil.isNullOrEmpty(msgCode)) {
                    // TLJLogHelper.info(auctionId, root.toString());// 淘礼金异常信息记录  TODO
                    switch (msgCode) {
                        case "FAIL_BIZ_ITEM_FORBIDDEN":
                            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_NOT_SUPPORT, "该商品不支持创建淘礼金红包");
                        case "FAIL_BIZ_ACCOUNT_UN_PAID":
                            throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_UN_PAID, "您的淘礼金账户暂未创建,请前往资金管理页面充值");
                        case "PRE_FREEZE_ASSET_ACCOUNT_ERROR":
                            throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_NO_MONEY, "官方玩法钱包余额不足");
                        case "ASSET_ACCOUNT_BALANCE_NOT_ENOUGH":
                            throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_NO_MONEY, "账户预算不足");
                        case "FAIL_CHECK_MEMBER_DAILY_SEND_ITEM_ABOVE_LIMIT_ERROR":
                            throw new LiJinAccountException(LiJinAccountException.CODE_TLJ_NO_GOODS, "今日商品创建数已超上限,请您明日再试");
                        case "DAILY_DRAW_ITEM_ABOVE_LIMIT":
                        case "FAIL_CHECK_ITEM_DAILY_SEND_NUM_CHECK_ERROR":
                            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_CREATED_FULL, "今日该商品淘礼金创建数已超上限,请您明日再试");
                        case "FAIL_CHECK_TLJ_MIN_FACE_ERROR":
                            throw new LiJinAmountException(LiJinAmountException.CODE_LIJIN_AMOUNT_OUTOFRANGE, msgInfo);
                        default:
                            throw new LiJinException(1, root.toString());
                    }
                }
            }
@@ -134,8 +288,9 @@
        params.put("v", "2.0");
        params.put("timestamp", TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
        params.put("format", "json");
        if (!StringUtil.isNullOrEmpty(app.getAdzoneId()))
        if (!StringUtil.isNullOrEmpty(app.getAdzoneId())) {
            params.put("adzone_id", app.getAdzoneId());
        }
        params.put("sign", getSign(params, "md5", app).toUpperCase());
        String result = taoKeGet(params);
        JSONObject data = JSONObject.fromObject(result);
@@ -234,11 +389,15 @@
                String key = keys.next();
                url += String.format("%s=%s&", key, URLEncoder.encode(params.get(key), "UTF-8"));
            }
            System.out.println("淘客请求连接:" + url);
            GetMethod method = new GetMethod(url);
            // 3S的响应超时
            HttpConnectionManagerParams hparams = new HttpConnectionManagerParams();
            hparams.setConnectionTimeout(3000);
            client.getHttpConnectionManager().setParams(hparams);
            client.executeMethod(method);
            String result = method.getResponseBodyAsString();
            System.out.println(result);
            return method.getResponseBodyAsString();
        } catch (Exception e) {
            e.printStackTrace();
@@ -247,7 +406,7 @@
    }
    public static TaoBaoGoodsBrief searchGoodsDetail(Long id) throws TaoBaoGoodsDownException {
    public static TaoBaoGoodsBrief searchGoodsDetail(String id) throws TaoBaoGoodsDownException {
        return searchGoodsDetail(id, null, null);
    }
@@ -258,7 +417,7 @@
     * @return
     * @throws
     */
    public static TaoBaoGoodsBrief searchGoodsDetail(Long id, String specialId, String relationId) throws TaoBaoGoodsDownException {
    public static TaoBaoGoodsBrief searchGoodsDetail(String id, String specialId, String relationId) throws TaoBaoGoodsDownException {
        TaoBaoGoodsBrief goods = getSimpleGoodsInfo(id);
        if (goods == null)
            return null;
@@ -271,8 +430,8 @@
        if (result != null && result.getTaoBaoGoodsBriefs() != null)
            for (TaoBaoGoodsBrief g : result.getTaoBaoGoodsBriefs()) {
                System.out.println(goods.getAuctionId() + ":" + g.getAuctionId());
                if (goods.getAuctionId().longValue() == g.getAuctionId()) {
                    g.setId(goods.getAuctionId());
                if (TaoBaoUtil.isEqual(goods.getAuctionId(), g.getAuctionId())) {
                    //g.setId(goods.getAuctionId());
                    g.setCreatetime(new Date());
                    g.setMaterialLibType(goods.getMaterialLibType());
                    g.setProvcity(goods.getProvcity());
@@ -294,7 +453,7 @@
     * @param id -商品AuctionId
     * @return
     */
    public static TaoBaoGoodsBrief getSimpleGoodsInfo(Long id) throws TaoBaoGoodsDownException {
    public static TaoBaoGoodsBrief getSimpleGoodsInfo(String id) throws TaoBaoGoodsDownException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.item.info.get");
        map.put("num_iids", id + "");
@@ -321,7 +480,7 @@
    private static TaoBaoGoodsBrief parseSimpleGoodsInfo(JSONObject item) {
        TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
        goods.setAuctionId(item.optLong("num_iid"));
        goods.setAuctionId(item.optString("num_iid"));
        goods.setAuctionUrl(item.optString("item_url"));
        goods.setBiz30day(item.optInt("volume"));
        if (item.optJSONObject("small_images") != null) {
@@ -487,7 +646,7 @@
            goods.setPictUrlWhite(item.optString("white_image"));
        }
        goods.setAuctionId(item.optLong("num_iid"));
        goods.setAuctionId(item.optString("num_iid"));
        goods.setAuctionUrl("https:" + item.optString("url"));
        goods.setBiz30day(item.optInt("volume"));
        goods.setCouponInfo(item.optString("coupon_info"));
@@ -573,6 +732,48 @@
        return goods;
    }
    public static Date getTaoBaoSystemTime() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.time.get");
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, false);
            String time = json.optJSONObject("time_get_response").optString("time");
            return new Date(TimeUtil.convertToTimeTemp(time, "yyyy-MM-dd HH:mm:ss"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void main(String[] args) {
//        TaoLiJinReportDTO dto = taolijinReport("eC2%2FoV8gigdzVO5CvuRDjDVC0SEP1L7d", new TaoKeAppInfo("27743325", "527a23554f71557d7b786bc479fcd5fe"));
//        System.out.println(dto);
        TaoKeAppInfo app = new TaoKeAppInfo("24980167", "e0a2e05deabf5ce039b52e5b492d5382", "mm_124933865_56750082_19511350325");
        Long auctionId = 648785782467L;
        String name = "裂变淘礼金";
        BigDecimal perface = new BigDecimal(1);
        int totalNum = 1;
        Date sendStartTime = new Date();
        Date sendEndTime = new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 4L);
        Date useStartTime = sendStartTime;
        Date useEndTime = sendEndTime;
        try {
            createLieBianTaoLiJin(auctionId+"", name, perface, totalNum,
                    sendStartTime, sendEndTime, useStartTime, useEndTime, app);
        } catch (LiJinAccountException e) {
            e.printStackTrace();
        } catch (LiJinAmountException e) {
            e.printStackTrace();
        } catch (LiJinException e) {
            e.printStackTrace();
        } catch (LiJinGoodsException e) {
            e.printStackTrace();
        }
    }
}