diff --git a/NewLife.Templates/AntJob/.template.config/localize/templatestrings.zh-Hans.json b/NewLife.Templates/AntJob/.template.config/localize/templatestrings.zh-Hans.json
index d369472..de1b538 100644
--- a/NewLife.Templates/AntJob/.template.config/localize/templatestrings.zh-Hans.json
+++ b/NewLife.Templates/AntJob/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,4 +1,4 @@
{
"author": "新生命团队",
- "name": "新生命蚂蚁调度"
+ "name": "新生命AntJob大数据计算"
}
\ No newline at end of file
diff --git a/NewLife.Templates/AntJob/.template.config/template.json b/NewLife.Templates/AntJob/.template.config/template.json
index 60472e9..21e7b8b 100644
--- a/NewLife.Templates/AntJob/.template.config/template.json
+++ b/NewLife.Templates/AntJob/.template.config/template.json
@@ -1,8 +1,9 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Console", "Job" ],
+ "classifications": [ "NewLife", "Job" ],
"name": "NewLife AntJob",
+ "description": "蚂蚁调度系统子程序,编写数据处理等业务逻辑,连接蚂蚁调度中心,拉取作业任务来执行",
"identity": "NewLife.AntJob",
"shortName": "antjob",
"tags": {
diff --git a/NewLife.Templates/Client/.template.config/localize/templatestrings.zh-Hans.json b/NewLife.Templates/Client/.template.config/localize/templatestrings.zh-Hans.json
index f88cdbb..58f7a3d 100644
--- a/NewLife.Templates/Client/.template.config/localize/templatestrings.zh-Hans.json
+++ b/NewLife.Templates/Client/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,4 +1,4 @@
{
"author": "新生命团队",
- "name": "新生命客户端"
+ "name": "新生命IoT客户端"
}
\ No newline at end of file
diff --git a/NewLife.Templates/Client/.template.config/template.json b/NewLife.Templates/Client/.template.config/template.json
index b539b3a..5df8739 100644
--- a/NewLife.Templates/Client/.template.config/template.json
+++ b/NewLife.Templates/Client/.template.config/template.json
@@ -1,8 +1,9 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Console", "IoT" ],
+ "classifications": [ "NewLife", "IoT" ],
"name": "NewLife Client",
+ "description": "CS架构的客户端应用,以后台服务工作,一般由StarAgent负责守护",
"identity": "NewLife.Client",
"shortName": "client",
"tags": {
diff --git a/NewLife.Templates/Console/.template.config/localize/templatestrings.zh-Hans.json b/NewLife.Templates/Console/.template.config/localize/templatestrings.zh-Hans.json
index b2e151b..c0f2638 100644
--- a/NewLife.Templates/Console/.template.config/localize/templatestrings.zh-Hans.json
+++ b/NewLife.Templates/Console/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,4 +1,4 @@
{
"author": "新生命团队",
- "name": "新生命控制台"
+ "name": "新生命Console控制台"
}
\ No newline at end of file
diff --git a/NewLife.Templates/Data/.template.config/localize/templatestrings.zh-Hans.json b/NewLife.Templates/Data/.template.config/localize/templatestrings.zh-Hans.json
new file mode 100644
index 0000000..7d4f264
--- /dev/null
+++ b/NewLife.Templates/Data/.template.config/localize/templatestrings.zh-Hans.json
@@ -0,0 +1,4 @@
+{
+ "author": "新生命团队",
+ "name": "新生命XCode数据层"
+}
\ No newline at end of file
diff --git a/NewLife.Templates/Data/.template.config/template.json b/NewLife.Templates/Data/.template.config/template.json
new file mode 100644
index 0000000..ef45c76
--- /dev/null
+++ b/NewLife.Templates/Data/.template.config/template.json
@@ -0,0 +1,16 @@
+{
+ "$schema": "http://json.schemastore.org/template",
+ "author": "NewLife",
+ "classifications": [ "NewLife", "Common", "Library" ],
+ "name": "NewLife Data",
+ "description": "Web应用、微服务、应用服务、大数据计算等共用数据层,主要包括数据层实体类。一般只用于服务端",
+ "identity": "NewLife.Data.2024",
+ "groupIdentity": "NewLife.Data",
+ "shortName": "data",
+ "tags": {
+ "language": "C#",
+ "type": "project"
+ },
+ "sourceName": "Zero.Data",
+ "preferNameDirectory": true
+}
\ No newline at end of file
diff --git a/NewLife.Templates/GtkForm/.template.config/localize/templatestrings.zh-Hans.json b/NewLife.Templates/GtkForm/.template.config/localize/templatestrings.zh-Hans.json
index b2e151b..375028e 100644
--- a/NewLife.Templates/GtkForm/.template.config/localize/templatestrings.zh-Hans.json
+++ b/NewLife.Templates/GtkForm/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,4 +1,4 @@
{
"author": "新生命团队",
- "name": "新生命控制台"
+ "name": "新生命GTK桌面应用"
}
\ No newline at end of file
diff --git a/NewLife.Templates/GtkForm/.template.config/template.json b/NewLife.Templates/GtkForm/.template.config/template.json
index 9c8a775..f494c18 100644
--- a/NewLife.Templates/GtkForm/.template.config/template.json
+++ b/NewLife.Templates/GtkForm/.template.config/template.json
@@ -3,6 +3,7 @@
"author": "NewLife",
"classifications": [ "NewLife", "Desktop" ],
"name": "NewLife GtkForm",
+ "description": "使用GTK#技术的跨平台桌面应用,给用户提供便捷操作,可对接硬件",
"identity": "NewLife.GtkForm",
"shortName": "gtkform",
"tags": {
diff --git a/NewLife.Templates/HttpServer/.template.config/template.json b/NewLife.Templates/HttpServer/.template.config/template.json
index b56397f..7e2d802 100644
--- a/NewLife.Templates/HttpServer/.template.config/template.json
+++ b/NewLife.Templates/HttpServer/.template.config/template.json
@@ -1,8 +1,9 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Console" ],
+ "classifications": [ "NewLife", "Server" ],
"name": "NewLife HttpServer",
+ "description": "轻量级Http服务器,可用于追求简单Http服务的场景,例如暴露硬件控制为Http接口,如打印组件",
"identity": "NewLife.HttpServer",
"shortName": "http",
"tags": {
diff --git a/NewLife.Templates/NetServer/.template.config/template.json b/NewLife.Templates/NetServer/.template.config/template.json
index 2482559..dd7e922 100644
--- a/NewLife.Templates/NetServer/.template.config/template.json
+++ b/NewLife.Templates/NetServer/.template.config/template.json
@@ -1,8 +1,9 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Console" ],
+ "classifications": [ "NewLife", "Server" ],
"name": "NewLife NetServer",
+ "description": "高性能Tcp网络服务器,单机最高400万连接,可用于建立各种协议的网络服务器",
"identity": "NewLife.NetServer",
"shortName": "net",
"tags": {
diff --git a/NewLife.Templates/NewLife.Templates.csproj b/NewLife.Templates/NewLife.Templates.csproj
index 32c312b..06b1107 100644
--- a/NewLife.Templates/NewLife.Templates.csproj
+++ b/NewLife.Templates/NewLife.Templates.csproj
@@ -41,6 +41,10 @@
+
+
+
+
diff --git a/NewLife.Templates/RpcServer/.template.config/template.json b/NewLife.Templates/RpcServer/.template.config/template.json
index b0a00fd..297fb67 100644
--- a/NewLife.Templates/RpcServer/.template.config/template.json
+++ b/NewLife.Templates/RpcServer/.template.config/template.json
@@ -1,8 +1,9 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Console" ],
+ "classifications": [ "NewLife", "Server" ],
"name": "NewLife RpcServer",
+ "description": "高性能,长连接,数据接口",
"identity": "NewLife.RpcServer",
"shortName": "rpc",
"tags": {
diff --git a/NewLife.Templates/Service/.template.config/localize/templatestrings.zh-Hans.json b/NewLife.Templates/Service/.template.config/localize/templatestrings.zh-Hans.json
index e474d62..1b52eb8 100644
--- a/NewLife.Templates/Service/.template.config/localize/templatestrings.zh-Hans.json
+++ b/NewLife.Templates/Service/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,4 +1,4 @@
{
"author": "新生命团队",
- "name": "新生命后台服务"
+ "name": "新生命Service后台服务"
}
\ No newline at end of file
diff --git a/NewLife.Templates/Service/.template.config/template.json b/NewLife.Templates/Service/.template.config/template.json
index d30b9da..5f4c125 100644
--- a/NewLife.Templates/Service/.template.config/template.json
+++ b/NewLife.Templates/Service/.template.config/template.json
@@ -1,8 +1,9 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Console" ],
+ "classifications": [ "NewLife", "Agent" ],
"name": "NewLife Service",
+ "description": "数据处理、定时任务、MQ生产消费、系统监控等超长独立工作的后台任务",
"identity": "NewLife.Service",
"shortName": "service",
"tags": {
diff --git a/NewLife.Templates/WebApi/.template.config/template.json b/NewLife.Templates/WebApi/.template.config/template.json
index 2a682fa..0c816c8 100644
--- a/NewLife.Templates/WebApi/.template.config/template.json
+++ b/NewLife.Templates/WebApi/.template.config/template.json
@@ -1,7 +1,7 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Common", "Web", "Api", "Web Api" ],
+ "classifications": [ "NewLife", "Common", "Web", "API", "Web API" ],
"name": "NewLife WebApi",
"description": "数据接口,带有Swagger的标准WebApi接口项目",
"identity": "NewLife.WebApi.2024",
diff --git a/NewLife.Templates/WebSocket/.template.config/template.json b/NewLife.Templates/WebSocket/.template.config/template.json
index 8b85a01..d3012dc 100644
--- a/NewLife.Templates/WebSocket/.template.config/template.json
+++ b/NewLife.Templates/WebSocket/.template.config/template.json
@@ -1,8 +1,9 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Console" ],
+ "classifications": [ "NewLife", "Server" ],
"name": "NewLife WebSocket",
+ "description": "轻量级WebSocket服务,可用于网页与终端本地硬件保持长连接通信",
"identity": "NewLife.WebSocket",
"shortName": "websocket",
"tags": {
diff --git a/NewLife.Templates/WebView/.template.config/localize/templatestrings.zh-Hans.json b/NewLife.Templates/WebView/.template.config/localize/templatestrings.zh-Hans.json
index a0070f0..3b0b155 100644
--- a/NewLife.Templates/WebView/.template.config/localize/templatestrings.zh-Hans.json
+++ b/NewLife.Templates/WebView/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,4 +1,4 @@
{
"author": "新生命团队",
- "name": "新生命WebView"
+ "name": "新生命WebView窗体应用"
}
\ No newline at end of file
diff --git a/NewLife.Templates/WebView/.template.config/template.json b/NewLife.Templates/WebView/.template.config/template.json
index 70f9cd1..dda668c 100644
--- a/NewLife.Templates/WebView/.template.config/template.json
+++ b/NewLife.Templates/WebView/.template.config/template.json
@@ -1,8 +1,9 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Windows", "WinForm", "Desktop" ],
+ "classifications": [ "NewLife", "Windows", "WinForms", "Desktop" ],
"name": "NewLife WebView",
+ "description": "嵌入Web的客户端桌面应用,给用户提供便捷操作,可对接硬件",
"identity": "NewLife.WebView",
"shortName": "webview",
"tags": {
diff --git a/NewLife.Templates/WinForm/.template.config/localize/templatestrings.zh-Hans.json b/NewLife.Templates/WinForm/.template.config/localize/templatestrings.zh-Hans.json
index 249f56d..6dc9b08 100644
--- a/NewLife.Templates/WinForm/.template.config/localize/templatestrings.zh-Hans.json
+++ b/NewLife.Templates/WinForm/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,4 +1,4 @@
{
"author": "新生命团队",
- "name": "新生命窗口应用"
+ "name": "新生命Windows窗体应用"
}
\ No newline at end of file
diff --git a/NewLife.Templates/WinForm/.template.config/template.json b/NewLife.Templates/WinForm/.template.config/template.json
index 0cd0d12..8f07abc 100644
--- a/NewLife.Templates/WinForm/.template.config/template.json
+++ b/NewLife.Templates/WinForm/.template.config/template.json
@@ -1,8 +1,9 @@
{
"$schema": "http://json.schemastore.org/template",
"author": "NewLife",
- "classifications": [ "NewLife", "Windows", "WinForm", "Desktop" ],
+ "classifications": [ "NewLife", "Windows", "WinForms", "Desktop" ],
"name": "NewLife WinForm",
+ "description": "CS架构的客户端桌面应用,给用户提供便捷操作,可对接硬件",
"identity": "NewLife.WinForm",
"shortName": "nwinform",
"tags": {
diff --git a/NewLife.Templates/Worker/.template.config/localize/templatestrings.zh-Hans.json b/NewLife.Templates/Worker/.template.config/localize/templatestrings.zh-Hans.json
index 5945cdb..016f651 100644
--- a/NewLife.Templates/Worker/.template.config/localize/templatestrings.zh-Hans.json
+++ b/NewLife.Templates/Worker/.template.config/localize/templatestrings.zh-Hans.json
@@ -1,4 +1,4 @@
{
"author": "新生命团队",
- "name": "新生命后台"
+ "name": "新生命Worker"
}
\ No newline at end of file
diff --git a/NewLife.Templates/Worker/.template.config/template.json b/NewLife.Templates/Worker/.template.config/template.json
index d2eb6af..54048c4 100644
--- a/NewLife.Templates/Worker/.template.config/template.json
+++ b/NewLife.Templates/Worker/.template.config/template.json
@@ -3,6 +3,7 @@
"author": "NewLife",
"classifications": [ "NewLife", "Worker" ],
"name": "NewLife Worker",
+ "description": "数据处理、定时任务、MQ生产消费、系统监控等超长独立工作的后台任务",
"identity": "NewLife.Worker",
"shortName": "nworker",
"tags": {
diff --git a/Zero.AntJob/Zero.AntJob.csproj b/Zero.AntJob/Zero.AntJob.csproj
index 48b83d0..f50b88a 100644
--- a/Zero.AntJob/Zero.AntJob.csproj
+++ b/Zero.AntJob/Zero.AntJob.csproj
@@ -28,15 +28,14 @@
-
-
+
+
-
diff --git a/Zero.Data/Models/LoginInfo.cs b/Zero.Data/Models/LoginInfo.cs
new file mode 100644
index 0000000..ada4fbc
--- /dev/null
+++ b/Zero.Data/Models/LoginInfo.cs
@@ -0,0 +1,39 @@
+using NewLife.Remoting.Models;
+
+namespace Zero.Data.Models;
+
+/// 节点登录信息
+public class LoginInfo : LoginRequest
+{
+ #region 属性
+ /// 产品编码
+ public String ProductCode { get; set; }
+
+ /// 名称。可用于标识设备的名称
+ public String Name { get; set; }
+
+ /// 系统名
+ public String OSName { get; set; }
+
+ /// 系统版本
+ public String OSVersion { get; set; }
+
+ /// 处理器架构
+ public String Architecture { get; set; }
+
+ /// 机器名
+ public String MachineName { get; set; }
+
+ /// 用户名
+ public String UserName { get; set; }
+
+ /// 核心数
+ public Int32 ProcessorCount { get; set; }
+
+ /// 内存大小
+ public UInt64 Memory { get; set; }
+
+ /// 磁盘大小。应用所在盘
+ public UInt64 TotalSize { get; set; }
+ #endregion
+}
\ No newline at end of file
diff --git a/Zero.Data/Models/PingInfo.cs b/Zero.Data/Models/PingInfo.cs
new file mode 100644
index 0000000..732cc2d
--- /dev/null
+++ b/Zero.Data/Models/PingInfo.cs
@@ -0,0 +1,42 @@
+using NewLife.Remoting.Models;
+
+namespace Zero.Data.Models;
+
+/// 心跳信息
+public class PingInfo : PingRequest
+{
+ #region 属性
+ ///// 内存大小
+ //public UInt64 Memory { get; set; }
+
+ ///// 可用内存大小
+ //public UInt64 AvailableMemory { get; set; }
+
+ ///// 磁盘大小。应用所在盘
+ //public UInt64 TotalSize { get; set; }
+
+ ///// 磁盘可用空间。应用所在盘
+ //public UInt64 AvailableFreeSpace { get; set; }
+
+ ///// CPU使用率
+ //public Double CpuRate { get; set; }
+
+ ///// 温度
+ //public Double Temperature { get; set; }
+
+ ///// 电量
+ //public Double Battery { get; set; }
+
+ ///// 本地IP
+ //public String IP { get; set; }
+
+ ///// 开机时间,单位s
+ //public Int32 Uptime { get; set; }
+
+ ///// 本地UTC时间。ms毫秒
+ //public Int64 Time { get; set; }
+
+ ///// 延迟。ms毫秒
+ //public Int32 Delay { get; set; }
+ #endregion
+}
\ No newline at end of file
diff --git "a/Zero.Data/Nodes/\350\212\202\347\202\271.Biz.cs" "b/Zero.Data/Nodes/\350\212\202\347\202\271.Biz.cs"
index 3b84667..e62ccc4 100644
--- "a/Zero.Data/Nodes/\350\212\202\347\202\271.Biz.cs"
+++ "b/Zero.Data/Nodes/\350\212\202\347\202\271.Biz.cs"
@@ -8,7 +8,7 @@
using XCode;
using XCode.Cache;
using XCode.Membership;
-using Zero.Models;
+using Zero.Data.Models;
namespace Zero.Data.Nodes;
diff --git "a/Zero.Data/Nodes/\350\212\202\347\202\271\345\234\250\347\272\277.Biz.cs" "b/Zero.Data/Nodes/\350\212\202\347\202\271\345\234\250\347\272\277.Biz.cs"
index fc0d25b..619400b 100644
--- "a/Zero.Data/Nodes/\350\212\202\347\202\271\345\234\250\347\272\277.Biz.cs"
+++ "b/Zero.Data/Nodes/\350\212\202\347\202\271\345\234\250\347\272\277.Biz.cs"
@@ -7,7 +7,7 @@
using NewLife.Serialization;
using XCode;
using XCode.Membership;
-using Zero.Models;
+using Zero.Data.Models;
namespace Zero.Data.Nodes;
diff --git a/Zero.Data/WeiXin/Article.cs b/Zero.Data/WeiXin/Article.cs
new file mode 100644
index 0000000..581e372
--- /dev/null
+++ b/Zero.Data/WeiXin/Article.cs
@@ -0,0 +1,19 @@
+using System;
+
+namespace Zero.WeiXin;
+
+/// 文章
+public class Article
+{
+ /// 标题,不超过128个字节,超过会自动截断
+ public String Title { get; set; }
+
+ /// 描述,不超过512个字节,超过会自动截断
+ public String Description { get; set; }
+
+ /// 点击后跳转的链接。
+ public String Url { get; set; }
+
+ /// 图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068*455,小图150*150。
+ public String PicUrl { get; set; }
+}
\ No newline at end of file
diff --git a/Zero.Data/WeiXin/Robot.cs b/Zero.Data/WeiXin/Robot.cs
new file mode 100644
index 0000000..f422f24
--- /dev/null
+++ b/Zero.Data/WeiXin/Robot.cs
@@ -0,0 +1,131 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Http;
+using System.Threading.Tasks;
+using NewLife;
+using NewLife.Log;
+using NewLife.Remoting;
+
+namespace Zero.WeiXin;
+
+/// 企业微信机器人。webhook推送
+public class Robot
+{
+ #region 属性
+ /// WebHook机器人地址
+ public String Url { get; set; } = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={key}";
+
+ /// 性能跟踪
+ public ITracer Tracer { get; set; } = DefaultTracer.Instance;
+
+ private HttpClient _Client;
+ #endregion
+
+ #region 发送消息
+ /// 发消息
+ ///
+ ///
+ protected async Task