dengjunjie
10 小时以前 441b6f8d257a01b2998253ef0515a201777d7e68
修改入库、移库、出库逻辑
已删除2个文件
已修改16个文件
已重命名5个文件
已添加2个文件
628 ■■■■■ 文件已修改
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/42e3722a-46ec-44ec-82fc-0bf3fa30c915.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b8217153-c75b-4b3f-a8c2-cd54835606ff.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/bbb10841-85aa-418a-a91c-a3229de6a4b9.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f27e7358-a337-44d8-8d18-bca47d5723ed.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f782a76a-5636-414d-a87a-39e5a61406ef.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ff6f6cdf-00f0-40e5-8759-0ada18529bb0.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_ShuttleCar.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_StackCrane.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarExtend/PartialTaskService.cs 242 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarJob.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneExtend/SignalInteraction.cs 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0637e846-7baa-4b58-b0a0-0a586d9c58e4.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0c2ae6db-773d-4b1d-ba5d-0680c7c92288.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4e3898f5-9ffc-4579-ad98-8cc5a550febc.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/42e3722a-46ec-44ec-82fc-0bf3fa30c915.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b8217153-c75b-4b3f-a8c2-cd54835606ff.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/bbb10841-85aa-418a-a91c-a3229de6a4b9.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f27e7358-a337-44d8-8d18-bca47d5723ed.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f782a76a-5636-414d-a87a-39e5a61406ef.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ff6f6cdf-00f0-40e5-8759-0ada18529bb0.vsidx
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -6,7 +6,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>E:\IISText\芜湖三一\WCS</_PublishTargetUrl>
    <History>True|2025-06-26T04:37:56.3484297Z;True|2025-06-23T11:05:39.8485399+08:00;True|2025-06-23T10:17:43.5808008+08:00;True|2025-06-23T09:54:40.9326213+08:00;True|2025-06-23T09:37:35.0797885+08:00;True|2025-06-20T10:31:11.5116619+08:00;True|2025-06-19T17:43:29.0660951+08:00;True|2025-06-19T15:33:15.5169520+08:00;True|2025-06-17T15:08:30.3988621+08:00;True|2025-06-17T11:49:45.7757057+08:00;False|2025-06-17T11:46:12.2872897+08:00;True|2025-06-17T11:14:34.8780060+08:00;True|2025-06-17T10:58:01.4890300+08:00;True|2025-05-20T11:49:19.9344988+08:00;True|2025-05-19T16:43:32.2157734+08:00;True|2025-05-19T16:12:01.9378787+08:00;True|2025-05-15T16:58:47.2930537+08:00;True|2025-05-15T13:17:15.3596644+08:00;True|2025-05-15T13:11:17.2616075+08:00;True|2025-05-15T12:57:49.7942020+08:00;True|2025-05-15T12:38:37.7925022+08:00;True|2025-05-15T12:28:15.6975809+08:00;True|2025-05-15T11:44:00.9991686+08:00;True|2025-05-15T10:37:45.5900920+08:00;True|2025-05-14T11:31:54.9438366+08:00;True|2025-05-14T09:59:15.2570833+08:00;True|2025-05-14T09:57:55.8054307+08:00;True|2025-05-14T09:39:18.3194886+08:00;True|2025-05-13T17:13:53.4476748+08:00;True|2025-05-13T15:21:11.2441407+08:00;True|2025-05-13T10:39:40.0223843+08:00;True|2025-05-09T11:16:41.1746344+08:00;True|2025-04-27T19:58:33.9706872+08:00;True|2025-04-27T14:52:52.9853720+08:00;True|2025-04-21T17:54:03.6534614+08:00;True|2025-04-19T10:28:25.0898569+08:00;True|2025-04-17T14:04:50.3243452+08:00;True|2025-03-27T16:23:43.2657011+08:00;True|2025-03-25T12:01:47.0052741+08:00;True|2025-02-14T17:36:18.5767695+08:00;True|2025-02-14T14:39:49.5856199+08:00;</History>
    <History>True|2025-07-04T01:01:52.1304268Z;True|2025-06-30T18:01:52.8637969+08:00;True|2025-06-30T17:01:56.3064177+08:00;True|2025-06-30T16:38:12.1057130+08:00;True|2025-06-28T14:30:49.7946659+08:00;True|2025-06-28T10:55:58.8222554+08:00;True|2025-06-28T08:47:43.7229176+08:00;True|2025-06-26T12:37:56.3484297+08:00;True|2025-06-23T11:05:39.8485399+08:00;True|2025-06-23T10:17:43.5808008+08:00;True|2025-06-23T09:54:40.9326213+08:00;True|2025-06-23T09:37:35.0797885+08:00;True|2025-06-20T10:31:11.5116619+08:00;True|2025-06-19T17:43:29.0660951+08:00;True|2025-06-19T15:33:15.5169520+08:00;True|2025-06-17T15:08:30.3988621+08:00;True|2025-06-17T11:49:45.7757057+08:00;False|2025-06-17T11:46:12.2872897+08:00;True|2025-06-17T11:14:34.8780060+08:00;True|2025-06-17T10:58:01.4890300+08:00;True|2025-05-20T11:49:19.9344988+08:00;True|2025-05-19T16:43:32.2157734+08:00;True|2025-05-19T16:12:01.9378787+08:00;True|2025-05-15T16:58:47.2930537+08:00;True|2025-05-15T13:17:15.3596644+08:00;True|2025-05-15T13:11:17.2616075+08:00;True|2025-05-15T12:57:49.7942020+08:00;True|2025-05-15T12:38:37.7925022+08:00;True|2025-05-15T12:28:15.6975809+08:00;True|2025-05-15T11:44:00.9991686+08:00;True|2025-05-15T10:37:45.5900920+08:00;True|2025-05-14T11:31:54.9438366+08:00;True|2025-05-14T09:59:15.2570833+08:00;True|2025-05-14T09:57:55.8054307+08:00;True|2025-05-14T09:39:18.3194886+08:00;True|2025-05-13T17:13:53.4476748+08:00;True|2025-05-13T15:21:11.2441407+08:00;True|2025-05-13T10:39:40.0223843+08:00;True|2025-05-09T11:16:41.1746344+08:00;True|2025-04-27T19:58:33.9706872+08:00;True|2025-04-27T14:52:52.9853720+08:00;True|2025-04-21T17:54:03.6534614+08:00;True|2025-04-19T10:28:25.0898569+08:00;True|2025-04-17T14:04:50.3243452+08:00;True|2025-03-27T16:23:43.2657011+08:00;True|2025-03-25T12:01:47.0052741+08:00;True|2025-02-14T17:36:18.5767695+08:00;True|2025-02-14T14:39:49.5856199+08:00;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_ShuttleCar.cs
@@ -134,19 +134,19 @@
            if (tasktype == 0)
            {
                if (string.IsNullOrEmpty(currentAddress))
                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy);
                else
                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy);
            }
            else
            {
                if (TaskInboundTypes.Contains(tasktype))
                {
                    _Task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy) ?? BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy);
                    _Task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy) ?? BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy);
                }
                else if (TaskOutboundTypes.Contains(tasktype))
                {
                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy) ?? BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy) ?? BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy);
                }
            }
            if (_Task != null) tasktype = _Task.TaskType;
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/PartialTaskService_StackCrane.cs
@@ -98,7 +98,7 @@
                    if (task.TargetIsPickPlace)
                    {
                        task.TaskState = (int)TaskRelocationStatusEnum.RelocationFinish;
                        WMStask.TaskState = task.TaskState;
                        //WMStask.TaskState = task.TaskState;
                        AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
                    }
                    else
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -119,6 +119,10 @@
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                    }
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                    {
                        task.TaskState = item.SourceIsPickPlace ? TaskRelocationStatusEnum.CarSource_Finish.ObjToInt() : TaskRelocationStatusEnum.RelocationNew.ObjToInt();
                    }
                    tasks.Add(task);
                }
                BaseDal.AddData(tasks);
