liuying
2024-05-09 f4078b75fe80f03e58af3217bf642d0de118d1c9
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/ExWarehouse/ExWarehouseService.cs
@@ -1,323 +1,323 @@
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Yitter.IdGenerator;
using Admin.NET.Core;
//using Furion.DatabaseAccessor;
//using Furion.DependencyInjection;
//using Furion.DynamicApiController;
//using Furion.FriendlyException;
//using Mapster;
//using Microsoft.AspNetCore.Mvc;
//using Microsoft.EntityFrameworkCore;
//using Yitter.IdGenerator;
//using Admin.NET.Core;
namespace Admin.NET.Application
{
    /// <summary>
    /// 出库管理服务
    /// </summary>
    [ApiDescriptionSettings("自己的业务", Name = "ExWarehouse", Order = 100)]
    [Route("api/[Controller]")]
    public class ExWarehouseService : IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
        private readonly IRepository<WmsMaterial, MasterDbContextLocator> _wmsMaterialRep;
        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
//namespace Admin.NET.Application
//{
//    /// <summary>
//    /// 出库管理服务
//    /// </summary>
//    [ApiDescriptionSettings("自己的业务", Name = "ExWarehouse", Order = 100)]
//    [Route("api/[Controller]")]
//    public class ExWarehouseService : IDynamicApiController, ITransient
//    {
//        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
//        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
//        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
//        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
//        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
//        private readonly IRepository<WmsMaterial, MasterDbContextLocator> _wmsMaterialRep;
//        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
//        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
        /// <summary>
        /// 构造函数
        /// </summary>
        public ExWarehouseService(
                        IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
                        IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
                        IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
                        IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
                        IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep,
                        IRepository<WmsMaterial, MasterDbContextLocator> wmsMaterialRep,
                        IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
                        IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep
            )
        {
            this._wmsAreaRep = wmsAreaRep;
            this._wmsPlaceRep = wmsPlaceRep;
            this._wmsTaskRep = wmsTaskRep;
            this._wmsContainerRep = wmsContainerRep;
            this._wmsContainerPlaceRep = wmsContainerPlaceRep;
            this._wmsMaterialRep = wmsMaterialRep;
            this._wmsMaterialStockRep = wmsMaterialStockRep;
            this._wmsMaterialContainerRep = wmsMaterialContainerRep;
        }
//        /// <summary>
//        /// 构造函数
//        /// </summary>
//        public ExWarehouseService(
//                        IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
//                        IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
//                        IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
//                        IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
//                        IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep,
//                        IRepository<WmsMaterial, MasterDbContextLocator> wmsMaterialRep,
//                        IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
//                        IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep
//            )
//        {
//            this._wmsAreaRep = wmsAreaRep;
//            this._wmsPlaceRep = wmsPlaceRep;
//            this._wmsTaskRep = wmsTaskRep;
//            this._wmsContainerRep = wmsContainerRep;
//            this._wmsContainerPlaceRep = wmsContainerPlaceRep;
//            this._wmsMaterialRep = wmsMaterialRep;
//            this._wmsMaterialStockRep = wmsMaterialStockRep;
//            this._wmsMaterialContainerRep = wmsMaterialContainerRep;
//        }
        
