Ver código fonte

错误处理

master
zhao 2 anos atrás
pai
commit
5b165de39f
22 arquivos alterados com 679 adições e 59 exclusões
  1. +34
    -4
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/NSMain.java
  2. +36
    -3
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApiResult.java
  3. +37
    -1
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKClient.java
  4. +30
    -5
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKServer.java
  5. +5
    -0
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSProtocol.java
  6. +19
    -6
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSReportObject.java
  7. +46
    -1
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSEntityBase.java
  8. +28
    -0
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/err/NSAssert.java
  9. +98
    -0
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/err/NSErrGlobal.java
  10. +43
    -0
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/err/NSErrno.java
  11. +21
    -0
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/err/NSException.java
  12. +0
    -12
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkRequest.java
  13. +2
    -3
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkTransport.java
  14. +26
    -1
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSArr.java
  15. +144
    -0
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSReflect.java
  16. +1
    -1
      agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSSignTool.java
  17. +38
    -4
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/agentcenter/AgentCenterController.java
  18. +26
    -0
      ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/listener/ContractionListener.java
  19. +3
    -4
      ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/listener/TestListener.java
  20. +11
    -0
      ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/object/ContractionMessage.java
  21. +31
    -0
      ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/object/Message.java
  22. +0
    -14
      ruoyi-common/src/main/java/com/ruoyi/common/object/Message.java

+ 34
- 4
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/NSMain.java Ver arquivo

@@ -5,10 +5,39 @@ import com.nsgk.agentcentersdk.api.NSSDK;
import com.nsgk.agentcentersdk.api.NSSDKClient;
import com.nsgk.agentcentersdk.core.NSProtocol;
import com.nsgk.agentcentersdk.entity.NSContractionEntity;
import com.nsgk.agentcentersdk.utility.NSReflect;

