You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
6.6 KiB

using BBWYB.Common.Extensions;
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using FreeSql;
using System.Linq.Expressions;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
{
public class OrderBusiness : BaseBusiness, IDenpendency
{
public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator)
{
}
private ISelect<Model.Db.Order, OrderConsignee, OrderCost> GetOrderListQueryConditions(QueryOrderRequest request)
{
var select = fsql.Select<Model.Db.Order, OrderConsignee, OrderCost>().LeftJoin((o, ocs, oct) => o.Id == ocs.OrderId)
.LeftJoin((o, ocs, oct) => o.Id == oct.OrderId);
if (!string.IsNullOrEmpty(request.OrderId))
{
select = select.Where((o, ocs, oct) => o.Id == request.OrderId);
}
else
{
if (!string.IsNullOrEmpty(request.Sku) || !string.IsNullOrEmpty(request.ProductId))
{
var childSelect = fsql.Select<OrderSku>().As("osku")
.WhereIf(!string.IsNullOrEmpty(request.Sku), osku => osku.SkuId == request.Sku)
.WhereIf(!string.IsNullOrEmpty(request.ProductId), osku => osku.ProductId == request.ProductId);
select = select.Where((o, ocs, oct) => childSelect.Where(osku => osku.OrderId == o.Id).Any());
}
select = select.WhereIf(request.OrderState != null, (o, ocs, oct) => o.OrderState == request.OrderState)
.WhereIf(request.StartDate != null, (o, ocs, oct) => o.StartTime >= request.StartDate)
.WhereIf(request.EndDate != null, (o, ocs, oct) => o.StartTime <= request.EndDate)
.WhereIf(!string.IsNullOrEmpty(request.ClientOrderId), (o, ocs, oct) => o.ClientOrderId == request.ClientOrderId)
.WhereIf(!string.IsNullOrEmpty(request.SourceShopName), (o, ocs, oct) => o.SourceShopName == request.SourceShopName)
.WhereIf(!string.IsNullOrEmpty(request.SourceSku), (o, ocs, oct) => o.SourceSku == request.SourceSku);
}
select = select.WhereIf(request.ShopId != null, (o, ocs, oct) => o.ShopId == request.ShopId);
//select = select.Where((o, ocs, oct) => o.ShopId == searchOrderRequest.ShopId);
return select;
}
private Expression<Func<Model.Db.Order, OrderConsignee, OrderCost, Model.Db.Order>> GetOrderListField()
{
return (o, ocs, oct) => new Model.Db.Order()
{
Id = o.Id,
BuyerRemark = o.BuyerRemark,
EndTime = o.EndTime,
FreightPrice = o.FreightPrice,
ModifyTime = o.ModifyTime,
OrderPayment = o.OrderPayment,
OrderSellerPrice = o.OrderSellerPrice,
OrderState = o.OrderState,
OrderTotalPrice = o.OrderTotalPrice,
OrderType = o.OrderType,
PayType = o.PayType,
Platform = o.Platform,
ShopId = o.ShopId,
StartTime = o.StartTime,
VenderRemark = o.VenderRemark,
PurchaseRemark = o.PurchaseRemark,
WaybillNo = o.WaybillNo,
SellerPreferentialAmount = o.SellerPreferentialAmount,
PreferentialAmount = o.PreferentialAmount,
ClientOrderId = o.ClientOrderId,
SourceShopName = o.SourceShopName,
SourceSku = o.SourceSku,
ExpressName = o.ExpressName,
IsPurchased = o.IsPurchased,
ContactName = ocs.ContactName,
Address = ocs.Address,
Province = ocs.Province,
County = ocs.County,
Town = ocs.Town,
City = ocs.City,
//IsDecode = ocs.IsDecode,
Mobile = ocs.Mobile,
TelePhone = ocs.TelePhone,
DeliveryExpressFreight = oct.DeliveryExpressFreight,
PlatformCommissionAmount = oct.PlatformCommissionAmount,
PlatformCommissionRatio = oct.PlatformCommissionRatio,
//PreferentialAmount = oct.PreferentialAmount,
Profit = oct.Profit,
PurchaseAmount = oct.PurchaseAmount,
IsManualEdited = oct.IsManualEdited,
//SDCommissionAmount = oct.SDCommissionAmount,
//SDOrderAmount = oct.SDOrderAmount,
//RefundAmount = oct.RefundAmount,
//RefundPurchaseAmount = oct.RefundPurchaseAmount,
};
}
public OrderListResponse GetOrderList(QueryOrderRequest request)
{
var select = GetOrderListQueryConditions(request).OrderByDescending((o, ocs, oct) => o.StartTime)
.Count(out var total)
.Page(request.PageIndex, request.PageSize);
var orderSourceList = select.ToList(GetOrderListField());
var orderList = orderSourceList.Map<IList<OrderResponse>>();
var orderIdList = orderList.Select(o => o.Id).ToList();
if (orderList.Count() > 0)
{
#region 处理Sku
var orderSkuList = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 &&
orderIdList.Contains(osku.OrderId)).ToList<OrderSkuResponse>();
foreach (var order in orderList)
{
order.ItemList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList();
}
#endregion
#region 处理订单成本明细
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => orderIdList.Contains(ocd.OrderId) && ocd.IsEnabled == true).ToList<OrderCostDetailResponse>();
foreach (var order in orderList)
order.OrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id).ToList();
#endregion
}
return new OrderListResponse()
{
Count = total,
Items = orderList
};
}
}
}