        /// <summary>
        /// 分页查询物料出库管理信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("page")]
        public async Task<PageResult<ExWareHouseOutput>> Page([FromQuery] ExWarehouseSearch input)
        {
            var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities
                      .Where (!string.IsNullOrEmpty(input.MaterialName), u => EF.Functions.Like(u.MaterialName, $"%{input.MaterialName.Trim()}%"))
                      .ProjectToType<ExWareHouseOutput>()
                      .ToListAsync();
            return wmsMaterialStocks.ToADPagedList(input.PageNo, input.PageSize);
        }
//        /// <summary>
//        /// 分页查询物料出库管理信息
//        /// </summary>
//        /// <param name="input"></param>
//        /// <returns></returns>
//        [HttpGet("page")]
//        public async Task<PageResult<ExWareHouseOutput>> Page([FromQuery] ExWarehouseSearch input)
//        {
//            var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities
//                      .Where (!string.IsNullOrEmpty(input.MaterialName), u => EF.Functions.Like(u.MaterialName, $"%{input.MaterialName.Trim()}%"))
//                      .ProjectToType<ExWareHouseOutput>()
//                      .ToListAsync();
//            return wmsMaterialStocks.ToADPagedList(input.PageNo, input.PageSize);
//        }
        /// <summary>
        /// 自动出库
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        [HttpPost("AutoExWarehouse")]
        [UnitOfWork]
        public async Task AutoExWarehouse(List<ExWarehouseInput> inputs)
        {
            // 根据托盘号、库位编号去重
            var containerCodeDistinct = inputs.Select(u => new { u.ContainerCode, u.PlaceCode }).Distinct().ToList();
            if (containerCodeDistinct.Count <= 0) throw Oops.Oh("暂无库存出库");
//        /// <summary>
//        /// 自动出库
//        /// </summary>
//        /// <param name="inputs"></param>
//        /// <returns></returns>
//        [HttpPost("AutoExWarehouse")]
//        [UnitOfWork]
//        public async Task AutoExWarehouse(List<ExWarehouseInput> inputs)
//        {
//            // 根据托盘号、库位编号去重
//            var containerCodeDistinct = inputs.Select(u => new { u.ContainerCode, u.PlaceCode }).Distinct().ToList();
//            if (containerCodeDistinct.Count <= 0) throw Oops.Oh("暂无库存出库");
            // 查询库区名称
            var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库"));
            if (wmsArea != null) throw Oops.Oh("库区不存在");
//            // 查询库区名称
//            var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库"));
//            if (wmsArea != null) throw Oops.Oh("库区不存在");
            foreach (var item in containerCodeDistinct)
            {
                var wmsMaterialContainerList = new List<WmsMaterialContainer>();
                // 判断任务
                var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(p => p.ContainerCode == item.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG);
                if (wmsTask != null) throw Oops.Oh("周转箱号存在未完成的任务!");
//            foreach (var item in containerCodeDistinct)
//            {
//                var wmsMaterialContainerList = new List<WmsMaterialContainer>();
//                // 判断任务
//                var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(p => p.ContainerCode == item.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG);
//                if (wmsTask != null) throw Oops.Oh("周转箱号存在未完成的任务!");
                // 检查周转箱号信息
                var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == item.ContainerCode);
                if (wmsContainer == null) throw Oops.Oh("库存中没有该:" + wmsContainer.ContainerCode + "托盘!");
//                // 检查周转箱号信息
//                var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == item.ContainerCode);
//                if (wmsContainer == null) throw Oops.Oh("库存中没有该:" + wmsContainer.ContainerCode + "托盘!");
                // 检查库位信息
                var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.PlaceCode == item.PlaceCode);
                if (wmsPlace == null) throw Oops.Oh("库位不存在!");
                if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!");
//                // 检查库位信息
//                var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.PlaceCode == item.PlaceCode);
//                if (wmsPlace == null) throw Oops.Oh("库位不存在!");
//                if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!");
                // 更新状态为“待出”
                wmsPlace.PlaceStatus = PlaceStatus.DAICHU;
                await _wmsPlaceRep.UpdateAsync(wmsPlace);
//                // 更新状态为“待出”
//                wmsPlace.PlaceStatus = PlaceStatus.DAICHU;
//                await _wmsPlaceRep.UpdateAsync(wmsPlace);
                // 检查库存
                var wmsMaterialStockList = inputs.Where(u => u.ContainerCode == wmsContainer.ContainerCode && u.PlaceCode == wmsPlace.PlaceCode).ToList();
                if (wmsMaterialStockList.Count <= 0) throw Oops.Oh("库存数据异常!");
//                // 检查库存
//                var wmsMaterialStockList = inputs.Where(u => u.ContainerCode == wmsContainer.ContainerCode && u.PlaceCode == wmsPlace.PlaceCode).ToList();
//                if (wmsMaterialStockList.Count <= 0) throw Oops.Oh("库存数据异常!");
                // 检查库位与周转箱号关系
                var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.ContainerId == wmsContainer.Id
                && p.PlaceCode == wmsPlace.PlaceCode && p.PlaceId == wmsPlace.Id && p.ContainerPlaceStatus == CommonStatus.ENABLE);
                if (wmsContainerPlace == null) throw Oops.Oh("托盘号与库位关系不存在!");