public final class NSMain
{
public static void main(String[] args)
public static void main(String[] args) throws Exception
{
//Test();
Test_reflect();
}

public static void Test_reflect() throws InstantiationException, IllegalAccessException
{
Class<?> NSContractionEntity_class = NSReflect.Class("com.nsgk.agentcentersdk.entity.NSContractionEntity");
Class<?> NSSDK_class = NSReflect.Class("com.nsgk.agentcentersdk.api.NSSDK");
Object client;
Object entity;
Object result;

NSReflect.CallStatic_s(NSSDK_class, "InitClient", String.class, "http://localhost", short.class, (short) 8081, String.class, "test", String.class, "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==");
client = NSReflect.CallStatic(NSSDK_class, "InstanceClient");

entity = NSContractionEntity_class.newInstance();
NSReflect.Call(entity, "setBuildingTime", "2000-12-23");
NSReflect.Call(entity, "setName", "测试合同");
NSReflect.Call(entity, "setDeptId", 187L);
NSReflect.Call(entity, "setBookId", 166L);
NSReflect.Call(entity, "setOutId", 250L);

result = NSReflect.Call_s(client, "Send", int.class, NSProtocol.NS_PROTOCOL_CONTRACTION, NSReflect.Class("com.nsgk.agentcentersdk.entity.NSEntityBase"), entity);
System.err.println(result);
}

public static void Test()
{
NSSDKClient client;
NSContractionEntity entity;
@@ -19,9 +48,10 @@ public final class NSMain

entity = new NSContractionEntity();
entity.setBuildingTime("2000-12-23")
.setName("测试合同")
.setDeptId(187L)
.setBookId(166L)
.setName("测试合同")
.setDeptId(187L)
.setBookId(166L)
.setOutId(999L)
;
result = client.Send(NSProtocol.NS_PROTOCOL_CONTRACTION, entity);
System.err.println(result);


+ 36
- 3
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApiResult.java Ver arquivo

@@ -2,22 +2,49 @@ package com.nsgk.agentcentersdk.api;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.nsgk.agentcentersdk.err.NSErrno;
import lombok.Data;

// 服务端返回对象
@Data
public class NSApiResult
public final class NSApiResult
{
public static final int NS_RESULT_SUCCESS = 200;
public static final int NS_RESULT_ERROR = 500;

public final int code;
public final String msg;
public final Object data;
public final long timestamp = System.currentTimeMillis();
public final Long timestamp;
public final int errno;

NSApiResult(int code, String msg, Object data)
{
this(code, msg, data, NSErrno.ERRNO_OK);
}

NSApiResult(int code, String msg, Object data, int errno)
{
this(code, msg, data, System.currentTimeMillis(), errno);
}

NSApiResult(int code, String msg, Object data, Long timestamp, int errno)
{
this.code = code;
this.msg = msg;
this.data = data;
this.timestamp = timestamp;
this.errno = errno;
}

static NSApiResult Success(String msg, Object data)
{
return new NSApiResult(NS_RESULT_SUCCESS, msg, data);
}

static NSApiResult Error(int errno, String msg, Object data)
{
return new NSApiResult(NS_RESULT_ERROR, msg, data, errno);
}

static NSApiResult FromJSON(String str)
@@ -25,6 +52,12 @@ public class NSApiResult
JSONObject jsonObject;

jsonObject = JSON.parseObject(str);
return new NSApiResult(jsonObject.getInteger("code"), jsonObject.getString("msg"), jsonObject.get("data"));
return new NSApiResult(
jsonObject.getInteger("code"),
jsonObject.getString("msg"),
jsonObject.containsKey("data") ? jsonObject.get("data") : null,
jsonObject.containsKey("data") ? jsonObject.getLong("timestamp") : null,
jsonObject.containsKey("errno") ? jsonObject.getInteger("errno") : null
);
}
}

+ 37
- 1
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKClient.java Ver arquivo

@@ -1,11 +1,19 @@
package com.nsgk.agentcentersdk.api;

import cn.hutool.core.util.URLUtil;
import com.nsgk.agentcentersdk.core.NSProtocol;
import com.nsgk.agentcentersdk.core.NSReportObject;
import com.nsgk.agentcentersdk.entity.NSEntityBase;
import com.nsgk.agentcentersdk.err.NSAssert;
import com.nsgk.agentcentersdk.err.NSErrGlobal;
import com.nsgk.agentcentersdk.err.NSErrno;
import com.nsgk.agentcentersdk.network.NSNetworkManager;
import com.nsgk.agentcentersdk.network.NSNetworkRequest;
import com.nsgk.agentcentersdk.network.NSNetworkResponse;
import com.nsgk.agentcentersdk.utility.NSCrypto;
import com.nsgk.agentcentersdk.utility.NSStr;

import java.util.Objects;

// SDK客户端
/*
@@ -42,12 +50,16 @@ public final class NSSDKClient
NSReportObject<T> reportObject;
NSNetworkRequest request;

NSAssert.NotNull(object, NSErrno.ERRNO_CLI_DATA_MISSING);
NSAssert.NotEmpty(identifier, NSErrno.ERRNO_CLI_PARAMETER_MISSING);
NSErrGlobal.ASSERT(NSProtocol.IsValid(protocol), NSErrno.ERRNO_SYS_INVALID_PROTOCOL);
url = NSApi.NS_API_REPORT;
reportObject = new NSReportObject<>(identifier, protocol, object);
request = new NSNetworkRequest();
request.setUrl(BuildUrl(url));
request.WriteDataObject(reportObject, publicKey);
WriteDataObject(request, reportObject);
NSNetworkResponse response = NSNetworkManager.Post(request);
NSErrGlobal.ASSERT(response.IsSuccess(), NSErrno.ERRNO_SYS_HTTP);
String json = response.getData();
return NSApiResult.FromJSON(json);
}
@@ -56,4 +68,28 @@ public final class NSSDKClient
{
return URLUtil.completeUrl(host + ":" + port, url);
}

private <T> void WriteDataObject(NSNetworkRequest request, NSReportObject<T> object)
{
String dataStr;

request.ClearHeaders().AddHeader("sign", object.getSign());
request.ClearQueries().AddQuery("identifier", object.getIdentifier())
.AddQuery("protocol", object.getProtocol())
.AddQuery("timestamp", object.getTimestamp())
;
dataStr = object.getDataStr();
try
{
dataStr = NSCrypto.RSAEncrypt(dataStr, publicKey);
NSAssert.NotEmpty(dataStr, NSErrno.ERRNO_SYS_ENCRYPT_FAIL);
}
catch(Exception e)
{
e.printStackTrace();
NSErrGlobal.Throw(NSErrno.ERRNO_SYS_ENCRYPT_FAIL);
return;
}
request.setData(dataStr);
}
}

+ 30
- 5
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKServer.java Ver arquivo

@@ -2,12 +2,14 @@ package com.nsgk.agentcentersdk.api;

import com.nsgk.agentcentersdk.core.NSReportObject;
import com.nsgk.agentcentersdk.entity.NSEntityBase;
import com.nsgk.agentcentersdk.err.NSAssert;
import com.nsgk.agentcentersdk.err.NSErrGlobal;
import com.nsgk.agentcentersdk.err.NSErrno;
import com.nsgk.agentcentersdk.utility.NSArr;
import com.nsgk.agentcentersdk.utility.NSCrypto;
import com.nsgk.agentcentersdk.utility.NSHttp;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

// SDK服务端
public final class NSSDKServer
@@ -27,24 +29,47 @@ public final class NSSDKServer
String data;

sign = request.getHeader("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"))
.SetDataStr(NSCrypto.RSADecrypt(data, privateKey), clazz)
;
try
{
data = NSCrypto.RSADecrypt(data, privateKey);
NSAssert.NotEmpty(data, NSErrno.ERRNO_SYS_DECRYPT_FAIL);
res.SetDataStr(data, clazz);
}
catch(Exception e)
{
e.printStackTrace();
return NSErrGlobal.ThrowAndReturnNull(NSErrno.ERRNO_SYS_DECRYPT_FAIL);
}
if(!res.CheckSign(sign))
{
return null;
return NSErrGlobal.ThrowAndReturn(NSErrno.ERRNO_SYS_INVALID_SIGN, null);
}
res.setSign(sign);
return res;
}

// 响应客户端
public NSApiResult Resp(int code, String msg, Object...data)
public static NSApiResult Resp(int code, String msg, Object...data)
{
return new NSApiResult(code, msg, NSArr.DefParms(data));
return new NSApiResult(code, msg, NSArr.DefParm(data));
}

public static NSApiResult Success(String msg, Object...data)
{
return NSApiResult.Success(msg, NSArr.DefParm(data));
}

public static NSApiResult Fail(int errno, String msg, Object...data)
{
return NSApiResult.Error(errno, msg, NSArr.DefParm(data));
}

}

+ 5
- 0
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSProtocol.java Ver arquivo

@@ -13,5 +13,10 @@ public final class NSProtocol
return Math.abs(i);
}

public static boolean IsValid(int protocol)
{
return protocol > 0; // TODO: full check
}

private NSProtocol() {}
}

+ 19
- 6
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSReportObject.java Ver arquivo

@@ -2,6 +2,8 @@ package com.nsgk.agentcentersdk.core;

import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSON;
import com.nsgk.agentcentersdk.err.NSErrGlobal;
import com.nsgk.agentcentersdk.err.NSErrno;
import com.nsgk.agentcentersdk.utility.NSSignTool;
import com.nsgk.agentcentersdk.utility.NSStr;
import lombok.Data;
@@ -14,11 +16,12 @@ import java.util.Map;
@Accessors(chain = true)
public class NSReportObject<T>
{
protected static final String[] SIGN_FIELDS = {
"identifier", "protocol", "timestamp", "dataLength",
protected static final String[] SIGN_FIELDS = { // 字母顺序
"identifier", "protocol", "timestamp", "length",
};
private String identifier; // 识别ID
private String sign; // 签名
// md5(identifier=<客户端身份标识ID>&length=<data长度(加密前明文)>&protocol=<协议>&timestamp=<毫秒时间戳>)
private int protocol = NSProtocol.NS_PROTOCOL_INVALID; // 协议
private Long timestamp; // 客户端时间戳
private T data;
@@ -60,16 +63,26 @@ public class NSReportObject<T>

public boolean IsValid()
{
return NSStr.IsNotEmpty(identifier) && null != timestamp && protocol > 0;
return NSStr.IsNotEmpty(identifier) && null != timestamp && timestamp > 0 && NSProtocol.IsValid(protocol);
}

//"d10457fb8d1ae32b27f9eb9c0a107c75"
public String Sign()
{
Map<String, Object> map;

map = BeanUtil.beanToMap(this);
map.put("dataLength", NSStr.Length(dataStr));
return NSSignTool.Sign(map, SIGN_FIELDS);
NSErrGlobal.ASSERT(IsValid(), NSErrno.ERRNO_CLI_PARAMETER_MISSING);
try
{
map = BeanUtil.beanToMap(this);
map.put("length", NSStr.Length(dataStr));
return NSSignTool.Sign(map, SIGN_FIELDS);
}
catch(Exception e)
{
e.printStackTrace();
return NSErrGlobal.ThrowAndReturnNull(NSErrno.ERRNO_SYS_INVALID_SIGN);
}
}

public boolean CheckSign(String src)


+ 46
- 1
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSEntityBase.java Ver arquivo

@@ -1,9 +1,12 @@
package com.nsgk.agentcentersdk.entity;

import com.nsgk.agentcentersdk.utility.NSArr;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;

// 基本实体
@Data
@@ -19,5 +22,47 @@ public abstract class NSEntityBase implements Serializable
protected Long deptId;

/** 外部ID */
private Long outId;
protected Long outId;

protected Map<String, Object> parms;

protected Map<String, Object> PARMS()
{
if(null == parms)
parms = new LinkedHashMap<>();
return parms;
}

@SuppressWarnings("unchecked")
public <T extends NSEntityBase> T Parm(String name, Object val)
{
PARMS().put(name, val);
return (T)this;
}

@SuppressWarnings("unchecked")
public <T extends NSEntityBase> T DelParm(String...name)
{
if(null != parms && NSArr.IsNotEmpty(name))
{
NSArr.Stream(name).forEach(parms::remove);
}
return (T)this;
}

public boolean HasParm(String name)
{
if(null == parms)
return false;
return parms.containsKey(name);
}

@SuppressWarnings("unchecked")
public <T> T ParmT(String name, T...val)
{
T def = NSArr.DefParm(val);
if(null == parms)
return def;
return (T)parms.getOrDefault(name, def);
}
}

