feat 添加发货,订单改价,审核取消订单的接口,修改订单详情接口的bug,初始化订单api接口

This commit is contained in:
lwh 2023-09-05 01:30:58 +08:00
parent a1728bf765
commit e35eb71e46
23 changed files with 1331 additions and 42 deletions

View File

@ -187,5 +187,16 @@ namespace ARW.Common
}
}
public static T JsonToVo<T>(string json)
{
json = json.Remove(0, 1);
json = json.Substring(0, json.Length - 1);
var data = JsonConvert.DeserializeObject<T>(json);
return data;
}
}
}

View File

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using ARW.Model.Models.Business.OrderManage.Orders;
namespace ARW.Model.Dto.Api.OrderManage.Orders
{
/// <summary>
/// 订单查询对象Api
///
/// @author lwh
/// @date 2023-09-01
/// </summary>
public class OrderQueryDtoApi : PagerInfo
{
public string OrderNumber { get; set; }
public int? PayType { get; set; }
public int? PayStatus { get; set; }
public int? DeliveryType { get; set; }
public string LogisticsTrackingNumber { get; set; }
public int? DeliveryStatus { get; set; }
public int? ReceiptStatus { get; set; }
public int? OrderStatus { get; set; }
}
/// <summary>
/// 订单详情输入对象Api
///
/// @author lwh
/// @date 2023-09-01
/// </summary>
public class OrderDtoApi
{
[Required(ErrorMessage = "OrderGuid不能为空")]
public long OrderGuid { get; set; }
}
}

View File