//                // 检查库位与周转箱号关系
//                var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.ContainerId == wmsContainer.Id
//                && p.PlaceCode == wmsPlace.PlaceCode && p.PlaceId == wmsPlace.Id && p.ContainerPlaceStatus == CommonStatus.ENABLE);
//                if (wmsContainerPlace == null) throw Oops.Oh("托盘号与库位关系不存在!");
                // 不是空料箱才会有组盘关系
                if (wmsPlace.EmptyContainer == YesOrNot.N)
                {
                    // 检查物料与周转箱号关系
                    wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
                    if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("周转箱号与物料关系不存在!");
                }
                else
                {
                    // 更新空料箱库存
                    var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode);
                    if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO)
                    {
                        wmsMaterialStock.PlaceCode = "N/A";
                        await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock);
                    }
                }
                if (wmsTask == null)
                {
                    string taskNo = "CHUKU" + DateTime.Today.ToString("yyyyMMdd");
                    var wmsTaskModel = await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => EF.Functions.Like(u.TaskNo, $"%{taskNo}%"));
                    if (wmsTaskModel == null)
                    {
                        taskNo = taskNo + "0001";
                    }
                    else
                    {
                        //获取流水号最大的数据
                        var maxSerialNumber = await _wmsTaskRep.MaxAsync(t => t.TaskNo);
                        taskNo = Comm.GenerateNewInvoiceNumber(maxSerialNumber, 1);
                    }
//                // 不是空料箱才会有组盘关系
//                if (wmsPlace.EmptyContainer == YesOrNot.N)
//                {
//                    // 检查物料与周转箱号关系
//                    wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
//                    if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("周转箱号与物料关系不存在!");
//                }
//                else
//                {
//                    // 更新空料箱库存
//                    var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode);
//                    if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO)
//                    {
//                        wmsMaterialStock.PlaceCode = "N/A";
//                        await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock);
//                    }
//                }
//                if (wmsTask == null)
//                {
//                    string taskNo = "CHUKU" + DateTime.Today.ToString("yyyyMMdd");
//                    var wmsTaskModel = await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => EF.Functions.Like(u.TaskNo, $"%{taskNo}%"));
//                    if (wmsTaskModel == null)
//                    {
//                        taskNo = taskNo + "0001";
//                    }
//                    else
//                    {
//                        //获取流水号最大的数据
//                        var maxSerialNumber = await _wmsTaskRep.MaxAsync(t => t.TaskNo);
//                        taskNo = Comm.GenerateNewInvoiceNumber(maxSerialNumber, 1);
//                    }
                    // 新增任务
                    var takmodel = new WmsTask()
                    {
                        TaskNo = taskNo,//YitIdHelper.NextId().ToString(),
                        TaskModel = TaskModel.QUANZIDONG,
                        TaskType = TaskType.CHUKU,
                        TaskLevel = 1,
                        TaskStatus = TaskStatusEnum.WEIZHIXING,
                        ContainerCode = wmsContainer.ContainerCode,
                        SourcePlace = wmsPlace.PlaceCode,
                        Aisle = wmsPlace.Aisle,
                        ToPlace = "出库口",
                        AreaName = wmsArea.AreaName,
                        Description = wmsPlace.EmptyContainer == YesOrNot.Y ? "空托" : "物料",
                        OrderNo = wmsMaterialContainerList.Count <= 0 ? "N/A" : wmsMaterialContainerList.FirstOrDefault().OrderNo,
                        TaskDodeviceStatus = TaskDodeviceStatusEnum.W,
                        IsRead = true
                    };
                    await _wmsTaskRep.InsertAsync(takmodel);
                }
            }
        }
