diff --git a/ARW.Model/Dto/Api/OrderManage/OrderRefunds/AddOrderRefundApiDto.cs b/ARW.Model/Dto/Api/OrderManage/OrderRefunds/AddOrderRefundApiDto.cs new file mode 100644 index 0000000..9ae3d02 --- /dev/null +++ b/ARW.Model/Dto/Api/OrderManage/OrderRefunds/AddOrderRefundApiDto.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using ARW.Model.Models.Business.OrderManage.OrderRefunds; + +namespace ARW.Model.Dto.Api.OrderManage.OrderRefunds +{ + + /// + /// 售后单记录表对象Api + /// + /// @author lwh + /// @date 2023-10-16 + /// + public class AddOrderRefundApiDto + { + public int OrderRefundId { get; set; } + + public long OrderRefundGuid { get; set; } + + [Required(ErrorMessage = "订单guid不能为空")] + public long OrderGuid { get; set; } + + public long CustomerGuid { get; set; } + + [Required(ErrorMessage = "售后类型(1退货退款 2退货(无需退款) 3换货)不能为空")] + public int RefundType { get; set; } + + [Required(ErrorMessage = "商品收货状态(1未收到货 2已收到货)不能为空")] + public int GoodsReceiveStatus { get; set; } + + public int RefundReason { get; set; } + + [Required(ErrorMessage = "退款金额")] + public decimal RefundMoney { get; set; } + + public string CustomerRefundDesc { get; set; } + + public string CustomerRefundImg { get; set; } + + } + + +} diff --git a/ARW.Model/Dto/Api/OrderManage/OrderRefunds/OrderRefundApiDto.cs b/ARW.Model/Dto/Api/OrderManage/OrderRefunds/OrderRefundApiDto.cs new file mode 100644 index 0000000..5c3461e --- /dev/null +++ b/ARW.Model/Dto/Api/OrderManage/OrderRefunds/OrderRefundApiDto.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using ARW.Model.Models.Business.OrderManage.OrderRefunds; + +namespace ARW.Model.Dto.Api.OrderManage.OrderRefunds +{ + + /// + /// 售后单记录表查询对象Api + /// + /// @author lwh + /// @date 2023-10-16 + /// + public class OrderRefundQueryDtoApi : PagerInfo + { + public int? RefundType { get; set; } + public int? RefundReason { get; set; } + public int? GoodsReceiveStatus { get; set; } + public int? MerchantAuditStatus { get; set; } + public int? IsCustomerSend { get; set; } + public int? OrderRefundStatus { get; set; } + } + + + /// + /// 售后单记录表详情输入对象Api + /// + /// @author lwh + /// @date 2023-10-16 + /// + public class OrderRefundDtoApi + { + [Required(ErrorMessage = "OrderRefundGuid不能为空")] + public long OrderRefundGuid { get; set; } + } + +} diff --git a/ARW.Model/Dto/Business/OrderManage/OrderRefunds/OrderRefundDetailsDto.cs b/ARW.Model/Dto/Business/OrderManage/OrderRefunds/OrderRefundDetailsDto.cs new file mode 100644 index 0000000..721d551 --- /dev/null +++ b/ARW.Model/Dto/Business/OrderManage/OrderRefunds/OrderRefundDetailsDto.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using ARW.Model.Models.Business.OrderManage.OrderRefunds; + +namespace ARW.Model.Dto.Business.OrderManage.OrderRefunds +{ + /// + /// 售后单详情记录表输入对象 + /// + /// @author lwh + /// @date 2023-10-16 + /// + public class OrderRefundDetailsDto + { + public int OrderRefundId { get; set; } + public long OrderRefundGuid { get; set; } + } + +} diff --git a/ARW.Model/Dto/Business/OrderManage/OrderRefunds/OrderRefundDto.cs b/ARW.Model/Dto/Business/OrderManage/OrderRefunds/OrderRefundDto.cs index c2ded52..31b092d 100644 --- a/ARW.Model/Dto/Business/OrderManage/OrderRefunds/OrderRefundDto.cs +++ b/ARW.Model/Dto/Business/OrderManage/OrderRefunds/OrderRefundDto.cs @@ -88,6 +88,10 @@ namespace ARW.Model.Dto.Business.OrderManage.OrderRefunds public int? OrderRefundStatus { get; set; } public string ids { get; set; } + + public DateTime BeginTime { get; set; } + + public DateTime EndTime { get; set; } } diff --git a/ARW.Model/Models/Business/OrderManage/OrderRefunds/OrderRefund.cs b/ARW.Model/Models/Business/OrderManage/OrderRefunds/OrderRefund.cs index af3ee32..8ce3596 100644 --- a/ARW.Model/Models/Business/OrderManage/OrderRefunds/OrderRefund.cs +++ b/ARW.Model/Models/Business/OrderManage/OrderRefunds/OrderRefund.cs @@ -118,13 +118,21 @@ namespace ARW.Model.Models.Business.OrderManage.OrderRefunds public string MerchantRefuseDesc { get; set; } + /// + /// 描述 :退款金额 + /// 空值 : false + /// + [EpplusTableColumn(Header = "退款金额")] + [SugarColumn(ColumnName = "refund_money")] + public decimal RefundMoney { get; set; } + /// /// 描述 :实际退款金额 /// 空值 : false /// [EpplusTableColumn(Header = "实际退款金额")] - [SugarColumn(ColumnName = "refund_money")] - public decimal RefundMoney { get; set; } + [SugarColumn(ColumnName = "refund_actual_money")] + public decimal RefundActualMoney { get; set; } /// @@ -155,6 +163,23 @@ namespace ARW.Model.Models.Business.OrderManage.OrderRefunds public DateTime? CustomerSendTime { get; set; } + /// + /// 描述 :商家是否收货(1未收货 2已收货) + /// 空值 : false + /// + [EpplusTableColumn(Header = "商家是否收货(1未收货 2已收货)")] + [SugarColumn(ColumnName = "is_merchant_receive")] + public int IsMerchantReceive { get; set; } + + + /// + /// 描述 :商家收货时间 + /// 空值 : true + /// + [EpplusTableColumn(Header = "商家收货时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")] + [SugarColumn(ColumnName = "merchant_receive_time")] + public DateTime? MerchantReceiveTime { get; set; } + /// /// 描述 :客户发货物流公司guid /// 空值 : true diff --git a/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiVo.cs b/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiVo.cs new file mode 100644 index 0000000..25c6306 --- /dev/null +++ b/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiVo.cs @@ -0,0 +1,200 @@ +using Newtonsoft.Json; +using OfficeOpenXml.Attributes; +using SqlSugar; +using System; + +namespace ARW.Model.Vo.Api.OrderManage.OrderRefunds +{ + /// + /// 售后单记录表展示对象Api + /// + /// @author lwh + /// @date 2023-10-16 + /// + public class OrderRefundVoApi + { + + + /// + /// 描述 : + /// + [EpplusIgnore] + public int OrderRefundId { get; set; } + + + /// + /// 描述 : + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long OrderRefundGuid { get; set; } + + + /// + /// 描述 :订单guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusTableColumn(Header = "订单guid")] + public long OrderGuid { get; set; } + + + /// + /// 描述 :客户guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusTableColumn(Header = "客户guid")] + public long CustomerGuid { get; set; } + + + /// + /// 描述 :售后类型(1退货退款 2退货(无需退款) 3换货) + /// + [EpplusTableColumn(Header = "售后类型(1退货退款 2退货(无需退款) 3换货)")] + public int RefundType { get; set; } + + + /// + /// 描述 :客户退货原因 + /// + [EpplusTableColumn(Header = "客户退货原因")] + public int RefundReason { get; set; } + + + /// + /// 描述 :客户退款说明 + /// + [EpplusIgnore] + public string CustomerRefundDesc { get; set; } + + + /// + /// 描述 :客户退款凭证 + /// + [EpplusIgnore] + public string CustomerRefundImg { get; set; } + + + /// + /// 描述 :商品收货状态(1未收到货 2已收到货) + /// + [EpplusTableColumn(Header = "商品收货状态(1未收到货 2已收到货)")] + public int GoodsReceiveStatus { get; set; } + + + /// + /// 描述 :商家审核状态(1待审核 2已同意 3已拒绝) + /// + [EpplusTableColumn(Header = "商家审核状态(1待审核 2已同意 3已拒绝)")] + public int MerchantAuditStatus { get; set; } + + + /// + /// 描述 :商家拒绝原因(说明) + /// + [EpplusIgnore] + public string MerchantRefuseDesc { get; set; } + + + /// + /// 描述 :实际退款金额 + /// + [EpplusTableColumn(Header = "实际退款金额")] + public decimal RefundMoney { get; set; } + + + /// + /// 描述 :商家退货地址guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long? ShopRefundAddressGuid { get; set; } + + + /// + /// 描述 :用户是否发货(1未发货 2已发货) + /// + [EpplusTableColumn(Header = "用户是否发货(1未发货 2已发货)")] + public int IsCustomerSend { get; set; } + + + /// + /// 描述 :客户发货时间 + /// + [EpplusIgnore] + public DateTime? CustomerSendTime { get; set; } + + + /// + /// 描述 :客户发货物流公司guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long? LogisticsCompanyGuid { get; set; } + + + /// + /// 描述 :客户发货物流单号 + /// + [EpplusIgnore] + public string ExpressNo { get; set; } + + + /// + /// 描述 :售后单状态(1进行中 2已拒绝 3已完成 4已取消) + /// + [EpplusTableColumn(Header = "售后单状态(1进行中 2已拒绝 3已完成 4已取消)")] + public int OrderRefundStatus { get; set; } + + } + + + /// + /// 售后单记录表详情展示对象Api + /// + public class OrderRefundApiDetailsVo + { + [EpplusIgnore] + public int OrderRefundId { get; set; } + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long OrderRefundGuid { get; set; } + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusTableColumn(Header = "订单guid")] + public long OrderGuid { get; set; } + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusTableColumn(Header = "客户guid")] + public long CustomerGuid { get; set; } + [EpplusTableColumn(Header = "售后类型(1退货退款 2退货(无需退款) 3换货)")] + public int RefundType { get; set; } + [EpplusTableColumn(Header = "客户退货原因")] + public int RefundReason { get; set; } + [EpplusIgnore] + public string CustomerRefundDesc { get; set; } + [EpplusIgnore] + public string CustomerRefundImg { get; set; } + [EpplusTableColumn(Header = "商品收货状态(1未收到货 2已收到货)")] + public int GoodsReceiveStatus { get; set; } + [EpplusTableColumn(Header = "商家审核状态(1待审核 2已同意 3已拒绝)")] + public int MerchantAuditStatus { get; set; } + [EpplusIgnore] + public string MerchantRefuseDesc { get; set; } + [EpplusTableColumn(Header = "实际退款金额")] + public decimal RefundMoney { get; set; } + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long? ShopRefundAddressGuid { get; set; } + [EpplusTableColumn(Header = "用户是否发货(1未发货 2已发货)")] + public int IsCustomerSend { get; set; } + [EpplusIgnore] + public DateTime? CustomerSendTime { get; set; } + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long? LogisticsCompanyGuid { get; set; } + [EpplusIgnore] + public string ExpressNo { get; set; } + [EpplusTableColumn(Header = "售后单状态(1进行中 2已拒绝 3已完成 4已取消)")] + public int OrderRefundStatus { get; set; } + + } + +} diff --git a/ARW.Model/Vo/Business/OrderManage/OrderRefunds/OrderRefundDetailVo.cs b/ARW.Model/Vo/Business/OrderManage/OrderRefunds/OrderRefundDetailVo.cs new file mode 100644 index 0000000..8c2f112 --- /dev/null +++ b/ARW.Model/Vo/Business/OrderManage/OrderRefunds/OrderRefundDetailVo.cs @@ -0,0 +1,176 @@ +using ARW.Model.Vo.Business.LogisticsManage.Deliverys; +using ARW.Model.Vo.Business.OrderManage.Orders; +using Newtonsoft.Json; +using OfficeOpenXml.Attributes; +using SqlSugar; +using System; +using System.Collections.Generic; + +namespace ARW.Model.Vo.Business.OrderManage.OrderRefunds +{ + /// + /// 售后单记录表详情展示对象 + /// + /// @author lwh + /// @date 2023-10-16 + /// + public class OrderRefundDetailVo + { + + + /// + /// 描述 : + /// + [EpplusIgnore] + public int OrderRefundId { get; set; } + + + /// + /// 描述 : + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long OrderRefundGuid { get; set; } + + /// + /// 描述 :订单guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + public long OrderGuid { get; set; } + + + /// + /// 描述 :订单号 + /// + [JsonConverter(typeof(ValueToStringConverter))] + public string OrderNumber { get; set; } + + + /// + /// 商品信息 + /// + public List GoodsInfoList { get; set; } + + + /// + /// 客户手机号 + /// + public string CustomerPhone { get; set; } + + + /// + /// 描述 :售后类型(1退货退款 2退货(无需退款) 3换货) + /// + [EpplusTableColumn(Header = "售后类型(1退货退款 2退货(无需退款) 3换货)")] + public int RefundType { get; set; } + + + /// + /// 描述 :客户退货原因 + /// + [EpplusTableColumn(Header = "客户退货原因")] + public int RefundReason { get; set; } + + + /// + /// 描述 :客户退款说明 + /// + [EpplusIgnore] + public string CustomerRefundDesc { get; set; } + + + /// + /// 描述 :客户退款凭证 + /// + [EpplusIgnore] + public string CustomerRefundImg { get; set; } + + + /// + /// 描述 :商品收货状态(1未收到货 2已收到货) + /// + [EpplusTableColumn(Header = "商品收货状态(1未收到货 2已收到货)")] + public int GoodsReceiveStatus { get; set; } + + + public int IsMerchantReceive { get; set; } + + /// + /// 描述 :商家审核状态(1待审核 2已同意 3已拒绝) + /// + [EpplusTableColumn(Header = "商家审核状态(1待审核 2已同意 3已拒绝)")] + public int MerchantAuditStatus { get; set; } + + + /// + /// 描述 :商家拒绝原因(说明) + /// + [EpplusIgnore] + public string MerchantRefuseDesc { get; set; } + + + /// + /// 描述 :实际退款金额 + /// + [EpplusTableColumn(Header = "实际退款金额")] + public decimal RefundMoney { get; set; } + + + /// + /// 描述 :商家退货地址guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long? ShopRefundAddressGuid { get; set; } + + + /// + /// 描述 :用户是否发货(1未发货 2已发货) + /// + [EpplusTableColumn(Header = "用户是否发货(1未发货 2已发货)")] + public int IsCustomerSend { get; set; } + + + /// + /// 描述 :客户发货时间 + /// + [EpplusIgnore] + public DateTime? CustomerSendTime { get; set; } + + + /// + /// 描述 :客户发货物流公司guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long? LogisticsCompanyGuid { get; set; } + + + /// + /// 描述 :客户发货物流单号 + /// + [EpplusIgnore] + public string ExpressNo { get; set; } + + + /// + /// 描述 :售后单状态(1进行中 2已拒绝 3已完成 4已取消) + /// + [EpplusTableColumn(Header = "售后单状态(1进行中 2已拒绝 3已完成 4已取消)")] + public int OrderRefundStatus { get; set; } + + + public string CreateTime { get; set; } + + + /// + /// 描述 :物流公司 + /// + public string LogisticsCompany { get; set; } + + /// + /// 收货信息 + /// + public OrderReceiveVo OrderReceive { get; set; } + } +} diff --git a/ARW.Model/Vo/Business/OrderManage/OrderRefunds/OrderRefundVo.cs b/ARW.Model/Vo/Business/OrderManage/OrderRefunds/OrderRefundVo.cs index f8c2aed..17f2419 100644 --- a/ARW.Model/Vo/Business/OrderManage/OrderRefunds/OrderRefundVo.cs +++ b/ARW.Model/Vo/Business/OrderManage/OrderRefunds/OrderRefundVo.cs @@ -1,7 +1,9 @@ +using ARW.Model.Vo.Business.OrderManage.Orders; using Newtonsoft.Json; using OfficeOpenXml.Attributes; using SqlSugar; using System; +using System.Collections.Generic; namespace ARW.Model.Vo.Business.OrderManage.OrderRefunds { @@ -38,6 +40,20 @@ namespace ARW.Model.Vo.Business.OrderManage.OrderRefunds public long OrderGuid { get; set; } + /// + /// 描述 :订单号 + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusTableColumn(Header = "订单号")] + public string OrderNumber { get; set; } + + + /// + /// 商品信息 + /// + public List GoodsInfoList { get; set; } + + /// /// 描述 :客户guid /// @@ -45,6 +61,21 @@ namespace ARW.Model.Vo.Business.OrderManage.OrderRefunds [EpplusTableColumn(Header = "客户guid")] public long CustomerGuid { get; set; } + /// + /// 客户名称 + /// + public string CustomerNickName { get; set; } + + /// + /// 客户手机号 + /// + public string CustomerMobilePhoneNumber { get; set; } + + /// + /// 客户头像 + /// + public string CustomerAvatar { get; set; } + /// /// 描述 :售后类型(1退货退款 2退货(无需退款) 3换货) @@ -81,6 +112,9 @@ namespace ARW.Model.Vo.Business.OrderManage.OrderRefunds public int GoodsReceiveStatus { get; set; } + public int IsMerchantReceive { get; set; } + + /// /// 描述 :商家审核状态(1待审核 2已同意 3已拒绝) /// @@ -145,5 +179,8 @@ namespace ARW.Model.Vo.Business.OrderManage.OrderRefunds [EpplusTableColumn(Header = "售后单状态(1进行中 2已拒绝 3已完成 4已取消)")] public int OrderRefundStatus { get; set; } + + public string CreateTime { get; set; } + } } diff --git a/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs b/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs new file mode 100644 index 0000000..7f851b6 --- /dev/null +++ b/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs @@ -0,0 +1,144 @@ +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Http; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Repository; +using ARW.Repository.Business.OrderManage.OrderRefunds; +using ARW.Service.Api.IBusinessService.OrderManage.OrderRefunds; +using ARW.Model.Dto.Api.OrderManage.OrderRefunds; +using ARW.Model.Models.Business.OrderManage.OrderRefunds; +using ARW.Model.Vo.Api.OrderManage.OrderRefunds; + +namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds +{ + /// + /// 售后单记录表接口实现类Api + /// + /// @author lwh + /// @date 2023-10-16 + /// + [AppService(ServiceType = typeof(IOrderRefundServiceApi), ServiceLifetime = LifeTime.Transient)] + public class OrderRefundServiceImplApi : BaseService, IOrderRefundServiceApi + { + private readonly OrderRefundRepository _OrderRefundRepository; + + public OrderRefundServiceImplApi(OrderRefundRepository OrderRefundRepository) + { + this._OrderRefundRepository = OrderRefundRepository; + } + + #region Api接口代码 + + + /// + /// 查询售后单记录表列表(Api) + /// + /// + /// + public async Task> GetOrderRefundListApi(OrderRefundQueryDtoApi parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(parm.RefundType != null, s => s.RefundType == parm.RefundType); + predicate = predicate.AndIF(parm.RefundReason != null, s => s.RefundReason == parm.RefundReason); + predicate = predicate.AndIF(parm.GoodsReceiveStatus != null, s => s.GoodsReceiveStatus == parm.GoodsReceiveStatus); + predicate = predicate.AndIF(parm.MerchantAuditStatus != null, s => s.MerchantAuditStatus == parm.MerchantAuditStatus); + predicate = predicate.AndIF(parm.IsCustomerSend != null, s => s.IsCustomerSend == parm.IsCustomerSend); + predicate = predicate.AndIF(parm.OrderRefundStatus != null, s => s.OrderRefundStatus == parm.OrderRefundStatus); + var query = _OrderRefundRepository + .Queryable() + .Where(predicate.ToExpression()) + .OrderBy(s => s.Create_time, OrderByType.Desc) + .Select(s => new OrderRefundVoApi + { + OrderRefundId = s.OrderRefundId, + OrderRefundGuid = s.OrderRefundGuid, + OrderGuid = s.OrderGuid, + CustomerGuid = s.CustomerGuid, + RefundType = s.RefundType, + RefundReason = s.RefundReason, + CustomerRefundDesc = s.CustomerRefundDesc, + CustomerRefundImg = s.CustomerRefundImg, + GoodsReceiveStatus = s.GoodsReceiveStatus, + MerchantAuditStatus = s.MerchantAuditStatus, + MerchantRefuseDesc = s.MerchantRefuseDesc, + RefundMoney = s.RefundMoney, + ShopRefundAddressGuid = s.ShopRefundAddressGuid, + IsCustomerSend = s.IsCustomerSend, + CustomerSendTime = s.CustomerSendTime, + LogisticsCompanyGuid = s.LogisticsCompanyGuid, + ExpressNo = s.ExpressNo, + OrderRefundStatus = s.OrderRefundStatus, + }); + + + return await query.ToPageAsync(parm); + } + + + + /// + /// 添加售后单记录表 + /// + public async Task AddOrderRefund(OrderRefund model) + { + model.GoodsReceiveStatus = 1; + model.MerchantAuditStatus = 1; + model.IsCustomerSend = 1; + model.OrderRefundStatus = 1; + model.IsMerchantReceive = 1; + + var response = await _OrderRefundRepository.InsertReturnSnowflakeIdAsync(model); + return "添加成功!"; + } + + + + /// + /// 查询售后单记录表详情(Api) + /// + /// + /// + public async Task GetOrderRefundDetails(OrderRefundDtoApi parm) + { + + var query = _OrderRefundRepository + .Queryable() + .Where(s => s.OrderRefundGuid == parm.OrderRefundGuid) + .Select(s => new OrderRefundApiDetailsVo + { + OrderRefundId = s.OrderRefundId, + OrderRefundGuid = s.OrderRefundGuid, + OrderGuid = s.OrderGuid, + CustomerGuid = s.CustomerGuid, + RefundType = s.RefundType, + RefundReason = s.RefundReason, + CustomerRefundDesc = s.CustomerRefundDesc, + CustomerRefundImg = s.CustomerRefundImg, + GoodsReceiveStatus = s.GoodsReceiveStatus, + MerchantAuditStatus = s.MerchantAuditStatus, + MerchantRefuseDesc = s.MerchantRefuseDesc, + RefundMoney = s.RefundMoney, + ShopRefundAddressGuid = s.ShopRefundAddressGuid, + IsCustomerSend = s.IsCustomerSend, + CustomerSendTime = s.CustomerSendTime, + LogisticsCompanyGuid = s.LogisticsCompanyGuid, + ExpressNo = s.ExpressNo, + OrderRefundStatus = s.OrderRefundStatus, + }).Take(1); + + + return await query.ToJsonAsync(); + } + + + #endregion + + } +} diff --git a/ARW.Service/Api/IBusinessService/OrderManage/OrderRefunds/IOrderRefundServiceApi.cs b/ARW.Service/Api/IBusinessService/OrderManage/OrderRefunds/IOrderRefundServiceApi.cs new file mode 100644 index 0000000..63ce7b4 --- /dev/null +++ b/ARW.Service/Api/IBusinessService/OrderManage/OrderRefunds/IOrderRefundServiceApi.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Api.OrderManage.OrderRefunds; +using ARW.Model.Models.Business.OrderManage.OrderRefunds; +using ARW.Model.Vo.Api.OrderManage.OrderRefunds; + +namespace ARW.Service.Api.IBusinessService.OrderManage.OrderRefunds +{ + /// + /// 售后单记录表接口类Api + /// + /// @author lwh + /// @date 2023-10-16 + /// + public interface IOrderRefundServiceApi : IBaseService + { + /// + /// 获取售后单记录表分页列表(Api) + /// + /// + /// + Task> GetOrderRefundListApi(OrderRefundQueryDtoApi parm); + + + /// + /// 添加售后单记录表 + /// + /// + /// + Task AddOrderRefund(OrderRefund parm); + + + /// + /// 获取售后单记录表详情(Api) + /// + /// + /// + Task GetOrderRefundDetails(OrderRefundDtoApi parm); + + } +} diff --git a/ARW.Service/Business/BusinessService/OrderManage/OrderRefunds/OrderRefundService.cs b/ARW.Service/Business/BusinessService/OrderManage/OrderRefunds/OrderRefundService.cs index 0c16d93..fc275d3 100644 --- a/ARW.Service/Business/BusinessService/OrderManage/OrderRefunds/OrderRefundService.cs +++ b/ARW.Service/Business/BusinessService/OrderManage/OrderRefunds/OrderRefundService.cs @@ -14,6 +14,20 @@ using ARW.Service.Business.IBusinessService.OrderManage.OrderRefunds; using ARW.Model.Dto.Business.OrderManage.OrderRefunds; using ARW.Model.Models.Business.OrderManage.OrderRefunds; using ARW.Model.Vo.Business.OrderManage.OrderRefunds; +using ARW.Model.Models.Business.Custom.Customers; +using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus; +using ARW.Service.Business.IBusinessService.OrderManage.Orders; +using ARW.Model.Models.Business.OrderManage.Orders; +using ARW.Model.Dto.Api.OrderManage.OrderRefunds; +using ARW.Model.Vo.Api.OrderManage.OrderRefunds; +using ARW.Common; +using ARW.Model.Vo.Business.OrderManage.Orders; +using Senparc.CO2NET.Extensions; +using ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys; +using ARW.Model.Models.Business.ShopManager.ShopAddresss; +using ARW.Repository.Business.ShopManager.ShopAddresss; +using ARW.Service.Business.IBusinessService.Custom.Regions; +using ARW.Repository.Business.LogisticsManage.LogisticsCompanys; namespace ARW.Service.Business.BusinessService.OrderManage.OrderRefunds { @@ -27,19 +41,27 @@ namespace ARW.Service.Business.BusinessService.OrderManage.OrderRefunds public class OrderRefundServiceImpl : BaseService, IOrderRefundService { private readonly OrderRefundRepository _OrderRefundRepository; + private readonly ShopAddressRepository _ShopAddressRepository; + private readonly LogisticsCompanyRepository _LogisticsCompanyRepository; + private readonly IOrderService _OrderService; + private readonly IRegionService _RegionService; - public OrderRefundServiceImpl(OrderRefundRepository OrderRefundRepository) + + public OrderRefundServiceImpl(OrderRefundRepository OrderRefundRepository, IOrderService orderService, ShopAddressRepository shopAddressRepository, IRegionService regionService) { this._OrderRefundRepository = OrderRefundRepository; + _OrderService = orderService; + _ShopAddressRepository = shopAddressRepository; + _RegionService = regionService; } - #region 业务逻辑代码 - - - /// + #region 业务逻辑代码 + + + /// /// 查询售后单记录表分页列表 /// - public async Task> GetOrderRefundList(OrderRefundQueryDto parm) + public async Task> GetOrderRefundList(OrderRefundQueryDto parm) { //开始拼装查询条件d var predicate = Expressionable.Create(); @@ -50,37 +72,117 @@ namespace ARW.Service.Business.BusinessService.OrderManage.OrderRefunds predicate = predicate.AndIF(parm.MerchantAuditStatus != null, s => s.MerchantAuditStatus == parm.MerchantAuditStatus); predicate = predicate.AndIF(parm.IsCustomerSend != null, s => s.IsCustomerSend == parm.IsCustomerSend); predicate = predicate.AndIF(parm.OrderRefundStatus != null, s => s.OrderRefundStatus == parm.OrderRefundStatus); + predicate = predicate.AndIF(parm.BeginTime != DateTime.MinValue, s => s.Create_time >= parm.BeginTime); + predicate = predicate.AndIF(parm.EndTime != DateTime.MinValue, s => s.Create_time <= parm.EndTime); var query = _OrderRefundRepository .Queryable() + .LeftJoin((s, c) => s.CustomerGuid == c.CustomerGuid) + .LeftJoin((s, c, d) => s.OrderGuid == d.OrderGuid) .Where(predicate.ToExpression()) - .OrderBy(s => s.Create_time,OrderByType.Desc) - .Select(s => new OrderRefundVo + .OrderBy(s => s.Create_time, OrderByType.Desc) + .Select((s, c, d) => new OrderRefundVo { - OrderRefundId = s.OrderRefundId, - OrderRefundGuid = s.OrderRefundGuid, - OrderGuid = s.OrderGuid, - CustomerGuid = s.CustomerGuid, - RefundType = s.RefundType, - RefundReason = s.RefundReason, - CustomerRefundDesc = s.CustomerRefundDesc, - CustomerRefundImg = s.CustomerRefundImg, - GoodsReceiveStatus = s.GoodsReceiveStatus, - MerchantAuditStatus = s.MerchantAuditStatus, - MerchantRefuseDesc = s.MerchantRefuseDesc, - RefundMoney = s.RefundMoney, - ShopRefundAddressGuid = s.ShopRefundAddressGuid, - IsCustomerSend = s.IsCustomerSend, - CustomerSendTime = s.CustomerSendTime, - LogisticsCompanyGuid = s.LogisticsCompanyGuid, - ExpressNo = s.ExpressNo, - OrderRefundStatus = s.OrderRefundStatus, - }); - + OrderRefundId = s.OrderRefundId, + OrderRefundGuid = s.OrderRefundGuid, + OrderGuid = s.OrderGuid, + OrderNumber = d.OrderNumber, + CustomerGuid = s.CustomerGuid, + CustomerNickName = c.CustomerNickname, + CustomerMobilePhoneNumber = c.CustomerMobilePhoneNumber, + CustomerAvatar = c.CustomerAvatar, + RefundType = s.RefundType, + RefundReason = s.RefundReason, + CustomerRefundDesc = s.CustomerRefundDesc, + CustomerRefundImg = s.CustomerRefundImg, + GoodsReceiveStatus = s.GoodsReceiveStatus, + MerchantAuditStatus = s.MerchantAuditStatus, + MerchantRefuseDesc = s.MerchantRefuseDesc, + RefundMoney = s.RefundMoney, + ShopRefundAddressGuid = s.ShopRefundAddressGuid, + IsCustomerSend = s.IsCustomerSend, + CustomerSendTime = s.CustomerSendTime, + LogisticsCompanyGuid = s.LogisticsCompanyGuid, + ExpressNo = s.ExpressNo, + OrderRefundStatus = s.OrderRefundStatus, + IsMerchantReceive = s.IsMerchantReceive, + CreateTime = s.Create_time.ToString("yyyy:HH:dd mm:ss") + }); - return await query.ToPageAsync(parm); + + var list = await query.ToPageAsync(parm); + + foreach (var item in list.Result) + { + // 获取订单商品信息 + item.GoodsInfoList = await _OrderService.GetOrderGoodsList(item.OrderGuid); + + } + + return list; } - /// + + + /// + /// 查询售后单记录表详情 + /// + /// + /// + public async Task GetOrderRefundDetails(OrderRefundDetailsDto parm) + { + + var query = _OrderRefundRepository + .Queryable() + .LeftJoin((s, c) => s.CustomerGuid == c.CustomerGuid) + .LeftJoin((s, c, d) => s.OrderGuid == d.OrderGuid) + .Where(s => s.OrderRefundId == parm.OrderRefundId) + .Select((s, c, d) => new OrderRefundDetailVo + { + OrderRefundId = s.OrderRefundId, + OrderRefundGuid = s.OrderRefundGuid, + OrderGuid = s.OrderGuid, + OrderNumber = d.OrderNumber, + CustomerPhone = c.CustomerMobilePhoneNumber, + RefundType = s.RefundType, + RefundReason = s.RefundReason, + CustomerRefundDesc = s.CustomerRefundDesc, + CustomerRefundImg = s.CustomerRefundImg, + GoodsReceiveStatus = s.GoodsReceiveStatus, + MerchantAuditStatus = s.MerchantAuditStatus, + MerchantRefuseDesc = s.MerchantRefuseDesc, + RefundMoney = s.RefundMoney, + ShopRefundAddressGuid = s.ShopRefundAddressGuid, + IsCustomerSend = s.IsCustomerSend, + CustomerSendTime = s.CustomerSendTime, + LogisticsCompanyGuid = s.LogisticsCompanyGuid, + ExpressNo = s.ExpressNo, + OrderRefundStatus = s.OrderRefundStatus, + IsMerchantReceive = s.IsMerchantReceive, + CreateTime = s.Create_time.ToString("yyyy:HH:dd mm:ss") + }).Take(1); + + + var json = await query.ToJsonAsync(); + if (json != "[]") + { + var data = Tools.JsonToVo(json); + data.GoodsInfoList = await _OrderService.GetOrderGoodsList(data.OrderGuid); + data.OrderReceive = await GetOrderReceive(data.ShopRefundAddressGuid); + if(data.LogisticsCompanyGuid != null) + { + var company = await _LogisticsCompanyRepository.GetFirstAsync(s => s.LogisticsCompanyGuid == data.LogisticsCompanyGuid); + data.LogisticsCompany = company.LogisticsCompanyName; + } + + json = data.ToJson(); + } + + return json; + } + + + + /// /// 添加或修改售后单记录表 /// public async Task AddOrUpdateOrderRefund(OrderRefund model) @@ -100,7 +202,7 @@ namespace ARW.Service.Business.BusinessService.OrderManage.OrderRefunds #region Excel处理 - + /// /// Excel数据导出处理 /// @@ -110,10 +212,33 @@ namespace ARW.Service.Business.BusinessService.OrderManage.OrderRefunds } #endregion - -#endregion + + /// + /// 获取商家收货地址 + /// + /// 商家退货地址guid + /// + public async Task GetOrderReceive(long? shopAddressGuid) + { + var orderReceive = new OrderReceiveVo(); + var shopAddress = await _ShopAddressRepository.GetFirstAsync(s => s.ShopAddressGuid == shopAddressGuid); + + if (shopAddress != null) + { + orderReceive.ConsigneeName = shopAddress.ShopAddressContactName; + orderReceive.Phone = shopAddress.ShopAddressContactNumber; + orderReceive.Detail = shopAddress.ShopAddressDetailedAddress; + + // 获取地区名称 + orderReceive.Region = await _RegionService.GetRegionFullName(shopAddress.ProvinceId, shopAddress.CityId, shopAddress.DistrictId); + } + + return orderReceive; + } + + #endregion } } diff --git a/ARW.Service/Business/IBusinessService/OrderManage/OrderRefunds/IOrderRefundService.cs b/ARW.Service/Business/IBusinessService/OrderManage/OrderRefunds/IOrderRefundService.cs index 4a48097..812602c 100644 --- a/ARW.Service/Business/IBusinessService/OrderManage/OrderRefunds/IOrderRefundService.cs +++ b/ARW.Service/Business/IBusinessService/OrderManage/OrderRefunds/IOrderRefundService.cs @@ -25,8 +25,16 @@ namespace ARW.Service.Business.IBusinessService.OrderManage.OrderRefunds /// Task> GetOrderRefundList(OrderRefundQueryDto parm); - - /// + + /// + /// 获取售后单详情 + /// + /// + /// + Task GetOrderRefundDetails(OrderRefundDetailsDto parm); + + + /// /// 添加或修改售后单记录表 /// /// diff --git a/ARW.Service/Business/IBusinessService/OrderManage/Orders/IOrderService.cs b/ARW.Service/Business/IBusinessService/OrderManage/Orders/IOrderService.cs index b498322..ebb05a1 100644 --- a/ARW.Service/Business/IBusinessService/OrderManage/Orders/IOrderService.cs +++ b/ARW.Service/Business/IBusinessService/OrderManage/Orders/IOrderService.cs @@ -73,5 +73,14 @@ namespace ARW.Service.Business.IBusinessService.OrderManage.Orders Task> HandleExportData(List data); + /// + /// 获取商品订单列表 + /// + /// + /// + Task> GetOrderGoodsList(long orderGuid); + + + } } diff --git a/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs b/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs new file mode 100644 index 0000000..e0ba55c --- /dev/null +++ b/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs @@ -0,0 +1,103 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Admin.WebApi.Controllers; +using ARW.Model.Dto.Api.OrderManage.OrderRefunds; +using ARW.Service.Api.IBusinessService.OrderManage.OrderRefunds; +using ARW.Model.Models.Business.OrderManage.OrderRefunds; +using ARW.Model.Vo.Api.OrderManage.OrderRefunds; +using Microsoft.AspNetCore.Authorization; +using Geocoding; +using ARW.Model.Dto.Business.OrderManage.OrderRefunds; +using ARW.Service.Business.IBusinessService.OrderManage.OrderRefunds; +using ARW.Admin.WebApi.Framework; + +namespace ARW.WebApi.Controllers.Api.OrderManage.OrderRefunds +{ + /// + /// 售后单记录表控制器Api + /// + /// @author lwh + /// @date 2023-10-16 + /// + [Verify] + [Route("api/[controller]")] + public class OrderRefundApiController : BaseController + { + private readonly IOrderRefundServiceApi _OrderRefundServiceApi; + + /// + /// 依赖注入 + /// + /// 售后单记录表售后单记录表Api服务 + public OrderRefundApiController(IOrderRefundServiceApi OrderRefundServiceApi) + { + _OrderRefundServiceApi = OrderRefundServiceApi; + } + + + /// + /// 获取售后单记录表列表(Api) + /// + /// 查询参数 + /// + [HttpGet("getOrderRefundList")] + public async Task GetOrderRefundListApi([FromQuery] OrderRefundQueryDtoApi parm) + { + var res = await _OrderRefundServiceApi.GetOrderRefundListApi(parm); + return SUCCESS(res); + } + + /// + /// 添加售后单记录表 + /// + /// + /// + [HttpPost("addOrderRefund")] + [Log(Title = "添加售后单记录表", BusinessType = BusinessType.ADDORUPDATE)] + public async Task AddOrderRefund([FromBody] AddOrderRefundApiDto parm) + { + if (parm == null) { throw new CustomException("请求参数错误"); } + var user = JwtUtil.GetLoginUser(App.HttpContext); + parm.CustomerGuid = user.UserId; + + var modal = parm.Adapt().ToCreate(HttpContext); + var res = await _OrderRefundServiceApi.AddOrderRefund(modal); + return SUCCESS(res); + } + + + /// + /// 获取OrderRefund详情(Api) + /// + /// 查询参数 + /// + [HttpGet("getOrderRefundDetails")] + public async Task GetOrderRefundDetails([FromQuery] OrderRefundDtoApi parm) + { + //if (parm == null) throw new CustomException("参数错误!"); + + var res = await _OrderRefundServiceApi.GetOrderRefundDetails(parm); + + if (res != "[]") + { + res = res.Remove(0, 1); + res = res.Substring(0, res.Length - 1); + var data = res.FromJSON(); + return SUCCESS(data); + } + else + { + return SUCCESS(res); + } + } + + } +} diff --git a/ARW.WebApi/Controllers/Business/OrderManage/OrderRefunds/OrderRefundController.cs b/ARW.WebApi/Controllers/Business/OrderManage/OrderRefunds/OrderRefundController.cs index 8d4034b..5eda8f5 100644 --- a/ARW.WebApi/Controllers/Business/OrderManage/OrderRefunds/OrderRefundController.cs +++ b/ARW.WebApi/Controllers/Business/OrderManage/OrderRefunds/OrderRefundController.cs @@ -15,7 +15,8 @@ using ARW.Model.Models.Business.OrderManage.OrderRefunds; using ARW.Model.Vo.Business.OrderManage.OrderRefunds; using Microsoft.AspNetCore.Authorization; using ARW.Admin.WebApi.Framework; - +using ARW.Service.Business.IBusinessService.OrderManage.Orders; +using Geocoding; namespace ARW.WebApi.Controllers.Business.OrderManage.OrderRefunds { @@ -54,6 +55,32 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.OrderRefunds return SUCCESS(res); } + + /// + /// 获取售后单详情 + /// + /// 查询参数 + /// + [HttpGet("getOrderRefundDetails")] + public async Task GetOrderDetails([FromQuery] OrderRefundDetailsDto parm) + { + if (parm == null) throw new CustomException("参数错误!"); + + var res = await _OrderRefundService.GetOrderRefundDetails(parm); + + if (res != "[]") + { + var data = res.FromJSON(); + return SUCCESS(data); + } + else + { + return SUCCESS(res); + } + } + + + /// /// 添加或修改售后单记录表 /// @@ -66,7 +93,7 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.OrderRefunds { if (parm == null) { throw new CustomException("请求参数错误"); } - var modal = new OrderRefund(); + var modal = new OrderRefund(); if (parm.OrderRefundId != 0) modal = parm.Adapt().ToUpdate(HttpContext); else modal = parm.Adapt().ToCreate(HttpContext); @@ -88,16 +115,16 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.OrderRefunds var response = _OrderRefundService.Delete(idsArr); return SUCCESS("删除成功!"); } - - - /// + + + /// /// 导出售后单记录表 /// /// [Log(Title = "售后单记录表导出", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] [HttpGet("exportOrderRefund")] [ActionPermissionFilter(Permission = "business:orderrefund:export")] - public async Task ExportExcel([FromQuery] OrderRefundQueryDto parm) + public async Task ExportExcel([FromQuery] OrderRefundQueryDto parm) { parm.PageSize = 10000; var list = await _OrderRefundService.GetOrderRefundList(parm); @@ -116,7 +143,7 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.OrderRefunds data = selectDataList; } - + // 导出数据处理 var handleData = await _OrderRefundService.HandleExportData(data);