@ -4,6 +4,8 @@ using System.ComponentModel.DataAnnotations;
using System.Reflection.Metadata.Ecma335;
using ARW.Model.Models.Business.GoodsManager.Goodss;
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
using MimeKit;
using OfficeOpenXml.Attributes;
namespace ARW.Model.Dto.Business.GoodsManager.Goodss
{
@ -61,6 +63,8 @@ namespace ARW.Model.Dto.Business.GoodsManager.Goodss
[Required(ErrorMessage = "图片不能为空")]
public string GoodsPicture { get; set; }
public decimal GoodsWeight { get; set; }
public decimal GoodsPriceLowest { get; set; }
[Required(ErrorMessage = "价格(最高)不能为空")]

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using ARW.Model.Models.Business.OrderManage.Orders;
namespace ARW.Model.Dto.Business.OrderManage.Orders
{
/// <summary>
/// 审核取消订单输入对象
///
/// @author lwh
/// @date 2023-08-29
/// </summary>
public class OrderCancelOrderDto
{
public long OrderGuid { get; set; }
public bool IsAgree { get; set; }
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using ARW.Model.Models.Business.OrderManage.Orders;
namespace ARW.Model.Dto.Business.OrderManage.Orders
{
/// <summary>
/// 订单改价输入对象
///
/// @author lwh
/// @date 2023-08-29
/// </summary>
public class OrderChangePriceDto
{
public long OrderGuid { get; set; }
public decimal OrderAmount { get; set; }
public decimal ExpressPrice { get; set; }
}
}

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using ARW.Model.Models.Business.OrderManage.Orders;
namespace ARW.Model.Dto.Business.OrderManage.Orders
{
/// <summary>
/// 订单发货输入对象
///
/// @author lwh
/// @date 2023-08-29
/// </summary>
public class OrderDeliverDto
{
public long OrderGuid { get; set; }
public long? LogisticsCompanyGuid { get; set; }
public string LogisticsCompany { get; set; }
public string LogisticsTrackingNumber { get; set; }
}
}

View File

@ -113,7 +113,7 @@ namespace ARW.Model.Dto.Business.OrderManage.Orders
/// @author lwh
/// @date 2023-08-29
/// </summary>
public class OrderQueryDto : PagerInfo
public class OrderQueryDto : PagerInfo
{
public string OrderNumber { get; set; }
@ -131,11 +131,15 @@ namespace ARW.Model.Dto.Business.OrderManage.Orders
public int? ReceiptStatus { get; set; }
public int? OrderStatus { get; set; }
public string ids { get; set; }
}
public class OrderDetailDto
{
public int OrderId { get; set; }
}
}

View File

@ -154,6 +154,13 @@ namespace ARW.Model.Models.Business.GoodsManager.Goodss
[SugarColumn(ColumnName = "goods_price_highest")]
public decimal GoodsPriceHighest { get; set; }
/// <summary>
/// 描述 :商品重量
/// 空值 : false
/// </summary>
[EpplusTableColumn(Header = "商品重量")]
[SugarColumn(ColumnName = "goods_weight")]
public decimal GoodsWeight { get; set; }
/// <summary>
/// 描述 :划线价格(最低)

View File

@ -0,0 +1,348 @@
using Newtonsoft.Json;
using OfficeOpenXml.Attributes;
using SqlSugar;
using System;
namespace ARW.Model.Vo.Api.OrderManage.Orders
{
/// <summary>
/// 订单展示对象Api
///
/// @author lwh
/// @date 2023-09-01
/// </summary>
public class OrderVoApi
{
/// <summary>
/// 描述 :
/// </summary>
[EpplusIgnore]
public int OrderId { get; set; }
/// <summary>
/// 描述 :
/// </summary>
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusIgnore]
public long OrderGuid { get; set; }
/// <summary>
/// 描述 :商品guid
/// </summary>
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusTableColumn(Header = "商品guid")]
public long GoodsGuid { get; set; }
/// <summary>
/// 描述 :订单流水guid
/// </summary>
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusTableColumn(Header = "订单流水guid")]
public long PaymentGuid { get; set; }
/// <summary>
/// 描述 :客户guid
/// </summary>
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusTableColumn(Header = "客户guid")]
public long CustomerGuid { get; set; }
/// <summary>
/// 描述 :店铺guid
/// </summary>
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusIgnore]
public long? ShopGuid { get; set; }
/// <summary>
/// 描述 :订单号
/// </summary>
[EpplusTableColumn(Header = "订单号")]
public string OrderNumber { get; set; }
/// <summary>
/// 描述 :商品总金额
/// </summary>
[EpplusTableColumn(Header = "商品总金额")]
public decimal GoodsTotalAmoun { get; set; }
/// <summary>
/// 描述 :订单金额
/// </summary>
[EpplusTableColumn(Header = "订单金额")]
public decimal OrderAmount { get; set; }
/// <summary>
/// 描述 :优惠券guid
/// </summary>
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusIgnore]
public long? CouponGuid { get; set; }
/// <summary>
/// 描述 :优惠券抵扣金额
/// </summary>
[EpplusIgnore]
public decimal CouponMoney { get; set; }
/// <summary>
/// 描述 :积分抵扣金额
/// </summary>
[EpplusIgnore]
public decimal PointsMoney { get; set; }
/// <summary>
/// 描述 :积分抵扣数量
/// </summary>
[EpplusIgnore]
public decimal PointsNum { get; set; }
/// <summary>
/// 描述 :实际付款金额(包含运费)
/// </summary>
[EpplusTableColumn(Header = "实际付款金额(包含运费)")]
public decimal PayPrice { get; set; }
/// <summary>
/// 描述 :后台修改的订单金额(差价)
/// </summary>
[EpplusIgnore]
public decimal UpdatePrice { get; set; }
/// <summary>
/// 描述 :买家留言
/// </summary>
[EpplusIgnore]
public string OrderRemark { get; set; }
/// <summary>
/// 描述 :支付方式(1微信支付 2余额支付)
/// </summary>
[EpplusTableColumn(Header = "支付方式(1微信支付 2余额支付)")]
public int PayType { get; set; }
/// <summary>
/// 描述 :付款状态(1未付款 2已付款)
/// </summary>
[EpplusTableColumn(Header = "付款状态(1未付款 2已付款)")]
public int PayStatus { get; set; }
/// <summary>
/// 描述 :付款时间
/// </summary>
[EpplusTableColumn(Header = "付款时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")]
public DateTime? PayTime { get; set; }
/// <summary>
/// 描述 :配送方式(1快递配送)
/// </summary>
[EpplusTableColumn(Header = "配送方式(1快递配送)")]
public int DeliveryType { get; set; }
/// <summary>
/// 描述 :运费金额
/// </summary>
[EpplusTableColumn(Header = "运费金额")]
public decimal ExpressPrice { get; set; }
/// <summary>
/// 描述 :物流公司guid
/// </summary>
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusIgnore]
public long? LogisticsCompanyGuid { get; set; }
/// <summary>
/// 描述 :物流公司
/// </summary>
[EpplusIgnore]
public string LogisticsCompany { get; set; }
/// <summary>
/// 描述 :物流单号
/// </summary>
[EpplusIgnore]
public string LogisticsTrackingNumber { get; set; }
/// <summary>
/// 描述 :发货状态(1未发货 2已发货)
/// </summary>
[EpplusTableColumn(Header = "发货状态(1未发货 2已发货)")]
public int DeliveryStatus { get; set; }
/// <summary>
/// 描述 :发货时间
/// </summary>
[EpplusIgnore]
public DateTime? DeliveryTime { get; set; }
/// <summary>
/// 描述 :收货状态(1未收货 2已收货)
/// </summary>
[EpplusTableColumn(Header = "收货状态(1未收货 2已收货)")]
public int ReceiptStatus { get; set; }
/// <summary>
/// 描述 :收货时间
/// </summary>
[EpplusIgnore]
public DateTime? ReceiptTime { get; set; }
/// <summary>
/// 描述 :订单状态(1进行中 2取消 3待取消 4已完成)
/// </summary>
[EpplusTableColumn(Header = "订单状态(1进行中 2取消 3待取消 4已完成)")]
public int OrderStatus { get; set; }
/// <summary>
/// 描述 :赠送的积分数量
/// </summary>
[EpplusIgnore]
public decimal PointsBonus { get; set; }
/// <summary>
/// 描述 :订单是否已结算(1未结算 2已结算)
/// </summary>
[EpplusTableColumn(Header = "订单是否已结算(1未结算 2已结算)")]
public int IsSettled { get; set; }
/// <summary>
/// 描述 :微信支付交易号
/// </summary>
[EpplusIgnore]
public string TransactionId { get; set; }
/// <summary>
/// 描述 :是否已评价(1否 2是)
/// </summary>
[EpplusTableColumn(Header = "是否已评价(1否 2是)")]
public int IsComment { get; set; }
/// <summary>
/// 描述 :订单来源(1普通订单)
/// </summary>
[EpplusTableColumn(Header = "订单来源(1普通订单)")]
public int OrderSource { get; set; }
}
/// <summary>
/// 订单详情展示对象Api
/// </summary>
public class OrderApiDetailsVo
{
[EpplusIgnore]
public int OrderId { get; set; }
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusIgnore]
public long OrderGuid { get; set; }
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusTableColumn(Header = "商品guid")]
public long GoodsGuid { get; set; }
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusTableColumn(Header = "订单流水guid")]
public long PaymentGuid { get; set; }
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusTableColumn(Header = "客户guid")]
public long CustomerGuid { get; set; }
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusIgnore]
public long? ShopGuid { get; set; }
[EpplusTableColumn(Header = "订单号")]
public string OrderNumber { get; set; }
[EpplusTableColumn(Header = "商品总金额")]
public decimal GoodsTotalAmoun { get; set; }
[EpplusTableColumn(Header = "订单金额")]
public decimal OrderAmount { get; set; }
[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; }
[EpplusTableColumn(Header = "支付方式(1微信支付 2余额支付)")]
public int PayType { get; set; }
[EpplusTableColumn(Header = "付款状态(1未付款 2已付款)")]
public int PayStatus { get; set; }
[EpplusTableColumn(Header = "付款时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")]
public DateTime? PayTime { get; set; }
[EpplusTableColumn(Header = "配送方式(1快递配送)")]
public int DeliveryType { get; set; }
[EpplusTableColumn(Header = "运费金额")]
public decimal ExpressPrice { get; set; }
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusIgnore]
public long? LogisticsCompanyGuid { get; set; }
[EpplusIgnore]
public string LogisticsCompany { get; set; }
[EpplusIgnore]
public string LogisticsTrackingNumber { get; set; }
[EpplusTableColumn(Header = "发货状态(1未发货 2已发货)")]
public int DeliveryStatus { get; set; }
[EpplusIgnore]
public DateTime? DeliveryTime { get; set; }
[EpplusTableColumn(Header = "收货状态(1未收货 2已收货)")]
public int ReceiptStatus { get; set; }
[EpplusIgnore]
public DateTime? ReceiptTime { get; set; }
[EpplusTableColumn(Header = "订单状态(1进行中 2取消 3待取消 4已完成)")]
public int OrderStatus { get; set; }
[EpplusIgnore]
public decimal PointsBonus { get; set; }
[EpplusTableColumn(Header = "订单是否已结算(1未结算 2已结算)")]
public int IsSettled { get; set; }
[EpplusIgnore]
public string TransactionId { get; set; }
[EpplusTableColumn(Header = "是否已评价(1否 2是)")]
public int IsComment { get; set; }
[EpplusTableColumn(Header = "订单来源(1普通订单)")]
public int OrderSource { get; set; }
}
}

