using BBWY.Common.Http ;
using BBWY.Common.Models ;
using BBWY.Server.Business.Extensions ;
using BBWY.Server.Model ;
using BBWY.Server.Model.Db ;
using BBWY.Server.Model.Db.Mds ;
using BBWY.Server.Model.Dto ;
using FreeSql ;
using Jd.Api.Request ;
using Microsoft.Extensions.Caching.Memory ;
using Microsoft.Extensions.Options ;
using Newtonsoft.Json ;
using System ;
using System.Collections.Concurrent ;
using System.Collections.Generic ;
using System.IO ;
using System.Linq ;
using System.Net.Http ;
using System.Reflection ;
using System.Threading ;
using System.Threading.Tasks ;
namespace BBWY.Server.Business
{
public class TestBusiness : BasePlatformRelayBusiness , IDenpendency
{
private FreeSqlMultiDBManager freeSqlMultiDBManager ;
private VenderBusiness venderBusiness ;
private IFreeSql fsql ;
private OrderSyncBusiness orderSyncBusiness ;
private TaskSchedulerManager taskSchedulerManager ;
private PurchaseOrderBusiness purchaseOrderBusiness ;
private IMemoryCache memoryCache ;
public TestBusiness ( RestApiService restApiService ,
IOptions < GlobalConfig > options ,
FreeSqlMultiDBManager freeSqlMultiDBManager ,
VenderBusiness venderBusiness ,
YunDingBusiness yunDingBusiness ,
IFreeSql fsql ,
OrderSyncBusiness orderSyncBusiness ,
TaskSchedulerManager taskSchedulerManager ,
PurchaseOrderBusiness purchaseOrderBusiness ,
IMemoryCache memoryCache ) : base ( restApiService , options , yunDingBusiness )
{
this . freeSqlMultiDBManager = freeSqlMultiDBManager ;
this . venderBusiness = venderBusiness ;
this . fsql = fsql ;
this . orderSyncBusiness = orderSyncBusiness ;
this . taskSchedulerManager = taskSchedulerManager ;
this . purchaseOrderBusiness = purchaseOrderBusiness ;
this . memoryCache = memoryCache ;
}
public void SyncVenderId ( )
{
var noVenderShops = freeSqlMultiDBManager . MDSfsql . Select < Shops > ( ) . Where ( s = > ! string . IsNullOrEmpty ( s . AppToken ) & & ! string . IsNullOrEmpty ( s . ShopId ) & & string . IsNullOrEmpty ( s . VenderId ) ) . ToList ( ) ;
//IList < IUpdate < Shops >> updateShops = new List<IUpdate<Shops>>();
foreach ( var noVenderShop in noVenderShops )
{
if ( string . IsNullOrEmpty ( noVenderShop . AppKey ) )
{
}
var venderResponse = venderBusiness . GetVenderInfo ( new Model . Dto . PlatformRequest ( )
{
AppKey = noVenderShop . AppKey ,
AppSecret = noVenderShop . AppSecret ,
AppToken = noVenderShop . AppToken ,
Platform = ( Enums . Platform ) noVenderShop . PlatformId
} ) ;
freeSqlMultiDBManager . MDSfsql . Update < Shops > ( noVenderShop . Id ) . Set ( s = > s . VenderId , venderResponse . VenderId ) . ExecuteAffrows ( ) ;
}
}
public void StatisticsProduct ( )
{
var shopList = venderBusiness . GetShopList ( platform : Enums . Platform . 京 东 ) ;
var list = new List < string > ( ) ;
foreach ( var shop in shopList )
{
long shopId = long . Parse ( shop . ShopId ) ;
var productCount = fsql . Select < Product > ( ) . Where ( p = > p . ShopId = = shopId )
. Where ( p = > p . State = = 8 )
. Count ( ) ;
var productSkuCount = fsql . Select < ProductSku > ( ) . Where ( p = > p . ShopId = = shopId )
. Where ( p = > p . State = = 1 )
. Count ( ) ;
var jpspu_sql = $"select count(1) as Count,t.ShopId from (select max(osku1.Id) as oskuId,max(osku1.CreateTime) as maxTime,osku1.ProductId,o.ShopId from OrderSku osku1 inner join `Order` o on osku1.OrderId=o.Id where o.OrderState !=6 and o.IsGift=0 and o.StartTime>='2022-05-01' and o.ShopId='{shopId}' Group By osku1.ProductId,o.ShopId order by maxTime desc,osku1.ProductId desc,o.ShopId desc) as t inner join orderSku osku on t.oskuId=osku.Id inner join `order` o on osku.OrderId=o.Id inner join product p on t.ProductId = p.Id where o.StorageType in (0,1) and p.state=8 group by t.ShopId" ;
//京配spu数
var jpspu = fsql . Ado . QuerySingle < JPCount > ( jpspu_sql ) ;
var jpsku_sql = $"select count(1) as Count,t.ShopId from (select max(osku1.Id) as oskuId,max(osku1.CreateTime) as maxTime,osku1.SkuId,o.ShopId from OrderSku osku1 inner join `Order` o on osku1.OrderId=o.Id where o.OrderState !=6 and o.IsGift=0 and o.StartTime>='2022-05-01' and o.ShopId='{shopId}' Group By osku1.SkuId,o.ShopId order by maxTime desc,osku1.SkuId desc,o.ShopId desc) as t inner join orderSku osku on t.oskuId=osku.Id inner join `order` o on osku.OrderId=o.Id inner join productsku psku on t.SkuId = psku.Id where o.StorageType in (0,1) and psku.State=1 group by t.ShopId" ;
var jpsku = fsql . Ado . QuerySingle < JPCount > ( jpsku_sql ) ;
//list.Add($"{shop.ShopName},{productCount},{productSkuCount},{productSkuCount}/{productCount},{jpspu?.Count ?? 0},{jpsku?.Count ?? 0},{(productCount == 0 ? 0 : Math.Round(1.0 * jpspu?.Count ?? 0 / productCount * 100, 2))}%,{(productSkuCount == 0 ? 0 : Math.Round(1.0 * jpsku?.Count ?? 0 / productSkuCount * 100, 2))}%");
var jpspuCount = jpspu ? . Count ? ? 0 ;
var jpskuCount = jpsku ? . Count ? ? 0 ;
var jpspuPercent = productCount = = 0 ? 0 : Math . Round ( 1.0 * jpspuCount / productCount * 1 0 0 , 2 ) ;
var jpskuPercent = productSkuCount = = 0 ? 0 : Math . Round ( 1.0 * jpskuCount / productSkuCount * 1 0 0 , 2 ) ;
list . Add ( $"{shop.ShopName},{productCount},{productSkuCount},{productSkuCount}/{productCount},{jpspuCount},{jpskuCount},{jpspuPercent}%,{jpskuPercent}%" ) ;
}
list . Insert ( 0 , "店铺,SPU数,SKU数,SKU/SPU,京配SPU数,京配SKU数,京配SPU占比,京配SKU占比" ) ;
var filePath = Path . Combine ( AppContext . BaseDirectory , "result.csv" ) ;
File . WriteAllLines ( filePath , list , System . Text . Encoding . UTF8 ) ;
}
public void XiuFu ( )
{
var st = DateTime . Parse ( "2023-09-01" ) ;
var orderList = fsql . Select < OrderCoupon , Order > ( ) . InnerJoin ( ( oc , o ) = > oc . OrderId = = o . Id )
. Where ( ( oc , o ) = > o . OrderState ! = Enums . OrderState . 已 取 消 & & o . StartTime > = st & & o . PreferentialAmount = = 0 )
. GroupBy ( ( oc , o ) = > oc . OrderId )
. ToList ( g = > new Order
{
Id = g . Key ,
PreferentialAmount = g . Sum ( g . Value . Item1 . CouponPrice )
} ) ;
List < IUpdate < Order > > updateOrderList = new List < IUpdate < Order > > ( ) ;
var totalCount = orderList . Count ( ) ;
for ( var i = 0 ; i < totalCount ; i + + )
{
var order = orderList [ i ] ;
updateOrderList . Add ( fsql . Update < Order > ( order . Id ) . Set ( o = > o . PreferentialAmount , order . PreferentialAmount ) ) ;
if ( updateOrderList . Count ( ) = = 5 0 )
{
Console . WriteLine ( $"执行数据库更新 {i}/{totalCount}" ) ;
fsql . Transaction ( ( ) = >
{
foreach ( var update in updateOrderList )
update . ExecuteAffrows ( ) ;
} ) ;
updateOrderList . Clear ( ) ;
}
}
if ( updateOrderList . Count ( ) > 0 )
{
fsql . Transaction ( ( ) = >
{
foreach ( var update in updateOrderList )
update . ExecuteAffrows ( ) ;
} ) ;
updateOrderList . Clear ( ) ;
}
Console . WriteLine ( "更新完毕" ) ;
}
public void RepairSkuDetailAndSkuGriooProfit ( RepairSkuDetailAndSkuGriooProfit request )
{
request . EndTime = request . EndTime . Date . AddDays ( 1 ) . AddSeconds ( - 1 ) ;
var banedList = new List < string > ( )
{
"森王汽车用品专营店" ,
"森王玩具专营店" ,
"广发玩具专营店" ,
"广发汽车用品专营店" ,
"言义汽车用品专营店" ,
"杰博玩具专营店" ,
"安吉玩具专营店" ,
"布莱特玩具专营店" ,
"畅阳汽车用品专营店" ,
"熊猴汽车用品专营店" ,
"布莱特汽车用品专营店" ,
"越驭玩具专营店" ,
"言义玩具专营店" ,
"瑞源汽车用品专营店" ,
"熊猴玩具专营店" ,
"奥德汽车用品专营店" ,
"创天户外专营店" ,
"桑妮玩具专营店" ,
"瑞源玩具专营店"
} ;
var shopList = venderBusiness . GetShopList ( request . ShopId , Enums . Platform . 京 东 ) ;
//var shopIndex = 0;
foreach ( var shop in shopList )
{
Task . Factory . StartNew ( ( ) = >
{
Console . WriteLine ( shop . ShopName ) ;
//shopIndex++;
//Console.WriteLine($"shopProgress {shopIndex}/{shopList.Count()}");
var shopId = long . Parse ( shop . ShopId ) ;
if ( banedList . Contains ( shop . ShopName ) )
return ;
var orderIdList = fsql . Select < Order > ( )
. Where ( o = > o . ShopId = = shopId & &
o . OrderState ! = Enums . OrderState . 已 取 消 & &
o . StorageType ! = null & & o . StorageType ! = Enums . StorageType . SD & &
o . StartTime > = request . StartTime & &
o . StartTime < = request . EndTime )
. WhereIf ( ! string . IsNullOrEmpty ( request . OrderId ) , o = > o . Id = = request . OrderId )
. WhereIf ( request . OrderIdList ! = null & & request . OrderIdList . Count ( ) > 0 , o = > request . OrderIdList . Contains ( o . Id ) )
. OrderByDescending ( o = > o . StartTime )
. ToList ( o = > o . Id ) ;
if ( orderIdList . Count ( ) = = 0 )
return ;
fsql . Transaction ( ( ) = >
{
fsql . Delete < OrderTotalInfo > ( orderIdList ) . ExecuteAffrows ( ) ;
fsql . Delete < OrderCoupon_New > ( ) . Where ( on = > orderIdList . Contains ( on . OrderId ) ) . ExecuteAffrows ( ) ;
fsql . Delete < OrderPromotion > ( ) . Where ( op = > orderIdList . Contains ( op . OrderId ) ) . ExecuteAffrows ( ) ;
fsql . Update < OrderSku > ( ) . Set ( osku = > osku . ShouldPay , 0 ) . Where ( osku = > orderIdList . Contains ( osku . OrderId ) ) . ExecuteAffrows ( ) ;
} ) ;
for ( var i = 0 ; i < orderIdList . Count ( ) ; i + + )
{
var orderId = orderIdList [ i ] ;
orderSyncBusiness . SyncOrder ( shop , orderId ) ;
Console . WriteLine ( $"SyncOrder {shop.ShopName},SyncProgress {i + 1}/{orderIdList.Count()}" ) ;
}
var orderList = fsql . Select < Order > ( orderIdList ) . ToList ( ) ;
var orderSkuList = fsql . Select < OrderSku > ( ) . Where ( osku = > osku . Price > 0 & & orderIdList . Contains ( osku . OrderId ) ) . ToList ( ) ;
var orderCostDetailList = fsql . Select < OrderCostDetail > ( ) . Where ( ocd = > orderIdList . Contains ( ocd . OrderId ) & & ocd . IsEnabled = = true ) . ToList ( ) ;
var orderCostList = fsql . Select < OrderCost > ( orderIdList ) . ToList ( ) ;
var afterOrderList = fsql . Select < AfterSaleOrder > ( ) . Where ( af = > orderIdList . Contains ( af . OrderId ) ) . ToList ( ) ;
var orderTotalList = fsql . Select < OrderTotalInfo > ( ) . Where ( on = > orderIdList . Contains ( on . Id ) ) . ToList ( ) ;
var orderIndex = 0 ;
foreach ( var order in orderList )
{
orderIndex + + ;
Console . WriteLine ( $"Calculation {shop.ShopName}, CalculationProgress {orderIndex}/{orderList.Count()}" ) ;
var currentOrderCostDetailList = orderCostDetailList . Where ( ocd = > ocd . OrderId = = order . Id ) . ToList ( ) ;
if ( currentOrderCostDetailList . Count ( ) > 0 )
{
List < IUpdate < OrderCostDetail > > updateOrderCostDetailList = new List < IUpdate < OrderCostDetail > > ( ) ;
var currentOrderSkuList = orderSkuList . Where ( osku = > osku . OrderId = = order . Id ) . ToList ( ) ;
foreach ( var orderSku in currentOrderSkuList )
{
var ocd = currentOrderCostDetailList . FirstOrDefault ( x = > x . SkuId = = orderSku . SkuId ) ;
if ( ocd ! = null )
{
ocd . CalculationSkuGrossProfit ( orderSku . ShouldPay ? ? 0 M ,
orderSku . PingTaiChengDanYouHuiQuan ? ? 0 M ,
orderSku . SuperRedEnvelope ? ? 0 M ,
orderSku . XianPinLeiDongQuan ? ? 0 M ,
orderSku . VenderFee ? ? 0 M ,
orderSku . JingDou ? ? 0 M ,
orderSku . DongQuan ? ? 0 M ,
orderSku . Balance ? ? 0 M ,
shop . PlatformCommissionRatio ? ? 0.05 M ) ;
var update = fsql . Update < OrderCostDetail > ( ocd . Id ) . Set ( x = > x . SkuGrossProfit , ocd . SkuGrossProfit ) ;
updateOrderCostDetailList . Add ( update ) ;
}
}
var currentAfterOrderList = afterOrderList . Where ( af = > af . OrderId = = order . Id ) . ToList ( ) ;
var orderTotal = orderTotalList . FirstOrDefault ( on = > on . Id = = order . Id ) ;
var orderCost = orderCostList . FirstOrDefault ( oc = > oc . OrderId = = order . Id ) ;
if ( orderCost ! = null & & orderTotal ! = null )
{
var actualAmount = order . OrderSellerPrice + order . FreightPrice + ( order . PingTaiChengDanYouHuiQuan ? ? 0 M ) ;
orderCost . CalculationOrderProfitAndCost ( actualAmount , currentAfterOrderList ) ;
if ( updateOrderCostDetailList . Count ( ) > 0 )
{
fsql . Transaction ( ( ) = >
{
foreach ( var update in updateOrderCostDetailList )
update . ExecuteAffrows ( ) ;
fsql . Update < OrderCost > ( orderCost . OrderId ) . Set ( oc = > oc . Profit , orderCost . Profit )
. Set ( oc = > oc . PlatformCommissionAmount , orderCost . PlatformCommissionAmount ) . ExecuteAffrows ( ) ;
} ) ;
}
}
}
}
} , CancellationToken . None , TaskCreationOptions . LongRunning , taskSchedulerManager . RepairOrderTaskScheduler ) ;
}
}
public void RepairOrderProfit ( )
{
var startTime = DateTime . Parse ( "2023-12-12" ) ;
var orderList = fsql . Select < Order > ( ) . Where ( o = > o . IsGift = = false & &
o . OrderState ! = Enums . OrderState . 已 取 消 & &
o . StorageType = = Enums . StorageType . 本 地 自 发 & &
o . StartTime > = startTime )
. ToList ( ) ;
var shopList = venderBusiness . GetShopList ( platform : Enums . Platform . 京 东 ) ;
var orderIdList = orderList . Select ( o = > o . Id ) . ToList ( ) ;
var orderCostList = fsql . Select < OrderCost > ( orderIdList ) . ToList ( ) ;
var orderSkuList = fsql . Select < OrderSku > ( ) . Where ( osku = > orderIdList . Contains ( osku . OrderId ) & & osku . Price > 0 ) . ToList ( ) ;
var orderCostDetailList = fsql . Select < OrderCostDetail > ( ) . Where ( ocd = > orderIdList . Contains ( ocd . OrderId ) & & ocd . IsEnabled = = true & & ocd . IsEstimateCost = = false ) . ToList ( ) ;
List < IUpdate < OrderCost > > updateList = new List < IUpdate < OrderCost > > ( ) ;
List < IUpdate < OrderCostDetail > > updateDetailList = new List < IUpdate < OrderCostDetail > > ( ) ;
int index = 0 ;
foreach ( var orderCost in orderCostList )
{
index + + ;
Console . WriteLine ( $"{DateTime.Now} OrderProgress {index}/{orderCostList.Count()}" ) ;
var order = orderList . FirstOrDefault ( o = > o . Id = = orderCost . OrderId ) ;
if ( order = = null )
continue ;
var shop = shopList . FirstOrDefault ( s = > s . ShopId = = order . ShopId . ToString ( ) ) ;
var currentOCDList = orderCostDetailList . Where ( ocd = > ocd . OrderId = = orderCost . OrderId ) . ToList ( ) ;
var currentOrderSkuList = orderSkuList . Where ( osku = > osku . OrderId = = orderCost . OrderId ) . ToList ( ) ;
foreach ( var ocd in currentOCDList )
{
var osku = currentOrderSkuList . FirstOrDefault ( x = > x . SkuId = = ocd . SkuId ) ;
if ( osku = = null )
continue ;
ocd . CalculationSkuGrossProfit ( osku . ShouldPay ? ? 0 M ,
osku . PingTaiChengDanYouHuiQuan ? ? 0 M ,
osku . SuperRedEnvelope ? ? 0 M ,
osku . XianPinLeiDongQuan ? ? 0 M ,
osku . VenderFee ? ? 0 M ,
osku . JingDou ? ? 0 M ,
osku . DongQuan ? ? 0 M ,
osku . Balance ? ? 0 M ,
shop . PlatformCommissionRatio ? ? 0.05 M ) ;
var update = fsql . Update < OrderCostDetail > ( ) . SetSource ( ocd ) ;
updateDetailList . Add ( update ) ;
}
orderCost . PurchaseAmount = currentOCDList . Sum ( ocd = > ocd . TotalCost ) ;
orderCost . DeliveryExpressFreight = currentOCDList . Sum ( ocd = > ocd . DeliveryExpressFreight ) ;
orderCost . CalculationOrderProfitAndCost ( order , null ) ;
updateList . Add ( fsql . Update < OrderCost > ( orderCost . OrderId )
. Set ( oc = > oc . PurchaseAmount , orderCost . PurchaseAmount )
. Set ( oc = > oc . DeliveryExpressFreight , orderCost . DeliveryExpressFreight )
. Set ( oc = > oc . Profit , orderCost . Profit )
. Set ( oc = > oc . PlatformCommissionAmount , orderCost . PlatformCommissionAmount ) ) ;
if ( updateList . Count ( ) > 1 0 )
{
Console . WriteLine ( $"{DateTime.Now} 执行数据库更新" ) ;
fsql . Transaction ( ( ) = >
{
foreach ( var update in updateList )
update . ExecuteAffrows ( ) ;
foreach ( var update in updateDetailList )
update . ExecuteAffrows ( ) ;
} ) ;
updateList . Clear ( ) ;
updateDetailList . Clear ( ) ;
}
}
if ( updateList . Count ( ) > 0 )
{
Console . WriteLine ( $"{DateTime.Now} 最后执行数据库更新" ) ;
fsql . Transaction ( ( ) = >
{
foreach ( var update in updateList )
update . ExecuteAffrows ( ) ;
foreach ( var update in updateDetailList )
update . ExecuteAffrows ( ) ;
} ) ;
updateList . Clear ( ) ;
updateDetailList . Clear ( ) ;
}
}
public void DeleteJDTask ( )
{
var appKey = "E1AA9247D5583A6D87449CE6AB290185" ;
var appSecret = "e479558ddd9e40f8929cfc00c6cbbc9c" ;
var appToken = "578d4074d5c04272af72de7f5fbe0ff2qwnz" ;
var promotionId = 6 1 0 6 2 3 5 4 6 7 ;
var httpResult = restApiService . SendRequest ( GetPlatformRelayAPIHost ( Enums . Platform . 京 东 ) ,
"api/platformsdk/DeleteJDPromotionTask" ,
new DeleteJDPromotionTaskRequest ( )
{
AppKey = appKey ,
AppSecret = appSecret ,
AppToken = appToken ,
Platform = Enums . Platform . 京 东 ,
PromotionId = promotionId
} ,
GetYunDingRequestHeader ( ) ,
HttpMethod . Post ) ;
if ( httpResult . StatusCode ! = System . Net . HttpStatusCode . OK )
throw new BusinessException ( httpResult . Content ) ;
var response = JsonConvert . DeserializeObject < ApiResponse > ( httpResult . Content ) ;
if ( ! response . Success )
throw new BusinessException ( response . Msg ) ;
}
public void RepairDFOrder ( )
{
var st = DateTime . Parse ( "2023-11-01" ) ;
var et = DateTime . Parse ( "2023-11-30 23:59:59" ) ;
var list = fsql . Select < Order , OrderDropShipping , OrderCostDetail > ( )
. InnerJoin ( ( o , ods , ocd ) = > o . Id = = ods . OrderId )
. InnerJoin ( ( o , ods , ocd ) = > o . Id = = ocd . OrderId )
. Where ( ( o , ods , ocd ) = > o . ShopId = = 1 2 8 9 7 0 6 7 & & o . OrderState ! = Enums . OrderState . 已 取 消 & & o . StartTime > = st & & o . StartTime < = et & & o . StorageType = = Enums . StorageType . 代 发 & & ocd . IsEnabled = = true & & ocd . SkuAmount = = 0 )
. ToList ( ( o , ods , ocd ) = > ods . PurchaseOrderId ) . Distinct ( ) . ToList ( ) ;
for ( var i = 0 ; i < list . Count ; i + + )
{
Console . WriteLine ( $"{i + 1}/{list.Count()},{list[i]}" ) ;
var param = new { type = "ORDER_BUYER_VIEW_ORDER_PRICE_MODIFY" , data = new { orderId = list [ i ] } } ;
purchaseOrderBusiness . CallbackFrom1688 ( JsonConvert . SerializeObject ( param ) ) ;
Thread . Sleep ( 1 0 0 0 ) ;
}
}
public void Test_20231221 ( )
{
memoryCache . Set ( "test123" , new ConcurrentDictionary < string , int > ( ) ) ;
var c = memoryCache . Get < ConcurrentDictionary < string , int > > ( "test123" ) ;
c . AddOrUpdate ( "123" , 1 , ( k , v ) = > v + 1 ) ;
c . AddOrUpdate ( "123" , 1 , ( k , v ) = > v + 1 ) ;
Console . WriteLine ( c [ "123" ] ) ;
var b = memoryCache . Get < ConcurrentDictionary < string , int > > ( "test123" ) ;
Console . WriteLine ( b [ "123" ] ) ;
}
public void UpdateSkuGift ( )
{
var dbSkuIdList = fsql . Select < ProductSku > ( ) . Where ( ps = > ps . IsGift = = false ) . ToList ( ps = > ps . Id ) ;
var ptList = fsql . Select < PromotionTask > ( ) . Where ( pt = > ! string . IsNullOrEmpty ( pt . GiftTemplatePutNewSku ) ) . ToList ( ) ;
var giftSkuList = new List < string > ( ) ;
var splitChar = new char [ ] { ',' } ;
foreach ( var pt in ptList )
{
giftSkuList . AddRange ( pt . GiftTemplatePutNewSku . Split ( splitChar , StringSplitOptions . RemoveEmptyEntries ) ) ;
}
var updateGiftSkuIdList = dbSkuIdList . Intersect ( giftSkuList ) . ToList ( ) ;
var updateList = new List < string > ( ) ;
var index = 1 ;
foreach ( var skuId in updateGiftSkuIdList )
{
updateList . Add ( skuId ) ;
if ( updateList . Count ( ) = = 2 0 )
{
fsql . Transaction ( ( ) = >
{
fsql . Update < ProductSku > ( updateList ) . Set ( ps = > ps . IsGift , true ) . ExecuteAffrows ( ) ;
} ) ;
updateList . Clear ( ) ;
Console . WriteLine ( $"update productsku gift {index}" ) ;
index + + ;
}
}
if ( updateList . Count ( ) > 0 )
{
fsql . Transaction ( ( ) = >
{
fsql . Update < ProductSku > ( updateList ) . Set ( ps = > ps . IsGift , true ) . ExecuteAffrows ( ) ;
} ) ;
updateList . Clear ( ) ;
Console . WriteLine ( $"last update productsku gift" ) ;
}
}
}
public class JPCount
{
public int Count { get ; set ; }
public long ShopId { get ; set ; }
}
}