wanshenmean
5 小时以前 e4921e003cc293fea714bdaf74dc6a6b6b750295
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs
@@ -4,7 +4,10 @@
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.MES;
using WIDESEA_DTO.Task;
using WIDESEA_IBasicService;
using WIDESEA_Model.Models;
namespace WIDESEA_TaskInfoService
@@ -82,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();
@@ -117,6 +135,44 @@
                        inboundTaskDto = _mapper.Map<WMSTaskDTO>(inboundTask);
                    }
                    // 调用MES托盘出站
                    string deviceName = stockInfo.Remark == "GW_1" ? "高温静置1"
                        : stockInfo.Remark == "GW_2" ? "高温静置2"
                        : "常温静置1";
                    var mesConfig = _mesDeviceConfigService.GetByDeviceName(deviceName);
                    string equipmentCode = mesConfig?.EquipmentCode ?? StockConstants.MES_EQUIPMENT_CODE;
                    string resourceCode = mesConfig?.ResourceCode ?? StockConstants.MES_RESOURCE_CODE;
                    string token = mesConfig?.Token;
                    var outboundRequest = new OutboundInContainerRequest
                    {
                        EquipmentCode = equipmentCode,
                        ResourceCode = resourceCode,
                        LocalTime = DateTime.Now,
                        ContainerCode = taskDto.PalletCode
                    };
                    string palletCode = taskDto.PalletCode;
                    string requestJson = outboundRequest.ToJson();
                    // 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)
                        return completeResult;