dengjunjie
6 天以前 fd073a00f6813eada92b08f1884b115295ac1177
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -54,7 +54,7 @@
        private Dictionary<string, OrderByType> _taskOrderBy = new()
            {
                {nameof(Dt_Task.Grade),OrderByType.Desc },
                {nameof(Dt_Task.CreateDate),OrderByType.Asc},
                {nameof(Dt_Task.TaskNum),OrderByType.Asc},
            };
        public Dictionary<string, OrderByType> TaskOrderBy { get { return _taskOrderBy; } set { _taskOrderBy = value; } }
@@ -87,10 +87,12 @@
                List<Dt_Task> tasks = new List<Dt_Task>();
                foreach (var item in taskDTOs)
                {
                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum) != null)
                    {
                        throw new Exception($"任务号【{item.TaskNum}已存在任务】");
                        throw new Exception($"任务号【{item.TaskNum}】已存在任务");
                    }
                    if (BaseDal.QueryFirst(x => x.PalletCode == item.PalletCode) != null)
                        throw new Exception($"托盘号【{item.PalletCode}】已存在任务");
                    Dt_Task task = _mapper.Map<Dt_Task>(item);
                    task.Creater = "WMS";
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
@@ -161,7 +163,7 @@
        /// <returns></returns>
        public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish), TaskOrderBy);
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && (x.NextAddress == nextAddress && x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish && x.TargetAddress == nextAddress), TaskOrderBy);
        }
        /// <summary>
@@ -220,9 +222,9 @@
            Dt_Task task = null;
            List<Dt_Task> tasks = new List<Dt_Task>();
            if (string.IsNullOrEmpty(currentAddress))
                tasks = BaseDal.QueryData(x => x.Roadway == deviceNo && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState < TaskRelocationStatusEnum.SC_RelocationFinish.ObjToInt()).OrderBy(x => x.TaskNum).ToList();
                tasks = BaseDal.QueryData(x => x.Roadway == deviceNo && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState < TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt()).OrderBy(x => x.TaskNum).ToList();
            else
                tasks = BaseDal.QueryData(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState < TaskRelocationStatusEnum.SC_RelocationFinish.ObjToInt()).OrderBy(x => x.TaskNum).ToList();
                tasks = BaseDal.QueryData(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState < TaskRelocationStatusEnum.SC_RelocationExecuting.ObjToInt()).OrderBy(x => x.TaskNum).ToList();
            if (tasks != null && tasks.Count > 0)
            {
                task = tasks.First();
@@ -237,10 +239,24 @@
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
        {
            Dt_Task? _Task = null;
            if (string.IsNullOrEmpty(currentAddress))
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress) || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy);
            {
                _Task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress) || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy);
                if (_Task != null && TaskOutboundTypes.Contains(_Task.TaskType))
                {
                    if (_Task.TaskState != TaskOutStatusEnum.Car_OutFinish.ObjToInt()) _Task = null;
                }
            }
            else
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy);
            {
                _Task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy);
                if (_Task != null && TaskOutboundTypes.Contains(_Task.TaskType))
                {
                    if (_Task.TaskState != TaskOutStatusEnum.Car_OutFinish.ObjToInt()) _Task = null;
                }
            }
            return _Task;
        }
        /// <summary>
@@ -257,6 +273,11 @@
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress) && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        public Dt_Task QueryCarOutFinish()
        {
            Dt_Task? _Task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy);
            return _Task;
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
        /// </summary>
@@ -265,10 +286,13 @@
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "")
        {
            Dt_Task? _Task = null;
            if (string.IsNullOrEmpty(currentAddress))
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy);
                _Task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy);
            else
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
                _Task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskOutStatusEnum.Car_OutFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
            if (_Task != null && _Task.TaskState != TaskOutStatusEnum.Car_OutFinish.ObjToInt()) _Task = null;
            return _Task;
        }
        /// <summary>
