From bb5b4d0b8ab512f33d2f1d25a0f9f05c45d1235f Mon Sep 17 00:00:00 2001
From: lwh <2679599887@qq.com>
Date: Fri, 9 Jun 2023 18:31:23 +0800
Subject: [PATCH] =?UTF-8?q?fixed=20=E5=AE=8C=E5=96=84=E6=94=B6=E8=B4=A7?=
=?UTF-8?q?=E5=9C=B0=E5=9D=80=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../CustomerAddressApiDto.cs | 46 ++++++++--
.../Dto/Api/Custom/Regions/RegionApiDto.cs | 1 -
.../CustomerAddresses/CustomerAddressApiVo.cs | 84 +++++++++++++-----
.../CustomerAddressServiceApi.cs | 87 ++++++++++++++++---
.../ICustomerAddressServiceApi.cs | 8 ++
.../Custom/Regions/RegionService.cs | 2 +-
.../CustomerAddressApiController.cs | 38 +++++++-
7 files changed, 221 insertions(+), 45 deletions(-)
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);
+ }
+
}
}