| | |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; |
| | | using Org.BouncyCastle.Asn1.Tsp; |
| | | using Spire.Pdf; |
| | | using Spire.Pdf; |
| | | using SqlSugar; |
| | | using System; |
| | | using System; |
| | | using System; |
| | | using System; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | | using System.ComponentModel.DataAnnotations; |
| | | using System.ComponentModel.DataAnnotations; |
| | | using System.Diagnostics; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using System.Drawing.Printing; |
| | | using System.Drawing.Printing; |
| | | using System.IO; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Net.Http; |
| | | using System.Net.Http; |
| | | using System.Reflection; |
| | | using System.Reflection.Metadata; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using System.Threading.Tasks; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_BasicRepository; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Common.Log; |
| | | using WIDESEA_Common.Log; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Common.TaskEnum; |
| | |
| | | using WIDESEA_Core.TaskEnum; |
| | | using WIDESEA_DTO.Basic; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_DTO.Inbound; |
| | | using WIDESEA_DTO.Stock; |
| | | using WIDESEA_DTO.Task; |
| | |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_IInboundService; |
| | | using WIDESEA_InboundRepository; |
| | | using WIDESEA_InboundRepository; |
| | | using WIDESEA_IOutboundRepository; |
| | | using WIDESEA_IOutboundService; |
| | | using WIDESEA_IRecordService; |
| | |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_ITaskInfoRepository; |
| | | using WIDESEA_ITaskInfoService; |
| | | using WIDESEA_Model; |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_Model.Models.Inbound; |
| | | using WIDESEA_OutboundRepository; |
| | | using WIDESEA_OutboundRepository; |
| | | using WIDESEA_StockRepository; |
| | | using WIDESEA_TaskInfoRepository; |
| | |
| | | using static WIDESEA_Common.HouseBackboundPassBack; |
| | | using static WIDESEA_Common.HouseInboundPassBack; |
| | | using static WIDESEA_Common.HouseInboundPassBack.data.data1; |
| | | using static WIDESEA_Common.HouseInboundPassBack.data.data1; |
| | | using static WIDESEA_Common.HouseoutboundPassBack; |
| | | using static WIDESEA_Common.InventoryAllocate; |
| | | using static WIDESEA_Common.NewHouseInboundPassBack; |
| | | using static WIDESEA_Common.NewHouseInboundPassBack.Parame.Syncretism; |
| | | using static WIDESEA_ITaskInfoService.ITaskService; |
| | | using Parameter = WIDESEA_Common.Parameter; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_OutboundRepository; |
| | | using System.ComponentModel.DataAnnotations; |
| | | using System; |
| | | using System.IO; |
| | | using System.Net.Http; |
| | | using System.Threading.Tasks; |
| | | using Spire.Pdf; |
| | | using WIDESEA_InboundRepository; |
| | | using System.Drawing.Printing; |
| | | using System; |
| | | using WIDESEA_Common.Log; |
| | | using static WIDESEA_Common.HouseInboundPassBack.data.data1; |
| | | using System.Diagnostics; |
| | | |
| | | namespace WIDESEA_TaskInfoService |
| | | { |
| | |
| | | private readonly IInboundRepository _inboundRepository; |
| | | private readonly ITakeStockOrderCPRepository _takeStockOrderCPRepository; |
| | | private readonly ITakeStockOrderDetailCPRepository _takeStockOrderDetailCPRepository; |
| | | private readonly IHubContext<WMSNoticeHub> _hubContext; |
| | | public ITaskRepository Repository => BaseDal; |
| | | |
| | | public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository, IInboundRepository inboundRepository, INewOutboundOrderDetailRepository newOutboundOrderDetailRepository, ITakeStockOrderCPRepository takeStockOrderCPRepository, ITakeStockOrderDetailCPRepository takeStockOrderDetailCPRepository, IStockInfoDetailCPRepository stockInfoDetailCPRepository) : base(BaseDal) |
| | | public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository, IInboundRepository inboundRepository, INewOutboundOrderDetailRepository newOutboundOrderDetailRepository, ITakeStockOrderCPRepository takeStockOrderCPRepository, ITakeStockOrderDetailCPRepository takeStockOrderDetailCPRepository, IStockInfoDetailCPRepository stockInfoDetailCPRepository, |
| | | IHubContext<WMSNoticeHub> hubContext) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _stockRepository = stockRepository; |
| | |
| | | _takeStockOrderCPRepository = takeStockOrderCPRepository; |
| | | _takeStockOrderDetailCPRepository = takeStockOrderDetailCPRepository; |
| | | _stockInfoDetailCPRepository = stockInfoDetailCPRepository; |
| | | _hubContext = hubContext; |
| | | } |
| | | |
| | | public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"]; |
| | |
| | | // 判断Success的值 |
| | | if (!response.Success) |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(失败)", "请求失败", new { 请求报文 = houseInboundPassBack, 接收报文 = response }); |
| | | |
| | | throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}"); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(成功)", "请求成功", new { 请求报文 = houseInboundPassBack, 接收报文 = response }); |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨入库数量回传WMS"); |
| | | if (!response.Success) |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(失败)", "请求失败", new { 请求报文 = inventoryAllocate, 接收报文 = response }); |
| | | |
| | | throw new Exception($"操作失败:{response.Message ?? "未提供错误信息"}"); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(成功)", "请求成功", new { 请求报文 = inventoryAllocate, 接收报文 = response }); |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | if (authResult.IsSuccess) |
| | | { |
| | | houseSyncretism.Context = new Dictionary<string, string> |
| | | { |
| | | { "Ticket", authResult.Ticket }, |
| | | { "InvOrgId", authResult.InvOrgId } |
| | | { |
| | | { "Ticket", authResult.Ticket }, |
| | | { "InvOrgId", authResult.InvOrgId } |
| | | |
| | | }; |
| | | }; |
| | | |
| | | var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, houseSyncretism, "立库入库数量回传WMS"); |
| | | if (!response.Success) |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(失败)", "请求失败", new { 请求报文 = houseSyncretism, 接收报文 = response }); |
| | | |
| | | throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}"); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(成功)", "请求成功", new { 请求报文 = houseSyncretism, 接收报文 = response }); |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | if (authResult.IsSuccess) |
| | | { |
| | | houseInboundPassBack.Context = new Dictionary<string, string> |
| | | { |
| | | { "Ticket", authResult.Ticket }, |
| | | { "InvOrgId", authResult.InvOrgId } |
| | | }; |
| | | { |
| | | { "Ticket", authResult.Ticket }, |
| | | { "InvOrgId", authResult.InvOrgId } |
| | | }; |
| | | |
| | | var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, houseInboundPassBack, "立库入库数量回传WMS"); |
| | | // 判断Success的值 |
| | | if (response.Success) |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(成功)", "请求成功", new { 请求报文 = houseInboundPassBack, 接收报文 = response }); |
| | | |
| | | // 如果Success为true,返回需要的值(这里以返回整个响应对象为例) |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(失败)", "请求失败", new { 请求报文 = houseInboundPassBack, 接收报文 = response }); |
| | | |
| | | // 如果Success为false,抛出异常并包含错误信息 |
| | | throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}"); |
| | | } |
| | |
| | | if (authResult.IsSuccess) |
| | | { |
| | | houseReturnOrders.Context = new Dictionary<string, string> |
| | | { |
| | | { "Ticket", authResult.Ticket }, |
| | | { "InvOrgId", authResult.InvOrgId } |
| | | }; |
| | | { |
| | | { "Ticket", authResult.Ticket }, |
| | | { "InvOrgId", authResult.InvOrgId } |
| | | }; |
| | | var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskreturn, houseReturnOrders, "取消发货后立库反拣入库回传WMS"); |
| | | // 判断Success的值 |
| | | if (response.Success) |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(成功)", "请求成功", new { 请求报文 = houseReturnOrders, 接收报文 = response }); |
| | | |
| | | // 如果Success为true,返回需要的值(这里以返回整个响应对象为例) |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(失败)", "请求失败", new { 请求报文 = houseReturnOrders, 接收报文 = response }); |
| | | |
| | | // 如果Success为false,抛出异常并包含错误信息 |
| | | throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}"); |
| | | } |
| | |
| | | ApiType = "InventoryAllocateController", |
| | | Method = "AsrsFinishedStockCount", |
| | | Parameters = new List<InventoryAllocate.Allocate> |
| | | { |
| | | new InventoryAllocate.Allocate |
| | | { |
| | | Value = new List<Allocate.data1> |
| | | { |
| | | new Allocate.data1 |
| | | { |
| | | No = inboundOrder.OrderNo, |
| | | //InWarehouse = task.Roadway, |
| | | TransactionCode = inboundOrder.TransactionCode, |
| | | InoutType = inboundOrder.OrderType, |
| | | OrderType = inboundOrder.InoutType, |
| | | // 遍历所有库存明细,添加到 DetailList |
| | | DetailList = StockInfos.Select(d => new Allocate.data1.Inventory |
| | | { |
| | | LinId = d.Details.FirstOrDefault()?.LinId?? "", |
| | | MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "", |
| | | OrderQuantity = d.Details.FirstOrDefault().StockQuantity, |
| | | BatchNo = d.BatchNo, |
| | | LPNNo = d.PalletCode, |
| | | FinishQty = d.Details.FirstOrDefault().StockQuantity, |
| | | LocationName = d.LocationCode |
| | | }).ToList() |
| | | new InventoryAllocate.Allocate |
| | | { |
| | | Value = new List<Allocate.data1> |
| | | { |
| | | new Allocate.data1 |
| | | { |
| | | No = inboundOrder.OrderNo, |
| | | //InWarehouse = task.Roadway, |
| | | TransactionCode = inboundOrder.TransactionCode, |
| | | InoutType = inboundOrder.OrderType, |
| | | OrderType = inboundOrder.InoutType, |
| | | // 遍历所有库存明细,添加到 DetailList |
| | | DetailList = StockInfos.Select(d => new Allocate.data1.Inventory |
| | | { |
| | | LinId = d.Details.FirstOrDefault()?.LinId?? "", |
| | | MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "", |
| | | OrderQuantity = d.Details.FirstOrDefault().StockQuantity, |
| | | BatchNo = d.BatchNo, |
| | | LPNNo = d.PalletCode, |
| | | FinishQty = d.Details.FirstOrDefault().StockQuantity, |
| | | LocationName = d.LocationCode |
| | | }).ToList() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | var authResult = AuthenticateWithWMS(); |
| | | if (authResult.IsSuccess) |
| | | { |
| | | inventoryAllocate.Context = new Dictionary<string, string> |
| | | { |
| | | { "Ticket", authResult.Ticket }, |
| | | { "InvOrgId", authResult.InvOrgId } |
| | | }; |
| | | { |
| | | { "Ticket", authResult.Ticket }, |
| | | { "InvOrgId", authResult.InvOrgId } |
| | | }; |
| | | |
| | | HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨入库数量回传WMS"); |
| | | var response = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨入库数量回传WMS"); |
| | | if (!response.Status) |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(失败)", "请求失败", new { 请求报文 = inventoryAllocate, 接收报文 = response }); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调SMOM(成功)", "请求成功", new { 请求报文 = inventoryAllocate, 接收报文 = response }); |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskout, passBack, "立库出库数量回传WMS"); |
| | | if (!response.Success) |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(失败)", "请求失败", new { 请求报文 = passBack, 接收报文 = response }); |
| | | |
| | | throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}"); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(成功)", "请求成功", new { 请求报文 = passBack, 接收报文 = response }); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, allocate, "立库入库数量回传WMS"); |
| | | if (!response.Success) |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(失败)", "请求失败", new { 请求报文 = allocate, 接收报文 = response }); |
| | | |
| | | throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}"); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(成功)", "请求成功", new { 请求报文 = allocate, 接收报文 = response }); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskout, passBack, "立库出库数量回传WMS"); |
| | | if (!response.Success) |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(失败)", "请求失败", new { 请求报文 = passBack, 接收报文 = response }); |
| | | |
| | | throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}"); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(成功)", "请求成功", new { 请求报文 = passBack, 接收报文 = response }); |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, allocate, "立库入库数量回传WMS"); |
| | | if (!response.Success) |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(失败)", "请求失败", new { 请求报文 = allocate, 接收报文 = response }); |
| | | |
| | | throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}"); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(成功)", "请求成功", new { 请求报文 = allocate, 接收报文 = response }); |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | { "InvOrgId", authResult.InvOrgId } |
| | | }; |
| | | |
| | | HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskin, allocate, "立库入库数量回传WMS"); |
| | | var response = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskin, allocate, "立库入库数量回传WMS"); |
| | | if (!response.Status) |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(失败)", "请求失败", new { 请求报文 = allocate, 接收报文 = response }); |
| | | |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调SMOM(成功)", "请求成功", new { 请求报文 = allocate, 接收报文 = response }); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | private void AddRetrueOrder(Dt_Task task,Dt_StockInfo stockInfo, Dt_OutboundOrder outboundOrder) |
| | | { |
| | | Dt_StockInfoDetail stockInfoDetail = _stockService.StockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(x => x.StockId == stockInfo.Id).First(); |
| | | if (stockInfoDetail == null) |
| | | List<Dt_StockInfoDetail> stockInfoDetails = _stockService.StockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(x => x.StockId == stockInfo.Id).ToList(); |
| | | if (stockInfoDetails == null || stockInfoDetails.Count == 0) |
| | | { |
| | | throw new Exception("建立回库单时,未找到该库存信息"); |
| | | } |
| | | if (outboundOrder.OrderType == OrderTypeEnum.反拣出库单.ObjToInt()) |
| | | Dt_ReturnOrder? lastReturnOrder = null; |
| | | foreach (var stockInfoDetail in stockInfoDetails) |
| | | { |
| | | Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x => x.LPNNo == stockInfo.PalletCode && x.LocationCode == stockInfo.LocationCode && x.OrderStatus == InOrderStatusEnum.未开始.ObjToInt()); |
| | | if (returnOrder == null) |
| | | if (outboundOrder.OrderType == OrderTypeEnum.反拣出库单.ObjToInt()) |
| | | { |
| | | throw new Exception("反拣出库后,未找到对应反拣回库单信息"); |
| | | } |
| | | stockInfo.LocationCode = ""; |
| | | stockInfo.StockStatus = StockStatusEmun.反拣入库.ObjToInt(); |
| | | stockInfo.Remark = "反拣入库"; |
| | | stockInfoDetail.OutboundQuantity = 0; |
| | | stockInfoDetail.StockQuantity += returnOrder.OrderQuantity; |
| | | stockInfoDetail.OrderNo = returnOrder.OrderNo; |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文 = 1 }); |
| | | var postData = new |
| | | { |
| | | DeviceCode = task.NextAddress, // 屏幕编号 |
| | | MaterialCode = stockInfoDetail.MaterielCode,//物料类型 |
| | | SendNum = stockInfoDetail.OutboundQuantity,//发料数 |
| | | BackNum = stockInfoDetail.StockQuantity - stockInfoDetail.OutboundQuantity//回库数 |
| | | }; |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文2 = postData }); |
| | | string json = Newtonsoft.Json.JsonConvert.SerializeObject(postData); |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文3 = json }); |
| | | using (var client = new HttpClient()) |
| | | { |
| | | var content = new StringContent(json, Encoding.UTF8, "application/json"); |
| | | var response = client.PostAsync(LEDAPI, content).Result; |
| | | string result = response.Content.ReadAsStringAsync().Result; |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文 = response, 接收报文 = result }); |
| | | } |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文 = 4 }); |
| | | |
| | | decimal returnQuantity = stockInfoDetail.StockQuantity - stockInfoDetail.OutboundQuantity; |
| | | if (returnQuantity > 0) |
| | | { |
| | | Dt_ReturnOrder returnOrder = new Dt_ReturnOrder |
| | | Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x => x.LPNNo == stockInfo.PalletCode && x.LocationCode == stockInfo.LocationCode && x.OrderStatus == InOrderStatusEnum.未开始.ObjToInt()); |
| | | if (returnOrder == null) |
| | | { |
| | | MaterielCode = stockInfoDetail.MaterielCode, |
| | | MaterielName = stockInfoDetail.MaterielName, |
| | | BatchNo = stockInfoDetail.BatchNo, |
| | | OrderQuantity = returnQuantity, |
| | | ReceiptQuantity = returnQuantity, |
| | | OrderStatus = InOrderStatusEnum.未开始.ObjToInt(), |
| | | LinId = stockInfoDetail.LinId, |
| | | LPNNo = stockInfo.PalletCode, |
| | | Creater = "LK", |
| | | CreateDate = DateTime.Now, |
| | | OrderType = OrderTypeEnum.余料回库单.ObjToInt(), |
| | | System = "WMS" |
| | | }; |
| | | if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null) |
| | | { |
| | | returnOrder.LocationCode = stockInfo.LocationCode; |
| | | throw new Exception("反拣出库后,未找到对应反拣回库单信息"); |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | _returnOrderRepository.AddData(returnOrder); |
| | | stockInfo.LocationCode = ""; |
| | | stockInfo.StockStatus = StockStatusEmun.余料退库.ObjToInt(); |
| | | stockInfo.Remark = "余料退库"; |
| | | stockInfo.StockStatus = StockStatusEmun.反拣入库.ObjToInt(); |
| | | stockInfo.Remark = "反拣入库"; |
| | | stockInfoDetail.OutboundQuantity = 0; |
| | | stockInfoDetail.StockQuantity = returnQuantity; |
| | | stockInfoDetail.StockQuantity += returnOrder.OrderQuantity; |
| | | stockInfoDetail.OrderNo = returnOrder.OrderNo; |
| | | _stockService.StockInfoService.Repository.UpdateData(stockInfo); |
| | | _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetail); |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | else |
| | | { |
| | | DeleteAndMoveIntoHtStockStatus(stockInfo); |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文 = 1 }); |
| | | var postData = new |
| | | { |
| | | DeviceCode = task.NextAddress, // 屏幕编号 |
| | | MaterialCode = stockInfoDetail.MaterielCode,//物料类型 |
| | | SendNum = stockInfoDetail.OutboundQuantity,//发料数 |
| | | BackNum = stockInfoDetail.StockQuantity - stockInfoDetail.OutboundQuantity//回库数 |
| | | }; |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文2 = postData }); |
| | | string json = Newtonsoft.Json.JsonConvert.SerializeObject(postData); |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文3 = json }); |
| | | using (var client = new HttpClient()) |
| | | { |
| | | var content = new StringContent(json, Encoding.UTF8, "application/json"); |
| | | var response = client.PostAsync(LEDAPI, content).Result; |
| | | string result = response.Content.ReadAsStringAsync().Result; |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文 = response, 接收报文 = result }); |
| | | } |
| | | WriteLog.Write_Log("API", "出库—请求LED", "请求成功", new { 请求报文 = 4 }); |
| | | |
| | | bool allowCompeted = stockInfo.Details.All(x => x.StockQuantity == x.OutboundQuantity); |
| | | if (allowCompeted) |
| | | { |
| | | DeleteAndMoveIntoHtStockStatus(stockInfo); |
| | | |
| | | } |
| | | else |
| | | { |
| | | decimal returnQuantity = stockInfoDetail.StockQuantity - stockInfoDetail.OutboundQuantity; |
| | | Dt_ReturnOrder returnOrder = new Dt_ReturnOrder |
| | | { |
| | | MaterielCode = stockInfoDetail.MaterielCode, |
| | | MaterielName = stockInfoDetail.MaterielName, |
| | | BatchNo = stockInfoDetail.BatchNo, |
| | | OrderQuantity = returnQuantity, |
| | | ReceiptQuantity = returnQuantity, |
| | | OrderStatus = InOrderStatusEnum.未开始.ObjToInt(), |
| | | LinId = stockInfoDetail.LinId, |
| | | LPNNo = stockInfo.PalletCode, |
| | | Creater = "LK", |
| | | CreateDate = DateTime.Now, |
| | | OrderType = OrderTypeEnum.余料回库单.ObjToInt(), |
| | | System = "WMS" |
| | | }; |
| | | if(lastReturnOrder != null) |
| | | { |
| | | lastReturnOrder.Remark = lastReturnOrder.Remark + $",{returnOrder.BatchNo}"; |
| | | _returnOrderRepository.UpdateData(lastReturnOrder); |
| | | } |
| | | if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null) |
| | | { |
| | | returnOrder.LocationCode = stockInfo.LocationCode; |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | if(lastReturnOrder == null) |
| | | { |
| | | _returnOrderRepository.AddData(returnOrder); |
| | | lastReturnOrder = returnOrder; |
| | | } |
| | | stockInfo.LocationCode = ""; |
| | | stockInfo.StockStatus = StockStatusEmun.余料退库.ObjToInt(); |
| | | stockInfo.Remark = "余料退库"; |
| | | stockInfoDetail.OutboundQuantity = 0; |
| | | stockInfoDetail.StockQuantity = returnQuantity; |
| | | stockInfoDetail.OrderNo = lastReturnOrder.OrderNo; |
| | | _stockService.StockInfoService.Repository.UpdateData(stockInfo); |
| | | _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetail); |
| | | _unitOfWorkManage.CommitTran(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | //低温、药水回库单 |
| | |
| | | result = response.Content.ReadAsStringAsync() |
| | | .ConfigureAwait(false).GetAwaiter().GetResult(); |
| | | } |
| | | WriteLog.Write_Log("API", "出库—回调ERP(成功)", "请求成功", new { 请求报文 = postContent, 接收报文 = result }); |
| | | |
| | | // 假设ERP返回成功时返回成功响应 |
| | | return WebResponseContent.Instance.OK(result); |
| | | } |
| | | catch (HttpRequestException ex) |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调ERP(失败)", "请求失败", new { 请求报文 = postContent, 接收报文 = ex.Message }); |
| | | |
| | | // 处理HTTP请求相关异常 |
| | | return WebResponseContent.Instance.Error($"HTTP请求错误: {ex.Message}"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteLog.Write_Log("API", "出库—回调ERP(失败)", "请求失败", new { 请求报文 = postContent, 接收报文 = ex.Message }); |
| | | |
| | | // 处理其他异常 |
| | | return WebResponseContent.Instance.Error($"处理失败: {ex.Message}"); |
| | | } |
| | |
| | | // 判断Success的值 |
| | | if (response.Code == 0) |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调ERP(成功)", "请求成功", new { 请求报文 = feedbackInboundOrderERPs, 接收报文 = response }); |
| | | |
| | | // 如果Success为true,返回需要的值(这里以返回整个响应对象为例) |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("API", "入库—回调ERP(失败)", "请求失败", new { 请求报文 = feedbackInboundOrderERPs, 接收报文 = response }); |
| | | |
| | | // 如果Success为false,抛出异常并包含错误信息 |
| | | throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}"); |
| | | } |