@@ -318,14 +322,14 @@
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    task.TaskState = (int)TaskOutStatusEnum.OutPending;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    task.TaskState = (int)TaskInStatusEnum.InPending;
                }
                //if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                //{
                //    task.TaskState = (int)TaskOutStatusEnum.OutPending;
                //}
                //else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                //{
                //    task.TaskState = (int)TaskInStatusEnum.InPending;
                //}
                task.ExceptionMessage = message;
                task.ModifyDate = DateTime.Now;
                BaseDal.UpdateData(task);
@@ -619,9 +623,9 @@
        /// <param name="TaskState"></param>
        /// <param name="TaskType"></param>
        /// <returns></returns>
        public Dt_Task GetTaskState(int TaskState, int TaskType)
        public Dt_Task? GetTaskState(int TaskState, int TaskType)
        {
            Dt_Task task = null;
            Dt_Task? task = null;
            if (TaskState > 0 && TaskType > 0)
                task = BaseDal.QueryFirst(x => x.TaskState == TaskState && x.TaskType == TaskType);
            else if (TaskState > 0)
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarExtend/PartialTaskService.cs
@@ -14,29 +14,47 @@
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.WMSInfo;
using WIDESEAWCS_Tasks.ShuttleCarJob;
using System.Reflection.Metadata;
namespace WIDESEAWCS_Tasks
{
    partial class CommonShuttleCarJob
    {
        private readonly object _lockObject = new object();
        #region å †åž›æœºç§»è½¦å®Œæˆ
        /// <summary>
        /// èŽ·å–å †åž›æœºç§»è½¦/移库充电任务
        /// èŽ·å–å †åž›æœºå®Œæˆç©¿æ¢­è½¦å¾…æ‰§è¡Œä»»åŠ¡
        /// </summary>
        public void GetSC_CarFinish()
        {
            Dt_Task dt_Task = GetTask(TaskCarStatusEnum.SC_CarFinish.ObjToInt(), TaskOtherTypeEnum.RelocationCar.ObjToInt());//移车任务
            #region ç§»è½¦ä»»åŠ¡
            Dt_Task dt_Task = GetTask(TaskCarStatusEnum.SC_CarFinish.ObjToInt(), TaskOtherTypeEnum.RelocationCar.ObjToInt());
            if (dt_Task != null)
            {
                UpdateShuttleCar(dt_Task.ShuttleCarCode, dt_Task.CurrentAddress);
                dt_Task.TaskState = TaskCarStatusEnum.RelocationCarFinish.ObjToInt();
                _taskService.AddTask_Hty(dt_Task, TaskOperateTypeEnum.AutoComplete);
            }
            dt_Task = GetTask(CarChargingTaskEnum.CarChargingSC_CarFinish.ObjToInt(), TaskOtherTypeEnum.RelocationCarCharging.ObjToInt());//移车充电任务
            #endregion
            #region ç§»è½¦å……电任务
            dt_Task = GetTask(CarChargingTaskEnum.CarChargingSC_CarFinish.ObjToInt(), TaskOtherTypeEnum.RelocationCarCharging.ObjToInt());
            if (dt_Task != null)
            {
                UpdateShuttleCar(dt_Task.ShuttleCarCode, dt_Task.CurrentAddress);
                SendTask(dt_Task);//下发充电任务
            }
            #endregion
            #region ç§»åº“任务
            dt_Task = GetTask(TaskRelocationStatusEnum.SC_RelocationFinish.ObjToInt(), TaskRelocationTypeEnum.Relocation.ObjToInt());
            if (dt_Task != null) SendTask(dt_Task);
            #endregion
            #region å…¥åº“任务
            dt_Task = _taskRepository.QueryFirst(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish);
            if (dt_Task != null) SendTask(dt_Task);
            #endregion
        }
        #endregion
        /// <summary>
@@ -47,21 +65,110 @@
        public void UpdateShuttleCar(string ShuttleCarCode, string Address)
        {
            var ShuttleCar = QueryCode(ShuttleCarCode);
            string[] targetCodes = Address.Split("-");
            var Row = Convert.ToInt16(targetCodes[0]);
            if (Row == 3)
            {
                ShuttleCar.ShuttleCarPosition = Address;
                ShuttleCar.ShuttleCarPosition1 = Address;
            }
            else
            {
                //var a = Row == 1 ? 2.ToString("000") : 1.ToString("000");
                ShuttleCar.ShuttleCarPosition = Address;
                ShuttleCar.ShuttleCarPosition1 = Address;// a + "-" + targetCodes[1] + "-" + targetCodes[2];
            }
            ShuttleCar.ShuttleCarPosition = Address;
            ShuttleCar.ShuttleCarPosition1 = Address;
            _shuttleCarService.UpdateData(ShuttleCar);
        }
        public void GetShuttleCarTask(ShuttleCar shuttleCar, ShuttleCarTaskCommandR command)
        {
            #region æ–°å»ºç§»è½¦å……电任务
            Dt_Task CarCharging_Task = GetTask((int)CarChargingTaskEnum.CarChargingNew, (int)TaskOtherTypeEnum.RelocationCarCharging);
            if (CarCharging_Task != null)
            {
                Dt_Task? _Task = _taskRepository.QueryFirst(x => x.ShuttleCarCode == CarCharging_Task.ShuttleCarCode && x.TaskType != TaskOtherTypeEnum.RelocationCarCharging.ObjToInt());
                if (_Task == null) SendTask(CarCharging_Task);
                else if (_taskService.TaskOutboundTypes.Contains(_Task.TaskType) && _Task.TaskState >= TaskOutStatusEnum.SC_OutFinish.ObjToInt())
                    SendTask(CarCharging_Task);
            }
            #endregion
            #region æ–°å»ºç§»è½¦ä»»åŠ¡èµ·ç‚¹ä¸ºç©º
            Dt_Task? RelocationCar_Task = null;
            lock (_lockObject)
            {
                RelocationCar_Task = GetTask((int)TaskCarStatusEnum.CarNew, (int)TaskOtherTypeEnum.RelocationCar);
                if (RelocationCar_Task != null)
                {
                    if (string.IsNullOrEmpty(RelocationCar_Task.SourceAddress))
                    {
                        (bool, Dt_ShuttleCar) result = GetSourceTask(shuttleCar, command);
                        if (result.Item1)
                            UpdateSource(ref RelocationCar_Task, result.Item2);
                        else
                            GetShuttleCar(ref RelocationCar_Task, shuttleCar);//获取另外一个穿梭车信息
                    }
                }
                Thread.Sleep(1000);
            }
            #endregion
            #region å †åž›æœºç§»åº“完成前任务/堆垛机出库完成前任务
            //判断是否存在满足堆垛机入库的任务
            if (_taskRepository.QueryFirst(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress), _taskService.TaskOrderBy) == null)
            {
                Dt_Task dt_Task = _taskRepository.QueryFirst(x => _taskService.TaskRelocationTypes.Contains(x.TaskType) && x.TaskState < (int)TaskRelocationStatusEnum.SC_RelocationFinish, _taskService.TaskOrderBy) ??
                _taskRepository.QueryFirst(x => _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.TaskState < (int)TaskOutStatusEnum.SC_OutFinish, _taskService.TaskOrderBy);
                if (dt_Task != null)
                {
                    if (dt_Task.TaskState == (int)TaskRelocationStatusEnum.RelocationNew || dt_Task.TaskState == (int)TaskOutStatusEnum.OutNew)
                    {
                        var ShuttleCar = _shuttleCarService.QueryShuttleCar(dt_Task.SourceAddress);//判断起点是否有穿梭车
                        if (ShuttleCar == null)
                        {
                            if (RelocationCar_Task != null && string.IsNullOrEmpty(RelocationCar_Task.TargetAddress))
                            {
                                RelocationCar_Task.TargetAddress = dt_Task.SourceAddress;
                                RelocationCar_Task.NextAddress = dt_Task.SourceAddress;
                                _taskService.UpdateData(RelocationCar_Task);
                                _taskExecuteDetailService.AddTaskExecuteDetail(RelocationCar_Task.TaskNum, "更新移车任务目标地址");
                            }
                            else
                                _taskService.AddRelocationCarTask("", dt_Task.SourceAddress);
                        }
                        else
                        {
                            dt_Task.ShuttleCarCode = ShuttleCar.ShuttleCarCode;
                            SendTask(dt_Task);
                        }
                    }
                }
            }
            #endregion
            #region æ–°å»ºç§»è½¦ä»»åŠ¡ç»ˆç‚¹ä¸ºç©º
            if (RelocationCar_Task != null)
            {
                if (string.IsNullOrEmpty(RelocationCar_Task.TargetAddress))
                {
                    #region å‘WMS申请
                    var ShuttleCar = _shuttleCarService.QueryNoCode(RelocationCar_Task.ShuttleCarCode);
                    WebResponseContent content = new WebResponseContent();
                    var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.GetPosition + $"?position={RelocationCar_Task.SourceAddress}&&position1={ShuttleCar.ShuttleCarPosition}", "", headers: new Dictionary<string, string>());
                    if (ResultData.Result != null)
                    {
                        content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result);
                        if (content != null && content.Status)
                        {
                            RelocationCar_Task.TargetAddress = content.Message;
                            RelocationCar_Task.NextAddress = RelocationCar_Task.TargetAddress;
                            _taskService.UpdateData(RelocationCar_Task);
                            _taskExecuteDetailService.AddTaskExecuteDetail(RelocationCar_Task.TaskNum, "更新移车任务目标地址");
                        }
                    }
                    #endregion
                }
                if (!string.IsNullOrEmpty(RelocationCar_Task.SourceAddress) && !string.IsNullOrEmpty(RelocationCar_Task.TargetAddress) && !string.IsNullOrEmpty(RelocationCar_Task.ShuttleCarCode))
                {
                    Dt_Task? _Task = _taskRepository.QueryFirst(x => x.ShuttleCarCode == RelocationCar_Task.ShuttleCarCode && x.TaskType != TaskOtherTypeEnum.RelocationCar.ObjToInt());
                    if (_Task == null) SendTask(RelocationCar_Task);
                    else if (_taskService.TaskOutboundTypes.Contains(_Task.TaskType) && _Task.TaskState >= TaskOutStatusEnum.SC_OutFinish.ObjToInt())
                        SendTask(RelocationCar_Task);
                }
            }
            #endregion
        }
        private static readonly SemaphoreSlim _CarTaskObject = new SemaphoreSlim(1, 1);
        #region èŽ·å–ç§»è½¦ä»»åŠ¡
        /// <summary>
