crawler.cs 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079
  1. using dodohold.core;
  2. using Google.Protobuf.WellKnownTypes;
  3. using System.Text.Json;
  4. using TencentCloud.Cdn.V20180606.Models;
  5. using TencentCloud.Tse.V20201207.Models;
  6. using static molilian.core.ChartDataCore;
  7. namespace molilian.core
  8. {
  9. public partial class AlimamaPlus
  10. {
  11. /// <summary>
  12. /// 更新API调用日志(1天一次)
  13. /// </summary>
  14. /// <param name="intervalDay"></param>
  15. public static async Task DailyLogs_bak(int intervalDay, string prefix = "", string channel = "all")
  16. {
  17. int channelId = (int)TkChannelEnum.tb;
  18. var db_prefix = channel switch
  19. {
  20. "tool" => "tool_",
  21. "jd" => "jd_parse_",
  22. _ => prefix,
  23. };
  24. DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
  25. var accounts = await TkPoolCore.ListAsync();
  26. using var conn = DBContext.GetOpenConnection();
  27. foreach (var account in accounts)
  28. {
  29. int accountId = account.id;
  30. string accountName = $"{TkChannelEnum.tb}_{account.id}";
  31. int total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:{log_date:yyyyMMdd}");
  32. if (total_count == 0) accountName = account.name;
  33. total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:{log_date:yyyyMMdd}");
  34. if (total_count == 0) continue;
  35. var success_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:success:{log_date:yyyyMMdd}");
  36. var abandon_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:放弃转链:{log_date:yyyyMMdd}");
  37. string success_percentage = string.Empty;
  38. string abandon_percentage = string.Empty;
  39. if (total_count > 0)
  40. {
  41. success_percentage = $"{success_count / (double)total_count * 100:f2}%";
  42. abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
  43. }
  44. var exist = new DBContext.Table("daily_logs")
  45. .Fields("id,log_date")
  46. .Get<dynamic>("log_date=@log_date AND channel=@channel AND accountId=@accountId", new { log_date, channel = channelId, accountId });
  47. var createArgs = new DBContext.Table(conn, "daily_logs")
  48. .Add($"{db_prefix}total_count", total_count)
  49. .Add($"{db_prefix}abandon_count", abandon_count)
  50. .Add($"{db_prefix}abandon_percentage", abandon_percentage)
  51. .Add($"{db_prefix}success_count", success_count)
  52. .Add($"{db_prefix}success_percentage", success_percentage)
  53. .Add("last_time", DateTime.Now);
  54. if (exist == null)
  55. {
  56. createArgs.Add("channel", channelId)
  57. .Add("accountId", accountId)
  58. .Add("accountName", account.company)
  59. .Add("log_date", log_date)
  60. .Add("create_time", DateTime.Now)
  61. .Create();
  62. }
  63. else
  64. {
  65. createArgs.Where("id=@id", new { exist.id }).Update();
  66. }
  67. }
  68. int all_total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:{log_date:yyyyMMdd}");
  69. var all_success_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:success:{log_date:yyyyMMdd}");
  70. var all_abandon_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:放弃转链:{log_date:yyyyMMdd}");
  71. string all_success_percentage = string.Empty;
  72. string all_abandon_percentage = string.Empty;
  73. if (all_total_count > 0)
  74. {
  75. all_success_percentage = $"{all_success_count / (double)all_total_count * 100:f2}%";
  76. all_abandon_percentage = $"{all_abandon_count / (double)all_total_count * 100:f2}%";
  77. }
  78. var exist2 = new DBContext.Table(conn, "daily_logs")
  79. .Fields("id,log_date")
  80. .Get<dynamic>("log_date=@log_date AND channel=@channel AND accountId=@accountId",
  81. new { log_date, channel = channelId, accountId = 0 });
  82. var createArgs2 = new DBContext.Table(conn, "daily_logs")
  83. .Add($"{db_prefix}total_count", all_total_count)
  84. .Add($"{db_prefix}abandon_count", all_abandon_count)
  85. .Add($"{db_prefix}abandon_percentage", all_abandon_percentage)
  86. .Add($"{db_prefix}success_count", all_success_count)
  87. .Add($"{db_prefix}success_percentage", all_success_percentage)
  88. .Add("last_time", DateTime.Now);
  89. if (exist2 == null)
  90. {
  91. createArgs2.Add("channel", channelId)
  92. .Add("accountId", 0)
  93. .Add("accountName", "all")
  94. .Add("log_date", log_date)
  95. .Add("create_time", DateTime.Now)
  96. .Create();
  97. }
  98. else
  99. {
  100. createArgs2.Where("id=@id", new { exist2.id }).Update();
  101. }
  102. }
  103. public static async Task AllDailyLogsAsync(int intervalDay, string prefix = "", string channel = "all")
  104. {
  105. await DailyLogsAsync(true, intervalDay, prefix, channel);
  106. }
  107. public static async Task NodeDailyLogsAsync(int intervalDay, string prefix = "", string channel = "all")
  108. {
  109. await DailyLogsAsync(false, intervalDay, prefix, channel);
  110. }
  111. public static async Task DailyLogsAsync(bool all_node, int intervalDay, string prefix = "", string channel = "all")
  112. {
  113. int channelId = (int)TkChannelEnum.tb;
  114. var db_prefix = channel switch
  115. {
  116. "tool" => "tool_",
  117. "jd" => "jd_parse_",
  118. "ks" => "ks_parse_",
  119. "pdd" => "pdd_parse_",
  120. "dy" => "dy_parse_",
  121. _ => prefix,
  122. };
  123. DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
  124. var accounts = await TkPoolCore.ListAsync();
  125. using var conn = all_node ? CenterHub.GetOpenConnection() : DBContext.GetOpenConnection();
  126. string tableName = all_node ? "center_daily_logs" : "daily_logs";
  127. string tableName2 = all_node ? "center_daily_chat_data" : "daily_chat_data";
  128. foreach (var account in accounts)
  129. {
  130. if (!account.enable_call_stats) continue;
  131. int accountId = account.id;
  132. string accountName = $"{TkChannelEnum.tb}_{account.id}";
  133. int total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:{log_date:yyyyMMdd}", all_node);
  134. if (total_count == 0) accountName = account.name;
  135. total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:{log_date:yyyyMMdd}", all_node);
  136. if (total_count == 0) continue;
  137. var success_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:success:{log_date:yyyyMMdd}", all_node);
  138. var abandon_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:放弃转链:{log_date:yyyyMMdd}", all_node);
  139. string success_percentage = string.Empty;
  140. string abandon_percentage = string.Empty;
  141. if (total_count > 0)
  142. {
  143. success_percentage = $"{success_count / (double)total_count * 100:f2}%";
  144. abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
  145. }
  146. var exist = new DBContext.Table(tableName)
  147. .Fields("id,log_date")
  148. .Get<dynamic>("log_date=@log_date AND channel=@channel AND accountId=@accountId", new { log_date, channel = channelId, accountId });
  149. var createArgs = new DBContext.Table(conn, tableName)
  150. .Add($"{db_prefix}total_count", total_count)
  151. .Add($"{db_prefix}abandon_count", abandon_count)
  152. .Add($"{db_prefix}abandon_percentage", abandon_percentage)
  153. .Add($"{db_prefix}success_count", success_count)
  154. .Add($"{db_prefix}success_percentage", success_percentage)
  155. .Add("last_time", DateTime.Now);
  156. if (exist == null)
  157. {
  158. createArgs.Add("channel", channelId)
  159. .Add("accountId", accountId)
  160. .Add("accountName", account.company)
  161. .Add("log_date", log_date)
  162. .Add("create_time", DateTime.Now)
  163. .Create();
  164. }
  165. else
  166. {
  167. createArgs.Where("id=@id", new { exist.id }).Update();
  168. }
  169. }
  170. int all_total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:{log_date:yyyyMMdd}", all_node);
  171. var all_success_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:success:{log_date:yyyyMMdd}", all_node);
  172. var all_abandon_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:放弃转链:{log_date:yyyyMMdd}", all_node);
  173. string all_success_percentage = string.Empty;
  174. string all_abandon_percentage = string.Empty;
  175. if (all_total_count > 0)
  176. {
  177. all_success_percentage = $"{all_success_count / (double)all_total_count * 100:f2}%";
  178. all_abandon_percentage = $"{all_abandon_count / (double)all_total_count * 100:f2}%";
  179. }
  180. var exist2 = new DBContext.Table(conn, tableName)
  181. .Fields("id,log_date")
  182. .Get<dynamic>("log_date=@log_date AND accountId=@accountId",
  183. new { log_date, channel = channelId, accountId = 0 });
  184. var createArgs2 = new DBContext.Table(conn, tableName)
  185. .Add($"{db_prefix}total_count", all_total_count)
  186. .Add($"{db_prefix}abandon_count", all_abandon_count)
  187. .Add($"{db_prefix}abandon_percentage", all_abandon_percentage)
  188. .Add($"{db_prefix}success_count", all_success_count)
  189. .Add($"{db_prefix}success_percentage", all_success_percentage)
  190. .Add("last_time", DateTime.Now);
  191. if (exist2 == null)
  192. {
  193. createArgs2.Add("channel", 0)
  194. .Add("accountId", 0)
  195. .Add("accountName", "all")
  196. .Add("log_date", log_date)
  197. .Add("create_time", DateTime.Now)
  198. .Create();
  199. }
  200. else
  201. {
  202. createArgs2.Where("id=@id", new { exist2.id }).Update();
  203. }
  204. //jd_parse_total
  205. //tool_total
  206. //total
  207. //coupon_total
  208. //parse_total
  209. var chatData = await GetTaobaoDataAsync($"{prefix}total", "", $"{log_date:yyyyMMdd}");
  210. //tableName2
  211. }
  212. public static async Task<DBContext.Table> FillLinkTypeDataAsync(DBContext.Table update, int data_type, DateTime report_date, TkChannelEnum channel)
  213. {
  214. long req_other_aff_num = 0;//1
  215. long req_goods_num = 0;//2
  216. long req_live_num = 0;//3
  217. long req_video_num = 0;///4
  218. long req_shop_num = 0;//5
  219. long req_base_num = 0;//6
  220. long req_note_num = 0;//7
  221. int resp_deeplink_num = 0;
  222. try
  223. {
  224. switch (channel)
  225. {
  226. case TkChannelEnum.tb:
  227. string tableName = $"tk_parse_logs_{report_date:yyyyMMdd}";
  228. string exist_sql = @$"SELECT IF( EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_name = '{tableName}'), 1, 0) AS table_exists;";
  229. int exist_table = DBContext.ExecuteScalar<int>(exist_sql);
  230. if (exist_table == 1)
  231. {
  232. var linkTypeTotal = new DBContext.Table(tableName)
  233. .Fields("linkType, count(*) AS total")
  234. .GroupBy("linkType")
  235. .Select<dynamic>();
  236. foreach (var t in linkTypeTotal)
  237. {
  238. int linkType = t.linkType;
  239. long total = t.total;
  240. switch (linkType)
  241. {
  242. case 1: req_other_aff_num = total; break;
  243. case 2: req_goods_num = total; break;
  244. case 3: req_live_num = total; break;
  245. case 4: req_video_num = total; break;
  246. case 5: req_shop_num = total; break;
  247. case 6: req_base_num = total; break;
  248. case 7: req_note_num = total; break;
  249. }
  250. }
  251. }
  252. string total_key = data_type switch
  253. {
  254. 1 => "parse_total",
  255. 2 or _ => "coupon_total",
  256. };
  257. string[] deeplink_keys = ["home", "success", "fail"];
  258. string accountName = "all";
  259. foreach (var keyname in deeplink_keys)
  260. {
  261. string cacheKey = $":{total_key}:dp_{keyname}:{accountName}:{report_date:yyyyMMdd}";
  262. int value = await TkLogCore.GetTotalAsync(cacheKey);
  263. if (value == 0) continue;
  264. resp_deeplink_num += value;
  265. }
  266. break;
  267. }
  268. }
  269. catch (Exception e)
  270. {
  271. }
  272. update.Add("req_other_aff_num", req_other_aff_num);
  273. update.Add("req_goods_num", req_goods_num);
  274. update.Add("req_live_num", req_live_num);
  275. update.Add("req_video_num", req_video_num);
  276. update.Add("req_shop_num", req_shop_num);
  277. update.Add("req_base_num", req_base_num);
  278. update.Add("req_note_num", req_note_num);
  279. update.Add("resp_deeplink_num", resp_deeplink_num);
  280. return update;
  281. }
  282. /// <summary>
  283. ///
  284. /// </summary>
  285. /// <param name="data_type">1转链 2优惠券</param>
  286. /// <param name="intervalDay"></param>
  287. /// <param name="channel"></param>
  288. public static async Task ApiCallStatisticsAsync(int data_type, int intervalDay, TkChannelEnum channel)
  289. {
  290. DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
  291. var endpoint = data_type == 1 ? EndPointCore.GetParseAdmin() : EndPointCore.GetCouponAdmin();
  292. if (endpoint == null || string.IsNullOrEmpty(endpoint.db_server)) return;
  293. using var conn = EndPointCore.GetDbConnection(endpoint.db_server);
  294. using var center_conn = CenterHub.GetOpenConnection();
  295. //v_jd_spread_report
  296. var record = new DBContext.Table(center_conn, "api_call_report_dailys")
  297. .Fields("id, report_date, read_num")
  298. .Get<dynamic>("report_date=@log_date AND platform=@platform AND data_type=@data_type",
  299. new { log_date, platform = channel, data_type });
  300. var update = new DBContext.Table(center_conn, "api_call_report_dailys")
  301. .Add("data_type", data_type)
  302. .Add("platform", channel)
  303. .Add("is_show", 1)
  304. .Add("report_date", log_date)
  305. .Add("last_time", DateTime.Now);
  306. switch (channel)
  307. {
  308. case TkChannelEnum.tb:
  309. {
  310. var exist_report_dailys = new DBContext.Table(conn, "v_tk_report_dailys")
  311. .Get<dynamic>("report_date=@log_date", new { log_date });
  312. if (exist_report_dailys != null)
  313. {
  314. update.Add("uclk_uv", exist_report_dailys.uclk_uv_56)
  315. .Add("uclk_pv", exist_report_dailys.uclk_pv_56)
  316. .Add("pay_ord_num", exist_report_dailys.pay_ord_num_56)
  317. .Add("order_ord_num", exist_report_dailys.order_ord_num)
  318. .Add("pay_ord_amt", exist_report_dailys.pay_ord_amt_56)
  319. .Add("pay_tk_disp_tfee", exist_report_dailys.pay_tk_disp_tfee_56)
  320. .Add("pay_ord_uv", exist_report_dailys.pay_ord_uv_56)
  321. .Add("eff_ord_num", exist_report_dailys.eff_ord_num)
  322. .Add("eff_ord_amt", exist_report_dailys.eff_ord_amt)
  323. .Add("eff_tk_disp_tfee", exist_report_dailys.eff_tk_disp_tfee);
  324. }
  325. var exist = new DBContext.Table(center_conn, "center_daily_logs")
  326. .Get<dynamic>("log_date=@log_date AND accountId=@accountId",
  327. new { log_date, channel, accountId = 0 });
  328. if (exist != null)
  329. {
  330. if (data_type == 1)
  331. {
  332. update.Add("total_count", exist.parse_total_count)
  333. .Add("abandon_count", exist.parse_abandon_count)
  334. .Add("success_count", exist.parse_success_count);
  335. }
  336. if (data_type == 2)
  337. {
  338. update.Add("total_count", exist.coupon_total_count)
  339. .Add("abandon_count", exist.coupon_abandon_count)
  340. .Add("success_count", exist.coupon_success_count);
  341. }
  342. }
  343. break;
  344. }
  345. case TkChannelEnum.jd:
  346. {
  347. var exist_report_dailys = new DBContext.Table(conn, "v_jd_spread_report")
  348. .Get<dynamic>("report_date=@log_date", new { log_date });
  349. if (exist_report_dailys != null)
  350. {
  351. update.Add("uclk_uv", 0)
  352. .Add("pay_ord_uv", 0)//付款人数
  353. .Add("uclk_pv", exist_report_dailys.clickNum) //点击量 点击次数
  354. .Add("pay_tk_disp_tfee", exist_report_dailys.cosFee)//预估收入 付款预估收入
  355. .Add("pay_ord_amt", exist_report_dailys.cosPrice) //付款金额
  356. .Add("pay_ord_num", exist_report_dailys.orderNum)
  357. .Add("order_ord_num", 0)
  358. .Add("eff_ord_amt", exist_report_dailys.cosPrice) //有效订单金额 有效订单金额
  359. .Add("eff_ord_num", exist_report_dailys.orderNum) //有效付款笔数
  360. .Add("eff_tk_disp_tfee", exist_report_dailys.cosFee); //有效付款预估收入 预估收入
  361. }
  362. var exist = new DBContext.Table(center_conn, "center_daily_logs")
  363. .Get<dynamic>("log_date=@log_date AND accountId=@accountId",
  364. new { log_date, channel, accountId = 0 });
  365. if (exist != null)
  366. {
  367. update.Add("total_count", exist.jd_parse_total_count)
  368. .Add("abandon_count", exist.jd_parse_abandon_count)
  369. .Add("success_count", exist.jd_parse_success_count);
  370. }
  371. break;
  372. }
  373. case TkChannelEnum.pdd:
  374. {
  375. var exist_report_dailys = new DBContext.Table(conn, "v_pdd_estimate_revenue")
  376. .Get<dynamic>("report_date=@log_date", new { log_date });
  377. if (exist_report_dailys != null)
  378. {
  379. decimal feeAmount = Math.Round(0.01m * (decimal)exist_report_dailys.feeAmount, 2);
  380. decimal orderAmount = Math.Round(0.01m * (decimal)exist_report_dailys.orderAmount, 2);
  381. update.Add("uclk_uv", 0)
  382. .Add("pay_ord_uv", 0)//付款人数
  383. .Add("uclk_pv", 0) //点击量 点击次数
  384. .Add("pay_tk_disp_tfee", feeAmount)//预估收入 付款预估收入
  385. .Add("pay_ord_amt", orderAmount) //付款金额
  386. .Add("pay_ord_num", exist_report_dailys.orderNum)
  387. .Add("order_ord_num", 0)
  388. .Add("eff_ord_amt", orderAmount) //有效订单金额 有效订单金额
  389. .Add("eff_ord_num", exist_report_dailys.orderNum) //有效付款笔数
  390. .Add("eff_tk_disp_tfee", feeAmount); //有效付款预估收入 预估收入
  391. }
  392. var exist = new DBContext.Table(center_conn, "center_daily_logs")
  393. .Get<dynamic>("log_date=@log_date AND accountId=@accountId",
  394. new { log_date, channel, accountId = 0 });
  395. if (exist != null)
  396. {
  397. update.Add("total_count", exist.pdd_parse_total_count)
  398. .Add("abandon_count", exist.pdd_parse_abandon_count)
  399. .Add("success_count", exist.pdd_parse_success_count);
  400. }
  401. break;
  402. }
  403. }
  404. if (data_type == 1)
  405. {
  406. //todo 只有转链需要处理,优惠券和京东(未上线)暂不处理
  407. update = await FillLinkTypeDataAsync(update, data_type, log_date, channel);
  408. }
  409. if (record == null)
  410. {
  411. update.Add("read_num", 0).Add("create_time", DateTime.Now).Create();
  412. }
  413. else
  414. {
  415. update.Add("read_num", record.read_num).Where("id=@id", new { record.id }).Update();
  416. }
  417. }
  418. //public static void ApiCallStatistics(int intervalDay, TkChannelEnum channel, string prefix = "")
  419. //{
  420. // DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
  421. // var accounts = TkPoolCore.List();
  422. // foreach (var account in accounts)
  423. // {
  424. // int accountId = account.id;
  425. // string accountName = $"{channel}_{account.id}";
  426. // int total_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:{log_date:yyyyMMdd}");
  427. // if (total_count == 0) continue;
  428. // var success_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:success:{log_date:yyyyMMdd}");
  429. // var abandon_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:放弃转链:{log_date:yyyyMMdd}");
  430. // string success_percentage = string.Empty;
  431. // string abandon_percentage = string.Empty;
  432. // if (total_count > 0)
  433. // {
  434. // success_percentage = $"{success_count / (double)total_count * 100:f2}%";
  435. // abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
  436. // }
  437. // var exist = new DBContext.Table("api_call_statistics")
  438. // .Fields("id,log_date")
  439. // .Get<dynamic>("log_date=@log_date AND channel=@channel AND accountId=@accountId",
  440. // new { log_date, channel, accountId });
  441. // var createArgs = new DBContext.Table("api_call_statistics")
  442. // .Add($"{prefix}total_count", total_count)
  443. // .Add($"{prefix}abandon_count", abandon_count)
  444. // .Add($"{prefix}abandon_percentage", abandon_percentage)
  445. // .Add($"{prefix}success_count", success_count)
  446. // .Add($"{prefix}success_percentage", success_percentage)
  447. // .Add("last_time", DateTime.Now);
  448. // if (exist == null)
  449. // {
  450. // createArgs.Add("channel", channel)
  451. // .Add("accountId", accountId)
  452. // .Add("accountName", account.company)
  453. // .Add("log_date", log_date)
  454. // .Add("create_time", DateTime.Now)
  455. // .Create();
  456. // }
  457. // else
  458. // {
  459. // createArgs.Where("id=@id", new { exist.id }).Update();
  460. // }
  461. // }
  462. // int all_total_count = TkLogCore.GetTotal($":{prefix}total:{channel.ToString()}:{log_date:yyyyMMdd}");
  463. // var all_success_count = TkLogCore.GetTotal($":{prefix}total:{channel.ToString()}:success:{log_date:yyyyMMdd}");
  464. // var all_abandon_count = TkLogCore.GetTotal($":{prefix}total:{channel.ToString()}:放弃转链:{log_date:yyyyMMdd}");
  465. // string all_success_percentage = string.Empty;
  466. // string all_abandon_percentage = string.Empty;
  467. // if (all_total_count > 0)
  468. // {
  469. // all_success_percentage = $"{all_success_count / (double)all_total_count * 100:f2}%";
  470. // all_abandon_percentage = $"{all_abandon_count / (double)all_total_count * 100:f2}%";
  471. // }
  472. // var exist2 = new DBContext.Table("api_call_statistics")
  473. // .Fields("id,log_date")
  474. // .Get<dynamic>("log_date=@log_date AND channel=@channel AND accountId=@accountId",
  475. // new { log_date, channel, accountId = 0 });
  476. // var createArgs2 = new DBContext.Table("api_call_statistics")
  477. // .Add($"{prefix}total_count", all_total_count)
  478. // .Add($"{prefix}abandon_count", all_abandon_count)
  479. // .Add($"{prefix}abandon_percentage", all_abandon_percentage)
  480. // .Add($"{prefix}success_count", all_success_count)
  481. // .Add($"{prefix}success_percentage", all_success_percentage)
  482. // .Add("last_time", DateTime.Now);
  483. // if (exist2 == null)
  484. // {
  485. // createArgs2.Add("channel", channel)
  486. // .Add("accountId", 0)
  487. // .Add("accountName", "all")
  488. // .Add("log_date", log_date)
  489. // .Add("create_time", DateTime.Now)
  490. // .Create();
  491. // }
  492. // else
  493. // {
  494. // createArgs2.Where("id=@id", new { exist2.id }).Update();
  495. // }
  496. //}
  497. /// <summary>
  498. /// 事实动态接口(5分钟一次)
  499. /// </summary>
  500. /// <param name="date"></param>
  501. public async void SaveReportOverview()
  502. {
  503. DateTime date = DateTime.Now;
  504. TkReportDTO result = new TkReportDTO();
  505. try
  506. {
  507. string t = $"{date.Convert2UnixTimestamp(true)}";
  508. string dt = date.ToString("yyyy-MM-dd");
  509. string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.overview.json?" +
  510. $"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_overview&startDate={dt}&endDate={dt}&fixPeriod=1d";
  511. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  512. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  513. .AddHeaders("Cookie", _cookies);
  514. #if DEBUG
  515. #else
  516. client.Proxy = _proxy;
  517. #endif
  518. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  519. var response = client.Request(url);
  520. var body = response.Body();
  521. var root = body.Convert2JsonElement();
  522. int resultCode = root.Read<int>("resultCode", 0);
  523. bool success = root.Read("success", false);
  524. if (!success)
  525. {
  526. _ = new LoggerLibrary("report", "error")
  527. .Info(url, body)
  528. .SaveAsync();
  529. var bizErrorDesc = root.Read("bizErrorDesc", string.Empty);
  530. if (resultCode == 500 && bizErrorDesc.Contains("For input string"))
  531. {
  532. return;
  533. }
  534. //{"success":false,"resultCode":500,"bizErrorDesc":"For input string: \"null\"","bizErrorCode":400}
  535. throw new Exception(body);
  536. }
  537. var data = root.ElementRead("data").ElementRead("data");
  538. result.eff_ord_num = data.Read<int>("eff_ord_num", 0);
  539. result.eff_ord_amt = data.Read<decimal>("eff_ord_amt", 0);
  540. result.eff_tk_disp_tfee = data.Read<decimal>("eff_tk_disp_tfee", 0);
  541. result.uclk_uv_56 = data.Read<int>("uclk_uv_56", 0);
  542. result.uclk_pv_56 = data.Read<int>("uclk_pv_56", 0);
  543. result.uclt_uv_56 = data.Read<int>("uclt_uv_56", 0);
  544. result.ucart_uv_56 = data.Read<int>("ucart_uv_56", 0);
  545. result.dep_ord_num_56 = data.Read<int>("dep_ord_num_56", 0);
  546. result.dep_ord_dep_amt_56 = data.Read<decimal>("dep_ord_dep_amt_56", 0);
  547. result.pay_ord_num_56 = data.Read<int>("pay_ord_num_56", 0);
  548. result.pay_ord_amt_56 = data.Read<decimal>("pay_ord_amt_56", 0);
  549. result.pay_tk_disp_tfee_56 = data.Read<decimal>("pay_tk_disp_tfee_56", 0);
  550. result.pay_ord_uv_56 = data.Read<int>("pay_ord_uv_56", 0);
  551. result.sett_ord_num_56 = data.Read<int>("sett_ord_num_56", 0);
  552. result.sett_ord_amt_56 = data.Read<decimal>("sett_ord_amt_56", 0);
  553. result.sett_tk_disp_tfee_56 = data.Read<decimal>("sett_tk_disp_tfee_56", 0);
  554. DateTime report_date = date.Date;
  555. if (report_date == DateTime.Now.Date)
  556. {
  557. await RiskControlCore.SaveIncomeAmtAsync(TkChannelEnum.tb, $"{_accountId}", result.eff_tk_disp_tfee);
  558. if (_account.is_hide) return;
  559. await EachSaveReportOverviewAsync(report_date.AddHours(DateTime.Now.Hour), "tk_report_hourtrend", result);
  560. await EachSaveReportOverviewAsync(report_date, "tk_report", result);
  561. }
  562. }
  563. catch (Exception ex) { throw; }
  564. }
  565. private async Task EachSaveReportOverviewAsync(DateTime report_date, string tableName, TkReportDTO data)
  566. {
  567. var exist = new DBContext.Table(tableName)
  568. .Fields("id, report_date")
  569. .Get<dynamic>("report_date=@report_date AND accountId=@accountId",
  570. new { report_date, accountId = _accountId });
  571. var createArgs = new DBContext.Table(tableName)
  572. .Add("uclk_uv_56", data.uclk_uv_56)
  573. .Add("uclk_pv_56", data.uclk_pv_56)
  574. .Add("uclt_uv_56", data.uclt_uv_56)
  575. .Add("ucart_uv_56", data.ucart_uv_56)
  576. .Add("dep_ord_num_56", data.dep_ord_num_56)
  577. .Add("dep_ord_dep_amt_56", data.dep_ord_dep_amt_56)
  578. .Add("pay_ord_num_56", data.pay_ord_num_56)
  579. .Add("pay_ord_amt_56", data.pay_ord_amt_56)
  580. .Add("pay_tk_disp_tfee_56", data.pay_tk_disp_tfee_56)
  581. .Add("pay_ord_uv_56", data.pay_ord_uv_56)
  582. .Add("sett_ord_num_56", data.sett_ord_num_56)
  583. .Add("sett_ord_amt_56", data.sett_ord_amt_56)
  584. .Add("sett_tk_disp_tfee_56", data.sett_tk_disp_tfee_56)
  585. .Add("eff_ord_num", data.eff_ord_num)
  586. .Add("eff_ord_amt", data.eff_ord_amt)
  587. .Add("eff_tk_disp_tfee", data.eff_tk_disp_tfee);
  588. string data_suffix = report_date.ToString("yyyyMMdd");
  589. if ("tk_report_hourtrend".Equals(tableName))
  590. {
  591. data_suffix = report_date.ToString("yyyyMMddHH");
  592. }
  593. string accountName = $"{TkChannelEnum.tb}_{_accountId}";
  594. int total_count = await TkLogCore.GetTotalAsync($":total:{accountName}:{data_suffix}");
  595. int success_count = 0, abandon_count = 0;
  596. string success_percentage = string.Empty, abandon_percentage = string.Empty;
  597. if (total_count > 0)
  598. {
  599. success_count = await TkLogCore.GetTotalAsync($":total:{accountName}:success:{data_suffix}");
  600. abandon_count = await TkLogCore.GetTotalAsync($":total:{accountName}:放弃转链:{data_suffix}");
  601. if (total_count > 0)
  602. {
  603. success_percentage = $"{success_count / (double)total_count * 100:f2}%";
  604. abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
  605. }
  606. }
  607. createArgs.Add("total_count", total_count);
  608. createArgs.Add("success_count", success_count);
  609. createArgs.Add("abandon_count", abandon_count);
  610. createArgs.Add("success_percentage", success_percentage);
  611. createArgs.Add("abandon_percentage", abandon_percentage);
  612. int parse_total_count = await TkLogCore.GetTotalAsync($":parse_total:{accountName}:{data_suffix}");
  613. int parse_success_count = 0, parse_abandon_count = 0;
  614. string parse_success_percentage = string.Empty, parse_abandon_percentage = string.Empty;
  615. if (parse_total_count > 0)
  616. {
  617. parse_success_count = await TkLogCore.GetTotalAsync($":parse_total:{accountName}:success:{data_suffix}");
  618. parse_abandon_count = await TkLogCore.GetTotalAsync($":parse_total:{accountName}:放弃转链:{data_suffix}");
  619. if (parse_total_count > 0)
  620. {
  621. parse_success_percentage = $"{parse_success_count / (double)parse_total_count * 100:f2}%";
  622. parse_abandon_percentage = $"{parse_abandon_count / (double)parse_total_count * 100:f2}%";
  623. }
  624. }
  625. createArgs.Add("parse_total_count", parse_total_count);
  626. createArgs.Add("parse_success_count", parse_success_count);
  627. createArgs.Add("parse_abandon_count", parse_abandon_count);
  628. createArgs.Add("parse_success_percentage", parse_success_percentage);
  629. createArgs.Add("parse_abandon_percentage", parse_abandon_percentage);
  630. int coupon_total_count = await TkLogCore.GetTotalAsync($":coupon_total:{accountName}:{data_suffix}", false);
  631. int coupon_success_count = 0, coupon_abandon_count = 0;
  632. string coupon_success_percentage = string.Empty, coupon_abandon_percentage = string.Empty;
  633. if (coupon_total_count > 0)
  634. {
  635. coupon_success_count = await TkLogCore.GetTotalAsync($":coupon_total:{accountName}:success:{data_suffix}", false);
  636. coupon_abandon_count = await TkLogCore.GetTotalAsync($":coupon_total:{accountName}:放弃转链:{data_suffix}", false);
  637. if (coupon_total_count > 0)
  638. {
  639. coupon_success_percentage = $"{coupon_success_count / (double)coupon_total_count * 100:f2}%";
  640. coupon_abandon_percentage = $"{coupon_abandon_count / (double)coupon_total_count * 100:f2}%";
  641. }
  642. }
  643. createArgs.Add("coupon_total_count", coupon_total_count);
  644. createArgs.Add("coupon_success_count", coupon_success_count);
  645. createArgs.Add("coupon_abandon_count", coupon_abandon_count);
  646. createArgs.Add("coupon_success_percentage", coupon_success_percentage);
  647. createArgs.Add("coupon_abandon_percentage", coupon_abandon_percentage);
  648. int tool_total_count = await TkLogCore.GetTotalAsync($":tool_total:{accountName}:{data_suffix}");
  649. int tool_success_count = 0, tool_abandon_count = 0;
  650. string tool_success_percentage = string.Empty, tool_abandon_percentage = string.Empty;
  651. if (tool_total_count > 0)
  652. {
  653. tool_success_count = await TkLogCore.GetTotalAsync($":tool_total:{accountName}:success:{data_suffix}");
  654. tool_abandon_count = await TkLogCore.GetTotalAsync($":tool_total:{accountName}:放弃转链:{data_suffix}");
  655. if (tool_total_count > 0)
  656. {
  657. tool_success_percentage = $"{tool_success_count / (double)tool_total_count * 100:f2}%";
  658. tool_abandon_percentage = $"{tool_abandon_count / (double)tool_total_count * 100:f2}%";
  659. }
  660. }
  661. createArgs.Add("tool_total_count", tool_total_count);
  662. createArgs.Add("tool_success_count", tool_success_count);
  663. createArgs.Add("tool_abandon_count", tool_abandon_count);
  664. createArgs.Add("tool_success_percentage", tool_success_percentage);
  665. createArgs.Add("tool_abandon_percentage", tool_abandon_percentage);
  666. if (exist == null)
  667. {
  668. createArgs.Add("accountId", _accountId)
  669. .Add("accountName", _company)
  670. .Add("report_date", report_date)
  671. .Add("create_time", DateTime.Now)
  672. .Add("last_time", DateTime.Now)
  673. .Create();
  674. }
  675. else
  676. {
  677. createArgs.Add("last_time", DateTime.Now)
  678. .Where("id=@id", new { exist.id })
  679. .Update();
  680. }
  681. }
  682. /// <summary>
  683. /// 修正点击数
  684. /// </summary>
  685. public async Task FixReport(DateTime date)
  686. {
  687. TkReportDTO result = new TkReportDTO();
  688. try
  689. {
  690. string t = $"{date.Convert2UnixTimestamp(true)}";
  691. string dt = date.ToString("yyyy-MM-dd");
  692. string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.overview.json?" +
  693. $"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_overview&startDate={dt}&endDate={dt}&fixPeriod=1d";
  694. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  695. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  696. .AddHeaders("Cookie", _cookies);
  697. #if DEBUG
  698. #else
  699. client.Proxy = _proxy;
  700. #endif
  701. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  702. var response = client.Request(url);
  703. var body = response.Body();
  704. var root = body.Convert2JsonElement();
  705. int resultCode = root.Read<int>("resultCode", 0);
  706. bool success = root.Read("success", false);
  707. if (!success)
  708. {
  709. var bizErrorDesc = root.Read("bizErrorDesc", string.Empty);
  710. if (resultCode == 500 && bizErrorDesc.Contains("For input string"))
  711. {
  712. return;
  713. }
  714. _ = new LoggerLibrary("report", "error")
  715. .Info(url, body)
  716. .SaveAsync();
  717. throw new Exception(body);
  718. }
  719. var data = root.ElementRead("data").ElementRead("data");
  720. result.eff_ord_num = data.Read<int>("eff_ord_num", 0);
  721. result.eff_ord_amt = data.Read<decimal>("eff_ord_amt", 0);
  722. result.eff_tk_disp_tfee = data.Read<decimal>("eff_tk_disp_tfee", 0);
  723. result.uclk_uv_56 = data.Read<int>("uclk_uv_56", 0);
  724. result.uclk_pv_56 = data.Read<int>("uclk_pv_56", 0);
  725. result.uclt_uv_56 = data.Read<int>("uclt_uv_56", 0);
  726. result.ucart_uv_56 = data.Read<int>("ucart_uv_56", 0);
  727. result.dep_ord_num_56 = data.Read<int>("dep_ord_num_56", 0);
  728. result.dep_ord_dep_amt_56 = data.Read<decimal>("dep_ord_dep_amt_56", 0);
  729. result.pay_ord_num_56 = data.Read<int>("pay_ord_num_56", 0);
  730. result.pay_ord_amt_56 = data.Read<decimal>("pay_ord_amt_56", 0);
  731. result.pay_tk_disp_tfee_56 = data.Read<decimal>("pay_tk_disp_tfee_56", 0);
  732. result.pay_ord_uv_56 = data.Read<int>("pay_ord_uv_56", 0);
  733. result.sett_ord_num_56 = data.Read<int>("sett_ord_num_56", 0);
  734. result.sett_ord_amt_56 = data.Read<decimal>("sett_ord_amt_56", 0);
  735. result.sett_tk_disp_tfee_56 = data.Read<decimal>("sett_tk_disp_tfee_56", 0);
  736. DateTime report_date = date.Date;
  737. if (_account.is_hide) return;
  738. await EachSaveReportOverviewAsync(report_date, "tk_report", result);
  739. //var exist = new DBContext.Table("tk_report")
  740. // .Fields("id,report_date")
  741. // .Get<dynamic>("report_date=@report_date AND accountId=@accountId",
  742. // new { report_date, accountId = _accountId });
  743. //var createArgs = new DBContext.Table("tk_report")
  744. // .Add("fix_uclk_pv_56", result.fix_uclk_pv_56);
  745. //if (exist == null)
  746. //{
  747. // createArgs.Add("accountId", _accountId)
  748. // .Add("accountName", _company)
  749. // .Add("report_date", report_date)
  750. // .Add("create_time", DateTime.Now)
  751. // .Add("last_time", DateTime.Now)
  752. // .Create();
  753. //}
  754. //else
  755. //{
  756. // createArgs.Add("last_time", DateTime.Now)
  757. // .Where("id=@id", new { exist.id })
  758. // .Update();
  759. //}
  760. }
  761. catch (Exception ex) { }
  762. }
  763. /// <summary>
  764. /// 1小时更新一次
  765. /// </summary>
  766. public void SaveReportHourtrend(DateTime date)
  767. {
  768. string t = $"{DateTime.Now.Convert2UnixTimestamp(true)}";
  769. string dt = date.ToString("yyyy-MM-dd");
  770. string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.hourtrend.dod.json?" +
  771. $"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_homepage&startDate={dt}&endDate={dt}&fixPeriod=realTime";
  772. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  773. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  774. .AddHeaders("Cookie", _cookies);
  775. #if DEBUG
  776. #else
  777. client.Proxy = _proxy;
  778. #endif
  779. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  780. var response = client.Request(url);
  781. var body = response.Body();
  782. var root = body.Convert2JsonElement();
  783. int resultCode = root.Read<int>("resultCode", 0);
  784. bool success = root.Read("success", false);
  785. if (!success)
  786. {
  787. _ = new LoggerLibrary("report", "error")
  788. .Info(url, body)
  789. .SaveAsync();
  790. var bizErrorDesc = root.Read("bizErrorDesc", string.Empty);
  791. if (resultCode == 500 && bizErrorDesc.Contains("For input string"))
  792. {
  793. return;
  794. }
  795. _ = new LoggerLibrary("report", "error")
  796. .Info(url, body)
  797. .SaveAsync();
  798. throw new Exception(body);
  799. }
  800. var data_list = root.ElementRead("data").ElementRead("data");
  801. foreach (var data in data_list.EnumerateArray())
  802. {
  803. string xAxis = data.Read<string>("xAxis");
  804. string _report_date = $"{dt} {xAxis}";
  805. EachSaveReport(_report_date, "tk_report_hourtrend", data);
  806. if ("23:00".Equals(xAxis))
  807. {
  808. EachSaveReport(dt, "tk_report", data);
  809. }
  810. }
  811. }
  812. private void EachSaveReport(string _report_date, string tableName, JsonElement data)
  813. {
  814. _ = DateTime.TryParse(_report_date, out DateTime report_date);
  815. var exist = new DBContext.Table(tableName)
  816. .Fields("id,report_date")
  817. .Get<dynamic>("report_date=@report_date AND accountId=@accountId",
  818. new { report_date, accountId = _accountId });
  819. if (exist == null)
  820. {
  821. new DBContext.Table(tableName)
  822. .Fill(data)
  823. .Loader<int>("uclk_uv_56", 0)
  824. .Loader<int>("uclk_pv_56", 0)
  825. .Loader<int>("uclt_uv_56", 0)
  826. .Loader<int>("ucart_uv_56", 0)
  827. .Loader<int>("dep_ord_num_56", 0)
  828. .Loader<decimal>("dep_ord_dep_amt_56", 0)
  829. .Loader<int>("pay_ord_num_56", 0)
  830. .Loader<decimal>("pay_ord_amt_56", 0)
  831. .Loader<decimal>("pay_tk_disp_tfee_56", 0)
  832. .Loader<int>("pay_ord_uv_56", 0)
  833. .Loader<int>("sett_ord_num_56", 0)
  834. .Loader<decimal>("sett_ord_amt_56", 0)
  835. .Loader<decimal>("sett_tk_disp_tfee_56", 0)
  836. .Add("accountId", _accountId)
  837. .Add("accountName", _company)
  838. .Add("report_date", report_date)
  839. .Add("create_time", DateTime.Now)
  840. .Add("last_time", DateTime.Now)
  841. .Create();
  842. }
  843. else
  844. {
  845. new DBContext.Table(tableName)
  846. .Fill(data)
  847. .Loader<int>("uclk_uv_56", 0)
  848. .Loader<int>("uclk_pv_56", 0)
  849. .Loader<int>("uclt_uv_56", 0)
  850. .Loader<int>("ucart_uv_56", 0)
  851. .Loader<int>("dep_ord_num_56", 0)
  852. .Loader<decimal>("dep_ord_dep_amt_56", 0)
  853. .Loader<int>("pay_ord_num_56", 0)
  854. .Loader<decimal>("pay_ord_amt_56", 0)
  855. .Loader<decimal>("pay_tk_disp_tfee_56", 0)
  856. .Loader<int>("pay_ord_uv_56", 0)
  857. .Loader<int>("sett_ord_num_56", 0)
  858. .Loader<decimal>("sett_ord_amt_56", 0)
  859. .Loader<decimal>("sett_tk_disp_tfee_56", 0)
  860. .Add("last_time", DateTime.Now)
  861. .Where("id=@id", new { exist.id })
  862. .Update();
  863. }
  864. }
  865. /// <summary>
  866. /// 警告消息
  867. /// </summary>
  868. public void GetViolationuWarning()
  869. {
  870. try
  871. {
  872. string url = "https://media.alimama.com/violationu2/warning_instance_page_v2.json?r=mx_208&toPage=1&pageSize=40&params=";
  873. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  874. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  875. .AddHeaders("Cookie", _cookies);
  876. #if DEBUG
  877. #else
  878. client.Proxy = _proxy;
  879. #endif
  880. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  881. var response = client.Request(url);
  882. var body = response.Body();
  883. var root = body.Convert2JsonElement();
  884. int resultCode = root.Read<int>("resultCode", 0);
  885. int totalCount = root.PathRead<int>("data.totalCount", 0);
  886. bool success = root.Read("success", false);
  887. if (!success)
  888. {
  889. _ = new LoggerLibrary("violationu", "warning_error")
  890. .Info(url, body)
  891. .SaveAsync();
  892. throw new Exception(body);
  893. }
  894. if (totalCount == 0) return;
  895. _ = new LoggerLibrary("violationu", "warning").Info(url, body).SaveAsync();
  896. var list = root.ElementRead("data").ElementRead("result").EnumerateArray();
  897. foreach (var data in list)
  898. {
  899. var violation_commission = data.PathRead<decimal>("mediaInfo.订单虚假交易违规佣金", 0);
  900. new DBContext.Table("alimama_warning")
  901. .Fill(data)
  902. .Loader<int>("filterRuleId", 0)
  903. .Loader<long>("gmtCreate", 0)
  904. .Loader<long>("id", 0, "ali_id")
  905. .Loader<string>("idStr", string.Empty)
  906. .Loader<int>("mediaDimension", 0)
  907. .Loader<long>("mediaId", 0)
  908. .Loader<int>("mediaInfo.abn_cnt", 0, "abn_cnt")
  909. .Add("violation_commission", violation_commission)
  910. .Loader<int>("mediaInfo.warning_cnt", 0, "warning_cnt")
  911. .Loader<string>("mediaName", string.Empty)
  912. .Loader<long>("memberId", 0)
  913. .Loader<string>("noticeCategory", string.Empty)
  914. .Loader<int>("noticeTemplateId", 0)
  915. .Loader<string>("noticeTemplateName", string.Empty)
  916. .Loader<string>("orderFile", string.Empty)
  917. .Loader<string>("pid", string.Empty)
  918. .Loader<int>("punishRuleId", 0)
  919. .Loader<string>("riskType", string.Empty)
  920. .Loader<string>("roleName", string.Empty)
  921. .Loader<string>("ruleLink", string.Empty)
  922. .Loader<bool>("showOrderDetail", false)
  923. .Loader<int>("status", 0, "ali_status")
  924. .Loader<string>("warningText", string.Empty)
  925. .Add("accountName", _company)
  926. .Add("status", true)
  927. .Add("create_time", DateTime.Now)
  928. .Add("last_time", DateTime.Now)
  929. .Create(DBContext.InsertType.REPLACE);
  930. }
  931. }
  932. catch (Exception ex) { }
  933. }
  934. }
  935. }