View File

@ -122,6 +122,13 @@ namespace ARW.Model.Vo.Business.GoodsManager.Goodss
[EpplusTableColumn(Header = "商品图片")]
public string GoodsPicture { get; set; }
/// <summary>
/// 描述 :商品重量
/// 空值 : false
/// </summary>
[EpplusTableColumn(Header = "商品重量")]
public decimal GoodsWeight { get; set; }
/// <summary>
/// 描述 :价格(最低)

View File

@ -0,0 +1,140 @@
using Newtonsoft.Json;
using OfficeOpenXml.Attributes;
using SqlSugar;
using System;
using System.Collections.Generic;
namespace ARW.Model.Vo.Business.OrderManage.Orders
{
/// <summary>
/// 订单详情展示对象Api
/// </summary>
public class OrderDetailsVo
{
public int OrderId { get; set; }
[JsonConverter(typeof(ValueToStringConverter))]
public long OrderGuid { get; set; }
public string CustomerPhone { get; set; }
[EpplusTableColumn(Header = "订单号")]
public string OrderNumber { get; set; }
[EpplusTableColumn(Header = "商品总金额")]
public decimal GoodsTotalAmoun { get; set; }
[EpplusTableColumn(Header = "订单金额")]
public decimal OrderAmount { get; set; }
[JsonConverter(typeof(ValueToStringConverter))]
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; }
[EpplusTableColumn(Header = "支付方式(1微信支付 2余额支付)")]
public int PayType { get; set; }
[EpplusTableColumn(Header = "付款状态(1未付款 2已付款)")]
public int PayStatus { get; set; }
[EpplusTableColumn(Header = "付款时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")]
public DateTime? PayTime { get; set; }
[EpplusTableColumn(Header = "配送方式(1快递配送)")]
public int DeliveryType { get; set; }
[EpplusTableColumn(Header = "运费金额")]
public decimal ExpressPrice { get; set; }
[JsonConverter(typeof(ValueToStringConverter))]
[EpplusIgnore]
public long? LogisticsCompanyGuid { get; set; }
[EpplusIgnore]
public string LogisticsCompany { get; set; }
[EpplusIgnore]
public string LogisticsTrackingNumber { get; set; }
[EpplusTableColumn(Header = "发货状态(1未发货 2已发货)")]
public int DeliveryStatus { get; set; }
[EpplusIgnore]
public DateTime? DeliveryTime { get; set; }
[EpplusTableColumn(Header = "收货状态(1未收货 2已收货)")]
public int ReceiptStatus { get; set; }
[EpplusIgnore]
public DateTime? ReceiptTime { get; set; }
[EpplusTableColumn(Header = "订单状态(1进行中 2取消 3待取消 4已完成)")]
public int OrderStatus { get; set; }
[EpplusIgnore]
public decimal PointsBonus { get; set; }
[EpplusTableColumn(Header = "订单是否已结算(1未结算 2已结算)")]
public int IsSettled { get; set; }
[EpplusIgnore]
public string TransactionId { get; set; }
[EpplusTableColumn(Header = "是否已评价(1否 2是)")]
public int IsComment { get; set; }
[EpplusTableColumn(Header = "订单来源(1普通订单)")]
public int OrderSource { get; set; }
/// <summary>
/// 下单时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 商品信息
/// </summary>
public List<OrderGoodsVo> GoodsInfoList { get; set; }
/// <summary>
/// 收货信息
/// </summary>
public OrderReceiveVo OrderReceive { get; set; }
}
}