@@ -138,22 +245,23 @@
                #endregion
                #region ç©¿æ¢­è½¦ä»»åŠ¡
                var task = _taskService.ShuttleCarRelocationTask(shuttleCar.DeviceCode);//获取穿梭车移库任务
                if (task != null)
                {
                    if (!task.SourceIsPickPlace && task.ShuttleCarCode == shuttleCar.DeviceCode)
                    {
                        SendTask(task);
                    }
                }
                else
                {
                    var task = _taskService.ShuttleCarRelocationTask(shuttleCar.DeviceCode);//获取穿梭车移库任务
                    task = _taskService.QueryShuttleCarTask(shuttleCar.DeviceCode);
                    if (task != null)
                    {
                        if (!task.SourceIsPickPlace && task.ShuttleCarCode == shuttleCar.DeviceCode)
                        if (_taskService.TaskOutboundTypes.Contains(task.TaskType))
                        {
                            SendTask(task);
                        }
                    }
                    else
                    {
                        task = _taskService.QueryShuttleCarTask(shuttleCar.DeviceCode);
                        if (task != null)
                        {
                            if (_taskService.TaskOutboundTypes.Contains(task.TaskType) && !task.SourceIsPickPlace)
                            if (!task.SourceIsPickPlace && task.TaskState == (int)TaskOutStatusEnum.OutNew)
                            {
                                var ShuttleCar = _shuttleCarService.QueryShuttleCar(task.SourceAddress);//出库任务判断起点是否有穿梭车
                                if (ShuttleCar == null) _taskService.AddRelocationCarTask("", task.SourceAddress);
@@ -163,11 +271,12 @@
                                    SendTask(task);
                                }
                            }
                            else
                                SendTask(task);
                        }
                        else
                            SendTask(task);
                    }
                }
                #endregion
            }
            catch (Exception)
@@ -197,6 +306,7 @@
            _taskExecuteDetailService.AddTaskExecuteDetail(dt_Task.TaskNum, "更新移车任务起始地址");
        }
        #endregion
        /// <summary>
        /// åˆ¤æ–­å½“前穿梭车是否可以执行移库
        /// </summary>