//                    // 新增任务
//                    var takmodel = new WmsTask()
//                    {
//                        TaskNo = taskNo,//YitIdHelper.NextId().ToString(),
//                        TaskModel = TaskModel.QUANZIDONG,
//                        TaskType = TaskType.CHUKU,
//                        TaskLevel = 1,
//                        TaskStatus = TaskStatusEnum.WEIZHIXING,
//                        ContainerCode = wmsContainer.ContainerCode,
//                        SourcePlace = wmsPlace.PlaceCode,
//                        Aisle = wmsPlace.Aisle,
//                        ToPlace = "出库口",
//                        AreaName = wmsArea.AreaName,
//                        Description = wmsPlace.EmptyContainer == YesOrNot.Y ? "空托" : "物料",
//                        OrderNo = wmsMaterialContainerList.Count <= 0 ? "N/A" : wmsMaterialContainerList.FirstOrDefault().OrderNo,
//                        TaskDodeviceStatus = TaskDodeviceStatusEnum.W,
//                        IsRead = true
//                    };
//                    await _wmsTaskRep.InsertAsync(takmodel);
//                }
//            }
//        }
        /// <summary>
        /// 人工出库
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        [HttpPost("manualExWarehouse")]
        [UnitOfWork]
        public async Task ManualExWarehouse(List<ExWarehouseInput> inputs)
        {
            // 根据托盘号、库位编号去重
            var containerCodeDistinct = inputs.Select(u => new { u.ContainerCode, u.PlaceCode }).Distinct().ToList();
            if (containerCodeDistinct.Count <= 0) throw Oops.Oh("暂无库存出库");
//        /// <summary>
//        /// 人工出库
//        /// </summary>
//        /// <param name="inputs"></param>
//        /// <returns></returns>
//        [HttpPost("manualExWarehouse")]
//        [UnitOfWork]
//        public async Task ManualExWarehouse(List<ExWarehouseInput> inputs)
//        {
//            // 根据托盘号、库位编号去重
//            var containerCodeDistinct = inputs.Select(u => new { u.ContainerCode, u.PlaceCode }).Distinct().ToList();
//            if (containerCodeDistinct.Count <= 0) throw Oops.Oh("暂无库存出库");
            // 查询库区名称
            var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库"));
            if (wmsArea != null) throw Oops.Oh("库区不存在");
//            // 查询库区名称
//            var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库"));
//            if (wmsArea != null) throw Oops.Oh("库区不存在");
            foreach (var item in containerCodeDistinct)
            {
                var wmsMaterialContainerList = new List<WmsMaterialContainer>();
                // 判断任务
                var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(p => p.ContainerCode == item.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG);
                if (wmsTask != null) throw Oops.Oh("托盘号存在未完成的任务!");
//            foreach (var item in containerCodeDistinct)
//            {
//                var wmsMaterialContainerList = new List<WmsMaterialContainer>();
//                // 判断任务
//                var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(p => p.ContainerCode == item.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG);
//                if (wmsTask != null) throw Oops.Oh("托盘号存在未完成的任务!");
                // 检查托盘号信息
                var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == item.ContainerCode);
                if (wmsContainer == null) throw Oops.Oh("周转箱号不存在!");
//                // 检查托盘号信息
//                var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == item.ContainerCode);
//                if (wmsContainer == null) throw Oops.Oh("周转箱号不存在!");
                // 检查库位信息
                var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.PlaceCode == item.PlaceCode);
                if (wmsPlace == null) throw Oops.Oh("库位不存在!");
                if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!");
//                // 检查库位信息
//                var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.PlaceCode == item.PlaceCode);
//                if (wmsPlace == null) throw Oops.Oh("库位不存在!");
//                if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!");
                // 检查库存
                var wmsMaterialStockList = inputs.Where(u => u.ContainerCode == wmsContainer.ContainerCode && u.PlaceCode == wmsPlace.PlaceCode).ToList();
                if (wmsMaterialStockList.Count <= 0) throw Oops.Oh("库存数据异常!");
//                // 检查库存
//                var wmsMaterialStockList = inputs.Where(u => u.ContainerCode == wmsContainer.ContainerCode && u.PlaceCode == wmsPlace.PlaceCode).ToList();
//                if (wmsMaterialStockList.Count <= 0) throw Oops.Oh("库存数据异常!");
                // 检查库位与托盘号关系
                var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.ContainerId == wmsContainer.Id
                && p.PlaceCode == wmsPlace.PlaceCode && p.PlaceId == wmsPlace.Id && p.ContainerPlaceStatus == CommonStatus.ENABLE);
                if (wmsContainerPlace == null) throw Oops.Oh("托盘号与库位关系不存在!");
//                // 检查库位与托盘号关系
//                var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.ContainerId == wmsContainer.Id
//                && p.PlaceCode == wmsPlace.PlaceCode && p.PlaceId == wmsPlace.Id && p.ContainerPlaceStatus == CommonStatus.ENABLE);
//                if (wmsContainerPlace == null) throw Oops.Oh("托盘号与库位关系不存在!");
                // 不是空托才会有组盘关系
                if (wmsPlace.EmptyContainer == YesOrNot.N)
                {
                    // 检查物料与空托号关系
                    wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
                    if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("托盘号与物料关系不存在!");
                }
                else
                {
                    // 更新空料箱库存
                    var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode);
                    if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO)
                    {
                        await _wmsMaterialStockRep.DeleteAsync(wmsMaterialStock);
                    }
                }
