林豪 左 1 سال پیش
والد
کامیت
786a2ab6e9
47فایلهای تغییر یافته به همراه2461 افزوده شده و 4 حذف شده
  1. 119 3
      WCS.WorkEngineering/Systems/DataCollectionSysyem.cs
  2. 572 0
      WCS.WorkEngineering/WebApi/Controllers/WcsController.cs
  3. 28 0
      WCS.WorkEngineering/WebApi/Models/AGV/AgvResponseCode.cs
  4. 10 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/AddWcsMoveTaskRequest.cs
  5. 115 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/AgvCallbackRequest.cs
  6. 18 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/ApplyEmptySpoolRequest.cs
  7. 50 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/CancelTaskRequest.cs
  8. 68 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/ContinueTaskRequest.cs
  9. 70 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/CopperLineAgvTaskStockInToIWmsRequest.cs
  10. 95 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/CopperLineAgvTaskStockOutToIWmsRequest.cs
  11. 200 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/GenAgvSchedulingTaskRequest.cs
  12. 103 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/zhongTianIntoStockRequest.cs
  13. 78 0
      WCS.WorkEngineering/WebApi/Models/AGV/Request/zhongTianOutStockRequest.cs
  14. 29 0
      WCS.WorkEngineering/WebApi/Models/AGV/Response/AddWcsMoveTaskResponse.cs
  15. 35 0
      WCS.WorkEngineering/WebApi/Models/AGV/Response/ApplyEmptySpoolResponse.cs
  16. 23 0
      WCS.WorkEngineering/WebApi/Models/AGV/Response/CancelTaskResponse.cs
  17. 23 0
      WCS.WorkEngineering/WebApi/Models/AGV/Response/ContinueTaskResponse.cs
  18. 25 0
      WCS.WorkEngineering/WebApi/Models/AGV/Response/GenAgvSchedulingTaskResponse.cs
  19. 20 0
      WCS.WorkEngineering/WebApi/Models/AGV/Response/agvCallbackResponse.cs
  20. 28 0
      WCS.WorkEngineering/WebApi/Models/AGV/Response/zhongTianIntoStockResponse.cs
  21. 25 0
      WCS.WorkEngineering/WebApi/Models/AGV/Response/zhongTianOutStockResponse.cs
  22. 46 0
      WCS.WorkEngineering/WebApi/Models/WCS/Request/HandleTaskRequest.cs
  23. 23 0
      WCS.WorkEngineering/WebApi/Models/WCS/Response/HandleTaskResponse.cs
  24. 32 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/ApplyStockInLocRequest.cs
  25. 20 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/ApplyStockOutTaskRequest.cs
  26. 18 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/CancelTaskVerifyRequest.cs
  27. 47 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/CompleteTaskRequest.cs
  28. 15 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/CompleteTaskVerifyRequest.cs
  29. 13 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/EnteMainLineRequest.cs
  30. 3 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/FJBingPalletRequest.cs
  31. 56 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/FJBuildEmptyPalletsStockRequest.cs
  32. 18 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/FJEnteMainLineRequest.cs
  33. 9 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/GetTunnelEmptyConCountRequest.cs
  34. 23 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/GetTunnelPriorityListRequest.cs
  35. 54 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/I_WCS_GetInTaskRequest.cs
  36. 60 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/OneFloorWorkerBuildEmptyPalletsStockRequest.cs
  37. 36 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/PalletizingCreateseErrorTasksRequest.cs
  38. 36 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/RingApplyPalletizingStockOutRequest.cs
  39. 13 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/SrmPickOutCompletedRequest.cs
  40. 23 0
      WCS.WorkEngineering/WebApi/Models/WMS/Request/WcsUploadInfoRequest.cs
  41. 33 0
      WCS.WorkEngineering/WebApi/Models/WMS/Response/ApplyStockInLocResponse.cs
  42. 18 0
      WCS.WorkEngineering/WebApi/Models/WMS/Response/GetTunnelEmptyConResponse.cs
  43. 46 0
      WCS.WorkEngineering/WebApi/Models/WMS/Response/I_WCS_GetInTaskResponse.cs
  44. 73 0
      WCS.WorkEngineering/WebApi/Models/WMS/Response/SRes.cs
  45. 11 0
      WCS.WorkEngineering/WebApi/Models/WMS/Response/WcsContractApiResponse.cs
  46. 0 0
      WCS.WorkEngineering/WebApi/Startup.cs
  47. 1 1
      WCS.WorkEngineering/WorkStart.cs

+ 119 - 3
WCS.WorkEngineering/Systems/DataCollectionSysyem.cs

@@ -18,6 +18,7 @@ using WCS.Entity.Protocol.SRM;
 using WCS.Entity.Protocol.Station;
 using WCS.Entity.Protocol.Truss;
 using WCS.WorkEngineering.Worlds;
