commit e8e6c3bf222df50cce71681491f3f36e723035b2
Author: RuicyWu <1063154311@qq.com>
Date: Thu Jan 15 17:35:00 2026 +0800
初始化
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1e2867e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,39 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
+/config/
diff --git a/extLib/chinaumsdk/.gitignore b/extLib/chinaumsdk/.gitignore
new file mode 100644
index 0000000..ea8c4bf
--- /dev/null
+++ b/extLib/chinaumsdk/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/extLib/chinaumsdk/.idea/.gitignore b/extLib/chinaumsdk/.idea/.gitignore
new file mode 100644
index 0000000..a0ccf77
--- /dev/null
+++ b/extLib/chinaumsdk/.idea/.gitignore
@@ -0,0 +1,5 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Environment-dependent path to Maven home directory
+/mavenHomeManager.xml
diff --git a/extLib/chinaumsdk/.idea/compiler.xml b/extLib/chinaumsdk/.idea/compiler.xml
new file mode 100644
index 0000000..9cc5329
--- /dev/null
+++ b/extLib/chinaumsdk/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/extLib/chinaumsdk/.idea/encodings.xml b/extLib/chinaumsdk/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/extLib/chinaumsdk/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/extLib/chinaumsdk/.idea/jarRepositories.xml b/extLib/chinaumsdk/.idea/jarRepositories.xml
new file mode 100644
index 0000000..c7ea920
--- /dev/null
+++ b/extLib/chinaumsdk/.idea/jarRepositories.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/extLib/chinaumsdk/.idea/misc.xml b/extLib/chinaumsdk/.idea/misc.xml
new file mode 100644
index 0000000..d5cd614
--- /dev/null
+++ b/extLib/chinaumsdk/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/extLib/chinaumsdk/chinaumsdk.jar b/extLib/chinaumsdk/chinaumsdk.jar
new file mode 100644
index 0000000..5633aa8
Binary files /dev/null and b/extLib/chinaumsdk/chinaumsdk.jar differ
diff --git a/extLib/chinaumsdk/pom.xml b/extLib/chinaumsdk/pom.xml
new file mode 100644
index 0000000..a6f774a
--- /dev/null
+++ b/extLib/chinaumsdk/pom.xml
@@ -0,0 +1,52 @@
+
+ 4.0.0
+ com.chinaums.open
+ open-api-sdk
+ jar
+ 1.0-SNAPSHOT
+ open-api-sdk
+ http://maven.apache.org
+
+ UTF-8
+
+
+
+ net.sf.json-lib
+ json-lib
+ 2.4
+ jdk15
+
+
+ commons-logging
+ commons-logging
+ 1.1.1
+
+
+ com.squareup.okhttp3
+ okhttp
+ 3.5.0
+
+
+ org.apache.commons
+ commons-lang3
+ 3.4
+
+
+ com.google.guava
+ guava
+ 19.0
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+ commons-codec
+ commons-codec
+ 1.15
+
+
+
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/DefaultOpenApiClient.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/DefaultOpenApiClient.java
new file mode 100644
index 0000000..84e212d
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/DefaultOpenApiClient.java
@@ -0,0 +1,105 @@
+package com.chinaums.open.api;
+
+import com.chinaums.open.api.constants.ConfigBean;
+import com.chinaums.open.api.internal.util.OpenApiLogger;
+import com.chinaums.open.api.internal.util.http.HttpTransport;
+import com.chinaums.open.api.parser.json.ObjectJsonParser;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.UUID;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: ZHANGWEI
+ * Date: 2016/12/2
+ * Time: 14:22
+ * 所属模块:
+ * 功能说明:开放平台客户端
+ */
+public class DefaultOpenApiClient implements OpenApiClient {
+ private static final String constant_classname=DefaultOpenApiClient.class.getSimpleName();
+ /**
+ * 开放平台URL
+ */
+ private String serverUrl;
+ /**
+ * appId
+ */
+ private String appId;
+ /**
+ * appKey
+ */
+ private String appKey;
+ /**
+ * 字符集格式
+ */
+ private String encodeCharSet;
+
+ public DefaultOpenApiClient(String serverUrl, String appId, String appKey) {
+ this.serverUrl = serverUrl;
+ this.appId = appId;
+ this.appKey = appKey;
+ }
+
+ public DefaultOpenApiClient(String serverUrl, String appId, String appKey, String encodeCharSet) {
+ this.serverUrl = serverUrl;
+ this.appId = appId;
+ this.appKey = appKey;
+ this.encodeCharSet = encodeCharSet;
+ }
+
+ public T execute(OpenApiRequest openApiRequest) throws OpenApiException {
+ return execute(openApiRequest,null,null);
+ }
+
+ public T execute(OpenApiRequest openApiRequest, String token) throws OpenApiException {
+ return execute(openApiRequest,token,null);
+ }
+
+ public T execute(OpenApiRequest openApiRequest, String token,String encodeCharSet) throws OpenApiException {
+ OpenApiParser openApiParser = new ObjectJsonParser(openApiRequest.responseClass());
+ return execute_(openApiRequest,openApiParser,token,encodeCharSet);
+ }
+
+ public T execute_(OpenApiRequest openApiRequest,OpenApiParser openApiParser,String token,String encodeCharSet){
+ ConfigBean configBean = new ConfigBean();
+ OpenApiContext context = new OpenApiContext();
+ T trsp = null;
+ String response = "";
+ try {
+ if(StringUtils.isBlank(serverUrl)) throw new OpenApiException("通讯地址未设置");
+ if(StringUtils.isBlank(appId)) throw new OpenApiException("开发者appId未设置");
+ if(StringUtils.isBlank(appKey)) throw new OpenApiException("开发者appKey未设置");
+ String request = openApiParser.validRequest(openApiRequest);
+ context.setStartTime(System.currentTimeMillis());
+ context.setRequestId(UUID.randomUUID().toString().replace("-",""));
+ context.setOpenServUrl(serverUrl);
+ String url = serverUrl.concat(openApiRequest.apiVersion()).concat(openApiRequest.serviceCode());
+ context.setApiServiceUrl(url);
+ context.setApiMethodName(openApiRequest.apiMethodName());
+ context.setVersion(openApiRequest.apiVersion());
+ context.setAppId(appId);
+ context.setAppKey(appKey);
+ context.setConfigBean(configBean);
+ context.setServiceCode(openApiRequest.serviceCode());
+ if(openApiRequest.needToken()){
+ OpenApiCache.getCurrentToken(context);
+ response = HttpTransport.getInstance().doPost(context,request);
+ }else{
+ response = HttpTransport.getInstance().doPost(configBean.isProd(),url,token,request);
+ }
+ if(StringUtils.isBlank(response)) throw new OpenApiException("服务提供方未返回");
+ if(StringUtils.isNotBlank(encodeCharSet)){
+ //encodeCharSet = configBean.getCharSet();
+ trsp = openApiParser.parse(new String(response.getBytes(),encodeCharSet));
+ }else{
+ trsp = openApiParser.parse(response);
+ }
+ } catch (Exception e) {
+ OpenApiLogger.logError(constant_classname +" SDK异常:"+e.getStackTrace());
+ e.printStackTrace();
+ }
+ context.setEndTime(System.currentTimeMillis());
+ return trsp;
+ }
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiCache.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiCache.java
new file mode 100644
index 0000000..ddf99ec
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiCache.java
@@ -0,0 +1,40 @@
+package com.chinaums.open.api;
+
+import com.chinaums.open.api.internal.util.OpenTokenUtil;
+import com.chinaums.open.api.response.TokenResponse;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: ZHANGWEI
+ * Date: 2016/12/6
+ * Time: 11:01
+ * 所属模块:
+ * 功能说明:cache缓存
+ */
+public class OpenApiCache {
+
+ public final static int MAX_PROCESS_TIMEOUT = 3600;
+
+ public static Cache contextCache = CacheBuilder.newBuilder()
+ .expireAfterWrite(MAX_PROCESS_TIMEOUT, TimeUnit.SECONDS).build();
+
+ /**
+ * 获取当前有效的token
+ * @param context
+ * @return
+ */
+ public static TokenResponse getCurrentToken(OpenApiContext context){
+ String appId = context.getAppId();
+ TokenResponse token = (TokenResponse)contextCache.getIfPresent(appId);
+ if(token==null){
+ token = OpenTokenUtil.getToken(context);
+ contextCache.put(context.getAppId(), token);
+ }
+ context.setCurrentToken(token);
+ return token;
+ }
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiClient.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiClient.java
new file mode 100644
index 0000000..c326c1e
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiClient.java
@@ -0,0 +1,13 @@
+package com.chinaums.open.api;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: ZHANGWEI
+ * Date: 2016/12/2
+ * Time: 14:18
+ * 所属模块:
+ * 功能说明:
+ */
+public abstract interface OpenApiClient {
+ public abstract T execute(OpenApiRequest openApiRequest) throws OpenApiException;
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiContext.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiContext.java
new file mode 100644
index 0000000..03ed7c1
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiContext.java
@@ -0,0 +1,151 @@
+package com.chinaums.open.api;
+
+import com.chinaums.open.api.constants.ConfigBean;
+import com.chinaums.open.api.response.TokenResponse;
+
+import java.util.Map;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: ZHANGWEI
+ * Date: 2016/12/6
+ * Time: 10:17
+ * 所属模块:
+ * 功能说明:api 处理报文上下文
+ */
+public class OpenApiContext {
+ private String requestId;
+ private TokenResponse currentToken;
+ private long startTime;
+ private long endTime;
+ private String request;
+ private String response;
+ private Map params;
+ private String apiMethodName;
+ private String serviceCode;
+ private String openServUrl;
+ private String version;
+ private String appId;
+ private String appKey;
+ private ConfigBean configBean;
+ private String apiServiceUrl;
+ public String getRequestId() {
+ return requestId;
+ }
+
+ public void setRequestId(String requestId) {
+ this.requestId = requestId;
+ }
+
+ public TokenResponse getCurrentToken() {
+ return currentToken;
+ }
+
+ public void setCurrentToken(TokenResponse currentToken) {
+ this.currentToken = currentToken;
+ }
+
+ public long getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(long startTime) {
+ this.startTime = startTime;
+ }
+
+ public long getEndTime() {
+ return endTime;
+ }
+
+ public void setEndTime(long endTime) {
+ this.endTime = endTime;
+ }
+
+ public String getRequest() {
+ return request;
+ }
+
+ public void setRequest(String request) {
+ this.request = request;
+ }
+
+ public String getResponse() {
+ return response;
+ }
+
+ public void setResponse(String response) {
+ this.response = response;
+ }
+
+ public Map getParams() {
+ return params;
+ }
+
+ public void setParams(Map params) {
+ this.params = params;
+ }
+
+ public String getServiceCode() {
+ return serviceCode;
+ }
+
+ public void setServiceCode(String serviceCode) {
+ this.serviceCode = serviceCode;
+ }
+
+ public String getApiMethodName() {
+ return apiMethodName;
+ }
+
+ public void setApiMethodName(String apiMethodName) {
+ this.apiMethodName = apiMethodName;
+ }
+
+ public String getOpenServUrl() {
+ return openServUrl;
+ }
+
+ public void setOpenServUrl(String openServUrl) {
+ this.openServUrl = openServUrl;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getAppId() {
+ return appId;
+ }
+
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+
+ public String getAppKey() {
+ return appKey;
+ }
+
+ public void setAppKey(String appKey) {
+ this.appKey = appKey;
+ }
+
+ public ConfigBean getConfigBean() {
+ return configBean;
+ }
+
+ public void setConfigBean(ConfigBean configBean) {
+ this.configBean = configBean;
+ }
+
+ public String getApiServiceUrl() {
+ return apiServiceUrl;
+ }
+
+ public void setApiServiceUrl(String apiServiceUrl) {
+ this.apiServiceUrl = apiServiceUrl;
+ }
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiException.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiException.java
new file mode 100644
index 0000000..8bbd6cd
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiException.java
@@ -0,0 +1,49 @@
+package com.chinaums.open.api;
+
+import java.io.Serializable;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: ZHANGWEI
+ * Date: 2016/12/2
+ * Time: 10:11
+ * 所属模块:
+ * 功能说明:
+ */
+public class OpenApiException extends Exception implements Serializable{
+ private String errCode;
+ private String errInfo;
+ public OpenApiException() {}
+
+ public OpenApiException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+
+ public OpenApiException(String message)
+ {
+ super(message);
+ }
+
+ public OpenApiException(Throwable cause)
+ {
+ super(cause);
+ }
+
+ public OpenApiException(String errCode, String errInfo)
+ {
+ super(errCode + ":" + errInfo);
+ this.errCode = errCode;
+ this.errInfo = errInfo;
+ }
+
+ public String getErrCode()
+ {
+ return this.errCode;
+ }
+
+ public String getErrMsg()
+ {
+ return this.errInfo;
+ }
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiParser.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiParser.java
new file mode 100644
index 0000000..81e38c8
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiParser.java
@@ -0,0 +1,27 @@
+package com.chinaums.open.api;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: ZHANGWEI
+ * Date: 2016/12/2
+ * Time: 14:27
+ * 所属模块:
+ * 功能说明:
+ */
+public abstract interface OpenApiParser {
+ /**
+ * 返回内容格式转换
+ * @param paramString
+ * @return
+ * @throws OpenApiException
+ */
+ public abstract T parse(String paramString) throws OpenApiException;
+
+ /**
+ * 请求参数检查
+ * @param openApiRequest
+ * @return
+ * @throws OpenApiException
+ */
+ public abstract String validRequest(OpenApiRequest openApiRequest) throws OpenApiException;
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiRequest.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiRequest.java
new file mode 100644
index 0000000..c83335b
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiRequest.java
@@ -0,0 +1,25 @@
+package com.chinaums.open.api;
+
+/**
+ * Created by ZHANGWEI on 2016/12/2.
+ */
+public abstract interface OpenApiRequest {
+ public abstract Class responseClass();
+ /*
+ api版本号
+ */
+ public abstract String apiVersion();
+ /*
+ api接口名称定义
+ */
+ public abstract String apiMethodName();
+ /*
+ 开放平台分配servicecode
+ */
+ public abstract String serviceCode();
+
+ /*
+ 是否需要获取token
+ */
+ public abstract boolean needToken();
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiResponse.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiResponse.java
new file mode 100644
index 0000000..c7b8bf7
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/OpenApiResponse.java
@@ -0,0 +1,27 @@
+package com.chinaums.open.api;
+
+import java.io.Serializable;
+
+/**
+ * Created by ZHANGWEI on 2016/12/2.
+ */
+public abstract class OpenApiResponse implements Serializable{
+ private String errCode;
+ private String errInfo;
+
+ public String getErrCode() {
+ return errCode;
+ }
+
+ public void setErrCode(String errCode) {
+ this.errCode = errCode;
+ }
+
+ public String getErrInfo() {
+ return errInfo;
+ }
+
+ public void setErrInfo(String errInfo) {
+ this.errInfo = errInfo;
+ }
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/annotation/ApiField.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/annotation/ApiField.java
new file mode 100644
index 0000000..864d0a6
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/annotation/ApiField.java
@@ -0,0 +1,22 @@
+package com.chinaums.open.api.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by ZHANGWEI on 2016/12/2.
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ApiField {
+ String key() default "";
+ String name() default "";
+ boolean required() default false;
+ int length() default -1;
+ int minLength() default -1;
+ int maxLength() default -1;
+ String index() default "0";
+ String desc() default "";
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/constants/ConfigBean.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/constants/ConfigBean.java
new file mode 100644
index 0000000..add43c1
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/constants/ConfigBean.java
@@ -0,0 +1,82 @@
+package com.chinaums.open.api.constants;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: ZHANGWEI
+ * Date: 2016/12/4
+ * Time: 21:22
+ * 所属模块:
+ * 功能说明:
+ */
+public class ConfigBean {
+ /*
+ 字符集格式
+ */
+ private String charSet = "UTF-8";
+ /*
+ 是否是生产环境
+ */
+ private boolean isProd = false;
+
+ private String version = "v2";
+ /**
+ * token申请失效后,重试次数
+ */
+ private int tokenAcquireReties = 3;
+ /**
+ * token提前申请的时间
+ */
+ private int tokenAcquireAheadInterval = 600;
+ /*
+ 获取token servicecode
+ */
+ private String tokenServiceCode="/token/access";
+
+ public String getCharSet() {
+ return charSet;
+ }
+
+ public void setCharSet(String charSet) {
+ this.charSet = charSet;
+ }
+
+ public boolean isProd() {
+ return isProd;
+ }
+
+ public void setProd(boolean prod) {
+ isProd = prod;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public int getTokenAcquireReties() {
+ return tokenAcquireReties;
+ }
+
+ public void setTokenAcquireReties(int tokenAcquireReties) {
+ this.tokenAcquireReties = tokenAcquireReties;
+ }
+
+ public int getTokenAcquireAheadInterval() {
+ return tokenAcquireAheadInterval;
+ }
+
+ public void setTokenAcquireAheadInterval(int tokenAcquireAheadInterval) {
+ this.tokenAcquireAheadInterval = tokenAcquireAheadInterval;
+ }
+
+ public String getTokenServiceCode() {
+ return tokenServiceCode;
+ }
+
+ public void setTokenServiceCode(String tokenServiceCode) {
+ this.tokenServiceCode = tokenServiceCode;
+ }
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/constants/Constants.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/constants/Constants.java
new file mode 100644
index 0000000..28aae83
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/constants/Constants.java
@@ -0,0 +1,24 @@
+package com.chinaums.open.api.constants;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: ZHANGWEI
+ * Date: 2016/12/5
+ * Time: 18:46
+ * 所属模块:
+ * 功能说明:
+ */
+public class Constants {
+ public static class ERR_CODE {
+ public static final String NORMAL = "0000";
+ public static final String ILLEGAL_CALL = "9000";
+ public static final String ILLEGAL_PARAMETER = "9001";
+ public static final String FATAL = "9999";
+ }
+ public static class ERR_INFO {
+ public static final String NORMAL = "正常";
+ public static final String ILLEGAL_CALL = "非法访问";
+ public static final String ILLEGAL_PARAMETER = "请求参数校验失败";
+ public static final String FATAL = "系统错误";
+ }
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/internal/util/DateUtils.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/internal/util/DateUtils.java
new file mode 100644
index 0000000..b61ef29
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/internal/util/DateUtils.java
@@ -0,0 +1,40 @@
+/**
+ * Project:TODO ADD PROJECT NAME
+ * Modify Information:
+ * ================================================================
+ * Author Date Description
+ * ------------ ---------- --------------------------------
+ * wmshen 2022/10/20 TODO:
+ * ================================================================
+ * Copyright (c) 银联商务股份有限公司 www.chinaums.com
+ */
+package com.chinaums.open.api.internal.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Desc: TODO ADD DESC
+ *
+ * Function:
+ *
+ * - 核心功能点1
+ * - 核心功能点1说明
+ * - 核心功能点2
+ * - 核心功能点2说明
+ *
+ *
+ * @app <服务名称英文缩写>
+ * @layer <代码所在分层>
+ * @refApp <依赖服务的英文缩写>
+ * @author wmshen
+ * @since 2022/10/20
+ * @version 2022/10/20
+ */
+public class DateUtils {
+ public static String getFormatDate(){
+ Date date = new Date();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+ return sdf.format(date);
+ }
+}
diff --git a/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/internal/util/FieldUtils.java b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/internal/util/FieldUtils.java
new file mode 100644
index 0000000..dd87b6e
--- /dev/null
+++ b/extLib/chinaumsdk/src/main/java/com/chinaums/open/api/internal/util/FieldUtils.java
@@ -0,0 +1,203 @@
+package com.chinaums.open.api.internal.util;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: ZHANGWEI
+ * Date: 2016/12/2
+ * Time: 16:17
+ * 所属模块:
+ * 功能说明:
+ */
+public class FieldUtils {
+ public static Object getFieldValueByTypeAndFormat(Field field, Object bean,
+ String format) throws ParseException, IllegalArgumentException,
+ IllegalAccessException {
+ field.setAccessible(true);
+ Object objValue = field.get(bean);
+ Object ret = null;
+ if (objValue == null)
+ return ret;
+ String type = field.getType().getName();
+ if ("java.lang.String".equals(type)) {
+ ret = field.get(bean).toString().trim();
+ } else if ("java.lang.Integer".equals(type) || "int".equals(type)) {
+ if (objValue instanceof Integer) {
+ ret = ((Integer) objValue).toString();
+ }
+ } else if ("java.lang.Float".equals(type) || "float".equals(type)) {
+ if (objValue instanceof Float) {
+ ret = ((Float) objValue).toString();
+ }
+ } else if ("java.lang.Double".equals(type) || "double".equals(type)) {
+ if (objValue instanceof Double) {
+ ret = ((Double) objValue).toString();
+ }
+ } else if ("java.math.BigDecimal".equals(type)) {
+ if (objValue instanceof BigDecimal) {
+ ret = ((BigDecimal) objValue).toString();
+ }
+ } else if ("java.util.Date".equals(type)) {
+ if (objValue instanceof Date) {
+ Date dateValue = (Date) objValue;
+ ret = new SimpleDateFormat(format).format(dateValue);
+ }
+ } else if ("java.lang.Boolean".equals(type)) {
+ if (objValue instanceof Boolean) {
+ ret = ((Boolean) objValue).toString();
+ }
+ } else if ("java.lang.Long".equals(type) || "long".equals(type)) {
+ if (objValue instanceof Long) {
+ ret = ((Long) objValue).toString();
+ }
+ } else {
+ ret = objValue;
+ }
+ return ret;
+ }
+
+ public static void setFieldValueByType(Field field, Object bean,
+ String value) throws IllegalArgumentException,
+ IllegalAccessException, ParseException, ClassNotFoundException {
+ setFieldValueByTypeAndFormat(field,bean,value,null);
+ }
+
+ public static void setFieldValueByTypeAndFormat(Field field, Object bean,
+ String value, String format) throws IllegalArgumentException,
+ IllegalAccessException, ParseException, ClassNotFoundException {
+ if (value == null)
+ return;
+ field.setAccessible(true);
+ String type = field.getType().getName();
+ if ("java.lang.String".equals(type)) {
+ field.set(bean, value);
+ } else if ("java.lang.Integer".equals(type)) {
+ field.set(bean, Integer.valueOf(value));
+ } else if ("int".equals(type)) {
+ field.set(bean, Integer.valueOf(value).intValue());
+ } else if ("java.lang.Float".equals(type)) {
+ field.set(bean, Float.valueOf(value));
+ } else if ("float".equals(type)) {
+ field.set(bean, Float.valueOf(value).floatValue());
+ } else if ("java.lang.Double".equals(type)) {
+ field.set(bean, Double.valueOf(value));
+ } else if ("double".equals(type)) {
+ field.set(bean, Double.valueOf(value).doubleValue());
+ } else if ("java.math.BigDecimal".equals(type)) {
+ field.set(bean, new BigDecimal(value));
+ } else if ("java.util.Date".equals(type)) {
+ Date date = new SimpleDateFormat(format).parse(value.toString());
+ field.set(bean, date);
+ } else if ("java.lang.Boolean".equals(type)) {
+ field.set(bean, Boolean.valueOf(value));
+ } else if ("java.lang.Long".equals(type)) {
+ field.set(bean, Long.valueOf(value));
+ } else if ("java.lang.Object".equals(type)) {
+ field.set(bean, value);
+ } else if ("long".equals(type)) {
+ field.set(bean, Long.valueOf(value).longValue());
+ } else if ("java.util.Map".equals(type)) {
+ JSONObject mapObj = JSONObject.fromObject(value);
+ field.set(bean,mapObj);
+ } else if ("java.util.List".equals(type)) {
+ JSONArray arr = JSONArray.fromObject(value);
+ ParameterizedType genericType = (ParameterizedType) field.getGenericType();
+ Type listType = genericType.getActualTypeArguments()[0];
+ if (listType instanceof ParameterizedType) {
+ ParameterizedType paraType = (ParameterizedType) listType;
+ if ("java.util.Map".equals(((Class>)paraType.getRawType()).getName())) {
+ List