From bd9b94e7dba8dbc32077e8bdd256e4970edfdbc5 Mon Sep 17 00:00:00 2001 From: "AERWEN\\26795" <123456789a> Date: Sun, 15 Oct 2023 13:15:42 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=B7=BB=E5=8A=A0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=88=97=E8=A1=A8=EF=BC=8C=E7=A1=AE=E8=AE=A4=E6=94=B6=E8=B4=A7?= =?UTF-8?q?=EF=BC=8C=E5=BE=85=E6=94=AF=E4=BB=98=E5=8F=96=E6=B6=88=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=EF=BC=8C=E5=B7=B2=E6=94=AF=E4=BB=98=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Api/OrderManage/Orders/OrderApiDto.cs | 2 +- .../Vo/Api/OrderManage/Orders/OrderApiVo.cs | 185 +-------------- .../Api/OrderManage/Orders/OrderGoodsApiVo.cs | 63 +++++ .../OrderManage/Orders/OrderGoodsSpecApiVo.cs | 31 +++ .../BusinessService/Carts/CartServiceApi.cs | 4 +- .../HistorySearchs/HistorySearchServiceApi.cs | 2 +- .../OrderManage/Orders/OrderServiceApi.cs | 215 +++++++++++++++--- .../PayManage/PayServiceApi.cs | 51 ++++- .../OrderManage/Orders/IOrderServiceApi.cs | 27 ++- .../BusinessService/Carts/CartService.cs | 12 +- .../OrderManage/Orders/OrderService.cs | 51 +++-- .../OrderManage/Orders/OrderApiController.cs | 53 ++++- 12 files changed, 452 insertions(+), 244 deletions(-) create mode 100644 ARW.Model/Vo/Api/OrderManage/Orders/OrderGoodsApiVo.cs create mode 100644 ARW.Model/Vo/Api/OrderManage/Orders/OrderGoodsSpecApiVo.cs diff --git a/ARW.Model/Dto/Api/OrderManage/Orders/OrderApiDto.cs b/ARW.Model/Dto/Api/OrderManage/Orders/OrderApiDto.cs index fcd5a8f..e1d0eeb 100644 --- a/ARW.Model/Dto/Api/OrderManage/Orders/OrderApiDto.cs +++ b/ARW.Model/Dto/Api/OrderManage/Orders/OrderApiDto.cs @@ -21,7 +21,7 @@ namespace ARW.Model.Dto.Api.OrderManage.Orders public string LogisticsTrackingNumber { get; set; } public int? DeliveryStatus { get; set; } public int? ReceiptStatus { get; set; } - public int? OrderStatus { get; set; } + public int OrderStatus { get; set; } } diff --git a/ARW.Model/Vo/Api/OrderManage/Orders/OrderApiVo.cs b/ARW.Model/Vo/Api/OrderManage/Orders/OrderApiVo.cs index fe96c6a..e2ebe7c 100644 --- a/ARW.Model/Vo/Api/OrderManage/Orders/OrderApiVo.cs +++ b/ARW.Model/Vo/Api/OrderManage/Orders/OrderApiVo.cs @@ -2,6 +2,7 @@ using Newtonsoft.Json; using OfficeOpenXml.Attributes; using SqlSugar; using System; +using System.Collections.Generic; namespace ARW.Model.Vo.Api.OrderManage.Orders { @@ -18,7 +19,6 @@ namespace ARW.Model.Vo.Api.OrderManage.Orders /// /// 描述 : /// - [EpplusIgnore] public int OrderId { get; set; } @@ -26,239 +26,74 @@ namespace ARW.Model.Vo.Api.OrderManage.Orders /// 描述 : /// [JsonConverter(typeof(ValueToStringConverter))] - [EpplusIgnore] public long OrderGuid { get; set; } - /// - /// 描述 :商品guid - /// - [JsonConverter(typeof(ValueToStringConverter))] - [EpplusTableColumn(Header = "商品guid")] - public long GoodsGuid { get; set; } - - - /// - /// 描述 :订单流水guid - /// - [JsonConverter(typeof(ValueToStringConverter))] - [EpplusTableColumn(Header = "订单流水guid")] - public long PaymentGuid { get; set; } - - - /// - /// 描述 :客户guid - /// - [JsonConverter(typeof(ValueToStringConverter))] - [EpplusTableColumn(Header = "客户guid")] - public long CustomerGuid { get; set; } - - - /// - /// 描述 :店铺guid - /// - [JsonConverter(typeof(ValueToStringConverter))] - [EpplusIgnore] - public long? ShopGuid { get; set; } - - /// /// 描述 :订单号 /// - [EpplusTableColumn(Header = "订单号")] - public string OrderNumber { get; set; } + public string OrderNo { get; set; } + + + /// + /// 描述 :商品列表 + /// + public List GoodsList { get; set; } /// /// 描述 :商品总金额 /// - [EpplusTableColumn(Header = "商品总金额")] public decimal GoodsTotalAmoun { get; set; } /// /// 描述 :订单金额 /// - [EpplusTableColumn(Header = "订单金额")] public decimal OrderAmount { get; set; } - /// - /// 描述 :优惠券guid - /// - [JsonConverter(typeof(ValueToStringConverter))] - [EpplusIgnore] - public long? CouponGuid { get; set; } - - - /// - /// 描述 :优惠券抵扣金额 - /// - [EpplusIgnore] - public decimal CouponMoney { get; set; } - - - /// - /// 描述 :积分抵扣金额 - /// - [EpplusIgnore] - public decimal PointsMoney { get; set; } - - - /// - /// 描述 :积分抵扣数量 - /// - [EpplusIgnore] - public decimal PointsNum { get; set; } - - /// /// 描述 :实际付款金额(包含运费) /// - [EpplusTableColumn(Header = "实际付款金额(包含运费)")] public decimal PayPrice { get; set; } - /// - /// 描述 :后台修改的订单金额(差价) - /// - [EpplusIgnore] - public decimal UpdatePrice { get; set; } - - - /// - /// 描述 :买家留言 - /// - [EpplusIgnore] - public string OrderRemark { get; set; } - - - /// - /// 描述 :支付方式(1微信支付 2余额支付) - /// - [EpplusTableColumn(Header = "支付方式(1微信支付 2余额支付)")] - public int PayType { get; set; } - - - /// - /// 描述 :付款状态(1未付款 2已付款) - /// - [EpplusTableColumn(Header = "付款状态(1未付款 2已付款)")] - public int PayStatus { get; set; } - - - /// - /// 描述 :付款时间 - /// - [EpplusTableColumn(Header = "付款时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")] - public DateTime? PayTime { get; set; } - - - /// - /// 描述 :配送方式(1快递配送) - /// - [EpplusTableColumn(Header = "配送方式(1快递配送)")] - public int DeliveryType { get; set; } - - /// /// 描述 :运费金额 /// - [EpplusTableColumn(Header = "运费金额")] public decimal ExpressPrice { get; set; } /// - /// 描述 :物流公司guid + /// 描述 :付款状态(1未付款 2已付款) /// - [JsonConverter(typeof(ValueToStringConverter))] - [EpplusIgnore] - public long? LogisticsCompanyGuid { get; set; } - - - /// - /// 描述 :物流公司 - /// - [EpplusIgnore] - public string LogisticsCompany { get; set; } - - - /// - /// 描述 :物流单号 - /// - [EpplusIgnore] - public string LogisticsTrackingNumber { get; set; } + public int PayStatus { get; set; } /// /// 描述 :发货状态(1未发货 2已发货) /// - [EpplusTableColumn(Header = "发货状态(1未发货 2已发货)")] public int DeliveryStatus { get; set; } - /// - /// 描述 :发货时间 - /// - [EpplusIgnore] - public DateTime? DeliveryTime { get; set; } - - /// /// 描述 :收货状态(1未收货 2已收货) /// - [EpplusTableColumn(Header = "收货状态(1未收货 2已收货)")] public int ReceiptStatus { get; set; } - /// - /// 描述 :收货时间 - /// - [EpplusIgnore] - public DateTime? ReceiptTime { get; set; } - - /// /// 描述 :订单状态(1进行中 2取消 3待取消 4已完成) /// - [EpplusTableColumn(Header = "订单状态(1进行中 2取消 3待取消 4已完成)")] public int OrderStatus { get; set; } - /// - /// 描述 :赠送的积分数量 - /// - [EpplusIgnore] - public decimal PointsBonus { get; set; } - - - /// - /// 描述 :订单是否已结算(1未结算 2已结算) - /// - [EpplusTableColumn(Header = "订单是否已结算(1未结算 2已结算)")] - public int IsSettled { get; set; } - - - /// - /// 描述 :微信支付交易号 - /// - [EpplusIgnore] - public string TransactionId { get; set; } - - /// /// 描述 :是否已评价(1否 2是) /// - [EpplusTableColumn(Header = "是否已评价(1否 2是)")] public int IsComment { get; set; } - - /// - /// 描述 :订单来源(1普通订单) - /// - [EpplusTableColumn(Header = "订单来源(1普通订单)")] - public int OrderSource { get; set; } - } diff --git a/ARW.Model/Vo/Api/OrderManage/Orders/OrderGoodsApiVo.cs b/ARW.Model/Vo/Api/OrderManage/Orders/OrderGoodsApiVo.cs new file mode 100644 index 0000000..c174479 --- /dev/null +++ b/ARW.Model/Vo/Api/OrderManage/Orders/OrderGoodsApiVo.cs @@ -0,0 +1,63 @@ +using Newtonsoft.Json; +using OfficeOpenXml.Attributes; +using SqlSugar; +using System; +using System.Collections.Generic; + +namespace ARW.Model.Vo.Api.OrderManage.Orders +{ + /// + /// 订单商品展示对象Api + /// + /// @author lwh + /// @date 2023-10-14 + /// + public class OrderGoodsApiVo + { + /// + /// 描述 : 商品guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + public long GoodsGuId { get; set; } + + + /// + /// 描述 :封面 + /// + public string Thumb { get; set; } + + + /// + /// 描述 :商品名称 + /// + public string Title { get; set; } + + + /// + /// 描述 :商品skuId + /// + public int? SkuId { get; set; } + + + /// + /// 描述 : 商品规格 + /// + public List Specifications { get; set; } + + + /// + /// 商品价格 + /// + public decimal Price { get; set; } + + + /// + /// 购买数量 + /// + public int BuyQuantity { get; set; } + + } + + + +} diff --git a/ARW.Model/Vo/Api/OrderManage/Orders/OrderGoodsSpecApiVo.cs b/ARW.Model/Vo/Api/OrderManage/Orders/OrderGoodsSpecApiVo.cs new file mode 100644 index 0000000..2da0a86 --- /dev/null +++ b/ARW.Model/Vo/Api/OrderManage/Orders/OrderGoodsSpecApiVo.cs @@ -0,0 +1,31 @@ +using Newtonsoft.Json; +using OfficeOpenXml.Attributes; +using SqlSugar; +using System; + +namespace ARW.Model.Vo.Api.OrderManage.Orders +{ + /// + /// 订单商品规格展示对象Api + /// + /// @author lwh + /// @date 2023-10-14 + /// + public class OrderGoodsSpecApiVo + { + /// + /// 描述 :规格组名称 + /// + public string SpecTitle { get; set; } + + + /// + /// 描述 :规格值 + /// + public string SpecValue { get; set; } + + } + + + +} diff --git a/ARW.Service/Api/BusinessService/Carts/CartServiceApi.cs b/ARW.Service/Api/BusinessService/Carts/CartServiceApi.cs index 900686f..24521d0 100644 --- a/ARW.Service/Api/BusinessService/Carts/CartServiceApi.cs +++ b/ARW.Service/Api/BusinessService/Carts/CartServiceApi.cs @@ -334,7 +334,7 @@ namespace ARW.Service.Api.BusinessService.Carts { var response = await _CartRepository.UpdateAsync(f => new Cart { - IsSelected = parm.IsSelected + IsSelected = !f.IsSelected }, s => s.CartId == parm.CartId); return "修改成功!"; } @@ -347,7 +347,7 @@ namespace ARW.Service.Api.BusinessService.Carts { var response = await _CartRepository.UpdateAsync(f => new Cart { - IsSelected = parm.IsSelected + IsSelected = !f.IsSelected }, s => s.CustomerGuid == parm.CustomerGuid && s.IsDelete == false); return "修改成功!"; } diff --git a/ARW.Service/Api/BusinessService/Custom/HistorySearchs/HistorySearchServiceApi.cs b/ARW.Service/Api/BusinessService/Custom/HistorySearchs/HistorySearchServiceApi.cs index 955bb9d..ef9a3f4 100644 --- a/ARW.Service/Api/BusinessService/Custom/HistorySearchs/HistorySearchServiceApi.cs +++ b/ARW.Service/Api/BusinessService/Custom/HistorySearchs/HistorySearchServiceApi.cs @@ -77,7 +77,7 @@ namespace ARW.Service.Api.BusinessService.Custom.HistorySearchs var query = _HistorySearchRepository .Queryable() - .Where(s => s.Create_time >= todayStart && s.Create_time <= todayEnd) // 仅选择当天的搜索记录 + //.Where(s => s.Create_time >= todayStart && s.Create_time <= todayEnd) // 仅选择当天的搜索记录 .Where(predicate.ToExpression()) .OrderBy(s => s.Create_time, OrderByType.Desc) .Select(s => new HistorySearchVoApi diff --git a/ARW.Service/Api/BusinessService/OrderManage/Orders/OrderServiceApi.cs b/ARW.Service/Api/BusinessService/OrderManage/Orders/OrderServiceApi.cs index 505af8b..544dbb2 100644 --- a/ARW.Service/Api/BusinessService/OrderManage/Orders/OrderServiceApi.cs +++ b/ARW.Service/Api/BusinessService/OrderManage/Orders/OrderServiceApi.cs @@ -1,10 +1,8 @@ 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; @@ -13,6 +11,13 @@ using ARW.Service.Api.IBusinessService.OrderManage.Orders; using ARW.Model.Dto.Api.OrderManage.Orders; using ARW.Model.Models.Business.OrderManage.Orders; using ARW.Model.Vo.Api.OrderManage.Orders; +using ARW.Repository.Business.OrderManage.OrderGoodss; +using ARW.Repository.Business.GoodsManager.Goodss; +using ARW.Repository.Business.GoodsManager.GoodsSpecs.GoodsSkus; +using ARW.Repository.Business.GoodsManager.GoodsSpecs.Specs; +using ARW.Repository.Business.GoodsManager.GoodsSpecs.SpecValues; +using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.GoodsSkus; +using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.SpecValues; namespace ARW.Service.Api.BusinessService.OrderManage.Orders { @@ -26,10 +31,20 @@ namespace ARW.Service.Api.BusinessService.OrderManage.Orders public class OrderServiceImplApi : BaseService, IOrderServiceApi { private readonly OrderRepository _OrderRepository; + private readonly OrderGoodsRepository _OrderGoodsRepository; + private readonly GoodsRepository _GoodsRepository; + private readonly GoodsSkuRepository _GoodsSkuRepository; + private readonly SpecRepository _SpecRepository; + private readonly SpecValueRepository _SpecValueRepository; - public OrderServiceImplApi(OrderRepository OrderRepository) + public OrderServiceImplApi(OrderRepository OrderRepository, OrderGoodsRepository orderGoodsRepository, GoodsRepository goodsRepository, GoodsSkuRepository goodsSkuRepository, SpecRepository specRepository, SpecValueRepository specValueRepository) { this._OrderRepository = OrderRepository; + _OrderGoodsRepository = orderGoodsRepository; + _GoodsRepository = goodsRepository; + _GoodsSkuRepository = goodsSkuRepository; + _SpecRepository = specRepository; + _SpecValueRepository = specValueRepository; } #region Api接口代码 @@ -46,13 +61,12 @@ namespace ARW.Service.Api.BusinessService.OrderManage.Orders var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.OrderNumber), s => s.OrderNumber.Contains(parm.OrderNumber)); + predicate = predicate.AndIF(parm.OrderStatus != 0, s => s.OrderStatus == parm.OrderStatus); predicate = predicate.AndIF(parm.PayType != null, s => s.PayType == parm.PayType); predicate = predicate.AndIF(parm.PayStatus != null, s => s.PayStatus == parm.PayStatus); predicate = predicate.AndIF(parm.DeliveryType != null, s => s.DeliveryType == parm.DeliveryType); - predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LogisticsTrackingNumber), s => s.LogisticsTrackingNumber.Contains(parm.LogisticsTrackingNumber)); predicate = predicate.AndIF(parm.DeliveryStatus != null, s => s.DeliveryStatus == parm.DeliveryStatus); predicate = predicate.AndIF(parm.ReceiptStatus != null, s => s.ReceiptStatus == parm.ReceiptStatus); - predicate = predicate.AndIF(parm.OrderStatus != null, s => s.OrderStatus == parm.OrderStatus); var query = _OrderRepository .Queryable() .Where(predicate.ToExpression()) @@ -61,42 +75,111 @@ namespace ARW.Service.Api.BusinessService.OrderManage.Orders { OrderId = s.OrderId, OrderGuid = s.OrderGuid, - PaymentGuid = s.PaymentGuid, - CustomerGuid = s.CustomerGuid, - OrderNumber = s.OrderNumber, + OrderNo = s.OrderNumber, GoodsTotalAmoun = s.GoodsTotalAmoun, OrderAmount = s.OrderAmount, - CouponGuid = s.CouponGuid, - CouponMoney = s.CouponMoney, - PointsMoney = s.PointsMoney, - PointsNum = s.PointsNum, PayPrice = s.PayPrice, - UpdatePrice = s.UpdatePrice, - OrderRemark = s.OrderRemark, - PayType = s.PayType, PayStatus = s.PayStatus, - PayTime = s.PayTime, - DeliveryType = s.DeliveryType, ExpressPrice = s.ExpressPrice, - LogisticsCompanyGuid = s.LogisticsCompanyGuid, - LogisticsCompany = s.LogisticsCompany, - LogisticsTrackingNumber = s.LogisticsTrackingNumber, DeliveryStatus = s.DeliveryStatus, - DeliveryTime = s.DeliveryTime, ReceiptStatus = s.ReceiptStatus, - ReceiptTime = s.ReceiptTime, OrderStatus = s.OrderStatus, - PointsBonus = s.PointsBonus, - IsSettled = s.IsSettled, - TransactionId = s.TransactionId, IsComment = s.IsComment, - OrderSource = s.OrderSource, }); - return await query.ToPageAsync(parm); + var list = await query.ToPageAsync(parm); + + foreach (var item in list.Result) + { + var goodsList = 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 GetGoodsSpecList(_item.GoodsSkuId); + + goodsList.Add(orderGood); + } + item.GoodsList = goodsList; + } + + return list; } + + /// + /// 待付款取消订单 + /// + /// + /// + public async Task WaitPayCancelOrder(OrderDtoApi parm) + { + var res = await _OrderRepository.UpdateAsync(f => new Order + { + OrderStatus = 2, + IsSettled = 2, + }, f => f.OrderGuid == parm.OrderGuid); + if (res) + return "取消订单成功"; + else + return "取消订单失败!"; + } + + + /// + /// 已付款取消订单 + /// + /// + /// + public async Task PayCancelOrder(OrderDtoApi parm) + { + var res = await _OrderRepository.UpdateAsync(f => new Order + { + OrderStatus = 3, + }, f => f.OrderGuid == parm.OrderGuid); + if (res) + return "取消订单成功"; + else + return "取消订单失败!"; + } + + + /// + /// 确认收货 + /// + /// + /// + public async Task ConfirmReceipt(OrderDtoApi parm) + { + // 收货状态 => 已收货 + // 订单状态 => 已完成 + // 订单结算状态 => 已结算 + var res = await _OrderRepository.UpdateAsync(f => new Order + { + ReceiptStatus = 2, + ReceiptTime = DateTime.Now, + OrderStatus = 4, + IsSettled = 2, + }, f => f.OrderGuid == parm.OrderGuid); + if (res) + return "确认收货成功"; + else + return "收货失败!"; + } + + + /// /// 查询订单详情(Api) /// @@ -149,6 +232,84 @@ namespace ARW.Service.Api.BusinessService.OrderManage.Orders } + + + #region 业务方法调用 + + + /// + /// 获取商品规格 + /// + /// 规格id + /// + public async Task> GetGoodsSpecList(int? skuId) + { + var list = new List(); + var sku = await _GoodsSkuRepository.GetFirstAsync(s => s.GoodsSkuId == skuId); + if (sku.SpecValueId != 0) + { + var orderGoodsSpecApiVo1 = await GetGoodsSpec(sku, 1); + list.Add(orderGoodsSpecApiVo1); + + if (sku.SpecSecondValueId != 0) + { + var orderGoodsSpecApiVo2 = await GetGoodsSpec(sku, 2); + list.Add(orderGoodsSpecApiVo2); + + if (sku.SpecThirdValueId != 0) + { + var orderGoodsSpecApiVo3 = await GetGoodsSpec(sku, 3); + list.Add(orderGoodsSpecApiVo3); + } + } + } + + return list; + } + + + public async Task GetGoodsSpec(GoodsSku sku, int level) + { + var orderGoodsSpecApiVo = new OrderGoodsSpecApiVo(); + var specValue = new SpecValue(); + switch (level) + { + case 1: + specValue = await _SpecValueRepository.GetFirstAsync(s => s.SpecValueId == sku.SpecValueId); + orderGoodsSpecApiVo = await GetSpecValue(specValue); + break; + case 2: + specValue = await _SpecValueRepository.GetFirstAsync(s => s.SpecValueId == sku.SpecSecondValueId); + orderGoodsSpecApiVo = await GetSpecValue(specValue); + break; + case 3: + specValue = await _SpecValueRepository.GetFirstAsync(s => s.SpecValueId == sku.SpecThirdValueId); + orderGoodsSpecApiVo = await GetSpecValue(specValue); + break; + + default: + break; + } + return orderGoodsSpecApiVo; + } + + + public async Task GetSpecValue(SpecValue specValue) + { + var spec = await _SpecRepository.GetFirstAsync(s => s.SpecId == specValue.SpecId); + OrderGoodsSpecApiVo orderGoodsSpecApiVo = new() + { + SpecTitle = spec.SpecName, + SpecValue = specValue.SpecValueName + }; + return orderGoodsSpecApiVo; + } + + #endregion + + + + #endregion } diff --git a/ARW.Service/Api/BusinessService/PayManage/PayServiceApi.cs b/ARW.Service/Api/BusinessService/PayManage/PayServiceApi.cs index fd5334d..7289920 100644 --- a/ARW.Service/Api/BusinessService/PayManage/PayServiceApi.cs +++ b/ARW.Service/Api/BusinessService/PayManage/PayServiceApi.cs @@ -193,14 +193,28 @@ namespace ARW.Service.Api.BusinessService.PaymentManage foreach (var item in parm.GoodsRequestList) { var cart = await _CartRepository.GetFirstAsync(s => s.CartId == item.CartId); - var goods = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == cart.GoodsGuid); - var quantity = cart.CartGoodsNum; + long goodsGuid = 0; + var quantity = 0; + var skuId = 0; + if (cart != null) + { + goodsGuid = cart.GoodsGuid; + quantity = cart.CartGoodsNum; + skuId = cart.GoodsSkuId; + } + else + { + goodsGuid = item.SpuId; + quantity = item.Quantity; + skuId = item.SkuId; + } + var goods = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == goodsGuid); /* 计算商品总价 */ // 是否有规格 - if (cart.GoodsSkuId != 0) + if (skuId != 0) { - var sku = await _GoodsSkuRepository.GetFirstAsync(s => s.GoodsSkuId == cart.GoodsSkuId); + var sku = await _GoodsSkuRepository.GetFirstAsync(s => s.GoodsSkuId == skuId); if (sku != null) { price += sku.GoodsSkuPrice * quantity; @@ -363,14 +377,31 @@ namespace ARW.Service.Api.BusinessService.PaymentManage decimal singlePrice = 0; decimal toatlPrice = 0; var cart = await _CartRepository.GetFirstAsync(s => s.CartId == item.CartId); - var goods = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == cart.GoodsGuid); - var quantity = cart.CartGoodsNum; + + long goodsGuid = 0; + var quantity = 0; + var skuId = 0; + if (cart != null) + { + goodsGuid = cart.GoodsGuid; + quantity = cart.CartGoodsNum; + skuId = cart.GoodsSkuId; + } + else + { + goodsGuid = item.SpuId; + quantity = item.Quantity; + skuId = item.SkuId; + } + + var goods = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == goodsGuid); + /* 计算商品总价 */ // 是否有规格 - if (cart.GoodsSkuId != 0) + if (skuId != 0) { - var sku = await _GoodsSkuRepository.GetFirstAsync(s => s.GoodsSkuId == cart.GoodsSkuId); + var sku = await _GoodsSkuRepository.GetFirstAsync(s => s.GoodsSkuId == skuId); if (sku != null) { singlePrice = sku.GoodsSkuPrice; @@ -387,8 +418,8 @@ namespace ARW.Service.Api.BusinessService.PaymentManage OrderGoods orderGoods = new() { OrderGuid = orderGuid, - GoodsGuid = cart.GoodsGuid, - GoodsSkuId = cart.GoodsSkuId, + GoodsGuid = goodsGuid, + GoodsSkuId = skuId, GoodsPrice = singlePrice, GoodsTotalNum = quantity, GoodsTotalAmoun = toatlPrice, diff --git a/ARW.Service/Api/IBusinessService/OrderManage/Orders/IOrderServiceApi.cs b/ARW.Service/Api/IBusinessService/OrderManage/Orders/IOrderServiceApi.cs index 6658f23..7794cb6 100644 --- a/ARW.Service/Api/IBusinessService/OrderManage/Orders/IOrderServiceApi.cs +++ b/ARW.Service/Api/IBusinessService/OrderManage/Orders/IOrderServiceApi.cs @@ -25,7 +25,32 @@ namespace ARW.Service.Api.IBusinessService.OrderManage.Orders /// Task> GetOrderListApi(OrderQueryDtoApi parm); - /// + + /// + /// 待付款取消订单 + /// + /// + /// + Task WaitPayCancelOrder(OrderDtoApi parm); + + + /// + /// 已付款取消订单 + /// + /// + /// + Task PayCancelOrder(OrderDtoApi parm); + + + /// + /// 确认收货 + /// + /// + /// + Task ConfirmReceipt(OrderDtoApi parm); + + + /// /// 获取订单详情(Api) /// /// diff --git a/ARW.Service/Business/BusinessService/Carts/CartService.cs b/ARW.Service/Business/BusinessService/Carts/CartService.cs index f56bec5..4b8aa08 100644 --- a/ARW.Service/Business/BusinessService/Carts/CartService.cs +++ b/ARW.Service/Business/BusinessService/Carts/CartService.cs @@ -78,8 +78,16 @@ namespace ARW.Service.Business.BusinessService.Carts } else { - - var response = await _CartRepository.InsertReturnSnowflakeIdAsync(model); + var cart = await _CartRepository.GetFirstAsync(s => s.GoodsGuid == model.GoodsGuid && s.GoodsSkuId == model.GoodsSkuId); + if (cart != null) + { + cart.CartGoodsNum += model.CartGoodsNum; + var response = await _CartRepository.UpdateAsync(cart); + } + else + { + var response = await _CartRepository.InsertReturnSnowflakeIdAsync(model); + } return "添加成功!"; } } diff --git a/ARW.Service/Business/BusinessService/OrderManage/Orders/OrderService.cs b/ARW.Service/Business/BusinessService/OrderManage/Orders/OrderService.cs index 4cc2688..522f676 100644 --- a/ARW.Service/Business/BusinessService/OrderManage/Orders/OrderService.cs +++ b/ARW.Service/Business/BusinessService/OrderManage/Orders/OrderService.cs @@ -70,10 +70,10 @@ namespace ARW.Service.Business.BusinessService.OrderManage.Orders var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.OrderNumber), s => s.OrderNumber.Contains(parm.OrderNumber)); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LogisticsTrackingNumber), s => s.LogisticsTrackingNumber.Contains(parm.LogisticsTrackingNumber)); predicate = predicate.AndIF(parm.PayType != null, s => s.PayType == parm.PayType); predicate = predicate.AndIF(parm.PayStatus != null, s => s.PayStatus == parm.PayStatus); predicate = predicate.AndIF(parm.DeliveryType != null, s => s.DeliveryType == parm.DeliveryType); - predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LogisticsTrackingNumber), s => s.LogisticsTrackingNumber.Contains(parm.LogisticsTrackingNumber)); predicate = predicate.AndIF(parm.DeliveryStatus != null, s => s.DeliveryStatus == parm.DeliveryStatus); predicate = predicate.AndIF(parm.ReceiptStatus != null, s => s.ReceiptStatus == parm.ReceiptStatus); predicate = predicate.AndIF(parm.OrderStatus != null, s => s.OrderStatus == parm.OrderStatus); @@ -308,32 +308,35 @@ namespace ARW.Service.Business.BusinessService.OrderManage.Orders var goodsInfoList = new List(); var orderGoodsList = await _OrderGoodsRepository.GetListAsync(s => s.OrderGuid == orderGuid); - if (orderGoodsList.Count <= 0) throw new CustomException("订单商品不存在"); - foreach (var orderGoods in orderGoodsList) + if (orderGoodsList.Count >= 0) { - var goods = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == orderGoods.GoodsGuid) ?? throw new CustomException("商品不存在"); - var orderGoodsInfo = new OrderGoodsVo(); - orderGoodsInfo.GoodsName = goods.GoodsName; - orderGoodsInfo.GoodsPicture = goods.GoodsPicture; - orderGoodsInfo.GoodsTotalNum = orderGoods.GoodsTotalNum; - orderGoodsInfo.GoodsTotalNum = orderGoods.GoodsTotalNum; - if (orderGoods.GoodsSkuId != 0) + //throw new CustomException("订单商品不存在"); + foreach (var orderGoods in orderGoodsList) { - var specName = await _GoodsSkuService.GetSpecValueFullName(orderGoods.GoodsSkuId); - var sku = await _GoodsSkuService.GetByIdAsync(orderGoods.GoodsSkuId); - if (sku != null) - orderGoodsInfo.GoodsPrice = sku.GoodsSkuPrice; - orderGoodsInfo.GoodsSpecName = specName; - orderGoodsInfo.GoodsCoding = goods.GoodsCoding; - } - else - { - orderGoodsInfo.GoodsPrice = goods.GoodsPriceHighest; - orderGoodsInfo.GoodsWeight = goods.GoodsWeight; - } - orderGoodsInfo.GoodsTotalPrice = orderGoodsInfo.GoodsPrice * orderGoodsInfo.GoodsTotalNum; + var goods = await _GoodsRepository.GetFirstAsync(s => s.GoodsGuid == orderGoods.GoodsGuid) ?? throw new CustomException("商品不存在"); + var orderGoodsInfo = new OrderGoodsVo(); + orderGoodsInfo.GoodsName = goods.GoodsName; + orderGoodsInfo.GoodsPicture = goods.GoodsPicture; + orderGoodsInfo.GoodsTotalNum = orderGoods.GoodsTotalNum; + orderGoodsInfo.GoodsTotalNum = orderGoods.GoodsTotalNum; + if (orderGoods.GoodsSkuId != 0) + { + var specName = await _GoodsSkuService.GetSpecValueFullName(orderGoods.GoodsSkuId); + var sku = await _GoodsSkuService.GetByIdAsync(orderGoods.GoodsSkuId); + if (sku != null) + orderGoodsInfo.GoodsPrice = sku.GoodsSkuPrice; + orderGoodsInfo.GoodsSpecName = specName; + orderGoodsInfo.GoodsCoding = goods.GoodsCoding; + } + else + { + orderGoodsInfo.GoodsPrice = goods.GoodsPriceHighest; + orderGoodsInfo.GoodsWeight = goods.GoodsWeight; + } + orderGoodsInfo.GoodsTotalPrice = orderGoodsInfo.GoodsPrice * orderGoodsInfo.GoodsTotalNum; - goodsInfoList.Add(orderGoodsInfo); + goodsInfoList.Add(orderGoodsInfo); + } } return goodsInfoList; diff --git a/ARW.WebApi/Controllers/Api/OrderManage/Orders/OrderApiController.cs b/ARW.WebApi/Controllers/Api/OrderManage/Orders/OrderApiController.cs index 576cd15..ddd069d 100644 --- a/ARW.WebApi/Controllers/Api/OrderManage/Orders/OrderApiController.cs +++ b/ARW.WebApi/Controllers/Api/OrderManage/Orders/OrderApiController.cs @@ -15,6 +15,8 @@ using ARW.Model.Models.Business.OrderManage.Orders; using ARW.Model.Vo.Api.OrderManage.Orders; using Microsoft.AspNetCore.Authorization; using Geocoding; +using ARW.Model.Dto.Api.Carts; +using ARW.Service.Api.IBusinessService.Carts; namespace ARW.WebApi.Controllers.Api.OrderManage.Orders { @@ -52,7 +54,56 @@ namespace ARW.WebApi.Controllers.Api.OrderManage.Orders return SUCCESS(res); } - /// + + /// + /// 待付款取消订单 + /// + /// + /// + [HttpPost("waitPayCancelOrder")] + [Log(Title = "待付款取消订单", BusinessType = BusinessType.UPDATE)] + public async Task WaitPayCancelOrder([FromBody] OrderDtoApi parm) + { + if (parm == null) { throw new CustomException("请求参数错误"); } + + var res = await _OrderServiceApi.WaitPayCancelOrder(parm); + return SUCCESS(res); + } + + + /// + /// 已付款取消订单 + /// + /// + /// + [HttpPost("payCancelOrder")] + [Log(Title = "已付款取消订单", BusinessType = BusinessType.UPDATE)] + public async Task PayCancelOrder([FromBody] OrderDtoApi parm) + { + if (parm == null) { throw new CustomException("请求参数错误"); } + + var res = await _OrderServiceApi.PayCancelOrder(parm); + return SUCCESS(res); + } + + + /// + /// 确认收货 + /// + /// + /// + [HttpPost("confirmReceipt")] + [Log(Title = "确认收货", BusinessType = BusinessType.UPDATE)] + public async Task ConfirmReceipt([FromBody] OrderDtoApi parm) + { + if (parm == null) { throw new CustomException("请求参数错误"); } + + var res = await _OrderServiceApi.ConfirmReceipt(parm); + return SUCCESS(res); + } + + + /// /// 获取Order详情(Api) /// /// 查询参数