zhao 2 лет назад
Родитель
Сommit
35034b6636
6 измененных файлов: 173 добавлений и 15 удалений
  1. +6
    -1
      README.md
  2. +3
    -2
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/NSMain.java
  3. +5
    -4
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKClient.java
  4. +6
    -4
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKServer.java
  5. +12
    -0
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSConstants.java
  6. +141
    -4
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSEntityBase.java

+ 6
- 1
README.md Просмотреть файл

@@ -7,4 +7,9 @@

> [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()`函数进行设置

+ 3
- 2
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/NSMain.java Просмотреть файл

@@ -51,9 +51,10 @@ public final class NSMain
.setName("测试合同")
.setDeptId(187L)
.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);
System.err.println(result);
}


+ 5
- 4
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKClient.java Просмотреть файл

@@ -1,6 +1,7 @@
package com.nsgk.agentcentersdk.api;

import cn.hutool.core.util.URLUtil;
import com.nsgk.agentcentersdk.core.NSConstants;
import com.nsgk.agentcentersdk.core.NSProtocol;
import com.nsgk.agentcentersdk.core.NSReportObject;
import com.nsgk.agentcentersdk.entity.NSEntityBase;
@@ -77,10 +78,10 @@ public final class NSSDKClient
{
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();
try


+ 6
- 4
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKServer.java Просмотреть файл

@@ -1,5 +1,6 @@
package com.nsgk.agentcentersdk.api;

import com.nsgk.agentcentersdk.core.NSConstants;
import com.nsgk.agentcentersdk.core.NSReportObject;
import com.nsgk.agentcentersdk.entity.NSEntityBase;
import com.nsgk.agentcentersdk.err.NSAssert;
@@ -28,20 +29,21 @@ public final class NSSDKServer
String sign;
String data;

sign = request.getHeader("sign");
sign = request.getHeader(NSConstants.HEADER_SIGN);
NSAssert.NotEmpty(sign, NSErrno.ERRNO_CLI_SIGN_MISSING);
data = NSHttp.GetRequestBody(request);
NSAssert.NotEmpty(data, NSErrno.ERRNO_CLI_DATA_MISSING);
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
{
data = NSCrypto.RSADecrypt(data, privateKey);
NSAssert.NotEmpty(data, NSErrno.ERRNO_SYS_DECRYPT_FAIL);
res.SetDataStr(data, clazz);
NSErrGlobal.ASSERT(res.getData().Normalized() == 0, NSErrno.ERRNO_SYS_INVALID_FIELD);
}
catch(Exception e)
{


+ 12
- 0
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSConstants.java Просмотреть файл

@@ -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() {}
}

+ 141
- 4
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSEntityBase.java Просмотреть файл

@@ -1,14 +1,19 @@
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.NSErrno;
import com.nsgk.agentcentersdk.utility.NSArr;
import com.nsgk.agentcentersdk.utility.NSReflect;
import com.nsgk.agentcentersdk.utility.NSStr;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

@@ -28,6 +33,8 @@ public class NSEntityBase implements Serializable
/** 外部ID */
protected Long outId;

// 存储其他没有声明的属性, 用于当客户与服务端字段不一致时, 在不更新sdk的情况下, 保持兼容性
// 不会覆盖已设置的属性
protected Map<String, Object> parms;

protected Map<String, Object> PARMS()
@@ -89,9 +96,12 @@ public class NSEntityBase implements Serializable
}
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)
{
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];
}
}

Загрузка…
Отмена
Сохранить