1
dengjunjie
4 天以前 681d093f9ea16ab2d480d77e6b04b197e506ff60
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -50,6 +50,7 @@
        private Dictionary<string, OrderByType> _taskOrderBy = new()
            {
                {nameof(Dt_Task.Grade),OrderByType.Asc },
                {nameof(Dt_Task.Roadway),OrderByType.Asc },
                {nameof(Dt_Task.CreateDate),OrderByType.Asc},
            };
@@ -201,7 +202,7 @@
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task? QueryStackerCraneTask(string deviceNo, string currentAddress = "")
        {
            return BaseDal.QueryFirst(x => x.TaskStatus == (int)InTaskStatusEnum.InNew || x.TaskStatus == (int)OutTaskStatusEnum.OutNew || x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew, TaskOrderBy);
            return BaseDal.QueryFirst(x => x.Roadway.Contains(deviceNo) && (x.TaskStatus == (int)InTaskStatusEnum.InNew || x.TaskStatus == (int)OutTaskStatusEnum.OutNew || x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew), TaskOrderBy);
        }
        /// <summary>
@@ -212,37 +213,40 @@
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "")
        {
            Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy);
            if (taskGrade != null)
            {
                return taskGrade;
            }
            else
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                if (task != null && tasks == null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else if (task == null && tasks != null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
            }
            return BaseDal.QueryFirst(x => x.Roadway.Contains(deviceNo) && x.TaskStatus == (int)InTaskStatusEnum.InNew, TaskOrderBy);
            #region MyRegion
            //Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy);
            //if (taskGrade != null)
            //{
            //    return taskGrade;
            //}
            //else
            //{
            //    Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            //    Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
            //    if (task != null && tasks == null)
            //    {
            //        if (string.IsNullOrEmpty(currentAddress))
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            //        else
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
            //    }
            //    else if (task == null && tasks != null)
            //    {
            //        if (string.IsNullOrEmpty(currentAddress))
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
            //        else
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
            //    }
            //    else
            //    {
            //        if (string.IsNullOrEmpty(currentAddress))
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
            //        else
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
            //    }
            //}
            #endregion
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
@@ -252,38 +256,41 @@
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "")
        {
            Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy);
            if (taskGrade != null)
            {
                return taskGrade;
            }
            else
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                if (task != null && tasks == null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else if (task == null && tasks != null)
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
                else
                {
                    if (string.IsNullOrEmpty(currentAddress))
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                    else
                        return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
                }
            return BaseDal.QueryFirst(x => x.Roadway.Contains(deviceNo) && x.TaskStatus == (int)OutTaskStatusEnum.OutNew, TaskOrderBy);
            #region MyRegion
            //Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy);
            //if (taskGrade != null)
            //{
            //    return taskGrade;
            //}
            //else
            //{
            //    Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            //    Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
            //    if (task != null && tasks == null)
            //    {
            //        if (string.IsNullOrEmpty(currentAddress))
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            //        else
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
            //    }
            //    else if (task == null && tasks != null)
            //    {
            //        if (string.IsNullOrEmpty(currentAddress))
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy);
            //        else
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy);
            //    }
            //    else
            //    {
            //        if (string.IsNullOrEmpty(currentAddress))
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            //        else
            //            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
            //    }
            }
            //}
            #endregion
        }
        /// <summary>
@@ -416,11 +423,11 @@
                task.ModifyDate = DateTime.Now;
                task.Modifier = "System";
                BaseDal.UpdateData(task);
                //var response = HttpHelpers.Post<WebResponseContent>(url + "UpdateTaskStatus?taskNum=" + task.TaskNum, "", "更新任务状态");
                //if (!response.Status)
                //{
                //    _unitOfWorkManage.RollbackTran();
                //}
                var response = HttpHelpers.Post<WebResponseContent>(url + "UpdateTaskStatus?taskNum=" + task.TaskNum, "", "更新任务状态");
                if (!response.Status)
                {
                    throw new Exception(response.Message);
                }
                _unitOfWorkManage.CommitTran();
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工手动将任务状态从【{oldState}】跳转到【{task.TaskStatus}】" : $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskStatus}】");
                content = WebResponseContent.Instance.OK();
@@ -473,7 +480,7 @@
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent StackCraneTaskCompleted(int taskNum)
        public WebResponseContent StackCraneTaskCompleted(int taskNum, string Modifier = "")
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -482,30 +489,21 @@
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                task.ModifyDate = DateTime.Now;
                task.Modifier = "WMS";
                if (App.User.UserId > 0) Modifier = App.User.UserName;
                task.Modifier = Modifier.IsNullOrEmpty() ? "WMS" : Modifier;
                if (task.TaskType == (int)TaskTypeEnum.Outbound || task.TaskType == (int)TaskTypeEnum.PalletOutbound)
                {
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = (int)OutTaskStatusEnum.OutFinish;
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    if (App.User.UserId > 0)
                    {
                        task.Modifier = "System";
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (response.Status)
                        {
                            _unitOfWorkManage.CommitTran();
                            return content.OK();
                        }
                        else
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
                    }
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _unitOfWorkManage.CommitTran();
                    if (!Modifier.IsNullOrEmpty())
                    {
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (!response.Status) throw new Exception(response.Message);
                    }
                    return content.OK();
                }
                else if (task.TaskType == (int)TaskTypeEnum.Inbound || task.TaskType == (int)TaskTypeEnum.PalletInbound)
@@ -513,24 +511,14 @@
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = (int)InTaskStatusEnum.InFinish;
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    if (App.User.UserId > 0)
                    {
                        task.Modifier = "System";
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (response.Status)
                        {
                            _unitOfWorkManage.CommitTran();
                            return content.OK();
                        }
                        else
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
                    }
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _unitOfWorkManage.CommitTran();
                    if (!Modifier.IsNullOrEmpty())
                    {
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (!response.Status) throw new Exception(response.Message);
                    }
                    return content.OK();
                }
                else if (task.TaskType == (int)TaskTypeEnum.Relocation)
@@ -538,24 +526,14 @@
                    _unitOfWorkManage.BeginTran();
                    task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationFinish;
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
                    if (App.User.UserId > 0)
                    {
                        task.Modifier = "System";
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (response.Status)
                        {
                            _unitOfWorkManage.CommitTran();
                            return content.OK();
                        }
                        else
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content = WebResponseContent.Instance.Error(response.Message);
                        }
                    }
                    BaseDal.DeleteData(task);
                    _task_HtyService.AddTaskHty(task);
                    _unitOfWorkManage.CommitTran();
                    if (!Modifier.IsNullOrEmpty())
                    {
                        var response = HttpHelpers.Post<WebResponseContent>(url + "TaskCompleted?taskNum=" + task.TaskNum, "", "任务完成");
                        if (!response.Status) throw new Exception(response.Message);
                    }
                    return content.OK();
                }
                else
@@ -565,12 +543,12 @@
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】,异常信息:{ex.Message}");
                //_unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.OK($"任务完成异常,任务号:【{taskNum}】,异常信息:{ex.Message}");
            }
            finally
            {
                WriteLog.GetLog("完成任务").Write($"操作人:{(App.User.UserId > 0 ? App.User.UserName : "")}{Environment.NewLine}任务号:{taskNum}{Environment.NewLine}{JsonConvert.SerializeObject(content)}", "完成任务");
                WriteLog.GetLog("完成任务").Write($"操作人:{(App.User.UserId > 0 ? App.User.UserName : "堆垛机")}{Environment.NewLine}任务号:{taskNum}{Environment.NewLine}{JsonConvert.SerializeObject(content)}", "完成任务");
            }
            return content;
        }