Browse Source

优化逻辑,新增主线分流记录

林豪 左 9 tháng trước cách đây
mục cha
commit
bffec16ca7

+ 95 - 0
YWGC/FJK/WCS.WorkEngineering/Extensions/TaskExtension.cs

@@ -139,6 +139,51 @@ namespace WCS.WorkEngineering.Extensions
         public static void Updateable(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
         {
         }
+        /// <summary>
+        /// 添加异常信息
+        /// </summary>
+        /// <param name="db">db</param>
+        /// <param name="error"></param>
+        /// <returns></returns>
+        public static void AddBaseErrorInfo(this BaseErrorInfo error,SqlSugarScopeProvider db)
+        {
+            var errorinfoWcs = db.Queryable<BaseErrorInfo>().With(SqlWith.NoLock)
+                .Where(v => v.BusName == error.BusName && v.Message == error.Message&& v.BarCode == error.BarCode).First();
+            if (errorinfoWcs != null && (error.AddTime-errorinfoWcs.AddTime).TotalMinutes<1)
+            {
+                errorinfoWcs.Count += 1;
+                db.Updateable(errorinfoWcs).ExecuteCommand();
+            }
+            else
+            {
+                db.Insertable(error).ExecuteCommand();
+            }
+        }
+
+        /// <summary>
+        /// 添加异常信息
+        /// </summary>
+        /// <param name="db">db</param>
+        /// <param name="error"></param>
+        /// <returns></returns>
+        public static void AddBaseErrorInfo(this BaseErrorInfo error)
+        {
+            SqlSugarHelper.Do(_db =>
+            {
+                var db = _db.Default;
+                var errorinfoWcs = db.Queryable<BaseErrorInfo>().With(SqlWith.NoLock)
+                    .Where(v => v.BusName == error.BusName && v.Message == error.Message&& v.BarCode == error.BarCode).First();
+                if (errorinfoWcs != null && (error.AddTime-errorinfoWcs.AddTime).TotalMinutes<1)
+                {
+                    errorinfoWcs.Count += 1;
+                    db.Updateable(errorinfoWcs).ExecuteCommand();
+                }
+                else
+                {
+                    db.Insertable(error).ExecuteCommand();
+                }
+            });
+        }
 
         ///// <summary>
         /////  获取出库任务
@@ -640,4 +685,54 @@ namespace WCS.WorkEngineering.Extensions
         [SugarColumn(IsNullable = true, ColumnDescription = "是否在桁架进行码垛")]
         public bool IsTruss { get; set; }
     }
+
+    /// <summary>
+    ///  异常信息
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("Base_ErrorInfo")]
+    public class BaseErrorInfo
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        public int ID { get; set; }
+
+        /// <summary>
+        /// 业务名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false)]
+        public string BusName { get; set; }
+
+        /// <summary>
+        /// 业务名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string BarCode { get; set; }
+
+        /// <summary>
+        ///  异常描述信息
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 250, IsNullable = true)]
+        public string Message { get; set; }
+
+        /// <summary>
+        /// 次数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
+        public int Count { get; set; }
+
+        /// <summary>
+        ///  memo
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 250, IsNullable = true)]
+        public string Memo { get; set; }
+
+        /// <summary>
+        /// AddTime
+        /// </summary>
+        [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
+        public DateTime AddTime { get; set; } = DateTime.Now;
+    }
 }

+ 22 - 1
YWGC/FJK/WCS.WorkEngineering/Systems/分拣主线/满轮主线预写入目标地址.cs

@@ -60,6 +60,16 @@ namespace WCS.WorkEngineering.Systems
                         if (task == null)
                         {
                             World.Log($"{bcrCode}:找不到匹配的任务", LogLevelEnum.High);
+                            var errorInfo = new BaseErrorInfo()
+                            {
+                                BusName = "主线分流",
+                                BarCode = bcrCode,
+                                Message = "找不到匹配的任务",
+                                Count = 1,
+                                AddTime = DateTime.Now,
+                                Memo = obj.Entity.Code
+                            };
+                            errorInfo.AddBaseErrorInfo(db);
                             return;
                         }
                         var config1 = db.Queryable<fjSysConfig>().NoLock().First(x => x.Code == $"{task.WarehouseCode}-Flow");
