|
|
@ -43,11 +43,15 @@ namespace BBWY.Server.Business |
|
|
|
|
|
|
|
public OrderListResponse GetOrderList(SearchOrderRequest searchOrderRequest) |
|
|
|
{ |
|
|
|
var select = fsql.Select<Order, OrderConsignee, OrderCost>().LeftJoin((o, ocs, oct) => o.Id == ocs.OrderId) |
|
|
|
.LeftJoin((o, ocs, oct) => o.Id == oct.OrderId); |
|
|
|
if (searchOrderRequest.OrderState == Enums.OrderState.已取消) |
|
|
|
searchOrderRequest.ExcludeCanceled = false; |
|
|
|
|
|
|
|
var select = fsql.Select<Order, OrderConsignee, OrderCost, OrderDropShipping>().LeftJoin((o, ocs, oct, ods) => o.Id == ocs.OrderId) |
|
|
|
.LeftJoin((o, ocs, oct, ods) => o.Id == oct.OrderId) |
|
|
|
.LeftJoin((o, ocs, oct, ods) => o.Id == ods.OrderId); |
|
|
|
if (!string.IsNullOrEmpty(searchOrderRequest.OrderId)) |
|
|
|
{ |
|
|
|
select = select.Where((o, ocs, oct) => o.Id == searchOrderRequest.OrderId); |
|
|
|
select = select.Where((o, ocs, oct, ods) => o.Id == searchOrderRequest.OrderId); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
@ -56,24 +60,27 @@ namespace BBWY.Server.Business |
|
|
|
var childSelect = fsql.Select<OrderSku>().As("osku") |
|
|
|
.WhereIf(string.IsNullOrEmpty(searchOrderRequest.Sku) == false, osku => osku.SkuId == searchOrderRequest.Sku) |
|
|
|
.WhereIf(string.IsNullOrEmpty(searchOrderRequest.ProductNo) == false, osku => osku.ProductNo == searchOrderRequest.ProductNo); |
|
|
|
select = select.Where((o, ocs, oct) => childSelect.Where(osku => osku.OrderId == o.Id).Any()); |
|
|
|
select = select.Where((o, ocs, oct, ods) => childSelect.Where(osku => osku.OrderId == o.Id).Any()); |
|
|
|
} |
|
|
|
|
|
|
|
select = select.WhereIf(searchOrderRequest.OrderState != null, (o, ocs, oct) => o.OrderState == searchOrderRequest.OrderState) |
|
|
|
.WhereIf(searchOrderRequest.StartDate != null, (o, ocs, oct) => o.StartTime >= searchOrderRequest.StartDate) |
|
|
|
.WhereIf(searchOrderRequest.EndDate != null, (o, ocs, oct) => o.StartTime <= searchOrderRequest.EndDate) |
|
|
|
.WhereIf(string.IsNullOrEmpty(searchOrderRequest.ContactName) == false, (o, ocs, oct) => ocs.ContactName == searchOrderRequest.ContactName) |
|
|
|
.WhereIf(string.IsNullOrEmpty(searchOrderRequest.Waybill) == false, (o, ocs, oct) => o.WaybillNo.Contains(searchOrderRequest.Waybill)); //这一步可能比较慢
|
|
|
|
select = select.WhereIf(searchOrderRequest.OrderState != null, (o, ocs, oct, ods) => o.OrderState == searchOrderRequest.OrderState) |
|
|
|
.WhereIf(searchOrderRequest.StartDate != null, (o, ocs, oct, ods) => o.StartTime >= searchOrderRequest.StartDate) |
|
|
|
.WhereIf(searchOrderRequest.EndDate != null, (o, ocs, oct, ods) => o.StartTime <= searchOrderRequest.EndDate) |
|
|
|
.WhereIf(searchOrderRequest.OnlyDF, (o, ocs, oct, ods) => o.StorageType == Enums.StorageType.代发) |
|
|
|
.WhereIf(searchOrderRequest.ExcludeCanceled, (o, ocs, oct, ods) => o.OrderState != Enums.OrderState.已取消) |
|
|
|
.WhereIf(searchOrderRequest.ExcludeSD && !searchOrderRequest.OnlyDF, (o, ocs, oct, ods) => o.StorageType == null || o.StorageType != Enums.StorageType.SD) |
|
|
|
.WhereIf(string.IsNullOrEmpty(searchOrderRequest.ContactName) == false, (o, ocs, oct, ods) => ocs.ContactName == searchOrderRequest.ContactName) |
|
|
|
.WhereIf(string.IsNullOrEmpty(searchOrderRequest.Waybill) == false, (o, ocs, oct, ods) => o.WaybillNo == searchOrderRequest.Waybill); |
|
|
|
} |
|
|
|
|
|
|
|
select = select.Where((o, ocs, oct) => o.ShopId == searchOrderRequest.ShopId) |
|
|
|
.OrderByDescending((o, ocs, oct) => o.StartTime) |
|
|
|
select = select.Where((o, ocs, oct, ods) => o.ShopId == searchOrderRequest.ShopId) |
|
|
|
.OrderByDescending((o, ocs, oct, ods) => o.StartTime) |
|
|
|
.Count(out var total) |
|
|
|
.Page(searchOrderRequest.PageIndex, searchOrderRequest.PageSize); |
|
|
|
|
|
|
|
var sql = select.ToSql(); |
|
|
|
|
|
|
|
var orderSourceList = select.ToList((o, ocs, oct) => new Order() |
|
|
|
var orderSourceList = select.ToList((o, ocs, oct, ods) => new Order() |
|
|
|
{ |
|
|
|
Id = o.Id, |
|
|
|
BuyerRemark = o.BuyerRemark, |
|
|
@ -114,7 +121,13 @@ namespace BBWY.Server.Business |
|
|
|
Profit = oct.Profit, |
|
|
|
PurchaseAmount = oct.PurchaseAmount, |
|
|
|
IsManualEdited = oct.IsManualEdited, |
|
|
|
SDCommissionAmount = oct.SDCommissionAmount |
|
|
|
SDCommissionAmount = oct.SDCommissionAmount, |
|
|
|
|
|
|
|
BuyerAccount = ods.BuyerAccount, |
|
|
|
DeliveryFreight = ods.DeliveryFreight, |
|
|
|
PurchaseOrderId = ods.PurchaseOrderId, |
|
|
|
PurchasePlatform = ods.PurchasePlatform, |
|
|
|
SellerAccount = ods.SellerAccount, |
|
|
|
}); |
|
|
|
var orderList = orderSourceList.Map<IList<OrderResponse>>(); |
|
|
|
|
|
|
@ -194,7 +207,9 @@ namespace BBWY.Server.Business |
|
|
|
|
|
|
|
var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.OrderId == autoCalculationCostRequest.OrderId).ToList(); |
|
|
|
var orderSkuIds = orderSkus.Select(osku => osku.SkuId).ToList(); |
|
|
|
var purchaserOrders = fsql.Select<PurchaseOrder>().Where(po => po.RemainingQuantity != 0 && orderSkuIds.Contains(po.SkuId)).ToList(); |
|
|
|
var purchaserOrders = fsql.Select<PurchaseOrder>().Where(po => po.StorageType == autoCalculationCostRequest.StorageType && |
|
|
|
po.RemainingQuantity != 0 && |
|
|
|
orderSkuIds.Contains(po.SkuId)).ToList(); |
|
|
|
if (purchaserOrders.Count() == 0) |
|
|
|
throw new BusinessException("库存为零不能自动计算成本"); |
|
|
|
|
|
|
@ -465,6 +480,155 @@ namespace BBWY.Server.Business |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 关联外部订单
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="relationPurchaseOrderRequest"></param>
|
|
|
|
public void RelationPurchaseOrder(RelationPurchaseOrderRequest relationPurchaseOrderRequest) |
|
|
|
{ |
|
|
|
var dbOrder = fsql.Select<Order>(relationPurchaseOrderRequest.OrderDropShipping.OrderId).ToOne(); |
|
|
|
if (dbOrder == null) |
|
|
|
throw new BusinessException($"订单号{relationPurchaseOrderRequest.OrderDropShipping.OrderId}不存在"); |
|
|
|
|
|
|
|
IInsert<OrderDropShipping> insertOrderDropShipping = null; |
|
|
|
IUpdate<OrderDropShipping> updateOrderDropShipping = null; |
|
|
|
IInsert<OrderCost> insertOrderCost = null; |
|
|
|
IUpdate<OrderCost> updateOrderCost = null; |
|
|
|
IDelete<PurchaseOrder> deletePurchaseOrder = null; |
|
|
|
IDelete<OrderCostDetail> deleteOrderCostDetail = null; |
|
|
|
List<PurchaseOrder> insertPurchaseOrderList = new List<PurchaseOrder>(); |
|
|
|
List<OrderCostDetail> insertOrderCostDetailList = new List<OrderCostDetail>(); |
|
|
|
|
|
|
|
|
|
|
|
#region 代发信息表
|
|
|
|
var orderDropShipping = relationPurchaseOrderRequest.OrderDropShipping.Map<OrderDropShipping>(); |
|
|
|
if (fsql.Select<OrderDropShipping>(relationPurchaseOrderRequest.OrderDropShipping.OrderId).Any()) |
|
|
|
updateOrderDropShipping = fsql.Update<OrderDropShipping>().SetSource(orderDropShipping); |
|
|
|
else |
|
|
|
{ |
|
|
|
orderDropShipping.CreateTime = DateTime.Now; |
|
|
|
insertOrderDropShipping = fsql.Insert(orderDropShipping); |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 采购单表
|
|
|
|
var oldPourchaseIdList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == relationPurchaseOrderRequest.OrderDropShipping.OrderId) |
|
|
|
.ToList(ocd => ocd.PurchaseOrderPKId); |
|
|
|
deletePurchaseOrder = fsql.Delete<PurchaseOrder>().Where(po => oldPourchaseIdList.Contains(po.Id)); |
|
|
|
insertPurchaseOrderList.AddRange(relationPurchaseOrderRequest.RelationPurchaseOrderSkuList.Select(x => new PurchaseOrder() |
|
|
|
{ |
|
|
|
Id = idGenerator.NewLong(), |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
ProductId = x.ProductId, |
|
|
|
PurchaseMethod = Enums.PurchaseMethod.线下采购, |
|
|
|
StorageType = Enums.StorageType.代发, |
|
|
|
PurchaseOrderId = relationPurchaseOrderRequest.OrderDropShipping.PurchaseOrderId, |
|
|
|
PurchasePlatform = relationPurchaseOrderRequest.OrderDropShipping.PurchasePlatform, |
|
|
|
PurchaseQuantity = x.Quantity, |
|
|
|
RemainingQuantity = 0, |
|
|
|
ShopId = dbOrder.ShopId, |
|
|
|
SkuId = x.SkuId, |
|
|
|
SingleConsumableAmount = 0, |
|
|
|
SingleFirstFreight = 0, |
|
|
|
SingleFreight = 0, |
|
|
|
SingleOperationAmount = 0, |
|
|
|
SingleStorageAmount = 0, |
|
|
|
SingleSkuAmount = x.SingleSkuAmount, |
|
|
|
SingleDeliveryFreight = 0 |
|
|
|
})); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 订单成本表
|
|
|
|
var orderCost = fsql.Select<OrderCost>(relationPurchaseOrderRequest.OrderDropShipping.OrderId).ToOne(); |
|
|
|
if (orderCost != null) |
|
|
|
{ |
|
|
|
orderCost.DeliveryExpressFreight = relationPurchaseOrderRequest.OrderDropShipping.DeliveryFreight; |
|
|
|
orderCost.PurchaseAmount = relationPurchaseOrderRequest.OrderDropShipping.PurchaseAmount; |
|
|
|
orderCost.Profit = dbOrder.OrderSellerPrice + |
|
|
|
dbOrder.FreightPrice - |
|
|
|
orderCost.PurchaseAmount - |
|
|
|
orderCost.DeliveryExpressFreight - |
|
|
|
orderCost.PlatformCommissionAmount; |
|
|
|
updateOrderCost = fsql.Update<OrderCost>().SetSource(orderCost).IgnoreColumns(oc => new |
|
|
|
{ |
|
|
|
oc.CreateTime, |
|
|
|
oc.SDCommissionAmount, |
|
|
|
oc.PlatformCommissionAmount, |
|
|
|
oc.PlatformCommissionRatio |
|
|
|
}); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
var preferentialAmount = fsql.Select<OrderCoupon>().Where(oc => oc.OrderId == relationPurchaseOrderRequest.OrderDropShipping.OrderId) |
|
|
|
.ToAggregate(g => g.Sum(g.Key.CouponPrice)); |
|
|
|
orderCost = new OrderCost() |
|
|
|
{ |
|
|
|
OrderId = relationPurchaseOrderRequest.OrderDropShipping.OrderId, |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
DeliveryExpressFreight = relationPurchaseOrderRequest.OrderDropShipping.DeliveryFreight, |
|
|
|
PlatformCommissionRatio = 0.05M, |
|
|
|
SDCommissionAmount = 0, |
|
|
|
PurchaseAmount = relationPurchaseOrderRequest.RelationPurchaseOrderSkuList.Sum(s => s.SingleSkuAmount * s.Quantity), |
|
|
|
PlatformCommissionAmount = dbOrder.OrderSellerPrice * 0.05M, |
|
|
|
PreferentialAmount = preferentialAmount, |
|
|
|
IsManualEdited = true |
|
|
|
}; |
|
|
|
|
|
|
|
orderCost.Profit = dbOrder.OrderSellerPrice + |
|
|
|
dbOrder.FreightPrice - |
|
|
|
orderCost.PurchaseAmount - |
|
|
|
orderCost.DeliveryExpressFreight - |
|
|
|
orderCost.PlatformCommissionAmount; |
|
|
|
insertOrderCost = fsql.Insert(orderCost); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 订单成本明细表
|
|
|
|
var oldOrderCostDetailIdList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == relationPurchaseOrderRequest.OrderDropShipping.OrderId) |
|
|
|
.ToList(ocd => ocd.Id); |
|
|
|
deleteOrderCostDetail = fsql.Delete<OrderCostDetail>().Where(ocd => oldOrderCostDetailIdList.Contains(ocd.Id)); |
|
|
|
insertOrderCostDetailList.AddRange(relationPurchaseOrderRequest.RelationPurchaseOrderSkuList.Select(x => new OrderCostDetail() |
|
|
|
{ |
|
|
|
Id = idGenerator.NewLong(), |
|
|
|
ConsumableAmount = 0, |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
DeductionQuantity = x.Quantity, |
|
|
|
DeliveryExpressFreight = 0, |
|
|
|
FirstFreight = 0, |
|
|
|
OperationAmount = 0, |
|
|
|
OrderId = relationPurchaseOrderRequest.OrderDropShipping.OrderId, |
|
|
|
ProductId = x.ProductId, |
|
|
|
PurchaseFreight = 0, |
|
|
|
SkuAmount = x.SingleSkuAmount * x.Quantity, |
|
|
|
SkuId = x.SkuId, |
|
|
|
StorageAmount = 0, |
|
|
|
TotalCost = x.SingleSkuAmount * x.Quantity, |
|
|
|
UnitCost = x.SingleSkuAmount, |
|
|
|
PurchaseOrderPKId = insertPurchaseOrderList.FirstOrDefault(po => po.SkuId == x.SkuId).Id |
|
|
|
})); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
deletePurchaseOrder?.ExecuteAffrows(); |
|
|
|
deleteOrderCostDetail?.ExecuteAffrows(); |
|
|
|
insertOrderDropShipping?.ExecuteAffrows(); |
|
|
|
updateOrderDropShipping?.ExecuteAffrows(); |
|
|
|
insertOrderCost?.ExecuteAffrows(); |
|
|
|
updateOrderCost?.ExecuteAffrows(); |
|
|
|
fsql.Insert(insertPurchaseOrderList).ExecuteAffrows(); |
|
|
|
fsql.Insert(insertOrderCostDetailList).ExecuteAffrows(); |
|
|
|
if (dbOrder.StorageType != Enums.StorageType.代发) |
|
|
|
{ |
|
|
|
fsql.Update<Order>(relationPurchaseOrderRequest.OrderDropShipping.OrderId) |
|
|
|
.Set(o => o.StorageType, Enums.StorageType.代发) |
|
|
|
.SetIf(dbOrder.OrderState == Enums.OrderState.等待采购, o => o.OrderState, Enums.OrderState.待出库) |
|
|
|
.ExecuteAffrows(); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
public void SyncOrder(long shopId, string orderId) |
|
|
|
{ |
|
|
|
#region 获取店铺信息;
|
|
|
@ -774,6 +938,7 @@ namespace BBWY.Server.Business |
|
|
|
#region 扣减库存, 计算成本
|
|
|
|
if (dbOrder.StorageType != null && |
|
|
|
dbOrder.StorageType != Enums.StorageType.SD && |
|
|
|
dbOrder.StorageType != Enums.StorageType.代发 && |
|
|
|
orderState != null && |
|
|
|
orderState != Enums.OrderState.待付款 && |
|
|
|
orderState != Enums.OrderState.已取消) |
|
|
|