+using WCS.Entity;
 
 namespace WCS.WorkEngineering.Systems
 {
@@ -54,7 +55,42 @@ namespace WCS.WorkEngineering.Systems
         {
             //通过数据条数处理
             var db = new SqlSugarHelper().PLC;
-            var plcEx= new SqlSugarHelper().PLCEX;
+            var plcEx = new SqlSugarHelper().PLCEX;
+            var time = DateTime.Now.AddDays(-1).Date;
+
+            //Type parentType = typeof(IProtocol);
+
+            //var childTypes = AppDomain.CurrentDomain.GetAssemblies()
+            //    .First(x => x.FullName.Contains("WCS.Entity.Protocol")).GetTypes().Where(x => x.IsClass)
+            //    .Where(x => x.GetInterfaces().Any(t => t == parentType)).ToList();
+
+            //foreach (Type childType in childTypes)
+            //{
+            //    //获取表名
+            //    var sugarTablea = childType.GetCustomAttributes(typeof(SugarTable), true).Select(x => (SugarTable)x).FirstOrDefault();
+            //    if (sugarTablea != null)
+            //    {
+            //        var table = db.Queryable<dynamic>().AS("information_schema.tables").Where("table_name=@name", new { name = sugarTablea.TableName }).ToList();
+
+            //        if (table.Count > 0)
+            //        {
+            //            var sql = $"ALTER TABLE {sugarTablea.TableName} DROP PARTITION WHERE frame < to_timestamp('{time}', 'yyyy-MM-dd:HH:mm:ss')";
+            //            db.Ado.ExecuteCommand(sql);
+            //        }
+            //    }
+            //}
+
+            //var sysTypes = AppDomain.CurrentDomain.GetAssemblies().Select(v => v.GetTypes()).SelectMany(v => v)
+            //    .Where(v => !v.IsAbstract)
+            //    .Where(v => typeof(SystemBase).IsAssignableFrom(v))
+            //    .Where(v =>
+            //    {
+            //        var attr = v.GetCustomAttribute<BelongToAttribute>();
+            //        if (attr == null) return GetType() == typeof(World);
+            //        if (attr.WorldType == this.GetType()) return true;
+            //        return false;
+            //    }).ToArray();
+
             ExRobotRunInfo(db, plcEx);
             ExSrmRunInfo(db, plcEx);
             ExRgvRunInfo(db, plcEx);
@@ -64,6 +100,7 @@ namespace WCS.WorkEngineering.Systems
             ExRgvAlarmInfo(db, plcEx);
             ExTrussAlarmInfo(db, plcEx);
             ExRobotTaskSumRunInfo(db, plcEx);
+            ExTrussTaskSumRunInfo(db, plcEx);
         }
 
         #region 设备运行信息收集
@@ -347,7 +384,7 @@ namespace WCS.WorkEngineering.Systems
 
             if (!rgv521.Any())
             {
-                db.Insertable(new DevRunInfo()
+                plcEx.Insertable(new DevRunInfo()
                 {
                     Frame = endTime,
                     Code = "当前时段无有效数据",
@@ -471,7 +508,7 @@ namespace WCS.WorkEngineering.Systems
 
             if (!truss521.Any())
             {
-                db.Insertable(new DevRunInfo()
+                plcEx.Insertable(new DevRunInfo()
                 {
                     Frame = endTime,
                     Code = "当前时段无有效数据",
@@ -1225,6 +1262,85 @@ namespace WCS.WorkEngineering.Systems
             });
         }
 
+        /// <summary>
+        /// 机械臂分析单双爪任务占比,需要按照任务类型分类
+        /// </summary>
+        /// <param name="db"></param>
+        public void ExTrussTaskSumRunInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
+        {
+            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();
+            //查看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);//
+            }
+            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);
+            }
+            if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
+            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();
+
+            if (!truss520.Any())
+            {
+                plcEx.Insertable(new DevRunInfo()
+                {
+                    Frame = endTime,
+                    Code = "当前时段无有效数据",
+                    RunMode = "当前时段无有效数据",
+                    RunStatus = "当前时段无有效数据",
+                    StartTime = startTime,
+                    EndTime = endTime,
+                    Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
+                    Type = type
+                }).ExecuteCommand();
+            }
+
+            Parallel.ForEach(truss520, infos =>
+            {
+                var infoList = infos.Where(x => x.Task1_1 != 0 || x.Task1_2 != 0 || x.Task1_3 != 0 || x.Task1_4 != 0 || x.Task1_5 != 0
+                                                || x.Task2_1 != 0 || x.Task2_2 != 0 || x.Task2_3 != 0 || x.Task2_4 != 0 || x.Task2_5 != 0).ToList().DistinctItemBy(x => x.VoucherNo);
+
+                List<DevRunInfo> runInfos = new List<DevRunInfo>();
+                foreach (var info in infoList.OrderBy(x => x.Frame))
+                {
+                    var taskSum = 0;
+                    if (info.Task1_1 != 0) taskSum += 1;
+                    if (info.Task1_2 != 0) taskSum += 1;
+                    if (info.Task1_3 != 0) taskSum += 1;
+                    if (info.Task1_4 != 0) taskSum += 1;
+                    if (info.Task1_5 != 0) taskSum += 1;
+                    if (info.Task2_1 != 0) taskSum += 1;
+                    if (info.Task2_2 != 0) taskSum += 1;
+                    if (info.Task2_3 != 0) taskSum += 1;
+                    if (info.Task2_4 != 0) taskSum += 1;
+                    if (info.Task2_5 != 0) taskSum += 1;
+                    runInfos.Add(new DevRunInfo()
+                    {
+                        Frame = info.Frame,
+                        Code = info.Code,
+                        RunMode = taskSum.ToString(),
+                        RunStatus = $"{info.Task1_1}--{info.Task1_2}--{info.Task1_3}--{info.Task1_4}--{info.Task1_5}--{info.Task2_1}--{info.Task2_2}--{info.Task2_3}--{info.Task2_4}--{info.Task2_5}",
+                        Duration = 0,
+                        Type = type
+                    });
+                }
+
+                var sql = plcEx.Insertable(runInfos).ToSqlString();
+                plcEx.Ado.ExecuteCommand(GetString(sql));
+            });
+        }
+
         #endregion 任务状态分析
 
         public string GetString(string value)

+ 572 - 0
WCS.WorkEngineering/WebApi/Controllers/WcsController.cs

@@ -0,0 +1,572 @@
+using System.ComponentModel;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+using PlcSiemens.Core.Extension;
+using ServiceCenter;
+using ServiceCenter.Extensions;
+using ServiceCenter.Redis;
+using ServiceCenter.SqlSugars;
+using System.Net.NetworkInformation;
+using System.Text;
+using SqlSugar;
+using WCS.Core;
+using WCS.Entity;
+using WCS.Entity.Protocol.DataStructure;
+using WCS.Entity.Protocol.HUB;
+using WCS.Entity.Protocol.Protocol.Robot;
+using WCS.Entity.Protocol.SRM;
+using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Systems;
+using WCS.WorkEngineering.WebApi.Models.WCS.Request;
+using WCS.WorkEngineering.WebApi.Models.WCS.Response;
+using WCS.WorkEngineering.WebApi.Models.WMS.Response;
+using TaskStatus = WCS.Entity.TaskStatus;
+using static Dm.net.buffer.ByteArrayBuffer;
+using System.Security.Claims;
+using WCS.Entity.Protocol.Truss;
+
+// ReSharper disable PossibleLossOfFraction
+
+namespace WCS.WorkEngineering.WebApi.Controllers
+{
+    /// <summary>
+    ///  设备Ip通讯检测结构
+    /// </summary>
+    public class DeviceIpTestResults
+    {
+        public string Ip { get; set; }
+
+        public bool Result { get; set; }
+    }
+
+    /// <summary>
+    /// WCS相关接口控制器
+    /// </summary>
+    [ApiController]
+    [Route("api/[controller]/[action]")]
+    public class WcsController : ControllerBase
+    {
+        /// <summary>
+        ///  获取设备配置信息接口
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        public List<Device> GetDeviceList()
+        {
+            return Device.All.ToList();
+        }
+
+        /// <summary>
+        ///  获取设备运行状态
+        /// </summary>
+        /// <param name="req"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public List<RunInfo> GetDevRunInfo([FromBody] DevRunInfoViewMode req)
+        {
+            var runInfos = new List<RunInfo>();
+            var db = new SqlSugarHelper().Default;
+            var plcEx = new SqlSugarHelper().PLCEX;
+            var type = "";
+            switch (req.Type)
+            {
+                case DevType.Robot: //机械臂
+                    type = DevType.Robot.ToString();
+                    //获取时段内设备的运行状态
+                    var runInfoList = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type && x.Frame >= req.StateTime && x.Frame < req.EndTime).ToList().GroupBy(x => x.Code);
+                    foreach (var runInfo in runInfoList)
+                    {
+                        var info = new RunInfo()
+                        {
+                            Code = runInfo.Key,
+                            EnterDepot = db.Queryable<WCS_TaskOld>().With(SqlWith.NoLock)
+                                .Where(x => x.Status == TaskStatus.Finish && x.Type == TaskType.SetPlate &&
+                                            x.Device == runInfo.Key && x.EndTime >= req.StateTime &&
+                                            x.EndTime < req.EndTime)
+                                .SplitTable(x => x.Take(2))
+                                .Count(),
+                            OutDepot = db.Queryable<WCS_TaskOld>().With(SqlWith.NoLock)
+                                .Where(x => x.Status == TaskStatus.Finish && x.Type == TaskType.OutDepot &&
+                                            x.Device == runInfo.Key && x.EndTime >= req.StateTime &&
+                                            x.EndTime < req.EndTime)
+                                .SplitTable(x => x.Take(2))
+                                .Count(),
+                            Free = runInfo.Where(x =>
+                                x.RunMode == RobotMode.Automatic.GetDescription() &&
+                                x.RunStatus == RobotRunStatus.Idle.GetDescription()).Sum(x => x.Duration) / 1000 / 60,
+                            Alarm = runInfo.Where(x => x.RunMode == RobotMode.Alarm.GetDescription())
+                                .Sum(x => x.Duration) / 1000 / 60,
+                            Manual = runInfo.Where(x => x.RunMode == RobotMode.Manua.GetDescription())
+                                .Sum(x => x.Duration) / 1000 / 60,
+                            Automatic = runInfo.Where(x => x.RunMode == RobotMode.Automatic.GetDescription()
+                                                           && x.RunStatus != RobotRunStatus.Idle.GetDescription()
+                                                           && x.RunStatus != RobotRunStatus.Maintain.GetDescription())
+                                .Sum(x => x.Duration) / 1000 / 60,
+                        };
+
+                        #region 开始分析设备动作,不计算停止时间
+
+                        var devActions = new List<DevActionViewMode>();
+                        double totalTime = 0; //总耗时
+                        double totalCount = 0; //总次数
+                        //入库
+                        var infos = runInfo.Where(x => x.RunMode == RobotMode.Automatic.GetDescription()).OrderBy(x => x.Frame).ToList();
+                        totalTime = infos.Where(x => x.RunStatus == RobotRunStatus.InboundCrawling.GetDescription() || x.RunStatus == RobotRunStatus.InStorage.GetDescription()).Sum(x => x.Duration);
+                        totalCount = infos.Count(x => x.RunStatus == RobotRunStatus.InboundCrawling.GetDescription());
+                        devActions.Add(new DevActionViewMode()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            ActionAmount = totalCount,
+                            ActionTime = totalTime == 0 ? 0 : Math.Round(totalTime / totalCount, 2),
+                        });
+                        //出库
+                        infos = runInfo.Where(x => x.RunMode == RobotMode.Automatic.GetDescription()).ToList();
+                        totalTime = infos.Where(x => x.RunStatus == RobotRunStatus.OutBoundCrawling.GetDescription() || x.RunStatus == RobotRunStatus.OutStorage.GetDescription()).Sum(x => x.Duration);
+                        totalCount = infos.Count(x => x.RunStatus == RobotRunStatus.OutBoundCrawling.GetDescription());
+                        devActions.Add(new DevActionViewMode()
+                        {
+                            Type = DevActionType.Out.GetDescription(),
+                            ActionAmount = totalCount,
+                            ActionTime = totalTime == 0 ? 0 : Math.Round(totalTime / totalCount, 2),
+                        });
+                        info.DevAction = devActions;
+
+                        #endregion 开始分析设备动作,不计算停止时间
+
+                        #region 计算任务的工位使用数量
+
+                        var stationCounts = new List<StationCount>();
+                        type = DevType.RobotTaskSum.ToString();
+                        var taskSum = plcEx.Queryable<DevRunInfo>().Where(x => x.Code == runInfo.Key && x.Type == type && x.Frame >= req.StateTime && x.Frame < req.EndTime)
+                            .ToList().Select(x =>
+                            {
+                                var item = x;
+                                item.Duration = long.Parse(item.RunStatus.Split("--")[2]);
+                                return item;
+                            }).ToList();
+
+                        //入库
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { Duration: 3, RunMode: "1" }),
+                            StationIndex = 1
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { Duration: 3, RunMode: "2" }),
+                            StationIndex = 2
+                        });
+                        //出库
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.Out.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { Duration: 4, RunMode: "1" }),
+                            StationIndex = 1
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.Out.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { Duration: 4, RunMode: "2" }),
+                            StationIndex = 2
+                        });
+                        info.StationCount = stationCounts;
+
+                        #endregion 计算任务的工位使用数量
+
+                        runInfos.Add(info);
+                    }
+
+                    break;
+
+                case DevType.Truss:
+                    type = DevType.Truss.ToString();
+                    //获取时段内设备的运行状态
+                    var trussInfoList = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type && x.Frame >= req.StateTime && x.Frame < req.EndTime).ToList().GroupBy(x => x.Code);
+                    foreach (var runInfo in trussInfoList)
+                    {
+                        var info = new RunInfo()
+                        {
+                            Code = runInfo.Key,
+                            EnterDepot = db.Queryable<WCS_TaskOld>().With(SqlWith.NoLock)
+                                .Where(x => x.Status == TaskStatus.Finish && x.Type == TaskType.SetPlate &&
+                                            x.Device == runInfo.Key && x.EndTime >= req.StateTime &&
+                                            x.EndTime < req.EndTime)
+                                .SplitTable(x => x.Take(2))
+                                .Count(),
+                            Free = runInfo.Where(x => x.RunMode == TrussStatus.Idle.GetDescription()).Sum(x => x.Duration) / 1000 / 60,
+                            Alarm = runInfo.Where(x => x.RunMode == TrussStatus.Alarm.GetDescription()).Sum(x => x.Duration) / 1000 / 60,
+                            Manual = runInfo.Where(x => x.RunMode == TrussStatus.Manual.GetDescription() || x.RunMode == TrussStatus.KeepInRepair.GetDescription()).Sum(x => x.Duration) / 1000 / 60,
+                            Automatic = runInfo.Where(x => x.RunMode == TrussStatus.Execute.GetDescription()).Sum(x => x.Duration) / 1000 / 60,
+                        };
+
+                        #region 开始分析设备动作,不计算停止时间
+
+                        var devActions = new List<DevActionViewMode>();
+                        double totalTime = 0; //总耗时
+                        double totalCount = 0; //总次数
+                        //入库
+                        var infos = runInfo.Where(x => x.RunMode == TrussStatus.Execute.GetDescription()).ToList();
+                        totalTime = infos.Where(x => x.RunMode == TrussStatus.Execute.GetDescription()).Sum(x => x.Duration);
+                        totalCount = infos.Count(x => x.RunMode == TrussStatus.Execute.GetDescription());
+                        devActions.Add(new DevActionViewMode()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            ActionAmount = totalCount,
+                            ActionTime = totalTime == 0 ? 0 : Math.Round(totalTime / totalCount, 2),
+                        });
+
+                        info.DevAction = devActions;
+
+                        #endregion 开始分析设备动作,不计算停止时间
+
+                        #region 计算任务的工位使用数量
+
+                        var stationCounts = new List<StationCount>();
+                        type = DevType.TrussTaskSum.ToString();
+                        var taskSum = plcEx.Queryable<DevRunInfo>().Where(x => x.Code == runInfo.Key && x.Type == type && x.Frame >= req.StateTime && x.Frame < req.EndTime)
+                            .ToList();
+
+                        //入库
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "1" }),
+                            StationIndex = 1
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "2" }),
+                            StationIndex = 2
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "3" }),
+                            StationIndex = 3
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "4" }),
+                            StationIndex = 4
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "5" }),
+                            StationIndex = 5
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "6" }),
+                            StationIndex = 6
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "7" }),
+                            StationIndex = 7
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "8" }),
+                            StationIndex = 8
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "9" }),
+                            StationIndex = 9
+                        });
+                        stationCounts.Add(new StationCount()
+                        {
+                            Type = DevActionType.In.GetDescription(),
+                            StationNum = taskSum.Count(x => x is { RunMode: "10" }),
+                            StationIndex = 10
+                        });
+
+                        info.StationCount = stationCounts;
+
+                        #endregion 计算任务的工位使用数量
+
+                        runInfos.Add(info);
+                    }
+                    break;
+            }
+
+            return runInfos;
+        }
+
+        #region 设备IP相关
+
+        /// <summary>
+        /// 检查Ip是否正常联通
+        /// </summary>
+        /// <param name="strIpOrDName">输入参数,表示IP地址或域名</param>
+        /// <returns></returns>
+        [HttpGet]
+        public static bool PingIpOrDomainName(string strIpOrDName)
+        {
+            try
+
+            {
+                var objPingSender = new Ping();
+
+                var objPinOptions = new PingOptions
+                {
+                    DontFragment = true
+                };
+
+                const string data = "";
+
+                var buffer = Encoding.UTF8.GetBytes(data);
+
+                const int intTimeout = 120;
+
+                var objPinReply = objPingSender.Send(strIpOrDName, intTimeout, buffer, objPinOptions);
+
+                var strInfo = objPinReply.Status.ToString();
+
+                return strInfo == "Success";
+            }
+            catch (Exception)
+
+            {
+                return false;
+            }
+        }
+
+        /// <summary>
+        ///  获取设备IP检测结果
+        /// </summary>
+        /// <returns>设备IP检测结果</returns>
+        [HttpGet]
+        public List<DeviceIpTestResults> DeviceIpTest()
+        {
+            if (!ServiceHub.DeviceIPList.Any()) throw new Exception("未配置任何Ip");
+            var deviceIpTestResults = new List<DeviceIpTestResults>();
+            ServiceHub.DeviceIPList.ForEach(ip =>
+            {
+                deviceIpTestResults.Add(new DeviceIpTestResults
+                {
+                    Ip = ip,
+                    Result = PingIpOrDomainName(ip)
+                });
+            });
+
+            return deviceIpTestResults;
+        }
+
+        /// <summary>
+        ///  获取设备Ip集合
+        /// </summary>
+        /// <returns>设备Ip集合</returns>
+        [HttpGet]
+        public List<string> GetDeviceIpList()
+        {
+            if (!ServiceHub.DeviceIPList.Any()) throw new Exception("未配置任何Ip");
+            return ServiceHub.DeviceIPList;
+        }
+
+        #endregion 设备IP相关
+    }
+
+    /// <summary>
+    ///  设备运行状态
+    /// </summary>
+    public class DevRunInfoViewMode
+    {
+        /// <summary>
+        ///  类型
+        /// </summary>
+        public DevType Type { get; set; }
+
+        /// <summary>
+        ///  开始时间
+        /// </summary>
+        public DateTime StateTime { get; set; }
+
+        /// <summary>
+        ///  结束时间
+        /// </summary>
+        public DateTime EndTime { get; set; }
+    }
+
+    /// <summary>
+    /// 分页参数
+    /// </summary>
+    public class PagedInfo<T>
+    {
+        /// <summary>
+        /// 每页行数
+        /// </summary>
+        public int PageSize { get; set; } = 10;
+
+        /// <summary>
+        /// 当前页
+        /// </summary>
+        public int PageIndex { get; set; } = 1;
+
+        /// <summary>
+        /// 总记录数
+        /// </summary>
+        public int TotalNum { get; set; }
+
+        /// <summary>
+        /// 总页数
+        /// </summary>
+        public int TotalPage
+        {
+            get
+            {
+                if (TotalNum > 0)
+                {
+                    return TotalNum % this.PageSize == 0 ? TotalNum / this.PageSize : TotalNum / this.PageSize + 1;
+                }
+                else
+                {
+                    return 0;
+                }
+            }
+            set { }
+        }
+
+        public List<T> Result { get; set; }
+        public Dictionary<string, object> Extra { get; set; } = new Dictionary<string, object>();
+
+        public PagedInfo()
+        {
+        }
+    }
+
+    public class RunInfo
+    {
+        public string Code { get; set; }
+
+        /// <summary>
+        ///  出库任务
+        /// </summary>
+        public int OutDepot { get; set; }
+
+        /// <summary>
+        ///  入库任务
+        /// </summary>
+        public int EnterDepot { get; set; }
+
+        /// <summary>
+        ///  移库任务
+        /// </summary>
+        public int MoveDepot { get; set; }
+
+        /// <summary>
+        ///  空闲
+        /// </summary>
+        public double Free { get; set; }
+
+        /// <summary>
+        ///  手动
+        /// </summary>
+        public double Manual { get; set; }
+
+        /// <summary>
+        ///  自动
+        /// </summary>
+        public double Automatic { get; set; }
+
+        /// <summary>
+        ///  报警
+        /// </summary>
+        public double Alarm { get; set; }
+
+        /// <summary>
+        ///  运行
+        /// </summary>
+        public double Working { get; set; }
+
+        /// <summary>
+        ///  交互总耗时
+        /// </summary>
+        public double InteractTotal { get; set; }
+
+        /// <summary>
+        ///  设备执行分析
+        /// </summary>
+        public List<DevActionViewMode> DevAction { get; set; }
+
+        /// <summary>
+        ///  任务执行工位使用数量
+        /// </summary>
+        public List<StationCount> StationCount { get; set; }
+    }
+
+    /// <summary>
+    ///  设备动作分析
+    /// </summary>
+    public class DevActionViewMode
+    {
+        /// <summary>
+        ///  动作次数
+        /// </summary>
+        public double ActionAmount { get; set; }
+
+        /// <summary>
+        ///  动作平均耗时
+        /// </summary>
+        public double ActionTime { get; set; }
+
+        /// <summary>
+        ///  动作类型
+        /// </summary>
+        public string Type { get; set; }
+    }
+
+    /// <summary>
+    ///  设备动作类型
+    /// </summary>
+    public enum DevActionType
+    {
+        /// <summary>
+        ///  入库
+        /// </summary>
+        [Description("入库")]
+        In = 0,
+
+        /// <summary>
+        ///  出库
+        /// </summary>
+        [Description("出库")]
+        Out = 1,
+
+        /// <summary>
+        ///  移库
+        /// </summary>
+        [Description("移库")]
+        Move = 2,
+    }
+
+    /// <summary>
+    ///  任务执行工位数量
+    /// </summary>
+    public class StationCount
+    {
+        /// <summary>
+        ///  执行数量
+        /// </summary>
+        public double StationNum { get; set; }
+
+        /// <summary>
+        ///  工位数
+        /// </summary>
+        public double StationIndex { get; set; }
+
+        /// <summary>
+        ///  任务类型
+        /// </summary>
+        public string Type { get; set; }
+    }
+}

