|
|
@ -7,6 +7,7 @@ using BBWYB.Server.Model; |
|
|
|
using BBWYB.Server.Model.Db; |
|
|
|
using BBWYB.Server.Model.Dto; |
|
|
|
using FreeSql; |
|
|
|
using Microsoft.Extensions.DependencyInjection; |
|
|
|
using Newtonsoft.Json; |
|
|
|
using SDKAdapter; |
|
|
|
using SDKAdapter.OperationPlatform.Client; |
|
|
@ -19,12 +20,32 @@ namespace BBWYB.Server.Business |
|
|
|
{ |
|
|
|
public class OrderBusiness : BaseBusiness, IDenpendency |
|
|
|
{ |
|
|
|
private OP_PlatformClientFactory opPlatformClientFactory; |
|
|
|
private RestApiService restApiService; |
|
|
|
public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, RestApiService restApiService) : base(fsql, nLogManager, idGenerator) |
|
|
|
|
|
|
|
private IList<Enums.PackConfigState?> waitConfigStateList; |
|
|
|
|
|
|
|
private Lazy<QiKuManager> qikuManagerLazy; |
|
|
|
private Lazy<OP_PlatformClientFactory> opPlatformClientFactoryLazy; |
|
|
|
private Lazy<RestApiService> restApiServiceLazy; |
|
|
|
|
|
|
|
private OP_PlatformClientFactory opPlatformClientFactory => opPlatformClientFactoryLazy.Value; |
|
|
|
private RestApiService restApiService => restApiServiceLazy.Value; |
|
|
|
private QiKuManager qikuManager => qikuManagerLazy.Value; |
|
|
|
|
|
|
|
private List<Enums.TimeLimitTaskType?> hgzTaskTypeList; |
|
|
|
|
|
|
|
public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator) |
|
|
|
{ |
|
|
|
this.opPlatformClientFactory = opPlatformClientFactory; |
|
|
|
this.restApiService = restApiService; |
|
|
|
qikuManagerLazy = new Lazy<QiKuManager>(() => serviceProvider.GetService<QiKuManager>()); |
|
|
|
opPlatformClientFactoryLazy = new Lazy<OP_PlatformClientFactory>(() => serviceProvider.GetService<OP_PlatformClientFactory>()); |
|
|
|
restApiServiceLazy = new Lazy<RestApiService>(() => serviceProvider.GetService<RestApiService>()); |
|
|
|
|
|
|
|
waitConfigStateList = new List<Enums.PackConfigState?>() { Enums.PackConfigState.待配置, Enums.PackConfigState.需修改 }; |
|
|
|
|
|
|
|
hgzTaskTypeList = new List<Enums.TimeLimitTaskType?>() |
|
|
|
{ |
|
|
|
Enums.TimeLimitTaskType.合格证拟定任务, |
|
|
|
Enums.TimeLimitTaskType.合格证补充任务 |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
private ISelect<Order, OrderConsignee, OrderCost> GetOrderListQueryConditions(QueryOrderRequest request) |
|
|
@ -38,21 +59,68 @@ namespace BBWYB.Server.Business |
|
|
|
select = select.Where((o, ocs, oct) => o.OrderSn == request.OrderSn); |
|
|
|
else |
|
|
|
{ |
|
|
|
if (!string.IsNullOrEmpty(request.Sku) || !string.IsNullOrEmpty(request.SourceSku) || !string.IsNullOrEmpty(request.ProductId)) |
|
|
|
if (!string.IsNullOrEmpty(request.Sku) || |
|
|
|
!string.IsNullOrEmpty(request.SourceSku) || |
|
|
|
!string.IsNullOrEmpty(request.ProductId) || |
|
|
|
request.IsWaitConfig) |
|
|
|
{ |
|
|
|
var childSelect = fsql.Select<OrderSku>().As("osku") |
|
|
|
.WhereIf(!string.IsNullOrEmpty(request.Sku), osku => osku.SkuId == request.Sku) |
|
|
|
.WhereIf(!string.IsNullOrEmpty(request.SourceSku), osku => osku.BelongSkuId == request.SourceSku) |
|
|
|
.WhereIf(!string.IsNullOrEmpty(request.ProductId), osku => osku.ProductId == request.ProductId); |
|
|
|
select = select.Where((o, ocs, oct) => childSelect.Where(osku => osku.OrderId == o.Id).Any()); |
|
|
|
.WhereIf(!string.IsNullOrEmpty(request.ProductId), osku => osku.ProductId == request.ProductId) |
|
|
|
.WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState != 1, osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null) |
|
|
|
.WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState == 1, osku => osku.PackConfigState == Enums.PackConfigState.需修改); |
|
|
|
select = select.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState.已取消) |
|
|
|
.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.IntoStoreType == Enums.IntoStoreType.发回齐越) |
|
|
|
.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.IsPurchased == true) |
|
|
|
.Where((o, ocs, oct) => childSelect.Where(osku => osku.OrderId == o.Id).Any()); |
|
|
|
|
|
|
|
if (request.IsWaitConfig && request.IsOnlyDisplayCerConfigTimeOut == 1) |
|
|
|
{ |
|
|
|
var configTimeOutChildSelect = fsql.Select<TimeLimitTask>().As("t") |
|
|
|
.Where(t => t.ShopId == request.ShopId) |
|
|
|
.Where(t => hgzTaskTypeList.Contains(t.TaskType)) |
|
|
|
.Where(t => t.IsTimely == false); |
|
|
|
select = select.Where((o, ocs, oct) => configTimeOutChildSelect.Where(t => t.OrderId == o.Id).Any()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (request.IsOnlyDisplayPurchaseTimeOut == 1 && (request.OrderState == Enums.OrderState.等待采购 || request.OrderState == Enums.OrderState.部分采购)) |
|
|
|
{ |
|
|
|
var childSelect = fsql.Select<TimeLimitTask>().As("t") |
|
|
|
.Where(t => t.ShopId == request.ShopId) |
|
|
|
.Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务) |
|
|
|
.Where(t => t.IsTimely == false); |
|
|
|
select = select.Where((o, ocs, oct) => childSelect.Where(t => t.OrderId == o.Id).Any()); |
|
|
|
} |
|
|
|
|
|
|
|
if (request.IsOnlyDisplayCheckComputationTimeOut == 1 && request.OrderState == Enums.OrderState.待核算) |
|
|
|
{ |
|
|
|
var childSelect = fsql.Select<TimeLimitTask>().As("t") |
|
|
|
.Where(t => t.ShopId == request.ShopId) |
|
|
|
.Where(t => t.TaskType == Enums.TimeLimitTaskType.待核算任务) |
|
|
|
.Where(t => t.IsTimely == false); |
|
|
|
select = select.Where((o, ocs, oct) => childSelect.Where(t => t.OrderId == o.Id).Any()); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(request.PurchaseOrderId)) |
|
|
|
var isDeliveryTimeout = request.IsOnlyDisplayDeliveryTimeout == 1 && (request.OrderState == Enums.OrderState.待发货 || request.OrderState == Enums.OrderState.部分发货); |
|
|
|
if (isDeliveryTimeout || !string.IsNullOrEmpty(request.PurchaseOrderId)) |
|
|
|
{ |
|
|
|
var childSelect = fsql.Select<OrderPurchaseInfo>().As("opi") |
|
|
|
.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId); |
|
|
|
var childSelect = fsql.Select<OrderPurchaseInfo>().As("opi"); |
|
|
|
if (isDeliveryTimeout) |
|
|
|
{ |
|
|
|
var before24hTime = DateTime.Now.AddHours(-24); |
|
|
|
childSelect = childSelect.Where(opi => opi.ShopId == request.ShopId && |
|
|
|
(opi.OrderState == Enums.PurchaseOrderState.待发货 || opi.OrderState == Enums.PurchaseOrderState.部分发货) && |
|
|
|
opi.CreateTime < before24hTime); |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(request.PurchaseOrderId)) |
|
|
|
{ |
|
|
|
childSelect = childSelect.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId); |
|
|
|
} |
|
|
|
select = select.Where((o, ocs, oct) => childSelect.Where(opi => opi.OrderId == o.Id).Any()); |
|
|
|
} |
|
|
|
|
|
|
|
select = select.WhereIf(request.OrderState == Enums.OrderState.待付款 || |
|
|
|
request.OrderState == Enums.OrderState.待验收 || |
|
|
|
request.OrderState == Enums.OrderState.待核算 || |
|
|
@ -65,11 +133,13 @@ namespace BBWYB.Server.Business |
|
|
|
o.OrderState == Enums.OrderState.部分发货) |
|
|
|
.WhereIf(request.OrderState == Enums.OrderState.待收货, (o, ocs, oct) => o.OrderState == Enums.OrderState.待收货 || |
|
|
|
o.OrderState == Enums.OrderState.部分收货) |
|
|
|
.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState.已取消 && o.IsPurchased == true) |
|
|
|
.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.SourceShopName), (o, ocs, oct) => o.SourceShopName == request.SourceShopName) |
|
|
|
.WhereIf(request.IsOnlyDisplaySpecialOrder == 1, (o, ocs, oct) => o.IsSpecialOrder == 1) |
|
|
|
.WhereIf(request.IsOnlyDisplaySendQiYue == 1, (o, ocs, oct) => o.IntoStoreType == Enums.IntoStoreType.发回齐越) |
|
|
|
.WhereIf(request.IsOnlyDisplayPurchaserSendInStore == 1, (o, ocs, oct) => o.IntoStoreType == Enums.IntoStoreType.厂商代发入仓); |
|
|
|
} |
|
|
|
|
|
|
|
select = select.WhereIf(request.ShopId != null, (o, ocs, oct) => o.ShopId == request.ShopId); |
|
|
@ -112,6 +182,8 @@ namespace BBWYB.Server.Business |
|
|
|
InPackAmount = o.InPackAmount, |
|
|
|
IsWaitPack = o.IsWaitPack, |
|
|
|
IntoStoreType = o.IntoStoreType, |
|
|
|
PayTime = o.PayTime, |
|
|
|
IsSpecialOrder = o.IsSpecialOrder, |
|
|
|
|
|
|
|
ContactName = ocs.ContactName, |
|
|
|
Address = ocs.Address, |
|
|
@ -174,14 +246,50 @@ namespace BBWYB.Server.Business |
|
|
|
}); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询入仓采购单信息
|
|
|
|
var inStoreRelationList = fsql.Select<InStorePurchaseOrdeRrelationInfo>().Where(i => orderIdList.Contains(i.OrderId)).ToList(); |
|
|
|
if (inStoreRelationList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var purchaseExpressOrder in purchaseExpressOrderList) |
|
|
|
{ |
|
|
|
purchaseExpressOrder.InStorePurchaseOrderIdList = inStoreRelationList.Where(i => i.OrderId == purchaseExpressOrder.OrderId && |
|
|
|
i.PurchaseOrderId == purchaseExpressOrder.PurchaseOrderId && |
|
|
|
i.WaybillNo == purchaseExpressOrder.WaybillNo) |
|
|
|
.Select(i => i.InStorePurchaseOrderId) |
|
|
|
.ToList(); |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询订单留言
|
|
|
|
var orderMessageList = fsql.Select<OrderMessage>().Where(om => orderIdList.Contains(om.OrderId)).ToList<OrderMessageResponse>(); |
|
|
|
foreach (var order in orderList) |
|
|
|
order.OrderMessageList = orderMessageList.Where(om => om.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
|
|
|
|
|
|
|
|
#region 处理订单Sku成本
|
|
|
|
var orderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => orderIdList.Contains(osc.OrderId)).ToList<OrderSkuCostResponse>(); |
|
|
|
foreach (var order in orderList) |
|
|
|
{ |
|
|
|
if (order.OrderCost == null) |
|
|
|
continue; |
|
|
|
order.OrderCost.OrderSkuCostList = orderSkuCostList.Where(osc => osc.OrderId == order.Id).ToList(); |
|
|
|
foreach (var orderSkuCost in order.OrderCost.OrderSkuCostList) |
|
|
|
{ |
|
|
|
orderSkuCost.OrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id && ocd.SkuId == orderSkuCost.SkuId).ToList(); |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 处理采购信息
|
|
|
|
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => orderIdList.Contains(op.OrderId) && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>(); |
|
|
|
var purchaserIdList = orderPurchaseInfoList.Where(opi => !string.IsNullOrEmpty(opi.PurchaserId)).Select(opi => opi.PurchaserId).Distinct().ToList(); |
|
|
|
var orderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>().Where(o => orderIdList.Contains(o.OrderId)).ToList<OrderPurchaseSkuInfoResponse>(); |
|
|
|
foreach (var order in orderList) |
|
|
|
{ |
|
|
@ -191,12 +299,41 @@ namespace BBWYB.Server.Business |
|
|
|
orderPurchaseInfo.OrderPurchaseSkuInfoList = orderPurchaseSkuInfoList.Where(opsi => opsi.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList(); |
|
|
|
orderPurchaseInfo.PurchaseExpressOrderList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList(); |
|
|
|
} |
|
|
|
|
|
|
|
if (order.OrderPurchaseInfoList != null && order.OrderPurchaseInfoList.Count() > 0) |
|
|
|
{ |
|
|
|
if (order.OrderState == Enums.OrderState.部分采购 && |
|
|
|
order.OrderPurchaseInfoList.Any(opi => opi.IsAutoEditOrderPrice == Enums.AutoEditOrderPriceType.已平价)) |
|
|
|
{ |
|
|
|
order.IsAutoEditOrderPrice = Enums.AutoEditOrderPriceType.部分平价; |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
var opiCount = order.OrderPurchaseInfoList.Count(); |
|
|
|
var pjCount = order.OrderPurchaseInfoList.Count(opi => opi.IsAutoEditOrderPrice == Enums.AutoEditOrderPriceType.已平价); |
|
|
|
if (pjCount == 0) |
|
|
|
order.IsAutoEditOrderPrice = Enums.AutoEditOrderPriceType.未平价; |
|
|
|
if (opiCount == pjCount) |
|
|
|
order.IsAutoEditOrderPrice = Enums.AutoEditOrderPriceType.已平价; |
|
|
|
else if (opiCount > pjCount) |
|
|
|
order.IsAutoEditOrderPrice = Enums.AutoEditOrderPriceType.部分平价; |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 处理采购单商家信息
|
|
|
|
if (purchaserIdList.Count() > 0) |
|
|
|
{ |
|
|
|
var purchaserList = fsql.Select<Purchaser>(purchaserIdList).ToList(); |
|
|
|
foreach (var purchaseOrder in orderPurchaseInfoList) |
|
|
|
{ |
|
|
|
purchaseOrder.Purchaser = purchaserList.FirstOrDefault(p => p.Id == purchaseOrder.PurchaserId); |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 处理SKU
|
|
|
|
var orderSkuList = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 && |
|
|
|
orderIdList.Contains(osku.OrderId)).ToList<OrderSkuResponse>(); |
|
|
|
var orderSkuList = fsql.Select<OrderSku>().Where(osku => orderIdList.Contains(osku.OrderId)).ToList<OrderSkuResponse>(); |
|
|
|
foreach (var order in orderList) |
|
|
|
{ |
|
|
|
order.ItemList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList(); |
|
|
@ -206,7 +343,10 @@ namespace BBWYB.Server.Business |
|
|
|
#region 处理SKU的快递单
|
|
|
|
foreach (var purchaseExpressOrder in purchaseExpressOrderList) |
|
|
|
{ |
|
|
|
purchaseExpressOrder.CalculationBelongOrderSku(orderPurchaseInfoList, orderPurchaseRelationInfoList, orderPurchaseSkuInfoList); |
|
|
|
var order = orderList.FirstOrDefault(o => o.Id == purchaseExpressOrder.OrderId); |
|
|
|
if (order == null) |
|
|
|
continue; |
|
|
|
purchaseExpressOrder.CalculationBelongOrderSku(order.IntoStoreType, orderPurchaseInfoList, orderPurchaseRelationInfoList, orderPurchaseSkuInfoList); |
|
|
|
var currentOrderSkuList = orderSkuList.Where(osku => !string.IsNullOrEmpty(purchaseExpressOrder.BelongSkuIds) && |
|
|
|
osku.OrderId == purchaseExpressOrder.OrderId && |
|
|
|
purchaseExpressOrder.BelongSkuIds.Contains(osku.SkuId)).ToList(); |
|
|
@ -216,43 +356,83 @@ namespace BBWYB.Server.Business |
|
|
|
continue; |
|
|
|
osku.PurchaseExpressOrderList.Add(purchaseExpressOrder); |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
//var purchaseOrder = orderPurchaseInfoList.FirstOrDefault(po => po.PurchaseOrderId == purchaseExpressOrder.PurchaseOrderId);
|
|
|
|
//if (purchaseOrder == null)
|
|
|
|
// continue;
|
|
|
|
//if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴)
|
|
|
|
//{
|
|
|
|
// var purchaseSkuIds = orderPurchaseSkuInfoList.Where(posku => posku.WaybillNo == purchaseExpressOrder.WaybillNo &&
|
|
|
|
// posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId)
|
|
|
|
// .Select(posku => posku.PurchaseSkuId).ToList();
|
|
|
|
// var orderSkuIds = orderPurchaseRelationInfoList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId &&
|
|
|
|
// purchaseSkuIds.Contains(ori.PurchaseSkuId))
|
|
|
|
// .Select(ori => ori.BelongSkuId)
|
|
|
|
// .Distinct()
|
|
|
|
// .ToList();
|
|
|
|
|
|
|
|
// var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId &&
|
|
|
|
// orderSkuIds.Contains(osku.SkuId)).ToList();
|
|
|
|
// foreach (var osku in currentOrderSkuList)
|
|
|
|
// {
|
|
|
|
// if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo))
|
|
|
|
// continue;
|
|
|
|
// osku.PurchaseExpressOrderList.Add(purchaseExpressOrder);
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
//else
|
|
|
|
//{
|
|
|
|
// var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId &&
|
|
|
|
// purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).ToList();
|
|
|
|
// foreach (var osku in currentOrderSkuList)
|
|
|
|
// {
|
|
|
|
// if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo))
|
|
|
|
// continue;
|
|
|
|
// osku.PurchaseExpressOrderList.Add(purchaseExpressOrder);
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
#region 限时任务
|
|
|
|
var orderTimeLimitTaskList = fsql.Select<TimeLimitTask>().Where(t => orderIdList.Contains(t.OrderId)) |
|
|
|
.ToList<TimeLimitTaskResponse>(); |
|
|
|
|
|
|
|
foreach (var order in orderList) |
|
|
|
{ |
|
|
|
foreach (var orderSku in order.ItemList) |
|
|
|
{ |
|
|
|
#region 采购限时任务
|
|
|
|
orderSku.PurchaseTimeLimitTask = orderTimeLimitTaskList.FirstOrDefault(t => t.OrderId == order.Id && |
|
|
|
t.SkuId == orderSku.SkuId && |
|
|
|
t.TaskType == Enums.TimeLimitTaskType.采购任务); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 合格证拟定任务
|
|
|
|
orderSku.CerConfigTimeLimitTask = orderTimeLimitTaskList.FirstOrDefault(t => t.OrderId == order.Id && |
|
|
|
t.SkuId == orderSku.SkuId && |
|
|
|
t.TaskType == Enums.TimeLimitTaskType.合格证拟定任务); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 合格证补充任务
|
|
|
|
orderSku.CerEditTimeLimitTask = orderTimeLimitTaskList.FirstOrDefault(t => t.OrderId == order.Id && |
|
|
|
t.SkuId == orderSku.SkuId && |
|
|
|
t.TaskType == Enums.TimeLimitTaskType.合格证补充任务); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 待核算任务
|
|
|
|
orderSku.CheckComputationTimeLimitTask = orderTimeLimitTaskList.FirstOrDefault(t => t.OrderId == order.Id && |
|
|
|
t.TaskType == Enums.TimeLimitTaskType.待核算任务); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 判断sku的发货状态
|
|
|
|
var purchaseOrder = order.OrderPurchaseInfoList.FirstOrDefault(opi => opi.OrderId == order.Id && opi.BelongSkuIds.Contains(orderSku.SkuId)); |
|
|
|
if (purchaseOrder != null) |
|
|
|
{ |
|
|
|
if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴 && order.IntoStoreType != Enums.IntoStoreType.厂商代发入仓) |
|
|
|
{ |
|
|
|
//验证采购关系
|
|
|
|
var currentSku_PurchaseSkuIdList = orderPurchaseRelationInfoList.Where(opri => opri.OrderId == order.Id && |
|
|
|
opri.PurchaseOrderId == purchaseOrder.PurchaseOrderId && |
|
|
|
opri.BelongSkuId == orderSku.SkuId) |
|
|
|
.Select(x => x.PurchaseSkuId) |
|
|
|
.Distinct() |
|
|
|
.ToList(); |
|
|
|
if (currentSku_PurchaseSkuIdList.Count() > 0) |
|
|
|
{ |
|
|
|
var currentSku_PurchaseSkuList = purchaseOrder.OrderPurchaseSkuInfoList?.Where(posku => currentSku_PurchaseSkuIdList.Contains(posku.PurchaseSkuId)) |
|
|
|
?.ToList(); |
|
|
|
if (currentSku_PurchaseSkuList != null && currentSku_PurchaseSkuList.Count() > 0) |
|
|
|
{ |
|
|
|
var totalCount = currentSku_PurchaseSkuList.Count(); |
|
|
|
var shipCount = currentSku_PurchaseSkuList.Count(posku => !string.IsNullOrEmpty(posku.WaybillNo)); |
|
|
|
if (totalCount == shipCount) |
|
|
|
orderSku.ShipState = 1; |
|
|
|
if (shipCount == 0) |
|
|
|
orderSku.ShipState = 0; |
|
|
|
if (totalCount > shipCount) |
|
|
|
orderSku.ShipState = 2; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
orderSku.ShipState = purchaseOrder.PurchaseExpressOrderList != null && |
|
|
|
purchaseOrder.PurchaseExpressOrderList.Count() > 0 ? 1 : 0; |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
return new OrderListResponse() |
|
|
|
{ |
|
|
@ -281,7 +461,7 @@ namespace BBWYB.Server.Business |
|
|
|
TargetExpressName = peo.TargetExpressName, |
|
|
|
WaybillNo = peo.WaybillNo |
|
|
|
}); |
|
|
|
|
|
|
|
var order = fsql.Select<Order>(request.OrderId).ToOne(); |
|
|
|
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => op.OrderId == request.OrderId && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>(); |
|
|
|
var orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>().Where(opri => opri.OrderId == request.OrderId && opri.SourceSkuId == request.SourceSkuId).ToList(); |
|
|
|
var orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(posku => posku.OrderId == request.OrderId).ToList<OrderPurchaseSkuInfoResponse>(); |
|
|
@ -291,7 +471,7 @@ namespace BBWYB.Server.Business |
|
|
|
#region 处理SKU的快递单
|
|
|
|
foreach (var purchaseExpressOrder in purchaseExpressOrderList) |
|
|
|
{ |
|
|
|
purchaseExpressOrder.CalculationBelongOrderSku(orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList); |
|
|
|
purchaseExpressOrder.CalculationBelongOrderSku(order.IntoStoreType, orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList); |
|
|
|
if (!string.IsNullOrEmpty(purchaseExpressOrder.BelongSkuIds)) |
|
|
|
{ |
|
|
|
if (purchaseExpressOrder.BelongSkuIds.Contains(orderSku.SkuId)) |
|
|
@ -301,37 +481,6 @@ namespace BBWYB.Server.Business |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//foreach (var purchaseOrder in orderPurchaseInfoList)
|
|
|
|
//{
|
|
|
|
// if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴)
|
|
|
|
// {
|
|
|
|
// var currentRelationList = orderPurchaseRelationList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList();
|
|
|
|
|
|
|
|
// var waybillNos = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId &&
|
|
|
|
// currentRelationList.Any(opri => opri.PurchaseSkuId == posku.PurchaseSkuId))
|
|
|
|
// .Select(x => x.WaybillNo)
|
|
|
|
// .ToList();
|
|
|
|
// foreach (var waybillNo in waybillNos)
|
|
|
|
// {
|
|
|
|
// var peo = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == waybillNo);
|
|
|
|
// if (peo != null && !list.Any(x => x.WaybillNo == waybillNo && x.PurchaseOrderId == purchaseOrder.PurchaseOrderId))
|
|
|
|
// list.Add(peo);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// var currentSkuList = orderSkuList.Where(osku => purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).Select(osku => osku.BelongSkuId).Distinct().ToList();
|
|
|
|
// if (currentSkuList.Contains(request.SourceSkuId))
|
|
|
|
// {
|
|
|
|
// var peoList = purchaseExpressOrderList.Where(x => x.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList();
|
|
|
|
// foreach (var peo in peoList)
|
|
|
|
// {
|
|
|
|
// if (!list.Any(x => x.WaybillNo == peo.WaybillNo && x.PurchaseOrderId == purchaseOrder.PurchaseOrderId))
|
|
|
|
// list.Add(peo);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
#endregion
|
|
|
|
return list; |
|
|
|
} |
|
|
@ -356,7 +505,7 @@ namespace BBWYB.Server.Business |
|
|
|
TargetExpressName = peo.TargetExpressName, |
|
|
|
WaybillNo = peo.WaybillNo |
|
|
|
}); |
|
|
|
|
|
|
|
var orderList = fsql.Select<Order>(orderIds).ToList(); |
|
|
|
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => orderIds.Contains(op.OrderId) && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>(); |
|
|
|
var orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>().Where(opri => orderIds.Contains(opri.OrderId)).ToList(); |
|
|
|
var orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(posku => orderIds.Contains(posku.OrderId)).ToList<OrderPurchaseSkuInfoResponse>(); |
|
|
@ -364,7 +513,10 @@ namespace BBWYB.Server.Business |
|
|
|
#region 处理SKU的快递单
|
|
|
|
foreach (var purchaseExpressOrder in purchaseExpressOrderList) |
|
|
|
{ |
|
|
|
purchaseExpressOrder.CalculationBelongOrderSku(orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList); |
|
|
|
var order = orderList.FirstOrDefault(o => o.Id == purchaseExpressOrder.OrderId); |
|
|
|
if (order == null) |
|
|
|
continue; |
|
|
|
purchaseExpressOrder.CalculationBelongOrderSku(order.IntoStoreType, orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
return purchaseExpressOrderList; |
|
|
@ -382,7 +534,11 @@ namespace BBWYB.Server.Business |
|
|
|
Remark = request.Remark |
|
|
|
}); |
|
|
|
|
|
|
|
fsql.Update<Order>(request.OrderId).Set(o => o.OrderState, Enums.OrderState.已取消).ExecuteAffrows(); |
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
fsql.Update<Order>(request.OrderId).Set(o => o.OrderState, Enums.OrderState.已取消).ExecuteAffrows(); |
|
|
|
fsql.Delete<TimeLimitTask>().Where(t => t.OrderId == request.OrderId).ExecuteAffrows(); |
|
|
|
}); |
|
|
|
|
|
|
|
try |
|
|
|
{ |
|
|
@ -448,23 +604,52 @@ namespace BBWYB.Server.Business |
|
|
|
|
|
|
|
var order = orderListResponse.Items.FirstOrDefault(); |
|
|
|
var orderCost = fsql.Select<OrderCost>(request.OrderId).ToOne(); |
|
|
|
var orderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => osc.OrderId == request.OrderId).ToList(); |
|
|
|
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList(); |
|
|
|
|
|
|
|
IList<IUpdate<OrderSku>> updates_orderSku = new List<IUpdate<OrderSku>>(); |
|
|
|
IUpdate<OrderCost> updateOrderCost = null; |
|
|
|
IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>(); |
|
|
|
IList<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>(); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var orderSku in order.OrderSkuList) |
|
|
|
{ |
|
|
|
updates_orderSku.Add(fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.Price, orderSku.SkuPrice) |
|
|
|
.Set(osku => osku.BuyerPayFreight, orderSku.FreightAmount) |
|
|
|
.Set(osku => osku.InPackAmount, orderSku.PackAmount)); |
|
|
|
|
|
|
|
var ocdList = orderCostDetailList.Where(ocd => ocd.SkuId == orderSku.SkuId).ToList(); |
|
|
|
if (ocdList != null && ocdList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var orderCostDetail in ocdList) |
|
|
|
{ |
|
|
|
orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderCostDetail.SkuAmount ?? 0M, |
|
|
|
orderCostDetail.PurchaseFreight ?? 0M, |
|
|
|
orderCostDetail.OutPackAmount ?? 0M, |
|
|
|
orderCostDetail.DeliveryExpressFreight ?? 0M); |
|
|
|
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>(orderCostDetail.Id).Set(ocd => ocd.Profit, orderCostDetail.Profit)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var orderSkuCost = orderSkuCostList.FirstOrDefault(osc => osc.SkuId == orderSku.SkuId); |
|
|
|
if (orderSkuCost != null) |
|
|
|
{ |
|
|
|
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku.SkuPrice * orderSku.Quantity, |
|
|
|
orderSku.FreightAmount, |
|
|
|
orderSku.PackAmount, |
|
|
|
ocdList); |
|
|
|
updateOrderSkuCostList.Add(fsql.Update<OrderSkuCost>(orderSkuCost.Id).Set(osc => osc.Profit, orderSkuCost.Profit)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (orderCost != null) |
|
|
|
{ |
|
|
|
orderCost.CalculationOrderCostCostAndProfit(order.OrderTotalAmount, |
|
|
|
orderCost.SkuAmount ?? 0M, |
|
|
|
orderCost.PurchaseFreight ?? 0M, |
|
|
|
orderCost.OutPackAmount ?? 0M, |
|
|
|
orderCost.DeliveryExpressFreight ?? 0M); |
|
|
|
orderCost.CalculationOrderCostAndProfit(order.OrderTotalAmount, |
|
|
|
orderCost.SkuAmount ?? 0M, |
|
|
|
orderCost.PurchaseFreight ?? 0M, |
|
|
|
orderCost.OutPackAmount ?? 0M, |
|
|
|
orderCost.DeliveryExpressFreight ?? 0M); |
|
|
|
updateOrderCost = fsql.Update<OrderCost>().SetSource(orderCost); |
|
|
|
} |
|
|
|
|
|
|
@ -474,6 +659,7 @@ namespace BBWYB.Server.Business |
|
|
|
fsql.Update<Order>(request.OrderId).Set(o => o.OrderTotalPrice, order.OrderTotalAmount) |
|
|
|
.Set(o => o.OrderSellerPrice, order.OrderProductAmount) |
|
|
|
.Set(o => o.FreightPrice, order.FreightAmount) |
|
|
|
.Set(o => o.InPackAmount, order.PackAmount) |
|
|
|
.ExecuteAffrows(); |
|
|
|
updateOrderCost?.ExecuteAffrows(); |
|
|
|
|
|
|
@ -482,6 +668,14 @@ namespace BBWYB.Server.Business |
|
|
|
foreach (var update in updates_orderSku) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
} |
|
|
|
if (updateOrderCostDetailList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var update in updateOrderCostDetailList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
} |
|
|
|
if (updateOrderSkuCostList.Count() > 0) |
|
|
|
foreach (var update in updateOrderSkuCostList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
}); |
|
|
|
|
|
|
|
#region 通知C端
|
|
|
@ -532,7 +726,7 @@ namespace BBWYB.Server.Business |
|
|
|
updateOrderSku = fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.IsCheck, true); |
|
|
|
|
|
|
|
var oldOrderState = dbOrder.OrderState; |
|
|
|
dbOrder.CalculationOrderState(fsql, orderSkuList, null); |
|
|
|
dbOrder.CalculationOrderState(fsql, out _, orderSkuList, null); |
|
|
|
if (oldOrderState != dbOrder.OrderState) |
|
|
|
updateOrder = fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState); |
|
|
|
|
|
|
@ -556,7 +750,16 @@ namespace BBWYB.Server.Business |
|
|
|
if (Math.Abs(orderCost.Profit ?? 0) > 1M) |
|
|
|
throw new BusinessException("订单利润绝对值不能大于1"); |
|
|
|
|
|
|
|
fsql.Update<Order>(orderId).Set(o => o.OrderState, Enums.OrderState.已完成).ExecuteAffrows(); |
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
fsql.Update<Order>(orderId).Set(o => o.OrderState, Enums.OrderState.已完成).ExecuteAffrows(); |
|
|
|
fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now) |
|
|
|
.Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) |
|
|
|
.Where(t => t.OrderId == orderId) |
|
|
|
.Where(t => t.CompletionTime == null) |
|
|
|
.Where(t => t.TaskType == Enums.TimeLimitTaskType.待核算任务).ExecuteAffrows(); |
|
|
|
}); |
|
|
|
|
|
|
|
SendPurchaseOrderStateToC(orderId, Enums.OrderState.已完成); |
|
|
|
} |
|
|
|
|
|
|
@ -575,5 +778,58 @@ namespace BBWYB.Server.Business |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public OrderCountByStateResponse StatisticsOrderCountByOrderState(long shopId) |
|
|
|
{ |
|
|
|
var noOrderStateList = new List<Enums.OrderState>() |
|
|
|
{ |
|
|
|
Enums.OrderState.已取消, |
|
|
|
Enums.OrderState.已完成 |
|
|
|
}; |
|
|
|
var orderCountGroup = fsql.Select<Order>().Where(o => o.ShopId == shopId) |
|
|
|
.Where(o => !noOrderStateList.Contains(o.OrderState.Value)) |
|
|
|
.GroupBy(o => o.OrderState) |
|
|
|
.ToList(g => new |
|
|
|
{ |
|
|
|
OrderState = g.Key, |
|
|
|
OrderCount = g.Count() |
|
|
|
}); |
|
|
|
|
|
|
|
var childSelect = fsql.Select<OrderSku>().As("osku").Where(osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null); |
|
|
|
var waitConfigCount = fsql.Select<Order>().Where(o => o.ShopId == shopId) |
|
|
|
.Where(o => !noOrderStateList.Contains(o.OrderState.Value)) |
|
|
|
.Where(o => o.IntoStoreType == Enums.IntoStoreType.发回齐越) |
|
|
|
.Where(o => o.IsPurchased == true) |
|
|
|
.Where(o => childSelect.Where(osku => osku.OrderId == o.Id).Any()) |
|
|
|
.Count(); |
|
|
|
|
|
|
|
return new OrderCountByStateResponse() |
|
|
|
{ |
|
|
|
WaitPayCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待付款)?.OrderCount ?? 0, |
|
|
|
WaitPurchaseCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.等待采购 || |
|
|
|
o.OrderState == Enums.OrderState.部分采购)?.OrderCount ?? 0, |
|
|
|
WaitShipmentCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待发货 || |
|
|
|
o.OrderState == Enums.OrderState.部分发货)?.OrderCount ?? 0, |
|
|
|
WaitReceiveCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待收货 || |
|
|
|
o.OrderState == Enums.OrderState.部分收货)?.OrderCount ?? 0, |
|
|
|
WaitCheckCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待验收)?.OrderCount ?? 0, |
|
|
|
WaitComputationCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.待核算)?.OrderCount ?? 0, |
|
|
|
WaitConfigCount = waitConfigCount, |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 齐库推送sku配置状态
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="request"></param>
|
|
|
|
public void QikuPublishOrderSkuPackConfigState(QikuPublishOrderSkuPackConfigStateRequest request) |
|
|
|
{ |
|
|
|
qikuManager.QikuPublishOrderSkuPackConfigState(request); |
|
|
|
} |
|
|
|
|
|
|
|
public void SetSpecialOrder(SetSpecialOrderRequest request) |
|
|
|
{ |
|
|
|
fsql.Update<Order>(request.OrderId).Set(o => o.IsSpecialOrder, request.IsSpecialOrder).ExecuteAffrows(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|