+ 28
- 0
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/err/NSAssert.java Ver arquivo

@@ -0,0 +1,28 @@
package com.nsgk.agentcentersdk.err;

import cn.hutool.core.collection.CollectionUtil;
import com.nsgk.agentcentersdk.utility.NSStr;

import java.util.Collection;
import java.util.Objects;

// 断言
public final class NSAssert
{
public static void NotNull(Object obj, Integer...err)
{
NSErrGlobal.ASSERT(Objects.nonNull(obj), err);
}

public static void NotEmpty(String obj, Integer...err)
{
NSErrGlobal.ASSERT(NSStr.IsNotEmpty(obj), err);
}

public static void NotEmpty(Collection<?> obj, Integer...err)
{
NSErrGlobal.ASSERT(CollectionUtil.isNotEmpty(obj), err);
}

private NSAssert() {}
}

+ 98
- 0
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/err/NSErrGlobal.java Ver arquivo

@@ -0,0 +1,98 @@
package com.nsgk.agentcentersdk.err;

import com.nsgk.agentcentersdk.utility.NSArr;

import java.io.Serializable;

// 全局错误记录
public final class NSErrGlobal
{
private static final ThreadLocal<Integer> errno = new ThreadLocal<>();

public static int Err(int newErr)
{
int err;

err = errno.get();
errno.set(newErr);
return err;
}

public static void Throw(int err)
{
if(err == NSErrno.ERRNO_OK)
return;
throw new NSException(err);
}

public static void Throw()
{
Throw(Errno());
}

public static <T> T ThrowAndReturnNull(int err)
{
return ThrowAndReturn(err, null);
}

public static <T> T ThrowAndReturnNull()
{
return ThrowAndReturn(null);
}

public static <T> T ThrowAndReturn(int err, T t)
{
if(err == NSErrno.ERRNO_OK)
return t;
throw new NSException(err);
}

public static <T> T ThrowAndReturn(T t)
{
return ThrowAndReturn(Errno(), t);
}

public static <T> T Return(int err, T t)
{
if(err != NSErrno.ERRNO_OK)
Err(err);
return t;
}

public static <T> T Return(T t)
{
return Return(Errno(), t);
}

// 默认清除
public static int Errno(boolean...clear)
{
int err;

err = errno.get();
if(null == clear || clear.length == 0 || clear[0])
errno.set(NSErrno.ERRNO_OK);
return err;
}

public static boolean HasError(boolean...clear)
{
return Errno(clear) != NSErrno.ERRNO_OK;
}

public static String Error(boolean...clear)
{
return NSErrno.ErrStr(Errno(clear));
}

public static void ASSERT(boolean expression, Integer...err)
{
int e;

e = NSArr.GetParm(NSErrno.ERRNO_ERROR, err);
if(!expression)
Throw(e);
}

private NSErrGlobal() {}
}

