| | |
| | | using System.Web; |
| | | using System.ComponentModel; |
| | | using System.Data; |
| | | using NetTopologySuite.Algorithm; |
| | | using Pipelines.Sockets.Unofficial.Arenas; |
| | | namespace Admin.NET.Application |
| | | { |
| | | /// <summary> |
| | | /// 包装关系基础表服务 |
| | | /// 容器关系服务 |
| | | /// </summary> |
| | | [ApiDescriptionSettings("WmsBase", Name = "WmsContainerPackaging", Order = 100)] |
| | | [Route("api")] |
| | |
| | | private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; |
| | | private readonly ISysExcelTemplateService _sysExcelTemplateService; |
| | | private readonly static object _lock = new(); |
| | | |
| | | private readonly IRepository<WmsMaterialType, MasterDbContextLocator> _wmsMaterialTypeRep; |
| | | private readonly IRepository<WmsContainerType, MasterDbContextLocator> _wmsContainerTypeRep; |
| | | public WmsContainerPackagingService( |
| | | IRepository<WmsContainerPackaging,MasterDbContextLocator> wmsContainerPackagingRep |
| | | ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep |
| | | ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep |
| | | ,ISysExcelTemplateService sysExcelTemplateService |
| | | , IRepository<WmsMaterialType, MasterDbContextLocator> wmsMaterialTypeRep |
| | | , IRepository<WmsContainerType, MasterDbContextLocator> wmsContainerTypeRep |
| | | ) |
| | | { |
| | | _wmsContainerPackagingRep = wmsContainerPackagingRep; |
| | | _sysDictTypeRep = sysDictTypeRep; |
| | | _sysDictDataRep = sysDictDataRep; |
| | | _sysExcelTemplateService = sysExcelTemplateService; |
| | | _wmsMaterialTypeRep = wmsMaterialTypeRep; |
| | | _wmsContainerTypeRep = wmsContainerTypeRep; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分页查询包装关系基础表 |
| | | /// 分页查询容器关系 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 不分页查询包装关系基础表列表 |
| | | /// 不分页查询容器关系列表 |
| | | /// </summary> |
| | | /// <param name="input">包装关系基础表查询参数</param> |
| | | /// <returns>(包装关系基础表)实例列表</returns> |
| | | /// <param name="input">容器关系查询参数</param> |
| | | /// <returns>(容器关系)实例列表</returns> |
| | | [HttpGet("WmsContainerPackaging/listNonPage")] |
| | | public async Task<List<WmsContainerPackagingOutput>> ListNonPageAsync([FromQuery] WmsContainerPackagingSearchNonPage input) |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取包装关系基础表 |
| | | /// 获取容器关系 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取包装关系基础表列表 |
| | | /// 获取容器关系列表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | #region 增、删、改 |
| | | |
| | | /// <summary> |
| | | /// 增加包装关系基础表 |
| | | /// 增加容器关系 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | public async Task Add(AddWmsContainerPackagingInput input) |
| | | { |
| | | var wmsContainerPackaging = input.Adapt<WmsContainerPackaging>(); |
| | | //验证 |
| | | |
| | | var wmsMaterialType=(await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.MaterialTypeId&&u.IsDeleted==false)).Adapt<WmsMaterialTypeOutput>(); |
| | | if (wmsMaterialType == null) |
| | | { |
| | | throw Oops.Oh($"物料类型不存在"); |
| | | } |
| | | if (wmsMaterialType.IsDisabled == true) |
| | | { |
| | | throw Oops.Oh($"物料类型已禁用"); |
| | | } |
| | | var wmsContainerType=(await _wmsContainerTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.ContainerTypeId&& u.IsDeleted == false)).Adapt<WmsContainerTypeOutput>(); |
| | | if (wmsContainerType == null) |
| | | { |
| | | throw Oops.Oh($"容器类型不存在"); |
| | | } |
| | | if (wmsContainerType.IsDisabled == true) |
| | | { |
| | | throw Oops.Oh($"容器类型已禁用"); |
| | | } |
| | | wmsContainerPackaging.ContainerTypeName = wmsContainerType.TypeName; |
| | | wmsContainerPackaging.MaterialTypeName= wmsMaterialType.MaterialTypeName; |
| | | wmsContainerPackaging.MaterialTypeCode = wmsMaterialType.MaterialTypeCode; |
| | | //验证 |
| | | await CheckExisit(wmsContainerPackaging); |
| | | |
| | | wmsContainerPackaging.CreatedUserId = wmsContainerPackaging.UpdatedUserId = SysHelper.GetUserId(); |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除包装关系基础表 |
| | | /// 删除容器关系 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新包装关系基础表 |
| | | /// 更新容器关系 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | |
| | | #region 导入 |
| | | |
| | | /// <summary> |
| | | /// Excel模板导入包装关系基础表功能 |
| | | /// Excel模板导入容器关系功能 |
| | | /// </summary> |
| | | /// <param name="file">Excel模板文件</param> |
| | | /// <returns>导入的记录数</returns> |
| | |
| | | var _MaterialTypeCode = "";//物料类型编号 |
| | | var _MaterialTypeName = "";//物料类型名称 |
| | | var _BoxQty = "";//物料容器容量 |
| | | var _Id = "";//Id主键 |
| | | #endregion |
| | | |
| | | |
| | |
| | | _MaterialTypeCode = row["物料类型编号"]?.ToString() ; |
| | | _MaterialTypeName = row["物料类型名称"]?.ToString() ; |
| | | _BoxQty = row["物料容器容量"]?.ToString() ; |
| | | _Id = row["Id主键"]?.ToString() ; |
| | | #endregion |
| | | |
| | | |
| | | #region 验证 |
| | | |
| | | if (string.IsNullOrEmpty(_ContainerTypeId)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[容器类型ID]{_ContainerTypeId}不能为空!"); |
| | | } |
| | | |
| | | if(!string.IsNullOrEmpty(_ContainerTypeId)) |
| | | { |
| | | if (!long.TryParse(_ContainerTypeId, out long outContainerTypeId)&&!string.IsNullOrEmpty(_ContainerTypeId)) |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(_ContainerTypeName)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[容器类型名称]{_ContainerTypeName}不能为空!"); |
| | | } |
| | | |
| | | if(!string.IsNullOrEmpty(_ContainerTypeName)) |
| | | { |
| | | addItem.ContainerTypeName = (string)_ContainerTypeName; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(_MaterialTypeId)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[物料类型ID]{_MaterialTypeId}不能为空!"); |
| | | } |
| | | |
| | | if(!string.IsNullOrEmpty(_MaterialTypeId)) |
| | | { |
| | | if (!long.TryParse(_MaterialTypeId, out long outMaterialTypeId)&&!string.IsNullOrEmpty(_MaterialTypeId)) |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(_MaterialTypeCode)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[物料类型编号]{_MaterialTypeCode}不能为空!"); |
| | | } |
| | | |
| | | if(!string.IsNullOrEmpty(_MaterialTypeCode)) |
| | | { |
| | | addItem.MaterialTypeCode = (string)_MaterialTypeCode; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(_MaterialTypeName)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[物料类型名称]{_MaterialTypeName}不能为空!"); |
| | | } |
| | | |
| | | if(!string.IsNullOrEmpty(_MaterialTypeName)) |
| | | { |
| | | addItem.MaterialTypeName = (string)_MaterialTypeName; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(_BoxQty)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[物料容器容量]{_BoxQty}不能为空!"); |
| | | } |
| | | |
| | | if(!string.IsNullOrEmpty(_BoxQty)) |
| | | { |
| | | if (!decimal.TryParse(_BoxQty, out decimal outBoxQty)&&!string.IsNullOrEmpty(_BoxQty)) |
| | |
| | | } |
| | | |
| | | } |
| | | if(!string.IsNullOrEmpty(_Id)) |
| | | { |
| | | if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[Id主键]{_Id}值不正确!"); |
| | | } |
| | | if (outId <= 0&&!string.IsNullOrEmpty(_Id)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[Id主键]{_Id}值不能小于等于0!"); |
| | | } |
| | | else |
| | | { |
| | | addItem.Id = outId; |
| | | } |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据版本下载包装关系基础表的Excel导入模板 |
| | | /// 根据版本下载容器关系的Excel导入模板 |
| | | /// </summary> |
| | | /// <param name="version">模板版本</param> |
| | | /// <returns>下载的模板文件</returns> |
| | |
| | | public IActionResult DownloadExcelTemplate([FromQuery] string version) |
| | | { |
| | | string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsContainerPackaging{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx"; |
| | | var fileName = HttpUtility.UrlEncode($"导入模板(包装关系基础表).xlsx", Encoding.GetEncoding("UTF-8")); |
| | | var fileName = HttpUtility.UrlEncode($"导入模板(容器关系).xlsx", Encoding.GetEncoding("UTF-8")); |
| | | return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName }; |
| | | } |
| | | |
| | |
| | | /// <returns></returns> |
| | | private async Task CheckExisit( WmsContainerPackaging input,bool isEdit=false) |
| | | { |
| | | |
| | | |
| | | |
| | | |
| | | string erorMsg = string.Empty; |
| | | bool isExist = false; |
| | | if (!isEdit)//新增 |
| | | { |
| | | //数据是否存在重复 |
| | | isExist = await _wmsContainerPackagingRep.AnyAsync(u => |
| | | u.ContainerTypeId.Equals(input.ContainerTypeId) |
| | | &&u.MaterialTypeId.Equals(input.MaterialTypeId) |
| | | ,false); |
| | | if (isExist) |
| | | { |
| | | erorMsg = $"系统中,容器类型[{input.ContainerTypeName}]-物料类型[{input.MaterialTypeName}]关系已存在"; |
| | | throw Oops.Oh(erorMsg); |
| | | } |
| | | } |
| | | else//编辑 |
| | | { |
| | | |
| | | |
| | | |
| | | //当前编辑数据以外是否存在重复 |
| | | isExist = await _wmsContainerPackagingRep.AnyAsync(u => |
| | | u.Id != input.Id |
| | | &&u.ContainerTypeId.Equals(input.ContainerTypeId) |
| | | && u.MaterialTypeId.Equals(input.MaterialTypeId) |
| | | , false); |
| | | if (isExist) |
| | | { |
| | | erorMsg = $"系统中,容器类型[{input.ContainerTypeName}]-物料类型[{input.MaterialTypeName}]关系已存在"; |
| | | throw Oops.Oh(erorMsg); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | //没有配置联合主键,不需要验重 |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | private async Task CheckExisitForImport(List<WmsContainerPackaging> inputs) |
| | | { |
| | | //根据联合主键验证表格中中是否已存在相同数据 |
| | | if (inputs?.Count <= 0) |
| | | { |
| | | throw Oops.Oh($"导入数据不能为空"); |
| | | } |
| | | //数据是否重复 |
| | | var existExcelItem = inputs.GroupBy(g => new { |
| | | g.ContainerTypeId |
| | | }) |
| | | .Where(g => g.Count() > 1) |
| | | .Select(s => new { |
| | | s.Key.ContainerTypeId |
| | | }).FirstOrDefault(); |
| | | if (existExcelItem != null) |
| | | { |
| | | var wmsContainerPackaging = existExcelItem.Adapt<WmsContainerPackaging>(); |
| | | var item= existExcelItem.Adapt<WmsContainerPackaging>(); |
| | | throw Oops.Oh($"导入的表格中,容器类型ID[{item.ContainerTypeId}]已存在"); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //根据联合主键验证数据库中是否已存在相同数据 |
| | | var existDBItem = await _wmsContainerPackagingRep.DetachedEntities.FirstOrDefaultAsync(w=> |
| | | inputs.Select(s=>"" |
| | | +s.ContainerTypeId |
| | | ) |
| | | .Contains("" |
| | | +w.ContainerTypeId |
| | | )); |
| | | if (existDBItem != null) |
| | | { |
| | | var wmsContainerPackaging = existExcelItem.Adapt<WmsContainerPackaging>(); |
| | | var item= existExcelItem.Adapt<WmsContainerPackaging>(); |
| | | throw Oops.Oh($"系统中,容器类型ID[{item.ContainerTypeId}]已存在"); |
| | | } |
| | | } |
| | | |
| | | #endregion |