+ 28 - 0
WCS.WorkEngineering/WebApi/Models/AGV/AgvResponseCode.cs

@@ -0,0 +1,28 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV
+{
+    /// <summary>
+    ///  AGV 返回结果code值枚举
+    /// </summary>
+    public class AgvResponseCode
+    {
+        /// <summary>
+        ///  成功
+        /// </summary>
+        public static string Success { get; set; } = "0";
+
+        /// <summary>
+        ///  失败
+        /// </summary>
+        public static string Fail { get; set; } = "1";
+
+        /// <summary>
+        ///  重复提交
+        /// </summary>
+        public static string Repeat { get; set; } = "6";
+
+        /// <summary>
+        ///  失败,未知异常
+        /// </summary>
+        public static string Error { get; set; } = "99";
+    }
+}

+ 10 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/AddWcsMoveTaskRequest.cs

@@ -0,0 +1,10 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    /// <summary>
+    ///  获取移库任务请求参数
+    /// </summary>
+    public class AddWcsMoveTaskRequest
+    {
+        public int TaskNum { get; set; }
+    }
+}

+ 115 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/AgvCallbackRequest.cs

@@ -0,0 +1,115 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    public class AgvCallbackRequest
+    {
+        /// <summary>
+        /// 请求编号,每个请求都要一个唯一编号, 同一个请求重复提交, 使用同一编号
+        /// </summary>
+        public string reqCode { get; set; }
+
+        /// <summary>
+        ///  请求站台
+        /// </summary>
+        public string callCode { get; set; }
+
+        /// <summary>
+        /// 请求时间戳,格式: “yyyy-MM-dd HH:mm:ss”
+        /// </summary>
+        public string reqTime { get; set; }
+
+        /// <summary>
+        /// 地码 X 坐标(mm):任务完成时有值
+        /// </summary>
+        public decimal cooX { get; set; }
+
+        /// <summary>
+        /// 地码 Y 坐标(mm):任务完成时有值
+        /// </summary>
+        public decimal cooY { get; set; }
+
+        /// <summary>
+        /// 当前位置编号
+        /// </summary>
+        public string currentPositionCode { get; set; }
+
+        /// <summary>
+        /// 自定义字段
+        /// </summary>
+        public string data { get; set; }
+
+        /// <summary>
+        /// 地图编号
+        /// </summary>
+        public string mapCode { get; set; }
+
+        /// <summary>
+        /// 地码编号:任务完成时有值
+        /// </summary>
+        public string mapDataCode { get; set; }
+
+        /// <summary>
+        /// 仓位编号:叉车与CTU任务时有值
+        /// </summary>
+        public string stgBinCode { get; set; }
+
+        /// <summary>
+        /// 方法名,申请放货、请求取货、
+        /// </summary>
+        public string method { get; set; }
+
+        /// <summary>
+        /// 货架编号:背货架时有值
+        /// </summary>
+        public string podCode { get; set; }
+
+        /// <summary>
+        /// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下”:任务完成时有值
+        /// </summary>
+        public string podDir { get; set; }
+
+        /// <summary>
+        /// 物料编号
+        /// </summary>
+        public string materialLot { get; set; }
+
+        /// <summary>
+        /// AGV编号(同 agvCode )
+        /// </summary>
+        public string robotCode { get; set; }
+
+        /// <summary>
+        /// 当前任务单号
+        /// </summary>
+        public string taskCode { get; set; }
+
+        /// <summary>
+        /// 工作位
+        /// </summary>
+        public string wbCode { get; set; }
+
+        /// <summary>
+        /// 容器编号
+        /// </summary>
+        public string ctnrCode { get; set; }
+
+        /// <summary>
+        /// 容器类型
+        /// </summary>
+        public string ctnrTyp { get; set; }
+
+        /// <summary>
+        /// 巷道编号
+        /// </summary>
+        public string roadWayCode { get; set; }
+
+        /// <summary>
+        /// 巷道内顺序号巷道尾是0,到巷道头依次递增1
+        /// </summary>
+        public string seq { get; set; }
+
+        /// <summary>
+        /// 设备编号
+        /// </summary>
+        public string eqpCode { get; set; }
+    }
+}