View File

@ -31,6 +31,10 @@ namespace ARW.Model.Vo.Business.OrderManage.Orders
/// </summary>
public string GoodsSpecName { get; set; }
/// <summary>
/// 描述 :编码
/// </summary>
public string GoodsCoding { get; set; }
/// <summary>
/// 商品单价
@ -43,5 +47,14 @@ namespace ARW.Model.Vo.Business.OrderManage.Orders
/// </summary>
public int GoodsTotalNum { get; set; }
/// <summary>
/// 商品总价
/// </summary>
public decimal GoodsTotalPrice { get; set; }
/// <summary>
/// 商品重量
/// </summary>
public decimal GoodsWeight { get; set;}
}
}

View File

@ -0,0 +1,40 @@
using Newtonsoft.Json;
using OfficeOpenXml.Attributes;
using SqlSugar;
using System;
namespace ARW.Model.Vo.Business.OrderManage.Orders
{
/// <summary>
/// 订单展示对象
///
/// @author lwh
/// @date 2023-09-03
/// </summary>
public class OrderReceiveVo
{
/// <summary>
/// 描述 :收货人姓名
/// </summary>
public string ConsigneeName { get; set; }
/// <summary>
/// 描述 :联系电话
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 地区
/// </summary>
public string Region { get; set; }
/// <summary>
/// 描述 :详细地址
/// </summary>
public string Detail { get; set; }
}
}

View File

@ -21,6 +21,7 @@ using ARW.Repository.Business.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Model.Models.Business.GoodsManager.GoodsCategorys;
using ARW.Repository.Business.GoodsManager.GoodsCategorys;
using System;
using ARW.Common;
namespace ARW.Service.Api.BusinessService.GoodsManager.Goodss
{

View File

@ -0,0 +1,155 @@
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.Orders;
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;
namespace ARW.Service.Api.BusinessService.OrderManage.Orders
{
/// <summary>
/// 订单接口实现类Api
///
/// @author lwh
/// @date 2023-09-01
/// </summary>
[AppService(ServiceType = typeof(IOrderServiceApi), ServiceLifetime = LifeTime.Transient)]
public class OrderServiceImplApi : BaseService<Order>, IOrderServiceApi
{
private readonly OrderRepository _OrderRepository;
public OrderServiceImplApi(OrderRepository OrderRepository)
{
this._OrderRepository = OrderRepository;
}
#region Api接口代码
/// <summary>
/// 查询订单列表(Api)
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public async Task<PagedInfo<OrderVoApi>> GetOrderListApi(OrderQueryDtoApi parm)
{
//开始拼装查询条件d
var predicate = Expressionable.Create<Order>();
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.OrderNumber), s => s.OrderNumber.Contains(parm.OrderNumber));
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())
.OrderBy(s => s.Create_time, OrderByType.Desc)
.Select(s => new OrderVoApi
{
OrderId = s.OrderId,
OrderGuid = s.OrderGuid,
PaymentGuid = s.PaymentGuid,
CustomerGuid = s.CustomerGuid,
OrderNumber = 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);
}
/// <summary>
/// 查询订单详情(Api)
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public async Task<string> GetOrderDetails(OrderDtoApi parm)
{
var query = _OrderRepository
.Queryable()
.Where(s => s.OrderGuid == parm.OrderGuid)
.Select(s => new OrderApiDetailsVo
{
OrderId = s.OrderId,
OrderGuid = s.OrderGuid,
PaymentGuid = s.PaymentGuid,
CustomerGuid = s.CustomerGuid,
OrderNumber = 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,
}).Take(1);
return await query.ToJsonAsync();
}
#endregion
}
}