+ 43
- 0
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/err/NSErrno.java Ver arquivo

@@ -0,0 +1,43 @@
package com.nsgk.agentcentersdk.err;

// 错误码
public final class NSErrno
{
public static final int ERRNO_OK = 0;

public static final int ERRNO_ERROR = 0x00001;

public static final int ERRNO_SYS_INVALID_SIGN = 0x01001;
public static final int ERRNO_SYS_ENCRYPT_FAIL = 0x01002;
public static final int ERRNO_SYS_DECRYPT_FAIL = 0x01003;
public static final int ERRNO_SYS_INVALID_PROTOCOL = 0x01004;
public static final int ERRNO_SYS_SIGN_FAIL = 0x01005;
public static final int ERRNO_SYS_HTTP = 0x01006;

public static final int ERRNO_CLI_PARAMETER_MISSING = 0x03001;
public static final int ERRNO_CLI_DATA_MISSING = 0x03002;
public static final int ERRNO_CLI_SIGN_MISSING = 0x03003;

public static final int ERRNO_SRV_HTTP = 0x04001;

private NSErrno() {}

public static String ErrStr(int errno)
{
switch(errno)
{
case ERRNO_SYS_INVALID_SIGN: return "签名无效";
case ERRNO_SYS_ENCRYPT_FAIL: return "加密失败";
case ERRNO_SYS_DECRYPT_FAIL: return "解密失败";
case ERRNO_SYS_INVALID_PROTOCOL: return "无效协议";
case ERRNO_SYS_SIGN_FAIL: return "签名失败";
case ERRNO_SYS_HTTP: return "Http请求错误";

case ERRNO_CLI_PARAMETER_MISSING: return "参数缺失";
case ERRNO_CLI_DATA_MISSING: return "数据缺失";
case ERRNO_CLI_SIGN_MISSING: return "签名缺失";

case ERRNO_ERROR: default: return "错误";
}
}
}

