提交 f130dde3 authored 作者: inroi's avatar inroi

微调

上级 9d1d89ed
...@@ -111,15 +111,6 @@ ...@@ -111,15 +111,6 @@
<version>0.10.0</version> <version>0.10.0</version>
</dependency> </dependency>
<!--k3cloud-WebAPI-->
<dependency>
<groupId>webapi</groupId>
<artifactId>k3cloud-webapi-client</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${project.basedir}/src/main/resources/lib/k3cloud-webapi-client.jar</systemPath>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -131,9 +131,7 @@ public class KingDeeApi { ...@@ -131,9 +131,7 @@ public class KingDeeApi {
String content = "{\"FormId\":\"" + sFormId + "\"," + stringKey(key) + stringWhere(where) + "}"; String content = "{\"FormId\":\"" + sFormId + "\"," + stringKey(key) + stringWhere(where) + "}";
System.out.println("==========content==========" + content + "==========content=========="); System.out.println("==========content==========" + content + "==========content==========");
List<List<Object>> result = kingDeeK3CloudApi.executeBillQuery(content); List<List<Object>> result = kingDeeK3CloudApi.executeBillQuery(content);
System.out.println(); System.out.println("---------->" + JsonUtil.toString(result));
System.out.println("++++++++++result++++++++++" + JsonUtil.toString(result) + "++++++++++result++++++++++");
System.out.println();
return result; return result;
} else { } else {
throw new KingDeeConnectException(LOGIN_MESSAGE); throw new KingDeeConnectException(LOGIN_MESSAGE);
......
package com.system.api; package com.system.api;
import com.core.config.ThreadLocalConfig; import com.core.config.ThreadLocalConfig;
import kingdee.bos.json.JSONObject; import com.core.utils.StringUtil;
import kingdee.bos.webapi.client.ApiHttpClient; import com.system.constans.KingDeeConstants;
import kingdee.bos.webapi.client.ApiRequest; import com.system.serializer.SerializerProxy;
import kingdee.bos.webapi.client.ApiServiceRequest; import com.system.utils.JsonUtil;
import org.apache.http.client.CookieStore; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* @author Inori * @author Inori
*/ */
public class KingDeeApiClient { public class KingDeeApiClient {
/**
* 金蝶地址
*/
private String serverUrl; private String serverUrl;
private CookieStore cookieStore; /**
* Cookie
*/
private String cookieStore;
/**
* 金蝶后缀
*/
private static final String HTTP_SUFFIX = ".common.kdsvc";
public KingDeeApiClient(String serverUrl) { public KingDeeApiClient(String serverUrl) {
this.serverUrl = serverUrl; this.serverUrl = serverUrl;
} }
public <T> ApiRequest<T> createRequest(String serviceName, Object[] parameters, Class<T> returnType) { @SuppressWarnings("unchecked")
return new ApiServiceRequest<>(this.serverUrl, this.cookieStore, serviceName, parameters, returnType);
}
public <T> T execute(String serviceName, Object[] parameters, Class<T> returnType) throws Exception { public <T> T execute(String serviceName, Object[] parameters, Class<T> returnType) throws Exception {
ApiRequest<T> request = this.createRequest(serviceName, parameters, returnType); Map<String, Object> header = new HashMap<>(1);
ApiHttpClient<T> httpClient = new ApiHttpClient<>(); header.put("cookie", cookieStore);
request.setListener(httpClient);
Map<String, Object> request = new HashMap<>(1);
request.put("parameters", parameters);
System.out.println("---------->" + request.getServerUrl()); String url = serverUrl + serviceName + HTTP_SUFFIX;
System.out.println("------------>" + url);
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
T send = httpClient.Send(request, returnType); ResponseEntity<String> responseEntity = KingDeeHttpApi.httpPost(url, header, JsonUtil.toString(request));
long costTime = System.currentTimeMillis() - start; long costTime = System.currentTimeMillis() - start;
Map<String, Object> map = ThreadLocalConfig.get(); Map<String, Object> map = ThreadLocalConfig.get();
map.put("costTime", costTime); map.put("costTime", costTime);
ThreadLocalConfig.set(map); ThreadLocalConfig.set(map);
return send; return (T) (new SerializerProxy()).deserialize(responseEntity.getBody(), returnType);
} }
public Boolean login(String dbId, String userName, String password, int lcid) { public Boolean login(String dbId, String userName, String password, int lcid) {
try { try {
Object[] loginInfo = new Object[]{dbId, userName, password, lcid}; Map<String, Object> request = new HashMap<>(1);
ApiRequest<String> request = this.createRequest("Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser", loginInfo, String.class); request.put("parameters", new Object[]{dbId, userName, password, lcid});
ApiHttpClient<String> httpClient = new ApiHttpClient<>();
request.setListener(httpClient); String url = serverUrl + "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser" + HTTP_SUFFIX;
String ret = httpClient.Send(request, String.class); ResponseEntity<String> responseEntity = KingDeeHttpApi.httpPost(url, JsonUtil.toString(request));
System.out.println(ret); System.out.println(responseEntity.getBody());
int result = (new JSONObject(ret)).getInt("LoginResultType");
if (result == 1) { if (responseEntity.getStatusCode() == HttpStatus.OK) {
this.cookieStore = request.getCookieStore(); String cookieStore = this.getCookieStore(responseEntity);
return true; if (StringUtil.isNotBlank(cookieStore)) {
this.cookieStore = cookieStore;
return true;
} else {
return false;
}
} else { } else {
return false; return false;
} }
...@@ -66,5 +87,24 @@ public class KingDeeApiClient { ...@@ -66,5 +87,24 @@ public class KingDeeApiClient {
} }
} }
private String getCookieStore(ResponseEntity<String> responseEntity) {
String cookieStore = "";
Set<String> keys = responseEntity.getHeaders().keySet();
for (String key : keys) {
if (key.equalsIgnoreCase(KingDeeConstants.KING_DEE_COOKIE_NAME)) {
List<String> cookieList = responseEntity.getHeaders().get(key);
if (!CollectionUtils.isEmpty(cookieList)) {
for (String cookie : cookieList) {
if (cookie.startsWith(KingDeeConstants.KING_DEE_SESSION_NAME)) {
cookieStore = cookie;
break;
}
}
}
}
}
return cookieStore;
}
} }
package com.system.api;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.util.CollectionUtils;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
import java.util.Set;
/**
* @author Inori
*/
public class KingDeeHttpApi {
/**
* 连接超时时间
*/
private static final int CONN_TIMEOUT = 10000;
/**
* 请求超时时间
*/
private static final int READ_TIMEOUT = 10000;
/**
* 请求工具
*/
private static RestTemplate restTemplate;
static {
//设置超时时间
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(CONN_TIMEOUT);
requestFactory.setReadTimeout(READ_TIMEOUT);
restTemplate = new RestTemplate(requestFactory);
}
/**
* 发送Post请求
*/
public static ResponseEntity<String> httpPost(String url, String json) {
//初始化header公共参数
HttpHeaders httpHeaders = initHeader();
//发送请求
return toPost(url, httpHeaders, json);
}
/**
* 发送Post请求
*/
public static ResponseEntity<String> httpPost(String url, Map<String, Object> header, String json) {
//初始化header公共参数
HttpHeaders httpHeaders = initHeader();
setHeaderParam(httpHeaders, header);
//发送请求
return toPost(url, httpHeaders, json);
}
/**
* 设置header公共参数
*/
private static HttpHeaders initHeader() {
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", "application/json");
headers.add("Accpet-Encoding", "gzip");
headers.add("Content-Encoding", "UTF-8");
headers.add("Content-Type", "application/json; charset=UTF-8");
return headers;
}
/**
* 设置header参数
*/
private static void setHeaderParam(HttpHeaders httpHeaders, Map<String, Object> headers) {
if (!CollectionUtils.isEmpty(headers)) {
Set<String> keys = headers.keySet();
for (String key : keys) {
httpHeaders.add(key, headers.get(key).toString());
}
}
}
/**
* 发送请求
*/
private static ResponseEntity<String> toPost(String url, HttpHeaders httpHeaders, String json) {
HttpEntity<String> httpEntity = new HttpEntity<>(json, httpHeaders);
return restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
}
}
\ No newline at end of file
package com.system.constans;
/**
* @author Inori
*/
public interface KingDeeConstants {
String KING_DEE_COOKIE_NAME = "Set-Cookie";
String KING_DEE_SESSION_NAME = "kdservice-sessionid";
}
package com.system.serializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
/**
* @author Inori
*/
public class SerializerProxy {
public Object deserialize(String content, Class<?> type) {
if (content != null && content.length() != 0) {
return "java.lang.string".equalsIgnoreCase(type.getName()) ? content : this.toDeserialize(content, type);
} else if (!type.isPrimitive()) {
return type;
} else {
return "java.lang.String".equalsIgnoreCase(type.getName()) ? content : null;
}
}
public Object toDeserialize(String content, Class<?> type) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(content, type);
} catch (IOException var6) {
var6.printStackTrace();
}
return null;
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论