@@ -209,40 +319,50 @@
            bool ok = false;
            if (command.Status == (short)ShuttleCarStatus.Standby && command.TaskTypeComplete == (short)ShuttleCarTaskComplete.Standby && command.Err_Status == (short)ShuttleCarErr.Normal)
            {
                #region åˆ¤æ–­å½“前穿梭车是否存在任务
                Dt_Task? _Task = _taskRepository.QueryFirst(x => x.SourceAddress == _ShuttleCar.ShuttleCarPosition);
                if (_taskRepository.QueryFirst(x => x.SourceAddress == _ShuttleCar.ShuttleCarPosition && _taskService.TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt()) != null)
                    return (ok, _ShuttleCar);
                Dt_Task? _Task = _taskRepository.QueryFirst(x => x.ShuttleCarCode == _ShuttleCar.ShuttleCarCode);
                if (_Task != null)
                {
                    if (_Task.TaskState == TaskOutStatusEnum.OutNew.ObjToInt() ||
                        _Task.TaskState == TaskRelocationStatusEnum.RelocationNew.ObjToInt() ||
                        _Task.TaskState == TaskCarStatusEnum.CarNew.ObjToInt() ||
                        _Task.TaskState == CarChargingTaskEnum.CarChargingNew.ObjToInt())
                    {
                        _Task.ShuttleCarCode = shuttleCar.DeviceCode;
                        SendTask(_Task);
                        return (ok, _ShuttleCar);
                    }
                }
                _Task = _taskRepository.QueryFirst(x => x.TargetAddress == _ShuttleCar.ShuttleCarPosition);
                if (_Task != null)
                {
                    if (_Task.TaskState == TaskInStatusEnum.SC_InFinish.ObjToInt() ||
                        _Task.TaskState == TaskRelocationStatusEnum.SC_RelocationFinish.ObjToInt() ||
                        _Task.TaskState == CarChargingTaskEnum.CarChargingSC_CarFinish.ObjToInt())
                    {
                        _Task.ShuttleCarCode = shuttleCar.DeviceCode;
                        SendTask(_Task);
                        return (ok, _ShuttleCar);
                    }
                }
                _Task = _taskRepository.QueryData(x => x.ShuttleCarCode == _ShuttleCar.ShuttleCarCode && _taskService.TaskOutboundTypes.Contains(x.TaskType)).OrderByDescending(x => x.CreateDate).FirstOrDefault();
                if (_Task != null)
                {
                    if (_Task.TaskState >= TaskOutStatusEnum.SC_OutFinish.ObjToInt())
                        _Task = null;
                }
                #endregion
                    ok = _taskService.TaskOutboundTypes.Contains(_Task.TaskType) && _Task.TaskState >= TaskOutStatusEnum.SC_OutFinish.ObjToInt();
                ok = _Task == null;
                #region åˆ¤æ–­å½“前穿梭车是否存在任务
                //Dt_Task? _Task = _taskRepository.QueryFirst(x => x.SourceAddress == _ShuttleCar.ShuttleCarPosition);
                //if (_Task != null)
                //{
                //    if (_Task.TaskState <= TaskOutStatusEnum.Car_OutFinish.ObjToInt() ||
                //        _Task.TaskState <= TaskRelocationStatusEnum.CarSource_Finish.ObjToInt() ||
                //        _Task.TaskState <= TaskCarStatusEnum.ShuttleCar_Finish.ObjToInt() ||
                //        _Task.TaskState <= CarChargingTaskEnum.CarCharging_Finish.ObjToInt())
                //    {
                //        //_Task.ShuttleCarCode = shuttleCar.DeviceCode;
                //        //SendTask(_Task);
                //        return (ok, _ShuttleCar);
                //    }
                //}
                //_Task = _taskRepository.QueryFirst(x => x.TargetAddress == _ShuttleCar.ShuttleCarPosition);
                //if (_Task != null)
                //{
                //    if (_Task.TaskState >= TaskInStatusEnum.Line_InFinish.ObjToInt() ||
                //        _Task.TaskState >= TaskRelocationStatusEnum.CarSource_Finish.ObjToInt() ||
                //        _Task.TaskState >= CarChargingTaskEnum.CarCharging_Finish.ObjToInt())
                //    {
                //        //_Task.ShuttleCarCode = shuttleCar.DeviceCode;
                //        //SendTask(_Task);
                //        return (ok, _ShuttleCar);
                //    }
                //}
                //_Task = _taskRepository.QueryData(x => x.SourceAddress == _ShuttleCar.ShuttleCarPosition &&
                //x.TaskState < TaskRelocationStatusEnum.CarSource_Finish.ObjToInt() &&
                //x.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt()).OrderByDescending(x => x.CreateDate).FirstOrDefault();
                //if (_Task != null) return (ok, _ShuttleCar);
                //_Task = _taskRepository.QueryData(x => x.ShuttleCarCode == _ShuttleCar.ShuttleCarCode && _taskService.TaskOutboundTypes.Contains(x.TaskType)).OrderByDescending(x => x.CreateDate).FirstOrDefault();
                //if (_Task != null)
                //{
                //    if (_Task.TaskState >= TaskOutStatusEnum.SC_OutFinish.ObjToInt())
                //        _Task = null;
                //}
                //ok = _Task == null;
                #endregion
            }
            if (!ok)
            {
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarJob.cs
@@ -85,9 +85,7 @@
                        }
                        #endregion
                        #region èŽ·å–å †åž›æœºç§»è½¦/移库完成任务
                        GetSC_CarFinish();
                        #endregion
                        GetSC_CarFinish();//堆垛机完成移车/移车充电/移库/入库任务
                        #region åˆ›å»ºç§»è½¦å……电任务
                        if (command.Err_Status == (short)ShuttleCarErr.LowBattery || command.ElectricQuantity <= (short)ShuttleCarErr.LowBattery)
@@ -105,7 +103,7 @@
                                        ShuttleCarTaskCommandR command1 = ReadCustomer<ShuttleCarTaskCommandR>(shuttleCar1, shuttleCar1.DeviceCode);//读取穿梭车信息
                                        if (command1 != null && command1.JoinStatus == 1)
                                        {
                                            if (command1.Status == (short)ShuttleCarStatus.Charging && command1.ElectricQuantity /*> command.ElectricQuantity*/ >= 50)
                                            if (command1.Status == (short)ShuttleCarStatus.Charging && command1.ElectricQuantity >= 50)
                                            {
                                                shuttleCar1.SetValue(ShuttleCarDBName.TaskType, (short)ShuttleCarStatus.QuitCharging);
                                            }
@@ -114,13 +112,26 @@
                                }
                                else
                                {
                                    string CarChargingStation = AppSettings.Configuration[nameof(CarChargingStation)];//充电位
                                                                                                                      //判断充电位是否有车
                                    string CarChargingStation = AppSettings.Configuration[nameof(CarChargingStation)];//判断充电位是否有车
                                    var ShuttleCar1 = _shuttleCarService.QueryShuttleCar(CarChargingStation);
                                    if (ShuttleCar1 != null && ShuttleCar1.ShuttleCarCode != shuttleCar.DeviceCode)
                                    {
                                        #region åˆ¤æ–­æ˜¯å¦å­˜åœ¨æ–°å»ºç§»è½¦ä»»åŠ¡
                                        if (_taskRepository.QueryFirst(x => x.ShuttleCarCode == ShuttleCar1.ShuttleCarCode) == null)
                                            _taskService.AddRelocationCarTask(ShuttleCar1.ShuttleCarPosition, "", ShuttleCar1.ShuttleCarCode);
                                        {
                                            var dt_Task = GetTask((int)TaskCarStatusEnum.CarNew, (int)TaskOtherTypeEnum.RelocationCar);
                                            if (dt_Task != null && string.IsNullOrEmpty(dt_Task.SourceAddress))
                                            {
                                                dt_Task.SourceAddress = ShuttleCar1.ShuttleCarPosition;
                                                dt_Task.CurrentAddress = dt_Task.SourceAddress;
                                                dt_Task.ShuttleCarCode = ShuttleCar1.ShuttleCarCode;
                                                _taskService.UpdateData(dt_Task);
                                                _taskExecuteDetailService.AddTaskExecuteDetail(dt_Task.TaskNum, "更新移车任务起始地址");
                                            }
                                            else
                                                _taskService.AddRelocationCarTask(ShuttleCar1.ShuttleCarPosition, "", ShuttleCar1.ShuttleCarCode);
                                        }
                                        #endregion
                                    }
                                    else
                                    {
@@ -134,18 +145,12 @@
                        #region èŽ·å–ç§»è½¦/出入库任务
                        if (command != null &&
                            (command.Status == (short)ShuttleCarStatus.Standby ||
                            command.Status == (short)ShuttleCarStatus.Charging) &&
                            (command.Status == (short)ShuttleCarStatus.Standby || command.Status == (short)ShuttleCarStatus.Charging) &&
                            command.TaskTypeComplete == (short)ShuttleCarTaskComplete.Standby &&
                            (command.Err_Status == (short)ShuttleCarErr.Normal ||
                            command.Err_Status == (short)ShuttleCarErr.LowBattery)
                            )
                            (command.Err_Status == (short)ShuttleCarErr.Normal || command.Err_Status == (short)ShuttleCarErr.LowBattery))
                        {
                            var dt_Task = GetTask(TaskRelocationStatusEnum.SC_RelocationFinish.ObjToInt(), TaskRelocationTypeEnum.Relocation.ObjToInt());//移库任务
                            if (dt_Task != null && shuttleCar.DeviceCode == dt_Task.ShuttleCarCode)
                                SendTask(dt_Task);
                            else
                                Get_CarTask(shuttleCar, command);
                            //Get_CarTask(shuttleCar, command);
                            GetShuttleCarTask(shuttleCar, command);
                        }
                        #endregion
                    }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -81,102 +81,24 @@
                        WriteDebug($"{commonStackerCrane.DeviceName}任务完成", $"{remark},任务号【{commonStackerCrane.CurrentTaskNum}】");
                        NormalCompleted(commonStackerCrane);
                    }
                    //DeviceProtocolDetailDTO? deviceProtocolDetail = commonStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.ProtocalDetailValue == commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.CompleteStatus).ToString() && x.DeviceProParamName == nameof(StackerCraneTaskCommandR.CompleteStatus));
                    //if (deviceProtocolDetail != null)
                    //{
                    //    MethodInfo? method = GetType().GetMethod(deviceProtocolDetail.ProtocolDetailType);
                    //    if (method != null) method.Invoke(this, new object[] { commonStackerCrane });
                    //}
                    #endregion
                    #region ä»»åŠ¡é€»è¾‘å¤„ç†
                    if (common.Onlinestate == (short)Onlinestate.online)
                    {
                        #region æŸ¥è¯¢ä»»åŠ¡,逻辑处理
                        if (common.RunStatus == (short)RunStatus.Standby)
                        {
                            var Task = _taskService.GetTaskState((int)TaskCarStatusEnum.ShuttleCar_Finish, (int)TaskOtherTypeEnum.RelocationCar);//获取移车任务
                            var Task1 = _taskService.GetTaskState((int)CarChargingTaskEnum.CarCharging_Finish, (int)TaskOtherTypeEnum.RelocationCarCharging);//获取移车充电任务
                            if (Task != null)
                            {
                                SendTask(commonStackerCrane, Task);
                            }
                            else if (Task1 != null)
                            {
                                SendTask(commonStackerCrane, Task1);
                            }
                            #region ç©¿æ¢­è½¦ç§»è½¦/充电任务
                            var Task = _taskService.GetTaskState((int)CarChargingTaskEnum.CarCharging_Finish, (int)TaskOtherTypeEnum.RelocationCarCharging) ??
                                _taskService.GetTaskState((int)TaskCarStatusEnum.ShuttleCar_Finish, (int)TaskOtherTypeEnum.RelocationCar);
                            if (Task != null) SendTask(commonStackerCrane, Task);
                            #endregion
                            else
                            {
                                Dt_Task? task = GetTask(commonStackerCrane);//获取堆垛机任务
                                if (task != null)
                                {
                                    if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation)//移库任务判断终点是否有穿梭车
                                    {
                                        if (task.SourceIsPickPlace && task.TaskState == (int)TaskRelocationStatusEnum.RelocationNew)
                                        {
                                            var ShuttleCar = GetShuttleCarInfo(task.TargetAddress);//移库任务判断终点是否有穿梭车
                                            if (ShuttleCar == null)
                                            {
                                                _taskService.AddRelocationCarTask("", task.TargetAddress);
                                            }
                                            else
                                                SendTask(commonStackerCrane, task);//下发堆垛机任务
                                        }
                                        else if (!task.SourceIsPickPlace && task.TaskState == (int)TaskRelocationStatusEnum.RelocationNew && task.ShuttleCarCode == null)
                                        {
                                            var ShuttleCar = GetShuttleCarInfo(task.SourceAddress);//移库任务判断起点是否有穿梭车
                                            if (ShuttleCar != null)
                                            {
                                                task.ShuttleCarCode = ShuttleCar.ShuttleCarCode;
                                                _taskService.UpdateData(task);
                                            }
                                            else _taskService.AddRelocationCarTask("", task.SourceAddress);
                                        }
                                        else if (/*!task.TargetIsPickPlace &&*/ task.TaskState == (int)TaskRelocationStatusEnum.CarSource_Finish)
                                        {
                                            var ShuttleCar = GetShuttleCarInfo(task.TargetAddress);//移库任务判断终点是否有穿梭车
                                            if (task.TargetIsPickPlace && ShuttleCar != null)//移走
                                            {
                                                _taskService.AddRelocationCarTask(task.TargetAddress, "", ShuttleCar.ShuttleCarCode);
                                            }
                                            else if (!task.TargetIsPickPlace && ShuttleCar == null)
                                            {
                                                _taskService.AddRelocationCarTask("", task.TargetAddress);
                                                #region æŸ¥è¯¢
                                                task = _taskService.QueryCarOutFinish();
                                                if (task != null) SendTask(commonStackerCrane, task);//下发堆垛机任务
                                                #endregion
                                            }
                                            else
                                            {
                                                task.ShuttleCarCode = ShuttleCar?.ShuttleCarCode;
                                                _taskService.UpdateData(task);
                                                SendTask(commonStackerCrane, task);//下发堆垛机任务
                                            }
                                        }
                                    }
                                    else if (_taskService.TaskInboundTypes.Contains(task.TaskType))
                                    {
                                        var ShuttleCar = GetShuttleCarInfo(task.TargetAddress);//入库任务判断终点是否有穿梭车
                                        if (task.TargetIsPickPlace && ShuttleCar != null)//移走
                                        {
                                            _taskService.AddRelocationCarTask(task.TargetAddress, "", ShuttleCar.ShuttleCarCode);
                                        }
                                        else if (!task.TargetIsPickPlace && ShuttleCar == null)
                                        {
                                            _taskService.AddRelocationCarTask("", task.TargetAddress);
                                        }
                                        else
                                        {
                                            task.ShuttleCarCode = ShuttleCar?.ShuttleCarCode;
                                            _taskService.UpdateData(task);
                                            SendTask(commonStackerCrane, task);//下发堆垛机任务
                                        }
                                    }
                                    else
                                        SendTask(commonStackerCrane, task);//下发堆垛机任务
                                }
                                Task = GetStackerCraneTask();
                                if (Task != null) SendTask(commonStackerCrane, Task);
                            }
                        }
                        #endregion
                    }