//                // 不是空托才会有组盘关系
//                if (wmsPlace.EmptyContainer == YesOrNot.N)
//                {
//                    // 检查物料与空托号关系
//                    wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
//                    if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("托盘号与物料关系不存在!");
//                }
//                else
//                {
//                    // 更新空料箱库存
//                    var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode);
//                    if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO)
//                    {
//                        await _wmsMaterialStockRep.DeleteAsync(wmsMaterialStock);
//                    }
//                }
                if (wmsTask == null)
                {
                    //构建出库物料和周转箱号关系
                    var orderNo = "N/A";
                    if (wmsMaterialContainerList.Count > 0) orderNo = YitIdHelper.NextId().ToString();
//                if (wmsTask == null)
//                {
//                    //构建出库物料和周转箱号关系
//                    var orderNo = "N/A";
//                    if (wmsMaterialContainerList.Count > 0) orderNo = YitIdHelper.NextId().ToString();
                    foreach (var wmsMaterialContaine in wmsMaterialContainerList)
                    {
                        //更新状态为”删除“
                        wmsMaterialContaine.BindStatus = CommonStatus.DELETED;
                        await _wmsMaterialContainerRep.UpdateNowAsync(wmsMaterialContaine);
//                    foreach (var wmsMaterialContaine in wmsMaterialContainerList)
//                    {
//                        //更新状态为”删除“
//                        wmsMaterialContaine.BindStatus = CommonStatus.DELETED;
//                        await _wmsMaterialContainerRep.UpdateNowAsync(wmsMaterialContaine);
                        //新增组盘绑定记录 正常
                        var addWmsMaterialContainer = wmsMaterialContaine;
                        addWmsMaterialContainer.Id = YitIdHelper.NextId();
                        addWmsMaterialContainer.OrderNo = orderNo;
                        addWmsMaterialContainer.BindStatus = CommonStatus.ENABLE;
                        await _wmsMaterialContainerRep.InsertNowAsync(addWmsMaterialContainer);
                        // 这里没有分拣操作直接更新库存信息
                        var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsMaterialContaine.ContainerCode);
                        wmsMaterialStock.PlaceCode = "N/A";
                        wmsMaterialStock.StockNumber -= wmsMaterialContaine.BindQuantity;
                        await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock);
                    }
//                        //新增组盘绑定记录 正常
//                        var addWmsMaterialContainer = wmsMaterialContaine;
//                        addWmsMaterialContainer.Id = YitIdHelper.NextId();
//                        addWmsMaterialContainer.OrderNo = orderNo;
//                        addWmsMaterialContainer.BindStatus = CommonStatus.ENABLE;
//                        await _wmsMaterialContainerRep.InsertNowAsync(addWmsMaterialContainer);
//                        // 这里没有分拣操作直接更新库存信息
//                        var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsMaterialContaine.ContainerCode);
//                        wmsMaterialStock.PlaceCode = "N/A";
//                        wmsMaterialStock.StockNumber -= wmsMaterialContaine.BindQuantity;
//                        await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock);
//                    }
                    string taskNo = "CHUKU" + DateTime.Today.ToString("yyyyMMdd");
                    var wmsTaskModel = await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => EF.Functions.Like(u.TaskNo, $"%{taskNo}%"));
                    if (wmsTaskModel == null)
                    {
                        taskNo = taskNo + "0001";
                    }
                    else
                    {
                        //获取流水号最大的数据
                        var maxSerialNumber = await _wmsTaskRep.MaxAsync(t => t.TaskNo);
                        taskNo = Comm.GenerateNewInvoiceNumber(maxSerialNumber, 1);
                    }
                    // 新增任务
                    var addWmsTask = new WmsTask()
                    {
                        TaskNo = taskNo,//YitIdHelper.NextId().ToString(),
                        TaskModel = TaskModel.SHOUDONG,
                        TaskType = TaskType.CHUKU,
                        TaskLevel = 1,
                        TaskStatus = TaskStatusEnum.WANCHENG,
                        ContainerCode = wmsContainer.ContainerCode,
                        SourcePlace = wmsPlace.PlaceCode,
                        Aisle = wmsPlace.Aisle,
                        ToPlace = "出库口",
                        AreaName = wmsArea.AreaName,
                        Description = wmsPlace.EmptyContainer == YesOrNot.Y ? "空托" : "物料",
                        OrderNo = orderNo,
                        TaskDodeviceStatus=TaskDodeviceStatusEnum.W,
                        UpdatedTime = DateTime.Now,
                    };
                    await _wmsTaskRep.InsertAsync(addWmsTask);
