using Furion.DatabaseAccessor; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Linq.Dynamic.Core; using Admin.NET.Core; using Yitter.IdGenerator; namespace Admin.NET.Application { /// /// Pda组盘出库 /// [ApiDescriptionSettings("Pda服务", Name = "GroupDiskOutWarehouse", Order = 100)] [Route("api/[Controller]")] public class GroupDiskOutWarehouseService : IDynamicApiController, ITransient { private readonly IRepository _wmsOrderDetailsRep; private readonly IRepository _lesPackWarehouseRep; private readonly IRepository _wmsTaskRep; private readonly IRepository _wmsPlaceRep; private readonly IRepository _wmsAreaRep; private readonly IRepository _wmsOrderTypeRep; private readonly IRepository _wmsMaterialContainerRep; private readonly IRepository _wmsContainerRep; private readonly IRepository _wmsContainerPlaceRep; private readonly IRepository _wmsMaterialStockRep; /// /// 构造函数 /// public GroupDiskOutWarehouseService( IRepository wmsOrderDetailsRep, IRepository lesPackWarehouseRep, IRepository wmsTaskRep, IRepository wmsPlaceRep, IRepository wmsAreaRep, IRepository wmsOrderTypeRep, IRepository wmsMaterialContainerRep, IRepository wmsContainerRep, IRepository wmsContainerPlaceRep, IRepository wmsMaterialStockRep ) { _wmsOrderDetailsRep = wmsOrderDetailsRep; _lesPackWarehouseRep = lesPackWarehouseRep; _wmsTaskRep = wmsTaskRep; _wmsPlaceRep = wmsPlaceRep; _wmsAreaRep = wmsAreaRep; _wmsOrderTypeRep = wmsOrderTypeRep; _wmsMaterialContainerRep = wmsMaterialContainerRep; _wmsContainerRep = wmsContainerRep; _wmsContainerPlaceRep = wmsContainerPlaceRep; _wmsMaterialStockRep = wmsMaterialStockRep; } ///// ///// 根据出库口获取码垛数据 ///// ///// ///// //[HttpGet("GetPackInfomation")] //public async Task GetPackInfomation([FromQuery] GetPackInfomationInput input) //{ // //根据出库口获取打包表数据 // var lesPackWarehouseList = await _lesPackWarehouseRep.DetachedEntities // .Where(u => u.OutputEntrance == input.OutputEntrance && u.LesPackState == LesPackState.WEICHUKU) // .ToListAsync(); // if (lesPackWarehouseList.Count==0) throw Oops.Oh("暂无码垛信息!"); // //if(lesPackWarehouseList.Select(p=>p.OrderNo).Count()>=2) throw Oops.Oh("码垛信息存在多条!请到PC端进行处理!"); // //获取当前出库单据中执行中单据明细 // var wmsOrderDetailList = await _wmsOrderDetailsRep // .Where(u=>u.WareOrder.OrderLargeCategory== 408734100951109 && u.WareOrder.ExitPort==input.OutputEntrance // && lesPackWarehouseList.Select(n=>n.MaterialNo).ToList().Contains(u.MaterialNo)).ProjectToType().ToListAsync(); // if (wmsOrderDetailList.Count == 0) throw Oops.Oh("暂无出库单据!"); // List groupDiskOutWarehouseList = new List();//打包信息list // foreach (var item in wmsOrderDetailList) // { // GroupDiskOutWarehouse groupDiskOutWarehouse = new GroupDiskOutWarehouse(); // groupDiskOutWarehouse.MaterialNo = item.MaterialNo; // groupDiskOutWarehouse.Long = item.Long; // groupDiskOutWarehouse.Wide = item.Wide; // groupDiskOutWarehouse.High = item.High; // groupDiskOutWarehouseList.Add(groupDiskOutWarehouse); // } // return new GroupDiskOutWarehouseOutput() // { // OrderNo = wmsOrderDetailList.FirstOrDefault().WareOrder.OrderNo, // OrderSubclass = (await _wmsOrderTypeRep.FirstOrDefaultAsync(u => u.Id == wmsOrderDetailList.FirstOrDefault().WareOrder.OrderSubclass)).Name, // GroupDiskOutWarehouseList = groupDiskOutWarehouseList // }; //} ///// ///// 确认出库 ///// ///// ///// //[HttpPost("Pack")] //[UnitOfWork] //public async Task PackOutWarehouse([FromBody] PackOutWarehouseInput input) //{ // if (input.PackCode == null) throw Oops.Oh("打包标签不能为空!"); // if (input.MaterialNoList.Count == 0) throw Oops.Oh("物料码不能为空!"); // //循环物料码 // foreach (var item in input.MaterialNoList) // { // //更改打包表中物料状态 // var lesPackWarehouse = await _lesPackWarehouseRep.FirstOrDefaultAsync(u => u.MaterialNo == item.MaterialNo && u.LesPackState == LesPackState.WEICHUKU); // if (lesPackWarehouse == null) throw Oops.Oh("打包表中不存在此物料!"); // lesPackWarehouse.PackCode = input.PackCode; // lesPackWarehouse.LesPackState = LesPackState.ZHUANYIKU; // await _lesPackWarehouseRep.UpdateAsync(lesPackWarehouse); // //更改单据明细的状态 // var wmsOrderDetail = await _wmsOrderDetailsRep.FirstOrDefaultAsync // (u => u.MaterialNo == item.MaterialNo && u.WareOrder.OrderLargeCategory == 408734100951109); // if (wmsOrderDetail == null) throw Oops.Oh("单据明细中不存在此物料!"); // wmsOrderDetail.OrderStatus = OrderDetailsStatusEnum.WANCHENG; // await _lesPackWarehouseRep.UpdateAsync(lesPackWarehouse); // //更改任务状态 // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync // (u => u.OrderDetailsId == wmsOrderDetail.Id && u.TaskStatus == TaskStatusEnum.ZHIXINGZHONG // && u.TaskType == TaskType.CHUKU); // if (wmsTask == null) throw Oops.Oh("任务不存在!"); // wmsTask.TaskStatus = TaskStatusEnum.WANCHENG; // await _wmsTaskRep.UpdateAsync(wmsTask); // } // //标签码当托盘码使用 // var oldwmsMaterialContainerList = await _wmsMaterialContainerRep // .Where(p => p.ContainerCode == input.PackCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); // if (oldwmsMaterialContainerList.Count > 0) // { // foreach (var item in oldwmsMaterialContainerList) // { // await _wmsMaterialContainerRep.DeleteAsync(item); // } // } // //组盘单据 默认空托单据 // var orderNo = "N/A"; // if (input.MaterialNoList.Count > 0) orderNo =YitIdHelper.NextId().ToString(); // //新增组盘数据 // foreach (var item in input.MaterialNoList) // { // //获取明细 // var wmsOrderDetail = await _wmsOrderDetailsRep.FirstOrDefaultAsync // (u => u.MaterialNo == item.MaterialNo && u.WareOrder.OrderLargeCategory == 408734100951109); // if (wmsOrderDetail == null) throw Oops.Oh("单据信息异常!"+item.MaterialNo); // WmsMaterialContainer bindentranceModel = new WmsMaterialContainer(); // bindentranceModel.ContainerCode = input.PackCode; // bindentranceModel.ContainerId = 405636578041925; // bindentranceModel.MaterialNo = item.MaterialNo; // bindentranceModel.MaterialBatch = wmsOrderDetail.Batch; // bindentranceModel.MaterialSpec = wmsOrderDetail.Long.ToString() + "*" + wmsOrderDetail.Wide.ToString() + "*" + wmsOrderDetail.High.ToString(); // bindentranceModel.BindQuantity = 1; // bindentranceModel.OrderDetailsId = wmsOrderDetail.Id; // bindentranceModel.MaterialDensity = wmsOrderDetail.MaterialDensity; // bindentranceModel.BindStatus = CommonStatus.ENABLE; // bindentranceModel.OrderNo = orderNo; // bindentranceModel.MaterialName = "N/A"; // await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel); // } // //获取转移库库位 // var zyPlaceModel = await _wmsPlaceRep.DetachedEntities.Where(p => p.WmsArea.AreaType == AreaType.ZHUANYIKU // && p.Islock == YesOrNot.N && p.PlaceStatus == PlaceStatus.KONGXIAN).FirstOrDefaultAsync(); // //创建任务 目前人工转移无需创建任务 // //创建托盘库位关系表 // var wmsContainerPlaceModel = new WmsContainerPlace() // { // PlaceId = zyPlaceModel.Id, // PlaceCode = zyPlaceModel.PlaceCode, // ContainerId = 405636578041925, //给予一个特定的值 // ContainerCode = input.PackCode, // ContainerPlaceStatus = CommonStatus.ENABLE // }; // await _wmsContainerPlaceRep.InsertAsync(wmsContainerPlaceModel); // //更新库存 // var wmsMaterialContainerList = await _wmsMaterialContainerRep.DetachedEntities // .Where(p => p.OrderNo == orderNo && p.BindStatus == CommonStatus.ENABLE).ProjectToType().ToListAsync(); // //物料入库 // foreach (var item in wmsMaterialContainerList) // { // var StockModel = await _wmsMaterialStockRep // .Where(p => p.ContainerCode == input.PackCode // && p.MaterialName == item.MaterialName && p.MaterialNo == item.MaterialNo && p.MaterialBatch == item.MaterialBatch ).FirstOrDefaultAsync(); // if (StockModel != null) // { // StockModel.MaterialDensity = item.MaterialDensity; // StockModel.PlaceCode = zyPlaceModel.PlaceCode; // StockModel.AreaId = zyPlaceModel.AreaId; // StockModel.StockNumber = item.BindQuantity; // await _wmsMaterialStockRep.UpdateAsync(StockModel); // } // else // { // StockModel = new WmsMaterialStock() // { // MaterialNo = item.MaterialNo, // //MaterialType = item.MaterialType, // MaterialName = item.MaterialName, // MaterialSpec = item.MaterialSpec, // MaterialBatch = item.MaterialBatch, // MaterialDensity = item.MaterialDensity, // //InspectionMethod = item.WmsMaterial.InspectionMethod, // //UnitType = item.WmsMaterial.UnitType, // //UnitNo = item.WmsMaterial.UnitNo, // StockNumber = item.BindQuantity, // PlaceCode = zyPlaceModel.PlaceCode, // ContainerCode = input.PackCode, // AreaId = zyPlaceModel.AreaId, // }; // await _wmsMaterialStockRep.InsertAsync(StockModel); // } // } // //更新库位 // zyPlaceModel.PlaceStatus = PlaceStatus.CUNHUO; // await _wmsPlaceRep.UpdateAsync(zyPlaceModel); //} } }