+ 18 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/ApplyEmptySpoolRequest.cs

@@ -0,0 +1,18 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    /// <summary>
+    ///  背负式AGV补空请求参数
+    /// </summary>
+    public class AgvFillEmptySpaceRequest
+    {
+        /// <summary>
+        ///  请求号
+        /// </summary>
+        public string Reqid { get; set; }
+
+        /// <summary>
+        /// 仓库编号
+        /// </summary>
+        public string WareCode { get; set; }
+    }
+}

+ 50 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/CancelTaskRequest.cs

@@ -0,0 +1,50 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    /// <summary>
+    ///  取消任务
+    /// </summary>
+    public class CancelTaskRequest
+    {
+        /// <summary>
+        ///  请求编号
+        /// </summary>
+        public string reqCode { get; set; }
+
+        /// <summary>
+        ///  求时间截 格式: “yyyy-MM-dd HH:mm:ss”。
+        /// </summary>
+        public string reqTime { get; set; }
+
+        /// <summary>
+        ///  客户端编号,如PDA,HCWMS等。
+        /// </summary>
+        public string clientCode { get; set; }
+
+        /// <summary>
+        ///  令牌号, 由调度系统颁发
+        /// </summary>
+        public string tokenCode { get; set; }
+
+        /// <summary>
+        ///  取消类型 0表示:取消后货架直接放地上
+        ///  1表示:AGV仍然背着货架, 根据回库区域执行回库指令, 只有潜伏车和CTU车支持。
+        ///  默认的取消模式为0
+        /// </summary>
+        public string forceCancel { get; set; }
+
+        /// <summary>
+        ///  forcecancel=1时有意义,回库区域编号, 如果为空,采用货架配置的库区。
+        /// </summary>
+        public string matterArea { get; set; }
+
+        /// <summary>
+        ///  取消该AGV正在执行的任务单
+        /// </summary>
+        public string agvCode { get; set; }
+
+        /// <summary>
+        /// 任务单编号, 取消该任务单
+        /// </summary>
+        public string taskCode { get; set; }
+    }
+}

+ 68 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/ContinueTaskRequest.cs

@@ -0,0 +1,68 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    /// <summary>
+    /// Agv继续执行任务请求参数
+    /// </summary>
+    public class ContinueTaskRequest
+    {
+        /// <summary>
+        ///  请求编号,每个请求都要一个唯一编号, 同一个请求重复提交, 使用同一编号。
+        /// </summary>
+        public string reqCode { get; set; }
+
+        /// <summary>
+        ///  请求时间截 格式: “yyyy-MM-dd HH:mm:ss”。
+        /// </summary>
+        public string reqTime { get; set; }
+
+        /// <summary>
+        ///  客户端编号,如PDA,HCWMS等。
+        /// </summary>
+        public string clientCode { get; set; }
+
+        /// <summary>
+        ///  令牌号, 由调度系统颁发。
+        /// </summary>
+        public string tokenCode { get; set; }
+
+        /// <summary>
+        ///  工作位,与RCS-2000端配置的位置名称一致。
+        /// </summary>
+        public string wbCode { get; set; }
+
+        /// <summary>
+        ///  货架号,采用货架号触发的方式。
+        /// </summary>
+        public string podCode { get; set; }
+
+        /// <summary>
+        ///  AGV编号,采用 AGV编号触发的方式。
+        /// </summary>
+        public string agvCode { get; set; }
+
+        /// <summary>
+        ///  任务单号,选填, 不填系统自动生 成,必须为 64 位 UUID
+        /// </summary>
+        public string taskCode { get; set; }
+
+        /// <summary>
+        ///  下一个子任务的序列,指定第几个子任务开始执行,校验子任务执行是否正确。不填默认执行下一个子任务。
+        /// </summary>
+        public string taskSeq { get; set; }
+
+        /// <summary>
+        ///  下一个位置信息,在任务类型中配置外部设置时需要传入,否则不需要设置。待现场地图部署、配置完成后可获取
+        /// </summary>
+        public positionCodeClass nextPositionCode { get; set; }
+
+        /// <summary>
+        ///  根据type填写,呼叫站点/策略编号等
+        /// </summary>
+        public string positionCode { get; set; }
+
+        /// <summary>
+        /// 对象类型定义: 00:代表 nextPositionCode是一个位置 02:代表nextPositionCode是一个策略
+        /// </summary>
+        public string type { get; set; }
+    }
+}