+ 21
- 0
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/err/NSException.java Ver arquivo

@@ -0,0 +1,21 @@
package com.nsgk.agentcentersdk.err;

import lombok.Data;

@Data
public final class NSException extends RuntimeException
{
private final int errno;

public NSException(int errno)
{
super(NSErrno.ErrStr(errno));
this.errno = errno;
}

public NSException(int errno, String error)
{
super(error);
this.errno = errno;
}
}

+ 0
- 12
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkRequest.java Ver arquivo

@@ -10,16 +10,4 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class NSNetworkRequest extends NSNetworkTransport
{
public <T> void WriteDataObject(NSReportObject<T> object, String publicKey)
{
String dataStr;

ClearHeaders().AddHeader("sign", object.getSign());
ClearQueries().AddQuery("identifier", object.getIdentifier())
.AddQuery("protocol", object.getProtocol())
.AddQuery("timestamp", object.getTimestamp())
;
dataStr = object.getDataStr();
setData(NSCrypto.RSAEncrypt(dataStr, publicKey));
}
}

+ 2
- 3
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkTransport.java Ver arquivo

@@ -5,7 +5,6 @@ import com.nsgk.agentcentersdk.utility.NSStr;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

@@ -40,7 +39,7 @@ public class NSNetworkTransport

public String Header(String name, String...value)
{
return headers.getOrDefault(name, NSArr.DefParms(value));
return headers.getOrDefault(name, NSArr.DefParm(value));
}

