| | |
| | | using Mapster; |
| | | using MapsterMapper; |
| | | using Microsoft.Extensions.Configuration; |
| | | using SqlSugar; |
| | | using System.DirectoryServices.Protocols; |
| | | using Serilog; |
| | | using System.Text.Json; |
| | | using System.Text.Encodings.Web; |
| | | using System.Text.Unicode; |
| | | using WIDESEA_Common.Constants; |
| | | using WIDESEA_Common.LocationEnum; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Common.TaskEnum; |
| | | using WIDESEA_Common.WareHouseEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core.Core; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_DTO.GradingMachine; |
| | | using WIDESEA_DTO.MES; |
| | | using WIDESEA_DTO.Stock; |
| | | using WIDESEA_DTO.Task; |
| | | using WIDESEA_IBasicService; |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_ITaskInfoService; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_TaskInfoService |
| | | { |
| | | public partial class TaskService |
| | | { |
| | | /// <summary> |
| | | /// JSON序列化选项(中文不转义) |
| | | /// </summary> |
| | | private static readonly JsonSerializerOptions _jsonOptions = new() |
| | | { |
| | | Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) |
| | | }; |
| | | #region 分容柜接口 |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public async Task<WebResponseContent> InOrOutCompletedAsync(GradingMachineInputDto input) |
| | | { |
| | | var log = Log.ForContext("SourceContext", "分容柜完成信号"); |
| | | log.Information("[InOrOutCompleted] 请求参数: {Request}", JsonSerializer.Serialize(input, _jsonOptions)); |
| | | WebResponseContent content = new WebResponseContent(); |
| | | if (string.IsNullOrWhiteSpace(input.PalletCode) || string.IsNullOrWhiteSpace(input.LocationCode)) |
| | | if (string.IsNullOrWhiteSpace(input.LocationCode)) |
| | | { |
| | | return content.Error($"托盘号或者货位编号不能为空"); |
| | | var errResult = content.Error($"货位编号不能为空"); |
| | | log.Warning("[InOrOutCompleted] 响应: {Response}", JsonSerializer.Serialize(errResult, _jsonOptions)); |
| | | return errResult; |
| | | } |
| | | |
| | | try |
| | | { |
| | | var stockInfo = await _stockInfoService.GetStockInfoAsync(input.PalletCode, input.LocationCode); |
| | | var stockInfo = await _stockInfoService.GetStockInfoAsync(3, input.LocationCode); |
| | | |
| | | int locationStatus; |
| | | if (stockInfo == null) |
| | | { |
| | | var location = await _locationInfoService.GetLocationInfoAsync(input.LocationCode); |
| | | locationStatus = location?.LocationStatus ?? 0; |
| | | var errResult = content.Error("WMS未找到库存信息"); |
| | | log.Warning("[InOrOutCompleted] 响应: {Response}", JsonSerializer.Serialize(errResult, _jsonOptions)); |
| | | return errResult; |
| | | } |
| | | else |
| | | locationStatus = MapLocationStatus(stockInfo.StockStatus); |
| | | |
| | | int MapLocationStatus(int stockStatus) => stockStatus switch |
| | | { |
| | | locationStatus = stockInfo.LocationDetails?.LocationStatus ?? 0; |
| | | } |
| | | (int)StockStatusEmun.入库完成 => 10, |
| | | (int)StockStatusEmun.空托盘库存 => 11, |
| | | _ => 0 |
| | | }; |
| | | |
| | | OutputDto outPutDto = new OutputDto() |
| | | { |
| | | LocationCode = input.LocationCode, |
| | | PalletCode = input.PalletCode, |
| | | PalletCode = stockInfo.PalletCode, |
| | | IsNormalProcedure = 1, |
| | | LocationStatus = locationStatus |
| | | }; |
| | | return content.OK(data: outPutDto); |
| | | var result = content.OK(data: outPutDto); |
| | | log.Information("[InOrOutCompleted] 响应: {Response}", JsonSerializer.Serialize(result, _jsonOptions)); |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | log.Error(ex, "[InOrOutCompleted] 异常"); |
| | | } |
| | | |
| | | return content; |
| | |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> SendLocationStatusAsync(GradingMachineInputDto input) |
| | | { |
| | | var log = Log.ForContext("SourceContext", "分容柜状态更新"); |
| | | log.Information("[SendLocationStatus] 请求参数: {Request}", JsonSerializer.Serialize(input, _jsonOptions)); |
| | | WebResponseContent content = new WebResponseContent(); |
| | | if (string.IsNullOrWhiteSpace(input.LocationCode)) |
| | | { |
| | | return content.Error($"货位编号不能为空"); |
| | | var errResult = content.Error($"货位编号不能为空"); |
| | | log.Warning("[SendLocationStatus] 响应: {Response}", JsonSerializer.Serialize(errResult, _jsonOptions)); |
| | | return errResult; |
| | | } |
| | | |
| | | try |
| | |
| | | var result = await _locationInfoService.Db.Updateable<Dt_LocationInfo>() |
| | | .SetColumns(s => new Dt_LocationInfo |
| | | { |
| | | LocationStatus = input.LocationStatus |
| | | }).Where(s => s.LocationCode == input.LocationCode).ExecuteCommandAsync() > 0; |
| | | EnableStatus = input.LocationStatus == 1 ? 0 : 3, |
| | | }).Where(s => s.LocationCode == input.LocationCode && s.RoadwayNo == TaskAddressConstants.GRADING_RoadWayNo).ExecuteCommandAsync() > 0; |
| | | |
| | | if (result) |
| | | { |
| | |
| | | { |
| | | content.Error("更新失败"); |
| | | } |
| | | log.Information("[SendLocationStatus] 响应: {Response}", JsonSerializer.Serialize(content, _jsonOptions)); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | log.Error(ex, "[SendLocationStatus] 异常"); |
| | | } |
| | | return content; |
| | | } |
| | |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> RequestOutboundAsync(GradingMachineInputDto input) |
| | | { |
| | | var log = Log.ForContext("SourceContext", "分容柜出库请求"); |
| | | log.Information("[RequestOutbound] 请求参数: {Request}", JsonSerializer.Serialize(input, _jsonOptions)); |
| | | WebResponseContent content = new WebResponseContent(); |
| | | if (string.IsNullOrWhiteSpace(input.LocationCode) || string.IsNullOrWhiteSpace(input.PalletCode)) |
| | | { |
| | | return content.Error($"托盘号或者货位编号不能为空"); |
| | | var errResult = content.Error($"托盘号或者货位编号不能为空"); |
| | | log.Warning("[RequestOutbound] 响应: {Response}", JsonSerializer.Serialize(errResult, _jsonOptions)); |
| | | return errResult; |
| | | } |
| | | try |
| | | { |
| | | var stock = await _stockInfoService.GetStockInfoAsync(input.PalletCode, input.LocationCode); |
| | | if (stock == null) |
| | | { |
| | | content.Error("未找到对应的托盘"); |
| | | var errResult = content.Error("未找到对应的托盘"); |
| | | log.Warning("[RequestOutbound] 响应: {Response}", JsonSerializer.Serialize(errResult, _jsonOptions)); |
| | | return errResult; |
| | | } |
| | | else |
| | | { |
| | | var taskList = new Dt_Task |
| | | { |
| | | WarehouseId = stock.WarehouseId, |
| | | PalletCode = stock.PalletCode, |
| | | PalletType = stock.PalletType, |
| | | SourceAddress = stock.LocationCode, |
| | | CurrentAddress = stock.LocationCode, |
| | | NextAddress = TaskAddressConstants.DEFAULT_ADDRESS, |
| | | TargetAddress = TaskAddressConstants.GRADING_OUTBOUND_ADDRESS, |
| | | Roadway = stock.LocationDetails.RoadwayNo, |
| | | TaskType = TaskOutboundTypeEnum.Outbound.GetHashCode(), |
| | | TaskStatus = TaskOutStatusEnum.OutNew.GetHashCode(), |
| | | Grade = 1, |
| | | TaskNum = await BaseDal.GetTaskNo(), |
| | | Creater = "system", |
| | | }; |
| | | |
| | | var taskList = new Dt_Task |
| | | { |
| | | WarehouseId = stock.WarehouseId, |
| | | PalletCode = stock.PalletCode, |
| | | PalletType = stock.PalletType, |
| | | SourceAddress = stock.LocationCode, |
| | | CurrentAddress = stock.LocationCode, |
| | | NextAddress = TaskAddressConstants.GRADING_OUTBOUND_ADDRESS, |
| | | TargetAddress = TaskAddressConstants.GRADING_OUTBOUND_ADDRESS, |
| | | Roadway = stock.LocationDetails.RoadwayNo, |
| | | TaskType = TaskOutboundTypeEnum.Outbound.GetHashCode(), |
| | | TaskStatus = TaskOutStatusEnum.OutNew.GetHashCode(), |
| | | Grade = 1, |
| | | TaskNum = await BaseDal.GetTaskNo(), |
| | | Creater = "system", |
| | | }; |
| | | |
| | | return await _unitOfWorkManage.BeginTranAsync(async () => |
| | | { |
| | | var result = await BaseDal.AddDataAsync(taskList) > 0; |
| | | var wmstaskDto = result ? _mapper.Map<WMSTaskDTO>(taskList) : null; |
| | | |
| | | var httpResponse = _httpClientHelper.Post<WebResponseContent>("http://logistics-service/api/logistics/notifyoutbound", JsonSerializer.Serialize(wmstaskDto)).Data; |
| | | var wmsTaskDtos = new List<WMSTaskDTO> { wmstaskDto }; |
| | | var httpResponse = _httpClientHelper.Post<WebResponseContent>("http://localhost:9292/api/Task/ReceiveTask", JsonSerializer.Serialize(wmsTaskDtos)).Data; |
| | | if (result && httpResponse != null) |
| | | { |
| | | content.OK("出库请求成功"); |
| | | var okResult = content.OK("出库请求成功"); |
| | | log.Information("[RequestOutbound] 响应: {Response}", JsonSerializer.Serialize(okResult, _jsonOptions)); |
| | | return okResult; |
| | | } |
| | | else |
| | | { |
| | | content.Error("出库请求失败"); |
| | | var errResult = content.Error("出库请求失败"); |
| | | log.Warning("[RequestOutbound] 响应: {Response}", JsonSerializer.Serialize(errResult, _jsonOptions)); |
| | | return errResult; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | log.Error(ex, "[RequestOutbound] 异常"); |
| | | } |
| | | return content; |
| | | } |
| | |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> GetPalletCodeCellAsync(GradingMachineInputDto input) |
| | | { |
| | | var log = Log.ForContext("SourceContext", "分容柜电芯查询"); |
| | | log.Information("[GetPalletCodeCell] 请求参数: {Request}", JsonSerializer.Serialize(input, _jsonOptions)); |
| | | WebResponseContent content = new WebResponseContent(); |
| | | if (string.IsNullOrWhiteSpace(input.PalletCode) || string.IsNullOrWhiteSpace(input.LocationCode)) |
| | | { |
| | | return content.Error($"托盘号或者货位编号不能为空"); |
| | | var errResult = content.Error($"托盘号或者货位编号不能为空"); |
| | | log.Warning("[GetPalletCodeCell] 响应: {Response}", JsonSerializer.Serialize(errResult, _jsonOptions)); |
| | | return errResult; |
| | | } |
| | | try |
| | | { |
| | | var stockInfo = await _stockInfoService.GetStockInfoAsync(input.PalletCode, input.LocationCode); |
| | | if (stockInfo == null) |
| | | { |
| | | return content.Error("未找到对应的托盘"); |
| | | var errResult = content.Error("未找到对应的托盘"); |
| | | log.Warning("[GetPalletCodeCell] 响应: {Response}", JsonSerializer.Serialize(errResult, _jsonOptions)); |
| | | return errResult; |
| | | } |
| | | var outPutDtos = stockInfo.Details.Select(x => new OutputDto() |
| | | |
| | | var outPutDtos = new |
| | | { |
| | | LocationCode = input.LocationCode, |
| | | PalletCode = input.PalletCode, |
| | | input.LocationCode, |
| | | input.PalletCode, |
| | | IsNormalProcedure = 1, |
| | | LocationStatus = stockInfo.LocationDetails.LocationStatus, |
| | | CellCode = x.SerialNumber, |
| | | Channel = x.InboundOrderRowNo.ToString() |
| | | }).ToList(); |
| | | return content.OK(data: outPutDtos); |
| | | stockInfo.LocationDetails.LocationStatus, |
| | | Data = stockInfo.Details.Select(x => new CellCodeData |
| | | { |
| | | CellCode = x.SerialNumber, |
| | | Channel = x.InboundOrderRowNo.ToString() |
| | | }).ToList() |
| | | }; |
| | | var result = content.OK(data: outPutDtos); |
| | | log.Information("[GetPalletCodeCell] 响应: {Response}", JsonSerializer.Serialize(result, _jsonOptions)); |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | log.Error(ex, "[GetPalletCodeCell] 异常"); |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |