using Admin.NET.Core.Service; using Admin.NET.Application.Entity; using Microsoft.AspNetCore.Http; using System.Security.AccessControl; using Furion.DatabaseAccessor; using AngleSharp.Dom; using Org.BouncyCastle.Asn1.X509; using System.Web; using System.Text; using System.Data; using Mapster; namespace Admin.NET.Application; /// /// 库位信息服务 /// [ApiDescriptionSettings(ApplicationConst.WmsBaseGroupName, Order = 100)] public class WmsPlaceService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; private readonly SqlSugarRepository _repWmsArea; private readonly SqlSugarRepository _repWmsContainer; private readonly SqlSugarRepository _repWmsContainerType; private readonly SqlSugarRepository _repWmsPlace; private readonly SqlSugarRepository _repWmsContainerPlace; private readonly SqlSugarRepository _repWmsStockQuan; private readonly SqlSugarRepository _wmsTaskRep; private readonly SqlSugarRepository _v_empty_placeRep; public WmsPlaceService( SqlSugarRepository rep , SqlSugarRepository repWmsArea , SqlSugarRepository repWmsContainer , SqlSugarRepository repWmsContainerType , SqlSugarRepository repWmsContainerPlace , SqlSugarRepository repWmsStockQuan, SqlSugarRepository v_empty_placeRep , SqlSugarRepository wmsTaskRep ) { _rep = rep; _repWmsArea = repWmsArea; _repWmsContainer = repWmsContainer; _repWmsContainerType = repWmsContainerType; _repWmsStockQuan = repWmsStockQuan; _repWmsContainerPlace = repWmsContainerPlace; _wmsTaskRep = wmsTaskRep; _v_empty_placeRep = v_empty_placeRep; } /// /// 分页查询库位信息 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Page")] public async Task> Page(WmsPlaceInput input) { var query = _rep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u => u.PlaceCode.Contains(input.SearchKey.Trim()) || u.PlaceName.Contains(input.SearchKey.Trim()) || u.PlaceAlias.Contains(input.SearchKey.Trim()) ) .WhereIF(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled) .WhereIF(input.IsVirtually != null, u => u.IsVirtually == input.IsVirtually) .WhereIF(!string.IsNullOrWhiteSpace(input.PlaceCodeForpda), u => u.PlaceCode == input.PlaceCodeForpda) //ly-pda容器下架 精准查询 .WhereIF(!string.IsNullOrWhiteSpace(input.PlaceCode), u => u.PlaceCode.Contains(input.PlaceCode.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.PlaceName), u => u.PlaceName.Contains(input.PlaceName.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.PlaceAlias), u => u.PlaceAlias.Contains(input.PlaceAlias.Trim())) .WhereIF(input.PlaceType > 0, u => u.PlaceType == input.PlaceType) .WhereIF(input.StockUnit > 0, u => u.StockUnit == input.StockUnit) .WhereIF(input.PlaceStatus > 0, u => u.PlaceStatus == input.PlaceStatus) .WhereIF(input.AreaId > 0, u => u.AreaId == input.AreaId) .WhereIF(!string.IsNullOrWhiteSpace(input.AreaCode), u => u.AreaCode == input.AreaCode) // 下架单-精准查询 .Select(); return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize); } /// /// 增加库位信息 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Add")] [UnitOfWork] public async Task Add(AddWmsPlaceInput input) { var placeEntity = input.Adapt(); if (placeEntity.IsVirtually == null) { placeEntity.IsVirtually = false; } //验重 await CheckExisit(placeEntity); //ly - 所在库区 var Info = await _repWmsArea.GetFirstAsync(u => u.Id == input.AreaId); placeEntity.Id = Yitter.IdGenerator.YitIdHelper.NextId(); placeEntity.AreaName = Info.AreaName; placeEntity.AreaCode = Info.AreaCode; //库位类型名称 placeEntity.PlaceTypeName = placeEntity.PlaceType.ToString(); if (Info == null) { throw Oops.Oh(errorMessage: @$"所在库区不存在!"); } if (Info.IsDisabled == true) { throw Oops.Oh($"不能使用已禁用的库区"); } try { #region 事务内执行操作 //新增虚拟容器、绑定虚拟库位 await DOVirtually(placeEntity); await _rep.InsertAsync(placeEntity); #endregion } catch (Exception) { throw; } return placeEntity.Id; } /// /// 删除库位信息 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Delete")] public async Task Delete(DeleteWmsPlaceInput input) { var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002); //库位被绑定不能删除 var entityWmsContainerPlace = await _repWmsContainerPlace.GetFirstAsync(u => u.PlaceId == entity.Id); if (entityWmsContainerPlace != null) { throw Oops.Oh("存在绑定关系,不可删除"); } //await _rep.FakeDeleteAsync(entity); //假删除 await _rep.DeleteAsync(entity); //真删除 } /// /// 更新库位信息 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "Update")] public async Task Update(UpdateWmsPlaceInput input) { var entity = input.Adapt(); //验重 - ly-0612 不要需要 //update by liuwq 20240616 await CheckExisit(entity, true); //ly - 所在库区 var Info = await _repWmsArea.GetFirstAsync(u => u.Id == input.AreaId); if (Info == null) { throw Oops.Oh(errorMessage: @$"所在库区不存在!"); } if (Info.IsDisabled == true) { throw Oops.Oh($"不能使用已禁用的库区"); } entity.AreaName = Info.AreaName; entity.AreaCode = Info.AreaCode; //库位类型 entity.PlaceTypeName = entity.PlaceType.ToString(); await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } /// /// 获取库位信息 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "Detail")] public async Task Detail([FromQuery] QueryByIdWmsPlaceInput input) { return await _rep.GetFirstAsync(u => u.Id == input.Id); } /// /// 获取库位信息列表 /// /// /// [HttpGet] [ApiDescriptionSettings(Name = "List")] public async Task> List([FromQuery] WmsPlaceInput input) { return await _rep.AsQueryable().Select().ToListAsync(); } /// /// 获取推荐库位信息列表 /// /// /// [HttpPost] [ApiDescriptionSettings(Name = "RecommendPlaceList")] public async Task> RecommendPlaceList([FromQuery] WmsPlaceInput input) { if (string.IsNullOrWhiteSpace(input.AreaCode)) { throw Oops.Oh($"库区不能为空"); } var handle = FindEmptyPlaceServiceFactory.GetHandle(MaterialClassifyFlagEnum.物料, _v_empty_placeRep, _rep, _wmsTaskRep); var emptyPlaceList = await handle.MainFindMultiEmptyLocation(new FindEmptyPlaceInput() { AreaList = new List() { input.AreaCode } }); var returnPlaceCodeList = emptyPlaceList.Take(10).ToList(); if (returnPlaceCodeList?.Count <= 0) { throw Oops.Oh($"库区{input.AreaCode}没有可推荐库位!"); } return returnPlaceCodeList.Adapt>(); } /// /// 找到原来集合中不存在在活跃任务调度库位 /// /// /// static List RemoveElementsInTargetSet(List originalSet, List targetSet) { // 创建一个临时集合来保存需要删除的元素 var elementsToRemove = new List(); // 遍历原始集合,查找需要删除的元素 foreach (var item in originalSet) { // update by liuwq 20240717 if (targetSet.Contains(item.PlaceCode)) // if (!targetSet.Contains(item.PlaceCode)) { elementsToRemove.Add(item); } } // 从原始集合中移除需要删除的元素 foreach (var item in elementsToRemove) { originalSet.Remove(item); } // return elementsToRemove; //update by liuwq return originalSet; } #region 导入 /// /// Excel模板导入库位表功能 /// /// Excel模板文件 /// 导入的记录数 [HttpPost] [ApiDescriptionSettings(Name = "ImportExcel")] [Description("WmsPlace/ImportExcel")] public async Task ImportExcelAsync(IFormFile file) { int _HeadStartLine = 2;//第1行是说明,第2行是列名 int _DataStartLine = 3;//第3行开始是数据 DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine); var addList = await CommonImport(importDataTable, _DataStartLine); await _rep.InsertRangeAsync(addList); return addList.Count; } /// /// DataTable转换实体对象列表 /// /// /// 模版列名开始行 /// private async Task> CommonImport(DataTable dataTable, int dataStartLine) { var details = new List(); int index = dataStartLine;//模版列名开始行 foreach (System.Data.DataRow row in dataTable.Rows) { index++; //导入模版定制化代码(替换模版使用) var addItem = new WmsBasePlace(); #region 定义变量 var _PlaceCode = "";//库位编码 var _PlaceName = "";//库位名称 var _PlaceAlias = "";//库位别名 var _PlaceType = "";//库位类型 // var _PlaceTypeName = "";//库位类型名称 //var _StockUnit = "";//存放单位 //var _StockUnitName = "";//存放单位名称 var _PlaceStatus = "";//库位属性 //var _IsActivateWCS = "";//是否激活与任务调度 //var _Environment = "";//库存环境 //var _AreaId = "";//所在库区 var _AreaCode = "";//库区编号 //var _AreaName = "";//库区名称 var _VerificationCode = "";//检验码 var _RowNo = "";//排 var _ColumnNo = "";//列 var _LayerNo = "";//层 var _LaneNo = "";//巷道 var _Xzb = "";//库位X坐标 var _Yzb = "";//库位Y坐标 var _Zzb = "";//库位Z坐标 var _Length = "";//库位长度 var _Width = "";//库位宽度 var _Height = "";//库位高度 var _MaxWeight = "";//最大承重 var _InSequence = "";//上架顺序 var _OutSequence = "";//下架顺序 var _IsVirtually = "";//是否虚拟 var _IsDisabled = "";//是否禁用 // var _BindContainerCount = "";//绑定容器数 #endregion #region 取值 _PlaceCode = row["库位编号"]?.ToString(); _PlaceName = row["库位名称"]?.ToString(); _PlaceAlias = row["库位别名"]?.ToString(); _PlaceType = row["库位类型"]?.ToString(); // _PlaceTypeName = row["库位类型名称"]?.ToString(); //_StockUnit = row["存放单位"]?.ToString(); //_StockUnitName = row["存放单位名称"]?.ToString(); _PlaceStatus = row["库位属性"]?.ToString(); // _IsActivateWCS = row["是否激活与任务调度"]?.ToString(); //_Environment = row["库存环境"]?.ToString(); //_AreaId = row["所在库区"]?.ToString(); _AreaCode = row["库区编号"]?.ToString(); //_AreaName = row["库区名称"]?.ToString(); _VerificationCode = row["检验码"]?.ToString(); _RowNo = row["排"]?.ToString(); _ColumnNo = row["列"]?.ToString(); _LayerNo = row["层"]?.ToString(); _LaneNo = row["巷道"]?.ToString(); _Xzb = row["库位X坐标"]?.ToString(); _Yzb = row["库位Y坐标"]?.ToString(); _Zzb = row["库位Z坐标"]?.ToString(); _Length = row["库位长度"]?.ToString(); _Width = row["库位宽度"]?.ToString(); _Height = row["库位高度"]?.ToString(); _MaxWeight = row["最大承重"]?.ToString(); _InSequence = row["上架顺序"]?.ToString(); _OutSequence = row["下架顺序"]?.ToString(); _IsVirtually = row["是否虚拟"]?.ToString(); _IsDisabled = row["是否禁用"]?.ToString(); //_BindContainerCount = row["绑定容器数"]?.ToString(); #endregion #region 验证 if (string.IsNullOrEmpty(_PlaceCode)) { throw Oops.Oh($"第{index}行[库位编码]{_PlaceCode}不能为空!"); } if (!string.IsNullOrEmpty(_PlaceCode)) { var isExist = await _rep.AsQueryable().FirstAsync(p => p.PlaceCode == _PlaceCode || p.PlaceName == _PlaceName); if (isExist != null) throw Oops.Oh("该库位编号" + _PlaceCode + "已经存在不可重复添加!"); addItem.PlaceCode = (string)(_PlaceCode.Trim()); } if (string.IsNullOrEmpty(_PlaceName)) { throw Oops.Oh($"第{index}行[库位名称]{_PlaceName}不能为空!"); } if (!string.IsNullOrEmpty(_PlaceName)) { addItem.PlaceName = (string)(_PlaceName.Trim()); } if (!string.IsNullOrEmpty(_PlaceAlias)) { addItem.PlaceAlias = (string)(_PlaceAlias.Trim()); } if (string.IsNullOrEmpty(_PlaceType)) { throw Oops.Oh($"第{index}行[库位类型]{_PlaceType}不能为空!"); } if (!string.IsNullOrEmpty(_PlaceType)) { Admin.NET.Application.PlaceTypeEnum enumPlaceType = default(Admin.NET.Application.PlaceTypeEnum); if (!Enum.TryParse(_PlaceType, out enumPlaceType) && !string.IsNullOrEmpty(_PlaceType)) { throw Oops.Oh($"第{index}行[库位类型]{_PlaceType}值不正确!"); } else { addItem.PlaceType = enumPlaceType; addItem.PlaceTypeName = enumPlaceType.GetDescription(); } } //if (!string.IsNullOrEmpty(_PlaceTypeName)) //{ // addItem.PlaceTypeName = (string)(_PlaceTypeName.Trim()); //} //if (string.IsNullOrEmpty(_StockUnit)) //{ // throw Oops.Oh($"第{index}行[存放单位]{_StockUnit}不能为空!"); //} //if (!string.IsNullOrEmpty(_StockUnit)) //{ // Admin.NET.Application.StockUnitEnum enumStockUnit = default(Admin.NET.Application.StockUnitEnum); // if (!Enum.TryParse(_StockUnit, out enumStockUnit) && !string.IsNullOrEmpty(_StockUnit)) // { // throw Oops.Oh($"第{index}行[存放单位]{_StockUnit}值不正确!"); // } // else // { // addItem.StockUnit = enumStockUnit; // } //} //if (!string.IsNullOrEmpty(_StockUnitName)) //{ // addItem.StockUnitName = (string)(_StockUnitName.Trim()); //} if (string.IsNullOrEmpty(_PlaceStatus)) { throw Oops.Oh($"第{index}行[库位属性]{_PlaceStatus}不能为空!"); } if (!string.IsNullOrEmpty(_PlaceStatus)) { Admin.NET.Application.PlaceStatusEnum enumPlaceStatus = default(Admin.NET.Application.PlaceStatusEnum); if (!Enum.TryParse(_PlaceStatus, out enumPlaceStatus) && !string.IsNullOrEmpty(_PlaceStatus)) { throw Oops.Oh($"第{index}行[库位属性]{_PlaceStatus}值不正确!"); } else { addItem.PlaceStatus = enumPlaceStatus; } } //if (!string.IsNullOrEmpty(_IsActivateWCS)) //{ // if (!_IsActivateWCS.Equals("是") && !_IsActivateWCS.Equals("否")) // { // throw Oops.Oh($"第{index}行[是否激活与任务调度]{_IsActivateWCS}值不正确!"); // } // else // { // bool outIsActivateWCS = _IsActivateWCS.Equals("是") ? true : false; // addItem.IsActivateWCS = outIsActivateWCS; // } //} //if (!string.IsNullOrEmpty(_Environment)) //{ // addItem.Environment = (string)(_Environment.Trim()); //} if (string.IsNullOrEmpty(_AreaCode)) { throw Oops.Oh($"第{index}行[库区编号]{_AreaCode}不能为空!"); } var wmsAreaInfo = await _repWmsArea.GetFirstAsync(u => u.AreaCode == _AreaCode.Trim() && u.IsDelete == false); if (wmsAreaInfo == null) { throw Oops.Oh(errorMessage: @$"库区{_AreaCode}不存在!"); } if (wmsAreaInfo.IsDisabled == true) { throw Oops.Oh($"不能使用已禁用的仓库"); } addItem.AreaCode = wmsAreaInfo.AreaCode; addItem.AreaId = wmsAreaInfo.Id; addItem.AreaName = wmsAreaInfo.AreaName; //if (string.IsNullOrEmpty(_AreaId)) //{ // throw Oops.Oh($"第{index}行[所在库区]{_AreaId}不能为空!"); //} //if (!string.IsNullOrEmpty(_AreaId)) //{ // if (!long.TryParse(_AreaId, out long outAreaId) && !string.IsNullOrEmpty(_AreaId)) // { // throw Oops.Oh($"第{index}行[所在库区]{_AreaId}值不正确!"); // } // if (outAreaId <= 0 && !string.IsNullOrEmpty(_AreaId)) // { // throw Oops.Oh($"第{index}行[所在库区]{_AreaId}值不能小于等于0!"); // } // else // { // addItem.AreaId = outAreaId; // } //} //if (!string.IsNullOrEmpty(_AreaCode)) //{ // addItem.AreaCode = (string)(_AreaCode.Trim()); //} //if (!string.IsNullOrEmpty(_AreaName)) //{ // addItem.AreaName = (string)(_AreaName.Trim()); //} if (!string.IsNullOrEmpty(_VerificationCode)) { addItem.VerificationCode = (string)(_VerificationCode.Trim()); } if (!string.IsNullOrEmpty(_RowNo)) { if (!int.TryParse(_RowNo, out int outRowNo) && !string.IsNullOrEmpty(_RowNo)) { throw Oops.Oh($"第{index}行[排]{_RowNo}值不正确!"); } if (outRowNo <= 0 && !string.IsNullOrEmpty(_RowNo)) { throw Oops.Oh($"第{index}行[排]{_RowNo}值不能小于等于0!"); } else { addItem.RowNo = outRowNo; } } if (!string.IsNullOrEmpty(_ColumnNo)) { if (!int.TryParse(_ColumnNo, out int outColumnNo) && !string.IsNullOrEmpty(_ColumnNo)) { throw Oops.Oh($"第{index}行[列]{_ColumnNo}值不正确!"); } if (outColumnNo <= 0 && !string.IsNullOrEmpty(_ColumnNo)) { throw Oops.Oh($"第{index}行[列]{_ColumnNo}值不能小于等于0!"); } else { addItem.ColumnNo = outColumnNo; } } if (!string.IsNullOrEmpty(_LayerNo)) { if (!int.TryParse(_LayerNo, out int outLayerNo) && !string.IsNullOrEmpty(_LayerNo)) { throw Oops.Oh($"第{index}行[层]{_LayerNo}值不正确!"); } if (outLayerNo <= 0 && !string.IsNullOrEmpty(_LayerNo)) { throw Oops.Oh($"第{index}行[层]{_LayerNo}值不能小于等于0!"); } else { addItem.LayerNo = outLayerNo; } } if (!string.IsNullOrEmpty(_LaneNo)) { if (!int.TryParse(_LaneNo, out int outLaneNo) && !string.IsNullOrEmpty(_LaneNo)) { throw Oops.Oh($"第{index}行[巷道]{_LaneNo}值不正确!"); } if (outLaneNo <= 0 && !string.IsNullOrEmpty(_LaneNo)) { throw Oops.Oh($"第{index}行[巷道]{_LaneNo}值不能小于等于0!"); } else { addItem.LaneNo = outLaneNo; } } if (!string.IsNullOrEmpty(_Xzb)) { addItem.Xzb = (string)(_Xzb.Trim()); } if (!string.IsNullOrEmpty(_Yzb)) { addItem.Yzb = (string)(_Yzb.Trim()); } if (!string.IsNullOrEmpty(_Zzb)) { addItem.Zzb = (string)(_Zzb.Trim()); } if (!string.IsNullOrEmpty(_Length)) { if (!decimal.TryParse(_Length, out decimal outLength) && !string.IsNullOrEmpty(_Length)) { throw Oops.Oh($"第{index}行[库位长度]{_Length}值不正确!"); } if (outLength <= 0 && !string.IsNullOrEmpty(_Length)) { throw Oops.Oh($"第{index}行[库位长度]{_Length}值不能小于等于0!"); } else { addItem.Length = outLength; } } if (!string.IsNullOrEmpty(_Width)) { if (!decimal.TryParse(_Width, out decimal outWidth) && !string.IsNullOrEmpty(_Width)) { throw Oops.Oh($"第{index}行[库位宽度]{_Width}值不正确!"); } if (outWidth <= 0 && !string.IsNullOrEmpty(_Width)) { throw Oops.Oh($"第{index}行[库位宽度]{_Width}值不能小于等于0!"); } else { addItem.Width = outWidth; } } if (!string.IsNullOrEmpty(_Height)) { if (!decimal.TryParse(_Height, out decimal outHeight) && !string.IsNullOrEmpty(_Height)) { throw Oops.Oh($"第{index}行[库位高度]{_Height}值不正确!"); } if (outHeight <= 0 && !string.IsNullOrEmpty(_Height)) { throw Oops.Oh($"第{index}行[库位高度]{_Height}值不能小于等于0!"); } else { addItem.Height = outHeight; } } if (!string.IsNullOrEmpty(_MaxWeight)) { if (!decimal.TryParse(_MaxWeight, out decimal outMaxWeight) && !string.IsNullOrEmpty(_MaxWeight)) { throw Oops.Oh($"第{index}行[最大承重]{_MaxWeight}值不正确!"); } if (outMaxWeight <= 0 && !string.IsNullOrEmpty(_MaxWeight)) { throw Oops.Oh($"第{index}行[最大承重]{_MaxWeight}值不能小于等于0!"); } else { addItem.MaxWeight = outMaxWeight; } } if (!string.IsNullOrEmpty(_InSequence)) { if (!int.TryParse(_InSequence, out int outInSequence) && !string.IsNullOrEmpty(_InSequence)) { throw Oops.Oh($"第{index}行[上架顺序]{_InSequence}值不正确!"); } if (outInSequence <= 0 && !string.IsNullOrEmpty(_InSequence)) { throw Oops.Oh($"第{index}行[上架顺序]{_InSequence}值不能小于等于0!"); } else { addItem.InSequence = outInSequence; } } if (!string.IsNullOrEmpty(_OutSequence)) { if (!int.TryParse(_OutSequence, out int outOutSequence) && !string.IsNullOrEmpty(_OutSequence)) { throw Oops.Oh($"第{index}行[下架顺序]{_OutSequence}值不正确!"); } if (outOutSequence <= 0 && !string.IsNullOrEmpty(_OutSequence)) { throw Oops.Oh($"第{index}行[下架顺序]{_OutSequence}值不能小于等于0!"); } else { addItem.OutSequence = outOutSequence; } } if (!string.IsNullOrEmpty(_IsVirtually)) { if (!_IsVirtually.Equals("是") && !_IsVirtually.Equals("否")) { throw Oops.Oh($"第{index}行[是否虚拟]{_IsVirtually}值不正确!"); } else { bool outIsVirtually = _IsVirtually.Equals("是") ? true : false; addItem.IsVirtually = outIsVirtually; } } if (string.IsNullOrEmpty(_IsDisabled)) { throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}不能为空!"); } if (!string.IsNullOrEmpty(_IsDisabled)) { if (!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否")) { throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}值不正确!"); } else { bool outIsDisabled = _IsDisabled.Equals("是") ? true : false; addItem.IsDisabled = outIsDisabled; } } //if (!string.IsNullOrEmpty(_BindContainerCount)) //{ // if (!int.TryParse(_BindContainerCount, out int outBindContainerCount) && !string.IsNullOrEmpty(_BindContainerCount)) // { // throw Oops.Oh($"第{index}行[绑定容器数]{_BindContainerCount}值不正确!"); // } // if (outBindContainerCount <= 0 && !string.IsNullOrEmpty(_BindContainerCount)) // { // throw Oops.Oh($"第{index}行[绑定容器数]{_BindContainerCount}值不能小于等于0!"); // } // else // { // addItem.BindContainerCount = outBindContainerCount; // } //} #endregion details.Add(addItem); } //验重 await CheckExisitForImport(details); return details; } /// /// 根据版本下载库位表的Excel导入模板 /// /// 下载的模板文件 [HttpGet] [ApiDescriptionSettings(Name = "DownloadExcelTemplate")] [Description("WmsPlace/DownloadExcelTemplate")] public IActionResult DownloadExcelTemplate() { string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\库位信息{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx"; var fileName = HttpUtility.UrlEncode($"导入模板(库位信息).xlsx", Encoding.GetEncoding("UTF-8")); return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName }; } ///// ///// DataTable转换实体对象列表 ///// ///// ///// 模版列名开始行 ///// //private async Task> CommonImport(DataTable dataTable, int dataStartLine) //{ // var details = new List(); // int index = dataStartLine;//模版列名开始行 // foreach (System.Data.DataRow row in dataTable.Rows) // { // index++; // //导入模版定制化代码(替换模版使用) // var addItem = new WmsBasePlace(); // #region 定义变量 // var _PlaceCode = "";//库位编码 // var _PlaceName = "";//库位名称 // var _PlaceAlias = "";//库位别名 // var _PlaceType = "";//库位类型 // // var _PlaceTypeName = "";//库位类型名称 // //var _StockUnit = "";//存放单位 // //var _StockUnitName = "";//存放单位名称 // var _PlaceStatus = "";//库位属性 // //var _IsActivateWCS = "";//是否激活与任务调度 // //var _Environment = "";//库存环境 // var _AreaId = "";//所在库区 // var _AreaCode = "";//库区编号 // var _AreaName = "";//库区名称 // var _VerificationCode = "";//检验码 // var _RowNo = "";//排 // var _ColumnNo = "";//列 // var _LayerNo = "";//层 // var _LaneNo = "";//巷道 // var _Xzb = "";//库位X坐标 // var _Yzb = "";//库位Y坐标 // var _Zzb = "";//库位Z坐标 // var _Length = "";//库位长度 // var _Width = "";//库位宽度 // var _Height = "";//库位高度 // var _MaxWeight = "";//最大承重 // var _InSequence = "";//上架顺序 // var _OutSequence = "";//下架顺序 // var _IsVirtually = "";//是否虚拟 // var _IsDisabled = "";//是否禁用 // // var _BindContainerCount = "";//绑定容器数 // #endregion // #region 取值 // _PlaceCode = row["库位编号"]?.ToString(); // _PlaceName = row["库位名称"]?.ToString(); // _PlaceAlias = row["库位别名"]?.ToString(); // _PlaceType = row["库位类型"]?.ToString(); // // _PlaceTypeName = row["库位类型名称"]?.ToString(); // //_StockUnit = row["存放单位"]?.ToString(); // //_StockUnitName = row["存放单位名称"]?.ToString(); // _PlaceStatus = row["库位属性"]?.ToString(); // // _IsActivateWCS = row["是否激活与任务调度"]?.ToString(); // //_Environment = row["库存环境"]?.ToString(); // _AreaId = row["所在库区"]?.ToString(); // _AreaCode = row["库区编号"]?.ToString(); // _AreaName = row["库区名称"]?.ToString(); // _VerificationCode = row["检验码"]?.ToString(); // _RowNo = row["排"]?.ToString(); // _ColumnNo = row["列"]?.ToString(); // _LayerNo = row["层"]?.ToString(); // _LaneNo = row["巷道"]?.ToString(); // _Xzb = row["库位X坐标"]?.ToString(); // _Yzb = row["库位Y坐标"]?.ToString(); // _Zzb = row["库位Z坐标"]?.ToString(); // _Length = row["库位长度"]?.ToString(); // _Width = row["库位宽度"]?.ToString(); // _Height = row["库位高度"]?.ToString(); // _MaxWeight = row["最大承重"]?.ToString(); // _InSequence = row["上架顺序"]?.ToString(); // _OutSequence = row["下架顺序"]?.ToString(); // _IsVirtually = row["是否虚拟"]?.ToString(); // _IsDisabled = row["是否禁用"]?.ToString(); // //_BindContainerCount = row["绑定容器数"]?.ToString(); // #endregion // #region 验证 // if (string.IsNullOrEmpty(_PlaceCode)) // { // throw Oops.Oh($"第{index}行[库位编码]{_PlaceCode}不能为空!"); // } // if (!string.IsNullOrEmpty(_PlaceCode)) // { // var isExist = await _repWmsPlace.AsQueryable().FirstAsync(p => p.PlaceCode == _PlaceCode || p.PlaceName == _PlaceName); // if (isExist != null) throw Oops.Oh("该库位编号" + _PlaceCode + "已经存在不可重复添加!"); // addItem.PlaceCode = (string)(_PlaceCode.Trim()); // } // if (string.IsNullOrEmpty(_PlaceName)) // { // throw Oops.Oh($"第{index}行[库位名称]{_PlaceName}不能为空!"); // } // if (!string.IsNullOrEmpty(_PlaceName)) // { // addItem.PlaceName = (string)(_PlaceName.Trim()); // } // if (!string.IsNullOrEmpty(_PlaceAlias)) // { // addItem.PlaceAlias = (string)(_PlaceAlias.Trim()); // } // if (string.IsNullOrEmpty(_PlaceType)) // { // throw Oops.Oh($"第{index}行[库位类型]{_PlaceType}不能为空!"); // } // if (!string.IsNullOrEmpty(_PlaceType)) // { // Admin.NET.Application.PlaceTypeEnum enumPlaceType = default(Admin.NET.Application.PlaceTypeEnum); // if (!Enum.TryParse(_PlaceType, out enumPlaceType) && !string.IsNullOrEmpty(_PlaceType)) // { // throw Oops.Oh($"第{index}行[库位类型]{_PlaceType}值不正确!"); // } // else // { // addItem.PlaceType = enumPlaceType; // addItem.PlaceName = enumPlaceType.GetConfigValue(); // } // } // //if (!string.IsNullOrEmpty(_PlaceTypeName)) // //{ // // addItem.PlaceTypeName = (string)(_PlaceTypeName.Trim()); // //} // //if (string.IsNullOrEmpty(_StockUnit)) // //{ // // throw Oops.Oh($"第{index}行[存放单位]{_StockUnit}不能为空!"); // //} // //if (!string.IsNullOrEmpty(_StockUnit)) // //{ // // Admin.NET.Application.StockUnitEnum enumStockUnit = default(Admin.NET.Application.StockUnitEnum); // // if (!Enum.TryParse(_StockUnit, out enumStockUnit) && !string.IsNullOrEmpty(_StockUnit)) // // { // // throw Oops.Oh($"第{index}行[存放单位]{_StockUnit}值不正确!"); // // } // // else // // { // // addItem.StockUnit = enumStockUnit; // // } // //} // //if (!string.IsNullOrEmpty(_StockUnitName)) // //{ // // addItem.StockUnitName = (string)(_StockUnitName.Trim()); // //} // if (string.IsNullOrEmpty(_PlaceStatus)) // { // throw Oops.Oh($"第{index}行[库位属性]{_PlaceStatus}不能为空!"); // } // if (!string.IsNullOrEmpty(_PlaceStatus)) // { // Admin.NET.Application.PlaceStatusEnum enumPlaceStatus = default(Admin.NET.Application.PlaceStatusEnum); // if (!Enum.TryParse(_PlaceStatus, out enumPlaceStatus) && !string.IsNullOrEmpty(_PlaceStatus)) // { // throw Oops.Oh($"第{index}行[库位属性]{_PlaceStatus}值不正确!"); // } // else // { // addItem.PlaceStatus = enumPlaceStatus; // } // } // //if (!string.IsNullOrEmpty(_IsActivateWCS)) // //{ // // if (!_IsActivateWCS.Equals("是") && !_IsActivateWCS.Equals("否")) // // { // // throw Oops.Oh($"第{index}行[是否激活与任务调度]{_IsActivateWCS}值不正确!"); // // } // // else // // { // // bool outIsActivateWCS = _IsActivateWCS.Equals("是") ? true : false; // // addItem.IsActivateWCS = outIsActivateWCS; // // } // //} // //if (!string.IsNullOrEmpty(_Environment)) // //{ // // addItem.Environment = (string)(_Environment.Trim()); // //} // if (string.IsNullOrEmpty(_AreaId)) // { // throw Oops.Oh($"第{index}行[所在库区]{_AreaId}不能为空!"); // } // if (!string.IsNullOrEmpty(_AreaId)) // { // if (!long.TryParse(_AreaId, out long outAreaId) && !string.IsNullOrEmpty(_AreaId)) // { // throw Oops.Oh($"第{index}行[所在库区]{_AreaId}值不正确!"); // } // if (outAreaId <= 0 && !string.IsNullOrEmpty(_AreaId)) // { // throw Oops.Oh($"第{index}行[所在库区]{_AreaId}值不能小于等于0!"); // } // else // { // addItem.AreaId = outAreaId; // } // } // if (!string.IsNullOrEmpty(_AreaCode)) // { // addItem.AreaCode = (string)(_AreaCode.Trim()); // } // if (!string.IsNullOrEmpty(_AreaName)) // { // addItem.AreaName = (string)(_AreaName.Trim()); // } // if (!string.IsNullOrEmpty(_VerificationCode)) // { // addItem.VerificationCode = (string)(_VerificationCode.Trim()); // } // if (!string.IsNullOrEmpty(_RowNo)) // { // if (!int.TryParse(_RowNo, out int outRowNo) && !string.IsNullOrEmpty(_RowNo)) // { // throw Oops.Oh($"第{index}行[排]{_RowNo}值不正确!"); // } // if (outRowNo <= 0 && !string.IsNullOrEmpty(_RowNo)) // { // throw Oops.Oh($"第{index}行[排]{_RowNo}值不能小于等于0!"); // } // else // { // addItem.RowNo = outRowNo; // } // } // if (!string.IsNullOrEmpty(_ColumnNo)) // { // if (!int.TryParse(_ColumnNo, out int outColumnNo) && !string.IsNullOrEmpty(_ColumnNo)) // { // throw Oops.Oh($"第{index}行[列]{_ColumnNo}值不正确!"); // } // if (outColumnNo <= 0 && !string.IsNullOrEmpty(_ColumnNo)) // { // throw Oops.Oh($"第{index}行[列]{_ColumnNo}值不能小于等于0!"); // } // else // { // addItem.ColumnNo = outColumnNo; // } // } // if (!string.IsNullOrEmpty(_LayerNo)) // { // if (!int.TryParse(_LayerNo, out int outLayerNo) && !string.IsNullOrEmpty(_LayerNo)) // { // throw Oops.Oh($"第{index}行[层]{_LayerNo}值不正确!"); // } // if (outLayerNo <= 0 && !string.IsNullOrEmpty(_LayerNo)) // { // throw Oops.Oh($"第{index}行[层]{_LayerNo}值不能小于等于0!"); // } // else // { // addItem.LayerNo = outLayerNo; // } // } // if (!string.IsNullOrEmpty(_LaneNo)) // { // if (!int.TryParse(_LaneNo, out int outLaneNo) && !string.IsNullOrEmpty(_LaneNo)) // { // throw Oops.Oh($"第{index}行[巷道]{_LaneNo}值不正确!"); // } // if (outLaneNo <= 0 && !string.IsNullOrEmpty(_LaneNo)) // { // throw Oops.Oh($"第{index}行[巷道]{_LaneNo}值不能小于等于0!"); // } // else // { // addItem.LaneNo = outLaneNo; // } // } // if (!string.IsNullOrEmpty(_Xzb)) // { // addItem.Xzb = (string)(_Xzb.Trim()); // } // if (!string.IsNullOrEmpty(_Yzb)) // { // addItem.Yzb = (string)(_Yzb.Trim()); // } // if (!string.IsNullOrEmpty(_Zzb)) // { // addItem.Zzb = (string)(_Zzb.Trim()); // } // if (!string.IsNullOrEmpty(_Length)) // { // if (!decimal.TryParse(_Length, out decimal outLength) && !string.IsNullOrEmpty(_Length)) // { // throw Oops.Oh($"第{index}行[库位长度]{_Length}值不正确!"); // } // if (outLength <= 0 && !string.IsNullOrEmpty(_Length)) // { // throw Oops.Oh($"第{index}行[库位长度]{_Length}值不能小于等于0!"); // } // else // { // addItem.Length = outLength; // } // } // if (!string.IsNullOrEmpty(_Width)) // { // if (!decimal.TryParse(_Width, out decimal outWidth) && !string.IsNullOrEmpty(_Width)) // { // throw Oops.Oh($"第{index}行[库位宽度]{_Width}值不正确!"); // } // if (outWidth <= 0 && !string.IsNullOrEmpty(_Width)) // { // throw Oops.Oh($"第{index}行[库位宽度]{_Width}值不能小于等于0!"); // } // else // { // addItem.Width = outWidth; // } // } // if (!string.IsNullOrEmpty(_Height)) // { // if (!decimal.TryParse(_Height, out decimal outHeight) && !string.IsNullOrEmpty(_Height)) // { // throw Oops.Oh($"第{index}行[库位高度]{_Height}值不正确!"); // } // if (outHeight <= 0 && !string.IsNullOrEmpty(_Height)) // { // throw Oops.Oh($"第{index}行[库位高度]{_Height}值不能小于等于0!"); // } // else // { // addItem.Height = outHeight; // } // } // if (!string.IsNullOrEmpty(_MaxWeight)) // { // if (!decimal.TryParse(_MaxWeight, out decimal outMaxWeight) && !string.IsNullOrEmpty(_MaxWeight)) // { // throw Oops.Oh($"第{index}行[最大承重]{_MaxWeight}值不正确!"); // } // if (outMaxWeight <= 0 && !string.IsNullOrEmpty(_MaxWeight)) // { // throw Oops.Oh($"第{index}行[最大承重]{_MaxWeight}值不能小于等于0!"); // } // else // { // addItem.MaxWeight = outMaxWeight; // } // } // if (!string.IsNullOrEmpty(_InSequence)) // { // if (!int.TryParse(_InSequence, out int outInSequence) && !string.IsNullOrEmpty(_InSequence)) // { // throw Oops.Oh($"第{index}行[上架顺序]{_InSequence}值不正确!"); // } // if (outInSequence <= 0 && !string.IsNullOrEmpty(_InSequence)) // { // throw Oops.Oh($"第{index}行[上架顺序]{_InSequence}值不能小于等于0!"); // } // else // { // addItem.InSequence = outInSequence; // } // } // if (!string.IsNullOrEmpty(_OutSequence)) // { // if (!int.TryParse(_OutSequence, out int outOutSequence) && !string.IsNullOrEmpty(_OutSequence)) // { // throw Oops.Oh($"第{index}行[下架顺序]{_OutSequence}值不正确!"); // } // if (outOutSequence <= 0 && !string.IsNullOrEmpty(_OutSequence)) // { // throw Oops.Oh($"第{index}行[下架顺序]{_OutSequence}值不能小于等于0!"); // } // else // { // addItem.OutSequence = outOutSequence; // } // } // if (!string.IsNullOrEmpty(_IsVirtually)) // { // if (!_IsVirtually.Equals("是") && !_IsVirtually.Equals("否")) // { // throw Oops.Oh($"第{index}行[是否虚拟]{_IsVirtually}值不正确!"); // } // else // { // bool outIsVirtually = _IsVirtually.Equals("是") ? true : false; // addItem.IsVirtually = outIsVirtually; // } // } // if (string.IsNullOrEmpty(_IsDisabled)) // { // throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}不能为空!"); // } // if (!string.IsNullOrEmpty(_IsDisabled)) // { // if (!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否")) // { // throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}值不正确!"); // } // else // { // bool outIsDisabled = _IsDisabled.Equals("是") ? true : false; // addItem.IsDisabled = outIsDisabled; // } // } // //if (!string.IsNullOrEmpty(_BindContainerCount)) // //{ // // if (!int.TryParse(_BindContainerCount, out int outBindContainerCount) && !string.IsNullOrEmpty(_BindContainerCount)) // // { // // throw Oops.Oh($"第{index}行[绑定容器数]{_BindContainerCount}值不正确!"); // // } // // if (outBindContainerCount <= 0 && !string.IsNullOrEmpty(_BindContainerCount)) // // { // // throw Oops.Oh($"第{index}行[绑定容器数]{_BindContainerCount}值不能小于等于0!"); // // } // // else // // { // // addItem.BindContainerCount = outBindContainerCount; // // } // //} // #endregion // details.Add(addItem); // } // //验重 // await CheckExisitForImport(details); // return details; //} ///// ///// 根据版本下载库位表的Excel导入模板 ///// ///// 下载的模板文件 //[HttpGet] //[ApiDescriptionSettings(Name = "DownloadExcelTemplate")] //[Description("WmsPlace/DownloadExcelTemplate")] //public IActionResult DownloadExcelTemplate() //{ // string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\库位表{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx"; // var fileName = HttpUtility.UrlEncode($"导入模板(库位表).xlsx", Encoding.GetEncoding("UTF-8")); // return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName }; //} #endregion /// /// 根据组合校验和单独校验验证数据是否已存在-导入时验证 /// /// /// private async Task CheckExisitForImport(List inputs) { if (inputs?.Count <= 0) { throw Oops.Oh($"导入数据不能为空"); } //根据组合校验验证表格中中是否已存在相同数据 //根据单独校验验证表格中中是否已存在相同数据 } #region 私有方法 /// /// //新增虚拟容器、绑定虚拟库位 /// /// /// private async Task DOVirtually(WmsBasePlace placeEntity) { WmsContainerPlace addContainerPlace = null; WmsBaseContainer addVirtuallyContainer = null; //如果是虚拟库位,自动创建虚拟库位容器、绑定库位关系 if (placeEntity.IsVirtually == true) { //创建虚拟库位容器 //获取虚拟容器类型 var containerType = await _repWmsContainerType.GetFirstAsync(u => u.TypeCode == OperationsContainerTypeEnum.VIR.ToString()); if (containerType == null) { throw Oops.Oh(errorMessage: @$"{OperationsContainerTypeEnum.VIR.ToString()}虚拟容器类型不存在!"); } if (containerType.IsDisabled == true) { throw Oops.Oh($"不能使用已禁用的容器类型"); } var wmsContainer = await _repWmsContainer.GetFirstAsync(x => x.ContainerCode == placeEntity.PlaceCode && x.IsDelete == false); if (wmsContainer == null) { addVirtuallyContainer = new WmsBaseContainer() { ContainerCode = placeEntity.PlaceCode,//虚拟容器编号跟虚拟库位编号保持一致 ContainerName = placeEntity.PlaceName,//虚拟容器名称跟虚拟库位名称保持一致 IsVirtually = true, ContainerTypeId = containerType.Id, ContainerTypeCode = containerType.TypeCode, ContainerTypeName = containerType.TypeName }; } //虚拟容器绑定虚拟库位 var wmsContainerPlace = await _repWmsContainerPlace.GetFirstAsync(x => x.ContainerCode == placeEntity.PlaceCode && x.PlaceCode == placeEntity.PlaceCode && x.IsDelete == false); if (wmsContainerPlace == null) { addContainerPlace = new WmsContainerPlace() { ContainerId = 0, ContainerCode = placeEntity.PlaceCode, ContainerName = placeEntity.PlaceCode, PlaceId = placeEntity.Id, PlaceCode = placeEntity.PlaceCode, PlaceName = placeEntity.PlaceName }; } } if (addVirtuallyContainer != null)//新增容器 { await _repWmsContainer.InsertAsync(addVirtuallyContainer); } if (addContainerPlace != null)//新增容器库位绑定关系 { await _repWmsContainerPlace.InsertAsync(addContainerPlace); } } /// /// 根据联合主键验证数据是否已存在-数据库 /// /// /// /// private async Task CheckExisit(WmsBasePlace input, bool isEdit = false) { //输出数据已存在错误 ErrorCodeItemMetadataAttribute metadata = ErrorCodeEnum.D1006.GetErrorCodeItemMetadata(); WmsBasePlace _existItem = null; if (!isEdit)//新增 { _existItem = await _rep.GetFirstAsync(u => u.PlaceCode.Equals(input.PlaceCode)); if (_existItem != null) throw Oops.Oh($"库位编号[{input.PlaceCode}]{metadata.ErrorMessage}"); _existItem = await _rep.GetFirstAsync(u => u.PlaceName.Equals(input.PlaceName)); if (_existItem != null) throw Oops.Oh($"库位名称[{input.PlaceName}]{metadata.ErrorMessage}"); //不同库区 可以存在相同的 巷道、排、列、层 _existItem = await _rep.GetFirstAsync(u => u.AreaCode.Equals(input.AreaCode.Trim()) && u.LaneNo.Equals(input.LaneNo) && u.RowNo.Equals(input.RowNo) && u.ColumnNo.Equals(input.ColumnNo) && u.LayerNo.Equals(input.LayerNo)); if (_existItem != null) throw Oops.Oh($"库位[{input.LaneNo + "巷道" + input.RowNo + "排" + input.ColumnNo + "列" + input.LayerNo + "层" + input.AreaName + "已存在"}]{metadata.ErrorMessage}"); } else//编辑 { //当前编辑数据以外是否存在重复 _existItem = await _rep.GetFirstAsync(u => u.Id != input.Id && u.PlaceCode.Equals(input.PlaceCode)); if (_existItem != null) throw Oops.Oh($"库位编号[{input.PlaceCode}]{metadata.ErrorMessage}"); _existItem = await _rep.GetFirstAsync(u => u.Id != input.Id && u.PlaceName.Equals(input.PlaceName)); if (_existItem != null) throw Oops.Oh($"库位名称[{input.PlaceName}]{metadata.ErrorMessage}"); _existItem = await _rep.GetFirstAsync(u => u.Id != input.Id && u.AreaCode.Equals(input.AreaCode.Trim()) && u.LaneNo.Equals(input.LaneNo) && u.RowNo.Equals(input.RowNo) && u.ColumnNo.Equals(input.ColumnNo) && u.LayerNo.Equals(input.LayerNo)); if (_existItem != null) throw Oops.Oh($"库位[{input.AreaCode + "库区" + input.LaneNo + "巷道" + input.RowNo + "排" + input.ColumnNo + "列" + input.LayerNo + "层" + input.AreaName + "已存在"}]{metadata.ErrorMessage}"); } } #endregion ///// ///// 根据库区 排获取库位信息 ///// ///// ///// //[HttpGet("GetPalceList")] //public async Task GetPalceList([FromQuery] PlaceInput input) //{ // var places = await _rep.AsQueryable() // .WhereIF(!string.IsNullOrWhiteSpace(input.PlaceNo), u => u.PlaceNo.Contains(input.PlaceNo.Trim())) // .WhereIF(!string.IsNullOrWhiteSpace(input.AreaCode), u => u.AreaCode == input.AreaCode.Trim()) // .WhereIF(input.Aisle > 0, u => u.Aisle == input.Aisle) // .WhereIF(input.RowNo > 0, u => u.RowNo == input.RowNo) // .WhereIF(input.ColumnNo > 0, u => u.ColumnNo == input.ColumnNo) // .WhereIF(input.LayerNo > 0, u => u.LayerNo == input.LayerNo) // .Where(x => !x.IsDelete).ToListAsync(); // var aisleNos = places.OrderBy(x => x.Aisle).Select(x => x.Aisle).Distinct().ToList();//获取巷道列表 // var locationDataList = new List(); // //巷道 // foreach (var aisle in aisleNos) // { // var aisleData = new LocationAisleData(); // aisleData.Aisle = aisle; // aisleData.locationRownoData = new List(); // //排 // var rowNos = places.Where(p => p.Aisle == aisle).OrderBy(n => n.RowNo).Select(n => n.RowNo).Distinct().ToList(); // foreach (var row in rowNos) // { // var rownoData = new LocationRownoData(); // rownoData.Rowno = row; // rownoData.locationLayerData = new List(); // //层 // var layerNo = places.Where(p => p.Aisle == aisle && p.RowNo == row).OrderByDescending(n => n.LayerNo).Select(n => n.LayerNo).Distinct(); // foreach (var lay in layerNo) // { // var layerData = new LocationLayerData(); // layerData.Layer = (int)lay; // layerData.locationColumnNoData = new List(); // //列 // var columnNos = places.Where(p => p.Aisle == aisle && p.RowNo == row).OrderBy(n => n.ColumnNo).Select(n => n.ColumnNo).Distinct(); // foreach (var col in columnNos) // { // var wareLocationMdoel = places.Where(p => p.Aisle == aisle && p.RowNo == row && p.LayerNo == lay && p.ColumnNo == col).FirstOrDefault(); // if (wareLocationMdoel != null) // { // var locationDetail = new FoamingPalceDetail() // { // Id = wareLocationMdoel.Id, // RowNo = wareLocationMdoel.RowNo, // ColumnNo = wareLocationMdoel.ColumnNo, // LayerNo = (int)wareLocationMdoel.LayerNo, // PlaceCode = wareLocationMdoel.PlaceNo, // Islock = wareLocationMdoel.Islock == 1 ? YesNoEnum.Y : YesNoEnum.N, // EmptyContainer = wareLocationMdoel.EmptyContainer == 1 ? YesNoEnum.Y : YesNoEnum.N, // PlaceStatus = (PlaceStatus)Enum.Parse(typeof(PlaceStatus), wareLocationMdoel.PlaceStatus.ToString()) // }; // layerData.locationColumnNoData.Add(locationDetail); // } // else // { // layerData.locationColumnNoData.Add(null); // } // } // rownoData.locationLayerData.Add(layerData); // } // aisleData.locationRownoData.Add(rownoData); // } // locationDataList.Add(aisleData); // } // return new PalceInfoOtput() // { // countNum = places.Count, // cunhuoNum = places.Where(n => n.PlaceStatus == (int)PlaceStatus.CUNHUO && n.IsDelete == false).Count(), // emptyNum = places.Where(n => n.PlaceStatus == (int)PlaceStatus.KONGXIAN && n.IsDelete == false).Count(), // DaiRuNum = places.Where(n => n.PlaceStatus == (int)PlaceStatus.DAIRU && n.IsDelete == false).Count(), // DaichuNum = places.Where(n => n.PlaceStatus == (int)PlaceStatus.DAICHU && n.IsDelete == false).Count(), // emptyContainerNum = places.Where(p => p.EmptyContainer == (int)YesNoEnum.Y && p.PlaceStatus == (int)PlaceStatus.CUNHUO && p.IsDelete == false).Count(), // materialNum = places.Where(p => p.EmptyContainer == (int)YesNoEnum.N && p.PlaceStatus == (int)PlaceStatus.CUNHUO && p.IsDelete == false).Count(), // lockNum = places.Where(p => p.Islock == (int)YesNoEnum.Y && p.IsDelete == false).Count(), // PalceDetails = locationDataList, // }; //} /// /// 批量增加货位基础信息 /// /// [HttpPost] [ApiDescriptionSettings(Name = "BatchAdd")] public async Task BatchAdd(AddPlaceInput input) { List places = new List(); for (int aisle = 1; aisle <= 3; aisle++)//巷道 { for (int row = 1; row <= 2; row++)//排 { for (int column = 1; column <= 20; column++)//列 { for (int layer = 1; layer <= 10; layer++)//层 { WmsBasePlace place = new WmsBasePlace(); place.PlaceCode = aisle + "-" + row + "-" + column + "-" + layer; place.PlaceName = aisle + "-" + row + "-" + column + "-" + layer; place.AreaCode = ""; //place.StorageTypeNo = ((int)PlaceType.YUANLIAOKUWEI).ToString(); place.PlaceStatus = PlaceStatusEnum.正常; //place.AreaCode = GlobalArea.GGHC; place.RowNo = row; place.ColumnNo = column; place.LayerNo = layer; //place.DeepcellNo = 0; //place.GoodsShelfNo = ""; place.LaneNo = aisle; place.IsVirtually = false; //place.Line = 0; //place.Islock = (int)YesNoEnum.N; //place.EmptyContainer = (int)YesNoEnum.Y; //place.PositionnoForSrm = ""; place.AreaCode = input.AreaCode; place.AreaId = input.AreaId; place.AreaName = input.AreaName; place.Xzb = ""; place.Yzb = ""; place.Zzb = ""; place.Length = new decimal(100); place.Width = new decimal(100); place.Height = new decimal(000); //place.MaxWeight = 630; //place.HeightLevel = (int)Heightlevel.DI; //place.Priority = (int)PlacePriority.GAO; places.Add(place); } } } } await _rep.InsertRangeAsync(places); } }