View File

@ -0,0 +1,36 @@
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.Orders;
using ARW.Model.Models.Business.OrderManage.Orders;
using ARW.Model.Vo.Api.OrderManage.Orders;
namespace ARW.Service.Api.IBusinessService.OrderManage.Orders
{
/// <summary>
/// 订单接口类Api
///
/// @author lwh
/// @date 2023-09-01
/// </summary>
public interface IOrderServiceApi : IBaseService<Order>
{
/// <summary>
/// 获取订单分页列表(Api)
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
Task<PagedInfo<OrderVoApi>> GetOrderListApi(OrderQueryDtoApi parm);
/// <summary>
/// 获取订单详情(Api)
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
Task<string> GetOrderDetails(OrderDtoApi parm);
}
}

View File

@ -162,6 +162,27 @@ namespace ARW.Service.Business.BusinessService.Custom.Regions
/// <summary>
/// 获取省市区完整名称
/// </summary>
/// <param name="provinceId">省id</param>
/// <param name="cityId">市id</param>
/// <param name="regionId">区id</param>
/// <returns></returns>
public async Task<string> GetRegionFullName(int provinceId, int cityId, int regionId)
{
var regionName = "";
var province = await _RegionRepository.GetFirstAsync(s => s.RegionId == provinceId);
regionName += province.RegionName;
var city = await _RegionRepository.GetFirstAsync(s => s.RegionId == cityId);
regionName += city.RegionName;
var region = await _RegionRepository.GetFirstAsync(s => s.RegionId == regionId);
regionName += region.RegionName;
return regionName;
}
#region Excel处理

View File

@ -157,6 +157,7 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
GoodsAloneGradeEquity = s.GoodsAloneGradeEquity,
GoodsShelfStatus = s.GoodsShelfStatus,
GoodsSort = s.GoodsSort,
GoodsWeight = s.GoodsWeight,
CreateTime = s.Create_time.ToString("yyyy-MM-dd HH:mm")
});

View File