public NSNetworkTransport ClearQueries()
@@ -57,6 +56,6 @@ public class NSNetworkTransport

public Object Query(String name, Object...value)
{
return query.getOrDefault(name, NSArr.DefParms(value));
return query.getOrDefault(name, NSArr.DefParm(value));
}
}

+ 26
- 1
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSArr.java Ver arquivo

@@ -1,14 +1,39 @@
package com.nsgk.agentcentersdk.utility;

import java.util.ArrayList;
import java.util.stream.Stream;

// 数组工具
public final class NSArr
{
public static <T> T DefParms(T...args)
public static <T> T DefParm(T...args)
{
if(null == args || args.length == 0)
return null;
return args[0];
}

public static <T> T GetParm(T def, T[] args)
{
if(null == args || args.length == 0)
return def;
return args[0];
}

public static <T> boolean IsEmpty(T...args)
{
return(null == args || args.length == 0);
}

public static <T> boolean IsNotEmpty(T...args)
{
return !IsEmpty(args);
}

public static <T> Stream<T> Stream(T...args)
{
return IsEmpty(args) ? new ArrayList<T>().stream() : Stream.of(args);
}

private NSArr() {}
}

+ 144
- 0
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSReflect.java Ver arquivo

@@ -0,0 +1,144 @@
package com.nsgk.agentcentersdk.utility;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

