payne
2024-04-25 0db27b2ea4752d71db98745b76a1805db8f57aaf
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/BaseCustomer/BaseCustomerService.cs
@@ -16,7 +16,7 @@
namespace Admin.NET.Application
{
    /// <summary>
    /// 客户档案服务
    /// 往来关系服务
    /// </summary>
    [ApiDescriptionSettings("WmsBase", Name = "BaseCustomer", Order = 100)]
    [Route("api")]
@@ -42,7 +42,7 @@
        }
        /// <summary>
        /// 分页查询客户档案
        /// 分页查询往来关系
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -51,11 +51,10 @@
        {
            var baseCustomers = await _baseCustomerRep.DetachedEntities
                                     .Where(!string.IsNullOrEmpty(input.CustCode), u => u.CustCode == input.CustCode)
                                     .Where(!string.IsNullOrEmpty(input.CustChinaName), u => EF.Functions.Like(u.CustChinaName, $"%{input.CustChinaName.Trim()}%"))
                                     .Where(!string.IsNullOrEmpty(input.CustChinaName), u => u.CustChinaName == input.CustChinaName)
                                     .Where(!string.IsNullOrEmpty(input.CustEnglishName), u => u.CustEnglishName == input.CustEnglishName)
                                     .Where(!string.IsNullOrEmpty(input.MnemonicCode), u => u.MnemonicCode == input.MnemonicCode)
                                     .Where(input.CustType != null, u => u.CustType == input.CustType)
                                     .Where(!string.IsNullOrEmpty(input.CustTypeName), u => u.CustTypeName == input.CustTypeName)
                                     .Where(!string.IsNullOrEmpty(input.LinkMan), u => u.LinkMan == input.LinkMan)
                                     .Where(!string.IsNullOrEmpty(input.Phone), u => u.Phone == input.Phone)
                                     .Where(!string.IsNullOrEmpty(input.Email), u => u.Email == input.Email)
@@ -75,10 +74,10 @@
        }
        /// <summary>
        /// 不分页查询客户档案列表
        /// 不分页查询往来关系列表
        /// </summary>
        /// <param name="input">客户档案查询参数</param>
        /// <returns>(客户档案)实例列表</returns>
        /// <param name="input">往来关系查询参数</param>
        /// <returns>(往来关系)实例列表</returns>
        [HttpGet("BaseCustomer/listNonPage")]
        public async Task<List<BaseCustomerOutput>> ListNonPageAsync([FromQuery] BaseCustomerSearchNonPage input)
        {
@@ -87,7 +86,6 @@
            var pCustEnglishName = input.CustEnglishName?.Trim() ?? "";
            var pMnemonicCode = input.MnemonicCode?.Trim() ?? "";
            var pCustType = input.CustType;
            var pCustTypeName = input.CustTypeName?.Trim() ?? "";
            var pLinkMan = input.LinkMan?.Trim() ?? "";
            var pPhone = input.Phone?.Trim() ?? "";
            var pEmail = input.Email?.Trim() ?? "";
@@ -102,11 +100,10 @@
            var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
            var baseCustomers = await _baseCustomerRep.DetachedEntities
                .Where(!string.IsNullOrEmpty(pCustCode), u => u.CustCode == pCustCode)
                .Where(!string.IsNullOrEmpty(pCustChinaName), u => EF.Functions.Like(u.CustChinaName, $"%{pCustChinaName}%"))
                .Where(!string.IsNullOrEmpty(pCustChinaName), u => u.CustChinaName == pCustChinaName)
                .Where(!string.IsNullOrEmpty(pCustEnglishName), u => u.CustEnglishName == pCustEnglishName)
                .Where(!string.IsNullOrEmpty(pMnemonicCode), u => u.MnemonicCode == pMnemonicCode)
                .Where(pCustType != null, u => u.CustType == pCustType)
                .Where(!string.IsNullOrEmpty(pCustTypeName), u => u.CustTypeName == pCustTypeName)
                .Where(!string.IsNullOrEmpty(pLinkMan), u => u.LinkMan == pLinkMan)
                .Where(!string.IsNullOrEmpty(pPhone), u => u.Phone == pPhone)
                .Where(!string.IsNullOrEmpty(pEmail), u => u.Email == pEmail)
@@ -126,7 +123,7 @@
        }
         /// <summary>
        /// 获取客户档案
        /// 获取往来关系
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -137,7 +134,7 @@
        }
        /// <summary>
        /// 获取客户档案列表
        /// 获取往来关系列表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -150,7 +147,7 @@
        #region 增、删、改
        /// <summary>
        /// 增加客户档案
        /// 增加往来关系
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -158,9 +155,11 @@
        public async Task Add(AddBaseCustomerInput input)
        {
            var baseCustomer = input.Adapt<BaseCustomer>();
                        //验证
            await CheckExisit(baseCustomer);
            baseCustomer.CustCode =  await SerialUtil.GetSerial(EnumSerialType.客户编号);
            baseCustomer.CustTypeName = baseCustomer.CustType.ToString();
            //验证
            await CheckExisit(baseCustomer);
            baseCustomer.CreatedUserId = baseCustomer.UpdatedUserId = SysHelper.GetUserId();
            baseCustomer.CreatedUserName = baseCustomer.UpdatedUserName = SysHelper.GetUserName();
            baseCustomer.CreatedTime = baseCustomer.UpdatedTime = SysHelper.GetNowTime();
@@ -168,7 +167,7 @@
        }
        /// <summary>
        /// 删除客户档案
        /// 删除往来关系
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -181,7 +180,7 @@
        }
        /// <summary>
        /// 更新客户档案
        /// 更新往来关系
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -206,7 +205,7 @@
        #region 导入
        /// <summary>
        /// Excel模板导入客户档案功能
        /// Excel模板导入往来关系功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
