using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core.Enums; using WIDESEA_Core; using WIDESEA_DTO.Stock; using WIDESEA_Model.Models; using WIDESEA_Core.Helper; using WIDESEA_Common.OtherEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Common.OrderEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.LocationEnum; using MailKit.Search; using WIDESEA_External.Model; using WIDESEA_Core.CodeConfigEnum; using Microsoft.AspNetCore.Mvc; using WIDESEA_DTO.ERP; using WIDESEA_Common.MaterielEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_DTO.MES; using WIDESEA_DTO.Outbound; using Microsoft.IdentityModel.Tokens; namespace WIDESEA_TaskInfoService { public partial class TaskService { /// /// 选择库存生成出库任务 /// /// /// public WebResponseContent Outbound(List ids) { WebResponseContent content = new WebResponseContent(); try { //获取选定库存 List stockInfos = _stockRepository.StockInfoRepository.Db.Queryable().Where(x => ids.Contains(x.Id) && x.StockStatus == StockStatusEmun.入库完成.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt()).ToList(); if (stockInfos == null || stockInfos.Count != ids.Count) { return content.Error($"未找到库存"); } //获取库存货位 List locationInfos = _basicRepository.LocationInfoRepository.QueryData(x =>x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && stockInfos.Select(x=>x.LocationCode).Contains(x.LocationCode) && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())); if (locationInfos == null || locationInfos.Count != stockInfos.Count) { return content.Error($"货位出库条件不满足"); } //任务生成 List tasks = GetTasks(stockInfos, TaskTypeEnum.OldYLOutbound); if (tasks == null || tasks.Count <= 0) { return content.Error($"生成任务失败"); } stockInfos.ForEach(x => { x.StockStatus = StockStatusEmun.出库锁定.ObjToInt(); }); _unitOfWorkManage.BeginTran(); //更新库存状态 _stockRepository.StockInfoRepository.UpdateData(stockInfos); //更新货位状态 _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock); //加入货位变动记录 _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList()); //新建任务 BaseDal.AddData(tasks); _unitOfWorkManage.CommitTran(); PushTasksToWCS(tasks); content.OK(); } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 向WMS申请出库AGV终点 /// /// 任务号 /// public WebResponseContent AssignOutTargetAddress(int taskNum) { WebResponseContent content = new WebResponseContent(); try { Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) { return WebResponseContent.Instance.Error($"未找到该入库任务"); } if (_basicRepository.AGVStationInfoRepository.QueryFirst(x => x.AGVStationCode == task.TargetAddress) != null) { return WebResponseContent.Instance.OK(data: task.TargetAddress); } Dt_AGVStationInfo? aGVStationInfo = _basicRepository.AGVStationInfoRepository.QueryData(x => x.StationArea == nameof(AGVStationAreaEnum.一楼月台码头) && x.IsOccupied == WhetherEnum.False.ObjToInt()).OrderByDescending(x => x.Depth).FirstOrDefault(); if (aGVStationInfo==null) { return content.Error("未找到可分配的出库站点"); } aGVStationInfo.IsOccupied = WhetherEnum.True.ObjToInt(); _basicRepository.AGVStationInfoRepository.UpdateData(aGVStationInfo); content.OK("成功",data: aGVStationInfo.AGVStationCode); } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 出库任务完成 /// public WebResponseContent OutboundTaskCompleted(Dt_Task task) { try { Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); if (warehouse.WarehouseCode == WarehouseEnum.LLDCP.ToString() || warehouse.WarehouseCode == WarehouseEnum.LLDFL.ToString()) //成品完成 { Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); if (locationInfoStart == null) { return WebResponseContent.Instance.Error($"未找到对应的起点货位信息"); } Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable().Where(x => x.PalletCode == task.PalletCode).Includes(x=>x.proStockInfoDetails).First(); if (proStockInfo != null && proStockInfo.StockStatus==StockStatusEmun.出库锁定.ObjToInt()) { task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); proStockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt(); _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfo,App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.人工完成 : WIDESEA_Core.Enums.OperateTypeEnum.自动完成); if (proStockInfo.proStockInfoDetails!=null && proStockInfo.proStockInfoDetails.Count>0) { _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfo.proStockInfoDetails, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.人工完成 : WIDESEA_Core.Enums.OperateTypeEnum.自动完成); } _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.人工完成 : WIDESEA_Core.Enums.OperateTypeEnum.自动完成); _unitOfWorkManage.CommitTran(); } else { return WebResponseContent.Instance.Error($"未找到对应库存信息"); } } else//原料库完成 { Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); if (locationInfoStart == null) { return WebResponseContent.Instance.Error($"未找到对应的起点货位信息"); } Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode); if (stockInfo != null && stockInfo.StockStatus == StockStatusEmun.出库锁定.ObjToInt()) { task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); //处理库存数据 if (task.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()) { stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt(); stockInfo.WarehouseId = WarehouseEnum.LLDOldCache.ObjToInt(); stockInfo.LocationCode = ""; _stockRepository.StockInfoRepository.UpdateData(stockInfo); } else { stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt(); _stockRepository.StockInfoRepository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.人工完成 : WIDESEA_Core.Enums.OperateTypeEnum.自动完成); } _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.人工完成 : WIDESEA_Core.Enums.OperateTypeEnum.自动完成); _unitOfWorkManage.CommitTran(); } else { return WebResponseContent.Instance.Error($"未找到对应库存信息"); } } return WebResponseContent.Instance.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } /// /// 库存数据转出库任务(原料/半成品) /// /// /// public List GetTasks(List stockInfos, TaskTypeEnum taskType) { List tasks = new List(); for (int i = 0; i < stockInfos.Count; i++) { Dt_StockInfo stockInfo = stockInfos[i]; if (stockInfo != null) { Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode); if (!tasks.Exists(x => x.PalletCode == stockInfo.PalletCode)) { Dt_Task task = new() { CurrentAddress = stockInfo.LocationCode, Grade = 0, PalletCode = stockInfo.PalletCode, NextAddress = "", Roadway = locationInfo.RoadwayNo, SourceAddress = stockInfo.LocationCode, TargetAddress = "", TaskStatus = TaskStatusEnum.New.ObjToInt(), TaskType = taskType.ObjToInt(), TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), PalletType = stockInfo.PalletType, WarehouseId = stockInfo.WarehouseId, MaterielCode = stockInfo.MaterielCode, RfidCode = stockInfo.RfidCode, Quantity = stockInfo.StockLength, }; if (stockInfo.MaterielWide>0) { task.TaskLength = (int)stockInfo.MaterielWide; } tasks.Add(task); } } } return tasks; } /// /// 库存数据转出库任务(辅料/成品) /// public List GetTasks(List stockInfos, TaskTypeEnum taskType,List locationInfos) { List tasks = new List(); for (int i = 0; i < stockInfos.Count; i++) { Dt_ProStockInfo stockInfo = stockInfos[i]; if (stockInfo != null) { Dt_LocationInfo locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == stockInfo.LocationCode); if (!tasks.Exists(x => x.PalletCode == stockInfo.PalletCode)) { Dt_Task task = new () { CurrentAddress = stockInfo.LocationCode, Grade = 0, PalletCode = stockInfo.PalletCode, NextAddress = "", Roadway = locationInfo.RoadwayNo, SourceAddress = stockInfo.LocationCode, TargetAddress = "", TaskStatus = TaskStatusEnum.New.ObjToInt(), TaskType = taskType.ObjToInt(), TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), PalletType = stockInfo.PalletType, WarehouseId = stockInfo.WarehouseId, MaterielCode= stockInfo.proStockInfoDetails?.FirstOrDefault().ProductCode ?? "" , Quantity = 0, }; tasks.Add(task); } } } return tasks; } /// /// 成品出库 /// /// public WebResponseContent RequestCPWMSTaskOut(string materialCode,int Count, string targetId) { WebResponseContent content = new WebResponseContent(); try { List aGVStationInfos = _basicRepository.AGVStationInfoRepository.QueryData(x=>x.StationArea == targetId && x.IsOccupied==WhetherEnum.False.ObjToInt()); int useCount=aGVStationInfos.Count; if (targetId == nameof(AGVStationAreaEnum.一楼月台码头)) { //获取所有月台出库任务 List _TasksOut = BaseDal.QueryData(x => x.TaskType == TaskTypeEnum.OutProduct.ObjToInt() && x.TargetAddress == nameof(AGVStationAreaEnum.一楼月台码头)); if (_TasksOut.Count>0) { useCount -= _TasksOut.Count; } } if (useCount < Count) { return content.Error($"可用缓存数不足"); } //获取货位 List locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDCP.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt()); List stockInfos = new List(); if (materialCode=="1") { stockInfos = BaseDal.Db.Queryable().Where(x => locationInfos.Select(x => x.LocationCode).Contains(x.LocationCode) && x.StockStatus == StockStatusEmun.入库完成.ObjToInt() && x.ProStockAttribute==ProStockAttributeEnum.空托.ObjToInt()).Take(Count).OrderBy(x => x.CreateDate).ToList(); } else { stockInfos = BaseDal.Db.Queryable().Where(x => locationInfos.Select(x => x.LocationCode).Contains(x.LocationCode) && x.StockStatus == StockStatusEmun.入库完成.ObjToInt()).Includes(x => x.proStockInfoDetails) .Where(x => x.proStockInfoDetails .Any(v => v.ProductCode == materialCode) ).Take(Count).OrderBy(x=>x.CreateDate).ToList(); } if (stockInfos.Count!=Count) { return content.Error($"库存{materialCode}数量不足"); } List AssignLocations = new List(); foreach (var item in stockInfos) { Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode); if (locationInfo != null) { AssignLocations.Add(locationInfo); item.StockStatus = StockStatusEmun.出库锁定.ObjToInt(); } } TaskTypeEnum typeEnum = targetId switch { nameof(AGVStationAreaEnum.一楼月台码头) => TaskTypeEnum.OutProduct, nameof(AGVStationAreaEnum.一楼无纺织布) => TaskTypeEnum.OutWFB, nameof(AGVStationAreaEnum.一楼无纺淋膜) => TaskTypeEnum.OutWFBLM, nameof(AGVStationAreaEnum.一楼纸张淋膜) => TaskTypeEnum.OutPaperLM, nameof(AGVStationAreaEnum.一楼分切) => TaskTypeEnum.OutFenQie, nameof(AGVStationAreaEnum.一楼模切) => TaskTypeEnum.OutMoQie, nameof(AGVStationAreaEnum.一楼冲切) => TaskTypeEnum.OutChongQie, nameof(AGVStationAreaEnum.二楼纸袋) or nameof(AGVStationAreaEnum.二楼无纺布袋) or nameof(AGVStationAreaEnum.二楼纸杯) => TaskTypeEnum.OutCarton, _ => throw new Exception("未找到对应任务") }; if (materialCode == "1" && typeEnum!= TaskTypeEnum.OutCarton) { typeEnum = TaskTypeEnum.OutEmpty; } List tasks = GetTasks(stockInfos, typeEnum, AssignLocations); if (tasks == null || tasks.Count <= 0) { return content.Error($"生成任务失败"); } //月台任务不直接分配终点 if (targetId != nameof(AGVStationAreaEnum.一楼月台码头)) { for (int i = 0; i < tasks.Count; i++) { aGVStationInfos[i].IsOccupied = WhetherEnum.True.ObjToInt(); tasks[i].TargetAddress = aGVStationInfos[i].AGVStationCode; } } else { for (int i = 0; i < tasks.Count; i++) { tasks[i].TargetAddress = nameof(AGVStationAreaEnum.一楼月台码头); } } //判断是否有出库单信息 _unitOfWorkManage.BeginTran(); //更新库存状态 _stockRepository.ProStockInfoRepository.UpdateData(stockInfos); _basicRepository.AGVStationInfoRepository.UpdateData(aGVStationInfos); //更新货位状态 _basicRepository.LocationInfoRepository.UpdateLocationStatus(AssignLocations, LocationStatusEnum.Lock); //加入货位变动记录 _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(AssignLocations, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList()); //新建任务 BaseDal.AddData(tasks); _unitOfWorkManage.CommitTran(); PushTasksToWCS(tasks); content.OK(); } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 原料出库任务 /// /// 物料代码 /// 物料幅宽 /// 卷数 /// public WebResponseContent RequestYLWMSTaskOut(YLWMSTaskOutDTO yLWMSTaskOutDTO) { WebResponseContent content = new WebResponseContent(); try { if (yLWMSTaskOutDTO==null) { return content.Error("请填入出库信息"); } //获取货位 List locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt()); //获取对应库存 List stockInfos = _stockRepository.StockInfoRepository.QueryData(x => locationInfos.Select(x => x.LocationCode).Contains(x.LocationCode) && x.MaterielCode == yLWMSTaskOutDTO.MaterialCode && x.MaterielWide == yLWMSTaskOutDTO.Wide && x.StockStatus == StockStatusEmun.入库完成.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.新厂.ObjToInt()).OrderBy(x => x.CreateDate).Take(yLWMSTaskOutDTO.Count).ToList(); if (stockInfos.Count< yLWMSTaskOutDTO.Count) { return content.Error($"库存{yLWMSTaskOutDTO.MaterialCode}数量不足"); } List AssignLocations =new List(); foreach (var item in stockInfos) { Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x=>x.LocationCode==item.LocationCode); if (locationInfo!=null) { AssignLocations.Add(locationInfo); item.StockStatus = StockStatusEmun.出库锁定.ObjToInt(); } } List tasks = GetTasks(stockInfos, TaskTypeEnum.PrintYLOutbound); if (tasks == null || tasks.Count <= 0) { return content.Error($"生成任务失败"); } if (!string.IsNullOrEmpty(yLWMSTaskOutDTO.Address)) { tasks.ForEach(x => { x.TargetAddress= yLWMSTaskOutDTO.Address; }); } else { return content.Error("地址信息不能为空"); } //判断是否有出库单信息 _unitOfWorkManage.BeginTran(); //更新库存状态 _stockRepository.StockInfoRepository.UpdateData(stockInfos); //更新货位状态 _basicRepository.LocationInfoRepository.UpdateLocationStatus(AssignLocations, LocationStatusEnum.Lock); //加入货位变动记录 _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(AssignLocations, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation,taskNums:tasks.Select(x=>x.TaskNum).ToList()); //新建任务 BaseDal.AddData(tasks); _unitOfWorkManage.CommitTran(); PushTasksToWCS(tasks); content.OK(); } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 创建原纸生管排程出库任务 /// /// /// public WebResponseContent CreateSGOutboundTasks(int[] keys) { WebResponseContent content = new WebResponseContent(); try { List tasks = new List(); List stockInfos = new List(); List outSGOrderDetails = new List(); List outStockLockInfos = new List(); List locationInfos = new List(); //生成任务、库存等信息 (List, List?, List?, List?, List?) result = OutSGTaskDataHandle(keys); if (result.Item2 != null && result.Item2.Count > 0) { stockInfos.AddRange(result.Item2); } if (result.Item3 != null && result.Item3.Count > 0) { outSGOrderDetails.AddRange(result.Item3); } if (result.Item4 != null && result.Item4.Count > 0) { outStockLockInfos.AddRange(result.Item4); } if (result.Item5 != null && result.Item5.Count > 0) { locationInfos.AddRange(result.Item5); } if (result.Item1 != null && result.Item1.Count > 0) { tasks.AddRange(result.Item1); } //处理出库数据 return GenerateOutboundTaskDataUpdate(tasks, stockInfos, outSGOrderDetails, outStockLockInfos, locationInfos); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; } /// /// 出库任务数据处理 /// /// /// /// /// public (List, List?, List?, List?, List?) OutSGTaskDataHandle(int[] keys) { List tasks = new List(); List outSGOrderDetails = _outboundRepository.OutSGOrderDetailRepository.QueryData(x => keys.Contains(x.Id)); if (outSGOrderDetails == null || outSGOrderDetails.Count == 0) { throw new Exception("未找到出库单明细信息"); } Dt_OutSGOrderDetail? outBSTOrderDetail = outSGOrderDetails.FirstOrDefault(x => x.OutSGOrderDetailStatus != OutOrderStatusEnum.未开始.ObjToInt()); if (outBSTOrderDetail != null) { throw new Exception($"出库明细{nameof(Dt_OutSGOrderDetail.BoardMpsDetailId)}{outBSTOrderDetail.BoardMpsDetailId}物料{outBSTOrderDetail.MaterialNo},出库中或已完成"); } List? stockInfos = null; List? orderDetails = null; List? outStockLockInfos = null; List? locationInfos = null; //分配库存 (List, List, List, List) result = _outboundService.OutSGOrderDetailService.AssignStockOutbound(outSGOrderDetails); if (result.Item1 != null && result.Item1.Count > 0) { //获取任务 tasks = GetTasks(result.Item1, TaskTypeEnum.OldYLOutbound); result.Item2.ForEach(x => { x.OutSGOrderDetailStatus = OutOrderStatusEnum.出库中.ObjToInt(); }); result.Item3.ForEach(x => { x.Status = OutLockStockStatusEnum.出库中.ObjToInt(); }); stockInfos = result.Item1; orderDetails = result.Item2; outStockLockInfos = result.Item3; locationInfos = result.Item4; } else { throw new Exception("无库存"); } return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos); } /// /// 处理出库数据 /// /// public WebResponseContent GenerateOutboundTaskDataUpdate(List tasks, List? stockInfos = null, List? outboundOrderDetails = null, List? outStockLockInfos = null, List? locationInfos = null) { try { _unitOfWorkManage.BeginTran(); if (outStockLockInfos != null && outStockLockInfos.Any()) { tasks.ForEach(x => { string orderNos = string.Join(",", outStockLockInfos.Where(x => x.PalletCode == x.PalletCode).Select(x => x.OrderNo).Distinct()); x.OrderNo = orderNos; }); } BaseDal.AddData(tasks); if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) { stockInfos.ForEach(x => { x.StockStatus = StockStatusEmun.出库锁定.ObjToInt(); }); outboundOrderDetails.ForEach(x => { x.OutSGOrderDetailStatus = OutOrderStatusEnum.出库中.ObjToInt(); }); List outSGOrders = _outboundRepository.OutSGOrderRepository.QueryData(x => outboundOrderDetails.Select(x=>x.OutSGOrderId).Distinct().Contains(x.Id)); if (outSGOrders.Count<=0) { throw new Exception("未找到单据信息"); } outSGOrders.ForEach(x => { x.OutSGOrderStatus = OutOrderStatusEnum.出库中.ObjToInt(); }); _outboundRepository.OutSGOrderRepository.UpdateData(outSGOrders); WebResponseContent content = _outboundService.OutSGOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks); if (!content.Status) { _unitOfWorkManage.RollbackTran(); return content; } } _unitOfWorkManage.CommitTran(); PushTasksToWCS(tasks); return WebResponseContent.Instance.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } /// /// BST领料信息同步 /// /// /// public WebResponseContent ReceivePicking(BSTPickInfoDTO bSTPickInfoDTO) { WebResponseContent content = new WebResponseContent(); try { } catch (Exception ex) { content.Error(ex.Message); } return content; } List GradeCodes = new List { "001" }; /// /// 接收MES领料计划 /// /// public WebResponseContent ReceiveOutBound(List outMESOrderDTOs) { WebResponseContent content = new WebResponseContent(); try { if (outMESOrderDTOs == null || outMESOrderDTOs.Count <= 0) { return content.Error("领料计划传入信息为空"); } outMESOrderDTOs.Select(x => x.OutDetailId); List warehouses = _basicRepository.WarehouseRepository.QueryData(); OutMESOrderDTO? CheckGradeCode = outMESOrderDTOs.FirstOrDefault(x => !GradeCodes.Contains(x.GradeCode)); if (CheckGradeCode != null) { return content.Error($"领料计划库区{nameof(OutMESOrderDTO.GradeCode)}:{CheckGradeCode.GradeCode}不存在"); } OutMESOrderDTO? CheckOutDetailId = outMESOrderDTOs.FirstOrDefault(x => x.OutDetailId <= 0); if (CheckOutDetailId != null) { return content.Error($"领料计划{nameof(OutMESOrderDTO.OutDetailId)}:{CheckOutDetailId.ProductOrderNo}需要大于0"); } OutMESOrderDTO? CheckReqQuantity = outMESOrderDTOs.FirstOrDefault(x => x.ReqQuantity <= 0); if (CheckReqQuantity != null) { return content.Error($"领料计划{nameof(OutMESOrderDTO.ReqQuantity)}:{CheckReqQuantity.ProductOrderNo}需要大于0"); } //获取所有物料信息 List materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.MaterielInvOrgId == MaterielInvOrgEnum.新厂.ObjToInt()); //获取所有领料计划 List outMESOrders = _outboundRepository.OutMESOrderRepository.QueryData(); //获取所有加工中心 List makeCenterInfos = _basicRepository.MakeCenterInfoRepository.QueryData(); OutMESOrderDTO? CheckMaterialCode = outMESOrderDTOs.FirstOrDefault(x => !materielInfos.Select(x => x.MaterielCode).Contains(x.MaterialCode)); if (CheckMaterialCode != null) { return content.Error($"物料编码{nameof(OutMESOrderDTO.MaterialCode)}:{CheckMaterialCode.MaterialCode}信息不存在"); } OutMESOrderDTO? CheckMakeCenterCode = outMESOrderDTOs.FirstOrDefault(x => !makeCenterInfos.Select(x => x.MakeCode).Contains(x.MakeCode)); if (CheckMakeCenterCode!=null) { return content.Error($"加工中心{nameof(OutMESOrderDTO.MakeCode)}:{CheckMakeCenterCode.MakeCode}信息不存在"); } Dt_OutMESOrder? OldoutMESOrder = outMESOrders.FirstOrDefault(x => outMESOrderDTOs.Select(x => x.OutDetailId).Contains(x.OutDetailId)); if (OldoutMESOrder != null) { return content.Error($"领料计划{nameof(OutMESOrderDTO.OutDetailId)}:{OldoutMESOrder.OutDetailId}信息已存在"); } List AddoutMESOrders = outMESOrderDTOs.Select(x => _mapper.Map(x)).ToList(); foreach (var item in AddoutMESOrders) { Dt_MaterielInfo materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterialCode); item.WarehouseId = materielInfo.WarehouseId; } _unitOfWorkManage.BeginTran(); _outboundRepository.OutMESOrderRepository.AddData(AddoutMESOrders); //List tasks = new List(); //List? stockInfos = null; //List? Orders = null; //List? outStockLockInfos = null; //List? locationInfos = null; //{ // //分配库存 // (List, List, List, List) result = _outboundService.OutMESOrderService.AssignStockOutbound(AddoutMESOrders); // if (result.Item1 != null && result.Item1.Count > 0) // { // //创建任务 // tasks = GetTasks(result.Item1, TaskTypeEnum.PrintYLOutbound); // result.Item2.ForEach(x => // { // OutOrderStatusEnum.出库中.ObjToInt(); // }); // result.Item3.ForEach(x => // { // x.Status = OutLockStockStatusEnum.出库中.ObjToInt(); // }); // stockInfos = result.Item1; // Orders = result.Item2; // outStockLockInfos = result.Item3; // locationInfos = result.Item4; // } // else // { // throw new Exception("无库存"); // } //} //int id = BaseDal.AddData(tasks); //if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) //{ // WebResponseContent contentResponse = _outboundService.OutMESOrderService.LockOutboundStockDataUpdate(stockInfos, Orders, outStockLockInfos, locationInfos, tasks: tasks); // if (!contentResponse.Status) // { // _unitOfWorkManage.RollbackTran(); // return content.Error(contentResponse.Message); // } //} _unitOfWorkManage.CommitTran(); return content.OK("接收成功"); } catch (Exception ex) { content.Error(ex.Message); } return content; } } }