diff --git a/ARW.Model/Models/Business/OrderManage/Orders/Order.cs b/ARW.Model/Models/Business/OrderManage/Orders/Order.cs
index a702506..cdf4de6 100644
--- a/ARW.Model/Models/Business/OrderManage/Orders/Order.cs
+++ b/ARW.Model/Models/Business/OrderManage/Orders/Order.cs
@@ -328,8 +328,13 @@ namespace ARW.Model.Models.Business.OrderManage.Orders
public int OrderSource { get; set; }
-
-
+ ///
+ /// 描述 :客户发货备注
+ /// 空值 : false
+ ///
+ [EpplusTableColumn(Header = "客户发货备注")]
+ [SugarColumn(ColumnName = "customer_waybill_remark")]
+ public string CustomerWaybillRemark { get; set; }
}
diff --git a/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiDetailsVo.cs b/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiDetailsVo.cs
new file mode 100644
index 0000000..8950470
--- /dev/null
+++ b/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiDetailsVo.cs
@@ -0,0 +1,162 @@
+using ARW.Model.Vo.Api.OrderManage.Orders;
+using Newtonsoft.Json;
+using OfficeOpenXml.Attributes;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+
+namespace ARW.Model.Vo.Api.OrderManage.OrderRefunds
+{
+ ///
+ /// 售后单记录表详情展示对象Api
+ ///
+ /// @author lwh
+ /// @date 2023-10-21
+ ///
+ public class OrderRefundApiDetailsVo
+ {
+ ///
+ /// 描述 :
+ ///
+ public int OrderRefundId { get; set; }
+
+ ///
+ /// 描述 :
+ ///
+ [JsonConverter(typeof(ValueToStringConverter))]
+ public long OrderRefundGuid { get; set; }
+
+
+ ///
+ /// 描述 :订单guid
+ ///
+ [JsonConverter(typeof(ValueToStringConverter))]
+ public long OrderGuid { get; set; }
+
+
+ ///
+ /// 订单号
+ ///
+ public string OrderNo { get; set; }
+
+
+ ///
+ /// 店铺名称
+ ///
+ public string StoreName { get; set; }
+
+
+ ///
+ /// 订单商品列表
+ ///
+ public List OrderRefundGoodList { get; set; }
+
+
+ ///
+ /// 地址
+ ///
+ public Logistics LogisticsVO { get; set; }
+
+
+ ///
+ /// 物流状态
+ ///
+ public TrajectoryVo TrajectoryVos { get; set; }
+
+
+ ///
+ /// 描述 :售后类型(1退货退款 2退货(无需退款) 3换货)
+ ///
+ public int RefundType { get; set; }
+
+
+ ///
+ /// 描述 : 申请退款金额
+ ///
+ public decimal RefundRequestAmount { get; set; }
+
+
+ ///
+ /// 描述 :商家审核状态(1待审核 2已同意 3已拒绝)
+ ///
+ public int MerchantAuditStatus { get; set; }
+
+
+ ///
+ /// 描述 :实际退款金额
+ ///
+ public decimal RefundMoney { get; set; }
+
+
+ ///
+ /// 售后订单状态描述
+ ///
+ public string EserRightsStatusDesc { get; set; }
+
+
+ ///
+ /// 状态(1待审核 2已审核 3已发货 4已完成 )
+ ///
+ public int Status { get; set; }
+
+
+
+ ///
+ /// 描述 :用户是否发货(1未发货 2已发货)
+ ///
+ public int IsCustomerSend { get; set; }
+
+
+ ///
+ /// 描述 :售后单状态(1进行中 2已拒绝 3已完成 4已取消)
+ ///
+ public int OrderRefundStatus { get; set; }
+
+
+ ///
+ /// 商家是否收货(1未收货 2已收货)
+ ///
+ public int IsMerchantReceive { get; set; }
+
+ ///
+ /// 商家退货地址guid
+ ///
+ public long? ShopAddressGuid { get; set; }
+
+
+ ///
+ /// 退款原因(字典)
+ ///
+ public int RefundReason { get; set; }
+
+
+ ///
+ /// 退款原因
+ ///
+ public string Reason { get; set; }
+
+
+ ///
+ /// 描述 :客户退款说明
+ ///
+ public string CustomerRefundDesc { get; set; }
+
+
+ ///
+ /// 描述 :客户退款凭证
+ ///
+ public string CustomerRefundImg { get; set; }
+
+
+ ///
+ /// 快递公司guid
+ ///
+ public long? LogisticsCompanyGuid { get; set; }
+
+ ///
+ /// 订单号
+ ///
+ public string ExpressNo { get; set; }
+ }
+
+}
diff --git a/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiVo.cs b/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiVo.cs
index fa4cd9b..82b5fd7 100644
--- a/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiVo.cs
+++ b/ARW.Model/Vo/Api/OrderManage/OrderRefunds/OrderRefundApiVo.cs
@@ -100,54 +100,4 @@ namespace ARW.Model.Vo.Api.OrderManage.OrderRefunds
}
-
- ///
- /// 售后单记录表详情展示对象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/Orders/OrderDetailVo.cs b/ARW.Model/Vo/Business/OrderManage/Orders/OrderDetailVo.cs
index c6b2b78..bf9768f 100644
--- a/ARW.Model/Vo/Business/OrderManage/Orders/OrderDetailVo.cs
+++ b/ARW.Model/Vo/Business/OrderManage/Orders/OrderDetailVo.cs
@@ -135,6 +135,11 @@ namespace ARW.Model.Vo.Business.OrderManage.Orders
///
public OrderReceiveVo OrderReceive { get; set; }
+
+ ///
+ /// 客户发货备注
+ ///
+ public string CustomerWaybillRemark { get; set; }
}
}
diff --git a/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs b/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs
index 4068a2e..7fe983b 100644
--- a/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs
+++ b/ARW.Service/Api/BusinessService/OrderManage/OrderRefunds/OrderRefundServiceApi.cs
@@ -25,6 +25,17 @@ using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.SpecValues;
using ARW.Repository.Business.GoodsManager.GoodsSpecs.SpecValues;
using ARW.Service.Api.IBusinessService.OrderManage.Orders;
using OfficeOpenXml;
+using Newtonsoft.Json;
+using ARW.Repository.Business.OrderManage.OrderCustomerAddreses;
+using ARW.Service.Business.IBusinessService.Custom.Regions;
+using Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson;
+using ARW.Repository.Business.ShopManager.ShopAddresss;
+using ARW.Service.Api.IBusinessService.Custom.Regions;
+using ARW.Model.Models.Business.OrderManage.Orders;
+using ARW.Service.System.IService;
+using Senparc.CO2NET.Extensions;
+using ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys;
+using ARW.Repository.Business.LogisticsManage.LogisticsCompanys;
namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds
{
@@ -41,16 +52,24 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds
private readonly OrderRepository _OrderRepository;
private readonly OrderGoodsRepository _OrderGoodsRepository;
private readonly GoodsRepository _GoodsRepository;
+ private readonly ShopAddressRepository _ShopAddressRepository;
+ private readonly LogisticsCompanyRepository _LogisticsCompanyRepository;
private readonly IOrderServiceApi _OrderServiceApi;
+ private readonly IRegionService _RegionService;
+ private readonly ISysDictDataService _SysDictDataService;
- public OrderRefundServiceImplApi(OrderRefundRepository OrderRefundRepository, OrderRepository orderRepository, OrderGoodsRepository orderGoodsRepository, GoodsRepository goodsRepository, IOrderServiceApi orderServiceApi)
+ public OrderRefundServiceImplApi(OrderRefundRepository OrderRefundRepository, OrderRepository orderRepository, OrderGoodsRepository orderGoodsRepository, GoodsRepository goodsRepository, IOrderServiceApi orderServiceApi, ShopAddressRepository shopAddressRepository, IRegionService regionService, ISysDictDataService sysDictDataService, LogisticsCompanyRepository logisticsCompanyRepository)
{
this._OrderRefundRepository = OrderRefundRepository;
_OrderRepository = orderRepository;
_OrderGoodsRepository = orderGoodsRepository;
_GoodsRepository = goodsRepository;
_OrderServiceApi = orderServiceApi;
+ _ShopAddressRepository = shopAddressRepository;
+ _RegionService = regionService;
+ _SysDictDataService = sysDictDataService;
+ _LogisticsCompanyRepository = logisticsCompanyRepository;
}
#region Api接口代码
@@ -96,28 +115,7 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds
foreach (var item in list.Result)
{
- var orderRefundGood = new List();
-
- /* 获取售后订单商品列表 */
- var orderGoodsList = await _OrderGoodsRepository.GetListAsync(s => s.OrderGuid == item.OrderGuid);
- foreach (var _item in orderGoodsList)
- {
- var good = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == _item.GoodsGuid);
- var orderGood = new OrderGoodsApiVo
- {
- GoodsGuId = good.GoodsGuid,
- Thumb = good.GoodsPicture.Split(',').First(),
- Title = good.GoodsName,
- SkuId = _item.GoodsSkuId,
- Price = _item.GoodsPrice,
- BuyQuantity = _item.GoodsTotalNum
- };
- if (_item.GoodsSkuId != 0)
- orderGood.Specifications = await _OrderServiceApi.GetGoodsSpecList(_item.GoodsSkuId);
-
- orderRefundGood.Add(orderGood);
- }
- item.OrderRefundGoodList = orderRefundGood;
+ item.OrderRefundGoodList = await GetOrderGoodsList(item.OrderGuid);
/* 处理售后订单状态描述 */
@@ -210,30 +208,110 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds
var query = _OrderRefundRepository
.Queryable()
.Where(s => s.OrderRefundGuid == parm.OrderRefundGuid)
- .Select(s => new OrderRefundApiDetailsVo
+ .LeftJoin((s, c) => s.ShopGuid == c.ShopGuid)
+ .LeftJoin((s, c, d) => s.OrderGuid == d.OrderGuid)
+ .Select((s, c, d) => new OrderRefundApiDetailsVo
{
OrderRefundId = s.OrderRefundId,
OrderRefundGuid = s.OrderRefundGuid,
+ OrderNo = d.OrderNumber,
+ StoreName = c.ShopName,
OrderGuid = s.OrderGuid,
- CustomerGuid = s.CustomerGuid,
RefundType = s.RefundType,
+ MerchantAuditStatus = s.MerchantAuditStatus,
+ RefundMoney = s.RefundMoney,
+ IsCustomerSend = s.IsCustomerSend,
+ OrderRefundStatus = s.OrderRefundStatus,
+ ShopAddressGuid = s.ShopRefundAddressGuid,
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,
+ ExpressNo = s.ExpressNo
}).Take(1);
- return await query.ToJsonAsync();
+ var json = await query.ToJsonAsync();
+
+
+ if (json != "[]")
+ {
+ json = json.Remove(0, 1);
+ json = json.Substring(0, json.Length - 1);
+ var data = JsonConvert.DeserializeObject(json);
+
+ // 获取订单商品列表
+ data.OrderRefundGoodList = await GetOrderGoodsList(data.OrderGuid);
+
+ // 处理退款原因
+ var dictList = _SysDictDataService.SelectDictDataByType("refund_reason");
+ foreach (var item in dictList)
+ {
+ if(Convert.ToInt32(item.DictValue) == data.RefundReason)
+ {
+ data.Reason = item.DictLabel;
+ }
+ }
+
+
+ // 处理快递状态
+ if(data.LogisticsCompanyGuid != null)
+ {
+ data.TrajectoryVos = new TrajectoryVo();
+ var company = await _LogisticsCompanyRepository.GetFirstAsync(s => s.LogisticsCompanyGuid == data.LogisticsCompanyGuid);
+ data.TrajectoryVos.LogisticsCompanyCode = data.ExpressNo;
+ data.TrajectoryVos.LogisticsCompanyName = company.LogisticsCompanyName;
+ }
+
+
+ /* 处理售后订单状态描述 */
+ // 待审核
+ if (data.MerchantAuditStatus == 1)
+ {
+ data.Status = 1;
+ data.EserRightsStatusDesc = "商家将尽快确认您的退款申请";
+ }
+ // 已审核
+ if (data.MerchantAuditStatus == 2)
+ {
+ data.Status = 2;
+ data.EserRightsStatusDesc = "商家已审核确认,预计1小时内发起退款";
+ }
+ // 已发货
+ if (data.IsCustomerSend == 2)
+ {
+ data.Status = 3;
+ data.EserRightsStatusDesc = "商家已退款,退回资金将原路三个工作日内返回您的账户";
+ }
+ if (data.OrderRefundStatus == 3)
+ {
+ data.Status = 4;
+ data.EserRightsStatusDesc = "退款/售后己完成";
+ }
+
+ // 商家地址
+ var shopAddress = await _ShopAddressRepository.GetFirstAsync(s => s.ShopAddressGuid == data.ShopAddressGuid);
+ if (shopAddress != null)
+ {
+ var logistics = new Logistics
+ {
+ ReceiverAddressId = shopAddress.ShopAddressGuid,
+ ReceiverName = shopAddress.ShopAddressContactName,
+ ReceiverPhone = shopAddress.ShopAddressContactNumber,
+ ReceiverProvince = await _RegionService.GetRegionName(shopAddress.ProvinceId),
+ ReceiverCity = await _RegionService.GetRegionName(shopAddress.CityId),
+ receiverCountry = await _RegionService.GetRegionName(shopAddress.DistrictId),
+ ReceiverAddress = shopAddress.ShopAddressDetailedAddress
+ };
+ data.LogisticsVO = logistics;
+ }
+
+ json = data.ToJson();
+ }
+
+
+
+ return json;
}
@@ -242,39 +320,104 @@ namespace ARW.Service.Api.BusinessService.OrderManage.OrderRefunds
///
- /// 处理售后订单状态描述
+ /// 获取售后订单商品列表
+ ///
+ ///
+ ///
+ public async Task> GetOrderGoodsList(long orderGuid)
+ {
+ var orderRefundGoodList = new List();
+ var orderGoodsList = await _OrderGoodsRepository.GetListAsync(s => s.OrderGuid == orderGuid);
+ foreach (var _item in orderGoodsList)
+ {
+ var good = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == _item.GoodsGuid);
+ var orderGood = new OrderGoodsApiVo
+ {
+ GoodsGuId = good.GoodsGuid,
+ Thumb = good.GoodsPicture.Split(',').First(),
+ Title = good.GoodsName,
+ SkuId = _item.GoodsSkuId,
+ Price = _item.GoodsPrice,
+ BuyQuantity = _item.GoodsTotalNum
+ };
+ if (_item.GoodsSkuId != 0)
+ orderGood.Specifications = await _OrderServiceApi.GetGoodsSpecList(_item.GoodsSkuId);
+
+ orderRefundGoodList.Add(orderGood);
+ }
+ return orderRefundGoodList;
+ }
+
+
+ ///
+ /// 处理物流状态
///
///
///
- //public OrderRefundVoApi GetOrderRefundStatus(OrderRefundVoApi data)
+ //public OrderRefundApiDetailsVo GetTrajectory(Order order, OrderRefundApiDetailsVo data)
//{
- // // 待审核
- // if (data.MerchantAuditStatus == 1)
+ // data.TrajectoryVos = new TrajectoryVo();
+ // var trajectoryList = new List();
+
+ // // 已下单(待发货)
+ // if (order.OrderStatus == 1)
// {
- // data.Status = 1;
- // data.EserRightsStatusDesc = "商家将尽快确认您的退款申请";
- // }
- // // 已审核
- // if (data.MerchantAuditStatus == 2)
- // {
- // data.Status = 2;
- // data.EserRightsStatusDesc = "商家已审核确认,预计1小时内发起退款";
- // }
- // // 已发货
- // if (data.IsCustomerSend == 2)
- // {
- // data.Status = 3;
- // data.EserRightsStatusDesc = "商家已退款,退回资金将原路三个工作日内返回您的账户";
- // }
- // if (data.OrderRefundStatus == 3)
- // {
- // data.Status = 4;
- // data.EserRightsStatusDesc = "退款/售后己完成";
+ // var trajectoryNodeList1 = new List { GetTrajectoryNode("订单已提交", order.Create_time) };
+ // var trajectory1 = GetTrajectory("", "", trajectoryNodeList1, 3);
+ // trajectoryList.Add(trajectory1);
+
+ // var trajectoryNodeList2 = new List { GetTrajectoryNode("订单已经支付成功,支付方式为:微信支付", order.PayTime) };
+ // var trajectory2 = GetTrajectory("已下单", "https://cdn-we-retail.ym.tencent.com/web/trajectoryIcons/ordered.svg", trajectoryNodeList2, 2);
+ // trajectoryList.Add(trajectory2);
+
+ // // 运输中(已发货,待收货)
+ // if (order.DeliveryStatus == 2 && order.ReceiptStatus == 1 && order.PayStatus == 2 && order.OrderStatus == 1)
+ // {
+ // data.TrajectoryVos.LogisticsCompanyCode = order.LogisticsTrackingNumber;
+ // data.TrajectoryVos.LogisticsCompanyName = order.LogisticsCompany;
+
+ // var trajectoryNodeList3 = new List { GetTrajectoryNode($"商家已发货,物流承运商:{order.LogisticsCompany}", order.DeliveryTime) };
+
+ // // 对接快递100接口
+ // //var company = _LogisticsCompanyRepository.GetFirst(s => s.LogisticsCompanyGuid == order.LogisticsCompanyGuid);
+ // //var trackRes = Kuaidi100.GetQueryTrack(company.LogisticsCompanyCode, order.LogisticsTrackingNumber);
+
+ // var trajectory3 = GetTrajectory("已发货", "deliver", trajectoryNodeList3, 1);
+ // trajectoryList.Add(trajectory3);
+ // }
// }
+ // //foreach (var item in trajectoryList)
+ // //{
+ // // item.Nodes = item.Nodes.OrderBy(s => s.Sort).ToList();
+ // //}
+ // trajectoryList = trajectoryList.OrderBy(s => s.Sort).ToList();
+ // data.TrajectoryVos.Trajectorys = trajectoryList;
// return data;
//}
+
+ //public Trajectory GetTrajectory(string title, string icon, List trajectoryNodeList, int sort)
+ //{
+ // var trajectory = new Trajectory();
+ // trajectory.Title = title;
+ // trajectory.Icon = icon;
+ // trajectory.Nodes = trajectoryNodeList;
+ // trajectory.Sort = sort;
+
+ // return trajectory;
+ //}
+
+
+ //public TrajectoryNode GetTrajectoryNode(string status, DateTime? time)
+ //{
+ // var trajectoryNode = new TrajectoryNode();
+ // trajectoryNode.Status = status;
+ // trajectoryNode.Timestamp = time;
+ // return trajectoryNode;
+ //}
+
+
#endregion
diff --git a/ARW.Service/Business/BusinessService/OrderManage/Orders/OrderService.cs b/ARW.Service/Business/BusinessService/OrderManage/Orders/OrderService.cs
index 6e38c97..f57ea51 100644
--- a/ARW.Service/Business/BusinessService/OrderManage/Orders/OrderService.cs
+++ b/ARW.Service/Business/BusinessService/OrderManage/Orders/OrderService.cs
@@ -169,7 +169,8 @@ namespace ARW.Service.Business.BusinessService.OrderManage.Orders
TransactionId = s.TransactionId,
IsComment = s.IsComment,
OrderSource = s.OrderSource,
- CreateTime = s.Create_time
+ CreateTime = s.Create_time,
+ CustomerWaybillRemark = s.CustomerWaybillRemark
}).Take(1);
var json = await query.ToJsonAsync();
diff --git a/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs b/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs
index 1807dbd..36d38f9 100644
--- a/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs
+++ b/ARW.WebApi/Controllers/Api/OrderManage/OrderRefunds/OrderRefundApiController.cs
@@ -79,8 +79,6 @@ namespace ARW.WebApi.Controllers.Api.OrderManage.OrderRefunds
if (res != "[]")
{
- res = res.Remove(0, 1);
- res = res.Substring(0, res.Length - 1);
var data = res.FromJSON();
return SUCCESS(data);
}