//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 //{ // /// // /// 入库管理服务 // /// // [ApiDescriptionSettings("自己的业务", Name = "BindEntrance", Order = 100)] // [Route("api/[Controller]")] // public class BindEntranceService : IDynamicApiController, ITransient // { // private readonly IRepository _wmsAreaRep; // private readonly IRepository _wmsPlaceRep; // private readonly IRepository _wmsTaskRep; // private readonly IRepository _wmsContainerRep; // private readonly IRepository _wmsContainerPlaceRep; // private readonly IRepository _wmsMaterialRep; // private readonly IRepository _wmsMaterialStockRep; // private readonly IRepository _wmsMaterialContainerRep; // /// // /// 构造函数 // /// // public BindEntranceService( // IRepository wmsAreaRep, // IRepository wmsPlaceRep, // IRepository wmsTaskRep, // IRepository wmsContainerRep, // IRepository wmsContainerPlaceRep, // IRepository wmsMaterialRep, // IRepository wmsMaterialStockRep, // IRepository 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; // } // /// // /// 托盘查询组盘物料 // /// // /// // /// // [HttpGet("getcontainer")] // [UnifyResult(typeof(BindEntranceOutput))] // public async Task GetContainer([FromQuery] BindEntranceInput input) // { // var bindEntranceOutputModel = new BindEntranceOutput(); // var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == input.ContainerCode && n.ContainerStatus != ContainerStatus.JINYONG); // if (wmsContainer == null) // { // var newWmsContainer = new WmsContainerDto(); // newWmsContainer.ContainerCode = input.ContainerCode; // newWmsContainer.ContainerStatus = ContainerStatus.KOUXIAN; // newWmsContainer.ContainerType = ContainerType.SULIAO; // bindEntranceOutputModel.ContainerCode = input.ContainerCode; // bindEntranceOutputModel.WmsContainer = newWmsContainer; // if (wmsContainer != null) // { // var isWmsTask = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG); // if (isWmsTask) return XnRestfulResultProvider.RESTfulMesaage("周转箱号存在未完成任务!"); // bindEntranceOutputModel.WmsContainer = wmsContainer.Adapt(); // bindEntranceOutputModel.ContainerCode = wmsContainer.ContainerCode; // // 周转箱号组盘状态 // if (wmsContainer.ContainerStatus == ContainerStatus.ZUPANG) // { // bindEntranceOutputModel.WmsMaterials = await _wmsMaterialContainerRep // .Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ProjectToType().ToListAsync(); // return XnRestfulResultProvider.RESTfulResult(bindEntranceOutputModel); // } // // 周转箱号库位状态 // if (wmsContainer.ContainerStatus == ContainerStatus.KUWEI) // { // // 查询周转箱号与库位关系 // var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(u => u.ContainerId == wmsContainer.Id && u.ContainerCode == wmsContainer.ContainerCode); // if (wmsContainerPlace != null) bindEntranceOutputModel.PlaceCode = wmsContainerPlace.PlaceCode; // return XnRestfulResultProvider.RESTfulResult(bindEntranceOutputModel); // } // } // } // return XnRestfulResultProvider.RESTfulResult(bindEntranceOutputModel); // } // /// // /// 扫码获取物料 // /// // /// // [HttpGet("GetMaterial")] // [UnifyResult(typeof(MaterialOutput))] // public async Task GetMaterial([FromQuery] GetMaterialInput input) // { // var material = new MaterialOutput(); // material.MaterialName = "胶合板"; // material.MaterialNo = "JHB20110101"; // material.MaterialId = 43214325321513; // material.MaterialBatch = "DIYIPICI001"; // material.MaterialType = MaterialType.BAOZHUANGCAILIAO; // material.InspectionMethod = MaterialInspection.MIANJIAN; // material.MaterialSpec = ""; // material.MaterialDensity = ""; // material.MaterialUnit = ""; // material.LesWorkshopSection = LesWorkshopSection.CNC; // return XnRestfulResultProvider.RESTfulResult(material); // } // /// // /// 组盘 // /// // /// // [HttpPost("AutoWare")] // public async Task AutoWare(WarehousingInput input) // { // // 根据托盘号查询托盘号信息是否已存在 // var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(u => u.ContainerCode == input.ContainerCode); // if (wmsContainer == null) // { // // 不存在则添加托盘号信息 // wmsContainer = new WmsContainer // { // ContainerCode = input.ContainerCode, // ContainerType = ContainerType.SULIAO, // ContainerStatus = ContainerStatus.KOUXIAN, // AssetNo = "N/A", // ErpNo = "N/A" // }; // await _wmsContainerRep.InsertNowAsync(wmsContainer); // } // // 查询是否任务已存在 // var isExit = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG); // if (isExit) throw Oops.Oh("托盘号存在未完成任务中!"); // // 查询已组盘信息 // var wmsMaterialContainerList = await _wmsMaterialContainerRep // .Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); // await _wmsMaterialContainerRep.DeleteAsync(wmsMaterialContainerList); // var orderNo = "N/A"; // if (input.WmsMaterials.Count > 0) // { // wmsContainer.ContainerStatus = ContainerStatus.ZUPANG; // orderNo = YitIdHelper.NextId().ToString(); // await _wmsContainerRep.UpdateAsync(wmsContainer); // } // // 创建新组盘记录 // foreach (var item in input.WmsMaterials) // { // //创建组盘记录 // var bindentranceModel = new WmsMaterialContainer(); // bindentranceModel.ContainerId = wmsContainer.Id; // bindentranceModel.ContainerCode = wmsContainer.ContainerCode; // bindentranceModel.MaterialNo = item.MaterialNo; // bindentranceModel.MaterialId = 478183507525701; // bindentranceModel.MaterialBatch = item.MaterialBatch; // bindentranceModel.BindQuantity = 1; // bindentranceModel.BindStatus = CommonStatus.ENABLE; // bindentranceModel.OrderNo = orderNo; // bindentranceModel.MaterialName = item.MaterialName; // bindentranceModel.MaterialDensity = "N/A"; // await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel); // } // } // /// // /// 自动入库 // /// // /// // /// // [HttpPost("automaticWarehousing")] // [UnitOfWork] // public async Task AutomaticWarehousing(WarehousingInput input) // { // // 查询混合料库区信息 // var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库")); // // 根据料箱号查询周转箱号信息是否已存在 // var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(u => u.ContainerCode == input.ContainerCode); // if (wmsContainer == null) // { // // 不存在则添加周转箱号信息 // wmsContainer = new WmsContainer // { // ContainerCode = input.ContainerCode, // ContainerType = ContainerType.JINSHU, // ContainerStatus = ContainerStatus.KOUXIAN, // AssetNo = "N/A", // ErpNo = "N/A" // }; // await _wmsContainerRep.InsertNowAsync(wmsContainer); // } // else // { // // 更新周转箱号状态为“库位” // wmsContainer.ContainerStatus = ContainerStatus.KOUXIAN; // await _wmsContainerRep.UpdateAsync(wmsContainer); // } // // 查询周转箱号是否已存在任务 // var isWmsTask = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG); // if (isWmsTask) throw Oops.Oh("周转箱号存在未完成任务中!"); // // 删除已组盘信息 // var oldWmsMaterialContainerList = await _wmsMaterialContainerRep // .Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); // foreach (var item in oldWmsMaterialContainerList) // { // await _wmsMaterialContainerRep.DeleteAsync(item); // } // // 组盘单据 默认空料箱单据 // var source = ""; //定义入库来源 // var orderNo = "N/A"; // if (input.WmsMaterials.Count > 0) // { // wmsContainer.ContainerStatus = ContainerStatus.ZUPANG; // orderNo = YitIdHelper.NextId().ToString(); // await _wmsContainerRep.UpdateAsync(wmsContainer); // source = "物料"; // } // else // { // source = "空托"; // } // // 查询物料Id // var wmsMaterial = await _wmsMaterialRep.FirstOrDefaultAsync(u => u.MaterialNo == "N/A" && u.MaterialName == "N/A" && u.MaterialBatch == "N/A"); // // 创建新组盘记录 // foreach (var item in input.WmsMaterials) // { // var wmsMaterialContainer = item.Adapt(); // wmsMaterialContainer.OrderNo = orderNo; // wmsMaterialContainer.ContainerId = wmsContainer.Id; // wmsMaterialContainer.ContainerCode = wmsContainer.ContainerCode; // wmsMaterialContainer.MaterialId = wmsMaterial.Id; // wmsMaterialContainer.BindStatus = CommonStatus.ENABLE; // await _wmsMaterialContainerRep.InsertNowAsync(wmsMaterialContainer); // } // //if (input.Source == RuKuSourceEnum.KONGTUO) // //else if (input.Source == RuKuSourceEnum.WULIAO) // //创建巷道分配 // var wmsPlace = await _wmsPlaceRep.Where(u => u.PlaceStatus == PlaceStatus.KONGXIAN).ToListAsync(); // var one = wmsPlace.Where(s => s.Aisle==1).ToList().Count; // var two = wmsPlace.Where(s => s.Aisle == 2).ToList().Count; // var three = wmsPlace.Where(s => s.Aisle == 3).ToList().Count; // var Aisle = 0; // if (one >= two && one >= three) // { // Aisle = 1; // } // else if (two >= one && two >= three) // { // Aisle = 2; // } // else // { // Aisle = 3; // } // string taskNo = "RUKU"+ 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.RUKU, // TaskLevel = 1, // Aisle = Aisle, // TaskStatus = TaskStatusEnum.WEIZHIXING, // ContainerCode = wmsContainer.ContainerCode, // SourcePlace = "入库口", // ToPlace = "", // AreaName = wmsArea != null ? wmsArea.AreaName : "", // OrderNo = orderNo, // Description = source, //入库来源 // TaskDodeviceStatus = TaskDodeviceStatusEnum.WZX, // IsRead = true // }; // await _wmsTaskRep.InsertAsync(takmodel); // } // /// // /// 人工入库 // /// // /// // /// // [HttpPost("manualWarehousing")] // [UnitOfWork] // public async Task ManualWarehousing(WarehousingInput input) // { // // 查询混合料库区信息 // var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库")); // // 根据料箱号查询周转箱号信息是否已存在 // var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(u => u.ContainerCode == input.ContainerCode); // if (wmsContainer == null) // { // // 不存在则添加周转箱号信息 // wmsContainer = new WmsContainer // { // ContainerCode = input.ContainerCode, // ContainerType = ContainerType.JINSHU, // ContainerStatus = ContainerStatus.KUWEI, // AssetNo = "N/A", // ErpNo = "N/A" // }; // await _wmsContainerRep.InsertNowAsync(wmsContainer); // } // else // { // // 更新周转箱号状态为“库位” // wmsContainer.ContainerStatus = ContainerStatus.KUWEI; // await _wmsContainerRep.UpdateAsync(wmsContainer); // } // // 查询周转箱号是否已存在任务 // var isWmsTask = await _wmsTaskRep.AnyAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG); // if (isWmsTask) throw Oops.Oh("周转箱号存在未完成任务中!"); // // 删除已组盘信息 // var oldWmsMaterialContainerList = await _wmsMaterialContainerRep // .Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); // foreach (var item in oldWmsMaterialContainerList) // { // await _wmsMaterialContainerRep.DeleteAsync(item); // } // // 查询库位信息 随机分配库位 // var wmsPlace = new WmsPlace(); // if (string.IsNullOrEmpty(input.PlaceCode)) // wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(u => u.AreaId == wmsArea.Id && u.Islock == YesOrNot.N && u.PlaceStatus == PlaceStatus.KONGXIAN); // else // wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(u => u.AreaId == wmsArea.Id && u.PlaceCode == input.PlaceCode); // if (wmsPlace == null) throw Oops.Oh("库位不存在!"); // if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!"); // if (wmsPlace.PlaceStatus != PlaceStatus.KONGXIAN) throw Oops.Oh("库位已存货!"); // // 更新库位状态为“存货” // wmsPlace.PlaceStatus = PlaceStatus.CUNHUO; // // 组盘单据 默认空料箱单据 // var orderNo = "N/A"; // var source = ""; //定义入库来源 // if (input.WmsMaterials.Count > 0) // { // orderNo = YitIdHelper.NextId().ToString(); // source = "物料"; // } // else // { // wmsPlace.EmptyContainer = YesOrNot.Y; //是否空托 // source = "空托"; // } // // 查询物料Id // var wmsMaterial = await _wmsMaterialRep.FirstOrDefaultAsync(u => u.MaterialNo == "N/A" && u.MaterialName == "N/A" && u.MaterialBatch == "N/A"); // // 创建新组盘记录 // foreach (var item in input.WmsMaterials) // { // var wmsMaterialContainer = item.Adapt(); // wmsMaterialContainer.OrderNo = orderNo; // wmsMaterialContainer.ContainerId = wmsContainer.Id; // wmsMaterialContainer.ContainerCode = wmsContainer.ContainerCode; // wmsMaterialContainer.MaterialId = wmsMaterial.Id; // wmsMaterialContainer.BindStatus = CommonStatus.ENABLE; // await _wmsMaterialContainerRep.InsertNowAsync(wmsMaterialContainer); // } // string taskNo = "RUKU" + 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.SHOUDONG, // TaskType = TaskType.RUKU, // TaskLevel = 1, // Aisle = wmsPlace.Aisle, // TaskStatus = TaskStatusEnum.WANCHENG, // ContainerCode = wmsContainer.ContainerCode, // SourcePlace = "入库口", // ToPlace = wmsPlace.PlaceCode, // AreaName = wmsArea != null ? wmsArea.AreaName : "", // OrderNo = orderNo, // Description = source, //入库来源 // TaskDodeviceStatus = TaskDodeviceStatusEnum.W, // UpdatedTime = DateTime.Now, // }; // await _wmsTaskRep.InsertAsync(takmodel); // // 创建托盘号库位关系表 // var wmsContainerPlaceModel = new WmsContainerPlace() // { // PlaceId = wmsPlace.Id, // PlaceCode = wmsPlace.PlaceCode, // ContainerId = wmsContainer.Id, // ContainerCode = wmsContainer.ContainerCode, // 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 wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode // && p.MaterialBatch == item.MaterialBatch ); // if (wmsMaterialStock != null) // { // wmsMaterialStock.Source = RuKuSourceEnum.WULIAO; // wmsMaterialStock.AreaId = wmsPlace.AreaId; // wmsMaterialStock.PlaceCode = wmsPlace.PlaceCode; // wmsMaterialStock.StockNumber += item.BindQuantity; // await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock); // } // else // { // wmsMaterialStock = new WmsMaterialStock() // { // InspectionMethod = MaterialInspection.MIANJIAN, // UnitType = UnitType.ZHONGLIANG, // UnitNo = UnitNoType.T, // MaterialNo = item.MaterialNo, // MaterialType = MaterialType.CHENGPING, // MaterialName = item.MaterialName, // MaterialSpec = item.MaterialSpec, // MaterialBatch = item.MaterialBatch, // MaterialDensity = item.MaterialDensity, // StockNumber = 1, // PlaceCode = wmsPlace.PlaceCode, // ContainerId = wmsContainer.Id, // ContainerCode = wmsContainer.ContainerCode, // AreaId = wmsPlace.AreaId, // Source = RuKuSourceEnum.WULIAO // }; // await _wmsMaterialStockRep.InsertAsync(wmsMaterialStock); // } // } // // 空料箱入库 // if (orderNo == "N/A") // { // var wmsMaterialStock = new WmsMaterialStock() // { // InspectionMethod = MaterialInspection.MIANJIAN, // UnitType = UnitType.ZHONGLIANG, // UnitNo = UnitNoType.T, // MaterialNo = "N/A", // MaterialType = MaterialType.KONGTUO, // MaterialName = "N/A", // MaterialSpec = "N/A", // MaterialBatch = "N/A", // MaterialDensity = "N/A", // StockNumber = 0, // PlaceCode = wmsPlace.PlaceCode, // ContainerId = wmsContainer.Id, // ContainerCode = wmsContainer.ContainerCode, // AreaId = wmsPlace.AreaId, // Source = RuKuSourceEnum.KONGTUO // }; // await _wmsMaterialStockRep.InsertAsync(wmsMaterialStock); // } // } // } //}