From 888257e74954e0e0fd9b226bf608594cd6d4a13f Mon Sep 17 00:00:00 2001 From: "nodyang@aliyun.com" Date: Sat, 14 Sep 2024 10:17:39 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SlnMesnac.Model/domain/BaseCode.cs | 7 ++++ SlnMesnac.Model/domain/Page.cs | 7 ++++ SlnMesnac.Model/domain/ScanLog.cs | 29 ++++++++++++++++ .../service/ScanLog/IScanLogService.cs | 7 ++++ .../service/ScanLog/ScanLogServiceImpl.cs | 34 +++++++++++++++++++ .../service/baseCode/BaseCodeServiceImpl.cs | 7 ++++ .../service/baseCode/IBaseCodeService.cs | 7 ++++ 7 files changed, 98 insertions(+) create mode 100644 SlnMesnac.Model/domain/BaseCode.cs create mode 100644 SlnMesnac.Model/domain/Page.cs create mode 100644 SlnMesnac.Model/domain/ScanLog.cs create mode 100644 SlnMesnac.Repository/service/ScanLog/IScanLogService.cs create mode 100644 SlnMesnac.Repository/service/ScanLog/ScanLogServiceImpl.cs create mode 100644 SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs create mode 100644 SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs diff --git a/SlnMesnac.Model/domain/BaseCode.cs b/SlnMesnac.Model/domain/BaseCode.cs new file mode 100644 index 0000000..ffe886a --- /dev/null +++ b/SlnMesnac.Model/domain/BaseCode.cs @@ -0,0 +1,7 @@ +namespace SlnMesnac.Model.domain +{ + public class BaseCode + { + + } +} \ No newline at end of file diff --git a/SlnMesnac.Model/domain/Page.cs b/SlnMesnac.Model/domain/Page.cs new file mode 100644 index 0000000..cdbf8ee --- /dev/null +++ b/SlnMesnac.Model/domain/Page.cs @@ -0,0 +1,7 @@ +namespace SlnMesnac.Model.domain +{ + public class Page + { + + } +} \ No newline at end of file diff --git a/SlnMesnac.Model/domain/ScanLog.cs b/SlnMesnac.Model/domain/ScanLog.cs new file mode 100644 index 0000000..5bb82a8 --- /dev/null +++ b/SlnMesnac.Model/domain/ScanLog.cs @@ -0,0 +1,29 @@ +using System; +using System.Runtime.Serialization; +using SqlSugar; + +namespace SlnMesnac.Model.domain +{ + [SugarTable("ScanLog"), Tenant("mes")] + [DataContract(Name = "ScanLog ɨ־")] + public class ScanLog + { + /// + /// + /// + [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + [SugarColumn(ColumnName = "create_time")] + public DateTime CreateTime { get; set; } + [SugarColumn(ColumnName = "data_type")] + public int DataType { get; set; } + [SugarColumn(ColumnName = "rfid")] + public string Rfid { get; set; } + [SugarColumn(ColumnName = "code")] + public string Code { get; set; } + [SugarColumn(ColumnName = "ocr")] + public string Ocr { get; set; } + [SugarColumn(ColumnName = "url")] + public string Url { get; set; } + } +} \ No newline at end of file diff --git a/SlnMesnac.Repository/service/ScanLog/IScanLogService.cs b/SlnMesnac.Repository/service/ScanLog/IScanLogService.cs new file mode 100644 index 0000000..692120e --- /dev/null +++ b/SlnMesnac.Repository/service/ScanLog/IScanLogService.cs @@ -0,0 +1,7 @@ +namespace SlnMesnac.Repository.service.ScanLog +{ + public class IScanLogService + { + + } +} \ No newline at end of file diff --git a/SlnMesnac.Repository/service/ScanLog/ScanLogServiceImpl.cs b/SlnMesnac.Repository/service/ScanLog/ScanLogServiceImpl.cs new file mode 100644 index 0000000..b085f3a --- /dev/null +++ b/SlnMesnac.Repository/service/ScanLog/ScanLogServiceImpl.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using SlnMesnac.Model.domain; +using SlnMesnac.Repository.service.@base; + +namespace SlnMesnac.Repository.service.ScanLog +{ + public class ScanLogServiceImpl:BaseServiceImpl,IScanLogService + { + public ScanLogServiceImpl(Repository rep) : base(rep) + { + } + + public void CreatTable() + { + _rep.Context.CodeFirst.InitTables(); + List ls = new List(); + for (int i = 0; i < 100; i++) + { + ls.Add(new ScanLogModel() + { + CreateTime = DateTime.Now, + DataType = 1, + Rfid = "12", + Code = "21", + Ocr = "2", + Url="badi.com" + }); + } + + this.Insert(ls); + } + } +} \ No newline at end of file diff --git a/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs b/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs new file mode 100644 index 0000000..e86145e --- /dev/null +++ b/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs @@ -0,0 +1,7 @@ +namespace SlnMesnac.Repository.service +{ + public class BaseCodeServiceImpl + { + + } +} \ No newline at end of file diff --git a/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs b/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs new file mode 100644 index 0000000..efc756a --- /dev/null +++ b/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs @@ -0,0 +1,7 @@ +namespace SlnMesnac.Repository.service +{ + public class IBaseCodeService + { + + } +} \ No newline at end of file From f210aacec92d387da2cb7b4c66ca5817e002f9a9 Mon Sep 17 00:00:00 2001 From: "nodyang@aliyun.com" Date: Sat, 14 Sep 2024 10:18:06 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E8=A1=A8=20=E5=92=8C=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SlnMesnac.Config/SqlConfig.cs | 2 +- SlnMesnac.Model/domain/BaseCode.cs | 32 ++++++++++++++++++- SlnMesnac.Model/domain/Page.cs | 19 ++++++++++- SlnMesnac.Model/domain/ScanLog.cs | 2 +- .../service/ScanLog/IScanLogService.cs | 10 ++++-- .../service/ScanLog/ScanLogServiceImpl.cs | 15 +++++++++ .../service/baseCode/BaseCodeServiceImpl.cs | 28 ++++++++++++++-- .../service/baseCode/IBaseCodeService.cs | 11 +++++-- 8 files changed, 107 insertions(+), 12 deletions(-) diff --git a/SlnMesnac.Config/SqlConfig.cs b/SlnMesnac.Config/SqlConfig.cs index cc3de31..b1207d2 100644 --- a/SlnMesnac.Config/SqlConfig.cs +++ b/SlnMesnac.Config/SqlConfig.cs @@ -34,7 +34,7 @@ namespace SlnMesnac.Config public string configId { get; set; } /// - /// 数据库类型,MySql-0;SqlServer-1;Sqlite-2;Oracle-3 + /// 数据库类型,MySql-0;SqlServer-1;Sqlite-2;Oracle-3,4 /// public int dbType { get; set; } diff --git a/SlnMesnac.Model/domain/BaseCode.cs b/SlnMesnac.Model/domain/BaseCode.cs index ffe886a..f7b6c64 100644 --- a/SlnMesnac.Model/domain/BaseCode.cs +++ b/SlnMesnac.Model/domain/BaseCode.cs @@ -1,7 +1,37 @@ -namespace SlnMesnac.Model.domain +using System.Runtime.Serialization; +using SqlSugar; + +namespace SlnMesnac.Model.domain { + /// + /// 异常监控编码对应表 + /// + [SugarTable("BaseCode"), TenantAttribute("mes")] + [DataContract(Name = "BaseCode 基础表")] public class BaseCode { + /// + /// + /// + [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + /// + /// + /// + [SugarColumn(ColumnName = "code")] + public string Code { get; set; } + /// + /// + /// + [SugarColumn(ColumnName = "state")] + public string State { get; set; } + + + /// + /// 1 RFid 2 视觉 + /// + [SugarColumn(ColumnName = "category")] + public int Category { get; set; } } } \ No newline at end of file diff --git a/SlnMesnac.Model/domain/Page.cs b/SlnMesnac.Model/domain/Page.cs index cdbf8ee..deab148 100644 --- a/SlnMesnac.Model/domain/Page.cs +++ b/SlnMesnac.Model/domain/Page.cs @@ -1,7 +1,24 @@ -namespace SlnMesnac.Model.domain +using System.Collections.Generic; + +namespace SlnMesnac.Model.domain { public class Page { + public int PageIndex { get; set; } + public int PageSize { get; set; } + public int TotalCount { get; set; } + public int TotalPage { get; set; } + public List Data { get; set; } } + + public class Page:Page + { + public List Data { get; set; } + + /// + /// 判断有没有下一页 + /// + public bool HasNext => TotalPage > PageIndex; + } } \ No newline at end of file diff --git a/SlnMesnac.Model/domain/ScanLog.cs b/SlnMesnac.Model/domain/ScanLog.cs index 5bb82a8..8d20e2f 100644 --- a/SlnMesnac.Model/domain/ScanLog.cs +++ b/SlnMesnac.Model/domain/ScanLog.cs @@ -6,7 +6,7 @@ namespace SlnMesnac.Model.domain { [SugarTable("ScanLog"), Tenant("mes")] [DataContract(Name = "ScanLog ɨ־")] - public class ScanLog + public class ScanLogModel { /// /// diff --git a/SlnMesnac.Repository/service/ScanLog/IScanLogService.cs b/SlnMesnac.Repository/service/ScanLog/IScanLogService.cs index 692120e..4a87885 100644 --- a/SlnMesnac.Repository/service/ScanLog/IScanLogService.cs +++ b/SlnMesnac.Repository/service/ScanLog/IScanLogService.cs @@ -1,7 +1,13 @@ -namespace SlnMesnac.Repository.service.ScanLog +using SlnMesnac.Model.domain; +using SlnMesnac.Repository.service.@base; + +namespace SlnMesnac.Repository.service.ScanLog { - public class IScanLogService + public interface IScanLogService:IBaseService { + void CreatTable(); + + Page QueryPage(int pageIndex, int pageSize); } } \ No newline at end of file diff --git a/SlnMesnac.Repository/service/ScanLog/ScanLogServiceImpl.cs b/SlnMesnac.Repository/service/ScanLog/ScanLogServiceImpl.cs index b085f3a..3b7b0c8 100644 --- a/SlnMesnac.Repository/service/ScanLog/ScanLogServiceImpl.cs +++ b/SlnMesnac.Repository/service/ScanLog/ScanLogServiceImpl.cs @@ -30,5 +30,20 @@ namespace SlnMesnac.Repository.service.ScanLog this.Insert(ls); } + + public Page QueryPage(int pageIndex, int pageSize) + { + int totalCount = 0; + var list= _rep.Context.Queryable().OrderByDescending(x => x.CreateTime) + .ToPageList(pageIndex, pageSize, ref totalCount); + Page page = new Page(); + page.Data=list; + page.PageIndex = pageIndex; + page.PageSize = pageSize; + page.TotalCount = totalCount; + page.TotalPage = (int)Math.Ceiling(totalCount / (double)pageSize); + return page; + + } } } \ No newline at end of file diff --git a/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs b/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs index e86145e..b90d0a6 100644 --- a/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs +++ b/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs @@ -1,7 +1,29 @@ -namespace SlnMesnac.Repository.service +using System.Linq; +using SlnMesnac.Model.domain; +using SlnMesnac.Repository.service.@base; + +namespace SlnMesnac.Repository.service { - public class BaseCodeServiceImpl + public class BaseCodeServiceImpl:BaseServiceImpl,IBaseCodeService { - + public BaseCodeServiceImpl(Repository rep) : base(rep) + { + + } + + public void CreateBaseCode() + { + _rep.Context.CodeFirst.InitTables(typeof(BaseCode)); + } + + /// + /// 根据Code去查询单个数据 + /// + /// + /// + public BaseCode QueryCode(string code) + { + return this.Query(x => x.Code == code).First(); + } } } \ No newline at end of file diff --git a/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs b/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs index efc756a..5efca06 100644 --- a/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs +++ b/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs @@ -1,7 +1,12 @@ -namespace SlnMesnac.Repository.service +using SlnMesnac.Model.domain; +using SlnMesnac.Repository.service.@base; + +namespace SlnMesnac.Repository.service { - public class IBaseCodeService + public interface IBaseCodeService:IBaseService { - + void CreateBaseCode(); + + BaseCode QueryCode(string code); } } \ No newline at end of file From a68b4a8b974eac241024d6501ce63dbfdf09cd77 Mon Sep 17 00:00:00 2001 From: "nodyang@aliyun.com" Date: Sat, 14 Sep 2024 10:20:11 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SlnMesnac.WPF/appsettings.json | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/SlnMesnac.WPF/appsettings.json b/SlnMesnac.WPF/appsettings.json index 9346894..57beb62 100644 --- a/SlnMesnac.WPF/appsettings.json +++ b/SlnMesnac.WPF/appsettings.json @@ -12,13 +12,8 @@ "SqlConfig": [ { "configId": "mes", - "dbType": 1, - "connStr": "server=.;uid=sa;pwd=123456;database=JiangYinMENS" - }, - { - "configId": "mcs", - "dbType": 3, - "connStr": "Data Source=175.27.215.92/helowin;User ID=aucma_scada;Password=aucma" + "dbType": 4, + "connStr": "PORT=5433;DATABASE=daxing;HOST=127.0.0.1;PASSWORD=123456;USER ID=postgres" } ], "PlcConfig": [ From 3ef6d79288646f7cbd6edf1f117b696300198b29 Mon Sep 17 00:00:00 2001 From: "nodyang@aliyun.com" Date: Sat, 14 Sep 2024 10:43:18 +0800 Subject: [PATCH 4/9] SetListenIPHosts --- SlnMesnac.TouchSocket/Back.cs | 13 ++++++++++ SlnMesnac.TouchSocket/ScanLogSocket.cs | 30 +++++++++++++++++++++++ SlnMesnac.TouchSocket/ScanStatusSocket.cs | 22 +++++++++++++++++ SlnMesnac.TouchSocket/TcpServer.cs | 26 ++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 SlnMesnac.TouchSocket/Back.cs create mode 100644 SlnMesnac.TouchSocket/ScanLogSocket.cs create mode 100644 SlnMesnac.TouchSocket/ScanStatusSocket.cs diff --git a/SlnMesnac.TouchSocket/Back.cs b/SlnMesnac.TouchSocket/Back.cs new file mode 100644 index 0000000..2e8df36 --- /dev/null +++ b/SlnMesnac.TouchSocket/Back.cs @@ -0,0 +1,13 @@ +using System; + +namespace SlnMesnac.TouchSocket +{ + public class Back + { + public int Code { get; set; } =200; + public string msg { get; set; } = "操作成功"; + public string timestamp { get; set; } = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); + } + + +} \ No newline at end of file diff --git a/SlnMesnac.TouchSocket/ScanLogSocket.cs b/SlnMesnac.TouchSocket/ScanLogSocket.cs new file mode 100644 index 0000000..a11f854 --- /dev/null +++ b/SlnMesnac.TouchSocket/ScanLogSocket.cs @@ -0,0 +1,30 @@ +using System; + +public class ScanLogSocket +{ + /// + /// + /// + + + public DateTime CreateTime + { + get + { + DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(timestamp); + return dateTimeOffset.UtcDateTime; + } + } + + public long timestamp { get; set; } + + public int data_type { get; set; } + + public string ffid { get; set; } + + public string code { get; set; } + + public string ocr { get; set; } + + public string url { get; set; } +} \ No newline at end of file diff --git a/SlnMesnac.TouchSocket/ScanStatusSocket.cs b/SlnMesnac.TouchSocket/ScanStatusSocket.cs new file mode 100644 index 0000000..ce8c42d --- /dev/null +++ b/SlnMesnac.TouchSocket/ScanStatusSocket.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; + +public class ScanStatusSocket +{ + public DateTime CreateTime + { + get + { + DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(timestamp); + return dateTimeOffset.UtcDateTime; + } + } + + public long timestamp { get; set; } + + public int data_type { get; set; } + + public int is_alarm { get; set; } + + public List device_status { get; set; } +} \ No newline at end of file diff --git a/SlnMesnac.TouchSocket/TcpServer.cs b/SlnMesnac.TouchSocket/TcpServer.cs index 70f8afc..86b0710 100644 --- a/SlnMesnac.TouchSocket/TcpServer.cs +++ b/SlnMesnac.TouchSocket/TcpServer.cs @@ -2,8 +2,11 @@ using System; using System.Collections.Generic; using System.Text; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using TouchSocket.Core; using TouchSocket.Sockets; +using JsonSerializer = System.Text.Json.JsonSerializer; #region << 版 本 注 释 >> /*-------------------------------------------------------------------- @@ -74,7 +77,30 @@ namespace SlnMesnac.TouchSocket byte[] receivedBuffer = new byte[e.ByteBlock.Len]; Array.Copy(e.ByteBlock.Buffer, 0, receivedBuffer, 0, e.ByteBlock.Len); ReceivedClientBufferEvent?.Invoke(receivedBuffer); + + int dataType = 0; + var jObject = JObject.Parse(mes); + if (jObject.TryGetValue("data_type", out var value)) + { + dataType=value.Value(); + } + + if (dataType == 1) + { + ScanStatusSocket scanStatus= JsonConvert.DeserializeObject(mes); + } + else + { + if (dataType == 2) + { + ScanLogSocket scanStatus= JsonConvert.DeserializeObject(mes); + } + } + + // DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(timestamp); + // DateTime dateTime = dateTimeOffset.UtcDateTime; + client.SendAsync(mes); return EasyTask.CompletedTask; }; From cd916cd323fbe5058e77c873592f4b03e4a7fc6a Mon Sep 17 00:00:00 2001 From: "nodyang@aliyun.com" Date: Sat, 14 Sep 2024 11:02:54 +0800 Subject: [PATCH 5/9] demo --- SlnMesnac.TouchSocket/ScanLogSocket.cs | 2 +- .../SlnMesnac.TouchSocket.csproj | 1 + SlnMesnac.TouchSocket/TcpServer.cs | 28 ++++++++++++++++--- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/SlnMesnac.TouchSocket/ScanLogSocket.cs b/SlnMesnac.TouchSocket/ScanLogSocket.cs index a11f854..c0fa47d 100644 --- a/SlnMesnac.TouchSocket/ScanLogSocket.cs +++ b/SlnMesnac.TouchSocket/ScanLogSocket.cs @@ -20,7 +20,7 @@ public class ScanLogSocket public int data_type { get; set; } - public string ffid { get; set; } + public string rfid { get; set; } public string code { get; set; } diff --git a/SlnMesnac.TouchSocket/SlnMesnac.TouchSocket.csproj b/SlnMesnac.TouchSocket/SlnMesnac.TouchSocket.csproj index 94f69ee..ae8a9c3 100644 --- a/SlnMesnac.TouchSocket/SlnMesnac.TouchSocket.csproj +++ b/SlnMesnac.TouchSocket/SlnMesnac.TouchSocket.csproj @@ -12,6 +12,7 @@ + diff --git a/SlnMesnac.TouchSocket/TcpServer.cs b/SlnMesnac.TouchSocket/TcpServer.cs index 86b0710..8cfa253 100644 --- a/SlnMesnac.TouchSocket/TcpServer.cs +++ b/SlnMesnac.TouchSocket/TcpServer.cs @@ -4,6 +4,8 @@ using System.Collections.Generic; using System.Text; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using SlnMesnac.Model.domain; +using SlnMesnac.Repository.service.ScanLog; using TouchSocket.Core; using TouchSocket.Sockets; using JsonSerializer = System.Text.Json.JsonSerializer; @@ -36,6 +38,8 @@ namespace SlnMesnac.TouchSocket { private ILogger _logger; private readonly TcpService _service; + + private IScanLogService _scanService; /// /// 接收客户端指令委托 /// @@ -45,10 +49,11 @@ namespace SlnMesnac.TouchSocket public delegate void RefreshClientInfo(TcpService tcpService); public event RefreshClientInfo? RefreshClientInfoEvent; - public TcpServer(ILogger logger,TcpService tcpService) + public TcpServer(ILogger logger,TcpService tcpService, IScanLogService scan) { _logger = logger; _service = tcpService; + _scanService = scan; } public void Init(int serverPort) @@ -87,20 +92,35 @@ namespace SlnMesnac.TouchSocket if (dataType == 1) { - ScanStatusSocket scanStatus= JsonConvert.DeserializeObject(mes); + + ScanLogSocket scanStatus= JsonConvert.DeserializeObject(mes); + + _scanService.Insert(new ScanLogModel() + { + CreateTime = scanStatus.CreateTime, + DataType = scanStatus.data_type, + Code = scanStatus.code, + Rfid = scanStatus.rfid, + Ocr = scanStatus.ocr, + Url = scanStatus.url + + + }); + + } else { if (dataType == 2) { - ScanLogSocket scanStatus= JsonConvert.DeserializeObject(mes); + ScanStatusSocket scanStatus= JsonConvert.DeserializeObject(mes); } } // DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(timestamp); // DateTime dateTime = dateTimeOffset.UtcDateTime; - client.SendAsync(mes); + client.SendAsync(new Back().ToJsonString()); return EasyTask.CompletedTask; }; From 0c1214ff480bcb93fda52d11b3b64c05d7c918b5 Mon Sep 17 00:00:00 2001 From: "nodyang@aliyun.com" Date: Sat, 14 Sep 2024 11:20:58 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E6=B3=A8=E5=85=A5=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SlnMesnac.TouchSocket/TcpServer.cs | 40 +++++++++++++++++++----------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/SlnMesnac.TouchSocket/TcpServer.cs b/SlnMesnac.TouchSocket/TcpServer.cs index 8cfa253..2ce92d5 100644 --- a/SlnMesnac.TouchSocket/TcpServer.cs +++ b/SlnMesnac.TouchSocket/TcpServer.cs @@ -34,26 +34,35 @@ using JsonSerializer = System.Text.Json.JsonSerializer; #endregion << 版 本 注 释 >> namespace SlnMesnac.TouchSocket { + + public class TcpServer { private ILogger _logger; private readonly TcpService _service; - private IScanLogService _scanService; - /// - /// 接收客户端指令委托 - /// - public delegate void ReceivedClientBuffer(byte[] buffer); - public event ReceivedClientBuffer? ReceivedClientBufferEvent; + private readonly IScanLogService _scanService; + // /// + // /// 接收客户端指令委托 + // /// + // public delegate void ReceivedClientBuffer(byte[] buffer); + // public event ReceivedClientBuffer? ReceivedClientBufferEvent; + // + // public delegate void RefreshClientInfo(TcpService tcpService); + // public event RefreshClientInfo? RefreshClientInfoEvent; + - public delegate void RefreshClientInfo(TcpService tcpService); - public event RefreshClientInfo? RefreshClientInfoEvent; + + public Action ScanLogSocketAction; + public Action ScanStatusSocketAction; + public TcpServer(ILogger logger,TcpService tcpService, IScanLogService scan) { _logger = logger; _service = tcpService; _scanService = scan; + } public void Init(int serverPort) @@ -66,22 +75,22 @@ namespace SlnMesnac.TouchSocket }; _service.Connected = (client, e) => { _logger.LogInformation($"客户端{client.IP}接入服务成功"); - RefreshClientInfoEvent?.Invoke(_service); + // RefreshClientInfoEvent?.Invoke(_service); return EasyTask.CompletedTask; }; _service.Disconnected = (client, e) => { _logger.LogInformation($"客户端{client.IP}断开连接"); - RefreshClientInfoEvent?.Invoke(_service); + // RefreshClientInfoEvent?.Invoke(_service); return EasyTask.CompletedTask; }; _service.Received = (client, e) => { //从客户端收到信息 var mes = Encoding.UTF8.GetString(e.ByteBlock.Buffer, 0, e.ByteBlock.Len);//注意:数据长度是byteBlock.Len - - byte[] receivedBuffer = new byte[e.ByteBlock.Len]; - Array.Copy(e.ByteBlock.Buffer, 0, receivedBuffer, 0, e.ByteBlock.Len); - ReceivedClientBufferEvent?.Invoke(receivedBuffer); + _logger.LogInformation("收到数据:{Data}",mes); + // byte[] receivedBuffer = new byte[e.ByteBlock.Len]; + // Array.Copy(e.ByteBlock.Buffer, 0, receivedBuffer, 0, e.ByteBlock.Len); + // ReceivedClientBufferEvent?.Invoke(receivedBuffer); int dataType = 0; var jObject = JObject.Parse(mes); @@ -94,7 +103,7 @@ namespace SlnMesnac.TouchSocket { ScanLogSocket scanStatus= JsonConvert.DeserializeObject(mes); - + ScanLogSocketAction?.Invoke(scanStatus); _scanService.Insert(new ScanLogModel() { CreateTime = scanStatus.CreateTime, @@ -114,6 +123,7 @@ namespace SlnMesnac.TouchSocket if (dataType == 2) { ScanStatusSocket scanStatus= JsonConvert.DeserializeObject(mes); + ScanStatusSocketAction?.Invoke(scanStatus); } } From 55c2563e2116917d4ff009372f212ef29859c264 Mon Sep 17 00:00:00 2001 From: "nodyang@aliyun.com" Date: Sat, 14 Sep 2024 13:20:29 +0800 Subject: [PATCH 7/9] Data --- SlnMesnac.TouchSocket/ScanStatusSocket.cs | 5 +++++ SlnMesnac.TouchSocket/TcpServer.cs | 26 +++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/SlnMesnac.TouchSocket/ScanStatusSocket.cs b/SlnMesnac.TouchSocket/ScanStatusSocket.cs index ce8c42d..4f49e1f 100644 --- a/SlnMesnac.TouchSocket/ScanStatusSocket.cs +++ b/SlnMesnac.TouchSocket/ScanStatusSocket.cs @@ -19,4 +19,9 @@ public class ScanStatusSocket public int is_alarm { get; set; } public List device_status { get; set; } + + + public List status_txt { get; set; } + + } \ No newline at end of file diff --git a/SlnMesnac.TouchSocket/TcpServer.cs b/SlnMesnac.TouchSocket/TcpServer.cs index 2ce92d5..89e6bfc 100644 --- a/SlnMesnac.TouchSocket/TcpServer.cs +++ b/SlnMesnac.TouchSocket/TcpServer.cs @@ -1,10 +1,12 @@ using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; +using System.Linq; using System.Text; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SlnMesnac.Model.domain; +using SlnMesnac.Repository.service; using SlnMesnac.Repository.service.ScanLog; using TouchSocket.Core; using TouchSocket.Sockets; @@ -42,6 +44,8 @@ namespace SlnMesnac.TouchSocket private readonly TcpService _service; private readonly IScanLogService _scanService; + + private readonly IBaseCodeService _baseCodeService; // /// // /// 接收客户端指令委托 // /// @@ -57,12 +61,12 @@ namespace SlnMesnac.TouchSocket public Action ScanStatusSocketAction; - public TcpServer(ILogger logger,TcpService tcpService, IScanLogService scan) + public TcpServer(ILogger logger,TcpService tcpService, IScanLogService scan, IBaseCodeService baseCodeService) { _logger = logger; _service = tcpService; _scanService = scan; - + _baseCodeService = baseCodeService; } public void Init(int serverPort) @@ -102,7 +106,7 @@ namespace SlnMesnac.TouchSocket if (dataType == 1) { - ScanLogSocket scanStatus= JsonConvert.DeserializeObject(mes); + ScanLogSocket scanStatus= mes.FromJsonString(); ScanLogSocketAction?.Invoke(scanStatus); _scanService.Insert(new ScanLogModel() { @@ -122,8 +126,22 @@ namespace SlnMesnac.TouchSocket { if (dataType == 2) { - ScanStatusSocket scanStatus= JsonConvert.DeserializeObject(mes); + ScanStatusSocket scanStatus = mes.FromJsonString(); ScanStatusSocketAction?.Invoke(scanStatus); + if (scanStatus.device_status != null && scanStatus.device_status.Count > 0) + { + List ls = new List(); + var baseCodes = _baseCodeService.Query(); + foreach (var baseCode in scanStatus.device_status) + { + var enBaseCode = baseCodes.FirstOrDefault(x=>x.Code==baseCode); + if (enBaseCode != null) + { + ls.Add(enBaseCode.State); + } + } + scanStatus.status_txt = ls; + } } } From 8c133187b60c9b384f06c8d2a0c5b2063b8fd9c4 Mon Sep 17 00:00:00 2001 From: "nodyang@aliyun.com" Date: Sat, 14 Sep 2024 14:09:28 +0800 Subject: [PATCH 8/9] QuListCache --- .../SlnMesnac.Repository.csproj | 1 + .../service/baseCode/BaseCodeServiceImpl.cs | 27 ++++++++++++--- .../service/baseCode/IBaseCodeService.cs | 5 +-- SlnMesnac.TouchSocket/TcpServer.cs | 34 ++++++++++--------- SlnMesnac.WPF/Startup.cs | 2 +- 5 files changed, 46 insertions(+), 23 deletions(-) diff --git a/SlnMesnac.Repository/SlnMesnac.Repository.csproj b/SlnMesnac.Repository/SlnMesnac.Repository.csproj index b733819..c432d79 100644 --- a/SlnMesnac.Repository/SlnMesnac.Repository.csproj +++ b/SlnMesnac.Repository/SlnMesnac.Repository.csproj @@ -6,6 +6,7 @@ + diff --git a/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs b/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs index b90d0a6..6dde356 100644 --- a/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs +++ b/SlnMesnac.Repository/service/baseCode/BaseCodeServiceImpl.cs @@ -1,4 +1,7 @@ -using System.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.Caching.Memory; using SlnMesnac.Model.domain; using SlnMesnac.Repository.service.@base; @@ -6,9 +9,11 @@ namespace SlnMesnac.Repository.service { public class BaseCodeServiceImpl:BaseServiceImpl,IBaseCodeService { - public BaseCodeServiceImpl(Repository rep) : base(rep) + private readonly IMemoryCache _memoryCache; + + public BaseCodeServiceImpl(Repository rep, IMemoryCache memoryCache) : base(rep) { - + _memoryCache = memoryCache; } public void CreateBaseCode() @@ -16,6 +21,20 @@ namespace SlnMesnac.Repository.service _rep.Context.CodeFirst.InitTables(typeof(BaseCode)); } + + public List QuListCache() + { + string key = "QuListCache"; + if (_memoryCache.TryGetValue>(key, out var list)) + { + return list; + } + var entity = Query(); + _memoryCache.Set(key, entity, TimeSpan.FromMinutes(5)); + + return entity; + } + /// /// 根据Code去查询单个数据 /// @@ -23,7 +42,7 @@ namespace SlnMesnac.Repository.service /// public BaseCode QueryCode(string code) { - return this.Query(x => x.Code == code).First(); + return Query(x => x.Code == code).First(); } } } \ No newline at end of file diff --git a/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs b/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs index 5efca06..32ee284 100644 --- a/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs +++ b/SlnMesnac.Repository/service/baseCode/IBaseCodeService.cs @@ -1,4 +1,5 @@ -using SlnMesnac.Model.domain; +using System.Collections.Generic; +using SlnMesnac.Model.domain; using SlnMesnac.Repository.service.@base; namespace SlnMesnac.Repository.service @@ -6,7 +7,7 @@ namespace SlnMesnac.Repository.service public interface IBaseCodeService:IBaseService { void CreateBaseCode(); - + List QuListCache(); BaseCode QueryCode(string code); } } \ No newline at end of file diff --git a/SlnMesnac.TouchSocket/TcpServer.cs b/SlnMesnac.TouchSocket/TcpServer.cs index 89e6bfc..7615732 100644 --- a/SlnMesnac.TouchSocket/TcpServer.cs +++ b/SlnMesnac.TouchSocket/TcpServer.cs @@ -3,14 +3,13 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SlnMesnac.Model.domain; using SlnMesnac.Repository.service; using SlnMesnac.Repository.service.ScanLog; using TouchSocket.Core; using TouchSocket.Sockets; -using JsonSerializer = System.Text.Json.JsonSerializer; + #region << 版 本 注 释 >> /*-------------------------------------------------------------------- @@ -57,8 +56,8 @@ namespace SlnMesnac.TouchSocket - public Action ScanLogSocketAction; - public Action ScanStatusSocketAction; + public Action? ScanLogSocketAction; + public Action? ScanStatusSocketAction; public TcpServer(ILogger logger,TcpService tcpService, IScanLogService scan, IBaseCodeService baseCodeService) @@ -74,22 +73,25 @@ namespace SlnMesnac.TouchSocket try { _service.Connecting = (client, e) => { - _logger.LogInformation($"客户端{client.IP}正在接入服务"); + _logger.LogInformation("客户端{ClientIp}正在接入服务", client.IP); return EasyTask.CompletedTask; }; _service.Connected = (client, e) => { - _logger.LogInformation($"客户端{client.IP}接入服务成功"); + _logger.LogInformation("客户端{ClientIp}接入服务成功", client.IP); // RefreshClientInfoEvent?.Invoke(_service); return EasyTask.CompletedTask; }; _service.Disconnected = (client, e) => { - _logger.LogInformation($"客户端{client.IP}断开连接"); + _logger.LogInformation("客户端{ClientIp}断开连接", client.IP); // RefreshClientInfoEvent?.Invoke(_service); return EasyTask.CompletedTask; }; _service.Received = (client, e) => { - //从客户端收到信息 + + try + { + var mes = Encoding.UTF8.GetString(e.ByteBlock.Buffer, 0, e.ByteBlock.Len);//注意:数据长度是byteBlock.Len _logger.LogInformation("收到数据:{Data}",mes); // byte[] receivedBuffer = new byte[e.ByteBlock.Len]; @@ -116,8 +118,7 @@ namespace SlnMesnac.TouchSocket Rfid = scanStatus.rfid, Ocr = scanStatus.ocr, Url = scanStatus.url - - + }); @@ -128,10 +129,10 @@ namespace SlnMesnac.TouchSocket { ScanStatusSocket scanStatus = mes.FromJsonString(); ScanStatusSocketAction?.Invoke(scanStatus); - if (scanStatus.device_status != null && scanStatus.device_status.Count > 0) + if (scanStatus.is_alarm == 1 && scanStatus.device_status != null && scanStatus.device_status.Count > 0) { List ls = new List(); - var baseCodes = _baseCodeService.Query(); + var baseCodes = _baseCodeService.QuListCache(); foreach (var baseCode in scanStatus.device_status) { var enBaseCode = baseCodes.FirstOrDefault(x=>x.Code==baseCode); @@ -144,11 +145,12 @@ namespace SlnMesnac.TouchSocket } } } - - // DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(timestamp); - // DateTime dateTime = dateTimeOffset.UtcDateTime; - client.SendAsync(new Back().ToJsonString()); + } + catch (Exception exception) + { + _logger.LogError(exception,exception.Message); + } return EasyTask.CompletedTask; }; diff --git a/SlnMesnac.WPF/Startup.cs b/SlnMesnac.WPF/Startup.cs index 502d594..f097aa8 100644 --- a/SlnMesnac.WPF/Startup.cs +++ b/SlnMesnac.WPF/Startup.cs @@ -26,7 +26,7 @@ namespace SlnMesnac.WPF public void ConfigureServices(IServiceCollection services) { services.AddControllers(); - + services.AddMemoryCache(); //注册AppConfig services.AddSingleton(provider => { From 990ee083e659c54312431da53a233952b4abe211 Mon Sep 17 00:00:00 2001 From: "nodyang@aliyun.com" Date: Wed, 18 Sep 2024 09:59:10 +0800 Subject: [PATCH 9/9] =?UTF-8?q?TouchSocket=20=E6=95=B0=E6=8D=AE=E4=BF=9D?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.idea.SlnMesnac/.idea/.name | 1 + SlnMesnac.TouchSocket/ApiResult.cs | 1 + SlnMesnac.TouchSocket/ApiServer.cs | 88 +++++++++++++++++++ SlnMesnac.TouchSocket/TouchSocketSetup.cs | 4 +- SlnMesnac.TouchSocket/WebApiServerApp.cs | 79 +++++++++++++++++ .../ViewModel/MainWindowViewModel.cs | 4 +- 6 files changed, 174 insertions(+), 3 deletions(-) create mode 100644 .idea/.idea.SlnMesnac/.idea/.name create mode 100644 SlnMesnac.TouchSocket/ApiResult.cs create mode 100644 SlnMesnac.TouchSocket/ApiServer.cs create mode 100644 SlnMesnac.TouchSocket/WebApiServerApp.cs diff --git a/.idea/.idea.SlnMesnac/.idea/.name b/.idea/.idea.SlnMesnac/.idea/.name new file mode 100644 index 0000000..bdf328a --- /dev/null +++ b/.idea/.idea.SlnMesnac/.idea/.name @@ -0,0 +1 @@ +SlnMesnac \ No newline at end of file diff --git a/SlnMesnac.TouchSocket/ApiResult.cs b/SlnMesnac.TouchSocket/ApiResult.cs new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/SlnMesnac.TouchSocket/ApiResult.cs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/SlnMesnac.TouchSocket/ApiServer.cs b/SlnMesnac.TouchSocket/ApiServer.cs new file mode 100644 index 0000000..6d0ab5b --- /dev/null +++ b/SlnMesnac.TouchSocket/ApiServer.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using SlnMesnac.Model.domain; +using SlnMesnac.Repository.service; +using SlnMesnac.Repository.service.ScanLog; +using TouchSocket.Core; +using TouchSocket.Rpc; +using TouchSocket.WebApi; + +namespace SlnMesnac.TouchSocket +{ + public class ApiServer : RpcServer + { + private readonly IScanLogService _scanService; + + private readonly IBaseCodeService _baseCodeService; + + public Action? ScanLogSocketAction; + public Action? ScanStatusSocketAction; + + + public ApiServer(IScanLogService scanService, IBaseCodeService baseCodeService) + { + _scanService = scanService; + _baseCodeService = baseCodeService; + } + + /// + /// 扫描的状态回传 + /// + /// + /// + /// + [EnableCors("cors")] + [WebApi(HttpMethodType.POST)] + public Back ScanStatus(ScanStatusSocket scanStatus) + { + + if (scanStatus.is_alarm == 1 && scanStatus.device_status != null && scanStatus.device_status.Count > 0) + { + List ls = new List(); + var baseCodes = _baseCodeService.QuListCache(); + foreach (var baseCode in scanStatus.device_status) + { + var enBaseCode = baseCodes.FirstOrDefault(x=>x.Code==baseCode); + if (enBaseCode != null) + { + ls.Add(enBaseCode.State); + } + } + scanStatus.status_txt = ls; + } + + ScanStatusSocketAction?.Invoke(scanStatus); + + + + return new Back(); + } + + + /// + /// 入库开始 + /// + /// + /// + /// + [EnableCors("cors")] + [WebApi(HttpMethodType.POST)] + public Back ScanBack(ScanLogSocket scanStatus) + { + ScanLogSocketAction?.Invoke(scanStatus); + _scanService.Insert(new ScanLogModel() + { + CreateTime = scanStatus.CreateTime, + DataType = scanStatus.data_type, + Code = scanStatus.code, + Rfid = scanStatus.rfid, + Ocr = scanStatus.ocr, + Url = scanStatus.url + + }); + return new Back(); + } + } +} diff --git a/SlnMesnac.TouchSocket/TouchSocketSetup.cs b/SlnMesnac.TouchSocket/TouchSocketSetup.cs index de34f28..b969241 100644 --- a/SlnMesnac.TouchSocket/TouchSocketSetup.cs +++ b/SlnMesnac.TouchSocket/TouchSocketSetup.cs @@ -37,8 +37,8 @@ namespace SlnMesnac.TouchSocket public static IApplicationBuilder UseTouchSocketExtensions(this IApplicationBuilder app) { - var _server = app.ApplicationServices.GetService(); - _server.Init(20108); + var _server = app.ApplicationServices.GetService(); + _server.Init(); return app; } diff --git a/SlnMesnac.TouchSocket/WebApiServerApp.cs b/SlnMesnac.TouchSocket/WebApiServerApp.cs new file mode 100644 index 0000000..6c35703 --- /dev/null +++ b/SlnMesnac.TouchSocket/WebApiServerApp.cs @@ -0,0 +1,79 @@ +using Microsoft.AspNetCore.Hosting.Server; + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +using TouchSocket.Core; + +using TouchSocket.Http; +using TouchSocket.Rpc; +using TouchSocket.Sockets; +using TouchSocket.WebApi.Swagger; + +namespace SlnMesnac.TouchSocket +{ + public class WebApiServerApp + { + private ApiServer apiServer; + + public WebApiServerApp(ApiServer apiServer) + { + this.apiServer = apiServer; + } + + public void Init() + { + try + { + var service = new HttpService(); + service.Setup(new TouchSocketConfig() + .SetListenIPHosts(7789) + .ConfigureContainer(a => + { + a.AddRpcStore(store => + { + + store.RegisterServer(apiServer);//注册服务 + }); + a.AddCors(corsOption => + { + corsOption.Add("cors", corsBuilder => + { + corsBuilder.AllowAnyMethod() + .AllowAnyOrigin(); + }); + }); + a.AddLogger(logger => + { + logger.AddConsoleLogger(); + logger.AddFileLogger(); + }); + }) + .ConfigurePlugins(a => + { + a.UseCheckClear(); + a.UseWebApi() + .ConfigureConverter(converter => + { + converter.AddJsonSerializerFormatter(new Newtonsoft.Json.JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.None }); + + }); + a.UseSwagger();//使用Swagger页面 + //.UseLaunchBrowser(); + a.UseDefaultHttpServicePlugin(); + })); + service.Start(); + Console.WriteLine("以下连接用于测试webApi"); + Console.WriteLine($"使用:http://127.0.0.1:7789/swagger/index.html"); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + //Console.ReadLine(); + } + } + +} diff --git a/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs b/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs index 566e0fd..70edd2f 100644 --- a/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs +++ b/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs @@ -75,7 +75,9 @@ namespace SlnMesnac.WPF.ViewModel public MainWindowViewModel() { - _logger = App.ServiceProvider.GetService>(); + var sp = App.ServiceProvider; + + _logger = App.ServiceProvider.GetService>(); ControlOnClickCommand = new RelayCommand(obj => ControlOnClick(obj)); FormControlCommand = new RelayCommand(x => FormControl(x));