@@ -7,4 +7,9 @@ | |||||
> [SDK打包脚本](agentcenter-sdk/build.bat ':include') | > [SDK打包脚本](agentcenter-sdk/build.bat ':include') | ||||
> 客户端手动导入: ```mvn install:install-file -Dfile=agentcenter-sdk-1.0.0nsgk1.jar -DgroupId=com.nsgk -DartifactId=agentcenter-sdk -Dversion=1.0.0nsgk1 -Dpackaging=jar``` | |||||
> 客户端手动导入: ```mvn install:install-file -Dfile=agentcenter-sdk-1.0.0nsgk1.jar -DgroupId=com.nsgk -DartifactId=agentcenter-sdk -Dversion=1.0.0nsgk1 -Dpackaging=jar``` | |||||
--- | |||||
#### 兼容性 | |||||
当版本不一致时 | |||||
> 实体类属性缺失, 使用实体类`Set()`/`Set_s()`函数进行设置 |
@@ -51,9 +51,10 @@ public final class NSMain | |||||
.setName("测试合同") | .setName("测试合同") | ||||
.setDeptId(187L) | .setDeptId(187L) | ||||
.setBookId(166L) | .setBookId(166L) | ||||
.setOutId(999L) | |||||
; | ; | ||||
entity.Set("buildingTime", "2000-12-23"); | |||||
entity.Parm("buildingTime", "2000-12-25"); | |||||
entity.Parm("buildingTime222", "2000-12-11"); | |||||
entity.Parm("outId", "123"); | |||||
result = client.Send(NSProtocol.NS_PROTOCOL_CONTRACTION, entity); | result = client.Send(NSProtocol.NS_PROTOCOL_CONTRACTION, entity); | ||||
System.err.println(result); | System.err.println(result); | ||||
} | } | ||||
@@ -1,6 +1,7 @@ | |||||
package com.nsgk.agentcentersdk.api; | package com.nsgk.agentcentersdk.api; | ||||
import cn.hutool.core.util.URLUtil; | import cn.hutool.core.util.URLUtil; | ||||
import com.nsgk.agentcentersdk.core.NSConstants; | |||||
import com.nsgk.agentcentersdk.core.NSProtocol; | import com.nsgk.agentcentersdk.core.NSProtocol; | ||||
import com.nsgk.agentcentersdk.core.NSReportObject; | import com.nsgk.agentcentersdk.core.NSReportObject; | ||||
import com.nsgk.agentcentersdk.entity.NSEntityBase; | import com.nsgk.agentcentersdk.entity.NSEntityBase; | ||||
@@ -77,10 +78,10 @@ public final class NSSDKClient | |||||
{ | { | ||||
String dataStr; | String dataStr; | ||||
request.ClearHeaders().AddHeader("sign", object.getSign()); | |||||
request.ClearQueries().AddQuery("identifier", object.getIdentifier()) | |||||
.AddQuery("protocol", object.getProtocol()) | |||||
.AddQuery("timestamp", object.getTimestamp()) | |||||
request.ClearHeaders().AddHeader(NSConstants.HEADER_SIGN, object.getSign()); | |||||
request.ClearQueries().AddQuery(NSConstants.QUERY_IDENTIFIER, object.getIdentifier()) | |||||
.AddQuery(NSConstants.QUERY_PROTOCOL, object.getProtocol()) | |||||
.AddQuery(NSConstants.QUERY_TIMESTAMP, object.getTimestamp()) | |||||
; | ; | ||||
dataStr = object.getDataStr(); | dataStr = object.getDataStr(); | ||||
try | try | ||||
@@ -1,5 +1,6 @@ | |||||
package com.nsgk.agentcentersdk.api; | package com.nsgk.agentcentersdk.api; | ||||
import com.nsgk.agentcentersdk.core.NSConstants; | |||||
import com.nsgk.agentcentersdk.core.NSReportObject; | import com.nsgk.agentcentersdk.core.NSReportObject; | ||||
import com.nsgk.agentcentersdk.entity.NSEntityBase; | import com.nsgk.agentcentersdk.entity.NSEntityBase; | ||||
import com.nsgk.agentcentersdk.err.NSAssert; | import com.nsgk.agentcentersdk.err.NSAssert; | ||||
@@ -28,20 +29,21 @@ public final class NSSDKServer | |||||
String sign; | String sign; | ||||
String data; | String data; | ||||
sign = request.getHeader("sign"); | |||||
sign = request.getHeader(NSConstants.HEADER_SIGN); | |||||
NSAssert.NotEmpty(sign, NSErrno.ERRNO_CLI_SIGN_MISSING); | NSAssert.NotEmpty(sign, NSErrno.ERRNO_CLI_SIGN_MISSING); | ||||
data = NSHttp.GetRequestBody(request); | data = NSHttp.GetRequestBody(request); | ||||
NSAssert.NotEmpty(data, NSErrno.ERRNO_CLI_DATA_MISSING); | NSAssert.NotEmpty(data, NSErrno.ERRNO_CLI_DATA_MISSING); | ||||
res = new NSReportObject<>(); | res = new NSReportObject<>(); | ||||
res.SetTimestampStr(request.getParameter("timestamp")) | |||||
.setIdentifier(request.getParameter("identifier")) | |||||
.SetProtocolStr(request.getParameter("protocol")) | |||||
res.SetTimestampStr(request.getParameter(NSConstants.QUERY_TIMESTAMP)) | |||||
.setIdentifier(request.getParameter(NSConstants.QUERY_IDENTIFIER)) | |||||
.SetProtocolStr(request.getParameter(NSConstants.QUERY_PROTOCOL)) | |||||
; | ; | ||||
try | try | ||||
{ | { | ||||
data = NSCrypto.RSADecrypt(data, privateKey); | data = NSCrypto.RSADecrypt(data, privateKey); | ||||
NSAssert.NotEmpty(data, NSErrno.ERRNO_SYS_DECRYPT_FAIL); | NSAssert.NotEmpty(data, NSErrno.ERRNO_SYS_DECRYPT_FAIL); | ||||
res.SetDataStr(data, clazz); | res.SetDataStr(data, clazz); | ||||
NSErrGlobal.ASSERT(res.getData().Normalized() == 0, NSErrno.ERRNO_SYS_INVALID_FIELD); | |||||
} | } | ||||
catch(Exception e) | catch(Exception e) | ||||
{ | { | ||||
@@ -0,0 +1,12 @@ | |||||
package com.nsgk.agentcentersdk.core; | |||||
// 常量 | |||||
public final class NSConstants | |||||
{ | |||||
public static final String HEADER_SIGN = "SIGN"; | |||||
public static final String QUERY_TIMESTAMP = "timestamp"; | |||||
public static final String QUERY_IDENTIFIER = "identifier"; | |||||
public static final String QUERY_PROTOCOL = "protocol"; | |||||
private NSConstants() {} | |||||
} |
@@ -1,14 +1,19 @@ | |||||
package com.nsgk.agentcentersdk.entity; | package com.nsgk.agentcentersdk.entity; | ||||
import cn.hutool.core.bean.BeanUtil; | |||||
import cn.hutool.core.collection.CollectionUtil; | |||||
import com.alibaba.fastjson2.JSON; | |||||
import com.nsgk.agentcentersdk.err.NSErrGlobal; | import com.nsgk.agentcentersdk.err.NSErrGlobal; | ||||
import com.nsgk.agentcentersdk.err.NSErrno; | import com.nsgk.agentcentersdk.err.NSErrno; | ||||
import com.nsgk.agentcentersdk.utility.NSArr; | import com.nsgk.agentcentersdk.utility.NSArr; | ||||
import com.nsgk.agentcentersdk.utility.NSReflect; | import com.nsgk.agentcentersdk.utility.NSReflect; | ||||
import com.nsgk.agentcentersdk.utility.NSStr; | |||||
import lombok.Data; | import lombok.Data; | ||||
import lombok.experimental.Accessors; | import lombok.experimental.Accessors; | ||||
import java.io.Serializable; | import java.io.Serializable; | ||||
import java.lang.reflect.Field; | import java.lang.reflect.Field; | ||||
import java.util.HashMap; | |||||
import java.util.LinkedHashMap; | import java.util.LinkedHashMap; | ||||
import java.util.Map; | import java.util.Map; | ||||
@@ -28,6 +33,8 @@ public class NSEntityBase implements Serializable | |||||
/** 外部ID */ | /** 外部ID */ | ||||
protected Long outId; | protected Long outId; | ||||
// 存储其他没有声明的属性, 用于当客户与服务端字段不一致时, 在不更新sdk的情况下, 保持兼容性 | |||||
// 不会覆盖已设置的属性 | |||||
protected Map<String, Object> parms; | protected Map<String, Object> parms; | ||||
protected Map<String, Object> PARMS() | protected Map<String, Object> PARMS() | ||||
@@ -89,9 +96,12 @@ public class NSEntityBase implements Serializable | |||||
} | } | ||||
catch(Exception e) | catch(Exception e) | ||||
{ | { | ||||
e.printStackTrace(); | |||||
//e.printStackTrace(); | |||||
System.err.printf("设置属性字段(%s)失败, 将存储至通用字段", name); | |||||
} | } | ||||
return NSErrGlobal.ThrowAndReturn(NSErrno.ERRNO_SYS_INVALID_FIELD, false); | |||||
//return NSErrGlobal.ThrowAndReturn(NSErrno.ERRNO_SYS_INVALID_FIELD, false); | |||||
PARMS().put(name, val); | |||||
return false; | |||||
} | } | ||||
// 检查类型 | // 检查类型 | ||||
@@ -109,8 +119,135 @@ public class NSEntityBase implements Serializable | |||||
} | } | ||||
catch(Exception e) | catch(Exception e) | ||||
{ | { | ||||
e.printStackTrace(); | |||||
//e.printStackTrace(); | |||||
System.err.printf("安全设置属性字段(%s)失败, 将存储至通用字段", name); | |||||
} | |||||
//return NSErrGlobal.ThrowAndReturn(NSErrno.ERRNO_SYS_INVALID_FIELD, false); | |||||
PARMS().put(name, val); | |||||
return false; | |||||
} | |||||
// json反序列化 | |||||
@SuppressWarnings("unchecked") | |||||
public boolean FromJson(String json) | |||||
{ | |||||
Map<?, ?> map; | |||||
if(NSStr.IsEmpty(json)) | |||||
return false; | |||||
map = JSON.parseObject(json, Map.class); | |||||
if(CollectionUtil.isEmpty(map)) | |||||
return false; | |||||
return FromMap(map); | |||||
} | |||||
@SuppressWarnings("unchecked") | |||||
public boolean FromMap(Map<?, ?> map) | |||||
{ | |||||
Map<String, Object> p; | |||||
Map<String, Object> newParms; | |||||
Map<String, Object> newMap; | |||||
if(CollectionUtil.isEmpty(map)) | |||||
return false; | |||||
newMap = new HashMap<>(); | |||||
map.forEach((k, v) -> { | |||||
if(null == k) | |||||
return; | |||||
newMap.put(NSStr.ToString(k), v); | |||||
}); | |||||
newParms = new HashMap<>(); | |||||
if(newMap.containsKey("parms")) | |||||
{ | |||||
p = (Map<String, Object>)newMap.remove("parms"); | |||||
if(CollectionUtil.isNotEmpty(p)) | |||||
{ | |||||
p.forEach((k, v) -> { | |||||
if(null == k) | |||||
return; | |||||
if("parms".equals(k)) // 不递归parms | |||||
{ | |||||
if(v instanceof Map) | |||||
((Map<String, Object>)v).forEach((sk, sv) -> { | |||||
if(null == sk) | |||||
return; | |||||
newParms.put(NSStr.ToString(sk), sv); | |||||
}); | |||||
return; | |||||
} | |||||
if(newMap.containsKey(k)) // 不覆盖原属性 | |||||
return; | |||||
newMap.put(k, v); | |||||
}); | |||||
} | |||||
} | |||||
newMap.put("parms", newParms); | |||||
BeanUtil.fillBeanWithMap(map, this, true); | |||||
return true; | |||||
} | |||||
// json序列化 | |||||
public String ToJson() | |||||
{ | |||||
return JSON.toJSONString(this); | |||||
} | |||||
// 服务端调用, 用来规范化客户端请求, 返回错误数 | |||||
public int Normalized() | |||||
{ | |||||
Map<String, Object> newMap; | |||||
Map<String, Object> newParms; | |||||
int[] res = {0}; | |||||
newMap = new HashMap<>(); | |||||
newParms = new HashMap<>(); | |||||
if(CollectionUtil.isNotEmpty(parms)) | |||||
{ | |||||
parms.forEach((k, v) -> { | |||||
if(null == k) | |||||
return; | |||||
if("parms".equals(k)) // 不递归parms | |||||
{ | |||||
if(v instanceof Map) | |||||
((Map<String, Object>)v).forEach((sk, sv) -> { | |||||
if(null == sk) | |||||
return; | |||||
newParms.put(NSStr.ToString(sk), sv); | |||||
}); | |||||
return; | |||||
} | |||||
Field field = NSReflect.FindField(getClass(), k); | |||||
if(null == field) | |||||
{ | |||||
newParms.put(k, v); | |||||
} | |||||
else | |||||
{ | |||||
try | |||||
{ | |||||
if(!field.isAccessible()) | |||||
field.setAccessible(true); | |||||
if(null == field.get(this)) | |||||
newMap.put(k, v); | |||||
} | |||||
catch(Exception e) | |||||
{ | |||||
e.printStackTrace(); | |||||
res[0]++; | |||||
} | |||||
} | |||||
}); | |||||
} | } | ||||
return NSErrGlobal.ThrowAndReturn(NSErrno.ERRNO_SYS_INVALID_FIELD, false); | |||||
BeanUtil.fillBeanWithMap(newMap, this, true); | |||||
setParms(newParms); | |||||
return res[0]; | |||||
} | } | ||||
} | } |