| | |
| | | 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) |
| | | // { |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // } |
| | | // } |
| | | // } |
| | | //} |