@@ -189,6 +111,7 @@
            }
            return Task.CompletedTask;
        }
        #region ä»»åŠ¡ä¸‹å‘ç»™å †åž›æœº
        private void SendTask(SpeStackerCrane commonStackerCrane, Dt_Task task)
        {
@@ -212,26 +135,9 @@
        }
        #endregion
        #region ä»»åŠ¡å®Œæˆ
        /// <summary>
        /// ä»»åŠ¡å®Œæˆäº‹ä»¶è®¢é˜…çš„æ–¹æ³•
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
        {
            CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
            if (commonStackerCrane != null)
            {
                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                {
                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                    _taskService.StackCraneTaskCompleted(e.TaskNum);
                    commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                }
            }
        }
        /// <summary>
        /// ä»»åŠ¡æ­£å¸¸å®Œæˆ
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
        /// <param name="commonStackerCrane"></param>
        public void NormalCompleted(SpeStackerCrane commonStackerCrane)
@@ -241,6 +147,69 @@
                var content = _taskService.StackCraneTaskCompleted(commonStackerCrane.CurrentTaskNum);
                commonStackerCrane.SetValue(StackerCraneDBName.ConfirmComplete, content.Status);
            }
        }
        #endregion
        private Dt_Task? GetStackerCraneTask()
        {
            Dt_Task? task = null;
            task = _taskRepository.QueryFirst(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress), _taskService.TaskOrderBy);//入库任务
            if (task != null) task = GetTaskOk(task);
            if (task == null)
            {
                task = _taskRepository.QueryFirst(x => _taskService.TaskRelocationTypes.Contains(x.TaskType) &&
            x.TaskState == (int)TaskRelocationStatusEnum.CarSource_Finish, _taskService.TaskOrderBy) ??//移库任务
            _taskRepository.QueryFirst(x => _taskService.TaskOutboundTypes.Contains(x.TaskType) &&
            x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish, _taskService.TaskOrderBy);//出库任务
                if (task != null) task = GetTaskOk(task);
            }
            return task;
        }
        /// <summary>
        /// åˆ¤æ–­ä»»åŠ¡æ˜¯å¦æ»¡è¶³å †åž›æœºæ‰§è¡Œ
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public Dt_Task? GetTaskOk(Dt_Task? task)
        {
            #region å…¥åº“/移库任务
            if (_taskService.TaskInboundTypes.Contains(task.TaskType) || _taskService.TaskRelocationTypes.Contains(task.TaskType))
            {
                var ShuttleCar = GetShuttleCarInfo(task.TargetAddress);//入库任务判断终点是否有穿梭车
                if (task.TargetIsPickPlace && ShuttleCar != null)//移走
                {
                    _taskService.AddRelocationCarTask(task.TargetAddress, "", ShuttleCar.ShuttleCarCode);
                    task = null;
                }
                else if (!task.TargetIsPickPlace && ShuttleCar == null)
                {
                    _taskService.AddRelocationCarTask("", task.TargetAddress);
                    task = null;
                }
                else
                {
                    if (ShuttleCar != null)
                    {
                        if (_taskRepository.QueryFirst(x => x.TaskType != task.TaskType && x.ShuttleCarCode == ShuttleCar.ShuttleCarCode) != null)
                            task = null;
                        else
                        {
                            task.ShuttleCarCode = ShuttleCar.ShuttleCarCode;
                            _taskService.UpdateData(task);
                        }
                    }
                }
            }
            #endregion
            #region å‡ºåº“任务
            else
                task = OutTaskStationIsOccupied(task);
            #endregion
            return task;
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
@@ -263,8 +232,8 @@
            #region å‡ºå…¥åº“任务
            else
            {
                task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                if (task != null) return task;
                //task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                //if (task != null) return task;
                if (commonStackerCrane.LastTaskType == null)
                {
                    task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
@@ -273,7 +242,7 @@
                {
                    if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode) ?? _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                        task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                        if (task == null)
                        {
                            task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
@@ -281,7 +250,7 @@
                    }
                    else
                    {
                        task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode) ?? _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                        task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode) /*?? _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode)*/;
                        if (task == null)
                        {
                            task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneExtend/SignalInteraction.cs
@@ -64,44 +64,83 @@
                    }
                    else
                    {
                        Dt_ShuttleCar? shuttleCar1 = _shuttleCarService.QueryCode(task.ShuttleCarCode);
                        if (task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt() && task.Remark == "")
                        if (task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt())
                        {
                            shuttleCar1 = _shuttleCarService.QueryNoCode(task.ShuttleCarCode);
                            task.Remark = shuttleCar1.ShuttleCarCode;
                            _taskService.UpdateData(task);
                            var shuttleCar2 = _shuttleCarService.QueryNoCode(task.ShuttleCarCode);
                            ShuttleCar shuttleCarA = Storage.Devices.FirstOrDefault(x => x.DeviceCode == shuttleCar2.ShuttleCarCode) as ShuttleCar;
                            ShuttleCar shuttleCarB = Storage.Devices.FirstOrDefault(x => x.DeviceCode == task.ShuttleCarCode) as ShuttleCar;
                            #region å–è´§
                            if (ASRSRqtGetGoods)
                            {
                                shuttleCarA.SetValue(ShuttleCarDBName.ASRSRqtGetGoods, ASRSRqtGetGoods, shuttleCarA.DeviceCode);
                                var AGVAlwASRSGetGoods = shuttleCarA.GetValue<ShuttleCarDBName, bool>(ShuttleCarDBName.AGVAlwASRSGetGoods, shuttleCarA.DeviceCode);//允许取货
                                if (AGVAlwASRSGetGoods)
                                    commonStackerCrane.SetValue(StackerCraneDBName.AGVAlwASRSGetGoods, AGVAlwASRSGetGoods);
                                WriteDebug($"{commonStackerCrane.DeviceName}请求取货", $"【{shuttleCarA.DeviceName}】{(AGVAlwASRSGetGoods ? "允许" : "不允许")}取货,任务号【{task.TaskNum}】");
                            }
                            #endregion
                            #region å–货完成
                            if (ASRSGetGoodsDone)
                            {
                                shuttleCarA.SetValue(ShuttleCarDBName.ASRSGetGoodsDone, ASRSGetGoodsDone, shuttleCarA.DeviceCode);
                                WriteDebug($"{commonStackerCrane.DeviceName}取货完成", $"【{shuttleCarA.DeviceName}】,任务号【{task.TaskNum}】");
                            }
                            #endregion
                            #region æ”¾è´§
                            if (ASRSRqtPutGoods)
                            {
                                shuttleCarB.SetValue(ShuttleCarDBName.ASRSRqtPutGoods, ASRSRqtPutGoods, shuttleCarB.DeviceCode);
                                var AGVAlwASRSPuttGoods = shuttleCarB.GetValue<ShuttleCarDBName, bool>(ShuttleCarDBName.AGVAlwASRSPuttGoods, shuttleCarB.DeviceCode);//允许放货
                                if (AGVAlwASRSPuttGoods)
                                    commonStackerCrane.SetValue(StackerCraneDBName.AGVAlwASRSPuttGoods, AGVAlwASRSPuttGoods);
                                WriteDebug($"{commonStackerCrane.DeviceName}请求放货", $"【{shuttleCarB.DeviceName}】{(AGVAlwASRSPuttGoods ? "允许" : "不允许")}放货,任务号【{task.TaskNum}】");
                            }
                            #endregion
                            #region æ”¾è´§å®Œæˆ
                            if (ASRSPutAGoodsDone)
                            {
                                shuttleCarB.SetValue(ShuttleCarDBName.ASRSPutAGoodsDone, ASRSPutAGoodsDone, shuttleCarB.DeviceCode);
                                WriteDebug($"{commonStackerCrane.DeviceName}放货完成", $"【{shuttleCarA.DeviceName}】,任务号【{task.TaskNum}】");
                            }
                            #endregion
                        }
                        if (shuttleCar1 != null)
                        else
                        {
                            ShuttleCar shuttleCar = Storage.Devices.FirstOrDefault(x => x.DeviceName == shuttleCar1.ShuttleCarName) as ShuttleCar;
                            ShuttleCar shuttleCar = Storage.Devices.FirstOrDefault(x => x.DeviceCode == task.ShuttleCarCode) as ShuttleCar;
                            if (shuttleCar != null)
                            {
                                shuttleCar.SetValue(ShuttleCarDBName.ASRSRqtGetAGV, ASRSRqtGetAGV, shuttleCar.DeviceCode);
                                if (ASRSRqtGetAGV)
                                    WriteDebug($"{commonStackerCrane.DeviceName}请求取车", $"任务号【{task.TaskNum}】");
                                shuttleCar.SetValue(ShuttleCarDBName.ASRSRqtGetGoods, ASRSRqtGetGoods, shuttleCar.DeviceCode);
                                if (ASRSRqtGetGoods)
                                    WriteDebug($"{commonStackerCrane.DeviceName}请求取货", $"任务号【{task.TaskNum}】");
                                shuttleCar.SetValue(ShuttleCarDBName.ASRSRqtPutGoods, ASRSRqtPutGoods, shuttleCar.DeviceCode);
                                if (ASRSRqtPutGoods)
                                    WriteDebug($"{commonStackerCrane.DeviceName}请求放货", $"任务号【{task.TaskNum}】");
                                var AGVAlwASRSGetAGV = shuttleCar.GetValue<ShuttleCarDBName, bool>(ShuttleCarDBName.AGVAlwASRSGetAGV, shuttleCar.DeviceCode);//允许取车
                                commonStackerCrane.SetValue(StackerCraneDBName.AGVAlwASRSGetAGV, AGVAlwASRSGetAGV);
                                if (AGVAlwASRSGetAGV)
                                    WriteDebug($"{shuttleCar.DeviceName}允许取车", $"任务号【{task.TaskNum}】");
                                if (ASRSRqtGetAGV)
                                    WriteDebug($"{commonStackerCrane.DeviceName}请求取车", $"【{shuttleCar.DeviceName}】{(AGVAlwASRSGetAGV ? "允许" : "不允许")}取车,任务号【{task.TaskNum}】");
                                var AGVAlwASRSGetGoods = shuttleCar.GetValue<ShuttleCarDBName, bool>(ShuttleCarDBName.AGVAlwASRSGetGoods, shuttleCar.DeviceCode);//允许取货
                                commonStackerCrane.SetValue(StackerCraneDBName.AGVAlwASRSGetGoods, AGVAlwASRSGetGoods);
                                if (AGVAlwASRSGetGoods)
                                    WriteDebug($"{shuttleCar.DeviceName}允许取货", $"任务号【{task.TaskNum}】");
                                if (ASRSRqtGetGoods)
                                    WriteDebug($"{commonStackerCrane.DeviceName}请求取货", $"【{shuttleCar.DeviceName}】{(AGVAlwASRSGetGoods ? "允许" : "不允许")}取货,任务号【{task.TaskNum}】");
                                var AGVAlwASRSPuttGoods = shuttleCar.GetValue<ShuttleCarDBName, bool>(ShuttleCarDBName.AGVAlwASRSPuttGoods, shuttleCar.DeviceCode);//允许放货
                                commonStackerCrane.SetValue(StackerCraneDBName.AGVAlwASRSPuttGoods, AGVAlwASRSPuttGoods);
                                if (AGVAlwASRSPuttGoods)
                                    WriteDebug($"{shuttleCar.DeviceName}允许放货", $"任务号【{task.TaskNum}】");
                                if (ASRSRqtPutGoods)
                                    WriteDebug($"{commonStackerCrane.DeviceName}请求放货", $"【{shuttleCar.DeviceName}】{(AGVAlwASRSPuttGoods ? "允许" : "不允许")}放货,任务号【{task.TaskNum}】");
                                commonStackerCrane.SetValue(StackerCraneDBName.AGVAlwASRSPutAGV, ASRSRqtPutAGV);
                                if (ASRSRqtPutAGV)
@@ -109,14 +148,15 @@
                                shuttleCar.SetValue(ShuttleCarDBName.ASRSGetAGVDone, ASRSGetAGVDone, shuttleCar.DeviceCode);
                                if (ASRSGetAGVDone)
                                    WriteDebug($"{commonStackerCrane.DeviceName}取车完成", $"任务号【{task.TaskNum}】");
                                    WriteDebug($"{commonStackerCrane.DeviceName}取车完成", $"【{shuttleCar.DeviceName}】,任务号【{task.TaskNum}】");
                                shuttleCar.SetValue(ShuttleCarDBName.ASRSGetGoodsDone, ASRSGetGoodsDone, shuttleCar.DeviceCode);
                                if (ASRSGetGoodsDone)
                                    WriteDebug($"{commonStackerCrane.DeviceName}取货完成", $"任务号【{task.TaskNum}】");
                                    WriteDebug($"{commonStackerCrane.DeviceName}取货完成", $"【{shuttleCar.DeviceName}】,任务号【{task.TaskNum}】");
                                shuttleCar.SetValue(ShuttleCarDBName.ASRSPutAGoodsDone, ASRSPutAGoodsDone, shuttleCar.DeviceCode);
                                if (ASRSPutAGoodsDone)
                                    WriteDebug($"{commonStackerCrane.DeviceName}放货完成", $"任务号【{task.TaskNum}】");
                                //shuttleCar.SetValue(ShuttleCarDBName.ASRSPutAGVDone, ASRSPutAGVDone, shuttleCar.DeviceCode);
                                    WriteDebug($"{commonStackerCrane.DeviceName}放货完成", $"【{shuttleCar.DeviceName}】,任务号【{task.TaskNum}】");
                            }
                        }
                    }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0637e846-7baa-4b58-b0a0-0a586d9c58e4.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0c2ae6db-773d-4b1d-ba5d-0680c7c92288.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4e3898f5-9ffc-4579-ad98-8cc5a550febc.vsidx
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService.cs
@@ -76,12 +76,12 @@
        /// èŽ·å–å¯ç§»åº“è´§ä½
        /// </summary>
        /// <returns></returns>
        public Dt_LocationInfo AssignLocation()
        public Dt_LocationInfo AssignLocation(List<string> LocationCodes)
        {
            Dt_LocationInfo? locationInfo = null;
            string CarChargingStation = AppSettings.Configuration[nameof(CarChargingStation)];//获取穿梭车充电位置
            var ChargingStations = CarChargingStation.Split(",");
            locationInfo = BaseDal.QueryFirst(x => !ChargingStations.Contains(x.LocationCode) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.Row == 2, _emptyAssignOrderBy);
            locationInfo = BaseDal.QueryFirst(x => !ChargingStations.Contains(x.LocationCode) && !LocationCodes.Contains(x.LocationCode) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.Row == 2, _emptyAssignOrderBy);
            if (locationInfo == null)
                locationInfo = BaseDal.QueryFirst(x => !ChargingStations.Contains(x.LocationCode) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.Row == 1), _emptyAssignOrderBy);
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs
@@ -47,7 +47,7 @@
        /// èŽ·å–å¯ç§»åº“è´§ä½
        /// </summary>
        /// <returns></returns>
        Dt_LocationInfo? AssignLocation();
        Dt_LocationInfo? AssignLocation(List<string> LocationCodes);
        /// <summary>
        /// æ ¹æ®è´§ä½ç¼–号获取货位信息
        /// </summary>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -254,17 +254,17 @@
                task.TargetAddress = task.NextAddress;
                string[] targetCodes = task.NextAddress.Split("-");
                var Row = Convert.ToInt16(targetCodes[0]);
                task.TargetIsPickPlace = /*Row > 1 ?*/ locationInfo.MaxQty - locationInfo.CurrentQty == 1;
                task.TargetIsPickPlace = locationInfo.MaxQty - locationInfo.CurrentQty == 1;
                task.SourceIsPickPlace = false;
                stockInfo.LocationCode = locationInfo.LocationCode;
                stockInfo.StockStatus = StockStatusEmun.入库中.ObjToInt();
                stockInfoDetail.Status = StockStatusEmun.入库中.ObjToInt();
                locationInfo.CurrentQty++;
                if (locationInfo.MaxQty < locationInfo.CurrentQty) locationInfo.CurrentQty = locationInfo.MaxQty;
                stockInfo.SerialNumber = locationInfo.CurrentQty;
                orderDetail.OverInQuantity++;
                if (orderDetail.OverInQuantity > orderDetail.ReceiptQuantity)
                    orderDetail.OverInQuantity = orderDetail.ReceiptQuantity;
                if (locationInfo.MaxQty < locationInfo.CurrentQty) locationInfo.CurrentQty = locationInfo.MaxQty;
                /*if (locationInfo.MaxQty == 12)*/
                locationInfo.EnableStatus = EnableStatusEnum.OnlyOut.ObjToInt();
                locationInfo.LocationStatus = LocationStatusEnum.Inbounding.ObjToInt();
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -180,14 +180,17 @@
            }
            if (stockInfos1.Count > 0)
            {
                Dt_LocationInfo? locationInfo2 = _basicService.LocationInfoService.AssignLocation();
                if (locationInfo2 == null) throw new Exception("无可移库货位");
                locationInfo2.LocationStatus = LocationStatusEnum.Relocationing.ObjToInt();
                locationInfos.Add(locationInfo2);
                List<string> strings = new List<string>();
                foreach (var item in stockInfos1.GroupBy(x => x.LocationCode))
                {
                    Dt_LocationInfo? locationInfo2 = _basicService.LocationInfoService.AssignLocation(strings);
                    if (locationInfo2 == null) throw new Exception("无可移库货位");
                    locationInfo2.LocationStatus = LocationStatusEnum.Relocationing.ObjToInt();
                    strings.Add(locationInfo2.LocationCode);
                    locationInfos.Add(locationInfo2);
                    foreach (var item1 in item.OrderByDescending(x => x.SerialNumber))
                    {
                        locationInfo2.CurrentQty++;
                        Dt_Task task = new()
                        {
                            CurrentAddress = item1.LocationCode,
@@ -204,8 +207,8 @@
                            TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
                        };
                        dt_Tasks.Add(task);
                        item1.SerialNumber = locationInfo2.CurrentQty;
                        item1.StockStatus = StockStatusEmun.移库中.ObjToInt();
                        //locationInfo2.CurrentQty++;
                    }
                }
            }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -453,7 +453,10 @@
                            overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
                            if (outboundOrderDetail.OverOutQuantity == outboundOrderDetail.OrderQuantity)
                            {
                                var outboundOrderdetail = outboundOrder.Details.First(x => x.Id == outboundOrderDetail.Id);
                                outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                                outboundOrderdetail.OverOutQuantity = outboundOrderDetail.OverOutQuantity;
                                outboundOrderdetail.OrderDetailStatus = outboundOrderDetail.OrderDetailStatus;
                                overCount++;
                            }
                        }