+ 70 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/CopperLineAgvTaskStockInToIWmsRequest.cs

@@ -0,0 +1,70 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    public class CopperLineAgvTaskStockInToIWmsRequest
+    {
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        public string matCode { get; set; }
+
+        /// <summary>
+        /// 工作站编号
+        /// </summary>
+        public string workAreaCode { get; set; }
+
+        /// <summary>
+        /// 空/满工字轮标记(满工字轮:1空工字轮:0)
+        /// </summary>
+        public string outSpoolFull { get; set; }
+
+        /// <summary>
+        /// 取空补满标记
+        /// </summary>
+        public bool intoEmpty { get; set; }
+
+        /// <summary>
+        /// 湿拉出库标记
+        /// </summary>
+        public string wetOut { get; set; }
+
+        /// <summary>
+        /// 湿拉退料出库标记
+        /// </summary>
+        public string wetOutReturn { get; set; }
+
+        /// <summary>
+        /// 改手盘标记
+        /// </summary>
+        public string isSurplus { get; set; }
+
+        /// <summary>
+        /// 返工标记
+        /// </summary>
+        public string isRework { get; set; }
+
+        /// <summary>
+        /// 材料号
+        /// </summary>
+        public string matNo { get; set; }
+
+        /// <summary>
+        /// RFID号
+        /// </summary>
+        public string spoolNo { get; set; }
+
+        /// <summary>
+        /// 质量状态标记
+        /// </summary>
+        public string gradeCode { get; set; }
+
+        /// <summary>
+        /// 快投标记
+        /// </summary>
+        public string matFast { get; set; }
+
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        public string taskNo { get; set; }
+    }
+}

+ 95 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/CopperLineAgvTaskStockOutToIWmsRequest.cs

@@ -0,0 +1,95 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    public class CopperLineAgvTaskStockOutToIWmsRequest
+    {
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        public string matCode { get; set; }
+
+        /// <summary>
+        /// 工作站编号(机台号、立库点位编号)
+        /// </summary>
+        public string wbCode { get; set; }
+
+        /// <summary>
+        /// 空/满工字轮入库标记(空工字轮:0,满工字轮:1,半工字轮:2)
+        /// </summary>
+        public string inSpoolFull { get; set; }
+
+        /// <summary>
+        /// 取满补空标记
+        /// </summary>
+        public bool getOutEmpty { get; set; }
+
+        /// <summary>
+        /// 湿拉上线标记
+        /// </summary>
+        public bool wetInto { get; set; }
+
+        /// <summary>
+        /// 湿拉特殊上线标记
+        /// </summary>
+        public bool wetIntoSpec { get; set; }
+
+        /// <summary>
+        /// 湿拉退料入库标记
+        /// </summary>
+        public bool wetIntoReturn { get; set; }
+
+        /// <summary>
+        /// 湿拉特殊上线点位号
+        /// </summary>
+        public string wetSpecWbCode { get; set; }
+
+        /// <summary>
+        /// 改手盘标记
+        /// </summary>
+        public string isSurplus { get; set; }
+
+        /// <summary>
+        /// 返工标记
+        /// </summary>
+        public string isRework { get; set; }
+
+        /// <summary>
+        /// 材料号
+        /// </summary>
+        public string matNo { get; set; }
+
+        /// <summary>
+        /// RFID号
+        /// </summary>
+        public string spoolNo { get; set; }
+
+        /// <summary>
+        /// 质量状态标记
+        /// </summary>
+        public string gradeCode { get; set; }
+
+        /// <summary>
+        /// 快投标记
+        /// </summary>
+        public string matFast { get; set; }
+
+        /// <summary>
+        /// 长度
+        /// </summary>
+        public string orderProcessLenOut { get; set; }
+
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        public string taskNo { get; set; }
+
+        /// <summary>
+        /// 退料原因
+        /// </summary>
+        public string returnDesc { get; set; }
+
+        /// <summary>
+        /// 是否锁定
+        /// </summary>
+        public string lockFlag { get; set; }
+    }
+}

+ 200 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/GenAgvSchedulingTaskRequest.cs

@@ -0,0 +1,200 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    /// <summary>
+    ///  生成任务单接口
+    /// </summary>
+    public class GenAgvSchedulingTaskRequest
+    {
+        /// <summary>
+        /// 请求编号,每个请求都要一个唯一编号, 同一个请求重复提交, 使用同一编号。
+        /// </summary>
+        public string reqCode { get; set; }
+
+        /// <summary>
+        /// 请求时间截 格式: “yyyy-MM-dd HH:mm:ss”
+        /// </summary>
+        public string reqTime { get; set; }
+
+        /// <summary>
+        /// 客户端编号,如PDA,HCWMS等
+        /// </summary>
+        public string clientCode { get; set; }
+
+        /// <summary>
+        /// 令牌号, 由调度系统颁发
+        /// </summary>
+        public string tokenCode { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        public string taskTyp { get; set; }
+
+        /// <summary>
+        /// 容器类型(叉车/CTU专用)叉车项目必传
+        /// </summary>
+        public string ctnrTyp { get; set; }
+
+        /// <summary>
+        ///  RFID
+        /// </summary>
+        public string ctnrCode { get; set; }
+
+        /// <summary>
+        /// 接口名称
+        /// </summary>
+        public string interfaceName { get; set; }
+
+        /// <summary>
+        /// 任务模式
+        /// </summary>
+        public string taskMode { get; set; }
+
+        /// <summary>
+        ///  合金任务模板
+        /// </summary>
+        public string hjTaskTy { get; set; }
+
+        /// <summary>
+        /// 工作位
+        /// </summary>
+        public string wbCode { get; set; }
+
+        /// <summary>
+        /// 位置路径
+        /// </summary>
+        public List<positionCodeClass> positionCodePath { get; set; }
+
+        /// <summary>
+        ///  位置类型
+        /// </summary>
+        public string type { get; set; }
+
+        /// <summary>
+        /// 货架编号
+        /// </summary>
+        public string podCode { get; set; }
+
+        /// <summary>
+        /// “180”,”0”,”90”,”-90”
+        /// </summary>
+        public string podDir { get; set; }
+
+        /// <summary>
+        /// 货架类型, 传空时表示随机找个货架
+        /// </summary>
+        public string podTyp { get; set; }
+
+        /// <summary>
+        /// 物料批次或货架上的物料唯一编码
+        /// </summary>
+        public string materialLot { get; set; }
+
+        /// <summary>
+        /// 优先级,从(1~127)级,最大优先级最高
+        /// </summary>
+        public string priority { get; set; }
+
+        /// <summary>
+        /// 任务单号,选填, 不填系统自动生成,UUID小于等于64位
+        /// </summary>
+        public string taskCode { get; set; }
+
+        /// <summary>
+        /// AGV编号,填写表示指定某一编号的AGV执行该任务
+        /// </summary>
+        public string agvCode { get; set; }
+
+        /// <summary>
+        /// 组编号
+        /// </summary>
+        public string groupId { get; set; }
+
+        /// <summary>
+        /// 自定义字段.JSON格式
+        /// </summary>
+        public string data { get; set; }
+    }
+
+    /// <summary>
+    ///  AGV生成任务单请求TaskTyp对应枚举
+    /// </summary>
+    public class GenAgvSchedulingTaskRequestTaskTyp
+    {
+        /// <summary>
+        ///  厂内货架搬运
+        /// </summary>
+        public string 厂内货架搬运 { get; set; } = "F01";
+
+        /// <summary>
+        ///  厂内货架空满交换
+        /// </summary>
+        public string 厂内货架空满交换 { get; set; } = "F02";
+
+        /// <summary>
+        ///  辊筒搬运接驳
+        /// </summary>
+        public string 辊筒搬运接驳 { get; set; } = "F03";
+
+        /// <summary>
+        ///  厂内货架出库AGV待命
+        /// </summary>
+        public string 厂内货架出库AGV待命 { get; set; } = "F04";
+
+        /// <summary>
+        ///  旋转货架
+        /// </summary>
+        public string 旋转货架 { get; set; } = "F05";
+
+        /// <summary>
+        ///  厂内电梯任务
+        /// </summary>
+        public string 厂内电梯任务 { get; set; } = "F06";
+
+        /// <summary>
+        ///  以下为叉车专用任务类型高位货架到工作台
+        /// </summary>
+        public string 以下为叉车专用任务类型高位货架到工作台 { get; set; } = "F11";
+
+        /// <summary>
+        ///  工作台到高位货架
+        /// </summary>
+        public string 工作台到高位货架 { get; set; } = "F12";
+
+        /// <summary>
+        ///  工作台到巷道
+        /// </summary>
+        public string 工作台到巷道 { get; set; } = "F14";
+
+        /// <summary>
+        ///  高位货架到工作台接驳
+        /// </summary>
+        public string 高位货架到工作台接驳 { get; set; } = "F15";
+
+        /// <summary>
+        ///  工作台到高位货架接驳
+        /// </summary>
+        public string 工作台到高位货架接驳 { get; set; } = "F16";
+
+        /// <summary>
+        ///  巷道到工作台接驳
+        /// </summary>
+        public string 巷道到工作台接驳 { get; set; } = "F17";
+
+        /// <summary>
+        ///  工作台到巷道接驳
+        /// </summary>
+        public string 工作台到巷道接驳 { get; set; } = "F18";
+
+        /// <summary>
+        ///  叉车电梯主任务
+        /// </summary>
+        public string 叉车电梯主任务 { get; set; } = "F20";
+    }
+
+    public class positionCodeClass
+    {
+        public string positionCode { get; set; }
+        public string type { get; set; }
+    }
+}

