林豪 左 1 ano atrás
pai
commit
c01f3d1aa0

+ 1 - 0
WCS.Service/WCS.Service.csproj

@@ -5,6 +5,7 @@
     <Nullable>enable</Nullable>
     <ImplicitUsings>enable</ImplicitUsings>
     <UserSecretsId>dotnet-WCS.Service-ee485c84-3250-46d0-8109-1d37d3b27230</UserSecretsId>
+    <AssemblyName>分拣数据分析</AssemblyName>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

+ 99 - 39
WCS.WorkEngineering/Systems/DataCollectionSysyem.cs

@@ -95,10 +95,10 @@ namespace WCS.WorkEngineering.Systems
             ExSrmRunInfo(db, plcEx);
             ExRgvRunInfo(db, plcEx);
             ExTrussRunInfo(db, plcEx);
-            ExRobotAlarmInfo(db, plcEx);
-            ExSrmAlarmInfo(db, plcEx);
-            ExRgvAlarmInfo(db, plcEx);
-            ExTrussAlarmInfo(db, plcEx);
+            //ExRobotAlarmInfo(db, plcEx);
+            //ExSrmAlarmInfo(db, plcEx);
+            //ExRgvAlarmInfo(db, plcEx);
+            //ExTrussAlarmInfo(db, plcEx);
             ExRobotTaskSumRunInfo(db, plcEx);
             ExTrussTaskSumRunInfo(db, plcEx);
         }
@@ -114,22 +114,32 @@ namespace WCS.WorkEngineering.Systems
             var startTime = DateTime.Now;
             var endTime = DateTime.Now;
             IEnumerable<IGrouping<string, WCS_Robot521>> robot521 = new List<IGrouping<string, WCS_Robot521>>();
-            var type = DevType.Robot.ToString();
+            var type = DevType.SRM.ToString();
             //查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
             {
                 //已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
                 var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
-                startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
+                startTime = runInfo.Frame.AddHours(+1);//后一个小时
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);//
             }
             else
             {
                 if (!db.Queryable<WCS_Robot521>().Any()) return;
-                startTime = db.Queryable<WCS_Robot521>().OrderBy(x => x.Frame).First().Frame.Date;
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);
+                startTime = db.Queryable<WCS_Robot521>().OrderBy(x => x.Frame).First().Frame;
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);
             }
-            if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
+            //取上一小时的第一秒
+            var now = DateTime.Now;
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 0, 0);
+            var nowEndTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, endTime.Hour, 0, 0);
+            if (endTime > now) return; //当前时间之前
+            if (nowEndTime == now) return; //是当前这一个小时
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 10, 0);
+            if (DateTime.Now < now) return;// 每个小时的前十分钟不进行数据分析处理,仅在每小时的10-59之内进行处理
+
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
 
             robot521 = db.Queryable<WCS_Robot521>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
@@ -244,16 +254,26 @@ namespace WCS.WorkEngineering.Systems
             {
                 //已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
                 var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
-                startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
+                startTime = runInfo.Frame.AddHours(+1);//后一个小时
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);//
             }
             else
             {
                 if (!db.Queryable<WCS_SRM521>().Any()) return;
-                startTime = db.Queryable<WCS_SRM521>().OrderBy(x => x.Frame).First().Frame.Date;
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);
+                startTime = db.Queryable<WCS_SRM521>().OrderBy(x => x.Frame).First().Frame;
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);
             }
-            if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
+            //取上一小时的第一秒
+            var now = DateTime.Now;
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 0, 0);
+            var nowEndTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, endTime.Hour, 0, 0);
+            if (endTime > now) return; //当前时间之前
+            if (nowEndTime == now) return; //是当前这一个小时
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 10, 0);
+            if (DateTime.Now < now) return;// 每个小时的前十分钟不进行数据分析处理,仅在每小时的10-59之内进行处理
+
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
 
             srm521 = db.Queryable<WCS_SRM521>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
@@ -362,22 +382,32 @@ namespace WCS.WorkEngineering.Systems
             var startTime = DateTime.Now;
             var endTime = DateTime.Now;
             IEnumerable<IGrouping<string, WCS_RGV521>> rgv521 = new List<IGrouping<string, WCS_RGV521>>();
-            var type = DevType.RGV.ToString();
+            var type = DevType.SRM.ToString();
             //查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
             {
                 //已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
                 var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
-                startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
+                startTime = runInfo.Frame.AddHours(+1);//后一个小时
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);//
             }
             else
             {
                 if (!db.Queryable<WCS_RGV521>().Any()) return;
-                startTime = db.Queryable<WCS_RGV521>().OrderBy(x => x.Frame).First().Frame.Date;
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);
+                startTime = db.Queryable<WCS_RGV521>().OrderBy(x => x.Frame).First().Frame;
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);
             }
