liujie
2023-08-31 d6811336d546e4963a9af3bd7cd8654d14193bce
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
package com.stylefeng.guns.modular.system.utils.PortUtil;
 
import cn.hutool.core.util.XmlUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
import com.stylefeng.guns.core.exception.GunsException;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.warpper.TerminaleDataWarpper;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
 
import java.io.IOException;
 
public class ITSStrategy implements WharfStrategy {
 
    private static final String authUrl = "https://api.itslb.com/tms2/Account/Login";
    private static final String url = "https://api.itslb.com/tms2/Import/ContainerAvailability";
 
    private static final String username = "Bcllc1441";
    private static final String password = "Bcllc1441@";
 
    private static String bearerToken = "";
 
 
    @Override
    public TerminaleDataWarpper executeLogic(String... params) {
 
        String enums = "";
        if (params.length == 0) {
            throw new GunsException(BizExceptionEnum.REQUEST_EMPTY_ERROR);
        } else {
            enums = params[0];
        }
 
        String jsonBody = JSONUtil.createObj()
                .put("refType", "CN")
                .put("refNums", enums)
                .toString();
        HttpResponse execute = HttpRequest.post(url)
                .header("Authorization", "Bearer " + bearerToken)
                .body(jsonBody)
                .execute();
        int statusCode = execute.getStatus();
        String body = execute.body();
        if ("401".equals(statusCode)){
            getAuth();
            executeLogic(params);
        }
        TerminaleDataWarpper terminaleDataWarpper = new TerminaleDataWarpper();
        if ("404".equals(statusCode)){
            return terminaleDataWarpper;
        }
        if ("200".equals(statusCode)){
            JSONObject jsonObject = JSONObject.parseObject(body);
            Object o = jsonObject.get("containerAvailabilities");
            if (ToolUtil.isNotEmpty(o)){
                try {
                    ObjectMapper objectMapper = new ObjectMapper();
                    JsonNode jsonNode = objectMapper.readTree(o.toString());
                    for (JsonNode node : jsonNode) {
                        String lineFeeStatusNote = node.get("lineFeeStatusNote").asText();
                        if ("OK".equals(lineFeeStatusNote)){
                            terminaleDataWarpper.setLineHold("");
                        }
 
                        String customsStatusNote = node.get("customsStatusNote").asText();
                        if (ToolUtil.isNotEmpty(customsStatusNote) && "OK".equals(customsStatusNote)){
                            terminaleDataWarpper.setCustomHold("");
                        }
 
                        String pierPassStatusNote = node.get("pierPassStatusNote").asText();
                        if (ToolUtil.isNotEmpty(pierPassStatusNote) && "OK".equals(pierPassStatusNote)){
                            terminaleDataWarpper.setPierpass("");
                        }
 
                        String estDischargeDateShift = node.get("estDischargeDateShift").asText();
                        if (ToolUtil.isNotEmpty(estDischargeDateShift)){
                            terminaleDataWarpper.setLfd(estDischargeDateShift);
                        }
 
                        String spotStatusNote = node.get("spotStatusNote").asText();
                        if (ToolUtil.isNotEmpty(estDischargeDateShift) && "AREA CLOSED".equals(spotStatusNote)){
                            terminaleDataWarpper.setClosedArea("");
                        }
 
                        String containerNumber = node.get("containerNumber").asText();
                        if (ToolUtil.isNotEmpty(containerNumber) ){
                            terminaleDataWarpper.setAppointmentNumber(containerNumber);
                        }
 
                        String isContainerAvailable = node.get("isContainerAvailable").asText();
                        if (ToolUtil.isNotEmpty(isContainerAvailable) && "true".equals(isContainerAvailable)){
                            terminaleDataWarpper.setAvailability(isContainerAvailable);
                        }else {
                            terminaleDataWarpper.setAvailability("false");
                        }
 
 
                        break;
                    }
 
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
 
            }
        }
 
        return terminaleDataWarpper;
    }
 
    public static void getAuth(){
        String jsonInputString = "{\"userName\": \"Bcllc1441\", \"password\": \"Bcllc1441@\"}";
        String body = HttpRequest.post(authUrl)
                .body(jsonInputString)
                .execute().body();
        Document document = XmlUtil.parseXml(body);
        Element rootElement = document.getDocumentElement();
        String access_token = rootElement.getElementsByTagName("access_token").item(0).getTextContent();
 
        if (ToolUtil.isNotEmpty(access_token)){
            bearerToken = access_token;
        }
    }
}