//                    string taskNo = "CHUKU" + DateTime.Today.ToString("yyyyMMdd");
//                    var wmsTaskModel = await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => EF.Functions.Like(u.TaskNo, $"%{taskNo}%"));
//                    if (wmsTaskModel == null)
//                    {
//                        taskNo = taskNo + "0001";
//                    }
//                    else
//                    {
//                        //获取流水号最大的数据
//                        var maxSerialNumber = await _wmsTaskRep.MaxAsync(t => t.TaskNo);
//                        taskNo = Comm.GenerateNewInvoiceNumber(maxSerialNumber, 1);
//                    }
//                    // 新增任务
//                    var addWmsTask = new WmsTask()
//                    {
//                        TaskNo = taskNo,//YitIdHelper.NextId().ToString(),
//                        TaskModel = TaskModel.SHOUDONG,
//                        TaskType = TaskType.CHUKU,
//                        TaskLevel = 1,
//                        TaskStatus = TaskStatusEnum.WANCHENG,
//                        ContainerCode = wmsContainer.ContainerCode,
//                        SourcePlace = wmsPlace.PlaceCode,
//                        Aisle = wmsPlace.Aisle,
//                        ToPlace = "出库口",
//                        AreaName = wmsArea.AreaName,
//                        Description = wmsPlace.EmptyContainer == YesOrNot.Y ? "空托" : "物料",
//                        OrderNo = orderNo,
//                        TaskDodeviceStatus=TaskDodeviceStatusEnum.W,
//                        UpdatedTime = DateTime.Now,
//                    };
//                    await _wmsTaskRep.InsertAsync(addWmsTask);
                    // 更新库位与周转箱号关系表状态为“删除”
                    wmsContainerPlace.ContainerPlaceStatus = CommonStatus.DELETED;
                    await _wmsContainerPlaceRep.UpdateAsync(wmsContainerPlace);
//                    // 更新库位与周转箱号关系表状态为“删除”
//                    wmsContainerPlace.ContainerPlaceStatus = CommonStatus.DELETED;
//                    await _wmsContainerPlaceRep.UpdateAsync(wmsContainerPlace);
                    // 更新库位为“空闲”
                    wmsPlace.PlaceStatus = PlaceStatus.KONGXIAN;
                    wmsPlace.Islock = YesOrNot.N;
                    wmsPlace.EmptyContainer = YesOrNot.N;
                    await _wmsPlaceRep.UpdateAsync(wmsPlace);
//                    // 更新库位为“空闲”
//                    wmsPlace.PlaceStatus = PlaceStatus.KONGXIAN;
//                    wmsPlace.Islock = YesOrNot.N;
//                    wmsPlace.EmptyContainer = YesOrNot.N;
//                    await _wmsPlaceRep.UpdateAsync(wmsPlace);
                    // 更新周转箱号状态为“空闲”
                    wmsContainer.ContainerStatus = ContainerStatus.KOUXIAN;
                    await _wmsContainerRep.UpdateAsync(wmsContainer);
                }
            }
        }
//                    // 更新周转箱号状态为“空闲”
//                    wmsContainer.ContainerStatus = ContainerStatus.KOUXIAN;
//                    await _wmsContainerRep.UpdateAsync(wmsContainer);
//                }
//            }
//        }
        /// <summary>
        /// 呼叫空托
        /// </summary>
        /// <returns></returns>
        [HttpPost("callairflare")]
        [UnitOfWork]
        public async Task CallAirflare(CallAirflareInput input)
        {
            //获取库位中存货是空托的库位
            var wmsPlace = await _wmsPlaceRep.Where(u => u.PlaceStatus == PlaceStatus.CUNHUO && u.EmptyContainer== YesOrNot.Y).ToListAsync();
            if (wmsPlace.Count > 0)
            {
//        /// <summary>
//        /// 呼叫空托
//        /// </summary>
//        /// <returns></returns>
//        [HttpPost("callairflare")]
//        [UnitOfWork]
//        public async Task CallAirflare(CallAirflareInput input)
//        {
//            //获取库位中存货是空托的库位
//            var wmsPlace = await _wmsPlaceRep.Where(u => u.PlaceStatus == PlaceStatus.CUNHUO && u.EmptyContainer== YesOrNot.Y).ToListAsync();
//            if (wmsPlace.Count > 0)
//            {
                
            }
        }
    }
}
//            }
//        }
//    }
//}