wanshenmean
5 小时以前 e4921e003cc293fea714bdaf74dc6a6b6b750295
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs
@@ -1,4 +1,3 @@
using System.Diagnostics;
using WIDESEA_Common.Constants;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.StockEnum;
@@ -60,7 +59,6 @@
        /// </summary>
        public async Task<WebResponseContent> OutboundFinishTaskAsync(CreateTaskDto taskDto)
        {
            var stopwatch = Stopwatch.StartNew();
            try
            {
                var task = await BaseDal.QueryFirstAsync(s => s.PalletCode == taskDto.PalletCode);
@@ -87,9 +85,24 @@
                WebResponseContent content = new WebResponseContent();
                return await _unitOfWorkManage.BeginTranAsync(async () =>
                {
                    if (task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
                    {
                        location.LocationStatus = LocationStatusEnum.Free.GetHashCode();
                        var updateResult = await _locationInfoService.UpdateLocationInfoAsync(location);
                        var deleteResult = _stockInfoService.DeleteData(stockInfo).Status;
                        if (!updateResult && !deleteResult)
                            return content.Error("任务完成失败");
                        var completeResult1 = await CompleteTaskAsync(task, "出库完成");
                        return content.OK();
                    }
                    stockInfo.LocationId = 0;
                    stockInfo.LocationCode = string.Empty;
                    stockInfo.OutboundDate = DateTime.Now;
                    stockInfo.StockStatus = (int)StockStatusEmun.出库完成;
                    location.LocationStatus = LocationStatusEnum.Free.GetHashCode();
@@ -138,25 +151,27 @@
                        LocalTime = DateTime.Now,
                        ContainerCode = taskDto.PalletCode
                    };
                    string palletCode = taskDto.PalletCode;
                    string requestJson = outboundRequest.ToJson();
                    var outboundResult = string.IsNullOrWhiteSpace(token)
                        ? _mesService.OutboundInContainer(outboundRequest)
                        : _mesService.OutboundInContainer(outboundRequest, token);
                    stopwatch.Stop();
                    await _mesLogService.LogAsync(new MesApiLogDto
                    {
                        ApiType = "UnbindContainer",
                        RequestJson = requestJson,
                        ResponseJson = System.Text.Json.JsonSerializer.Serialize(outboundResult),
                        IsSuccess = outboundResult.IsSuccess,
                        ErrorMessage = outboundResult.ErrorMessage,
                        ElapsedMs = (int)stopwatch.ElapsedMilliseconds,
                        Creator = "systeam"
                    });
                    if (outboundResult == null || outboundResult.Data == null || !outboundResult.Data.IsSuccess)
                    {
                        return content.Error($"出库完成失败:MES出站失败: {outboundResult?.Data?.Msg ?? outboundResult?.ErrorMessage ?? "未知错误"}");
                    }
                    // Fire-and-forget: 异步执行MES出站,不阻塞主业务逻辑
                    _mesUploadHelper.FireAndForget(
                        palletCode,
                        MesUploadStatusEnum.出站上传成功,
                        "OutboundInContainer",
                        requestJson,
                        () =>
                        {
                            var result = string.IsNullOrWhiteSpace(token)
                                ? _mesService.OutboundInContainer(outboundRequest)
                                : _mesService.OutboundInContainer(outboundRequest, token);
                            return (
                                result?.Data?.IsSuccess ?? false,
                                Newtonsoft.Json.JsonConvert.SerializeObject(result),
                                result?.Data?.Msg ?? result?.ErrorMessage ?? "未知错误",
                                _mesService.BuildConfig(token ?? string.Empty).ToJson()
                            );
                        });
                    var completeResult = await CompleteTaskAsync(task, "出库完成");
                    if (!completeResult.Status)