admin
2024-07-29 734dfe9eb0a2176103dce8245c69b1194574c68e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.taoke.autopay.utils.order;
 
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.taoke.autopay.dto.DYOrderDto;
import com.taoke.autopay.dto.DYSkuOrderDto;
import com.taoke.autopay.dto.DYSubsidyDto;
import com.taoke.autopay.exception.KeyOrderException;
import com.taoke.autopay.utils.Constant;
import com.taoke.autopay.utils.HttpUtil;
import com.taoke.autopay.utils.JsonUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * @author hxh
 * @title: DYOrderApi
 * @description: 抖音订单接口
 * @date 2024/6/14 17:47
 */
public class DYOrderApi {
    private static Logger logger = LoggerFactory.getLogger("dyorderApiLogger");
 
    private static Gson gson=JsonUtil.getSimpleGson();
 
    private static String requestByOrderNo1(String orderNo) {
        String url = String.format("https://api.youihuo.com/open/order.getFreeOrder?apiKey=sTIFFTyunIFZfp5i4V6g19PN9biudl4v&orderId=%s", orderNo);
        String result = HttpUtil.get(url);
        System.out.println(result);
        return result;
    }
 
    private static String requestByOrderNo2(String orderNo) {
        String url = String.format("https://api.bpshe.com/mall/douyinOMS/getSubsidyOrderInfo?orderId=%s", orderNo);
        Map<String,String> headers=new HashMap<>();
        headers.put("Accept","application/json;charset=utf-8");
        String result = HttpUtil.get(url, headers);
        return result;
    }
 
    private static DYOrderDto getOrderDetail1(String orderNo) throws KeyOrderException {
        String result = requestByOrderNo1(orderNo);
        JSONObject root = JSONObject.fromObject(result);
        if (root.optInt("code") != 1000) {
            logger.error(String.format("抖音订单查询出错(1):%s - %s",orderNo, result));
            throw new KeyOrderException(root.optString("message"));
        }
        JSONObject data = root.optJSONObject("data");
        DYOrderDto dto =  JsonUtil.getSimpleGson().fromJson(data.toString(),DYOrderDto.class);
        dto.setOrderChannel(Constant.ORDER_CHANNEL_CYX);
        return dto;
    }
 
    private static DYOrderDto getOrderDetail2(String orderNo) throws KeyOrderException {
        String result = requestByOrderNo2(orderNo);
        System.out.println(result);
        JSONObject root = JSONObject.fromObject(result);
        if (root.optInt("errCode") != 0) {
            logger.error(String.format("抖音订单查询出错(2):%s - %s",orderNo, result));
            throw new KeyOrderException(root.optString("errMsg"));
        }
        JSONObject data = root.optJSONObject("data");
        if(data==null){
            logger.error(String.format("抖音订单查询无数据(2):%s - %s",orderNo, result));
            throw new KeyOrderException("订单查询无数据");
        }
        JSONObject orderDetailData = data.optJSONObject("orderDetail");
        JSONArray subsidyDetailData = data.optJSONArray("subsidyDetail");
        if(orderDetailData==null||subsidyDetailData==null){
            logger.error(String.format("订单与补贴无数据(2):%s - %s",orderNo, result));
            throw new KeyOrderException("订单与补贴无数据");
        }
        orderDetailData = orderDetailData.optJSONObject("shop_order_detail");
        DYOrderDto dyOrder =   gson.fromJson(orderDetailData.toString(),DYOrderDto.class);
        List<DYSubsidyDto> subsidyList = gson.fromJson(subsidyDetailData.toString(), new TypeToken<List<DYSubsidyDto>>(){}.getType());
        if(subsidyList.size()!=dyOrder.getSku_order_list().size()){
            throw new KeyOrderException("订单商品与补贴商品不相等");
        }
        Map<String, DYSkuOrderDto> skuMap=new HashMap<>();
        for(DYSkuOrderDto d: dyOrder.getSku_order_list()){
            skuMap.put(d.getProduct_id()+"", d);
        }
        for(DYSubsidyDto d:subsidyList){
            if(skuMap.get(d.getGoodsId())==null){
                throw new KeyOrderException("补贴商品没在订单商品中");
            }
            if(skuMap.get(d.getGoodsId()).getPay_amount()> d.getSubsidyAmount()){
                throw new KeyOrderException("订单商品金额高于补贴金额");
            }
            if(!d.getStatus().equalsIgnoreCase("online")){
                throw new KeyOrderException("补贴下线");
            }
        }
        dyOrder.setOrderChannel(Constant.ORDER_CHANNEL_BPS);
        return  dyOrder;
    }
 
 
    public static DYOrderDto getOrderDetail(String orderNo) throws KeyOrderException {
        DYOrderDto dto=null;
        List<KeyOrderException> exceptions=new ArrayList<>();
        try {
            dto = getOrderDetail1(orderNo);
        }catch(KeyOrderException e){
            exceptions.add(e);
        }
        if(dto==null){
            try {
                dto = getOrderDetail2(orderNo);
            }catch(KeyOrderException e){
                exceptions.add(e);
            }
        }
 
        if(dto!=null){
            return dto;
        }
        String exception="";
        for(KeyOrderException e:exceptions){
            exception+=e.getMessage()+";";
        }
       throw new KeyOrderException(exception);
    }
 
    public static void main(String[] args) throws Exception {
//        DYOrderDto dto = (DYOrderApi.getOrderDetail("6932591080266339994"));
        DYOrderDto result = getOrderDetail("6932676890890213137");
        System.out.println(result);
    }
 
}