From 7ca9651f81d7b84f054194d3d46fdbd1d9c8b922 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期三, 09 七月 2025 22:55:27 +0800 Subject: [PATCH] 增加质检出入库逻辑 --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 105 insertions(+), 7 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" index 310eb5b..d1ca057 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" @@ -1,13 +1,18 @@ -锘縰sing System; +锘縰sing MailKit.Search; +using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.Linq; +using System.Reflection.Metadata; using System.Text; using System.Threading.Tasks; using WIDESEA_Common; using WIDESEA_Core; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; +using WIDESEA_DTO.WCSInfo; using WIDESEA_Model.Models; +using WIDESEAWCS_DTO.WCSInfo; namespace WIDESEA_TaskInfoService { @@ -34,10 +39,10 @@ TargetAddress = cachePoint.PointCode, //SourceKey = outTask.TaskId, TaskNum = outTask.TaskNum, - TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(), + TaskState = AGVTaskStatusEnum.AGV_New.ObjToInt(), TaskType = TaskTypeEnum.AGVCarry.ObjToInt(), }; - cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt(); + cachePoint.PointStatus = LocationStatusEnum.OutLock.ObjToInt(); _basicService.CachePointService.Repository.UpdateData(cachePoint); Repository.AddData(task); @@ -65,10 +70,10 @@ TargetAddress = endPoint, //SourceKey = 0, TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), - TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(), + TaskState = AGVTaskStatusEnum.AGV_New.ObjToInt(), TaskType = TaskTypeEnum.AGVCarry.ObjToInt(), }; - cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt(); + cachePoint.PointStatus = LocationStatusEnum.OutLock.ObjToInt(); _basicService.CachePointService.Repository.UpdateData(cachePoint); Repository.AddData(task); @@ -96,15 +101,108 @@ TargetAddress = cachePoint.PointCode, //SourceKey = 0, TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), - TaskStatus = AGVTaskStatusEnum.AGV_New.ObjToInt(), + TaskState = AGVTaskStatusEnum.AGV_New.ObjToInt(), TaskType = TaskTypeEnum.AGVCarry.ObjToInt(), }; - cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt(); + cachePoint.PointStatus = LocationStatusEnum.OutLock.ObjToInt(); _basicService.CachePointService.Repository.UpdateData(cachePoint); Repository.AddData(task); return WebResponseContent.Instance.OK(); } + /// <summary> + /// 浜哄伐缁勭洏鍏ュ簱 + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + public WebResponseContent InMateriel(SaveModel saveModel) + { + WebResponseContent responseContent = new WebResponseContent(); + try + { + var palletCode = saveModel.MainData["palletCode"].ToString(); + if (string.IsNullOrEmpty(palletCode)) throw new Exception("鎵樼洏鍙蜂笉鍙负绌�"); + //var orderNo = saveModel.MainData["orderNo"].ToString(); + //if (string.IsNullOrEmpty(orderNo)) throw new Exception("鎵瑰彿涓嶅彲涓虹┖"); + var qty = saveModel.MainData["qty"].ToString(); + if (string.IsNullOrEmpty(qty)) throw new Exception("琚嬫暟涓嶅彲涓虹┖"); + var batchNo = saveModel.MainData["batchNo"].ToString(); + if (string.IsNullOrEmpty(batchNo)) throw new Exception("鏌滃彿涓嶅彲涓虹┖"); + + #region 鏌ヨ搴撳瓨銆佸叆搴撳崟 + Dt_InventoryInfo inventoryInfo = _inventoryInfoRepository.QueryFirst(x => x.PalletCode == palletCode); + if (inventoryInfo != null) throw new Exception($"鎵樼洏銆恵palletCode}銆戝凡瀛樺湪搴撳瓨淇℃伅"); + Dt_InboundOrderDetail? inboundOrderDetail = _inboundService.InboundOrderDetailService.Repository.QueryFirst(x => x.BatchNo == batchNo); + if (inboundOrderDetail == null) throw new Exception($"鏈壘鍒版壒鍙枫�恵batchNo}銆戠殑鍏ュ簱鍗�"); + if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < qty.ObjToInt()) throw new Exception($"鎵瑰彿銆恵batchNo}銆戝彲缁勭洏鏁伴噺涓嶈冻"); + Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Repository.QueryFirst(x => x.Id == inboundOrderDetail.OrderId); + if (inboundOrder == null) throw new Exception($"鏈壘鍒版壒鍙蜂负銆恵batchNo}銆戠殑鍏ュ簱鍗�"); + Dt_Inventory_Batch inventory_Batch = _inventoryBatchRepository.QueryFirst(x => x.BatchNo == batchNo); + if (inventory_Batch == null) throw new Exception($"鏈壘鍒版壒鍙蜂负銆恵batchNo}銆戠殑鎵规淇℃伅"); + #endregion + + #region 鍒涘缓浠诲姟 + Dt_Task dt_Task = new Dt_Task() + { + CurrentAddress = "1001", + NextAddress = "1002", + SourceAddress = "RGRK", + TargetAddress = "SC01", + Creater = "System", + PalletCode = palletCode, + Roadway = "SC01", + OrderNo = batchNo, + TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), + TaskState = InTaskStatusEnum.AGV_InFinish.ObjToInt(), + TaskType = inboundOrder.OrderType == InOrderTypeEnum.Quality.ObjToInt() ? TaskTypeEnum.InQuality.ObjToInt() : TaskTypeEnum.Inbound.ObjToInt(), + CreateDate = DateTime.Now, + Dispatchertime = DateTime.Now, + }; + #endregion + + #region 娣诲姞搴撳瓨淇℃伅銆佸鐞嗗叆搴撳崟 + inventoryInfo = new Dt_InventoryInfo() + { + BatchNo = inventory_Batch.BatchNo, + MaterielCode = inventory_Batch.MaterielCode, + MaterielName = inventory_Batch.MaterielName, + PalletCode = palletCode, + ProductionDate = inventory_Batch.ProductionDate, + StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(), + ProductStatus = dt_Task.TaskType == TaskTypeEnum.InQuality.ObjToInt() ? ProductStatusEmun.寰呮2.ObjToInt() : ProductStatusEmun.寰呮1.ObjToInt(), + ShelfLife = inventory_Batch.ShelfLife, + ValidityPeriod = inventory_Batch.ValidityPeriod, + StockQuantity = qty.ObjToInt(), + BoxQuantity = (qty.ObjToInt() % 8 > 0) ? (qty.ObjToInt() / 8) + 1 : qty.ObjToInt() / 8, + Creater = "System" + }; + inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱涓�.ObjToInt(); + inboundOrderDetail.ReceiptQuantity += inventoryInfo.StockQuantity; + inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt(); + inventory_Batch.ProductStatus = inventoryInfo.ProductStatus; + #endregion + + Db.Ado.BeginTran(); + _inboundService.InbounOrderService.UpdateData(inboundOrder); + _inboundService.InboundOrderDetailService.UpdateData(inboundOrderDetail); + _inventoryInfoRepository.AddData(inventoryInfo); + _inventoryBatchRepository.UpdateData(inventory_Batch); + AddData(dt_Task); + List<WMSTaskDTO> wMSTaskDTOs = _mapper.Map<List<WMSTaskDTO>>(new List<Dt_Task> { dt_Task }); + var ResultData = HttpHelper.PostAsync(WCSInterfaceAddress.ReceiveTask, wMSTaskDTOs.ToJson(), headers: new Dictionary<string, string>()); + if (ResultData.Result == null) throw new Exception($"鍚慦CS涓嬪彂鍏ュ簱浠诲姟瓒呮椂"); + responseContent = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result); + if (responseContent == null) throw new Exception($"涓嬪彂鍏ュ簱浠诲姟WCS鏃犲搷搴�"); + if (!responseContent.Status) throw new Exception(responseContent.Message); + Db.Ado.CommitTran(); + } + catch (Exception ex) + { + Db.Ado.RollbackTran(); + responseContent.Error(ex.Message); + } + return responseContent; + } private Dt_CachePoint GetCachePointByStartPoint(string startPoint) { -- Gitblit v1.9.3