@ -1,6 +1,7 @@
using BBWYB.Common.Http ;
using BBWYB.Common.Log ;
using BBWYB.Common.Models ;
using BBWYB.Server.Business._1688Helper ;
using BBWYB.Server.Business.Extensions ;
using BBWYB.Server.Business.JD ;
using BBWYB.Server.Model ;
@ -22,6 +23,7 @@ using SDKAdapter.PurchasePlatform.Models;
using System.Text ;
using System.Text.RegularExpressions ;
using Yitter.IdGenerator ;
using static SDKAdapter . AdapterEnums ;
namespace BBWYB.Server.Business
{
@ -3377,5 +3379,607 @@ namespace BBWYB.Server.Business
}
return list ;
}
public void WebCreatePurchaseOrder ( WebCreateOrderRequest request )
{
nLogManager . Default ( ) . Info ( $"CreatePurchaseOrder\r\n{JsonConvert.SerializeObject(request)}" ) ;
var dbOrder = fsql . Select < Order > ( request . OrderId ) . ToOne ( ) ;
if ( dbOrder = = null )
throw new BusinessException ( "订单不存在" ) ;
if ( cantPurchaseOrderStateList . Contains ( dbOrder . OrderState . Value ) )
throw new BusinessException ( $"当前订单状态:{dbOrder.OrderState},不允许采购" ) ;
if ( request . Consignee = = null | |
string . IsNullOrEmpty ( request . Consignee . Address ) | |
string . IsNullOrEmpty ( request . Consignee . Mobile ) | |
string . IsNullOrEmpty ( request . Consignee . ContactName ) )
throw new BusinessException ( "缺少收货人信息" ) ;
if ( request . PurchaseAccountList = = null | | request . PurchaseAccountList . Count ( ) = = 0 )
throw new BusinessException ( "缺少采购账号" ) ;
if ( request . CargoParamGroupList = = null | | request . CargoParamGroupList . Count ( ) = = 0 )
throw new BusinessException ( "缺少下单商品参数" ) ;
if ( request . CargoParamGroupList . Any ( g = > string . IsNullOrEmpty ( g . PurchaserId ) ) )
throw new BusinessException ( "缺少采购商Id" ) ;
if ( request . CargoParamGroupList . GroupBy ( c = > c . PurchaserId ) . Any ( g = > g . Count ( ) > 1 ) )
throw new BusinessException ( "提交采购商包含重复" ) ;
//if (string.IsNullOrEmpty(request.WaitPayOrderId))
// throw new BusinessException("缺少待支付订单号");
#region 验证同一个批次中,一个订单sku不能同时拥有多个采购方案
IDictionary < string , long > schemeValidationDictionary = new Dictionary < string , long > ( ) ;
foreach ( var purchaseGroup in request . CargoParamGroupList )
{
foreach ( var cargo in purchaseGroup . CargoParamList )
{
if ( ! schemeValidationDictionary . ContainsKey ( cargo . BelongSkuId ) )
schemeValidationDictionary . TryAdd ( cargo . BelongSkuId , cargo . SchemeId ) ;
if ( schemeValidationDictionary . TryGetValue ( cargo . BelongSkuId , out long schemeId ) )
{
if ( cargo . SchemeId ! = schemeId )
{
throw new BusinessException ( $"订单sku{cargo.BelongSkuId}只允许使用一个采购方案进行下单" ) ;
}
}
}
}
schemeValidationDictionary . Clear ( ) ;
#endregion
string cookies = request . LoginCookies ;
var isRepurchase = fsql . Select < OrderCost > ( dbOrder . Id ) . Any ( ) ;
var orderSkus = fsql . Select < OrderSku > ( ) . Where ( osku = > osku . OrderId = = request . OrderId ) . ToList ( ) ;
var orderPurchaseInfoList = fsql . Select < OrderPurchaseInfo > ( ) . Where ( opi = > opi . OrderId = = request . OrderId & & opi . IsEnabled = = true ) . ToList ( ) ;
var orderCostDetailList = fsql . Select < OrderCostDetail > ( ) . Where ( ocd = > ocd . OrderId = = request . OrderId & & ocd . IsEnabled = = true ) . ToList ( ) ;
var orderSkuCostList = fsql . Select < OrderSkuCost > ( ) . Where ( osc = > osc . OrderId = = request . OrderId ) . ToList ( ) ;
foreach ( var cargoParamGroup in request . CargoParamGroupList )
{
var purchaseOrder = orderPurchaseInfoList . FirstOrDefault ( opi = > opi . PurchaserId = = cargoParamGroup . PurchaserId ) ;
if ( purchaseOrder ! = null )
{
foreach ( var cargoParam in cargoParamGroup . CargoParamList )
{
if ( purchaseOrder . BelongSkuIds . Contains ( cargoParam . BelongSkuId ) )
{
//throw new BusinessException($"订单sku[{cargoParam.BelongSkuId}]已经存在同一个商家[{cargoParamGroup.PurchaserId}][{cargoParamGroup.PurchaserName}]的另一笔采购单中[{purchaseOrder.PurchaseOrderId}],请不要为同一笔订单sku进行同商家采购");
throw new BusinessException ( $"提示:请勿为同一个订单中的sku重复向同一个商家下采购单\r\n重复信息:\r\n- 订单sku:{cargoParam.BelongSkuId}\r\n- 商家:{cargoParamGroup.PurchaserName}" ) ;
}
}
}
}
var extJArray = JsonConvert . DeserializeObject < JArray > ( request . Extensions ) ;
List < OrderCostDetail > insertOrderCostDetails = new List < OrderCostDetail > ( ) ;
List < OrderPurchaseInfo > insertOrderPurchaseInfos = new List < OrderPurchaseInfo > ( ) ;
List < OrderPurchaseSkuInfo > insertOrderPurchaseSkuInfos = new List < OrderPurchaseSkuInfo > ( ) ;
List < IUpdate < PurchaseScheme > > updatePurchaseSchemeList = new List < IUpdate < PurchaseScheme > > ( ) ;
//List<IUpdate<PurchaseSchemeProductSku>> updatePssList = new List<IUpdate<PurchaseSchemeProductSku>>();
List < OrderPurchaseRelationInfo > insertOrderPurchaseRelationInfoList = new List < OrderPurchaseRelationInfo > ( ) ;
List < string > updatePurchaseTimeLimitTaskOrderSkuList = new List < string > ( ) ;
List < IUpdate < Purchaser > > updatePurchaserList = new List < IUpdate < Purchaser > > ( ) ;
List < SkuHistoryPurchaserRelation > insertSkuHistoryPurchaserRelationList = new List < SkuHistoryPurchaserRelation > ( ) ;
List < SkuOptimizationHistory > insertSkuOptimizationHistoryList = new List < SkuOptimizationHistory > ( ) ;
//List<long> updateSkuOptimizationPurhcasementByIdList = new List<long>();
List < QiKuPackTaskSkuPurchaseSchemeIdRequest > notifyQikuPackSchemeParamList = null ;
if ( dbOrder . IntoStoreType = = Enums . IntoStoreType . 发 回 齐 越 )
notifyQikuPackSchemeParamList = new List < QiKuPackTaskSkuPurchaseSchemeIdRequest > ( ) ;
IInsert < OrderCost > insertOrderCost = null ;
IUpdate < OrderCost > updateOrderCost = null ;
List < OrderSkuCost > insertOrderSkuCostList = new List < OrderSkuCost > ( ) ;
IList < IUpdate < OrderSkuCost > > updateOrderSkuCostList = new List < IUpdate < OrderSkuCost > > ( ) ;
List < PP_QueryOrderDetailSkuResponse > createdPurchaseOrderItemList = new List < PP_QueryOrderDetailSkuResponse > ( ) ;
foreach ( var cargoParamGroup in request . CargoParamGroupList )
{
var purchaseAccount = request . PurchaseAccountList . FirstOrDefault ( pa = > pa . PurchasePlatformId = = cargoParamGroup . PurchasePlatform ) ;
if ( purchaseAccount = = null )
throw new BusinessException ( $"缺少{cargoParamGroup.PurchasePlatform}采购平台账号,请在店铺配置中设置" ) ;
var client = ppPlatformClientFactory . GetClient ( ( AdapterEnums . PlatformType ) cargoParamGroup . PurchasePlatform ) ;
var extJson = extJArray . FirstOrDefault ( j = > j . Value < string > ( "PurchaserId" ) = = cargoParamGroup . PurchaserId ) ;
var orderProductParamList = CombineRepeatPurchaseSku ( cargoParamGroup . CargoParamList ) ;
//var createOrderResponse = client.CreateOrder(new PP_CreateOrderRequest()
//{
// AppKey = purchaseAccount.AppKey,
// AppSecret = purchaseAccount.AppSecret,
// AppToken = purchaseAccount.AppToken,
// Consignee = new PP_ConsigneeRequest()
// {
// Address = request.Consignee.Address,
// City = request.Consignee.City,
// ContactName = request.Consignee.ContactName,
// County = request.Consignee.County,
// Mobile = request.Consignee.Mobile,
// Province = request.Consignee.Province,
// TelePhone = request.Consignee.TelePhone,
// Town = request.Consignee.Town
// },
// Platform = (AdapterEnums.PlatformType)purchaseAccount.PurchasePlatformId,
// PurchaseMode = (AdapterEnums.PurchaseMode)request.PurchaseOrderMode,
// Extensions = extJson.Value<string>("OrderTradeTypeCode"),
// Remark = !string.IsNullOrEmpty(cargoParamGroup.Remark) ? cargoParamGroup.Remark : request.Remark,
// OrderProductParamList = orderProductParamList
//});
Collect1688Helper collect1688Helper = new Collect1688Helper ( cookies ) ;
var adress = request . Consignee . Province + request . Consignee . City + request . Consignee . Town + request . Consignee . Address ;
var orderModel = ( Model . Enums . OrderModel ) request . PurchaseOrderMode ;
var prewOrder = collect1688Helper . PrewOrder ( orderProductParamList . ToList ( ) , adress , orderModel , request . Consignee . Mobile , request . Consignee . ContactName ) ;
if ( prewOrder = = null )
{
throw new BusinessException ( $"登录失效,正在重新登陆,登录后点击下单!" ) ;
}
var remark = ! string . IsNullOrEmpty ( cargoParamGroup . Remark ) ? cargoParamGroup . Remark : request . Remark ;
var createOrderResponse = collect1688Helper . CommitOrder ( prewOrder , remark ) ;
if ( ! createOrderResponse . Success )
{
throw new BusinessException ( $"{createOrderResponse.Msg}" ) ;
}
var purchaseOrderId = createOrderResponse . Data ;
var purchaseOrderSimpleInfo = client . QueryOrderDetail ( new PP_QueryOrderDetailRequest ( )
{
AppKey = purchaseAccount . AppKey ,
AppSecret = purchaseAccount . AppSecret ,
AppToken = purchaseAccount . AppToken ,
OrderId = purchaseOrderId
} ) ;
createdPurchaseOrderItemList . AddRange ( purchaseOrderSimpleInfo . ItemList ) ;
//totalPurchaseProductAmount += purchaseOrderSimpleInfo.ProductAmount;
//totalPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount;
#region 创建订单采购关系
foreach ( var cargoParam in cargoParamGroup . CargoParamList )
{
var orderSku = orderSkus . FirstOrDefault ( osku = > osku . SkuId = = cargoParam . BelongSkuId ) ;
insertOrderPurchaseRelationInfoList . Add ( new OrderPurchaseRelationInfo ( )
{
Id = idGenerator . NewLong ( ) ,
BelongSkuId = cargoParam . BelongSkuId ,
CreateTime = DateTime . Now ,
OrderId = request . OrderId ,
PurchaseOrderId = purchaseOrderSimpleInfo . OrderId ,
PurchaseProductId = cargoParam . ProductId ,
PurchaseSkuId = cargoParam . SkuId ,
PurchaseSpecId = cargoParam . SpecId ,
Quantity = cargoParam . Quantity ,
SchemeId = cargoParam . SchemeId ,
SourceSkuId = orderSku ? . BelongSkuId ,
SchemeVersion = cargoParam . SchemeVersion ? ? 1
} ) ;
}
#endregion
#region 等比计算采购成本
var proportionalCalculationResultList = ProportionalCalculationCost ( cargoParamGroup . CargoParamList , purchaseOrderSimpleInfo ) ;
foreach ( var proportionalCalculationResult in proportionalCalculationResultList )
{
var skuId = proportionalCalculationResult . SkuId ;
var orderSku = orderSkus . FirstOrDefault ( osku = > osku . SkuId = = skuId ) ;
var orderCostDetail = new OrderCostDetail ( )
{
Id = idGenerator . NewLong ( ) ,
CreateTime = DateTime . Now ,
DeductionQuantity = orderSku . ItemTotal . Value ,
OrderId = request . OrderId ,
ProductId = orderSku . ProductId ,
PurchaseOrderId = purchaseOrderSimpleInfo . OrderId ,
SkuId = skuId ,
IsEnabled = true
} ;
orderCostDetail . CalculationOrderCostDetailCostAndProfit ( proportionalCalculationResult . ProductAmount ,
proportionalCalculationResult . FreightAmount ,
0 M ,
0 M ) ;
insertOrderCostDetails . Add ( orderCostDetail ) ;
}
#endregion
#region 采购订单信息
var belongSkuIdList = cargoParamGroup . CargoParamList . Select ( c = > c . BelongSkuId ) . Distinct ( ) . ToList ( ) ;
var orderPurchaserInfo = new OrderPurchaseInfo ( )
{
Id = idGenerator . NewLong ( ) ,
OrderId = request . OrderId ,
CreateTime = DateTime . Now ,
PurchaseAccountId = purchaseAccount . Id ,
PurchaseAccountName = purchaseAccount . AccountName ,
PurchaseMethod = Enums . PurchaseMethod . 线 上 采 购 ,
OrderState = Enums . PurchaseOrderState . 待 发 货 ,
PurchaseOrderId = purchaseOrderId ,
PurchasePlatform = cargoParamGroup . PurchasePlatform ,
PurchaserId = cargoParamGroup . PurchaserId ,
PurchaserName = cargoParamGroup . PurchaserName ,
ShopId = request . ShopId ,
BelongSkuIds = string . Join ( "," , belongSkuIdList ) ,
IsEnabled = true ,
Remark = ! string . IsNullOrEmpty ( cargoParamGroup . Remark ) ? cargoParamGroup . Remark : request . Remark ,
UpdateTime = DateTime . Now
} ;
insertOrderPurchaseInfos . Add ( orderPurchaserInfo ) ;
#endregion
#region 采购订单Sku信息
foreach ( var purchaseOrderSku in purchaseOrderSimpleInfo . ItemList )
{
var orderPurchaseSkuInfo = new OrderPurchaseSkuInfo ( )
{
Id = purchaseOrderSku . OrderSkuId ,
CreateTime = DateTime . Now ,
OrderId = request . OrderId ,
PurchaseOrderId = purchaseOrderSimpleInfo . OrderId ,
PurchaseProductId = purchaseOrderSku . ProductId ,
PurchaseSkuId = purchaseOrderSku . SkuId ,
ShopId = request . ShopId ,
PurchasedPrice = purchaseOrderSku . Price ,
PurchasedAmount = purchaseOrderSku . ProductAmount ,
PurchasedItemCount = purchaseOrderSku . Quantity
} ;
insertOrderPurchaseSkuInfos . Add ( orderPurchaseSkuInfo ) ;
}
#endregion
#region 采购限时任务
foreach ( var belongSkuId in belongSkuIdList )
{
if ( ! updatePurchaseTimeLimitTaskOrderSkuList . Any ( x = > x = = belongSkuId ) )
updatePurchaseTimeLimitTaskOrderSkuList . Add ( belongSkuId ) ;
}
#endregion
#region 封装查询齐库合格证接口参数
if ( dbOrder . IntoStoreType = = Enums . IntoStoreType . 发 回 齐 越 )
{
foreach ( var belongSkuId in belongSkuIdList ) //订单skuId
{
var orderSku = orderSkus . FirstOrDefault ( osku = > osku . SkuId = = belongSkuId ) ;
if ( orderSku = = null )
continue ;
var cargoParam = cargoParamGroup . CargoParamList . FirstOrDefault ( c = > c . BelongSkuId = = belongSkuId ) ;
if ( cargoParam = = null )
continue ;
if ( ! notifyQikuPackSchemeParamList . Any ( x = > x . SkuId = = orderSku . BelongSkuId ) )
{
notifyQikuPackSchemeParamList . Add ( new QiKuPackTaskSkuPurchaseSchemeIdRequest ( )
{
SkuId = orderSku . BelongSkuId ,
SkuPurchaseSchemeId = cargoParam . SchemeId . ToString ( ) ,
SchemeVersion = cargoParam . SchemeVersion ? ? 1
} ) ;
}
}
}
#endregion
}
#region 更新采购方案/配件
{
var allCargoParamList = new List < CargoParamRequest > ( ) ;
request . CargoParamGroupList . ForEach ( x = > allCargoParamList . AddRange ( x . CargoParamList ) ) ;
#region 更新采购方案
{
var cargoParamGroupsBySchemeList = allCargoParamList . GroupBy ( c = > c . SchemeId ) ;
foreach ( var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList )
{
var schemeId = cargoParamGroupsByScheme . Key ;
var skuId = cargoParamGroupsByScheme . FirstOrDefault ( ) . BelongSkuId ;
var skuItemCount = orderSkus . FirstOrDefault ( osku = > osku . SkuId = = skuId ) ? . ItemTotal ? ? 0 ;
//var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId)
// .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1))
// .DefaultIfEmpty(0M)
// .First());
var lastPurchasePriceCost = cargoParamGroupsByScheme . Sum ( cargoParam = >
{
return ( createdPurchaseOrderItemList . FirstOrDefault ( x = > x . SkuId = = cargoParam . SkuId ) ? . Price ? ? 0 ) * ( cargoParam . PurchaseRatio ? ? 1 ) ;
} ) ;
var purchasedAmount = insertOrderCostDetails . Where ( ocd = > ocd . SkuId = = skuId ) . Sum ( ocd = > ocd . SkuAmount ) ;
var update = fsql . Update < PurchaseScheme > ( schemeId ) . Set ( ps = > ps . LastPurchaseTime , DateTime . Now )
. Set ( ps = > ps . LastPurchasePriceCost , lastPurchasePriceCost )
. Set ( ps = > ps . PurchasedCount + 1 )
. Set ( ps = > ps . PurchasedItemCount + skuItemCount )
. Set ( ps = > ps . PurchasedAmount + purchasedAmount ) ;
updatePurchaseSchemeList . Add ( update ) ;
}
}
#endregion
//#region 更新采购配件
//{
// foreach (var cargoParam in allCargoParamList)
// {
// var createOrderItem = createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId);
// if (createOrderItem != null)
// {
// var update = fsql.Update<PurchaseSchemeProductSku>()
// .Set(pss => pss.LastPurchasePriceCost, createOrderItem.Price)
// .Where(pss => pss.PurchaseSkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId);
// updatePssList.Add(update);
// }
// }
//}
//#endregion
}
#endregion
#region 更新采购商
{
var purchaserIdList = new List < string > ( ) ;
var purchaserSkuDictionary = new Dictionary < string , List < string > > ( ) ;
request . CargoParamGroupList . ForEach ( x = >
{
purchaserIdList . Add ( x . PurchaserId ) ;
purchaserSkuDictionary . Add ( x . PurchaserId , x . CargoParamList . Select ( c = > c . BelongSkuId ) . Distinct ( ) . ToList ( ) ) ;
} ) ;
//采购商的sku采购关系表
var dbSkuAndPurchaserRelationList = fsql . Select < SkuHistoryPurchaserRelation > ( )
. Where ( spr = > purchaserIdList . Contains ( spr . PurchaserId ) & & spr . ShopId = = request . ShopId )
. ToList ( ) ;
var dbPurchaserList = fsql . Select < Purchaser > ( purchaserIdList ) . ToList ( ) ;
foreach ( var purchaserId in purchaserIdList )
{
purchaserSkuDictionary . TryGetValue ( purchaserId , out var fromRequestSkuList ) ;
var fromDBSkuList = dbSkuAndPurchaserRelationList . Where ( x = > x . PurchaserId = = purchaserId )
. Select ( x = > x . SkuId )
. Distinct ( )
. ToList ( ) ;
var exceptSkuList = fromRequestSkuList . Except ( fromDBSkuList ) ;
var newSkuRelationCount = exceptSkuList . Count ( ) ;
if ( newSkuRelationCount > 0 )
{
insertSkuHistoryPurchaserRelationList . AddRange ( exceptSkuList . Select ( x = > new SkuHistoryPurchaserRelation ( )
{
Id = idGenerator . NewLong ( ) ,
CreateTime = DateTime . Now ,
PurchaserId = purchaserId ,
ShopId = request . ShopId ,
SkuId = x
} ) ) ;
}
#region 更新采购商归属
var purchaser = dbPurchaserList . FirstOrDefault ( p = > p . Id = = purchaserId ) ;
if ( purchaser ! = null & & ! string . IsNullOrEmpty ( purchaser . BelongBargainTeamId ) & & purchaser . BelongType = = Enums . PurchaserBelongType . 临 时 )
{
var updatePurchaser = fsql . Update < Purchaser > ( purchaserId ) . Set ( p = > p . BelongType , Enums . PurchaserBelongType . 永 久 ) ;
updatePurchaserList . Add ( updatePurchaser ) ;
}
#endregion
}
}
#endregion
#region 订单Sku成本
var allOrderCostDetail = orderCostDetailList . Union ( insertOrderCostDetails ) . ToList ( ) ;
foreach ( var orderSku in orderSkus )
{
var orderSkuCost = orderSkuCostList . FirstOrDefault ( osc = > osc . SkuId = = orderSku . SkuId ) ;
if ( orderSkuCost = = null )
{
orderSkuCost = new OrderSkuCost ( )
{
Id = idGenerator . NewLong ( ) ,
CreateTime = DateTime . Now ,
OrderId = request . OrderId ,
SkuId = orderSku . SkuId
} ;
orderSkuCost . CalculationOrderSkuCostAndProfit ( orderSku , allOrderCostDetail ) ;
insertOrderSkuCostList . Add ( orderSkuCost ) ;
}
else
{
orderSkuCost . CalculationOrderSkuCostAndProfit ( orderSku , allOrderCostDetail ) ;
var update = fsql . Update < OrderSkuCost > ( ) . SetSource ( orderSkuCost ) ;
updateOrderSkuCostList . Add ( update ) ;
}
}
#endregion
#region 订单成本
var orderCost = new OrderCost ( )
{
OrderId = request . OrderId ,
CreateTime = DateTime . Now ,
IsManualEdited = false
} ;
//var totalPurchaseProductAmount = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.SkuAmount);
//var totalPurchaseFreight = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.PurchaseFreight);
//orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value,
// totalPurchaseProductAmount ?? 0M,
// totalPurchaseFreight ?? 0M,
// 0M,
// 0M);
var allOrderSkuCostList = orderSkuCostList . Union ( insertOrderSkuCostList ) . ToList ( ) ;
orderCost . CalculationOrderCostAndProfit ( dbOrder . OrderTotalPrice . Value , allOrderSkuCostList ) ;
if ( ! isRepurchase )
{
insertOrderCost = fsql . Insert ( orderCost ) ;
}
else
{
updateOrderCost = fsql . Update < OrderCost > ( ) . SetSource ( orderCost ) . IgnoreColumns ( a = > new { a . CreateTime } ) ;
}
#endregion
#region 订单状态
dbOrder . CalculationOrderState ( fsql , orderSkus , orderPurchaseInfoList . Union ( insertOrderPurchaseInfos ) . ToList ( ) ) ;
#endregion
#region 通知C端状态
Task . Factory . StartNew ( ( ) = > SendPurchaseOrderStateToC ( dbOrder . Id , dbOrder . OrderState . Value ) , CancellationToken . None , TaskCreationOptions . None , taskSchedulerManager . PurchaseOrderCallbackTaskScheduler ) ;
#endregion
#region 查询齐库合格证
if ( dbOrder . IntoStoreType = = Enums . IntoStoreType . 发 回 齐 越 & &
notifyQikuPackSchemeParamList ! = null & &
notifyQikuPackSchemeParamList . Count ( ) > 0 )
{
Task . Factory . StartNew ( ( ) = > qiKuManager . SearchCerConfigured ( dbOrder , notifyQikuPackSchemeParamList , orderSkus ) , CancellationToken . None , TaskCreationOptions . None , taskSchedulerManager . PurchaseOrderCallbackTaskScheduler ) ;
}
#endregion
//#region 创建优化历史
//{
// //本批次在线采购的订单sku集合
// var allBelongSkuIdList = request.CargoParamGroupList.SelectMany(cg => cg.CargoParamList.Select(c => c.BelongSkuId)).Distinct().ToList();
// //var optimizationSkuIdList = orderSkus.Where(osku => osku.IsOptimizationCompleted == 1 && allBelongSkuIdList.Contains(osku.SkuId))
// // .Select(osku => osku.SkuId)
// // .ToList();
// var optimizationTaskList = fsql.Select<SkuOptimizationTask>()
// .Where(s => allBelongSkuIdList.Contains(s.SkuId) &&
// s.IsOptimizationCompleted == true &&
// s.IsPurchasementCompleted == false)
// .ToList();
// var optimizationSkuIdList = optimizationTaskList.Select(s => s.SkuId).Distinct().ToList();
// if (optimizationSkuIdList.Count() > 0)
// {
// //优化历史
// var optimizationHistoryList = fsql.Select<SkuOptimizationHistory>()
// .Where(s1 => s1.ShopId == request.ShopId && optimizationSkuIdList.Contains(s1.SkuId))
// .GroupBy(s1 => s1.SkuId)
// .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) })
// .From<SkuOptimizationHistory>()
// .InnerJoin((s1, s2) => s1.MaxId == s2.Id)
// .ToList((s1, s2) => s2);
// foreach (var optimizationSkuId in optimizationSkuIdList)
// {
// var orderSkuCost = allOrderSkuCostList.FirstOrDefault(x => x.SkuId == optimizationSkuId);
// if (orderSkuCost == null)
// continue;
// var orderSku = orderSkus.FirstOrDefault(x => x.SkuId == optimizationSkuId);
// var lastHistory = optimizationHistoryList.FirstOrDefault(x => x.SkuId == optimizationSkuId);
// var currentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal;
// var ratio = (lastHistory?.LastPurchasePrice ?? 0) == 0 ? 0 : 1 - currentPurchasePrice / lastHistory.LastPurchasePrice;
// var newOptimizationHistory = new SkuOptimizationHistory()
// {
// Id = idGenerator.NewLong(),
// CreateTime = DateTime.Now,
// CurrentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal,
// ProductId = orderSku.ProductId,
// ShopId = request.ShopId,
// SkuId = optimizationSkuId,
// LastPurchasePrice = lastHistory?.LastPurchasePrice ?? 0,
// OptimizationRatio = ratio,
// TriggerOptimizationReason = orderSku.TriggerOptimizationReason
// };
// insertSkuOptimizationHistoryList.Add(newOptimizationHistory);
// var skuOptimizationTask = optimizationTaskList.FirstOrDefault(x => x.SkuId == optimizationSkuId);
// if (skuOptimizationTask != null)
// updateSkuOptimizationPurhcasementByIdList.Add(skuOptimizationTask.Id);
// }
// }
//}
//#endregion
fsql . Transaction ( ( ) = >
{
if ( updatePurchaseTimeLimitTaskOrderSkuList . Count ( ) > 0 )
{
fsql . Update < TimeLimitTask > ( ) . Set ( t = > t . CompletionTime , DateTime . Now )
. SetIf ( dbOrder . PayTime ! = null , t = > t . IsTimely = = ( DateTime . Now < t . ExpirationTime ? true : false ) )
. Where ( t = > t . OrderId = = request . OrderId )
. Where ( t = > updatePurchaseTimeLimitTaskOrderSkuList . Contains ( t . SkuId ) )
. Where ( t = > t . CompletionTime = = null )
. Where ( t = > t . TaskType = = Enums . TimeLimitTaskType . 采 购 任 务 )
. ExecuteAffrows ( ) ;
}
if ( insertOrderCostDetails . Count ( ) > 0 )
fsql . Insert ( insertOrderCostDetails ) . ExecuteAffrows ( ) ;
if ( insertOrderPurchaseInfos . Count ( ) > 0 )
fsql . Insert ( insertOrderPurchaseInfos ) . ExecuteAffrows ( ) ;
if ( insertOrderPurchaseSkuInfos . Count ( ) > 0 )
fsql . Insert ( insertOrderPurchaseSkuInfos ) . ExecuteAffrows ( ) ;
if ( insertOrderPurchaseRelationInfoList . Count ( ) > 0 )
fsql . Insert ( insertOrderPurchaseRelationInfoList ) . ExecuteAffrows ( ) ;
if ( insertSkuHistoryPurchaserRelationList . Count ( ) > 0 )
fsql . Insert ( insertSkuHistoryPurchaserRelationList ) . ExecuteAffrows ( ) ;
if ( insertSkuOptimizationHistoryList . Count ( ) > 0 )
fsql . Insert ( insertSkuOptimizationHistoryList ) . ExecuteAffrows ( ) ;
updateOrderCost ? . ExecuteAffrows ( ) ;
insertOrderCost ? . ExecuteAffrows ( ) ;
if ( updatePurchaseSchemeList . Count ( ) > 0 )
{
foreach ( var update in updatePurchaseSchemeList )
update . ExecuteAffrows ( ) ;
}
//if (updatePssList.Count() > 0)
//{
// foreach (var update in updatePssList)
// update.ExecuteAffrows();
//}
fsql . Update < Order > ( request . OrderId ) . Set ( o = > o . OrderState , dbOrder . OrderState )
. SetIf ( ! string . IsNullOrEmpty ( request . Remark ) , o = > o . PurchaseRemark , request . Remark )
. Set ( o = > o . IsPurchased , true )
. ExecuteAffrows ( ) ;
if ( insertOrderSkuCostList . Count ( ) > 0 )
fsql . Insert ( insertOrderSkuCostList ) . ExecuteAffrows ( ) ;
if ( updateOrderSkuCostList . Count ( ) > 0 )
{
foreach ( var update in updateOrderSkuCostList )
update . ExecuteAffrows ( ) ;
}
//if (updateSkuOptimizationPurhcasementByIdList.Count() > 0)
// fsql.Update<SkuOptimizationTask>(updateSkuOptimizationPurhcasementByIdList).Set(s => s.IsPurchasementCompleted, true).ExecuteAffrows();
if ( updatePurchaserList . Count ( ) > 0 )
{
foreach ( var update in updatePurchaserList )
update . ExecuteAffrows ( ) ;
}
} ) ;
//#region 更新采购方案最新价格
//Task.Factory.StartNew(() =>
//{
// try
// {
// purchaseSchemeBusiness.RefreshPurchaseScheme(new RefreshSchemeRequest()
// {
// SchemeIdList = updatePurchaseTimeSchemeIdList
// });
// }
// catch { }
//}, CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
//#endregion
}
}
}