自动化立体仓库 - WMS系统
#
LSH
2023-12-11 26d4eef329bf4418d9c588981b5cffbce669f64f
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
140
package com.zy.asrs.task.kingdee.handler;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.core.common.Cools;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
import com.zy.erp.kingdee.entity.param.LoginParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.Set;
 
@Service
@Slf4j
@Transactional
public class LoginAuthenticationHandler extends AbstractHandler<String> {
 
    @Value("${erp.address.URL}")
    //端口
    private String URL;
 
    @Value("${erp.address.loginaddress}")
    //登录地址
    private String loginaddress;
 
    @Value("${erp.login.acctID}")
    //账号ID
    private String acctID;
 
    @Value("${erp.login.username}")
    //账号
    private String username;
 
    @Value("${erp.login.password}")
    //密码
    private String password;
 
    @Value("${erp.login.lcid}")
    //
    private Integer lcid;
 
    @Autowired
    private ApiLogService apiLogService;
 
    /**
     * 45分钟登录一次金蝶系统
     * @return
     */
    @Transactional
    public synchronized ReturnT<String> start() {
 
        LoginParam loginParam =new LoginParam();
        loginParam.setAcctID(acctID);
        loginParam.setUsername(username);
        loginParam.setPassword(password);
        loginParam.setLcid(lcid);
        //上报
        String response = "";
        String cookie = "";
        boolean success = false;
        try {
            response = new HttpHandler.Builder()
                    .setUri(URL)
                    .setPath(loginaddress)
                    .setJson(JSON.toJSONString(loginParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Object sessionId = findValueByKey(JSON.parseObject(response), "SessionId");
            cookie="ASP.NET_SessionId="+sessionId+";"+"kdservice-sessionid="+jsonObject.getString("KDSVCSessionId");
            if (Cools.isEmpty(jsonObject.getString("Message"))) {
                success = true;
            } else {
                callApiLogSaveLog(JSON.toJSONString(loginParam),false);
                log.error("请求接口失败!!!url:{};request:{};response:{}", URL+loginaddress, JSON.toJSONString(loginParam), response);
//                throw new CoolException("登录金蝶失败");
            }
        } catch (Exception e) {
            log.error("fail", e);
            callApiLogSaveLog(JSON.toJSONString(loginParam),false);
            log.error("请求接口失败!!!url:{};request:{};response:{}", URL+loginaddress, JSON.toJSONString(loginParam), response);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        } finally {
//            try {
//                // 保存接口日志
//                apiLogService.save(
//                        "登录金蝶",
//                        URL + loginaddress,
//                        null,
//                        "127.0.0.1",
//                        JSON.toJSONString(loginParam),
//                        response,
//                        success
//                );
//            } catch (Exception e) { log.error("", e); }
        }
        return SUCCESS.setContent(cookie);
    }
 
 
    public static Object findValueByKey(JSONObject json, String key) {
        Set<String> keySet = json.keySet();
        for (String k : keySet) {
            Object v = json.get(k);
            if (k.equals(key)) {
                return v;
            } else if (v instanceof JSONArray) {
                int size = ((JSONArray) v).size();
                for (int i = 0; i <= size - 1; i++) {
                    Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
                    if (result != null){
                        return result;
                    }
                }
            } else if (v instanceof JSONObject){
                Object result = findValueByKey((JSONObject) v, key);
                if (result != null){
                    return result;
                }
            }
        }
        return null;
    }
 
    public void callApiLogSaveLog(String response, Boolean bool) {
        apiLogService.save("登录金蝶失败", URL, "null", loginaddress,
                "套账ID:"+acctID+"、账号:"+username+"、密码:"+password,
                response, bool);
    }
 
 
}