//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;
// }
// }
//}