| @@ -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]; | |||||
| } | } | ||||
| } | } | ||||