@@ -496,9 +499,9 @@
                Dt_LocationInfo Targetlocation = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);//目标货位
                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);//托盘库存
                Sourcelocation.CurrentQty--;
                Targetlocation.CurrentQty++;
                //Targetlocation.CurrentQty++;
                stockInfo.LocationCode = Targetlocation.LocationCode;
                stockInfo.SerialNumber = Targetlocation.CurrentQty;
                //stockInfo.SerialNumber = Targetlocation.CurrentQty;
                stockInfo.StockStatus = StockStatusEmun.已入库.ObjToInt();
                if (Sourcelocation.CurrentQty == 0) Sourcelocation.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                Dt_Task _Task = BaseDal.QueryFirst(x => x.TaskNum != task.TaskNum && x.TaskType == task.TaskType && x.SourceAddress == Sourcelocation.LocationCode && x.TargetAddress == Targetlocation.LocationCode);
@@ -549,7 +552,7 @@
                List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.Repository.LocationCodesGetStockInfos(new List<string> { stockInfo.LocationCode }).Where(x => x.StockStatus == StockStatusEmun.已入库.ObjToInt()).ToList();
                if (task.TaskType == TaskTypeEnum.PalletInbound.ObjToInt())
                {
                    stockInfo.SerialNumber = stockInfos.Count + 1;
                    //stockInfo.SerialNumber = stockInfos.Count + 1;
                    stockInfo.InDate = DateTime.Now;
                    stockInfo.StockStatus = StockStatusEmun.已入库.ObjToInt();
                    stockInfoDetail.Status = StockStatusEmun.已入库.ObjToInt();
@@ -598,7 +601,7 @@
                }
                #endregion
                stockInfo.SerialNumber = stockInfos.Count + 1;
                //stockInfo.SerialNumber = stockInfos.Count + 1;
                stockInfo.InDate = DateTime.Now;
                stockInfo.StockStatus = StockStatusEmun.已入库.ObjToInt();
                stockInfoDetail.Status = StockStatusEmun.已入库.ObjToInt();
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -6,7 +6,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>E:\IISText\芜湖三一\WMS</_PublishTargetUrl>
    <History>True|2025-06-23T02:41:48.4640291Z;True|2025-06-20T12:54:56.1810887+08:00;True|2025-06-20T10:43:00.0676097+08:00;True|2025-05-21T14:27:23.3463661+08:00;True|2025-05-20T09:58:56.9385057+08:00;True|2025-05-20T09:50:56.2630438+08:00;True|2025-05-19T16:43:28.3327270+08:00;True|2025-05-19T16:39:14.2351867+08:00;True|2025-05-15T10:36:19.1660612+08:00;True|2025-05-13T15:37:28.0425978+08:00;True|2025-05-13T15:21:45.1951276+08:00;True|2025-05-07T17:51:44.1784374+08:00;True|2025-04-27T14:53:35.8458295+08:00;True|2025-04-18T17:17:44.2558979+08:00;True|2025-04-18T11:56:16.2333182+08:00;True|2025-04-17T14:04:11.2641163+08:00;True|2025-03-27T16:24:43.5017432+08:00;True|2025-03-18T16:14:40.3832855+08:00;True|2025-02-18T14:43:41.4214052+08:00;True|2025-02-17T16:47:47.1464719+08:00;True|2025-02-14T13:02:33.0683296+08:00;True|2025-02-11T13:55:27.2837544+08:00;True|2025-02-11T13:54:12.7390669+08:00;True|2025-02-10T16:40:04.5645895+08:00;True|2025-02-10T16:24:19.3540916+08:00;True|2025-02-10T14:24:04.2140946+08:00;True|2025-02-10T14:01:37.7817950+08:00;True|2025-02-10T13:58:35.5650499+08:00;True|2025-02-10T13:49:31.5513866+08:00;False|2025-02-10T13:49:18.2135044+08:00;True|2025-02-10T11:32:33.6168149+08:00;False|2025-02-10T11:31:56.1964136+08:00;False|2025-02-10T11:31:03.0326897+08:00;True|2025-02-10T11:25:27.6553142+08:00;True|2025-01-18T15:10:06.4957375+08:00;False|2025-01-18T15:09:32.6588841+08:00;True|2025-01-18T15:07:28.0952526+08:00;True|2025-01-18T15:05:38.5243008+08:00;True|2025-01-18T15:03:32.1684791+08:00;True|2025-01-18T15:00:14.2579995+08:00;False|2025-01-18T14:59:17.3888861+08:00;False|2025-01-18T14:57:59.9512472+08:00;True|2025-01-18T13:57:17.7790615+08:00;True|2025-01-18T12:53:22.4660853+08:00;True|2025-01-17T17:26:35.1781925+08:00;True|2025-01-17T16:54:55.6218094+08:00;</History>
    <History>True|2025-07-04T01:02:45.7658413Z;True|2025-06-28T12:22:26.5226251+08:00;True|2025-06-23T10:41:48.4640291+08:00;True|2025-06-20T12:54:56.1810887+08:00;True|2025-06-20T10:43:00.0676097+08:00;True|2025-05-21T14:27:23.3463661+08:00;True|2025-05-20T09:58:56.9385057+08:00;True|2025-05-20T09:50:56.2630438+08:00;True|2025-05-19T16:43:28.3327270+08:00;True|2025-05-19T16:39:14.2351867+08:00;True|2025-05-15T10:36:19.1660612+08:00;True|2025-05-13T15:37:28.0425978+08:00;True|2025-05-13T15:21:45.1951276+08:00;True|2025-05-07T17:51:44.1784374+08:00;True|2025-04-27T14:53:35.8458295+08:00;True|2025-04-18T17:17:44.2558979+08:00;True|2025-04-18T11:56:16.2333182+08:00;True|2025-04-17T14:04:11.2641163+08:00;True|2025-03-27T16:24:43.5017432+08:00;True|2025-03-18T16:14:40.3832855+08:00;True|2025-02-18T14:43:41.4214052+08:00;True|2025-02-17T16:47:47.1464719+08:00;True|2025-02-14T13:02:33.0683296+08:00;True|2025-02-11T13:55:27.2837544+08:00;True|2025-02-11T13:54:12.7390669+08:00;True|2025-02-10T16:40:04.5645895+08:00;True|2025-02-10T16:24:19.3540916+08:00;True|2025-02-10T14:24:04.2140946+08:00;True|2025-02-10T14:01:37.7817950+08:00;True|2025-02-10T13:58:35.5650499+08:00;True|2025-02-10T13:49:31.5513866+08:00;False|2025-02-10T13:49:18.2135044+08:00;True|2025-02-10T11:32:33.6168149+08:00;False|2025-02-10T11:31:56.1964136+08:00;False|2025-02-10T11:31:03.0326897+08:00;True|2025-02-10T11:25:27.6553142+08:00;True|2025-01-18T15:10:06.4957375+08:00;False|2025-01-18T15:09:32.6588841+08:00;True|2025-01-18T15:07:28.0952526+08:00;True|2025-01-18T15:05:38.5243008+08:00;True|2025-01-18T15:03:32.1684791+08:00;True|2025-01-18T15:00:14.2579995+08:00;False|2025-01-18T14:59:17.3888861+08:00;False|2025-01-18T14:57:59.9512472+08:00;True|2025-01-18T13:57:17.7790615+08:00;True|2025-01-18T12:53:22.4660853+08:00;True|2025-01-17T17:26:35.1781925+08:00;True|2025-01-17T16:54:55.6218094+08:00;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>