using RestSharp; using ServiceCenter.Redis; using ServiceCenter.SqlSugars; using ServiceCenter.WebApi; using SqlSugar; using System.ComponentModel; using System.Diagnostics; using System.Text; using WCS.Core; using WCS.Entity.Protocol.BCR; using WCS.Entity.Protocol.DataStructure; using WCS.Entity.Protocol.RGV; using WCS.Entity.Protocol.Robot; using WCS.Entity.Protocol.SRM; using WCS.Entity.Protocol.Station; using WCS.Entity.Protocol.Truss; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.Worlds; namespace WCS.WorkEngineering.Systems { /// /// 数据处理 /// [BelongTo(typeof(MainWorld))] [Description("数据处理")] public class MainSysyem : SystemBase { public override void Update(List list) { try { var sw = new Stopwatch(); sw.Start(); var number = new List(); number.AddRange(new[] { 1, 2, 3, 4, 5 }); var sql1 = ""; Parallel.ForEach(number, i => { var db = new SqlSugarHelper().PLC; var pack = RedisHub.Monitor.LPop("DataCollectionpacks"); ; if (pack == null) return; Parallel.ForEach(pack.GetType().GetProperties().OrderBy(x => x.Name), ps => { var sw10 = new Stopwatch(); sw10.Start(); var typeName = ""; try { if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.BCR80.Any()) { var value = pack.BCR80.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_BCR80).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.BCR81.Any()) { var value = pack.BCR81.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_BCR81).Name; } } //else if (ps.PropertyType == typeof(ProtocolData[])) //{ // if (pack.BCR83.Any()) // { // var value = pack.BCR83.Select(x => x.Data).ToList(); // var sql = db.Insertable(value).ToSqlString(); // db.Ado.ExecuteCommand(sql); // typeName = typeof(WCS_BCR83).Name; // } //} else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.RGV520.Any()) { var value = pack.RGV520.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_RGV520).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.RGV521.Any()) { var value = pack.RGV521.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_RGV521).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.RGV523.Any()) { var value = pack.RGV523.Select(x => new QuestDb_RGV523() { Alarm = Convert.ToString(x.Data.Alarm), Code = x.Data.Code, Frame = x.Data.Frame.ToLocalTime() }).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(GetString(sql)); typeName = typeof(WCS_RGV523).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Robot520.Any()) { var value = pack.Robot520.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Robot520).Name.Length.ToString(); } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Robot521.Any()) { var value = pack.Robot521.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Robot521).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Station5.Any()) { var value = pack.Station5.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Station5).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Robot522.Any()) { var value = pack.Robot522.Select(x => new QuestDb_Robot522() { Alarm = Convert.ToString(x.Data.Alarm), Code = x.Data.Code, Frame = x.Data.Frame.ToLocalTime() }).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Robot522).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Robot530.Any()) { var value = pack.Robot530.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Robot530).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Robot531.Any()) { var value = pack.Robot531.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Robot531).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.SRM520.Any()) { var value = pack.SRM520.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_SRM520).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.SRM521.Any()) { var value = pack.SRM521.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_SRM521).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.SRM523.Any()) { var value = pack.SRM523.Select(x => new QuestDb_SRM523() { Alarm = $"{Convert.ToString(x.Data.Alarm1)},{Convert.ToString(x.Data.Alarm1)}", Code = x.Data.Code, Frame = x.Data.Frame.ToLocalTime() }).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(GetString(sql)); typeName = typeof(WCS_SRM523).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Station520.Any()) { var value = pack.Station520.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Station520).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Station521.Any()) { var value = pack.Station521.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Station521).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Station523.Any()) { var value = pack.Station523.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Station523).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Station524.Any()) { var value = pack.Station524.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Station524).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Station525.Any()) { var value = pack.Station525.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Station525).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Station90.Any()) { var value = pack.Station90.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Station90).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Station91.Any()) { var value = pack.Station91.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Station91).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Truss520.Any()) { var value = pack.Truss520.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Truss520).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Truss521.Any()) { var value = pack.Truss521.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Truss521).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Truss523.Any()) { var value = pack.Truss523.Select(x => new QuestDb_Truss523() { Alarm = Convert.ToString(x.Data.Alarm), Code = x.Data.Code, Frame = x.Data.Frame.ToLocalTime() }).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Truss523).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Truss530.Any()) { var value = pack.Truss530.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Truss530).Name; } } else if (ps.PropertyType == typeof(ProtocolData[])) { if (pack.Truss531.Any()) { var value = pack.Truss531.Select(x => x.Data).ToList(); var sql = db.Insertable(value).ToSqlString(); db.Ado.ExecuteCommand(sql); typeName = typeof(WCS_Truss531).Name; } } } catch (Exception e) { World.Log($"错误内容:{e.Message}"); } finally { sw10.Stop(); World.Log($"执行耗时:{typeName}:{sw10.ElapsedMilliseconds}"); } }); }); sw.Stop(); World.Log($"数据处理耗时:{sw.ElapsedMilliseconds}"); } catch (Exception e) { World.Log($"错误内容:{e.Message}"); } } private Type GetProtocolType(Type source) { var t = source.GetInterfaces().FirstOrDefault(v => v.GetInterfaces().Any(d => d.Name == "IProtocol")); var t1 = source.GetInterfaces().FirstOrDefault(v => v.GetInterfaces().Any(d => d.Name == "IProtocol")); return t; } private object AppendLock = new object(); public StringBuilder Append(StringBuilder sql, string value) { lock (AppendLock) { return sql.Append(value); } } public string GetString(string value) { return value.Replace(",N'", ",'") .Replace("\0", "") .Replace("(N'", "('") + "\r"; } public override List GetObjects() { return new List(); } public bool QuestDbInsert(string query) { var client = new RestClient($"http://10.30.37.2:9000"); var request = new RestRequest("exec") .AddParameter("limit", "0,1000") .AddParameter("explain", "true") .AddParameter("count", "true") .AddParameter("src", "con") .AddParameter("query", query) .AddParameter("timings", "true"); var response = client.Get(request); Console.WriteLine(response.ddl); var res = APICaller.CallApi1("http://10.30.37.2:9000" + "/exec", $"?limit=0,1000&explain=true&count=true&src=con&query={query}&timings=true", "GET"); return true; } } /// /// QuestDb接口返回结果 /// public class QuestDbResponse { /// /// 执行INSERT语句成功后会返回OK /// public string ddl { get; set; } = "fail"; } public class QuestDbRequest { /// /// 分页,limit=0,20相当于返回前20行 /// public string limit { get; set; } /// /// 异常时,返回详细的信息 /// public string explain { get; set; } /// /// 返回执行SQL获取数据的数量 /// public string count { get; set; } /// /// 执行INSERT语句成功后会返回OK /// public string src { get; set; } /// /// 需要执行的SQL语句 /// public string query { get; set; } /// /// 详细的执行耗时信息 /// public string timings { get; set; } } }