@@ -243,24 +242,23 @@
            {
                index++;
               //导入模版定制化代码(替换模版使用)
                //导入模版定制化代码(替换模版使用)
                         var _custCode = await SerialUtil.GetSerial(EnumSerialType.客户编号);
                           var addItem = new BaseCustomer()
                            {
                               CreatedTime = SysHelper.GetNowTime(),
                               CustCode = _custCode,//
                               CreatedUserId = SysHelper.GetUserId(),
                               CreatedUserName = SysHelper.GetUserName(),
                               UpdatedTime = SysHelper.GetNowTime(),
                               UpdatedUserId = SysHelper.GetUserId(),
                               UpdatedUserName = SysHelper.GetUserName()
                             };
                          #region 定义变量
                           var _CustCode = "";//客户编号
                           var _CustChinaName = "";//客户中文名称
                           var _CustEnglishName = "";//客户英文名称
                           var _MnemonicCode = "";//助记码
                           var _CustType = "";//类型
                           var _CustTypeName = "";//类型名称
                           var _LinkMan = "";//联系人
                           var _Phone = "";//电话
                           var _Email = "";//电子邮件
@@ -269,17 +267,14 @@
                           var _City = "";//城市
                           var _Address = "";//地址
                           var _IsDisabled = "";//是否禁用
                           var _Id = "";//Id主键
                          #endregion
                          
                          
                          #region 取值
                           _CustCode = row["客户编号"]?.ToString() ;
                           _CustChinaName = row["客户中文名称"]?.ToString() ;
                           _CustEnglishName = row["客户英文名称"]?.ToString() ;
                           _MnemonicCode = row["助记码"]?.ToString() ;
                           _CustType = row["类型"]?.ToString() ;
                           _CustTypeName = row["类型名称"]?.ToString() ;
                           _LinkMan = row["联系人"]?.ToString() ;
                           _Phone = row["电话"]?.ToString() ;
                           _Email = row["电子邮件"]?.ToString() ;
@@ -287,22 +282,11 @@
                           _Province = row["省份"]?.ToString() ;
                           _City = row["城市"]?.ToString() ;
                           _Address = row["地址"]?.ToString() ;
                           _IsDisabled = row["是否禁用"]?.ToString() ;
                           _Id = row["Id主键"]?.ToString() ;
                          #endregion
                          
                          
                          #region 验证
                          if (string.IsNullOrEmpty(_CustCode))
                          {
                            throw Oops.Oh($"第{index}行[客户编号]{_CustCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_CustCode))
                          {
                                addItem.CustCode = (string)_CustCode;
                           }
                          
                          if (string.IsNullOrEmpty(_CustChinaName))
                          {
@@ -329,23 +313,18 @@
                          
                          if(!string.IsNullOrEmpty(_CustType))
                          {
                              if (!int.TryParse(_CustType, out int outCustType)&&!string.IsNullOrEmpty(_CustType))
                          Admin.NET.Core.BaseCustomerTypeEnum  enumCustType = default(Admin.NET.Core.BaseCustomerTypeEnum);
                             if(!Enum.TryParse<Admin.NET.Core.BaseCustomerTypeEnum>(_CustType, out enumCustType)&&!string.IsNullOrEmpty(_CustType))
                              {
                                 throw Oops.Oh($"第{index}行[类型]{_CustType}值不正确!");
                              }
                              if (outCustType <= 0&&!string.IsNullOrEmpty(_CustType))
                              {
                                 throw Oops.Oh($"第{index}行[类型]{_CustType}值不能小于等于0!");
                                throw Oops.Oh($"第{index}行[类型]{_CustType}值不正确!");
                              }
                              else
                              {
                                 addItem.CustType = outCustType;
                                 addItem.CustType = enumCustType;
                                 addItem.CustTypeName = addItem.CustType.ToString();
                              }
                          
                          }
                          if(!string.IsNullOrEmpty(_CustTypeName))
                          {
                                addItem.CustTypeName = (string)_CustTypeName;
                           }
                          if(!string.IsNullOrEmpty(_LinkMan))
                          {
@@ -386,24 +365,9 @@
                               bool outIsDisabled = _IsDisabled.Equals("是") ? true : false;
                               addItem.IsDisabled = outIsDisabled;
                             }
                             }
                           }
                          
                          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
                          
@@ -417,7 +381,7 @@
        }
        /// <summary>
        /// 根据版本下载客户档案的Excel导入模板
        /// 根据版本下载往来关系的Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
@@ -425,7 +389,7 @@
        public IActionResult DownloadExcelTemplate([FromQuery] string version)
        {
            string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\BaseCustomer{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 };
        }
@@ -439,80 +403,78 @@
        /// <param name="input"></param>
        /// <param name="isEdit"></param>
        /// <returns></returns>
        private async Task CheckExisit( BaseCustomer input,bool isEdit=false)
        private async Task CheckExisit(BaseCustomer input, bool isEdit = false)
        {
           bool isExist = false;
           if (!isEdit)//新增
           {
                   //数据是否存在重复
                   isExist = await _baseCustomerRep.AnyAsync(u =>
                                   u.CustCode.Equals(input.CustCode)
                   ,false);
          }
           else//编辑
          {
                 //当前编辑数据以外是否存在重复
                  isExist = await _baseCustomerRep.AnyAsync(u =>
                                    u.Id != input.Id
                                    &&u.CustCode.Equals(input.CustCode)
                    ,false);
               }
            bool isExist = false;
            if (!isEdit)//新增
            {
                //数据是否存在重复
                isExist = await _baseCustomerRep.AnyAsync(u =>
                                u.CustChinaName.Equals(input.CustChinaName)
                , false);
            }
            else//编辑
            {
                //当前编辑数据以外是否存在重复
                isExist = await _baseCustomerRep.AnyAsync(u =>
                                  u.Id != input.Id
                                  && u.CustChinaName.Equals(input.CustChinaName)
                  , false);
            }
            if (isExist) throw Oops.Oh(ErrorCode.E0001);
       }
        }
        /// <summary>
        /// 根据联合主键验证数据是否已存在-导入时验证
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        private async Task CheckExisitForImport(List<BaseCustomer> inputs)
        {
        {
            //根据联合主键验证表格中中是否已存在相同数据  
                 if (inputs?.Count <= 0)
                 {
                     throw Oops.Oh($"导入数据不能为空");
                 }
                 //数据是否重复
                 var existExcelItem = inputs.GroupBy(g => new {
                                               g.CustCode
                                               })
                                               .Where(g => g.Count() > 1)
                                               .Select(s => new {
                                               s.Key.CustCode
                                               }).FirstOrDefault();
                 if (existExcelItem != null)
                 {
                   var baseCustomer = existExcelItem.Adapt<BaseCustomer>();
                   var item= existExcelItem.Adapt<BaseCustomer>();
                   throw Oops.Oh($"导入的表格中,客户编号[{item.CustCode}]已存在");
                 }
            if (inputs?.Count <= 0)
            {
                throw Oops.Oh($"导入数据不能为空");
            }
            //数据是否重复
            var existExcelItem = inputs.GroupBy(g => new {
                g.CustChinaName
            })
                                          .Where(g => g.Count() > 1)
                                          .Select(s => new {
                                              s.Key.CustChinaName
                                          }).FirstOrDefault();
            if (existExcelItem != null)
            {
                var item = existExcelItem.Adapt<BaseCustomer>();
                throw Oops.Oh($"导入的表格中,客户中文名称[{item.CustChinaName}]已存在");
            }
    //根据联合主键验证数据库中是否已存在相同数据
                 var existDBItem = await _baseCustomerRep.DetachedEntities.FirstOrDefaultAsync(w=>
                                                                         inputs.Select(s=>""
                                                                           +s.CustCode
                                                                        )
                                                                        .Contains(""
                                                                         +w.CustCode
                  ));
                  if (existDBItem != null)
                 {
                   var baseCustomer = existExcelItem.Adapt<BaseCustomer>();
                   var item= existExcelItem.Adapt<BaseCustomer>();
                   throw Oops.Oh($"系统中,客户编号[{item.CustCode}]已存在");
                 }
            //根据联合主键验证数据库中是否已存在相同数据
            var existDBItem = await _baseCustomerRep.DetachedEntities.FirstOrDefaultAsync(w =>
                                                                    inputs.Select(s => ""
                                                                      + s.CustChinaName
                                                                   )
                                                                   .Contains(""
                                                                    + w.CustChinaName
             ));
            if (existDBItem != null)
            {
                var item = existDBItem.Adapt<BaseCustomer>();
                throw Oops.Oh($"系统中,客户中文名称[{item.CustChinaName}]已存在");
            }
        }
        #endregion