@@ -417,7 +441,7 @@
                    }
                    else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt())
                    {
                        if (task.TaskState >= (int)CarChargingTaskEnum.RelocationCarFinish)
                        if (task.TaskState >= (int)CarChargingTaskEnum.CarChargingFinish)
                        {
                            return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                        }
@@ -606,7 +630,7 @@
                task = BaseDal.QueryFirst(x => x.TaskType == TaskType);
            return task;
        }
        private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
        /// <summary>
        /// æ·»åŠ ç§»è½¦ä»»åŠ¡
        /// </summary>
@@ -615,38 +639,51 @@
        /// <param name="ShuttleCarCode">穿梭车号</param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public WebResponseContent AddRelocationCarTask(string SourceAddress, string TargetAddress, string ShuttleCarCode = "", string remark = "")
        public async Task AddRelocationCarTask(string SourceAddress, string TargetAddress, string ShuttleCarCode = "", string remark = "")
        {
            if (!string.IsNullOrEmpty(SourceAddress) && SourceAddress != "")
            await _semaphore.WaitAsync();
            try
            {
                Dt_Task? task = BaseDal.QueryFirst(x => x.SourceAddress == SourceAddress && x.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt());
                if (task != null) return WebResponseContent.Instance.Error();
                if (!string.IsNullOrEmpty(SourceAddress) && SourceAddress != "")
                {
                    Dt_Task? task = BaseDal.QueryFirst(x => x.SourceAddress == SourceAddress && (x.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() || x.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt()));
                    if (task != null) return;
                }
                if (!string.IsNullOrEmpty(TargetAddress) && TargetAddress != "")
                {
                    Dt_Task? task = BaseDal.QueryFirst(x => x.TargetAddress == TargetAddress && (x.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() || x.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt()));
                    if (task != null) return;
                }
                #region åˆ›å»ºå †åž›æœºç§»è½¦ä»»åŠ¡
                Dt_Task dt_Task = new Dt_Task()
                {
                    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                    Grade = 2,
                    Roadway = "SC01",
                    TaskType = string.IsNullOrEmpty(remark) ? (int)TaskOtherTypeEnum.RelocationCar : (int)TaskOtherTypeEnum.RelocationCarCharging,
                    SourceAddress = SourceAddress,
                    TargetAddress = TargetAddress,
                    CurrentAddress = SourceAddress,
                    NextAddress = TargetAddress,
                    CreateDate = DateTime.Now,
                    Creater = "WCS",
                    TaskState = string.IsNullOrEmpty(remark) ? (int)TaskCarStatusEnum.CarNew : (int)CarChargingTaskEnum.CarChargingNew,
                    ShuttleCarCode = ShuttleCarCode,
                    WMSId = 0,
                    Remark = remark
                };
                if (SourceAddress == TargetAddress) dt_Task.TaskState = (int)CarChargingTaskEnum.CarChargingSC_CarFinish;
                AddData(dt_Task);
                #endregion
            }
            if (!string.IsNullOrEmpty(TargetAddress) && TargetAddress != "")
            catch (Exception)
            {
                Dt_Task? task = BaseDal.QueryFirst(x => x.SourceAddress == TargetAddress && x.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt());
                if (task != null) return WebResponseContent.Instance.Error();
            }
            #region åˆ›å»ºå †åž›æœºç§»è½¦ä»»åŠ¡
            Dt_Task dt_Task = new Dt_Task()
            finally
            {
                TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                Grade = 2,
                Roadway = "SC01",
                TaskType = string.IsNullOrEmpty(remark) ? (int)TaskOtherTypeEnum.RelocationCar : (int)TaskOtherTypeEnum.RelocationCarCharging,
                SourceAddress = SourceAddress,
                TargetAddress = TargetAddress,
                CurrentAddress = SourceAddress,
                NextAddress = TargetAddress,
                CreateDate = DateTime.Now,
                Creater = "WCS",
                TaskState = (int)TaskCarStatusEnum.CarNew,
                ShuttleCarCode = ShuttleCarCode,
                WMSId = 0,
                Remark = remark
            };
            return AddData(dt_Task);
            #endregion
                _semaphore.Release();
            }
        }
    }
}