1
xiazhengtongxue
2026-03-27 5d55a31d8ce95e511ffb408f38ed06e81742b67e
ÏîÄ¿´úÂë/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -208,7 +208,7 @@
                Dt_Task taskOld = BaseDal.QueryFirst(x => x.PalletCode == containerFlowDTO.ContainerCode);
                if (taskOld != null && taskOld.PalletCode == containerFlowDTO.ContainerCode && taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() && taskOld.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && taskOld.DeviceCode == deviceCode)
                {
                    Thread.Sleep(500);
                    //Thread.Sleep(500);
                    return content.OK();
                }
                if (taskOld != null && taskOld.PalletCode == containerFlowDTO.ContainerCode && taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() && taskOld.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && taskOld.DeviceCode != deviceCode)
@@ -723,6 +723,9 @@
            }
            return content;
        }
        // åœ¨ç±»ä¸­æ·»åŠ é™æ€é”å¯¹è±¡
        private static readonly object _taskCompleteLock = new object();
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
@@ -731,10 +734,27 @@
        public WebResponseContent TaskCompleted(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            // ä½¿ç”¨é”ç¡®ä¿åŒä¸€ä»»åŠ¡ä¸ä¼šå¹¶å‘å¤„ç†
            lock (_taskCompleteLock)
            {
            try
            {
                WriteLog.Write_Log("任务完成", "任务完成接口", "任务号", $"任务:{taskNum}");
                    // å†æ¬¡æŸ¥è¯¢ä»»åŠ¡çŠ¶æ€ï¼Œé˜²æ­¢åœ¨é”ç­‰å¾…æœŸé—´ä»»åŠ¡çŠ¶æ€å·²æ”¹å˜
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                    if (task == null)
                    {
                        return content.Error($"任务{taskNum}不存在");
                    }
                    // æ£€æŸ¥ä»»åŠ¡çŠ¶æ€ï¼Œé¿å…é‡å¤å®Œæˆ
                    if (task.TaskState == TaskStatusEnum.Finish.ObjToInt())
                    {
                        return content.Error($"任务{taskNum}已完成,请勿重复操作");
                    }
                if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//出库任务完成逻辑
                {
                    Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
@@ -821,6 +841,105 @@
            }
            return content;
        }
        }
        ///// <summary>
        ///// ä»»åŠ¡å®Œæˆ
        ///// </summary>
        ///// <param name="taskNum"></param>
        ///// <returns></returns>
        //public WebResponseContent TaskCompleted(int taskNum)
        //{
        //    WebResponseContent content = new WebResponseContent();
        //    try
        //    {
        //        WriteLog.Write_Log("任务完成", "任务完成接口", "任务号", $"任务:{taskNum}");
        //        Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
        //        if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//出库任务完成逻辑
        //        {
        //            Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
        //            if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
        //            {
        //                return content.Error($"{locationInfo.LocationCode}货位状态不正确");
        //            }
        //            task.TaskState = TaskStatusEnum.Finish.ObjToInt();
        //            locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
        //            locationInfo.PalletCode = "";
        //            //料箱出库完成上报给WMS
        //            string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress;
        //            if (string.IsNullOrEmpty(url))
        //            {
        //                _taskExecuteDetailService.AddTaskExecuteDetail(task, $"未找到WMS出库上报接口,请检查接口配置");
        //                UpdateTaskExceptionMessage(taskNum, $"未找到WMS出库上报接口,请检查接口配置");
        //                return content.Error($"{taskNum},未找到WMS出库上报接口,请检查接口配置");
        //            }
        //            ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
        //            {
        //                TaskCode = task.TaskNum.ToString(),
        //                ContainerCode = task.PalletCode,
        //                StationCode = task.TargetAddress,
        //                LocationCode = task.SourceAddress,
        //                CompleteType = 1
        //            };
        //            string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
        //            _unitOfWorkManage.BeginTran();
        //            _locationInfoRepository.UpdateData(locationInfo);
        //            BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
        //            _unitOfWorkManage.CommitTran();
        //            _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, task.TaskNum);
        //            //调用接口
        //            string response = HttpHelper.Post(url, request);
        //            WriteLog.Write_Log("WMS出库任务完成回传", "任务完成接口", "任务信息", $"请求:{request},回传:{response}");
        //            WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},未接收到WMS出库上报返回值");
        //            if (wMSResponse.Code != "0") content.Message = $"出库任务{task.TaskNum}WMS出库上报错误,信息:{wMSResponse.Msg}";
        //        }
        //        else if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//入库任务完成逻辑
        //        {
        //            string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress;
        //            if (string.IsNullOrEmpty(url))
        //            {
        //                _taskExecuteDetailService.AddTaskExecuteDetail(task, $"未找到WMS入库上报接口,请检查接口配置");
        //                UpdateTaskExceptionMessage(taskNum, $"未找到WMS入库上报接口,请检查接口配置");
        //                return content.Error($"{taskNum},未找到WMS入库上报接口,请检查接口配置");
        //            }
        //            ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
        //            {
        //                TaskCode = task.TaskNum.ToString(),
        //                ContainerCode = task.PalletCode,
        //                StationCode = task.SourceAddress,
        //                LocationCode = task.TargetAddress,
        //                CompleteType = 2
        //            };
        //            string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
        //            Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
        //            if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
        //            {
        //                return content.Error($"{locationInfo.LocationCode}货位状态不正确");
        //            }
        //            task.TaskState = TaskStatusEnum.Finish.ObjToInt();
        //            locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
        //            locationInfo.PalletCode = task.PalletCode;
        //            _unitOfWorkManage.BeginTran();
        //            _locationInfoRepository.UpdateData(locationInfo);
        //            BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
        //            _unitOfWorkManage.CommitTran();
        //            _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted, task.TaskNum);
        //            //调用接口
        //            string response = HttpHelper.Post(url, request);
        //            WriteLog.Write_Log("WMS入库任务完成回传", "任务完成接口", "任务信息", $"请求:{request},回传:{response}");
        //            WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},未接收到WMS入库上报返回值");
        //            if (wMSResponse.Code != "0") content.Message = $"入库任务{task.TaskNum}WMS入库上报错误,信息:{wMSResponse.Msg}";
        //        }
        //        content.OK("任务完成");
        //    }
        //    catch (Exception ex)
        //    {
        //        _unitOfWorkManage.RollbackTran();
        //        content.Error(ex.Message);
        //    }
        //    return content;
        //}
        /// <summary>
        /// äººå·¥æ‰‹åŠ¨å–æ¶ˆæŒ‡å®šä»»åŠ¡
        /// </summary>
@@ -841,27 +960,32 @@
                {
                    // èŽ·å–ç›®æ ‡è´§ä½
                    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}货位状态异常,无法取消");
                    // æ¢å¤è´§ä½çŠ¶æ€
                    if (locationInfo != null)
                    {
                    locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); // æ¢å¤ä¸ºç©ºé—²çŠ¶æ€
                    locationInfo.PalletCode = ""; // æ¸…空托盘号
                    // æ›´æ–°æ•°æ®åº“
                    _unitOfWorkManage.BeginTran();
                    _locationInfoRepository.UpdateData(locationInfo);
                        _unitOfWorkManage.CommitTran();
                        content.OK("任务取消成功");
                    }
                    _unitOfWorkManage.BeginTran();
                    BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.人工删除);
                    _unitOfWorkManage.CommitTran();
                    //return content.Error($"目标货位{task.TargetAddress}不存在");
                    // éªŒè¯è´§ä½çŠ¶æ€
                    //if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
                    //    return content.Error($"{task.TargetAddress}货位状态异常,无法取消");
                    // æ¢å¤è´§ä½çŠ¶æ€
                    // æ›´æ–°æ•°æ®åº“
                    //_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