//using Furion.DatabaseAccessor; //using Furion.DependencyInjection; //using Furion.DynamicApiController; //using Furion.FriendlyException; //using Mapster; //using Microsoft.AspNetCore.Authorization; //using Microsoft.AspNetCore.Mvc; //using Microsoft.EntityFrameworkCore; //using System.Linq.Dynamic.Core; //using Admin.NET.Core; //using Yitter.IdGenerator; //using Microsoft.Extensions.Logging; //using Microsoft.AspNetCore.Mvc.RazorPages; //namespace Admin.NET.Application //{ // /// // /// 物料分拣服务 // /// // [ApiDescriptionSettings("Pda分拣", Name = "MaterialSorting", Order = 100)] // [Route("api/[Controller]")] // public class MaterialSortingService : IDynamicApiController, ITransient // { // private readonly IRepository _wmsOrderRep; // private readonly IRepository _wmsOrderDetailsRep; // private readonly IRepository _wmsTaskRep; // private readonly IRepository _wmsPlaceRep; // private readonly IRepository _wmsAreaRep; // private readonly IRepository _wmsWarehouseEntranceRep; // private readonly IRepository _wmsMaterialContainerRep; // private readonly IRepository _wmsContainerRep; // private readonly IRepository _wmsContainerPlaceRep; // private readonly IRepository _wmsMaterialStockRep; // private readonly IRepository _wmsOrderTypeRep; // private readonly IRepository _wmsSortOrderRep; // private readonly IRepository _wmsTakeMaterialOrderRep; // /// // /// 构造函数 // /// // public MaterialSortingService( // IRepository wmsOrderRep, // IRepository wmsOrderDetailsRep, // IRepository wmsTaskRep, // IRepository wmsPlaceRep, // IRepository wmsAreaRep, // IRepository wmsWarehouseEntranceRep, // IRepository wmsMaterialContainerRep, // IRepository wmsContainerRep, // IRepository wmsContainerPlaceRep, // IRepository wmsMaterialStockRep, // IRepository wmsOrderTypeRep, // IRepository wmsSortOrderRep, // IRepository wmsTakeMaterialOrderRep // ) // { // _wmsOrderRep = wmsOrderRep; // _wmsOrderDetailsRep = wmsOrderDetailsRep; // _wmsTaskRep = wmsTaskRep; // _wmsPlaceRep = wmsPlaceRep; // _wmsAreaRep = wmsAreaRep; // _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep; // _wmsMaterialContainerRep = wmsMaterialContainerRep; // _wmsContainerRep = wmsContainerRep; // _wmsContainerPlaceRep = wmsContainerPlaceRep; // _wmsMaterialStockRep = wmsMaterialStockRep; // _wmsOrderTypeRep = wmsOrderTypeRep; // _wmsSortOrderRep = wmsSortOrderRep; // _wmsTakeMaterialOrderRep = wmsTakeMaterialOrderRep; // } // /// // /// 扫描分拣托盘 // /// // /// // /// // [HttpGet("GetSortInfo")] // public async Task GetSortInfo([FromQuery] GetSortInfoInput input) // { // //检查托盘 // var wareContainer = await _wmsContainerRep.FirstOrDefaultAsync(z => z.ContainerCode == input.ContainerCode); // if (wareContainer == null) throw Oops.Oh("容器信息不存在!"); // if (wareContainer.ContainerStatus == ContainerStatus.JINYONG) throw Oops.Oh("容器已禁用!"); // if (wareContainer.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("容器在库位不可使用!"); // if (wareContainer.ContainerStatus != ContainerStatus.FENJIAN) throw Oops.Oh("容器不存在分拣信息!"); // //判断是否在任务中 // var isExit = await _wmsTaskRep.AnyAsync(n => n.TaskStatus != TaskStatusEnum.WANCHENG && n.ContainerCode == input.ContainerCode); // if (isExit) throw Oops.Oh("容器存在未完成任务!"); // // 查询分拣记录 // var wareSortOrderList = await _wmsSortOrderRep.DetachedEntities // .Where(p => p.ContainerCode == input.ContainerCode && p.SortStatus != SortStatusEnum.FENJIANWANCHENG).ToListAsync(); // return new GetSortInfoOutput // { // WmsContainer = wareContainer.Adapt(), // WmsSortOrderList = wareSortOrderList // }; // } // /// // /// 分拣确认 // /// // /// // /// // [HttpPost("SortSure")] // [UnitOfWork] // public async Task SortSure(GetSortInfoOutput input) // { // if (input.WmsContainer == null || input.WmsSortOrderList.Count == 0) throw Oops.Oh("传递参数异常!"); // //检查托盘 // var wareContainer = await _wmsContainerRep.FirstOrDefaultAsync(z => z.ContainerCode == input.WmsContainer.ContainerCode); // if (wareContainer == null) throw Oops.Oh("容器信息不存在!"); // if (wareContainer.ContainerStatus == ContainerStatus.JINYONG) throw Oops.Oh("容器已禁用!"); // if (wareContainer.ContainerStatus == ContainerStatus.KUWEI) throw Oops.Oh("容器在库位不可使用!"); // if (wareContainer.ContainerStatus != ContainerStatus.FENJIAN) throw Oops.Oh("容器不存在分拣信息!"); // var wmsMaterialContainers = await _wmsMaterialContainerRep // .Where(p => p.ContainerCode == input.WmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); // foreach (var item in input.WmsSortOrderList) // { // var wmsMaterialContainerModel = wmsMaterialContainers.FirstOrDefault(p => p.MaterialNo == item.Materialcode); // if (wmsMaterialContainerModel != null) // { // if (wmsMaterialContainerModel.BindQuantity < item.ActualQuantity) throw Oops.Oh("分拣组盘异常!"); // wmsMaterialContainerModel.BindQuantity -= item.ActualQuantity; // if (wmsMaterialContainerModel.BindQuantity <= 0) // { // wmsMaterialContainers.Remove(wmsMaterialContainerModel); // await _wmsMaterialContainerRep.DeleteAsync(wmsMaterialContainerModel); // } // else // { // await _wmsMaterialContainerRep.UpdateAsync(wmsMaterialContainerModel); // } // } // var stockModel = await _wmsMaterialStockRep.FirstOrDefaultAsync(p => p.ContainerCode == wareContainer.ContainerCode && p.MaterialNo == item.Materialcode); // if (stockModel != null) // { // if (stockModel.StockNumber < item.ActualQuantity) throw Oops.Oh("分拣库存异常!"); // stockModel.StockNumber -= item.ActualQuantity; // if (stockModel.StockNumber <= 0) await _wmsMaterialStockRep.DeleteAsync(stockModel); // else await _wmsMaterialStockRep.UpdateAsync(stockModel); // } // // 这里还需要根据实际下发数来更新分拣状态 // var wareSortOrderModel = await _wmsSortOrderRep.FirstOrDefaultAsync(p => p.ContainerCode == wareContainer.ContainerCode // && p.SortStatus != SortStatusEnum.FENJIANWANCHENG && p.Materialcode == item.Materialcode); // if (wareSortOrderModel != null) // { // wareSortOrderModel.ActualQuantity += item.ActualQuantity; // if (wareSortOrderModel.ActualQuantity >= wareSortOrderModel.SortQuantity) // { // wareSortOrderModel.SortStatus = SortStatusEnum.FENJIANWANCHENG; // _wmsSortOrderRep.UpdateNow(wareSortOrderModel); // // 分拣单完成后判断出库明细是否完成 // } // else // { // wareSortOrderModel.SortStatus = SortStatusEnum.FENJIANZHONG; // _wmsSortOrderRep.UpdateNow(wareSortOrderModel); // } // } // } // var wareSortOrderCount = await _wmsSortOrderRep // .Where(p => p.ContainerCode == input.WmsContainer.ContainerCode && p.SortStatus != SortStatusEnum.FENJIANWANCHENG).CountAsync(); // //更新托盘状态,分拣完成 // if (wareSortOrderCount == 0) // { // if (wmsMaterialContainers.Count == 0) wareContainer.ContainerStatus = ContainerStatus.KOUXIAN; // else wareContainer.ContainerStatus = ContainerStatus.ZUPANG; // // 更新容器状态 // await _wmsContainerRep.UpdateAsync(wareContainer); // } // } // /// // /// pda出库单查询 // /// // /// // /// // [HttpGet("SortPdaPage")] // public async Task> SortPdaPage([FromQuery] SortPdaPageInput input) // { // var wmsTakeMaterialOrder = await _wmsTakeMaterialOrderRep.DetachedEntities // .Where(!string.IsNullOrEmpty(input.No), u => EF.Functions.Like(u.NO, $"%{input.No.Trim()}%")) // .ProjectToType() // .ToADPagedListAsync(input.PageNo, input.PageSize); // return wmsTakeMaterialOrder; // } // /// // /// pda根据出库单获取分拣单明细 // /// // /// // /// // [HttpGet("SortPdaDetailPage")] // public async Task> SortPdaDetailPage([FromQuery] SortPdaDetailPageInput input) // { // var wmsTakeMaterialOrder = await _wmsSortOrderRep.DetachedEntities // .Where(x=>x.OrderNo ==input.No) // .ProjectToType() // .ToADPagedListAsync(input.PageNo, input.PageSize); // return wmsTakeMaterialOrder; // } // } //}