@ -20,6 +20,15 @@ using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Model.Models.Business.Custom.Customers;
using ARW.Repository.Business.OrderManage.OrderGoodss;
using ARW.Model.Models.Business.GoodsManager.Goodss;
using ARW.Model.Dto.Api.OrderManage.Orders;
using ARW.Model.Vo.Api.OrderManage.Orders;
using Aliyun.OSS;
using Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson;
using ARW.Common;
using Org.BouncyCastle.Crypto.Prng;
using Senparc.CO2NET.Extensions;
using ARW.Repository.Business.OrderManage.OrderCustomerAddreses;
using ARW.Service.Business.IBusinessService.Custom.Regions;
namespace ARW.Service.Business.BusinessService.OrderManage.Orders
{
@ -34,15 +43,19 @@ namespace ARW.Service.Business.BusinessService.OrderManage.Orders
{
private readonly OrderRepository _OrderRepository;
private readonly OrderGoodsRepository _OrderGoodsRepository;
private readonly OrderCustomerAddressRepository _OrderCustomerAddressRepository;
private readonly GoodsRepository _GoodsRepository;
private readonly IGoodsSkuService _GoodsSkuService;
private readonly IRegionService _RegionService;
public OrderServiceImpl(OrderRepository OrderRepository, GoodsRepository goodsRepository, IGoodsSkuService goodsSkuService, OrderGoodsRepository orderGoodsRepository)
public OrderServiceImpl(OrderRepository OrderRepository, GoodsRepository goodsRepository, IGoodsSkuService goodsSkuService, OrderGoodsRepository orderGoodsRepository, OrderCustomerAddressRepository orderCustomerAddressRepository, IRegionService regionService)
{
this._OrderRepository = OrderRepository;
_GoodsRepository = goodsRepository;
_GoodsSkuService = goodsSkuService;
_OrderGoodsRepository = orderGoodsRepository;
_OrderCustomerAddressRepository = orderCustomerAddressRepository;
_RegionService = regionService;
}
#region
@ -94,32 +107,8 @@ namespace ARW.Service.Business.BusinessService.OrderManage.Orders
foreach (var item in list.Result)
{
// 获取商品信息
item.GoodsInfoList = new List<OrderGoodsVo>();
var orderGoodsList = await _OrderGoodsRepository.GetListAsync(s => s.OrderGuid == item.OrderGuid);
if (orderGoodsList.Count <= 0) throw new CustomException("订单商品不存在");
foreach (var orderGoods in orderGoodsList)
{
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;
if (orderGoods.GoodsSkuId != null)
{
var specName = await _GoodsSkuService.GetSpecValueFullName(orderGoods.GoodsSkuId);
var sku = await _GoodsSkuService.GetByIdAsync(orderGoods.GoodsSkuId);
orderGoodsInfo.GoodsSpecName = specName;
orderGoodsInfo.GoodsPrice = sku.GoodsSkuPrice;
}
else
{
orderGoodsInfo.GoodsPrice = goods.GoodsPriceHighest;
}
item.GoodsInfoList.Add(orderGoodsInfo);
}
// 获取订单商品信息
item.GoodsInfoList = await GetOrderGoodsList(item.OrderGuid);
}
@ -127,6 +116,147 @@ namespace ARW.Service.Business.BusinessService.OrderManage.Orders
}
/// <summary>
/// 查询订单详情
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public async Task<string> GetOrderDetails(OrderDetailDto parm)
{
var query = _OrderRepository
.Queryable()
.LeftJoin<Customer>((s, c) => s.CustomerGuid == c.CustomerGuid)
.Where(s => s.OrderId == parm.OrderId)
.Select((s, c) => new OrderDetailsVo
{
OrderId = s.OrderId,
OrderGuid = s.OrderGuid,
CustomerPhone = c.CustomerMobilePhoneNumber,
OrderNumber = 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,
CreateTime = s.Create_time
}).Take(1);
var json = await query.ToJsonAsync();
if (json != "[]")
{
var data = Tools.JsonToVo<OrderDetailsVo>(json);
data.GoodsInfoList = await GetOrderGoodsList(data.OrderGuid);
data.OrderReceive = await GetOrderReceive(data.OrderGuid);
json = data.ToJson();
}
return json;
}
/// <summary>
/// 发货
/// </summary>
/// <returns></returns>
public async Task<string> Deliver(OrderDeliverDto parm)
{
var isUpdate = await _OrderRepository.UpdateAsync(s => new Order
{
LogisticsCompanyGuid = parm.LogisticsCompanyGuid,
LogisticsCompany = parm.LogisticsCompany,
LogisticsTrackingNumber = parm.LogisticsTrackingNumber,
DeliveryStatus = 2,
DeliveryTime = DateTime.Now,
Update_time = DateTime.Now
}, f => f.OrderGuid == parm.OrderGuid);
if (isUpdate)
return "发货成功";
else
throw new CustomException("发货失败");
}
/// <summary>
/// 订单改价
/// </summary>
/// <returns></returns>
public async Task<string> ChangePrice(OrderChangePriceDto parm)
{
var isUpdate = await _OrderRepository.UpdateAsync(s => new Order
{
UpdatePrice = parm.ExpressPrice + parm.OrderAmount,
Update_time = DateTime.Now
}, f => f.OrderGuid == parm.OrderGuid);
if (isUpdate)
return "改价成功";
else
throw new CustomException("改价失败");
}
/// <summary>
/// 审核取消订单
/// </summary>
/// <returns></returns>
public async Task<string> CancelOrder(OrderCancelOrderDto parm)
{
if (parm.IsAgree)
{
var isUpdate = await _OrderRepository.UpdateAsync(s => new Order
{
OrderStatus = 2,
Update_time = DateTime.Now
}, f => f.OrderGuid == parm.OrderGuid);
if (isUpdate)
return "通过申请成功";
else
throw new CustomException("通过申请失败");
}
else
{
var isUpdate = await _OrderRepository.UpdateAsync(s => new Order
{
OrderStatus = 1,
Update_time = DateTime.Now
}, f => f.OrderGuid == parm.OrderGuid);
if (isUpdate)
return "拒绝申请成功";
else
throw new CustomException("拒绝申请失败");
}
}
/// <summary>
@ -161,6 +291,73 @@ namespace ARW.Service.Business.BusinessService.OrderManage.Orders
#endregion
#region
/// <summary>
/// 获取商品订单列表
/// </summary>
/// <param name="orderGuid">订单guid</param>
/// <returns></returns>
/// <exception cref="CustomException"></exception>
public async Task<List<OrderGoodsVo>> GetOrderGoodsList(long orderGuid)
{
var goodsInfoList = new List<OrderGoodsVo>();
var orderGoodsList = await _OrderGoodsRepository.GetListAsync(s => s.OrderGuid == orderGuid);
if (orderGoodsList.Count <= 0) throw new CustomException("订单商品不存在");
foreach (var orderGoods in orderGoodsList)
{
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 != null)
{
var specName = await _GoodsSkuService.GetSpecValueFullName(orderGoods.GoodsSkuId);
var sku = await _GoodsSkuService.GetByIdAsync(orderGoods.GoodsSkuId);
orderGoodsInfo.GoodsSpecName = specName;
orderGoodsInfo.GoodsPrice = sku.GoodsSkuPrice;
orderGoodsInfo.GoodsCoding = goods.GoodsCoding;
}
else
{
orderGoodsInfo.GoodsPrice = goods.GoodsPriceHighest;
orderGoodsInfo.GoodsWeight = goods.GoodsWeight;
}
orderGoodsInfo.GoodsTotalPrice = orderGoodsInfo.GoodsPrice * orderGoodsInfo.GoodsTotalNum;
goodsInfoList.Add(orderGoodsInfo);
}
return goodsInfoList;
}
/// <summary>
/// 获取收货信息
/// </summary>
/// <param name="orderGuid"></param>
/// <returns></returns>
public async Task<OrderReceiveVo> GetOrderReceive(long orderGuid)
{
var orderReceive = new OrderReceiveVo();
var receive = await _OrderCustomerAddressRepository.GetFirstAsync(s => s.OrderGuid == orderGuid);
if (receive != null)
{
orderReceive.ConsigneeName = receive.ConsigneeName;
orderReceive.Phone = receive.Phont;
orderReceive.Detail = receive.Detail;
// 获取地区名称
orderReceive.Region = await _RegionService.GetRegionFullName(receive.ProvinceId, receive.CityId, receive.RegionId);
}
return orderReceive;
}
#endregion
#endregion

