xiazhengtongxue
2026-01-23 f65bfbd6e84fdffc71353acfe7c9ccca5b117c45
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -809,6 +809,65 @@
            return content;
        }
        /// <summary>
        /// äººå·¥æ‰‹åŠ¨å–æ¶ˆæŒ‡å®šä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>操作结果</returns>
        public WebResponseContent ManualTaskCancellation(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                // 1. èŽ·å–ä»»åŠ¡ä¿¡æ¯
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null)return content.Error($"任务{taskNum}不存在");
                TaskTypeGroup group = task.TaskType.GetTaskTypeGroup();
                if (group == TaskTypeGroup.InboundGroup)// å…¥åº“任务取消
                {
                    // èŽ·å–ç›®æ ‡è´§ä½
                    Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                    if (locationInfo == null)return content.Error($"目标货位{task.TargetAddress}不存在");
                    // éªŒè¯è´§ä½çŠ¶æ€
                    if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
                        return content.Error($"{task.TargetAddress}货位状态异常,无法取消");
                    // æ¢å¤è´§ä½çŠ¶æ€
                    locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); // æ¢å¤ä¸ºç©ºé—²çŠ¶æ€
                    locationInfo.PalletCode = ""; // æ¸…空托盘号
                    // æ›´æ–°æ•°æ®åº“
                    _unitOfWorkManage.BeginTran();
                    _locationInfoRepository.UpdateData(locationInfo);
                    BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.人工删除);
                    _unitOfWorkManage.CommitTran();
                    // è®°å½•状态变更
                    _locationStatusChangeRecordService.AddLocationStatusChangeRecord(
                        locationInfo,
                        LocationStatusEnum.Lock,
                        LocationStatusEnum.Free,
                        LocationChangeType.InboundCancelled,
                        task.TaskNum
                    );
                    content.OK("任务取消成功");
                }
                else
                {
                    content.Error("只能入库任务取消!");
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error($"取消失败: {ex.Message}");
                // è®°å½•详细错误
                _taskExecuteDetailService.AddTaskExecuteDetail(
                    new Dt_Task { TaskNum = taskNum },
                    $"任务取消异常: {ex.Message}"
                );
            }
            return content;
        }
        /// <summary>
        /// ä»»åŠ¡å–æ¶ˆ
        /// </summary>
        /// <returns></returns>
@@ -1077,5 +1136,6 @@
            }
            return content;
        }
    }
}