diff --git a/ARW.Model/Dto/Api/Custom/CustomerAddresses/CustomerAddressApiDto.cs b/ARW.Model/Dto/Api/Custom/CustomerAddresses/CustomerAddressApiDto.cs index b621396..7efaa69 100644 --- a/ARW.Model/Dto/Api/Custom/CustomerAddresses/CustomerAddressApiDto.cs +++ b/ARW.Model/Dto/Api/Custom/CustomerAddresses/CustomerAddressApiDto.cs @@ -12,14 +12,14 @@ namespace ARW.Model.Dto.Api.Custom.CustomerAddresses /// @author admin /// @date 2023-06-09 /// - public class CustomerAddressQueryDtoApi : PagerInfo + public class CustomerAddressQueryDtoApi : PagerInfo { public long CustomerAddressCustomerGuid { get; set; } public string CustomerAddressName { get; set; } public string CustomerAddressPhone { get; set; } } - - + + /// /// 客户收货地址详情输入对象Api /// @@ -28,8 +28,42 @@ namespace ARW.Model.Dto.Api.Custom.CustomerAddresses /// public class CustomerAddressDtoApi { - [Required(ErrorMessage = "CustomerAddressGuid不能为空")] - public long CustomerAddressGuid { get; set; } + [Required(ErrorMessage = "CustomerAddressId不能为空")] + public long CustomerAddressId { get; set; } } - + + + + public class CustomerAddressAddDtoApi + { + + public int CustomerAddressId { get; set; } + + public long CustomerAddressGuid { get; set; } + + public long CustomerAddressCustomerGuid { get; set; } + + [Required(ErrorMessage = "省编码不能为空")] + public string ProvinceCode { get; set; } + + [Required(ErrorMessage = "市编码不能为空")] + public string CityCode { get; set; } + + [Required(ErrorMessage = "区编码不能为空")] + public string DistrictCode { get; set; } + + [Required(ErrorMessage = "收货人名称不能为空")] + public string CustomerAddressName { get; set; } + + [Required(ErrorMessage = "收货电话不能为空")] + public string CustomerAddressPhone { get; set; } + + [Required(ErrorMessage = "详细地址不能为空")] + public string CustomerAddressDetailed { get; set; } + + [Required(ErrorMessage = "是否默认地址不能为空")] + public int IsDefault { get; set; } + + } + } diff --git a/ARW.Model/Dto/Api/Custom/Regions/RegionApiDto.cs b/ARW.Model/Dto/Api/Custom/Regions/RegionApiDto.cs index 610ca86..1f2a4fe 100644 --- a/ARW.Model/Dto/Api/Custom/Regions/RegionApiDto.cs +++ b/ARW.Model/Dto/Api/Custom/Regions/RegionApiDto.cs @@ -14,7 +14,6 @@ namespace ARW.Model.Dto.Api.Custom.Regions /// public class RegionQueryDtoApi : PagerInfo { - public string RegionName { get; set; } } diff --git a/ARW.Model/Vo/Api/Custom/CustomerAddresses/CustomerAddressApiVo.cs b/ARW.Model/Vo/Api/Custom/CustomerAddresses/CustomerAddressApiVo.cs index f18f092..9590b5e 100644 --- a/ARW.Model/Vo/Api/Custom/CustomerAddresses/CustomerAddressApiVo.cs +++ b/ARW.Model/Vo/Api/Custom/CustomerAddresses/CustomerAddressApiVo.cs @@ -25,7 +25,7 @@ namespace ARW.Model.Vo.Api.Custom.CustomerAddresses /// 描述 : guid /// [JsonConverter(typeof(ValueToStringConverter))] - [EpplusIgnore] + [EpplusIgnore] public long CustomerAddressGuid { get; set; } @@ -52,34 +52,72 @@ namespace ARW.Model.Vo.Api.Custom.CustomerAddresses public bool IsDefault { get; set; } } - - - /// + + + /// /// 客户收货地址详情展示对象Api /// public class CustomerAddressApiDetailsVo { - [EpplusIgnore] public int CustomerAddressId { get; set; } - [JsonConverter(typeof(ValueToStringConverter))] - [EpplusIgnore] + + [JsonConverter(typeof(ValueToStringConverter))] public long CustomerAddressGuid { get; set; } - [JsonConverter(typeof(ValueToStringConverter))] - [EpplusTableColumn(Header = "客户guid")] - public long CustomerAddressCustomerGuid { get; set; } - [EpplusTableColumn(Header = "省id")] - public int CustomerAddressProvinceId { get; set; } - [EpplusTableColumn(Header = "市id")] - public int CustomerAddressCityId { get; set; } - [EpplusTableColumn(Header = "区id")] - public int CustomerAddressAreaId { get; set; } - [EpplusTableColumn(Header = "收货人名称")] - public string CustomerAddressName { get; set; } - [EpplusTableColumn(Header = "收货电话")] - public string CustomerAddressPhone { get; set; } - [EpplusTableColumn(Header = "详细地址")] - public string CustomerAddressDetailed { get; set; } + + /// + /// 省名称 + /// + public string ProvinceName { get; set; } + + /// + /// 省编码 + /// + public string ProvinceCode { get; set; } + + + /// + /// 市名称 + /// + public string CityName { get; set; } + + /// + /// 市编码 + /// + public string CityCode { get; set; } + + + /// + /// 区名称 + /// + public string DistrictName { get; set; } + + /// + /// 区编码 + /// + public string DistrictCode { get; set; } + + + /// + /// 收货人名称 + /// + public string Name { get; set; } + + /// + /// 收货电话 + /// + public string Phone { get; set; } + + /// + /// 详细地址 + /// + public string DetailAddress { get; set; } + + + /// + /// 是否为默认地址 + /// + public bool IsDefault { get; set; } } - + } diff --git a/ARW.Service/Api/BusinessService/Custom/CustomerAddresses/CustomerAddressServiceApi.cs b/ARW.Service/Api/BusinessService/Custom/CustomerAddresses/CustomerAddressServiceApi.cs index c9c7d34..b0d72d6 100644 --- a/ARW.Service/Api/BusinessService/Custom/CustomerAddresses/CustomerAddressServiceApi.cs +++ b/ARW.Service/Api/BusinessService/Custom/CustomerAddresses/CustomerAddressServiceApi.cs @@ -16,6 +16,7 @@ using ARW.Model.Vo.Api.Custom.CustomerAddresses; using ARW.Model.Models.Business.Custom.Regions; using ARW.Model.Models.Business.Custom.Customers; using Microsoft.AspNetCore.Server.IISIntegration; +using ARW.Repository.Business.Custom.Customers; namespace ARW.Service.Api.BusinessService.Custom.CustomerAddresses { @@ -29,10 +30,12 @@ namespace ARW.Service.Api.BusinessService.Custom.CustomerAddresses public class CustomerAddressServiceImplApi : BaseService, ICustomerAddressServiceApi { private readonly CustomerAddressRepository _CustomerAddressRepository; + private readonly CustomerRepository _CustomerRepository; - public CustomerAddressServiceImplApi(CustomerAddressRepository CustomerAddressRepository) + public CustomerAddressServiceImplApi(CustomerAddressRepository CustomerAddressRepository, CustomerRepository customerRepository) { this._CustomerAddressRepository = CustomerAddressRepository; + _CustomerRepository = customerRepository; } #region Api接口代码 @@ -81,22 +84,25 @@ namespace ARW.Service.Api.BusinessService.Custom.CustomerAddresses var query = _CustomerAddressRepository .Queryable() - .LeftJoin((s, c) => s.CustomerAddressProvinceId == c.RegionPid) - .LeftJoin((s, c, d) => s.CustomerAddressCityId == d.RegionPid) - .LeftJoin((s, c, d, f) => s.CustomerAddressAreaId == f.RegionPid) + .LeftJoin((s, c) => s.CustomerAddressProvinceId == c.RegionId) + .LeftJoin((s, c, d) => s.CustomerAddressCityId == d.RegionId) + .LeftJoin((s, c, d, f) => s.CustomerAddressAreaId == f.RegionId) .LeftJoin((s, c, d, f, g) => s.CustomerAddressCustomerGuid == g.CustomerGuid) - .Where(s => s.CustomerAddressGuid == parm.CustomerAddressGuid) - .Select(s => new CustomerAddressApiDetailsVo + .Where(s => s.CustomerAddressId == parm.CustomerAddressId) + .Select((s, c, d, f, g) => new CustomerAddressApiDetailsVo { CustomerAddressId = s.CustomerAddressId, CustomerAddressGuid = s.CustomerAddressGuid, - CustomerAddressCustomerGuid = s.CustomerAddressCustomerGuid, - CustomerAddressProvinceId = s.CustomerAddressProvinceId, - CustomerAddressCityId = s.CustomerAddressCityId, - CustomerAddressAreaId = s.CustomerAddressAreaId, - CustomerAddressName = s.CustomerAddressName, - CustomerAddressPhone = s.CustomerAddressPhone, - CustomerAddressDetailed = s.CustomerAddressDetailed, + ProvinceName = c.RegionName, + ProvinceCode = c.RegionCode, + CityName = d.RegionName, + CityCode = d.RegionCode, + DistrictName = f.RegionName, + DistrictCode = f.RegionCode, + Name = s.CustomerAddressName, + Phone = s.CustomerAddressPhone, + DetailAddress = s.CustomerAddressDetailed, + IsDefault = s.CustomerAddressGuid == g.CustomerDefaultAddressGuid }).Take(1); @@ -104,6 +110,61 @@ namespace ARW.Service.Api.BusinessService.Custom.CustomerAddresses } + + /// + /// 添加或修改客户收货地址 + /// + public async Task AddOrUpdateCustomerAddress(CustomerAddress model, int IsDefault) + { + if (model.CustomerAddressId != 0) + { + var response = await _CustomerAddressRepository.UpdateAsync(model); + await HandleDefaultAddress(model, IsDefault, model.CustomerAddressGuid); + return "修改成功!"; + } + else + { + var response = await _CustomerAddressRepository.InsertReturnSnowflakeIdAsync(model); + await HandleDefaultAddress(model, IsDefault, response); + return "添加成功!"; + } + } + + + /// + /// 默认收货地址处理 + /// + /// CustomerAddress模型 + /// 是否为默认地址 + /// 默认地址Guid + /// + public async Task HandleDefaultAddress(CustomerAddress model, int IsDefault, long defaultAddressGuid) + { + // 修改客户的默认地址guid + if (IsDefault == 1) + { + await _CustomerRepository.UpdateAsync(f => new Customer + { + CustomerDefaultAddressGuid = defaultAddressGuid + }, s => s.CustomerGuid == model.CustomerAddressCustomerGuid); + } + else if (IsDefault == 0) + { + // 找到当前客户的默认收货地址 + var customerDefaultAddress = await _CustomerRepository.GetFirstAsync(s => s.CustomerGuid == model.CustomerAddressCustomerGuid); + var customerDefaultAddressGuid = customerDefaultAddress.CustomerDefaultAddressGuid; + // 当前的收货地址guid如果与客户的默认收货地址相同 + if (customerDefaultAddressGuid != 0 && model.CustomerAddressGuid == customerDefaultAddressGuid) + { + // 重新设置为Null值 + await _CustomerRepository.UpdateAsync(f => new Customer + { + CustomerDefaultAddressGuid = null + }, s => s.CustomerGuid == model.CustomerAddressCustomerGuid); + } + } + } + #endregion } diff --git a/ARW.Service/Api/IBusinessService/Custom/CustomerAddresses/ICustomerAddressServiceApi.cs b/ARW.Service/Api/IBusinessService/Custom/CustomerAddresses/ICustomerAddressServiceApi.cs index 9a817f5..8c606af 100644 --- a/ARW.Service/Api/IBusinessService/Custom/CustomerAddresses/ICustomerAddressServiceApi.cs +++ b/ARW.Service/Api/IBusinessService/Custom/CustomerAddresses/ICustomerAddressServiceApi.cs @@ -32,5 +32,13 @@ namespace ARW.Service.Api.IBusinessService.Custom.CustomerAddresses /// Task GetCustomerAddressDetails(CustomerAddressDtoApi parm); + + /// + /// 添加或修改客户收货地址 + /// + /// + /// + Task AddOrUpdateCustomerAddress(CustomerAddress parm, int IsDefault); + } } diff --git a/ARW.Service/Business/BusinessService/Custom/Regions/RegionService.cs b/ARW.Service/Business/BusinessService/Custom/Regions/RegionService.cs index 273857f..8a0fa96 100644 --- a/ARW.Service/Business/BusinessService/Custom/Regions/RegionService.cs +++ b/ARW.Service/Business/BusinessService/Custom/Regions/RegionService.cs @@ -127,7 +127,7 @@ namespace ARW.Service.Business.BusinessService.Custom.Regions public async Task GetRegionId(string RegionCode, int level) { var region = await _RegionRepository.GetFirstAsync(s => s.RegionCode == RegionCode && s.RegionLevel == level); - if (region == null) throw new Exception("编码不正确"); + if (region == null) throw new Exception(RegionCode + "编码不正确"); return region.RegionId; } diff --git a/ARW.WebApi/Controllers/Api/Custom/CustomerAddresses/CustomerAddressApiController.cs b/ARW.WebApi/Controllers/Api/Custom/CustomerAddresses/CustomerAddressApiController.cs index 68980e4..8c44fcc 100644 --- a/ARW.WebApi/Controllers/Api/Custom/CustomerAddresses/CustomerAddressApiController.cs +++ b/ARW.WebApi/Controllers/Api/Custom/CustomerAddresses/CustomerAddressApiController.cs @@ -16,6 +16,10 @@ using ARW.Model.Vo.Api.Custom.CustomerAddresses; using Microsoft.AspNetCore.Authorization; using Geocoding; using ARW.Admin.WebApi.Framework; +using ARW.Model.Dto.Business.Custom.CustomerAddresses; +using ARW.Service.Business.IBusinessService.Custom.CustomerAddresses; +using Microsoft.AspNetCore.Server.IISIntegration; +using ARW.Service.Business.IBusinessService.Custom.Regions; namespace ARW.WebApi.Controllers.Api.Custom.CustomerAddresses { @@ -30,14 +34,17 @@ namespace ARW.WebApi.Controllers.Api.Custom.CustomerAddresses public class CustomerAddressApiController : BaseController { private readonly ICustomerAddressServiceApi _CustomerAddressServiceApi; + private readonly IRegionService _RegionService; /// /// 依赖注入 /// /// 客户收货地址客户收货地址Api服务 - public CustomerAddressApiController(ICustomerAddressServiceApi CustomerAddressServiceApi) + /// 省市区服务 + public CustomerAddressApiController(ICustomerAddressServiceApi CustomerAddressServiceApi, IRegionService regionService) { _CustomerAddressServiceApi = CustomerAddressServiceApi; + _RegionService = regionService; } @@ -80,5 +87,34 @@ namespace ARW.WebApi.Controllers.Api.Custom.CustomerAddresses } } + + /// + /// 添加或修改客户收货地址 + /// + /// + /// + [HttpPost("addOrUpdateCustomerAddress")] + [Log(Title = "添加或修改客户收货地址", BusinessType = BusinessType.ADDORUPDATE)] + public async Task AddOrUpdateCustomerAddress([FromBody] CustomerAddressAddDtoApi parm) + { + if (parm == null) { throw new CustomException("请求参数错误"); } + + var modal = new CustomerAddress(); + if (parm.CustomerAddressId != 0) modal = parm.Adapt().ToUpdate(HttpContext); + else modal = parm.Adapt().ToCreate(HttpContext); + + // 字段转换 + var user = JwtUtil.GetLoginUser(App.HttpContext); + modal.CustomerAddressCustomerGuid = user.UserId; + + modal.CustomerAddressProvinceId = await _RegionService.GetRegionId(parm.ProvinceCode,1); + modal.CustomerAddressCityId = await _RegionService.GetRegionId(parm.CityCode,2); + modal.CustomerAddressAreaId = await _RegionService.GetRegionId(parm.DistrictCode,3); + + + var res = await _CustomerAddressServiceApi.AddOrUpdateCustomerAddress(modal,parm.IsDefault); + return SUCCESS(res); + } + } }