+ 103 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/zhongTianIntoStockRequest.cs

@@ -0,0 +1,103 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    /// <summary>
+    ///  合金二楼下发AGV入库任务
+    /// </summary>
+    public class zhongTianIntoStockRequest
+    {
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        public string matCode { get; set; }
+
+        /// <summary>
+        /// 工作站编号
+        /// </summary>
+        public string wbCode { get; set; }
+
+        /// <summary>
+        /// 空/满工字轮入库标记
+        /// </summary>
+        public string inSpoolFull { get; set; }
+
+        /// <summary>
+        /// 取满补空标记
+        /// </summary>
+        public bool getOutEmpty { get; set; }
+
+        /// <summary>
+        /// 湿拉上线标记
+        /// </summary>
+        public bool wetInto { get; set; }
+
+        /// <summary>
+        /// 湿拉特殊上线标记
+        /// </summary>
+        public bool wetIntoSpec { get; set; }
+
+        /// <summary>
+        /// 湿拉退料入库标记
+        /// </summary>
+        public bool wetIntoReturn { get; set; }
+
+        /// <summary>
+        /// 湿拉特殊上线点位号
+        /// </summary>
+        public string wetSpecWbCode { get; set; }
+
+        /// <summary>
+        /// 改手盘标记
+        /// </summary>
+        public string isSurplus { get; set; }
+
+        /// <summary>
+        /// 返工标记
+        /// </summary>
+        public string isRework { get; set; }
+
+        /// <summary>
+        /// 材料号
+        /// </summary>
+        public string matNo { get; set; }
+
+        /// <summary>
+        /// RFID号
+        /// </summary>
+        public string spoolNo { get; set; }
+
+        /// <summary>
+        /// 质量状态标记
+        /// </summary>
+        public string gradeCode { get; set; }
+
+        /// <summary>
+        /// 快投标记
+        /// </summary>
+        public string matFast { get; set; }
+
+        /// <summary>
+        /// 长度
+        /// </summary>
+        public string orderProcessLenOut { get; set; }
+
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        public string taskNo { get; set; }
+
+        /// <summary>
+        /// 退料原因
+        /// </summary>
+        public string returnDesc { get; set; }
+
+        /// <summary>
+        /// 是否锁定
+        /// </summary>
+        public string lockFlag { get; set; }
+
+        /// <summary>
+        ///  仓位号
+        /// </summary>
+        public string wetIntoBinCode { get; set; }
+    }
+}

+ 78 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Request/zhongTianOutStockRequest.cs

@@ -0,0 +1,78 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Request
+{
+    /// <summary>
+    ///  合金二楼下发AGV出库任务
+    /// </summary>
+    public class zhongTianOutStockRequest
+    {
+        /// <summary>
+        /// 请求编号
+        /// </summary>
+        public string reqCode { get; set; }
+
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        public string matCode { get; set; }
+
+        /// <summary>
+        /// 工作站编号
+        /// </summary>
+        public string workAreaCode { get; set; }
+
+        /// <summary>
+        /// 空/满工字轮标记
+        /// </summary>
+        public string outSpoolFull { get; set; }
+
+        /// <summary>
+        /// 取空补满标记
+        /// </summary>
+        public bool intoEmpty { get; set; }
+
+        /// <summary>
+        /// 湿拉出库标记
+        /// </summary>
+        public string wetOut { get; set; }
+
+        /// <summary>
+        /// 湿拉退料出库标记
+        /// </summary>
+        public bool wetOutReturn { get; set; }
+
+        /// <summary>
+        /// 改手盘标记
+        /// </summary>
+        public string isSurplus { get; set; }
+
+        /// <summary>
+        /// 返工标记
+        /// </summary>
+        public string isRework { get; set; }
+
+        /// <summary>
+        /// 材料号
+        /// </summary>
+        public string matNo { get; set; }
+
+        /// <summary>
+        /// RFID号
+        /// </summary>
+        public string spoolNo { get; set; }
+
+        /// <summary>
+        /// 质量状态标记
+        /// </summary>
+        public string gradeCode { get; set; }
+
+        /// <summary>
+        /// 快投标记
+        /// </summary>
+        public string matFast { get; set; }
+
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        public string taskNo { get; set; }
+    }
+}

+ 29 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Response/AddWcsMoveTaskResponse.cs

@@ -0,0 +1,29 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Response
+{
+    /// <summary>
+    ///  获取移库任务
+    /// </summary>
+    public class AddWcsMoveTaskResponse
+    {
+        /// <summary>
+        /// 0:失败;1:允许2升位执行;2:执行移库任务;3:一深位有出库任务
+        /// </summary>
+        public WmsApiMoveTask ResType { get; set; } = 0;
+
+        /// <summary>
+        /// 一深位货位号
+        /// </summary>
+        public string CellNo { get; set; }
+    }
+
+    /// <summary>
+    /// 获取移库任务返回结果
+    /// </summary>
+    public enum WmsApiMoveTask
+    {
+        失败 = 0,
+        允许2升位执行 = 1,
+        执行移库任务 = 2,
+        一深位有出库任务 = 3
+    }
+}

+ 35 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Response/ApplyEmptySpoolResponse.cs

@@ -0,0 +1,35 @@
+using WCS.WorkEngineering.WebApi.Models.WMS.Response;
+
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Response
+{
+    /// <summary>
+    ///  agv补空返回参数
+    /// </summary>
+    public class ApplyEmptySpoolResponse
+    {
+        /// <summary>
+        ///  站台编号
+        /// </summary>
+        public string LocCode { get; set; }
+
+        /// <summary>
+        ///  工字轮类型
+        /// </summary>
+        public string SpoolType { get; set; }
+
+        /// <summary>
+        ///  返回状态码
+        /// </summary>
+        public ResponseStatusCodeEnum ResCode { get; set; }
+
+        /// <summary>
+        ///  描述信息
+        /// </summary>
+        public string ResMsg { get; set; }
+
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        public string TaskCode { get; set; }
+    }
+}

+ 23 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Response/CancelTaskResponse.cs

@@ -0,0 +1,23 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Response
+{
+    /// <summary>
+    ///  取消任务返回接口
+    /// </summary>
+    public class CancelTaskResponse
+    {
+        /// <summary>
+        /// 返回码
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 返回消息
+        /// </summary>
+        public string message { get; set; }
+
+        /// <summary>
+        /// 请求编号
+        /// </summary>
+        public string reqCode { get; set; }
+    }
+}

+ 23 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Response/ContinueTaskResponse.cs

@@ -0,0 +1,23 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Response
+{
+    /// <summary>
+    ///  Agv继续执行任务返回参数
+    /// </summary>
+    public class ContinueTaskResponse
+    {
+        /// <summary>
+        ///  返回码 对应类:AgvContinueTaskResponseCode
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        ///  返回消息
+        /// </summary>
+        public string message { get; set; }
+
+        /// <summary>
+        ///  请求编号
+        /// </summary>
+        public string reqCode { get; set; }
+    }
+}

+ 25 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Response/GenAgvSchedulingTaskResponse.cs

@@ -0,0 +1,25 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Response
+{
+    public class GenAgvSchedulingTaskResponse
+    {
+        /// <summary>
+        /// 返回码
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 返回消息
+        /// </summary>
+        public string message { get; set; }
+
+        /// <summary>
+        /// 请求编号
+        /// </summary>
+        public string reqCode { get; set; }
+
+        /// <summary>
+        /// 自定义返回(返回任务单号)
+        /// </summary>
+        public string data { get; set; }
+    }
+}

+ 20 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Response/agvCallbackResponse.cs

@@ -0,0 +1,20 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Response
+{
+    public class AgvCallbackResponse
+    {
+        /// <summary>
+        /// 返回码 1:允许执行 0:不允许执行
+        /// </summary>
+        public string code { get; set; } = "0";
+
+        /// <summary>
+        /// 返回消息
+        /// </summary>
+        public string message { get; set; } = "成功";
+
+        /// <summary>
+        /// 请求编号
+        /// </summary>
+        public string reqCode { get; set; }
+    }
+}

+ 28 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Response/zhongTianIntoStockResponse.cs

@@ -0,0 +1,28 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Response
+{
+    /// <summary>
+    ///
+    /// </summary>
+    public class zhongTianIntoStockResponse
+    {
+        /// <summary>
+        /// 返回码
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 自定义返回(返回任务单号)
+        /// </summary>
+        public string data { get; set; }
+
+        /// <summary>
+        /// 返回消息
+        /// </summary>
+        public string message { get; set; }
+
+        /// <summary>
+        /// 请求编号
+        /// </summary>
+        public string reqCode { get; set; }
+    }
+}

+ 25 - 0
WCS.WorkEngineering/WebApi/Models/AGV/Response/zhongTianOutStockResponse.cs

