林豪 左 1 anno fa
parent
commit
c6741ceba4

+ 1 - 1
ServiceCenter/Extensions/SqlExtension.cs

@@ -33,7 +33,7 @@ namespace ServiceCenter.Extensions
         /// <typeparam name="T"></typeparam>
         /// <param name="obj"></param>
         /// <returns></returns>
-        public static ISugarQueryable<T> UpdLock1<T>(this ISugarQueryable<T> obj)
+        public static ISugarQueryable<T> UpdLock<T>(this ISugarQueryable<T> obj)
         {
             return obj.With("WITH(ROWLOCK,UPDLOCK)");
         }

+ 9 - 4
ServiceCenter/Logs/LogHub.cs

@@ -1,12 +1,9 @@
 using Newtonsoft.Json;
 using ServiceCenter.Extensions;
 using ServiceCenter.Redis;
-using ServiceCenter.SqlSugars;
 using System.Collections.Concurrent;
 using System.Diagnostics;
-using System.Text;
 using WCS.Core;
-using WCS.Entity.Protocol.RGV;
 
 namespace ServiceCenter.Logs
 {
@@ -26,6 +23,15 @@ namespace ServiceCenter.Logs
                 //var db = new SqlSugarHelper().PLC;
                 try
                 {
+                    Parallel.ForEach(logs.GroupBy(x => x.Channel.System), item1 =>
+                    {
+                        Parallel.ForEach(item1.GroupBy(x => x.Channel.Item), item2 =>
+                        {
+                            var msgList = item2.Select(x => x.Log.Message).ToList();
+                            RedisHub.Default.Set($"WCSLog:{item1.Key}:{item2.Key}", JsonConvert.SerializeObject(msgList));
+                        });
+                    });
+
                     //每一条数据存入redis
                     foreach (var log in logs)
                     {
@@ -77,7 +83,6 @@ namespace ServiceCenter.Logs
             }
         }
 
-
         /// <summary>
         ///  去除转义字符
         /// </summary>

+ 7 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -49,7 +49,7 @@ namespace WCS.WorkEngineering.Systems
                 {
                     SqlSugarHelper.Do(db =>
                     {
-                        var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item).First() ?? throw new Exception($"未找到对应的WCS任务[{item}]");
+                        var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item).First();
                         switch (task.Type)
                         {
                             case TaskType.SetPlate:
@@ -100,6 +100,12 @@ namespace WCS.WorkEngineering.Systems
                                 {
                                     if (task.Device.Contains("Robot"))
                                     {
+                                        var lastTask = db.Default.Queryable<WCS_TaskInfo>().NoLock().First(x => x.AddrTo == task.AddrTo && x.Status > TaskStatus.WaitingToExecute);
+                                        if (lastTask != null)
+                                        {
+                                            World.Log($"等待任务结束:{task.AddrTo}上一组码垛任务未结束,等待{lastTask.ID}任务完成后开始初始化当前任务{task.ID}");
+                                            return;
+                                        }
                                         var pos = task.AddrFrom.Split("-");
                                         task.Status = Entity.TaskStatus.WaitingToExecute;
                                         task.Line = pos[0].ToShort();

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/SrmSystems.cs

@@ -103,7 +103,7 @@ namespace WCS.WorkEngineering.Systems
                                 {
                                     case OutTypeEnum.自动出库任务 or OutTypeEnum.全自动手动出库任务:
 
-                                        if (task.SrmStation is "1601" or "1605" or "1611" or "1615" or "1631")
+                                        if (task.SrmStation is "1601" or "1605" or "1611" or "1615" or "1631" or "2532" or "2732" or "2932" or "3132" or "3332" or "3532")
                                         {
                                             task.Status = Entity.TaskStatus.Finish;
                                             var dev = new Station(Device.All.FirstOrDefault(v => v.Code == task.SrmStation) ?? throw new KnownException($"未找到{task.SrmStation}信息", LogLevelEnum.High), this.World);

+ 1 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs

@@ -342,7 +342,7 @@ namespace WCS.WorkEngineering.Systems
                 var palletizingRow = palletizingRowList[i];
                 var locs = palletizingRow.Locs.OrderBy(x => x.XYNo.ToInt()).ToArray();
                 var devs = pickUpDevices.FirstOrDefault(x => x.key == palletizingRow.LineCode).Dev.Value.Where(x => x.Data2.Status.HasFlag(StationStatus.PH_Status))
-                    .OrderBy(x => x.Entity.Code).ToArray();
+                    .OrderBy(x => x.Entity.Code.ToShort()).ToArray();
 
                 switch (i)
                 {

+ 10 - 3
业务工程/分拣库/WCS.WorkEngineering/Systems/环形库/机械臂cs.cs

@@ -331,14 +331,21 @@ namespace WCS.WorkEngineering.Systems
                             }).ToList();
                             //两个工位同时码垛,并不会一个执行一次,只有一个托盘任务全部执行完毕,才会继续执行下一个,先生成任务的码垛工位会优先执行
                             var taskInfos = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && (v.Status == Entity.TaskStatus.WaitingToExecute || v.Status == TaskStatus.ConveyorExecution))
-                                .ToList()
-                                                                                                    .Where(v => allOutCode.Any(x => v.SrmStation == x.Code && v.PalletType == x.Type)).ToList();
+                                .ToList().Where(v => allOutCode.Any(x => v.SrmStation == x.Code && v.PalletType == x.Type)).ToList();
+
+                            var deliveryTask = db.Default.Queryable<WCS_TaskInfo>().Where(x => x.Type == TaskType.Delivery && x.Status > 0).ToList().Select(x => x.AddrTo);
+                            taskInfos = taskInfos.Where(x => deliveryTask.Contains(x.SrmStation)).ToList();
+                            if (!taskInfos.Any())
+                            {
+                                World.Log("等待空托盘到位");
+                                return;
+                            }
 
                             if (!taskInfos.Any()) throw new KnownException($"未找到站台{JsonConvert.SerializeObject(allOutCode)}可用的出库任务", LogLevelEnum.Mid);
                             var srmStation = taskInfos.GroupBy(x => x.SrmStation).Where(x => x.Any(s => s.Status == TaskStatus.WaitingToExecute)).Select(x => new
                             {
                                 x.Key,
-                                x.OrderBy(x => x.AddTime).First().AddTime
+                                x.OrderByDescending(t => t.AddTime).First().AddTime
                             }).OrderBy(x => x.AddTime).First().Key;
                             taskInfos = taskInfos.Where(x => x.SrmStation == srmStation).ToList(); //找到一个可以放货的待执行站台
 

+ 6 - 1
业务工程/分拣库/WCS.WorkEngineering/Systems/码垛区域生成空托盘任务.cs

@@ -6,6 +6,7 @@ using WCS.Entity;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.WebApi.Controllers;
+using WCS.WorkEngineering.WebApi.Models.WMS.Response;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
 using TaskStatus = WCS.Entity.TaskStatus;
@@ -119,7 +120,11 @@ namespace WCS.WorkEngineering.Systems
                         if (ringTask == null)
                         {
                             //开始申请码垛任务
-                            WmsApi.ApplyPalletizingStockOut(obj.Entity.Code, obj.Entity.Sources.Single(x => x.HasFlag(DeviceFlags.Robot)).Code);
+                            var resData = WmsApi.ApplyPalletizingStockOut(obj.Entity.Code, obj.Entity.Sources.Single(x => x.HasFlag(DeviceFlags.Robot)).Code);
+                            if (resData.ResCode != ResponseStatusCodeEnum.Sucess)
+                            {
+                                World.Log(resData.ResMsg);
+                            }
                             return;
                         }
                         var task = db.Queryable<WCS_TaskInfo>().First(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code);

+ 2 - 7
业务工程/分拣库/WCS.WorkEngineering/WebApi/Controllers/WmsApi.cs

@@ -431,7 +431,7 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <exception cref="KnownException"></exception>
         public static SRes BingPallet(string palletCode, List<string> taskCodes, string warehouseCode, string loc, bool isFail, string failReason, bool isFinish, bool isItHalf)
         {
-            var res = APICaller.CallApi<SRes>(WmsUrl + "/api/FJ/BingPallet", new FJBingPalletRequest
+            var res = APICaller.CallApi2<SRes>(WmsUrl + "/api/FJ/BingPallet", new FJBingPalletRequest
             {
                 PalletCode = palletCode,
                 TaskCode = taskCodes,
@@ -478,12 +478,7 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <exception cref="KnownException"></exception>
         public static SRes ApplyPalletizingStockOut(string loc, string robotCode)
         {
-            var res = APICaller.CallApi<SRes>(WmsUrl + "/api/FJ/ApplyPalletizingStockOut", new wms.dto.request.fj.RingApplyPalletizingStockOutRequest(loc.GetWareCode(), loc, robotCode));
-
-            if (res.ResCode != ResponseStatusCodeEnum.Sucess)
-            {
-                throw new KnownException(res.ResMsg, LogLevelEnum.High);
-            }
+            var res = APICaller.CallApi2<SRes>(WmsUrl + "/api/FJ/ApplyPalletizingStockOut", new wms.dto.request.fj.RingApplyPalletizingStockOutRequest(loc.GetWareCode(), loc, robotCode));
             return res;
         }