// 反射工具
public final class NSReflect
{
public static Class<?> Class(String className)
{
try
{
return Class.forName(className);
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
throw new RuntimeException("SDK版本不匹配");
}
}

@SuppressWarnings("unchecked")
public static <T> T CallStaticT(Class<?> classObject, String methodName, Object...args)
{
return (T)CallStatic(classObject, methodName, args);
}

@SuppressWarnings("unchecked")
public static <T> T CallStaticT_s(Class<?> classObject, String methodName, Object...args)
{
return (T)CallStatic_s(classObject, methodName, args);
}

public static Object CallStatic(Class<?> classObject, String methodName, Object...args)
{
if(null == args || args.length == 0)
return CallStatic_s(classObject, methodName);
Object[] objs = new Object[args.length * 2];
for(int i = 0; i < args.length; i++)
{
objs[i * 2] = args[i].getClass();
objs[i * 2 + 1] = args[i];
}
return CallStatic_s(classObject, methodName, objs);
}

public static Object CallStatic_s(Class<?> classObject, String methodName, Object...args)
{
List<Class<?>> classes = new ArrayList<>();
List<Object> params = new ArrayList<>();
if(null != args && args.length > 0)
{
for(int i = 0; i < args.length; i += 2)
{
Class<?> clazz;
Object c = args[i];
if(null != c)
clazz = (Class<?>) c;
else
clazz = args[i + 1].getClass();
classes.add(clazz);
params.add(args[i + 1]);
}
}
try
{
Method method = classObject.getMethod(methodName, classes.toArray(new Class<?>[0]));
return method.invoke(null, params.toArray(new Object[0]));
}
catch(NoSuchMethodException | IllegalAccessException | IllegalArgumentException e)
{
e.printStackTrace();
throw new RuntimeException("SDK版本不匹配");
}
catch(Exception e)
{
e.printStackTrace();
throw new RuntimeException(e);
}
}

@SuppressWarnings("unchecked")
public static <T> T CallT(Object object, String methodName, Object...args)
{
return (T)Call(object, methodName, args);
}

@SuppressWarnings("unchecked")
public static <T> T CallT_s(Object object, String methodName, Object...args)
{
return (T)Call_s(object, methodName, args);
}

public static Object Call(Object object, String methodName, Object...args)
{
if(null == args || args.length == 0)
return Call_s(object, methodName);
Object[] objs = new Object[args.length * 2];
for(int i = 0; i < args.length; i++)
{
objs[i * 2] = args[i].getClass();
objs[i * 2 + 1] = args[i];
}
return Call_s(object, methodName, objs);
}

public static Object Call_s(Object object, String methodName, Object...args)
{
List<Class<?>> classes = new ArrayList<>();
List<Object> params = new ArrayList<>();
if(null != args && args.length > 0)
{
for(int i = 0; i < args.length; i += 2)
{
Class<?> clazz;
Object c = args[i];
if(null != c)
clazz = (Class<?>) c;
else
clazz = args[i + 1].getClass();
classes.add(clazz);
params.add(args[i + 1]);
}
}
try
{
Method method = object.getClass().getMethod(methodName, classes.toArray(new Class<?>[0]));
return method.invoke(object, params.toArray(new Object[0]));
}
catch(NoSuchMethodException | IllegalAccessException | IllegalArgumentException e)
{
e.printStackTrace();
throw new RuntimeException("SDK版本不匹配");
}
catch(Exception e)
{
e.printStackTrace();
throw new RuntimeException(e);
}
}

private NSReflect() {}
}

+ 1
- 1
agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSSignTool.java Ver arquivo

@@ -24,7 +24,7 @@ public final class NSSignTool
fields = Arrays.stream(signFields).sorted(String::compareTo).collect(Collectors.toList());
sb = new StringBuilder();
for(int i = 0; i < fields.size(); i++)
{//dataLength=69&identifier=test&protocol=1&timestamp=1683442648774
{
if(i > 0)
sb.append("&");
String key = fields.get(i);


+ 38
- 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/agentcenter/AgentCenterController.java Ver arquivo

@@ -3,10 +3,17 @@ package com.ruoyi.web.controller.agentcenter;
import com.nsgk.agentcentersdk.api.NSApiResult;
import com.nsgk.agentcentersdk.api.NSSDK;
import com.nsgk.agentcentersdk.api.NSSDKServer;
import com.nsgk.agentcentersdk.core.NSProtocol;
import com.nsgk.agentcentersdk.core.NSReportObject;
import com.nsgk.agentcentersdk.entity.NSContractionEntity;
import com.nsgk.agentcentersdk.err.NSErrGlobal;
import com.nsgk.agentcentersdk.err.NSErrno;
import com.nsgk.agentcentersdk.err.NSException;
import com.ruoyi.agentcenter.object.ContractionMessage;
import com.ruoyi.agentcenter.object.Message;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.utils.EventBusEngine;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -32,7 +39,7 @@ public class AgentCenterController extends BaseController
server = NSSDK.InstanceServer();
recv = server.Recv(request, NSContractionEntity.class);

return server.Resp(200, "测试成功", recv.getDataStr());
return server.Resp(0, "测试成功", recv.getDataStr());
}

@PostMapping("/report")
@@ -42,9 +49,36 @@ public class AgentCenterController extends BaseController
NSReportObject<NSContractionEntity> recv;

NSSDK.InitServer(RuoYiConfig.Secret.privateKey);
server = NSSDK.InstanceServer();
recv = server.Recv(request, NSContractionEntity.class);
try
{
server = NSSDK.InstanceServer();
recv = server.Recv(request, NSContractionEntity.class);

EventBusEngine.Post(convMsg(recv));

return NSSDKServer.Success("上报成功");
}
catch(NSException e)
{
return NSSDKServer.Fail(e.getErrno(), e.getMessage());
}
}