@@ -79,7 +89,18 @@ namespace WCS.WorkEngineering.Systems
                     var path = DevicePath.GetPath(obj.Entity.Code, srmCode);
                     if (path == null || path is { Points.Count: < 2 })
                     {
-                        World.Log($"{bcrCode}:路径错误,当前位置{obj.Entity.Code},目标位置:{srmCode}", LogLevelEnum.High);
+                        var msg = $"{bcrCode}:路径错误,当前位置{obj.Entity.Code},目标位置:{srmCode}";
+                        World.Log(msg, LogLevelEnum.High);
+                        var errorInfo = new BaseErrorInfo()
+                        {
+                            BusName = "主线分流",
+                            BarCode = bcrCode,
+                            Message = msg,
+                            Count = 1,
+                            AddTime = DateTime.Now,
+                            Memo = obj.Entity.Code
+                        };
+                        errorInfo.AddBaseErrorInfo();
                         continue;
                     }
 

+ 2 - 2
YWGC/FJK/WCS.WorkEngineering/Systems/码垛区域生成空托盘任务.cs

@@ -110,7 +110,7 @@ namespace WCS.WorkEngineering.Systems
                     var isEnd = false;
                     foreach (var info in taskInfo)
                     {
-                        if (isEnd) return;
+                        if (isEnd) continue;
                         try
                         {
                             //通过仓库号获取对应的拆盘机位置
@@ -159,7 +159,7 @@ namespace WCS.WorkEngineering.Systems
                             if (dev.Data.TaskNumber != 0 || dev.Data.GoodsEnd != 0)
                             {
                                 World.Log($"拆盘机残留任务信息:{dev.Entity.Code}有残留任务信息 {dev.Data.TaskNumber} - {dev.Data.GoodsEnd} ,请确认处理!");
-                                return;
+                                continue;
                             }
                             info.AddrTo = "SRM";
                             info.Height = 1;

+ 4 - 0
YWGC/FJK/WCS.WorkEngineering/WCS.WorkEngineering.csproj

@@ -40,4 +40,8 @@
     </Reference>
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Model\" />
+  </ItemGroup>
+
 </Project>

+ 4 - 4
YWGC/FJK/WCS.WorkEngineering/WebApi/Controllers/WcsController.cs

@@ -136,7 +136,7 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                 } 
 
                                 //找到对应的AGV任务
-                                var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.ID == task.AgvTaskID && v.AgvStatus < AGVTaskStatus.MissionCompleted).SplitTable(v => v.Take(2)).First();
+                                var agv = db.Default.Queryable<WCS_AgvTaskInfo>().RowLock().Where(v => v.ID == task.AgvTaskID && v.AgvStatus < AGVTaskStatus.MissionCompleted).SplitTable(v => v.Take(2)).First();
                                 if (agv != null)
                                 {
                                     if (!agv.AgvID.IsNullOrEmpty())
@@ -275,7 +275,7 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                         //if (cancelRes == null) continue;
 
                                         //找到对应的AGV任务
-                                        var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.ID == task.AgvTaskID && v.AgvStatus < AGVTaskStatus.MissionCompleted).SplitTable(v => v.Take(2)).First();
+                                        var agv = db.Default.Queryable<WCS_AgvTaskInfo>().RowLock().Where(v => v.ID == task.AgvTaskID && v.AgvStatus < AGVTaskStatus.MissionCompleted).SplitTable(v => v.Take(2)).First();
                                         if (agv != null)
                                         {
                                             //if (!agv.AgvID.IsNullOrEmpty())
@@ -349,7 +349,7 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                         //if (cancelRes == null) continue;
 
                                         //找到对应的AGV任务
-                                        var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.ID == task.AgvTaskID && v.AgvStatus < AGVTaskStatus.MissionCompleted).SplitTable(v => v.Take(2)).First();
+                                        var agv = db.Default.Queryable<WCS_AgvTaskInfo>().RowLock().Where(v => v.ID == task.AgvTaskID && v.AgvStatus < AGVTaskStatus.MissionCompleted).SplitTable(v => v.Take(2)).First();
                                         if (agv != null)
                                         {
                                             //if (!agv.AgvID.IsNullOrEmpty())
@@ -456,7 +456,7 @@ namespace WCS.WorkEngineering.WebApi.Controllers
                                 }
 
                                 //找到对应的AGV任务
-                                var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.ID == task.AgvTaskID).SplitTable(v => v.Take(2)).First();
+                                var agv = db.Default.Queryable<WCS_AgvTaskInfo>().RowLock().Where(v => v.ID == task.AgvTaskID).SplitTable(v => v.Take(2)).First();
                                 if (agv != null)
                                 {
                                     agv.Status = AGVTaskStatus.NewBuild;