View File

@ -33,8 +33,8 @@ namespace ARW.Service.Business.IBusinessService.Custom.Regions
/// <returns></returns>
Task<List<RegionVo>> GetRegionList(RegionQueryDto parm);
/// <summary>
/// <summary>
/// 添加或修改省市区数据表
/// </summary>
/// <param name="parm"></param>
@ -54,7 +54,12 @@ namespace ARW.Service.Business.IBusinessService.Custom.Regions
/// </summary>
/// <param name="RegionCode">省市区编码</param>
/// <returns></returns>
Task<int> GetRegionId(string RegionCode,int level);
Task<int> GetRegionId(string RegionCode, int level);
/// <summary>
/// 获取省市区完整名称
/// </summary>
/// <returns></returns>
Task<string> GetRegionFullName(int provinceId, int CityId, int regionId);
}
}

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ARW.Model;
using ARW.Model.Dto.Api.OrderManage.Orders;
using ARW.Model.Dto.Business.OrderManage.Orders;
using ARW.Model.Models.Business.OrderManage.Orders;
using ARW.Model.Vo.Business.OrderManage.Orders;
@ -18,15 +19,23 @@ namespace ARW.Service.Business.IBusinessService.OrderManage.Orders
/// </summary>
public interface IOrderService : IBaseService<Order>
{
/// <summary>
/// <summary>
/// 获取订单分页列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
Task<PagedInfo<OrderVo>> GetOrderList(OrderQueryDto parm);
/// <summary>
/// <summary>
/// 获取订单详情(Api)
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
Task<string> GetOrderDetails(OrderDetailDto parm);
/// <summary>
/// 添加或修改订单
/// </summary>
/// <param name="parm"></param>
@ -34,6 +43,29 @@ namespace ARW.Service.Business.IBusinessService.OrderManage.Orders
Task<string> AddOrUpdateOrder(Order parm);
/// <summary>
/// 发货
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
Task<string> Deliver(OrderDeliverDto parm);
/// <summary>
/// 订单改价
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
Task<string> ChangePrice(OrderChangePriceDto parm);
/// <summary>
/// 审核取消订单
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
Task<string> CancelOrder(OrderCancelOrderDto parm);
/// <summary>
/// Excel导出

View File

@ -0,0 +1,81 @@
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.Orders;
using ARW.Service.Api.IBusinessService.OrderManage.Orders;
using ARW.Model.Models.Business.OrderManage.Orders;
using ARW.Model.Vo.Api.OrderManage.Orders;
using Microsoft.AspNetCore.Authorization;
using Geocoding;
namespace ARW.WebApi.Controllers.Api.OrderManage.Orders
{
/// <summary>
/// 订单控制器Api
///
/// @author lwh
/// @date 2023-09-01
/// </summary>
[Verify]
[Route("api/[controller]")]
public class OrderApiController : BaseController
{
private readonly IOrderServiceApi _OrderServiceApi;
/// <summary>
/// 依赖注入
/// </summary>
/// <param name="OrderServiceApi">订单订单Api服务</param>
public OrderApiController(IOrderServiceApi OrderServiceApi)
{
_OrderServiceApi = OrderServiceApi;
}
/// <summary>
/// 获取订单列表(Api)
/// </summary>
/// <param name="parm">查询参数</param>
/// <returns></returns>
[HttpGet("getOrderList")]
public async Task<IActionResult> GetOrderListApi([FromQuery] OrderQueryDtoApi parm)
{
var res = await _OrderServiceApi.GetOrderListApi(parm);
return SUCCESS(res);
}
/// <summary>
/// 获取Order详情(Api)
/// </summary>
/// <param name="parm">查询参数</param>
/// <returns></returns>
[HttpGet("getOrderDetails")]
public async Task<IActionResult> GetOrderDetails([FromQuery] OrderDtoApi parm)
{
//if (parm == null) throw new CustomException("参数错误!");
var res = await _OrderServiceApi.GetOrderDetails(parm);
if (res != "[]")
{
res = res.Remove(0, 1);
res = res.Substring(0, res.Length - 1);
var data = res.FromJSON<OrderApiDetailsVo>();
return SUCCESS(data);
}
else
{
return SUCCESS(res);
}
}
}
}

View File

@ -15,7 +15,8 @@ using ARW.Model.Models.Business.OrderManage.Orders;
using ARW.Model.Vo.Business.OrderManage.Orders;
using Microsoft.AspNetCore.Authorization;
using ARW.Admin.WebApi.Framework;
using ARW.Service.Api.IBusinessService.OrderManage.Orders;
using Geocoding;
namespace ARW.WebApi.Controllers.Business.OrderManage.Orders
{
@ -54,6 +55,79 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.Orders
return SUCCESS(res);
}
/// <summary>
/// 获取订单详情
/// </summary>
/// <param name="parm">查询参数</param>
/// <returns></returns>
[HttpGet("getOrderDetails")]
public async Task<IActionResult> GetOrderDetails([FromQuery] OrderDetailDto parm)
{
//if (parm == null) throw new CustomException("参数错误!");
var res = await _OrderService.GetOrderDetails(parm);
if (res != "[]")
{
var data = res.FromJSON<OrderDetailsVo>();
return SUCCESS(data);
}
else
{
return SUCCESS(res);
}
}
/// <summary>
/// 发货
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpPost("deliver")]
[Log(Title = "发货", BusinessType = BusinessType.ADDORUPDATE)]
public async Task<IActionResult> Deliver([FromBody] OrderDeliverDto parm)
{
if (parm == null) { throw new CustomException("请求参数错误"); }
var res = await _OrderService.Deliver(parm);
return SUCCESS(res);
}
/// <summary>
/// 订单改价
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpPost("changePrice")]
[Log(Title = "订单改价", BusinessType = BusinessType.ADDORUPDATE)]
public async Task<IActionResult> ChangePrice([FromBody] OrderChangePriceDto parm)
{
if (parm == null) { throw new CustomException("请求参数错误"); }
var res = await _OrderService.ChangePrice(parm);
return SUCCESS(res);
}
/// <summary>
/// 审核取消订单
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
[HttpPost("cancelOrder")]
[Log(Title = "审核取消订单", BusinessType = BusinessType.ADDORUPDATE)]
public async Task<IActionResult> CancelOrder([FromBody] OrderCancelOrderDto parm)
{
if (parm == null) { throw new CustomException("请求参数错误"); }
var res = await _OrderService.CancelOrder(parm);
return SUCCESS(res);
}
/// <summary>
/// 添加或修改订单
/// </summary>
@ -66,7 +140,7 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.Orders
{
if (parm == null) { throw new CustomException("请求参数错误"); }
var modal = new Order();
var modal = new Order();
if (parm.OrderId != 0) modal = parm.Adapt<Order>().ToUpdate(HttpContext);
else modal = parm.Adapt<Order>().ToCreate(HttpContext);
@ -88,16 +162,16 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.Orders
var response = _OrderService.Delete(idsArr);
return SUCCESS("删除成功!");
}
/// <summary>
/// <summary>
/// 导出订单
/// </summary>
/// <returns></returns>
[Log(Title = "订单导出", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[HttpGet("exportOrder")]
[ActionPermissionFilter(Permission = "business:order:export")]
public async Task<IActionResult> ExportExcel([FromQuery] OrderQueryDto parm)
public async Task<IActionResult> ExportExcel([FromQuery] OrderQueryDto parm)
{
parm.PageSize = 10000;
var list = await _OrderService.GetOrderList(parm);
@ -116,7 +190,7 @@ namespace ARW.WebApi.Controllers.Business.OrderManage.Orders
data = selectDataList;
}
// 导出数据处理
var handleData = await _OrderService.HandleExportData(data);