private Message<?> convMsg(NSReportObject<?> reportObject)
{
Message<?> msg;
int protocol;

return server.Resp(200, "上报成功", recv.getDataStr());
protocol = reportObject.getProtocol();
switch(reportObject.getProtocol())
{
case NSProtocol.NS_PROTOCOL_CONTRACTION:
msg = new ContractionMessage(protocol, reportObject.getIdentifier(), reportObject.getTimestamp(), (NSContractionEntity)reportObject.getData());
break;
default:
NSErrGlobal.Err(NSErrno.ERRNO_SYS_INVALID_PROTOCOL);
throw new RuntimeException(String.format("未知的协议类型: 0x%x", protocol));
}
return msg;
}
}

+ 26
- 0
ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/listener/ContractionListener.java Ver arquivo

@@ -0,0 +1,26 @@
package com.ruoyi.agentcenter.listener;

import com.alibaba.fastjson2.JSONObject;
import com.google.common.eventbus.Subscribe;
import com.ruoyi.agentcenter.object.ContractionMessage;
import com.ruoyi.common.utils.EventBusEngine;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ContractionListener
{
@PostConstruct
public void init()
{
EventBusEngine.Register(this);
}

@Subscribe
//@AllowConcurrentEvents
public void handle(ContractionMessage msg)
{
System.err.println(JSONObject.toJSONString(msg));
}
}

+ 3
- 4
ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/listener/TestListener.java Ver arquivo

@@ -1,8 +1,7 @@
package com.ruoyi.agentcenter.listener;

import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.Subscribe;
import com.ruoyi.common.object.Message;
import com.ruoyi.agentcenter.object.Message;
import com.ruoyi.common.utils.EventBusEngine;
import org.springframework.stereotype.Component;

@@ -14,13 +13,13 @@ public class TestListener
@PostConstruct
public void init()
{
EventBusEngine.Register(this);
//EventBusEngine.Register(this);
}

@Subscribe
//@AllowConcurrentEvents
public void handle(Message msg)
{
System.err.println("LLL " + msg.data + " " + Thread.currentThread().getId());
System.err.println("LLL " + msg.getData() + " " + Thread.currentThread().getId());
}
}

+ 11
- 0
ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/object/ContractionMessage.java Ver arquivo

@@ -0,0 +1,11 @@
package com.ruoyi.agentcenter.object;

import com.nsgk.agentcentersdk.entity.NSContractionEntity;

public class ContractionMessage extends Message<NSContractionEntity>
{
public ContractionMessage(int protocol, String identifier, Long timestamp, NSContractionEntity data)
{
super(protocol, identifier, timestamp, data);
}
}

+ 31
- 0
ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/object/Message.java Ver arquivo

@@ -0,0 +1,31 @@
package com.ruoyi.agentcenter.object;

import com.nsgk.agentcentersdk.core.NSProtocol;
import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public abstract class Message<T>
{
private final int protocol; // 协议
private final String identifier; // 识别ID
private final Long timestamp; // 客户端时间戳
private final T data;

public Message()
{
this.protocol = NSProtocol.NS_PROTOCOL_INVALID;
this.identifier = "";
this.timestamp = 0L;
this.data = null;
}

public Message(int protocol, String identifier, Long timestamp, T data)
{
this.protocol = protocol;
this.identifier = identifier;
this.timestamp = timestamp;
this.data = data;
}
}

+ 0
- 14
ruoyi-common/src/main/java/com/ruoyi/common/object/Message.java Ver arquivo

@@ -1,14 +0,0 @@
package com.ruoyi.common.object;

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public final class Message
{
public static final int PROTOCOL_INVALID = 0;

public int protocol = PROTOCOL_INVALID;
public Object data;
}

Carregando…
Cancelar
Salvar