@@ -0,0 +1,25 @@
+namespace WCS.WorkEngineering.WebApi.Models.AGV.Response
+{
+    public class zhongTianOutStockResponse
+    {
+        /// <summary>
+        /// 返回码
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 自定义返回(返回任务单号)
+        /// </summary>
+        public string data { get; set; }
+
+        /// <summary>
+        /// 返回消息
+        /// </summary>
+        public string message { get; set; }
+
+        /// <summary>
+        /// 请求编号
+        /// </summary>
+        public string reqCode { get; set; }
+    }
+}

+ 46 - 0
WCS.WorkEngineering/WebApi/Models/WCS/Request/HandleTaskRequest.cs

@@ -0,0 +1,46 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.WorkEngineering.WebApi.Models.WCS.Request
+{
+    /// <summary>
+    ///  处理任务请求参数
+    /// </summary>
+    public class HandleTaskRequest
+    {
+        /// <summary>
+        ///  任务号
+        /// </summary>
+        [Required]
+        public List<int> TaskIds { get; set; }
+
+        /// <summary>
+        ///  处理类型
+        /// </summary>
+        [Required]
+        public HandleTaskTypeEnum Type { get; set; }
+
+        /// <summary>
+        ///  用户
+        /// </summary>
+        public string User { get; set; }
+
+        /// <summary>
+        ///  手动处理备注
+        /// </summary>
+        public string ManualRemarks { get; set; }
+
+        /// <summary>
+        /// 优先级
+        /// </summary>
+        public int Priority { get; set; }
+    }
+
+    public enum HandleTaskTypeEnum
+    {
+        取消任务 = 1,
+        完成任务 = 2,
+        重新下发AGV任务 = 3,
+        调整优先级 = 4
+        //重新下发出库AGV任务 = 1,
+    }
+}

+ 23 - 0
WCS.WorkEngineering/WebApi/Models/WCS/Response/HandleTaskResponse.cs

@@ -0,0 +1,23 @@
+namespace WCS.WorkEngineering.WebApi.Models.WCS.Response
+{
+    /// <summary>
+    ///  处理任务接口返回内容
+    /// </summary>
+    public class HandleTaskResponse
+    {
+        /// <summary>
+        ///  是否成功
+        /// </summary>
+        public bool IsSuccess { get; set; }
+
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        public int TaskNo { get; set; }
+
+        /// <summary>
+        ///  消息
+        /// </summary>
+        public string Message { get; set; }
+    }
+}

+ 32 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/ApplyStockInLocRequest.cs

@@ -0,0 +1,32 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    /// 分配货位请求实体
+    /// </summary>
+    public class ApplyStockInLocRequest
+    {
+        /// <summary>
+        /// WMS任务号
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public int TaskNum { get; set; }
+
+        /// <summary>
+        /// 巷道号
+        /// </summary>
+        public int TunnelNum { get; set; }
+
+        /// <summary>
+        /// 取货地点设备编号
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string PickUpEquipmentNo { get; set; }
+
+        /// <summary>
+        ///  大小货 1表示小货 2表示大货
+        /// </summary>
+        public int Height { get; set; }
+    }
+}

+ 20 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/ApplyStockOutTaskRequest.cs

@@ -0,0 +1,20 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    public class ApplyStockOutTaskRequest
+    {
+        /// <summary>
+        ///  托盘类型
+        /// </summary>
+        public PalletType FJPalletType { get; set; }
+
+        /// <summary>
+        ///  巷道
+        /// </summary>
+        public int Tunnel { get; set; }
+
+        /// <summary>
+        ///  目标位置
+        /// </summary>
+        public string AddTo { get; set; }
+    }
+}

+ 18 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/CancelTaskVerifyRequest.cs

@@ -0,0 +1,18 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  取消或完成任务验证请求
+    /// </summary>
+    public class CancelTaskVerifyRequest
+    {
+        /// <summary>
+        ///  任务号集合
+        /// </summary>
+        public List<int> TaskNo { get; set; }
+
+        /// <summary>
+        ///  目标状态
+        /// </summary>
+        public int State { get; set; }
+    }
+}

+ 47 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/CompleteTaskRequest.cs

@@ -0,0 +1,47 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  完成任务请求
+    /// </summary>
+    public class CompleteTaskRequest
+    {
+        /// <summary>
+        /// WMS任务号
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public int TaskNum { get; set; }
+
+        /// <summary>
+        /// 操作类型(1.自动完成 2.手动完成)
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public CompleteTask OperationType { get; set; }
+
+        /// <summary>
+        /// WCS操作人名称
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string WCSUpdateName { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        public string Memo1 { get; set; } = "";
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        public string Memo2 { get; set; } = "";
+    }
+
+    /// <summary>
+    ///  完成任务类型
+    /// </summary>
+    public enum CompleteTask
+    {
+        自动完成 = 1,
+        手动完成 = 2
+    }
+}

+ 15 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/CompleteTaskVerifyRequest.cs

@@ -0,0 +1,15 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    public class CompleteTaskVerifyRequest
+    {
+        /// <summary>
+        ///  任务号集合
+        /// </summary>
+        public List<int> TaskNo { get; set; }
+
+        /// <summary>
+        ///  目标状态
+        /// </summary>
+        public int State { get; set; }
+    }
+}

+ 13 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/EnteMainLineRequest.cs

@@ -0,0 +1,13 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  工字轮/芯股进入主线扫码
+    /// </summary>
+    public class EnteMainLineRequest
+    {
+        /// <summary>
+        ///  工字轮条码集合
+        /// </summary>
+        public List<string> IShapedWheelCodes { get; set; }
+    }
+}

+ 3 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/FJBingPalletRequest.cs

@@ -0,0 +1,3 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+}

+ 56 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/FJBuildEmptyPalletsStockRequest.cs

@@ -0,0 +1,56 @@
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    
+
+    /// <summary>
+    ///  分拣业务类型
+    /// </summary>
+    public enum TaskBusType
+    {
+        /// <summary>
+        ///  默认
+        /// </summary>
+        [Description("默认")]
+        def = 0,
+
+        /// <summary>
+        ///  一楼人工入空托盘
+        /// </summary>
+        [Description("一楼人工入空托盘")]
+        OneLayerManualPallets = 1,
+
+        /// <summary>
+        ///  一楼自动入空托盘
+        /// </summary>
+        [Description("一楼自动入空托盘")]
+        OneLayerAutoPallets = 2,
+
+        /// <summary>
+        ///  手动出库
+        /// </summary>
+        [Description("手动出库")]
+        TaskBusType_FJ_ManualOut = 3,
+
+        /// <summary>
+        ///  二楼组盘
+        /// </summary>
+        [Description("二楼组盘")]
+        二楼组盘 = 4,
+
+        /// <summary>
+        ///  二楼空托盘组出库
+        /// </summary>
+        [Description("二楼空托盘组出库")]
+        二楼空托盘组出库 = 5,
+
+        /// <summary>
+        ///  组盘_托盘
+        /// </summary>
+        [Description("组盘_托盘")]
+        组盘_托盘 = 6,
+    }
+}

+ 18 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/FJEnteMainLineRequest.cs

@@ -0,0 +1,18 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  工字轮/芯股进入主线扫码
+    /// </summary>
+    public class FJEnteMainLineRequest
+    {
+        /// <summary>
+        ///  工字轮条码集合
+        /// </summary>
+        public List<string> IShapedWheelCodes { get; set; }
+
+        /// <summary>
+        ///  设备号
+        /// </summary>
+        public string equNo { get; set; }
+    }
+}

+ 9 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/GetTunnelEmptyConCountRequest.cs

@@ -0,0 +1,9 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  获取巷道剩余空轮请求参数
+    /// </summary>
+    public class GetTunnelEmptyConCountRequest
+    {
+    }
+}

+ 23 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/GetTunnelPriorityListRequest.cs

@@ -0,0 +1,23 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  获取巷道请求参数
+    /// </summary>
+    public class GetTunnelPriorityListRequest
+    {
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        public int TaskNum { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        public string Memo1 { get; set; } = "";
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        public string Memo2 { get; set; } = "";
+    }
+}

+ 54 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/I_WCS_GetInTaskRequest.cs

@@ -0,0 +1,54 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    /// 获取入库任务请求实体
+    /// </summary>
+    public class I_WCS_GetInTaskRequest
+    {
+        /// <summary>
+        /// 容器编号
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string ContainerBarCode { get; set; }
+
+        /// <summary>
+        /// 容器类型
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public int ContainerType { get; set; }
+
+        /// <summary>
+        /// 物料条码
+        /// </summary>
+        public string MatBarCode { get; set; }
+
+        /// <summary>
+        /// 仓库编码
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string WareHouseId { get; set; }
+
+        /// <summary>
+        /// 设备编号
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string EquipmentNo { get; set; }
+
+        /// <summary>
+        /// 目标位置
+        /// </summary>
+        public string EndPostion { get; set; }
+
+        /// <summary>
+        /// 货叉(直接申请货位使用)
+        /// </summary>
+        public int ForkNum { get; set; }
+
+        public string Memo1 { get; set; }
+        public string Memo2 { get; set; }
+        public string Memo3 { get; set; }
+        public string Memo4 { get; set; }
+    }
+}

+ 60 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/OneFloorWorkerBuildEmptyPalletsStockRequest.cs