-            if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
+            //取上一小时的第一秒
+            var now = DateTime.Now;
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 0, 0);
+            var nowEndTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, endTime.Hour, 0, 0);
+            if (endTime > now) return; //当前时间之前
+            if (nowEndTime == now) return; //是当前这一个小时
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 10, 0);
+            if (DateTime.Now < now) return;// 每个小时的前十分钟不进行数据分析处理,仅在每小时的10-59之内进行处理
+
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
 
             rgv521 = db.Queryable<WCS_RGV521>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
@@ -486,22 +516,32 @@ namespace WCS.WorkEngineering.Systems
             var startTime = DateTime.Now;
             var endTime = DateTime.Now;
             IEnumerable<IGrouping<string, WCS_Truss521>> truss521 = new List<IGrouping<string, WCS_Truss521>>();
-            var type = DevType.Truss.ToString();
+            var type = DevType.SRM.ToString();
             //查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
             {
                 //已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
                 var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
-                startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
+                startTime = runInfo.Frame.AddHours(+1);//后一个小时
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);//
             }
             else
             {
                 if (!db.Queryable<WCS_Truss521>().Any()) return;
-                startTime = db.Queryable<WCS_Truss521>().OrderBy(x => x.Frame).First().Frame.Date;
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);
+                startTime = db.Queryable<WCS_Truss521>().OrderBy(x => x.Frame).First().Frame;
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);
             }
-            if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
+            //取上一小时的第一秒
+            var now = DateTime.Now;
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 0, 0);
+            var nowEndTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, endTime.Hour, 0, 0);
+            if (endTime > now) return; //当前时间之前
+            if (nowEndTime == now) return; //是当前这一个小时
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 10, 0);
+            if (DateTime.Now < now) return;// 每个小时的前十分钟不进行数据分析处理,仅在每小时的10-59之内进行处理
+
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
 
             truss521 = db.Queryable<WCS_Truss521>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
@@ -1201,22 +1241,32 @@ namespace WCS.WorkEngineering.Systems
             var startTime = DateTime.Now;
             var endTime = DateTime.Now;
             IEnumerable<IGrouping<string, WCS_Robot520>> robot520 = new List<IGrouping<string, WCS_Robot520>>();
-            var type = DevType.RobotTaskSum.ToString();
+            var type = DevType.SRM.ToString();
             //查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
             {
                 //已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
                 var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
-                startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
+                startTime = runInfo.Frame.AddHours(+1);//后一个小时
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);//
             }
             else
             {
                 if (!db.Queryable<WCS_Robot520>().Any()) return;
-                startTime = db.Queryable<WCS_Robot520>().OrderBy(x => x.Frame).First().Frame.Date;
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);
+                startTime = db.Queryable<WCS_Robot520>().OrderBy(x => x.Frame).First().Frame;
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);
             }
-            if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
+            //取上一小时的第一秒
+            var now = DateTime.Now;
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 0, 0);
+            var nowEndTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, endTime.Hour, 0, 0);
+            if (endTime > now) return; //当前时间之前
+            if (nowEndTime == now) return; //是当前这一个小时
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 10, 0);
+            if (DateTime.Now < now) return;// 每个小时的前十分钟不进行数据分析处理,仅在每小时的10-59之内进行处理
+
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
 
             robot520 = db.Queryable<WCS_Robot520>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
@@ -1271,22 +1321,32 @@ namespace WCS.WorkEngineering.Systems
             var startTime = DateTime.Now;
             var endTime = DateTime.Now;
             IEnumerable<IGrouping<string, WCS_Truss520>> truss520 = new List<IGrouping<string, WCS_Truss520>>();
-            var type = DevType.TrussTaskSum.ToString();
+            var type = DevType.SRM.ToString();
             //查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
             {
                 //已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
                 var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
-                startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
+                startTime = runInfo.Frame.AddHours(+1);//后一个小时
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);//
             }
             else
             {
                 if (!db.Queryable<WCS_Truss520>().Any()) return;
-                startTime = db.Queryable<WCS_Truss520>().OrderBy(x => x.Frame).First().Frame.Date;
-                endTime = startTime.AddDays(+1).AddMilliseconds(-1);
+                startTime = db.Queryable<WCS_Truss520>().OrderBy(x => x.Frame).First().Frame;
+                startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, 0, 0); //后一个小时的开始时间
+                endTime = startTime.AddHours(+1).AddMilliseconds(-1);
             }
-            if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
+            //取上一小时的第一秒
+            var now = DateTime.Now;
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 0, 0);
+            var nowEndTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, endTime.Hour, 0, 0);
+            if (endTime > now) return; //当前时间之前
+            if (nowEndTime == now) return; //是当前这一个小时
+            now = new DateTime(now.Year, now.Month, now.Day, now.Hour, 10, 0);
+            if (DateTime.Now < now) return;// 每个小时的前十分钟不进行数据分析处理,仅在每小时的10-59之内进行处理
+
             if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
 
             truss520 = db.Queryable<WCS_Truss520>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();