1
payne
2024-04-25 73e52dd9e61cabc5c05da94e7f4c024078f0be31
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs
@@ -13,10 +13,12 @@
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")]
@@ -27,22 +29,27 @@
        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>
@@ -67,10 +74,10 @@
        }
        /// <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)
        {
@@ -102,7 +109,7 @@
        }
         /// <summary>
        /// 获取包装关系基础表
        /// 获取容器关系
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -113,7 +120,7 @@
        }
        /// <summary>
        /// 获取包装关系基础表列表
        /// 获取容器关系列表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -126,7 +133,7 @@
        #region 增、删、改
        /// <summary>
        /// 增加包装关系基础表
        /// 增加容器关系
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -134,7 +141,29 @@
        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();
@@ -144,7 +173,7 @@
        }
        /// <summary>
        /// 删除包装关系基础表
        /// 删除容器关系
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -157,7 +186,7 @@
        }
        /// <summary>
        /// 更新包装关系基础表
        /// 更新容器关系
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -182,7 +211,7 @@
        #region 导入
        /// <summary>
        /// Excel模板导入包装关系基础表功能
        /// Excel模板导入容器关系功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
@@ -237,7 +266,6 @@
                           var _MaterialTypeCode = "";//物料类型编号
                           var _MaterialTypeName = "";//物料类型名称
                           var _BoxQty = "";//物料容器容量
                           var _Id = "";//Id主键
                          #endregion
                          
                          
@@ -248,11 +276,16 @@
                           _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))
@@ -269,10 +302,22 @@
                              }
                          
                          }
                          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))
@@ -289,14 +334,32 @@
                              }
                          
                          }
                          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))
@@ -313,22 +376,7 @@
                              }
                          
                          }
                          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
                          
@@ -342,7 +390,7 @@
        }
        /// <summary>
        /// 根据版本下载包装关系基础表的Excel导入模板
        /// 根据版本下载容器关系的Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
@@ -350,7 +398,7 @@
        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 };
        }
@@ -366,16 +414,43 @@
        /// <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>
@@ -386,10 +461,42 @@
        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