@@ -0,0 +1,60 @@
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    public class OneFloorWorkerBuildEmptyPalletsStockRequest
+    {
+        /// <summary>
+        ///  托盘编码
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string PalletCode { get; set; }
+
+        /// <summary>
+        ///  托盘类型
+        /// </summary>
+        public PalletType PalletType { get; set; }
+
+        /// <summary>
+        ///  入库起始地址
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string StartLoc { get; set; }
+
+        /// <summary>
+        ///  仓库编码
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string WareCode { get; set; }
+
+        /// <summary>
+        ///  托盘数量
+        /// </summary>
+        [Description("托盘数量")]
+        public string PalletNum { get; set; }
+
+        /// <summary>
+        ///  大小货 1表示小货 2表示大货
+        /// </summary>
+        public int Height { get; set; }
+    }
+
+    /// <summary>
+    ///  托盘类型
+    /// </summary>
+    public enum PalletType
+    {
+        /// <summary>
+        ///  09使用的托盘
+        /// </summary>
+        [Description("09使用的托盘")]
+        Pallet09 = 1,
+
+        /// <summary>
+        ///  非09使用的托盘
+        /// </summary>
+        [Description("非09使用的托盘")]
+        PalletNo09 = 2,
+    }
+}

+ 36 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/PalletizingCreateseErrorTasksRequest.cs

@@ -0,0 +1,36 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  码垛创建异常工字轮信息
+    /// </summary>
+    public class PalletizingCreateseErrorTasksRequest
+    {
+        /// <summary>
+        ///  码垛创建异常工字轮信息
+        /// </summary>
+        /// <param name="equCode"></param>
+        /// <param name="type"></param>
+        /// <param name="warehouseCode"></param>
+        public PalletizingCreateseErrorTasksRequest(string equCode, string type, string warehouseCode)
+        {
+            WarehouseCode = warehouseCode;
+            EquNo = equCode;
+            Type = type;
+        }
+
+        /// <summary>
+        ///  设备号
+        /// </summary>
+        public string? EquNo { get; set; }
+
+        /// <summary>
+        ///  工资轮型号 9/18/34/50
+        /// </summary>
+        public string? Type { get; set; }
+
+        /// <summary>
+        ///  仓库编号
+        /// </summary>
+        public string? WarehouseCode { get; set; }
+    }
+}

+ 36 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/RingApplyPalletizingStockOutRequest.cs

@@ -0,0 +1,36 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  环形库申请码垛出库任务
+    /// </summary>
+    public class RingApplyPalletizingStockOutRequest
+    {
+        /// <summary>
+        ///  环形库申请码垛出库任务
+        /// </summary>
+        /// <param name="wareHouseCode"></param>
+        /// <param name="equCode"></param>
+        /// <param name="device"></param>
+        public RingApplyPalletizingStockOutRequest(string wareHouseCode, string equCode, string device)
+        {
+            WareHouseCode = wareHouseCode;
+            EquCode = equCode;
+            Device = device;
+        }
+
+        /// <summary>
+        /// 仓库编码
+        /// </summary>
+        public string WareHouseCode { get; set; }
+
+        /// <summary>
+        /// 设备编号
+        /// </summary>
+        public string EquCode { get; set; }
+
+        /// <summary>
+        ///  机械臂
+        /// </summary>
+        public string Device { get; set; }
+    }
+}

+ 13 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/SrmPickOutCompletedRequest.cs

@@ -0,0 +1,13 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    public class SrmPickOutCompletedRequest
+    {
+        /// <summary>
+        /// WMS任务号
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public int TaskNum { get; set; }
+    }
+}

+ 23 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/WcsUploadInfoRequest.cs

@@ -0,0 +1,23 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  WMS上抛信息请求
+    /// </summary>
+    public class WcsUploadInfoRequest
+    {
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        public int TaskCode { get; set; }
+
+        /// <summary>
+        /// 重量
+        /// </summary>
+        public decimal Weight { get; set; }
+
+        /// <summary>
+        /// RFID
+        /// </summary>
+        public string RFID { get; set; }
+    }
+}

+ 33 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Response/ApplyStockInLocResponse.cs

@@ -0,0 +1,33 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Response
+{
+    /// <summary>
+    /// 分配货位响应实体
+    /// </summary>
+    public class ApplyStockInLocResponse
+    {
+        /// <summary>
+        /// 货位号
+        /// </summary>
+        public string CellNo { get; set; }
+
+        /// <summary>
+        /// 巷道号
+        /// </summary>
+        public string TunnelNum { get; set; }
+
+        /// <summary>
+        /// 行
+        /// </summary>
+        public int Row { get; set; }
+
+        /// <summary>
+        /// 列
+        /// </summary>
+        public int Colomn { get; set; }
+
+        /// <summary>
+        /// 层
+        /// </summary>
+        public int Layer { get; set; }
+    }
+}

+ 18 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Response/GetTunnelEmptyConResponse.cs

@@ -0,0 +1,18 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Response
+{
+    /// <summary>
+    ///  获取巷道空轮数量
+    /// </summary>
+    public class GetTunnelEmptyConResponse
+    {
+        /// <summary>
+        /// 巷道
+        /// </summary>
+        public int Tunnel { get; set; }
+
+        /// <summary>
+        /// 空轮数量
+        /// </summary>
+        public int Count { get; set; }
+    }
+}

+ 46 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Response/I_WCS_GetInTaskResponse.cs

@@ -0,0 +1,46 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Response
+{
+    public class I_WCS_GetInTaskResponse : WcsContractApiResponse
+    {
+        /// <summary>
+        /// WMS任务号
+        /// </summary>
+        public string WMSTaskNum { get; set; } = "0";
+
+        /// <summary>
+        /// 任务类型(1:入库2:出库3:移库4:移动(搬运) 5:异常 )
+        /// </summary>
+        public int TaskType { get; set; }
+
+        /// <summary>
+        /// 仓库名称
+        /// </summary>
+        public string WareHouseName { get; set; } = "";
+
+        /// <summary>
+        /// 入库巷道(集合巷道,由WCS自行判断入到哪一个巷道,最前面的最优先。)
+        /// </summary>
+        public string TunnelNum { get; set; } = "";
+
+        /// <summary>
+        /// 目标位置(入库该地址为srm.如果是移动任务,该地址为WCS传递的目标位置。)
+        /// </summary>
+        public string EndPostion { get; set; } = "";
+
+        public int Priority { get; set; } = 0;
+
+        /// <summary>
+        /// 产品编码(半成品入库使用)
+        /// </summary>
+        public string ContainerCode { get; set; } = "";
+
+        /// <summary>
+        /// 0默认值  1载货  2空盘(包含一个托盘或一摞两种情况)
+        /// </summary>
+        public int ContainerType { get; set; } = 0;
+
+        public string Memo1 { get; set; } = "";
+        public string Memo2 { get; set; } = "";
+        public string Memo3 { get; set; } = "";
+    }
+}

+ 73 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Response/SRes.cs

@@ -0,0 +1,73 @@
+using System.ComponentModel;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Response
+{
+    /// <summary>
+    ///  WCS上传信息接口返回
+    /// </summary>
+    public class SRes
+    {
+        /// <summary>
+        /// 返回状态码
+        /// </summary>
+        public ResponseStatusCodeEnum ResCode { get; set; }
+
+        /// <summary>
+        /// 返回描述信息
+        /// </summary>
+        public string ResMsg { get; set; } = "成功";
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        public string Memo1 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        public string Memo2 { get; set; }
+
+        /// <summary>
+        /// 备用
+        /// </summary>
+        public string Memo3 { get; set; }
+    }
+
+    /// <summary>
+    ///  WMS返回DTO
+    /// </summary>
+    /// <typeparam name="T">泛型</typeparam>
+    public class SRes<T> : SRes
+    {
+        /// <summary>
+        /// 数据实体
+        /// </summary>
+        public T ResData { get; set; }
+
+        /// <summary>
+        ///  集合数据实体
+        /// </summary>
+        public List<T> ResDataList { get; set; }
+    }
+
+    public enum ResponseStatusCodeEnum
+    {
+        /// <summary>
+        /// 成功
+        /// </summary>
+        [Description("成功")]
+        Sucess = 200,
+
+        /// <summary>
+        /// 参数错误
+        /// </summary>
+        [Description("参数错误")]
+        AccountError = 1001,
+
+        /// <summary>
+        /// 业务逻辑错误
+        /// </summary>
+        [Description("业务逻辑错误")]
+        DataSaveErr = 1002,
+    }
+}

+ 11 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Response/WcsContractApiResponse.cs

@@ -0,0 +1,11 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Response
+{
+    public class WcsContractApiResponse
+    {
+        public bool ResType { get; set; }
+        public string ResMessage { get; set; }
+        public string Memo1 { get; set; }
+        public string Memo2 { get; set; }
+        public string Memo3 { get; set; }
+    }
+}

+ 0 - 0
WCS.WorkEngineering/Startup.cs → WCS.WorkEngineering/WebApi/Startup.cs


+ 1 - 1
WCS.WorkEngineering/WorkStart.cs

@@ -45,7 +45,7 @@ namespace WCS.WorkEngineering
                     switch (connectionString.Key)
                     {
                         case "WCSDB"://WCS基本数据库
-
+                            SqlSugarHelper.SetDefault(connectionString.Key);
                             break;
 
                         case "WCSDlog"://WCS日志数据库