StatService.cs 203 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543
  1. using System;
  2. using System.Collections.Generic;
  3. using Library;
  4. using LitJson;
  5. using System.Linq;
  6. using System.Data;
  7. using System.Threading;
  8. using MySystem.PxcModels;
  9. using Microsoft.EntityFrameworkCore.Internal;
  10. namespace MySystem
  11. {
  12. public class StatService
  13. {
  14. public readonly static StatService Instance = new StatService();
  15. private StatService()
  16. { }
  17. public void Start()
  18. {
  19. Thread th = new Thread(StartDo);
  20. th.IsBackground = true;
  21. th.Start();
  22. }
  23. public void StartDo()
  24. {
  25. while(true)
  26. {
  27. try
  28. {
  29. if(DateTime.Now.Hour > 0 && DateTime.Now.Hour < 9)
  30. {
  31. string doDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
  32. string flag = function.ReadInstance("/Stat/" + doDate + ".txt");
  33. if (string.IsNullOrEmpty(flag))
  34. {
  35. function.WritePage("/Stat/", doDate + ".txt", DateTime.Now.ToString("HH:mm:ss"));
  36. StartEverDay();
  37. StatMerchantTrade(doDate);
  38. }
  39. }
  40. }
  41. catch (Exception ex)
  42. {
  43. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "每天同步创客上级关联异常");
  44. }
  45. Thread.Sleep(1800000);
  46. }
  47. }
  48. public void StartActiveReward()
  49. {
  50. Thread th = new Thread(ActiveReward);
  51. th.IsBackground = true;
  52. th.Start();
  53. }
  54. public void ActiveReward()
  55. {
  56. while(true)
  57. {
  58. try
  59. {
  60. function.WriteLog(DateTime.Now.ToString() + ":start", "实时处理激活奖励");
  61. dosomething3();
  62. function.WriteLog(DateTime.Now.ToString() + ":end\n\n", "实时处理激活奖励");
  63. }
  64. catch (Exception ex)
  65. {
  66. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "实时处理激活奖励异常");
  67. }
  68. Thread.Sleep(30000);
  69. }
  70. }
  71. public void StartActiveReward1()
  72. {
  73. Thread th = new Thread(ActiveReward1);
  74. th.IsBackground = true;
  75. th.Start();
  76. }
  77. public void ActiveReward1()
  78. {
  79. while(true)
  80. {
  81. try
  82. {
  83. function.WriteLog(DateTime.Now.ToString() + ":start", "实时处理0押激活奖励");
  84. activePrizeWithoutDeposit();
  85. function.WriteLog(DateTime.Now.ToString() + ":end\n\n", "实时处理0押激活奖励");
  86. }
  87. catch (Exception ex)
  88. {
  89. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "实时处理0押激活奖励异常");
  90. }
  91. Thread.Sleep(30000);
  92. }
  93. }
  94. public void StartActiveReward2()
  95. {
  96. Thread th = new Thread(ActiveReward2);
  97. th.IsBackground = true;
  98. th.Start();
  99. }
  100. public void ActiveReward2()
  101. {
  102. while(true)
  103. {
  104. try
  105. {
  106. function.WriteLog(DateTime.Now.ToString() + ":start", "实时处理盒易付0押激活奖励");
  107. activePrizeWithoutDeposit12();
  108. function.WriteLog(DateTime.Now.ToString() + ":end\n\n", "实时处理盒易付0押激活奖励");
  109. }
  110. catch (Exception ex)
  111. {
  112. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "实时处理盒易付0押激活奖励异常");
  113. }
  114. Thread.Sleep(30000);
  115. }
  116. }
  117. public void StartActiveReward15()
  118. {
  119. Thread th = new Thread(ActiveReward15);
  120. th.IsBackground = true;
  121. th.Start();
  122. }
  123. public void ActiveReward15()
  124. {
  125. while(true)
  126. {
  127. try
  128. {
  129. function.WriteLog(DateTime.Now.ToString() + ":start", "实时处理来客吧0押激活奖励");
  130. activePrizeWithoutDeposit15();
  131. function.WriteLog(DateTime.Now.ToString() + ":end\n\n", "实时处理来客吧0押激活奖励");
  132. }
  133. catch (Exception ex)
  134. {
  135. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "实时处理来客吧0押激活奖励异常");
  136. }
  137. Thread.Sleep(30000);
  138. }
  139. }
  140. //广电卡激活奖励
  141. public void StartSimActive()
  142. {
  143. Thread th = new Thread(StartSimActiveListen);
  144. th.IsBackground = true;
  145. th.Start();
  146. }
  147. public void StartSimActiveListen()
  148. {
  149. while(true)
  150. {
  151. try
  152. {
  153. function.WriteLog(DateTime.Now.ToString() + ":start", "实时处理广电卡激活奖励");
  154. StartSimActiveDo();
  155. function.WriteLog(DateTime.Now.ToString() + ":end\n\n", "实时处理广电卡激活奖励");
  156. }
  157. catch (Exception ex)
  158. {
  159. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "实时处理广电卡激活奖励异常");
  160. }
  161. Thread.Sleep(29000);
  162. }
  163. }
  164. public void StartSimActiveDo(int posid = 0)
  165. {
  166. WebCMSEntities db = new WebCMSEntities();
  167. DateTime yesterday = DateTime.Now.AddDays(-30);
  168. DateTime today = DateTime.Now.AddMinutes(-5);
  169. IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.BrandId == 14 && m.CardType > 0 && m.Detail != "1");
  170. if (posid > 0)
  171. {
  172. posList = posList.Where(m => m.Id == posid);
  173. }
  174. else
  175. {
  176. posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
  177. }
  178. foreach (PosMachinesTwo pos in posList.ToList())
  179. {
  180. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  181. if (merchant != null)
  182. {
  183. string ParentNav = "";
  184. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  185. if (user != null)
  186. {
  187. int GetUserId = user.Id;
  188. ParentNav = user.ParentNav;
  189. int TopUserId = 0;
  190. if (!string.IsNullOrEmpty(ParentNav))
  191. {
  192. TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  193. }
  194. decimal Amount = 19 * 1.5M;
  195. doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, Amount);
  196. PosMachinesTwo item = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id);
  197. if(item != null)
  198. {
  199. item.Detail = "1";
  200. db.SaveChanges();
  201. }
  202. }
  203. }
  204. }
  205. db.Dispose();
  206. }
  207. // 1. 前一天的绑定记录和创客信息匹配,设置商户型创客
  208. public void dosomething1(string date)
  209. {
  210. // TODO: 每天扫描非商户型创客的持有机具数量
  211. SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
  212. WebCMSEntities db = new WebCMSEntities();
  213. DateTime yesterday = DateTime.Parse(date + " 00:00:00");
  214. DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
  215. List<SpModels.BindRecord> binds = spdb.BindRecord.Where(m => m.CreateTime >= yesterday && m.CreateTime < today).ToList();
  216. foreach (SpModels.BindRecord bind in binds)
  217. {
  218. string Mobile = bind.MerNewSnNo;
  219. string MerNo = bind.MerNo;
  220. string BeforeNum = "";
  221. string AfterNum = "";
  222. if (Mobile.Contains("****") && Mobile.Length == 11)
  223. {
  224. BeforeNum = Mobile.Substring(0, 3);
  225. AfterNum = Mobile.Substring(7);
  226. }
  227. string Name = bind.MerName;
  228. if (bind.ProductType == "2")
  229. {
  230. if (Name.Contains("-"))
  231. {
  232. Name = Name.Split('-')[1];
  233. }
  234. else if (Name.Contains("_"))
  235. {
  236. Name = Name.Split('_')[1];
  237. }
  238. }
  239. else if (bind.ProductType == "4")
  240. {
  241. Name = bind.SeoTitle;
  242. }
  243. PxcModels.Users user = db.Users.FirstOrDefault(m => m.Mobile.StartsWith(BeforeNum) && m.Mobile.EndsWith(AfterNum) && m.RealName == Name && m.AuthFlag == 1 && m.MerchantType == 0);
  244. if (user != null)
  245. {
  246. bool checkPos = db.PosMachinesTwo.Any(m => m.UserId == user.Id);
  247. if (!checkPos)
  248. {
  249. PxcModels.MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == bind.MerSnNo) ?? new PxcModels.MachineForSnNo();
  250. PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId && m.UserId != user.Id);
  251. if (pos != null)
  252. {
  253. pos.UserId = user.Id;
  254. user.MerchantType = 1;
  255. PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PxcModels.PosMerchantInfo();
  256. merchant.UserId = user.Id;
  257. merchant.MerUserType = 1;
  258. pos.SeoTitle = user.Id.ToString(); // 记录商户型创客的Id
  259. db.SaveChanges();
  260. }
  261. }
  262. }
  263. }
  264. spdb.Dispose();
  265. db.Dispose();
  266. }
  267. // 1. 前一天的商户型创客,判断名下是否3台激活机器,是则变为非商户型创客
  268. public void dosomething11(string date)
  269. {
  270. WebCMSEntities db = new WebCMSEntities();
  271. DateTime yesterday = DateTime.Parse(date + " 00:00:00");
  272. DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
  273. var users = db.Users.Select(m => new { m.Id, m.MerchantType }).Where(m => m.MerchantType == 1).ToList();
  274. foreach (var user in users)
  275. {
  276. int machineCount = db.PosMachinesTwo.Count(m => m.UserId == user.Id && m.PosSnType == 0);
  277. int couponCount = db.PosCoupons.Count(m => m.UserId == user.Id && m.IsUse == 0); //判断是否拥有3张券
  278. if (machineCount + couponCount >= 3)
  279. {
  280. Users edit = db.Users.FirstOrDefault(m => m.Id == user.Id);
  281. if (edit != null)
  282. {
  283. edit.MerchantType = 0;
  284. db.SaveChanges();
  285. }
  286. }
  287. }
  288. db.Dispose();
  289. }
  290. public void testStatTrade(string date)
  291. {
  292. string yesterday = date + " 00:00:00";
  293. string today = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  294. string TradeMonth = DateTime.Parse(date).ToString("yyyyMM");
  295. string TradeDate = DateTime.Parse(date).ToString("yyyyMMdd");
  296. DataTable dt = dbconn.dtable("select UserId,BrandId,MerchantId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where CreateDate>='" + yesterday + "' and CreateDate<'" + today + "' group by UserId,BrandId,MerchantId,BankCardType,QrPayFlag");
  297. foreach (DataRow dr in dt.Rows)
  298. {
  299. int UserId = int.Parse(dr["UserId"].ToString()); //创客ID
  300. int BrandId = int.Parse(dr["BrandId"].ToString()); //品牌
  301. int MerchantId = int.Parse(dr["MerchantId"].ToString()); //商户Id
  302. int BankCardType = int.Parse(dr["BankCardType"].ToString()); //卡类型
  303. int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString()); //云闪付
  304. decimal TradeAmount = decimal.Parse(dr[5].ToString()); //当日交易额
  305. string content = "{";
  306. content += "\"DateString\":\"" + date + "\",";
  307. content += "\"UserId\":\"" + UserId + "\",";
  308. content += "\"BrandId\":\"" + BrandId + "\",";
  309. content += "\"MerchantId\":\"" + MerchantId + "\",";
  310. content += "\"BankCardType\":\"" + BankCardType + "\",";
  311. content += "\"QrPayFlag\":\"" + QrPayFlag + "\",";
  312. content += "\"TradeAmount\":\"" + TradeAmount + "\"";
  313. content += "}";
  314. RedisDbconn.Instance.AddList("TradeStatQueueTest", content);
  315. }
  316. }
  317. // 3. 前一天的激活记录,根据创客类型,如果是商户型创客,则激活奖励的起始人从此人上级计算。如果不是,则从此人开始计算
  318. public void dosomething3(int posid = 0)
  319. {
  320. List<int> BrandIds = new List<int>();
  321. BrandIds.Add(14);
  322. BrandIds.Add(18);
  323. BrandIds.Add(19);
  324. BrandIds.Add(20);
  325. BrandIds.Add(21);
  326. BrandIds.Add(29);
  327. BrandIds.Add(23);
  328. BrandIds.Add(24);
  329. BrandIds.Add(25);
  330. BrandIds.Add(26);
  331. WebCMSEntities db = new WebCMSEntities();
  332. DateTime yesterday = DateTime.Now.AddDays(-1);
  333. DateTime today = DateTime.Now.AddMinutes(-10);
  334. IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "" && m.SeoKeyword != "0" && m.Detail != "1" && !BrandIds.Contains(m.BrandId));
  335. if (posid > 0)
  336. {
  337. posList = posList.Where(m => m.Id == posid);
  338. }
  339. else
  340. {
  341. posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
  342. }
  343. foreach (PosMachinesTwo pos in posList.ToList())
  344. {
  345. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  346. if (merchant != null && pos.ActivationTime.Value <= pos.BindingTime.Value.AddDays(30))
  347. {
  348. function.WriteLog("机具号:" + pos.PosSn + ";奖励标记:" + pos.Detail + ";", "实时处理激活奖励");
  349. string ParentNav = "";
  350. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  351. if (user != null)
  352. {
  353. int GetUserId = user.Id;
  354. ParentNav = user.ParentNav;
  355. int TopUserId = 0;
  356. if (!string.IsNullOrEmpty(ParentNav))
  357. {
  358. TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  359. }
  360. decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
  361. KqProducts brand = db.KqProducts.FirstOrDefault(m => m.Id == pos.BrandId) ?? new KqProducts();
  362. if (brand.NoticeMoneyUnit == 2)
  363. {
  364. ActPrize = ActPrize / 100;
  365. }
  366. if (ActPrize > 0)
  367. {
  368. // if (ActPrize == 99)
  369. // {
  370. // ActPrize = 100;
  371. // }
  372. // else if (ActPrize == 199)
  373. // {
  374. // ActPrize = 200;
  375. // }
  376. // else if (ActPrize == 299)
  377. // {
  378. // ActPrize = 300;
  379. // }
  380. // else if (ActPrize == 249)
  381. // {
  382. // ActPrize = 260;
  383. // }
  384. ActPrize = 100;
  385. if (GetUserId > 0)
  386. {
  387. doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, ActPrize);
  388. function.WriteLog("ActPrize:" + ActPrize + "", "实时处理激活奖励");
  389. }
  390. }
  391. else if(ActPrize == 0)
  392. {
  393. if(pos.BrandId == 6)
  394. {
  395. doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, 50);
  396. function.WriteLog("ActPrize:50", "实时处理激活奖励");
  397. }
  398. }
  399. PosMachinesTwo edit = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id);
  400. if(edit != null)
  401. {
  402. edit.Detail = "1";
  403. db.SaveChanges();
  404. }
  405. }
  406. // }
  407. }
  408. }
  409. db.Dispose();
  410. }
  411. //金控活动机返奖励
  412. private void doJk30(WebCMSEntities db, PosMachinesTwo pos, PosMerchantInfo merchant, int GetUserId, string ParentNav, int TopUserId)
  413. {
  414. // DateTime start = DateTime.Parse("2022-04-06 00:00:00");
  415. // DateTime end = DateTime.Parse("2022-07-05 00:00:00");
  416. // if((pos.BrandId == 1 || pos.BrandId == 3) && pos.CreateDate >= start && pos.CreateDate < end)
  417. // {
  418. // decimal amt = 0;
  419. // if(DateTime.Now < DateTime.Parse("2023-05-01 00:00:00"))
  420. // {
  421. // amt = 10;
  422. // }
  423. // if(amt > 0)
  424. // {
  425. // doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, amt, 0, 1);
  426. // }
  427. // }
  428. }
  429. //无押金激活奖励
  430. public void activePrizeWithoutDeposit(int posid = 0)
  431. {
  432. WebCMSEntities db = new WebCMSEntities();
  433. DateTime yesterday = DateTime.Now.AddDays(-31);
  434. DateTime today = DateTime.Now.AddMinutes(-10);
  435. List<int> BrandIds = new List<int>();
  436. BrandIds.Add(12);
  437. BrandIds.Add(13);
  438. BrandIds.Add(14);
  439. BrandIds.Add(15);
  440. BrandIds.Add(16);
  441. BrandIds.Add(23);
  442. BrandIds.Add(24);
  443. BrandIds.Add(25);
  444. BrandIds.Add(26);
  445. IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && (string.IsNullOrEmpty(m.SeoKeyword) || m.SeoKeyword == "0") && m.CreditTrade >= 5000 && !BrandIds.Contains(m.BrandId) && m.Detail != "1");
  446. if (posid > 0)
  447. {
  448. posList = posList.Where(m => m.Id == posid);
  449. }
  450. else
  451. {
  452. posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
  453. }
  454. foreach (PosMachinesTwo pos in posList.ToList())
  455. {
  456. function.WriteLog(str: "机具号:" + pos.PosSn, "无押金激活奖励日志");
  457. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  458. if (merchant != null)
  459. {
  460. function.WriteLog("商户号:" + merchant.KqMerNo, "无押金激活奖励日志");
  461. string ParentNav = "";
  462. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  463. if (user != null)
  464. {
  465. function.WriteLog("机具所属人:" + user.Id, "无押金激活奖励日志");
  466. int GetUserId = user.Id;
  467. ParentNav = user.ParentNav;
  468. int TopUserId = 0;
  469. if (!string.IsNullOrEmpty(ParentNav))
  470. {
  471. TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  472. }
  473. function.WriteLog("BindingTime:" + pos.BindingTime, "无押金激活奖励日志");
  474. function.WriteLog("ActivationTime:" + pos.ActivationTime, "无押金激活奖励日志");
  475. if(pos.BindingTime.Value.AddDays(30) >= pos.ActivationTime)
  476. {
  477. function.WriteLog("满足条件", "无押金激活奖励日志");
  478. doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, 30);
  479. function.WriteLog("已发放", "无押金激活奖励日志");
  480. DateTime now = pos.ActivationTime.Value;
  481. //盟主奖励
  482. if (pos.LeaderUserId > 0 && db.Leaders.Any(m => m.Id == pos.LeaderUserId && m.ExpiredDate > now) && pos.BindingTime > now.AddDays(-30) && pos.CardType < 100)
  483. {
  484. function.WriteLog("大盟主奖发放", "无押金激活奖励日志");
  485. RedisDbconn.Instance.AddList("LeaderPrizeQueue", pos.Id);
  486. }
  487. //运营中心奖励
  488. if (pos.BindingTime > now.AddDays(-30) && pos.CardType < 100)
  489. {
  490. function.WriteLog("运营中心奖发放", "无押金激活奖励日志");
  491. RedisDbconn.Instance.AddList("OperatePrizeQueue", pos.Id);
  492. }
  493. }
  494. PosMachinesTwo edit = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id);
  495. if(edit != null)
  496. {
  497. edit.Detail = "1";
  498. db.SaveChanges();
  499. }
  500. }
  501. }
  502. function.WriteLog("\n\n\n", "无押金激活奖励日志");
  503. }
  504. db.Dispose();
  505. }
  506. public void activePrizeWithoutDeposit6(int posid = 0)
  507. {
  508. WebCMSEntities db = new WebCMSEntities();
  509. DateTime yesterday = DateTime.Now.AddDays(-30);
  510. DateTime today = DateTime.Now.AddMinutes(-10);
  511. IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.CreditTrade >= 5000 && string.IsNullOrEmpty(m.SeoKeyword) && m.BrandId == 6 && m.Detail != "1");
  512. if (posid > 0)
  513. {
  514. posList = posList.Where(m => m.Id == posid);
  515. }
  516. else
  517. {
  518. posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
  519. }
  520. foreach (PosMachinesTwo pos in posList.ToList())
  521. {
  522. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  523. if (merchant != null)
  524. {
  525. string ParentNav = "";
  526. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  527. if (user != null)
  528. {
  529. int GetUserId = user.Id;
  530. ParentNav = user.ParentNav;
  531. int TopUserId = 0;
  532. if (!string.IsNullOrEmpty(ParentNav))
  533. {
  534. TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  535. }
  536. // 立刷30天内刷满5000,无服务费机具,返50
  537. if (pos.BrandId == 6 && pos.BindingTime > DateTime.Now.AddDays(-30))
  538. {
  539. doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, 50);
  540. }
  541. PosMachinesTwo edit = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id);
  542. if(edit != null)
  543. {
  544. edit.Detail = "1";
  545. db.SaveChanges();
  546. }
  547. }
  548. }
  549. }
  550. db.Dispose();
  551. }
  552. public void activePrizeWithoutDeposit12(int posid = 0)
  553. {
  554. WebCMSEntities db = new WebCMSEntities();
  555. DateTime yesterday = DateTime.Now.AddDays(-30);
  556. DateTime today = DateTime.Now.AddMinutes(-10);
  557. IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.CreditTrade >= 5000 && string.IsNullOrEmpty(m.SeoKeyword) && (m.BrandId == 12 || m.BrandId == 13) && m.Detail != "1");
  558. if (posid > 0)
  559. {
  560. posList = posList.Where(m => m.Id == posid);
  561. }
  562. else
  563. {
  564. posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
  565. }
  566. foreach (PosMachinesTwo pos in posList.ToList())
  567. {
  568. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  569. if (merchant != null)
  570. {
  571. string ParentNav = "";
  572. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  573. if (user != null)
  574. {
  575. int GetUserId = user.Id;
  576. ParentNav = user.ParentNav;
  577. int TopUserId = 0;
  578. if (!string.IsNullOrEmpty(ParentNav))
  579. {
  580. TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  581. }
  582. //首台无押金机返50
  583. if(pos.BindingTime.Value.AddDays(30) >= pos.ActivationTime)
  584. {
  585. doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, 30);
  586. DateTime now = pos.ActivationTime.Value;
  587. //盟主奖励
  588. if (pos.LeaderUserId > 0 && db.Leaders.Any(m => m.Id == pos.LeaderUserId && m.ExpiredDate > now) && pos.BindingTime > now.AddDays(-30) && pos.CardType < 100)
  589. {
  590. function.WriteLog("大盟主奖发放", "开机奖励在激活中监控");
  591. RedisDbconn.Instance.AddList("LeaderPrizeQueue", pos.Id);
  592. }
  593. //运营中心奖励
  594. if (pos.BindingTime > now.AddDays(-30) && pos.CardType < 100)
  595. {
  596. function.WriteLog("运营中心奖发放", "开机奖励在激活中监控");
  597. RedisDbconn.Instance.AddList("OperatePrizeQueue", pos.Id);
  598. }
  599. }
  600. PosMachinesTwo item = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id);
  601. if(item != null)
  602. {
  603. item.Detail = "1";
  604. db.SaveChanges();
  605. }
  606. }
  607. }
  608. }
  609. db.Dispose();
  610. }
  611. public void activePrizeWithoutDeposit15(int posid = 0)
  612. {
  613. WebCMSEntities db = new WebCMSEntities();
  614. DateTime yesterday = DateTime.Now.AddDays(-100);
  615. DateTime today = DateTime.Now.AddHours(-1);
  616. IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.CreditTrade >= 5000 && string.IsNullOrEmpty(m.SeoKeyword) && (m.BrandId == 15 || m.BrandId == 16) && m.Detail != "1");
  617. if (posid > 0)
  618. {
  619. posList = posList.Where(m => m.Id == posid);
  620. }
  621. else
  622. {
  623. posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
  624. }
  625. foreach (PosMachinesTwo pos in posList.ToList())
  626. {
  627. function.WriteLog("机具号:" + pos.PosSn + ";奖励标记:" + pos.Detail + ";", "实时处理来客吧0押激活奖励");
  628. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  629. if (merchant != null)
  630. {
  631. string ParentNav = "";
  632. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  633. if (user != null)
  634. {
  635. int GetUserId = user.Id;
  636. ParentNav = user.ParentNav;
  637. int TopUserId = 0;
  638. if (!string.IsNullOrEmpty(ParentNav))
  639. {
  640. TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  641. }
  642. //首台无押金机返50
  643. if(pos.BindingTime.Value.AddDays(30) >= pos.ActivationTime)
  644. {
  645. doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, 30);
  646. DateTime now = pos.ActivationTime.Value;
  647. //盟主奖励
  648. if (pos.LeaderUserId > 0 && db.Leaders.Any(m => m.Id == pos.LeaderUserId && m.ExpiredDate > now) && pos.BindingTime > now.AddDays(-30) && pos.CardType < 100)
  649. {
  650. function.WriteLog("大盟主奖发放", "开机奖励在激活中监控");
  651. RedisDbconn.Instance.AddList("LeaderPrizeQueue", pos.Id);
  652. }
  653. //运营中心奖励
  654. if (pos.BindingTime > now.AddDays(-30) && pos.CardType < 100)
  655. {
  656. function.WriteLog("运营中心奖发放", "开机奖励在激活中监控");
  657. RedisDbconn.Instance.AddList("OperatePrizeQueue", pos.Id);
  658. }
  659. }
  660. function.WriteLog("ActPrize:30", "实时处理来客吧0押激活奖励");
  661. PosMachinesTwo item = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id);
  662. if(item != null)
  663. {
  664. item.Detail = "1";
  665. db.SaveChanges();
  666. }
  667. }
  668. }
  669. }
  670. db.Dispose();
  671. }
  672. public void activePrizeWithoutDeposit122(int posid = 0)
  673. {
  674. WebCMSEntities db = new WebCMSEntities();
  675. DateTime yesterday = DateTime.Now.AddDays(-30);
  676. DateTime today = DateTime.Now.AddMinutes(-5);
  677. DateTime checkTime = DateTime.Parse("2023-08-01 00:00:00");
  678. IQueryable<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.CreditTrade >= 1000 && m.ActivationTime < checkTime && string.IsNullOrEmpty(m.SeoKeyword) && (m.BrandId == 12 || m.BrandId == 13) && m.Detail != "1");
  679. if (posid > 0)
  680. {
  681. posList = posList.Where(m => m.Id == posid);
  682. }
  683. else
  684. {
  685. posList = posList.Where(m => m.ActivationTime >= yesterday && m.ActivationTime < today);
  686. }
  687. foreach (PosMachinesTwo pos in posList.ToList())
  688. {
  689. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  690. if (merchant != null)
  691. {
  692. string ParentNav = "";
  693. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  694. if (user != null)
  695. {
  696. int GetUserId = user.Id;
  697. ParentNav = user.ParentNav;
  698. int TopUserId = 0;
  699. if (!string.IsNullOrEmpty(ParentNav))
  700. {
  701. TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  702. }
  703. string IdCard = merchant.MerIdcardNo;
  704. string IdCardStart = IdCard.Substring(0, 6);
  705. string IdCardEnd = IdCard.Substring(IdCard.Length - 4);
  706. string MerName = merchant.MerchantName;
  707. List<int> BrandIds = new List<int>();
  708. BrandIds.Add(4);
  709. BrandIds.Add(5);
  710. BrandIds.Add(8);
  711. BrandIds.Add(9);
  712. PosMerchantInfo other = db.PosMerchantInfo.FirstOrDefault(m => m.MerIdcardNo.StartsWith(IdCardStart) && m.MerIdcardNo.EndsWith(IdCardEnd) && m.MerchantName.Contains(MerName) && BrandIds.Contains(m.BrandId));
  713. if(other != null)
  714. {
  715. PosMachinesTwo checkpos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == other.KqSnNo);
  716. if(checkpos != null)
  717. {
  718. doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, 50);
  719. PosMachinesTwo edit = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id);
  720. if(edit != null)
  721. {
  722. edit.SeoKeyword = Utils.Instance.TransferDeposit(edit, checkpos.SeoKeyword);
  723. edit.UpFeeFlag = checkpos.UpFeeFlag;
  724. edit.DownFeeFlag = checkpos.DownFeeFlag;
  725. edit.UpFeeDate = checkpos.UpFeeDate;
  726. edit.DownFeeDate = checkpos.DownFeeDate;
  727. edit.BindingTime = checkpos.BindingTime;
  728. edit.IsFirst = checkpos.IsFirst;
  729. db.SaveChanges();
  730. if(edit.UpFeeFlag == 1 && edit.DownFeeFlag == 0)
  731. {
  732. string info = "{\"RecordId\":\"\",\"PosId\":\"" + edit.Id + "\",\"Fee\": \"0.63\",\"Kind\": \"1\",\"OpMan\": \"系统\"}";
  733. RedisDbconn.Instance.AddList("SetDepositPostQueue", info);
  734. }
  735. }
  736. }
  737. }
  738. PosMachinesTwo item = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id);
  739. if(item != null)
  740. {
  741. item.Detail = "1";
  742. db.SaveChanges();
  743. }
  744. }
  745. }
  746. }
  747. db.Dispose();
  748. }
  749. public void doActiveReward(WebCMSEntities db, PosMerchantInfo merchant, PosMachinesTwo pos, int GetUserId, string ParentNav, int TopUserId, decimal ActPrize, int ChangeType = 0, int ActType = 0)
  750. {
  751. if(GetUserId < 1) return;
  752. string MerNo = merchant.KqMerNo;
  753. //判断商户号是否为空,避免下次再有空商户的情况,导致奖励不发放
  754. List<int> ChkBrandIds = new List<int>();
  755. ChkBrandIds.Add(23);
  756. ChkBrandIds.Add(24);
  757. ChkBrandIds.Add(25);
  758. ChkBrandIds.Add(26);
  759. if(string.IsNullOrEmpty(MerNo) && !ChkBrandIds.Contains(pos.BrandId))
  760. {
  761. // MerNo = "n" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
  762. RedisDbconn.Instance.AddList("ActiveRewardFailQueue", "{\"PosId\":\"" + pos.Id + "\",\"UserId\":\"" + GetUserId + "\",\"ActPrize\":\"" + ActPrize + "\",\"ChangeType\":\"" + ChangeType + "\",\"ActType\":\"" + ActType + "\"}");
  763. return;
  764. }
  765. List<int> BrandIds = new List<int>();
  766. BrandIds.Add(18);
  767. BrandIds.Add(19);
  768. BrandIds.Add(20);
  769. BrandIds.Add(21);
  770. BrandIds.Add(29);
  771. BrandIds.Add(23);
  772. BrandIds.Add(24);
  773. BrandIds.Add(25);
  774. BrandIds.Add(26);
  775. bool check = false;
  776. if(!BrandIds.Contains(pos.BrandId))
  777. {
  778. check = db.ActiveReward.Any(m => m.KqMerNo == MerNo && m.RewardAmount == ActPrize && m.ActType == ActType);
  779. }
  780. bool check1 = db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn && m.RewardAmount == ActPrize && m.ActType == ActType);
  781. if(Utils.Instance.IsWifi(pos.BrandId))
  782. {
  783. // check1 = db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn);
  784. check = false;
  785. check1 = false;
  786. }
  787. if (!check && !check1)
  788. {
  789. doActiveRewardFunc(db, merchant, pos, GetUserId, ParentNav, TopUserId, ActPrize, ChangeType, ActType);
  790. }
  791. }
  792. public void doActiveRewardFunc(WebCMSEntities db, PosMerchantInfo merchant, PosMachinesTwo pos, int GetUserId, string ParentNav, int TopUserId, decimal ActPrize, int ChangeType = 0, int ActType = 0)
  793. {
  794. function.WriteLog(DateTime.Now.ToString() + ":" + pos.PosSn, "实时处理激活奖励");
  795. Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
  796. db.ActiveReward.Add(new ActiveReward()
  797. {
  798. CreateDate = DateTime.Now,
  799. UpdateDate = DateTime.Now,
  800. UserId = GetUserId, //创客
  801. MerchantId = pos.BindMerchantId, //商户
  802. StandardDate = pos.ActivationTime, //达标日期
  803. RewardAmount = ActPrize, //奖励金额
  804. BrandId = pos.BrandId, //品牌
  805. UserNav = ParentNav, //创客父级
  806. DirectBuddyNo = merchant.UserId, //商户直属创客
  807. KqMerNo = merchant.KqMerNo, //渠道商户编号
  808. KqSnNo = pos.PosSn, //渠道SN号
  809. SnType = pos.PosSnType, //机具类型
  810. SnApplyUserId = pos.BuyUserId, //机具申请创客
  811. ActType = ActType, //激活类型
  812. SnStoreId = pos.StoreId, //SN仓库
  813. RewardTips = "激活奖励", //奖励描述
  814. Remark = "激活奖励", //备注
  815. ActDate = pos.ActivationTime, //激活时间
  816. TopUserId = TopUserId, //顶级创客
  817. SeoTitle = machineUser.RealName,
  818. });
  819. db.SaveChanges();
  820. string IdBrand = GetUserId + "_" + pos.BrandId;
  821. UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
  822. if (userData == null)
  823. {
  824. userData = db.UserMachineData.Add(new UserMachineData()
  825. {
  826. IdBrand = IdBrand,
  827. }).Entity;
  828. db.SaveChanges();
  829. }
  830. userData.ActProfit += ActPrize;
  831. db.SaveChanges();
  832. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
  833. if (account == null)
  834. {
  835. account = db.UserAccount.Add(new UserAccount()
  836. {
  837. Id = GetUserId,
  838. UserId = GetUserId,
  839. }).Entity;
  840. db.SaveChanges();
  841. }
  842. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  843. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  844. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  845. account.BalanceAmount += ActPrize;
  846. account.TotalAmount += ActPrize;
  847. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  848. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  849. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  850. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  851. {
  852. CreateDate = DateTime.Now,
  853. UpdateDate = DateTime.Now,
  854. UserId = GetUserId, //创客
  855. ChangeType = ChangeType, //变动类型
  856. ProductType = pos.BrandId, //产品类型
  857. ChangeAmount = ActPrize, //变更金额
  858. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  859. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  860. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  861. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  862. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  863. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  864. QueryCount = pos.Id, //机具Id
  865. Kind = 3
  866. }).Entity;
  867. db.SaveChanges();
  868. //发送APP推送消息
  869. Utils.Instance.PrizePush(GetUserId, ActPrize);
  870. }
  871. //根据商户信息发放激活奖励
  872. public void dosomething32(int merid = 0)
  873. {
  874. WebCMSEntities db = new WebCMSEntities();
  875. DateTime yesterday = DateTime.Now.AddHours(-3);
  876. DateTime today = DateTime.Now;
  877. IQueryable<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && !string.IsNullOrEmpty(m.SeoKeyword));
  878. if (merid > 0)
  879. {
  880. merList = merList.Where(m => m.Id == merid);
  881. }
  882. else
  883. {
  884. merList = merList.Where(m => m.MerStandardDate >= yesterday && m.MerStandardDate < today);
  885. }
  886. foreach (PosMerchantInfo merchant in merList.ToList())
  887. {
  888. // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
  889. // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag1 == 0);
  890. // if (otherInfo != null)
  891. // {
  892. // otherInfo.PrizeFlag1 = 1;
  893. // db.SaveChanges();
  894. MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
  895. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
  896. string ParentNav = "";
  897. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  898. if (user != null)
  899. {
  900. int GetUserId = user.Id;
  901. ParentNav = user.ParentNav;
  902. int TopUserId = 0;
  903. if (!string.IsNullOrEmpty(ParentNav))
  904. {
  905. TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  906. }
  907. decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
  908. KqProducts brand = db.KqProducts.FirstOrDefault(m => m.Id == pos.BrandId) ?? new KqProducts();
  909. if (brand.NoticeMoneyUnit == 2)
  910. {
  911. ActPrize = ActPrize / 100;
  912. }
  913. if (ActPrize > 0)
  914. {
  915. bool check = db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn);
  916. if (!check)
  917. {
  918. if (ActPrize == 99)
  919. {
  920. ActPrize = 100;
  921. }
  922. else if (ActPrize == 199)
  923. {
  924. ActPrize = 200;
  925. }
  926. else if (ActPrize == 299)
  927. {
  928. ActPrize = 300;
  929. }
  930. Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
  931. db.ActiveReward.Add(new ActiveReward()
  932. {
  933. CreateDate = DateTime.Now,
  934. UpdateDate = DateTime.Now,
  935. UserId = GetUserId, //创客
  936. MerchantId = pos.BindMerchantId, //商户
  937. StandardDate = pos.ActivationTime, //达标日期
  938. RewardAmount = ActPrize, //奖励金额
  939. BrandId = pos.BrandId, //品牌
  940. UserNav = ParentNav, //创客父级
  941. DirectBuddyNo = merchant.UserId, //商户直属创客
  942. KqMerNo = merchant.KqMerNo, //渠道商户编号
  943. KqSnNo = pos.PosSn, //渠道SN号
  944. SnType = pos.PosSnType, //机具类型
  945. SnApplyUserId = pos.BuyUserId, //机具申请创客
  946. ActType = 0, //激活类型
  947. SnStoreId = pos.StoreId, //SN仓库
  948. RewardTips = "激活奖励", //奖励描述
  949. Remark = "激活奖励", //备注
  950. ActDate = pos.ActivationTime, //激活时间
  951. TopUserId = TopUserId, //顶级创客
  952. SeoTitle = machineUser.RealName,
  953. });
  954. db.SaveChanges();
  955. string IdBrand = GetUserId + "_" + pos.BrandId;
  956. UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
  957. if (userData == null)
  958. {
  959. userData = db.UserMachineData.Add(new UserMachineData()
  960. {
  961. IdBrand = IdBrand,
  962. }).Entity;
  963. db.SaveChanges();
  964. }
  965. userData.ActProfit += ActPrize;
  966. db.SaveChanges();
  967. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
  968. if (account == null)
  969. {
  970. account = db.UserAccount.Add(new UserAccount()
  971. {
  972. Id = GetUserId,
  973. UserId = GetUserId,
  974. }).Entity;
  975. db.SaveChanges();
  976. }
  977. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  978. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  979. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  980. account.BalanceAmount += ActPrize;
  981. account.TotalAmount += ActPrize;
  982. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  983. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  984. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  985. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  986. {
  987. CreateDate = DateTime.Now,
  988. UpdateDate = DateTime.Now,
  989. UserId = GetUserId, //创客
  990. ChangeType = 0, //变动类型
  991. ProductType = pos.BrandId, //产品类型
  992. ChangeAmount = ActPrize, //变更金额
  993. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  994. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  995. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  996. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  997. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  998. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  999. }).Entity;
  1000. db.SaveChanges();
  1001. }
  1002. }
  1003. }
  1004. // }
  1005. }
  1006. db.Dispose();
  1007. }
  1008. //3. 前一天的激活记录,根据创客类型,如果是商户型创客,则开机奖励的起始人从此人上级计算。如果不是,则从此人开始计算
  1009. public void dosomething4(string date)
  1010. {
  1011. WebCMSEntities db = new WebCMSEntities();
  1012. DateTime yesterday = DateTime.Parse(date + " 00:00:00");
  1013. DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
  1014. List<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => m.ActivationState == 1 && m.ActivationTime >= yesterday && m.ActivationTime < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0" && m.CreditTrade >= 1000).ToList();
  1015. foreach (PosMachinesTwo pos in posList)
  1016. {
  1017. if (pos.BindingTime > DateTime.Now.AddDays(-30))
  1018. {
  1019. decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
  1020. if (ActPrize > 0)
  1021. {
  1022. // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
  1023. // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && m.Sort == 1);
  1024. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  1025. if (merchant != null)
  1026. {
  1027. // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
  1028. // if (otherInfo != null)
  1029. // {
  1030. // otherInfo.PrizeFlag2 = 1;
  1031. // db.SaveChanges();
  1032. // 从机具所属人上级开始分开机奖励
  1033. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  1034. if (user != null)
  1035. {
  1036. if (!string.IsNullOrEmpty(user.ParentNav))
  1037. {
  1038. decimal Prize = 20;
  1039. string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1040. for (int i = ParentNavs.Length - 1; i >= 0; i--)
  1041. {
  1042. int UserId = int.Parse(ParentNavs[i]);
  1043. Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
  1044. if (puser != null && Prize > 0)
  1045. {
  1046. int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0 && m.ActivationState == 0); //判断是否拥有3台兑换机
  1047. int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
  1048. int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
  1049. // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
  1050. // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
  1051. if (machineCount + ActiveCount + couponCount >= 3)
  1052. {
  1053. int pTopUserId = 0;
  1054. if (!string.IsNullOrEmpty(puser.ParentNav))
  1055. {
  1056. pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  1057. }
  1058. Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
  1059. OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
  1060. {
  1061. CreateDate = DateTime.Now,
  1062. UpdateDate = DateTime.Now,
  1063. TradeMonth = yesterday.ToString("yyyyMM"), //交易月
  1064. TradeDate = yesterday, //达标日期
  1065. UserId = puser.Id, //创客
  1066. BrandId = pos.BrandId, //品牌
  1067. ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
  1068. MerchantId = pos.BindMerchantId, //商户
  1069. DirectUserId = merchant.UserId, //商户直属人
  1070. SnNo = pos.PosSn, //SN号
  1071. MerNo = merchant.KqMerNo, //渠道商户号
  1072. SnType = pos.PosSnType, //机具类型
  1073. StandardDate = pos.ActivationTime, //商户的激活日期
  1074. SnStoreId = pos.StoreId, //SN仓库
  1075. MerBuddyType = puser.MerchantType, //商户创客类型
  1076. RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
  1077. RewardTips = "开机奖励", //奖励描述
  1078. CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
  1079. DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
  1080. CreditRewardAmount = Prize, //贷记卡交易奖励金额
  1081. RewardDesc = "开机奖励", //奖励描述
  1082. TopUserId = pTopUserId, //顶级创客
  1083. SeoTitle = machineUser.RealName,
  1084. }).Entity;
  1085. db.OpenReward.Add(new OpenReward()
  1086. {
  1087. CreateDate = DateTime.Now,
  1088. UpdateDate = DateTime.Now,
  1089. TradeMonth = yesterday.ToString("yyyyMM"), //交易月
  1090. TradeDate = DateTime.Now, //达标日期
  1091. UserId = puser.Id, //创客
  1092. BrandId = pos.BrandId, //品牌
  1093. RewardType = 2, //奖励类型
  1094. CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
  1095. DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
  1096. CreditRewardAmount = Prize, //贷记卡交易奖励金额
  1097. RewardDesc = "开机奖励", //奖励描述
  1098. TopUserId = pTopUserId, //顶级创客
  1099. });
  1100. string IdBrand = puser.Id + "_" + pos.BrandId;
  1101. UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
  1102. if (userData == null)
  1103. {
  1104. userData = db.UserMachineData.Add(new UserMachineData()
  1105. {
  1106. IdBrand = IdBrand,
  1107. }).Entity;
  1108. db.SaveChanges();
  1109. }
  1110. userData.OpenProfit += Prize;
  1111. db.SaveChanges();
  1112. //账户入库
  1113. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
  1114. if (account == null)
  1115. {
  1116. account = db.UserAccount.Add(new UserAccount()
  1117. {
  1118. Id = puser.Id,
  1119. UserId = puser.Id,
  1120. }).Entity;
  1121. db.SaveChanges();
  1122. }
  1123. //收支明细入库
  1124. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1125. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1126. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1127. account.BalanceAmount += Prize;
  1128. account.TotalAmount += Prize;
  1129. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1130. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1131. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1132. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  1133. {
  1134. CreateDate = DateTime.Now,
  1135. UpdateDate = DateTime.Now,
  1136. UserId = puser.Id, //创客
  1137. ChangeType = 50, //变动类型
  1138. ProductType = pos.BrandId, //产品类型
  1139. ChangeAmount = Prize, //变更金额
  1140. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1141. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1142. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1143. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1144. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1145. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1146. }).Entity;
  1147. db.SaveChanges();
  1148. Prize = 0;
  1149. }
  1150. }
  1151. }
  1152. }
  1153. }
  1154. // }
  1155. }
  1156. }
  1157. }
  1158. }
  1159. db.Dispose();
  1160. }
  1161. //实时获取开机奖励
  1162. public void StartOpenReward()
  1163. {
  1164. Thread th = new Thread(StartOpenRewardDo);
  1165. th.IsBackground = true;
  1166. th.Start();
  1167. }
  1168. public void StartOpenRewardDo()
  1169. {
  1170. while(true)
  1171. {
  1172. string content = RedisDbconn.Instance.RPop<string>("OpenRewardQueue");
  1173. if(!string.IsNullOrEmpty(content))
  1174. {
  1175. try
  1176. {
  1177. function.WriteLog("\n\n" + DateTime.Now.ToString() + "\nposid:" + content, "开机奖励发放日志");
  1178. int PosId = int.Parse(content);
  1179. Thread.Sleep(1000);
  1180. List<int> BrandIds = new List<int>();
  1181. BrandIds.Add(14);
  1182. BrandIds.Add(18);
  1183. BrandIds.Add(19);
  1184. BrandIds.Add(20);
  1185. BrandIds.Add(21);
  1186. BrandIds.Add(29);
  1187. BrandIds.Add(23);
  1188. BrandIds.Add(24);
  1189. BrandIds.Add(25);
  1190. BrandIds.Add(26);
  1191. WebCMSEntities db = new WebCMSEntities();
  1192. OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
  1193. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId && m.ActivationState == 1 && ((!string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0" && m.CreditTrade >= 1000) || BrandIds.Contains(m.BrandId)));
  1194. if (pos != null)
  1195. {
  1196. function.WriteLog("sn:" + pos.PosSn, "开机奖励发放日志");
  1197. bool IsGet = true;
  1198. if(Utils.Instance.IsWifi(pos.BrandId))
  1199. {
  1200. int Count = db.OpenRewardDetail.Count(m => m.SnNo == pos.PosSn);
  1201. int Count1 = db.WifiTradeRecord.Count(m => m.SnNo == pos.PosSn);
  1202. IsGet = Count >= Count1;
  1203. }
  1204. else
  1205. {
  1206. IsGet = db.OpenRewardDetail.Any(m => m.SnNo == pos.PosSn);
  1207. }
  1208. if (pos.BindingTime > DateTime.Now.AddDays(-30) && !IsGet)
  1209. {
  1210. decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
  1211. function.WriteLog("押金:" + pos.SeoKeyword, "开机奖励发放日志");
  1212. if (ActPrize > 0 || pos.BrandId == 14)
  1213. {
  1214. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  1215. if (merchant != null)
  1216. {
  1217. function.WriteLog("商户:" + merchant.KqMerNo, "开机奖励发放日志");
  1218. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  1219. if (user != null)
  1220. {
  1221. function.WriteLog("所属人:" + user.MakerCode, "开机奖励发放日志");
  1222. string ParentNav = function.CheckNull(user.ParentNav) + "," + user.Id + ",";
  1223. if (!string.IsNullOrEmpty(ParentNav))
  1224. {
  1225. decimal Prize = 0;
  1226. if(pos.BrandId == 14)
  1227. {
  1228. Prize = 19 * 0.3M;
  1229. }
  1230. if(Utils.Instance.IsHaoDa(pos.BrandId))
  1231. {
  1232. Prize = 20;
  1233. }
  1234. if(Utils.Instance.IsWifi(pos.BrandId))
  1235. {
  1236. PxcModels.WifiTradeRecord trade = db.WifiTradeRecord.FirstOrDefault(m => m.SnNo == pos.PosSn);
  1237. if (trade != null)
  1238. {
  1239. Prize = trade.TradeAmount * 0.03M;
  1240. }
  1241. }
  1242. List<int> CheckUserIds = RedisDbconn.Instance.GetList<int>("OpenPrizeUserIds", 1, 1000);
  1243. if(CheckUserIds.Count > 0)
  1244. {
  1245. PosMachines posItem = db.PosMachines.FirstOrDefault(m => m.Id == pos.Id) ?? new PosMachines();
  1246. if(posItem.UserId > 0)
  1247. {
  1248. UserRankItem puser = PosCouponPrizeService.Instance.GetUserLevel(posItem.UserId);
  1249. if (puser.Id > 0 && (puser.LeaderLevel > 0 || puser.OperateLevel > 0) && Prize > 0)
  1250. {
  1251. bool op = false;
  1252. foreach(int CheckUserId in CheckUserIds)
  1253. {
  1254. if(puser.ParentNav.Contains("," + CheckUserId + ","))
  1255. {
  1256. op = true;
  1257. break;
  1258. }
  1259. }
  1260. if(op)
  1261. {
  1262. PostOpenReward(db, pos, merchant, puser, Prize);
  1263. Prize = 0;
  1264. }
  1265. }
  1266. }
  1267. }
  1268. if(Prize > 0)
  1269. {
  1270. string[] ParentNavs = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1271. for (int i = ParentNavs.Length - 1; i >= 0; i--)
  1272. {
  1273. int UserId = int.Parse(ParentNavs[i]);
  1274. // Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1);
  1275. UserRankItem puser = PosCouponPrizeService.Instance.GetUserLevel(UserId);
  1276. if (puser.Id > 0 && Prize > 0)
  1277. {
  1278. function.WriteLog("上级:" + puser.MakerCode, "开机奖励发放日志");
  1279. function.WriteLog("条件:LeaderLevel:" + puser.LeaderLevel + ",UserType:" + puser.UserType, "开机奖励发放日志");
  1280. if(puser.UserType > 0 || puser.LeaderLevel > 0)
  1281. {
  1282. bool leaderOp = true;
  1283. if(puser.LeaderLevel > 0 && puser.UserType == 0)
  1284. {
  1285. DateTime now = DateTime.Now;
  1286. leaderOp = db.Leaders.Any(m => m.Id == puser.Id && m.ExpiredDate >= now);
  1287. function.WriteLog("条件:leaderOp:" + leaderOp, "开机奖励发放日志");
  1288. }
  1289. else if(puser.LeaderLevel == 0 && puser.UserType > 0)
  1290. {
  1291. DateTime now = DateTime.Now;
  1292. leaderOp = opdb.SysAdmin.Any(m => m.UserId == puser.Id && m.ExpireDate >= now);
  1293. function.WriteLog("条件:2-leaderOp:" + leaderOp, "盟主开机奖励发放日志");
  1294. }
  1295. else if(puser.LeaderLevel > 0 && puser.UserType > 0)
  1296. {
  1297. DateTime now = DateTime.Now;
  1298. leaderOp = db.Leaders.Any(m => m.Id == puser.Id && m.ExpiredDate >= now);
  1299. if(!leaderOp) leaderOp = opdb.SysAdmin.Any(m => m.UserId == puser.Id && m.ExpireDate >= now);
  1300. }
  1301. if(leaderOp)
  1302. {
  1303. function.WriteLog("满足条件", "开机奖励发放日志");
  1304. int pTopUserId = 0;
  1305. if (!string.IsNullOrEmpty(puser.ParentNav))
  1306. {
  1307. pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  1308. }
  1309. PostOpenReward(db, pos, merchant, puser, Prize);
  1310. Prize = 0;
  1311. }
  1312. }
  1313. }
  1314. }
  1315. }
  1316. }
  1317. }
  1318. // }
  1319. }
  1320. }
  1321. }
  1322. }
  1323. db.Dispose();
  1324. opdb.Dispose();
  1325. }
  1326. catch(Exception ex)
  1327. {
  1328. function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "实时获取开机奖励异常");
  1329. }
  1330. }
  1331. else
  1332. {
  1333. Thread.Sleep(5000);
  1334. }
  1335. }
  1336. }
  1337. public void StartLeaderReward()
  1338. {
  1339. Thread th = new Thread(StartLeaderRewardDo);
  1340. th.IsBackground = true;
  1341. th.Start();
  1342. }
  1343. public void StartLeaderRewardDo()
  1344. {
  1345. while(true)
  1346. {
  1347. string content = RedisDbconn.Instance.RPop<string>("LeaderRewardQueue");
  1348. if(!string.IsNullOrEmpty(content))
  1349. {
  1350. try
  1351. {
  1352. function.WriteLog("\n\n" + DateTime.Now.ToString() + "\nposid:" + content, "盟主开机奖励发放日志");
  1353. int PosId = int.Parse(content);
  1354. Thread.Sleep(1000);
  1355. WebCMSEntities db = new WebCMSEntities();
  1356. OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
  1357. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId && m.ActivationState == 1 && m.CreditTrade >= 10000 && m.BrandId != 14);
  1358. if (pos != null)
  1359. {
  1360. function.WriteLog("sn:" + pos.PosSn, "盟主开机奖励发放日志");
  1361. bool IsGet = db.OpenRewardDetail.Any(m => m.SnNo == pos.PosSn);
  1362. if (!IsGet)
  1363. {
  1364. // decimal ActPrize = decimal.Parse(function.CheckNum(pos.SeoKeyword));
  1365. // function.WriteLog("押金:" + pos.SeoKeyword, "盟主开机奖励发放日志");
  1366. // if (ActPrize > 0)
  1367. // {
  1368. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  1369. if (merchant != null)
  1370. {
  1371. function.WriteLog("商户:" + merchant.KqMerNo, "盟主开机奖励发放日志");
  1372. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  1373. if (user != null)
  1374. {
  1375. function.WriteLog("所属人:" + user.MakerCode, "盟主开机奖励发放日志");
  1376. string ParentNav = function.CheckNull(user.ParentNav) + "," + user.Id + ",";
  1377. if (!string.IsNullOrEmpty(ParentNav))
  1378. {
  1379. decimal Prize = 50;
  1380. string[] ParentNavs = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1381. for (int i = ParentNavs.Length - 1; i >= 0; i--)
  1382. {
  1383. int UserId = int.Parse(ParentNavs[i]);
  1384. // Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1);
  1385. UserRankItem puser = PosCouponPrizeService.Instance.GetUserLevel(UserId);
  1386. if (puser.Id > 0 && Prize > 0)
  1387. {
  1388. function.WriteLog("上级:" + puser.MakerCode, "盟主开机奖励发放日志");
  1389. function.WriteLog("条件:LeaderLevel:" + puser.LeaderLevel + ",UserType:" + puser.UserType, "盟主开机奖励发放日志");
  1390. if(puser.LeaderLevel > 0 || puser.UserType > 0)
  1391. {
  1392. bool leaderOp = true;
  1393. if(puser.LeaderLevel > 0 && puser.UserType == 0)
  1394. {
  1395. DateTime now = DateTime.Now;
  1396. leaderOp = db.Leaders.Any(m => m.Id == puser.Id && m.ExpiredDate >= now);
  1397. function.WriteLog("条件:1-leaderOp:" + leaderOp, "盟主开机奖励发放日志");
  1398. }
  1399. // else if(puser.LeaderLevel == 0 && puser.UserType > 0)
  1400. // {
  1401. // DateTime now = DateTime.Now;
  1402. // leaderOp = opdb.SysAdmin.Any(m => m.UserId == puser.Id && m.ExpireDate >= now);
  1403. // function.WriteLog("条件:2-leaderOp:" + leaderOp, "盟主开机奖励发放日志");
  1404. // }
  1405. if(leaderOp)
  1406. {
  1407. function.WriteLog("满足条件", "盟主开机奖励发放日志");
  1408. int pTopUserId = 0;
  1409. if (!string.IsNullOrEmpty(puser.ParentNav))
  1410. {
  1411. pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  1412. }
  1413. PostOpenReward(db, pos, merchant, puser, Prize);
  1414. Prize = 0;
  1415. }
  1416. }
  1417. }
  1418. }
  1419. }
  1420. }
  1421. // }
  1422. }
  1423. // }
  1424. }
  1425. }
  1426. db.Dispose();
  1427. opdb.Dispose();
  1428. }
  1429. catch(Exception ex)
  1430. {
  1431. function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "盟主开机奖励发放异常");
  1432. }
  1433. }
  1434. else
  1435. {
  1436. Thread.Sleep(5000);
  1437. }
  1438. }
  1439. }
  1440. public void dosomething42(string date)
  1441. {
  1442. WebCMSEntities db = new WebCMSEntities();
  1443. DateTime yesterday = DateTime.Parse(date + " 00:00:00");
  1444. DateTime today = DateTime.Parse(DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00");
  1445. List<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => m.ActiveStatus == 1 && m.MerStandardDate >= yesterday && m.MerStandardDate < today && !string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0").ToList();
  1446. foreach (PosMerchantInfo merchant in merList)
  1447. {
  1448. MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.MerchantNo) ?? new MachineForMerNo();
  1449. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forMerNo.SnId) ?? new PosMachinesTwo();
  1450. if (pos.ActivationTime > DateTime.Now.AddDays(-20) && pos.CreditTrade >= 1000)
  1451. {
  1452. decimal ActPrize = decimal.Parse(function.CheckNum(merchant.SeoKeyword));
  1453. if (ActPrize > 0)
  1454. {
  1455. // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && !string.IsNullOrEmpty(m.MerIdcardNo));
  1456. // PosMerchantOtherInfo otherInfo = db.PosMerchantOtherInfo.FirstOrDefault(m => m.CertId == merchant.MerIdcardNo && m.PrizeFlag2 == 0);
  1457. // if (otherInfo != null)
  1458. // {
  1459. // otherInfo.PrizeFlag2 = 1;
  1460. // db.SaveChanges();
  1461. // 从机具所属人上级开始分开机奖励
  1462. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId);
  1463. if (user != null)
  1464. {
  1465. if (!string.IsNullOrEmpty(user.ParentNav))
  1466. {
  1467. decimal Prize = 20;
  1468. string[] ParentNavs = user.ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1469. for (int i = ParentNavs.Length - 1; i >= 0; i--)
  1470. {
  1471. int UserId = int.Parse(ParentNavs[i]);
  1472. Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
  1473. if (puser != null && Prize > 0)
  1474. {
  1475. int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0 && m.ActivationState == 0); //判断是否拥有3台兑换机
  1476. int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
  1477. int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
  1478. // int BigCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.BrandId == 3); //判断是否拥有2台大机
  1479. // int BigActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1 && m.BrandId == 3); //判断是否拥有2台激活大机(不限购买或赠送)
  1480. if (machineCount + ActiveCount + couponCount >= 3)
  1481. {
  1482. int pTopUserId = 0;
  1483. if (!string.IsNullOrEmpty(puser.ParentNav))
  1484. {
  1485. pTopUserId = int.Parse(puser.ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  1486. }
  1487. Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
  1488. OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
  1489. {
  1490. CreateDate = DateTime.Now,
  1491. UpdateDate = DateTime.Now,
  1492. TradeMonth = yesterday.ToString("yyyyMM"), //交易月
  1493. TradeDate = yesterday, //达标日期
  1494. UserId = puser.Id, //创客
  1495. BrandId = pos.BrandId, //品牌
  1496. ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
  1497. MerchantId = pos.BindMerchantId, //商户
  1498. DirectUserId = merchant.UserId, //商户直属人
  1499. SnNo = pos.PosSn, //SN号
  1500. MerNo = merchant.KqMerNo, //渠道商户号
  1501. SnType = pos.PosSnType, //机具类型
  1502. StandardDate = pos.ActivationTime, //商户的激活日期
  1503. SnStoreId = pos.StoreId, //SN仓库
  1504. MerBuddyType = puser.MerchantType, //商户创客类型
  1505. RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
  1506. RewardTips = "开机奖励", //奖励描述
  1507. CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
  1508. DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
  1509. CreditRewardAmount = Prize, //贷记卡交易奖励金额
  1510. RewardDesc = "开机奖励", //奖励描述
  1511. TopUserId = pTopUserId, //顶级创客
  1512. SeoTitle = machineUser.RealName,
  1513. }).Entity;
  1514. db.OpenReward.Add(new OpenReward()
  1515. {
  1516. CreateDate = DateTime.Now,
  1517. UpdateDate = DateTime.Now,
  1518. TradeMonth = yesterday.ToString("yyyyMM"), //交易月
  1519. TradeDate = DateTime.Now, //达标日期
  1520. UserId = puser.Id, //创客
  1521. BrandId = pos.BrandId, //品牌
  1522. RewardType = 2, //奖励类型
  1523. CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
  1524. DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
  1525. CreditRewardAmount = Prize, //贷记卡交易奖励金额
  1526. RewardDesc = "开机奖励", //奖励描述
  1527. TopUserId = pTopUserId, //顶级创客
  1528. });
  1529. string IdBrand = puser.Id + "_" + pos.BrandId;
  1530. UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
  1531. if (userData == null)
  1532. {
  1533. userData = db.UserMachineData.Add(new UserMachineData()
  1534. {
  1535. IdBrand = IdBrand,
  1536. }).Entity;
  1537. db.SaveChanges();
  1538. }
  1539. userData.OpenProfit += Prize;
  1540. db.SaveChanges();
  1541. //账户入库
  1542. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
  1543. if (account == null)
  1544. {
  1545. account = db.UserAccount.Add(new UserAccount()
  1546. {
  1547. Id = puser.Id,
  1548. UserId = puser.Id,
  1549. }).Entity;
  1550. db.SaveChanges();
  1551. }
  1552. //收支明细入库
  1553. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1554. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1555. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1556. account.BalanceAmount += Prize;
  1557. account.TotalAmount += Prize;
  1558. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1559. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1560. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1561. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  1562. {
  1563. CreateDate = DateTime.Now,
  1564. UpdateDate = DateTime.Now,
  1565. UserId = puser.Id, //创客
  1566. ChangeType = 50, //变动类型
  1567. ProductType = pos.BrandId, //产品类型
  1568. ChangeAmount = Prize, //变更金额
  1569. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1570. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1571. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1572. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1573. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1574. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1575. }).Entity;
  1576. db.SaveChanges();
  1577. string dateString = yesterday.ToString("yyyyMMdd");
  1578. string monthString = yesterday.ToString("yyyyMM");
  1579. // 开机奖励列表
  1580. List<string> dates = RedisDbconn.Instance.GetList<string>("OpenRewardDay:" + puser.Id + ":" + pos.BrandId);
  1581. if (!dates.Contains(dateString))
  1582. {
  1583. RedisDbconn.Instance.AddList("OpenRewardDay:" + puser.Id + ":" + pos.BrandId, dateString);
  1584. }
  1585. RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + dateString, Prize);
  1586. List<string> months = RedisDbconn.Instance.GetList<string>("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId);
  1587. if (!months.Contains(monthString))
  1588. {
  1589. RedisDbconn.Instance.AddList("OpenRewardMonth:" + puser.Id + ":" + pos.BrandId, monthString);
  1590. }
  1591. RedisDbconn.Instance.AddNumber("OpenRewardAmt:" + puser.Id + ":" + pos.BrandId + ":" + monthString, Prize);
  1592. // 开机奖励详情
  1593. RedisDbconn.Instance.AddList("OpenRewardDetail:" + puser.Id + ":" + pos.BrandId + ":" + dateString, detail);
  1594. Prize -= 10;
  1595. }
  1596. }
  1597. }
  1598. }
  1599. }
  1600. // }
  1601. }
  1602. }
  1603. }
  1604. db.Dispose();
  1605. }
  1606. // 4. 前一天的流量卡记录和匹配
  1607. public void ListenFluxRecord()
  1608. {
  1609. Thread th = new Thread(ListenFluxRecordD0);
  1610. th.IsBackground = true;
  1611. th.Start();
  1612. }
  1613. public void ListenFluxRecordD0()
  1614. {
  1615. while(true)
  1616. {
  1617. if(DateTime.Now.Hour > 0)
  1618. {
  1619. CheckFluxForTrade();
  1620. }
  1621. Thread.Sleep(600000);
  1622. }
  1623. }
  1624. public void doFluxRecord()
  1625. {
  1626. function.WriteLog(DateTime.Now.ToString(), "执行流量费返佣");
  1627. SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
  1628. WebCMSEntities db = new WebCMSEntities();
  1629. DateTime start = DateTime.Now.AddDays(-20);
  1630. List<SpModels.TradeFluxRecord> trades = spdb.TradeFluxRecord.Where(m => m.CreateDate >= start && m.Status == 1).ToList();
  1631. foreach (SpModels.TradeFluxRecord trade in trades)
  1632. {
  1633. try
  1634. {
  1635. string OrderNo = trade.TradeSerialNo; //单号
  1636. DateTime TradeDate = trade.CreateDate.Value;
  1637. string TradeMonth = TradeDate.ToString("yyyyMM");
  1638. decimal FeeAmount = trade.FeeAmount; //流量费
  1639. int BrandId = int.Parse(trade.ProductType);
  1640. KqProducts brand = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  1641. if (brand.NoticeMoneyUnit == 2)
  1642. {
  1643. FeeAmount = FeeAmount / 100;
  1644. }
  1645. string TradeSnNo = trade.TradeSnNo; //机具SN
  1646. decimal FluxProfit = 0;
  1647. if (trade.ProductType == "1" && FeeAmount == 60)
  1648. {
  1649. FluxProfit = 24;
  1650. }
  1651. else if (trade.ProductType == "7" && FeeAmount == 46)
  1652. {
  1653. FluxProfit = 10;
  1654. }
  1655. else if (trade.ProductType != "1" && FeeAmount == 48)
  1656. {
  1657. FluxProfit = 12;
  1658. }
  1659. else if (trade.ProductType != "1" && FeeAmount == 60)
  1660. {
  1661. FluxProfit = 24;
  1662. }
  1663. if (FluxProfit > 0)
  1664. {
  1665. MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == TradeSnNo) ?? new MachineForSnNo();
  1666. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId) ?? new PosMachinesTwo();
  1667. // PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId && m.Sort == 1);
  1668. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
  1669. if (merchant != null && pos.BrandId != 6)
  1670. {
  1671. bool checkExist = db.FluxProfitDetail.Any(m => m.MerNo == merchant.KqMerNo);
  1672. if (!checkExist && decimal.Parse(function.CheckNum(pos.SeoKeyword)) > 0)
  1673. {
  1674. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
  1675. int GetUserId = user.Id;
  1676. int TopUserId = 0;
  1677. string ParentNav = user.ParentNav;
  1678. if (!string.IsNullOrEmpty(ParentNav))
  1679. {
  1680. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1681. if (ParentNavList.Length > 1)
  1682. {
  1683. TopUserId = int.Parse(ParentNavList[1]);
  1684. }
  1685. else if (ParentNavList.Length == 1)
  1686. {
  1687. TopUserId = int.Parse(ParentNavList[0]);
  1688. }
  1689. }
  1690. FluxProfitSummary fluxProfit = db.FluxProfitSummary.FirstOrDefault(m => m.UserId == GetUserId && m.BrandId == pos.BrandId && m.TradeMonth == TradeMonth);
  1691. if (fluxProfit == null)
  1692. {
  1693. fluxProfit = db.FluxProfitSummary.Add(new FluxProfitSummary()
  1694. {
  1695. CreateDate = DateTime.Now,
  1696. UpdateDate = DateTime.Now,
  1697. UserId = GetUserId, //创客
  1698. BrandId = pos.BrandId,
  1699. TopUserId = TopUserId, //顶级创客
  1700. TradeMonth = TradeMonth, //交易月
  1701. MerUserType = user.MerchantType, //商户创客类型
  1702. Remark = "流量卡分佣", //备注
  1703. }).Entity;
  1704. db.SaveChanges();
  1705. }
  1706. fluxProfit.FluxProfitAmt += FluxProfit; //流量分润总金额
  1707. db.FluxProfitDetail.Add(new FluxProfitDetail()
  1708. {
  1709. CreateDate = DateTime.Now,
  1710. UpdateDate = DateTime.Now,
  1711. RecordNo = OrderNo, //单号
  1712. TradeDate = TradeDate.ToString("yyyyMMdd"), //交易日期
  1713. TradeTime = TradeDate.ToString("HHmmss"), //交易时间
  1714. TradeMonth = TradeMonth, //交易月
  1715. UserId = GetUserId, //创客
  1716. MerchantId = pos.BindMerchantId, //商户
  1717. MerchantUserId = pos.UserId, //商户直属人
  1718. MerNo = merchant.KqMerNo, //渠道商户编号
  1719. SnNo = pos.PosSn, //渠道SN号
  1720. FluxOrderNo = OrderNo, //流量扣费单号
  1721. TradeOrderNo = OrderNo, //交易流水号
  1722. TradeAmt = trade.TradeAmount, //商户交易额
  1723. FluxFeeAmt = FeeAmount, //流量费
  1724. FluxProfitAmt = FluxProfit, //流量分润总金额
  1725. PosType = pos.PosSnType.ToString(), //POS类型
  1726. Remark = "流量卡分佣", //备注
  1727. BrandId = pos.BrandId, //品牌
  1728. TopUserId = TopUserId, //顶级创客
  1729. MerUserType = user.MerchantType, //商户创客类型
  1730. });
  1731. string IdBrand = user.Id + "_" + pos.BrandId;
  1732. UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
  1733. if (userData == null)
  1734. {
  1735. userData = db.UserMachineData.Add(new UserMachineData()
  1736. {
  1737. IdBrand = IdBrand,
  1738. }).Entity;
  1739. db.SaveChanges();
  1740. }
  1741. userData.FluxProfit += FluxProfit;
  1742. db.SaveChanges();
  1743. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
  1744. if (account == null)
  1745. {
  1746. account = db.UserAccount.Add(new UserAccount()
  1747. {
  1748. Id = GetUserId,
  1749. UserId = GetUserId,
  1750. }).Entity;
  1751. db.SaveChanges();
  1752. }
  1753. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1754. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1755. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1756. account.BalanceAmount += FluxProfit;
  1757. account.TotalAmount += FluxProfit;
  1758. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1759. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1760. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1761. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  1762. {
  1763. CreateDate = DateTime.Now,
  1764. UpdateDate = DateTime.Now,
  1765. UserId = GetUserId, //创客
  1766. ChangeType = 60, //变动类型
  1767. ProductType = pos.BrandId, //产品类型
  1768. ChangeAmount = FluxProfit, //变更金额
  1769. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1770. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1771. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1772. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1773. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1774. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1775. }).Entity;
  1776. db.SaveChanges();
  1777. }
  1778. SpModels.TradeFluxRecord edit = spdb.TradeFluxRecord.FirstOrDefault(m => m.Id == trade.Id);
  1779. if (edit != null)
  1780. {
  1781. edit.Status = 2;
  1782. spdb.SaveChanges();
  1783. }
  1784. }
  1785. }
  1786. }
  1787. catch (Exception ex)
  1788. {
  1789. function.WriteLog(DateTime.Now.ToString() + "\n$" + trade.Id + "$\n" + ex.ToString(), "流量卡分佣异常");
  1790. }
  1791. }
  1792. spdb.Dispose();
  1793. db.Dispose();
  1794. function.WriteLog(DateTime.Now.ToString() + "\n", "执行流量费返佣");
  1795. }
  1796. public void CheckFluxForTrade()
  1797. {
  1798. function.WriteLog(DateTime.Now.ToString(), "扫描交易记录中的流量费");
  1799. SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
  1800. DateTime start = DateTime.Now.AddDays(-120);
  1801. int StartId = int.Parse(function.CheckInt(function.ReadInstance("/SycnSp/TradeRecordId.txt")));
  1802. List<string> BrandIds = new List<string>();
  1803. BrandIds.Add("1");
  1804. BrandIds.Add("10");
  1805. BrandIds.Add("12");
  1806. var list = spdb.TradeRecord.Select(m => new { m.Id, m.CreateDate, m.ProductType, m.Status }).Where(m => m.Id >= StartId && m.Status == 2 && m.CreateDate > start && BrandIds.Contains(m.ProductType)).OrderBy(m => m.CreateDate);
  1807. foreach (var sub in list.ToList())
  1808. {
  1809. try
  1810. {
  1811. SpModels.TradeRecord trade = spdb.TradeRecord.FirstOrDefault(m => m.Id == sub.Id);
  1812. if (trade != null)
  1813. {
  1814. if(trade.ProductType == "1") //金控
  1815. {
  1816. string content = trade.SeoDescription;
  1817. if (!string.IsNullOrEmpty(content))
  1818. {
  1819. content = System.Web.HttpUtility.UrlDecode(content);
  1820. JsonData jsonObj = JsonMapper.ToObject(content);
  1821. decimal terminalDataFlowFee = decimal.Parse(function.CheckNum(jsonObj["terminalDataFlowFee"].ToString()));
  1822. if (terminalDataFlowFee > 0)
  1823. {
  1824. spdb.TradeFluxRecord.Add(new SpModels.TradeFluxRecord()
  1825. {
  1826. SeoDescription = trade.TradeSerialNo,
  1827. FeeAmount = terminalDataFlowFee,
  1828. TradeSerialNo = function.MD5_16(trade.TradeSerialNo),
  1829. CreateDate = trade.CreateDate,
  1830. TradeSnNo = trade.TradeSnNo,
  1831. ProductType = trade.ProductType,
  1832. Status = 1,
  1833. });
  1834. spdb.SaveChanges();
  1835. }
  1836. }
  1837. }
  1838. else if(trade.ProductType == "10" || trade.ProductType == "12") //10联动、12盒易付
  1839. {
  1840. if (trade.DigAmt > 0)
  1841. {
  1842. spdb.TradeFluxRecord.Add(new SpModels.TradeFluxRecord()
  1843. {
  1844. SeoDescription = trade.TradeSerialNo,
  1845. FeeAmount = trade.DigAmt,
  1846. TradeSerialNo = function.MD5_16(trade.TradeSerialNo),
  1847. CreateDate = trade.CreateDate,
  1848. TradeSnNo = trade.TradeSnNo,
  1849. ProductType = trade.ProductType,
  1850. Status = 1,
  1851. });
  1852. spdb.SaveChanges();
  1853. }
  1854. }
  1855. trade.Status = 3;
  1856. spdb.SaveChanges();
  1857. }
  1858. }
  1859. catch (Exception ex)
  1860. {
  1861. function.WriteLog(DateTime.Now.ToString() + "\n$" + sub.Id + "$\n" + ex.ToString(), "扫描交易记录中的流量费异常");
  1862. }
  1863. }
  1864. spdb.Dispose();
  1865. function.WriteLog(DateTime.Now.ToString() + "\n", "扫描交易记录中的流量费");
  1866. // doFluxRecord();
  1867. }
  1868. // 每天统计头一天的交易额
  1869. public void StartEverDay()
  1870. {
  1871. string TradeMonth = DateTime.Now.AddMonths(-6).ToString("yyyyMM");
  1872. // string PreMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
  1873. // if(DateTime.Now.Day == 1)
  1874. // {
  1875. // TradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
  1876. // PreMonth = DateTime.Now.AddMonths(-2).ToString("yyyyMM");
  1877. // }
  1878. // else
  1879. if(DateTime.Now.Day == 1)
  1880. {
  1881. CustomerSqlConn.op("update Users set ThisMonthTrade=0 where ThisMonthTrade>0", MysqlConn.SqlConnStr);
  1882. }
  1883. Dictionary<string, decimal> dic = new Dictionary<string, decimal>();
  1884. DataTable list = CustomerSqlConn.dtable("select UserId,sum(HelpNonDirectTradeAmt+HelpNonDirectDebitTradeAmt+NotHelpNonDirectTradeAmt+NotHelpNonDirectDebitTradeAmt+ProfitNonDirectTradeAmt+ProfitNonDirectDebitTradeAmt) from TradeDaySummary where Id>=15055757 and TradeMonth>='" + TradeMonth + "' and SeoTitle='team' and UserId>0 group by UserId", MysqlConn.ReadSqlConnStr);
  1885. foreach (DataRow dr in list.Rows)
  1886. {
  1887. string UserId = dr["UserId"].ToString();
  1888. string ThisMonthTrade = dr[1].ToString();
  1889. dic.Add(UserId, decimal.Parse(function.CheckNum(ThisMonthTrade)));
  1890. }
  1891. list = CustomerSqlConn.dtable("select UserId,sum(ProfitTradeAmt+ProfitDebitTradeAmt) from TradeDaySummary2 where TradeMonth>='" + TradeMonth + "' and SeoTitle='team' and UserId>0 group by UserId", MysqlConn.ReadSqlConnStr);
  1892. foreach (DataRow dr in list.Rows)
  1893. {
  1894. string UserId = dr["UserId"].ToString();
  1895. string ThisMonthTrade = dr[1].ToString();
  1896. if(dic.ContainsKey(UserId))
  1897. {
  1898. dic[UserId] += decimal.Parse(function.CheckNum(ThisMonthTrade));
  1899. }
  1900. else
  1901. {
  1902. dic.Add(UserId, decimal.Parse(function.CheckNum(ThisMonthTrade)));
  1903. }
  1904. }
  1905. // list = CustomerSqlConn.dtable("select UserId,sum(ActiveBuddyMerStatus)*10000 from UserTradeMonthSummary where TradeMonth>='" + TradeMonth + "' and BrandId=14 and SeoTitle='team' and UserId>0 group by UserId", MysqlConn.ReadSqlConnStr);
  1906. // foreach (DataRow dr in list.Rows)
  1907. // {
  1908. // string UserId = dr["UserId"].ToString();
  1909. // string ThisMonthTrade = dr[1].ToString();
  1910. // if(dic.ContainsKey(UserId))
  1911. // {
  1912. // dic[UserId] += decimal.Parse(function.CheckNum(ThisMonthTrade));
  1913. // }
  1914. // else
  1915. // {
  1916. // dic.Add(UserId, decimal.Parse(function.CheckNum(ThisMonthTrade)));
  1917. // }
  1918. // }
  1919. list = CustomerSqlConn.dtable("select UserId,sum(TotalAmount) from UserAmountSummary where TradeMonth>='" + TradeMonth + "' and SeoTitle='team' and UserId>0 group by UserId", MysqlConn.MpSqlConnStr);
  1920. foreach (DataRow dr in list.Rows)
  1921. {
  1922. string UserId = dr["UserId"].ToString();
  1923. string ThisMonthTrade = dr[1].ToString();
  1924. if(dic.ContainsKey(UserId))
  1925. {
  1926. dic[UserId] += decimal.Parse(function.CheckNum(ThisMonthTrade));
  1927. }
  1928. else
  1929. {
  1930. dic.Add(UserId, decimal.Parse(function.CheckNum(ThisMonthTrade)));
  1931. }
  1932. }
  1933. list = CustomerSqlConn.dtable("select UserId,sum(TotalAmount) from UserAmountSummary where TradeMonth>='" + TradeMonth + "' and SeoTitle='team' and UserId>0 group by UserId", MysqlConn.MpSqlConnStr2);
  1934. foreach (DataRow dr in list.Rows)
  1935. {
  1936. string UserId = dr["UserId"].ToString();
  1937. string ThisMonthTrade = dr[1].ToString();
  1938. if(dic.ContainsKey(UserId))
  1939. {
  1940. dic[UserId] += decimal.Parse(function.CheckNum(ThisMonthTrade));
  1941. }
  1942. else
  1943. {
  1944. dic.Add(UserId, decimal.Parse(function.CheckNum(ThisMonthTrade)));
  1945. }
  1946. }
  1947. // list = CustomerSqlConn.dtable("select UserId,SimValidActTeamCount*10000 from KxsStatServer.SimValidAct" + PreMonth + " where UserId>0", MysqlConn.ReadSqlConnStr);
  1948. // foreach (DataRow dr in list.Rows)
  1949. // {
  1950. // string UserId = dr["UserId"].ToString();
  1951. // string ThisMonthTrade = dr[1].ToString();
  1952. // if(dic.ContainsKey(UserId))
  1953. // {
  1954. // dic[UserId] += decimal.Parse(function.CheckNum(ThisMonthTrade));
  1955. // }
  1956. // else
  1957. // {
  1958. // dic.Add(UserId, decimal.Parse(function.CheckNum(ThisMonthTrade)));
  1959. // }
  1960. // }
  1961. list = CustomerSqlConn.dtable("select UserId,sum(TradeAmount) from HelpProfitUserTradeSummay where UserId>0 and TradeMonth>='" + TradeMonth + "' and SeoTitle='team' group by UserId", MysqlConn.ReadSqlConnStr);
  1962. foreach (DataRow dr in list.Rows)
  1963. {
  1964. string UserId = dr["UserId"].ToString();
  1965. string ThisMonthTrade = dr[1].ToString();
  1966. if(dic.ContainsKey(UserId))
  1967. {
  1968. dic[UserId] += decimal.Parse(function.CheckNum(ThisMonthTrade));
  1969. }
  1970. else
  1971. {
  1972. dic.Add(UserId, decimal.Parse(function.CheckNum(ThisMonthTrade)));
  1973. }
  1974. }
  1975. int index = 0;
  1976. string sql = "";
  1977. foreach(string UserId in dic.Keys)
  1978. {
  1979. index += 1;
  1980. sql += "update Users set ThisMonthTrade=" + dic[UserId] + " where Id=" + UserId + ";";
  1981. if(index >= 200)
  1982. {
  1983. CustomerSqlConn.op(sql, MysqlConn.SqlConnStr);
  1984. sql = "";
  1985. index = 0;
  1986. }
  1987. }
  1988. if(!string.IsNullOrEmpty(sql))
  1989. {
  1990. CustomerSqlConn.op(sql, MysqlConn.SqlConnStr);
  1991. }
  1992. }
  1993. public void StatTradeAmountEverDay(object sender)
  1994. {
  1995. string date = sender.ToString();
  1996. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
  1997. WebCMSEntities db = new WebCMSEntities();
  1998. try
  1999. {
  2000. string TradeDate = date.Replace("-", "");
  2001. string TradeMonth = TradeDate.Substring(0, 6);
  2002. string start = date + " 00:00:00";
  2003. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  2004. string startId = "0", endId = "9999999999";
  2005. List<string> uids = new List<string>();
  2006. DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
  2007. if (startDt.Rows.Count > 0)
  2008. {
  2009. startId = startDt.Rows[0][0].ToString();
  2010. }
  2011. function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
  2012. // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
  2013. // if (endDt.Rows.Count > 0)
  2014. // {
  2015. // endId = endDt.Rows[0][0].ToString();
  2016. // }
  2017. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
  2018. function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
  2019. foreach (DataRow userDr in userDt.Rows)
  2020. {
  2021. int UserId = int.Parse(userDr["Id"].ToString());
  2022. string ParentNav = userDr["ParentNav"].ToString();
  2023. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  2024. DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by BrandId,BankCardType,QrPayFlag");
  2025. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  2026. foreach (DataRow selfDr in selfdt.Rows)
  2027. {
  2028. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  2029. int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
  2030. int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
  2031. decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
  2032. UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  2033. if (selfStat == null)
  2034. {
  2035. selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  2036. {
  2037. UserId = UserId,
  2038. TradeMonth = TradeMonth,
  2039. TradeDate = TradeDate,
  2040. BrandId = BrandId,
  2041. QueryCount = QrPayFlag,
  2042. SeoTitle = "self",
  2043. }).Entity;
  2044. db.SaveChanges();
  2045. }
  2046. if (BankCardType == 0)
  2047. {
  2048. selfStat.DirectDebitTradeAmt += TradeAmount;
  2049. }
  2050. else if (BankCardType != 0)
  2051. {
  2052. selfStat.DirectTradeAmt += TradeAmount;
  2053. }
  2054. db.SaveChanges();
  2055. }
  2056. if (!string.IsNullOrEmpty(ParentNav))
  2057. {
  2058. ParentNav += "," + UserId + ",";
  2059. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  2060. foreach (string NavUserIdString in ParentNavList)
  2061. {
  2062. if (!uids.Contains(NavUserIdString + start))
  2063. {
  2064. uids.Add(NavUserIdString + start);
  2065. int NavUserId = int.Parse(NavUserIdString);
  2066. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  2067. DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId,BankCardType,QrPayFlag");
  2068. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  2069. foreach (DataRow teamDr in teamDt.Rows)
  2070. {
  2071. int BrandId = int.Parse(teamDr["BrandId"].ToString());
  2072. int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
  2073. int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
  2074. decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
  2075. UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  2076. if (teamStat == null)
  2077. {
  2078. teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  2079. {
  2080. UserId = NavUserId,
  2081. TradeMonth = TradeMonth,
  2082. TradeDate = TradeDate,
  2083. BrandId = BrandId,
  2084. QueryCount = QrPayFlag,
  2085. SeoTitle = "team",
  2086. }).Entity;
  2087. db.SaveChanges();
  2088. }
  2089. if (BankCardType == 0)
  2090. {
  2091. teamStat.NonDirectDebitTradeAmt += TradeAmount;
  2092. }
  2093. else if (BankCardType != 0)
  2094. {
  2095. teamStat.NonDirectTradeAmt += TradeAmount;
  2096. }
  2097. db.SaveChanges();
  2098. }
  2099. }
  2100. }
  2101. }
  2102. }
  2103. if (DateTime.Now.Day >= 2)
  2104. {
  2105. Thread.Sleep(5000);
  2106. DataTable list = OtherMySqlConn.dtable("select UserId,sum(NonDirectTradeAmt) from UserTradeDaySummary where TradeDate='" + TradeDate + "' GROUP BY UserId");
  2107. foreach (DataRow dr in list.Rows)
  2108. {
  2109. string UserId = dr["UserId"].ToString();
  2110. string ThisMonthTrade = dr[1].ToString();
  2111. OtherMySqlConn.op("update Users set ThisMonthTrade=ThisMonthTrade+" + ThisMonthTrade + " where Id=" + UserId);
  2112. }
  2113. }
  2114. }
  2115. catch (Exception ex)
  2116. {
  2117. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
  2118. }
  2119. db.Dispose();
  2120. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  2121. StatMerchantTrade(date);
  2122. }
  2123. //统计商户交易额
  2124. private void StatMerchantTrade(string date)
  2125. {
  2126. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行商户交易额日志");
  2127. try
  2128. {
  2129. string start = date + " 00:00:00";
  2130. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  2131. CustomerSqlConn.op("insert into PosMerchantTradeSummay (MerchantId,BrandId,TradeDate,TradeMonth,TradeAmount,CreateDate) select *,now() from (select MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d') as TradeDate,DATE_FORMAT(CreateDate,'%Y%m') as TradeMonth,sum(TradeAmount) as TradeAmount from TradeRecord where Id>=13000000 and CreateDate>='" + start + "' and CreateDate<'" + end + "' and ActStatus=1 and BrandId!=14 group by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d'),TradeDate,DATE_FORMAT(CreateDate,'%Y%m') order by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d')) tb", MysqlConn.SqlConnStr);
  2132. }
  2133. catch (Exception ex)
  2134. {
  2135. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计商户的交易额");
  2136. }
  2137. WebCMSEntities db = new WebCMSEntities();
  2138. var tran = db.Database.BeginTransaction();
  2139. try
  2140. {
  2141. SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities();
  2142. DateTime s = DateTime.Parse(date + " 00:00:00");
  2143. DateTime e = s.AddDays(1);
  2144. int StartId = int.Parse(function.CheckInt(function.ReadInstance("/SycnSp/TradeRecordId.txt")));
  2145. IQueryable<SpModels.TradeRecord> trades = spdb.TradeRecord.Where(m => m.Id >= StartId && m.ProductType == "23" && m.CreateDate >= s && m.CreateDate < e).OrderBy(m => m.CreateDate);
  2146. foreach (SpModels.TradeRecord trade in trades.ToList())
  2147. {
  2148. string MerNo = trade.TradeSnNo;
  2149. string TradeDate = trade.CreateDate.Value.ToString("yyyyMMdd");
  2150. string TradeMonth = TradeDate.Substring(0, 6);
  2151. PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo);
  2152. if(merchant != null)
  2153. {
  2154. PosMerchantTradeSummay stat = db.PosMerchantTradeSummay.FirstOrDefault(m => m.MerchantId == merchant.Id && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == merchant.BrandId);
  2155. if (stat == null)
  2156. {
  2157. stat = db.PosMerchantTradeSummay.Add(new PosMerchantTradeSummay()
  2158. {
  2159. MerchantId = merchant.Id,
  2160. TradeMonth = TradeMonth,
  2161. TradeDate = TradeDate,
  2162. BrandId = merchant.BrandId,
  2163. }).Entity;
  2164. db.SaveChanges();
  2165. }
  2166. stat.TradeAmount += trade.TradeAmount / 100;
  2167. db.SaveChanges();
  2168. }
  2169. }
  2170. spdb.Dispose();
  2171. tran.Commit();
  2172. }
  2173. catch (Exception ex)
  2174. {
  2175. tran.Rollback();
  2176. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计WIFI商户的交易额");
  2177. }
  2178. tran.Dispose();
  2179. db.Dispose();
  2180. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行商户交易额日志");
  2181. }
  2182. // 5. 创客升级
  2183. public void StatUserLevel()
  2184. {
  2185. Thread th = new Thread(StatUserLevelDo);
  2186. th.IsBackground = true;
  2187. th.Start();
  2188. }
  2189. public void StatUserLevelDo()
  2190. {
  2191. while (true)
  2192. {
  2193. if(DateTime.Now.Day < 15 && DateTime.Now.Hour >= 0)
  2194. {
  2195. string Month = DateTime.Now.AddDays(-1).ToString("yyyy-MM");
  2196. string flag = function.ReadInstance("/ProfitFlag/" + Month + ".txt");
  2197. if (string.IsNullOrEmpty(flag))
  2198. {
  2199. function.WritePage("/ProfitFlag/", Month + ".txt", DateTime.Now.ToString("HH:mm:ss"));
  2200. LogoutUserHelper.Instance.DoWorks(); //每月一号归档注销创客,把伞下创客归到注销创客的上级
  2201. StatUserLevelStartNew();
  2202. }
  2203. }
  2204. Thread.Sleep(600000);
  2205. }
  2206. }
  2207. public void StatUserLevelStart()
  2208. {
  2209. WebCMSEntities db = new WebCMSEntities();
  2210. MpMainModels.WebCMSEntities mpmaindb = new MpMainModels.WebCMSEntities();
  2211. try
  2212. {
  2213. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  2214. function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
  2215. DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00");
  2216. DateTime end = start.AddDays(1);
  2217. string TradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
  2218. List<UserLevelSet> sets = db.UserLevelSet.ToList();
  2219. bool op = true;
  2220. int startid = 0;
  2221. while(op)
  2222. {
  2223. var users = db.Users.Select(m => new { m.Id, m.AuthFlag }).Where(m => m.Id > startid && m.AuthFlag == 1).OrderBy(m => m.Id).Take(500).ToList();
  2224. function.WriteLog(users.Count.ToString(), "创客升级日志");
  2225. if(users.Count > 0)
  2226. {
  2227. foreach (var subuser in users)
  2228. {
  2229. Users user = db.Users.FirstOrDefault(m => m.Id == subuser.Id);
  2230. if (user != null)
  2231. {
  2232. int BeforeLevel = user.UserLevel;
  2233. int AfterLevel = 0;
  2234. decimal TradeAmount = 0;
  2235. //创客团队交易额
  2236. bool check = db.TradeDaySummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
  2237. if (check)
  2238. {
  2239. TradeAmount += db.TradeDaySummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.HelpNonDirectTradeAmt + m.HelpNonDirectDebitTradeAmt + m.NotHelpNonDirectTradeAmt + m.NotHelpNonDirectDebitTradeAmt + m.ProfitNonDirectTradeAmt + m.ProfitNonDirectDebitTradeAmt);
  2240. }
  2241. //助利宝团队交易额
  2242. DataTable checkdt = OtherMySqlConn.dtable("SELECT SUM(TradeAmount) TradeAmount FROM HelpProfitMerTradeSummay WHERE (MerchantId IN(SELECT MerchantId FROM HelpProfitMerIds WHERE UserId IN(SELECT Id from Users WHERE ParentNav like '%," + user.Id + ",%' OR Id=" + user.Id + "))) AND TradeMonth=" + TradeMonth + "");
  2243. if (checkdt.Rows.Count > 0)
  2244. {
  2245. TradeAmount += decimal.Parse(function.CheckNum(checkdt.Rows[0]["TradeAmount"].ToString()));
  2246. }
  2247. //码牌团队交易额
  2248. check = mpmaindb.UserAmountSummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
  2249. if (check)
  2250. {
  2251. TradeAmount += mpmaindb.UserAmountSummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.TotalAmount);
  2252. }
  2253. UserLevelSet set = sets.FirstOrDefault(m => m.UpLevelGrowth <= TradeAmount && m.UpLevelIntegral > TradeAmount);
  2254. if (set != null)
  2255. {
  2256. AfterLevel = set.Id;
  2257. }
  2258. // K6以上计算小市场是否达标
  2259. // 升级逻辑
  2260. bool upFlag = true;
  2261. if(AfterLevel > 5)
  2262. {
  2263. DataTable dt = OtherMySqlConn.dtable("select UserId,sum(HelpNonDirectTradeAmt+NotHelpNonDirectTradeAmt+ProfitNonDirectTradeAmt+HelpNonDirectDebitTradeAmt+NotHelpNonDirectDebitTradeAmt+ProfitNonDirectDebitTradeAmt) from TradeDaySummary where UserId in (select Id from Users where ParentUserId=" + user.Id + ") and TradeMonth='" + TradeMonth + "' and SeoTitle='team' group by UserId order by sum(HelpNonDirectTradeAmt+NotHelpNonDirectTradeAmt+ProfitNonDirectTradeAmt+HelpNonDirectDebitTradeAmt+ProfitNonDirectDebitTradeAmt) desc");
  2264. int index = 0;
  2265. decimal TradeAmt = 0;
  2266. decimal BigTradeAmt = 0;
  2267. foreach(DataRow dr in dt.Rows)
  2268. {
  2269. index += 1;
  2270. if(index == 1)
  2271. {
  2272. BigTradeAmt = decimal.Parse(dr[1].ToString());
  2273. }
  2274. else if(index > 1)
  2275. {
  2276. TradeAmt += decimal.Parse(dr[1].ToString());
  2277. }
  2278. }
  2279. if(TradeAmt < 12000000 || BigTradeAmt < 30000000)
  2280. {
  2281. if(AfterLevel > BeforeLevel && BeforeLevel >= 5) //保级,只升不降
  2282. {
  2283. AfterLevel = BeforeLevel;
  2284. }
  2285. else if(AfterLevel > BeforeLevel && BeforeLevel < 5)
  2286. {
  2287. AfterLevel = 5;
  2288. }
  2289. else if(BeforeLevel > 5)
  2290. {
  2291. AfterLevel = 5;
  2292. }
  2293. else
  2294. {
  2295. upFlag = false;
  2296. }
  2297. }
  2298. }
  2299. if (AfterLevel > BeforeLevel && AfterLevel > 1 && upFlag)
  2300. {
  2301. function.WriteLog("升级:" + user.Id.ToString() + BeforeLevel + "->" + AfterLevel, "创客升级日志");
  2302. user.UserLevel = AfterLevel;
  2303. DateTime checkTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
  2304. UserRank rank = db.UserRank.FirstOrDefault(m => m.CreateDate >= checkTime && m.UserId == user.Id);
  2305. if(rank == null)
  2306. {
  2307. db.UserRank.Add(new UserRank()
  2308. {
  2309. CreateDate = DateTime.Now,
  2310. UpdateDate = DateTime.Now,
  2311. UserId = user.Id, //创客
  2312. WhiteRank = BeforeLevel,
  2313. Rank = AfterLevel, //当前等级
  2314. StatYear = DateTime.Now.Year, //统计年份
  2315. StatMonth = DateTime.Now.Month, //统计月份
  2316. TradeAmt = TradeAmount, //团队交易总额
  2317. UpgradeFlag = 1, //升级标识
  2318. OperateDate = DateTime.Now, //操作时间
  2319. Status = 1,
  2320. });
  2321. db.SaveChanges();
  2322. }
  2323. else
  2324. {
  2325. rank.TradeAmt = TradeAmount;
  2326. rank.Rank = AfterLevel;
  2327. db.SaveChanges();
  2328. }
  2329. }
  2330. // 降级逻辑
  2331. if(!upFlag && AfterLevel > 5)
  2332. {
  2333. AfterLevel = 5;
  2334. }
  2335. if (AfterLevel < BeforeLevel && BeforeLevel > 1)
  2336. {
  2337. function.WriteLog(user.MakerCode + "-" + user.RealName + ":K" + BeforeLevel + "->K" + AfterLevel, "创客降级日志");
  2338. user.UserLevel = AfterLevel;
  2339. DateTime checkTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
  2340. UserRank rank = db.UserRank.FirstOrDefault(m => m.CreateDate >= checkTime && m.UserId == user.Id);
  2341. if(rank == null)
  2342. {
  2343. db.UserRank.Add(new UserRank()
  2344. {
  2345. CreateDate = DateTime.Now,
  2346. UpdateDate = DateTime.Now,
  2347. UserId = user.Id, //创客
  2348. WhiteRank = BeforeLevel,
  2349. Rank = AfterLevel, //当前等级
  2350. StatYear = DateTime.Now.Year, //统计年份
  2351. StatMonth = DateTime.Now.Month, //统计月份
  2352. TradeAmt = TradeAmount, //团队交易总额
  2353. UpgradeFlag = 0, //升级标识
  2354. OperateDate = DateTime.Now, //操作时间
  2355. Status = 1,
  2356. });
  2357. db.SaveChanges();
  2358. }
  2359. else
  2360. {
  2361. rank.TradeAmt = TradeAmount;
  2362. rank.Rank = AfterLevel;
  2363. rank.Status = 1;
  2364. db.SaveChanges();
  2365. }
  2366. }
  2367. }
  2368. startid = subuser.Id;
  2369. }
  2370. function.WriteLog(startid.ToString(), "创客升级日志");
  2371. }
  2372. else
  2373. {
  2374. op = false;
  2375. }
  2376. }
  2377. function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
  2378. }
  2379. catch (Exception ex)
  2380. {
  2381. function.WriteLog(ex.ToString(), "创客升级异常");
  2382. }
  2383. db.Dispose();
  2384. mpmaindb.Dispose();
  2385. RedisDbconn.Instance.AddList("DoTableEveryMonthQueue", "1");
  2386. }
  2387. public void StatUserLevelStartNew()
  2388. {
  2389. WebCMSEntities db = new WebCMSEntities();
  2390. MpMainModels.WebCMSEntities mpmaindb = new MpMainModels.WebCMSEntities();
  2391. MpMainModels2.WebCMSEntities mpmaindb2 = new MpMainModels2.WebCMSEntities();
  2392. try
  2393. {
  2394. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  2395. function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
  2396. DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00");
  2397. DateTime end = start.AddDays(1);
  2398. string TradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
  2399. List<UserLevelSet> sets = db.UserLevelSet.ToList();
  2400. bool op = true;
  2401. int startid = 138681;
  2402. while(op)
  2403. {
  2404. var users = db.Users.Select(m => new { m.Id, m.AuthFlag }).Where(m => m.Id > startid && m.AuthFlag == 1).OrderBy(m => m.Id).Take(500).ToList();
  2405. function.WriteLog(users.Count.ToString(), "创客升级日志");
  2406. if(users.Count > 0)
  2407. {
  2408. foreach (var subuser in users)
  2409. {
  2410. Users user = db.Users.FirstOrDefault(m => m.Id == subuser.Id);
  2411. if (user != null)
  2412. {
  2413. int BeforeLevel = user.UserLevel;
  2414. int AfterLevel = 0;
  2415. decimal TradeAmount = 0;
  2416. //创客团队交易额
  2417. bool check = db.TradeDaySummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
  2418. if (check)
  2419. {
  2420. TradeAmount += db.TradeDaySummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.HelpNonDirectTradeAmt + m.HelpNonDirectDebitTradeAmt + m.NotHelpNonDirectTradeAmt + m.NotHelpNonDirectDebitTradeAmt + m.ProfitNonDirectTradeAmt + m.ProfitNonDirectDebitTradeAmt);
  2421. }
  2422. //助利宝团队交易额
  2423. DataTable checkdt = OtherMySqlConn.dtable("SELECT SUM(TradeAmount) TradeAmount FROM HelpProfitMerTradeSummay WHERE (MerchantId IN(SELECT MerchantId FROM HelpProfitMerIds WHERE UserId IN(SELECT Id from Users WHERE ParentNav like '%," + user.Id + ",%' OR Id=" + user.Id + "))) AND TradeMonth=" + TradeMonth + "");
  2424. if (checkdt.Rows.Count > 0)
  2425. {
  2426. TradeAmount += decimal.Parse(function.CheckNum(checkdt.Rows[0]["TradeAmount"].ToString()));
  2427. }
  2428. //码牌团队交易额(直联)
  2429. check = mpmaindb.UserAmountSummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
  2430. if (check)
  2431. {
  2432. TradeAmount += mpmaindb.UserAmountSummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.IsAct == 1).Sum(m => m.TotalAmount) * 4;
  2433. }
  2434. //码牌团队交易额(银联)
  2435. check = mpmaindb2.UserAmountSummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team");
  2436. if (check)
  2437. {
  2438. TradeAmount += mpmaindb2.UserAmountSummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.IsAct == 1).Sum(m => m.TotalAmount) * 4;
  2439. }
  2440. //广电卡扶持期按1万/张计入职级
  2441. check = db.UserTradeMonthSummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.BrandId == 14);
  2442. if (check)
  2443. {
  2444. TradeAmount += db.UserTradeMonthSummary.Where(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.BrandId == 14).Sum(m => m.ActiveBuddyMerStatus) * 10000;
  2445. }
  2446. UserLevelSet set = sets.FirstOrDefault(m => m.UpLevelGrowth <= TradeAmount && m.UpLevelIntegral > TradeAmount);
  2447. if (set != null)
  2448. {
  2449. AfterLevel = set.Id;
  2450. }
  2451. // K6以上计算小市场是否达标
  2452. // 升级逻辑
  2453. bool upFlag = true;
  2454. if(AfterLevel > 5)
  2455. {
  2456. DataTable dt = OtherMySqlConn.dtable("select UserId,sum(HelpNonDirectTradeAmt+NotHelpNonDirectTradeAmt+ProfitNonDirectTradeAmt+HelpNonDirectDebitTradeAmt+NotHelpNonDirectDebitTradeAmt+ProfitNonDirectDebitTradeAmt) from TradeDaySummary where UserId in (select Id from Users where ParentUserId=" + user.Id + ") and TradeMonth='" + TradeMonth + "' and SeoTitle='team' group by UserId order by sum(HelpNonDirectTradeAmt+NotHelpNonDirectTradeAmt+ProfitNonDirectTradeAmt+HelpNonDirectDebitTradeAmt+ProfitNonDirectDebitTradeAmt) desc");
  2457. int index = 0;
  2458. decimal TradeAmt = 0;
  2459. decimal BigTradeAmt = 0;
  2460. foreach(DataRow dr in dt.Rows)
  2461. {
  2462. index += 1;
  2463. if(index == 1)
  2464. {
  2465. BigTradeAmt = decimal.Parse(dr[1].ToString());
  2466. }
  2467. else if(index > 1)
  2468. {
  2469. TradeAmt += decimal.Parse(dr[1].ToString());
  2470. }
  2471. }
  2472. if(TradeAmt < 12000000 || BigTradeAmt < 30000000)
  2473. {
  2474. if(AfterLevel > BeforeLevel && BeforeLevel >= 5) //保级,只升不降
  2475. {
  2476. AfterLevel = BeforeLevel;
  2477. }
  2478. else if(AfterLevel > BeforeLevel && BeforeLevel < 5)
  2479. {
  2480. AfterLevel = 5;
  2481. }
  2482. else if(BeforeLevel > 5)
  2483. {
  2484. AfterLevel = 5;
  2485. }
  2486. else
  2487. {
  2488. upFlag = false;
  2489. }
  2490. }
  2491. }
  2492. if (AfterLevel > BeforeLevel && AfterLevel > 0 && upFlag)
  2493. {
  2494. function.WriteLog("升级:" + user.Id.ToString() + BeforeLevel + "->" + AfterLevel, "创客升级日志");
  2495. user.UserLevel = AfterLevel;
  2496. DateTime checkTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
  2497. UserRank rank = db.UserRank.FirstOrDefault(m => m.CreateDate >= checkTime && m.UserId == user.Id);
  2498. if(rank == null)
  2499. {
  2500. db.UserRank.Add(new UserRank()
  2501. {
  2502. CreateDate = DateTime.Now,
  2503. UpdateDate = DateTime.Now,
  2504. UserId = user.Id, //创客
  2505. WhiteRank = BeforeLevel,
  2506. Rank = AfterLevel, //当前等级
  2507. StatYear = DateTime.Now.Year, //统计年份
  2508. StatMonth = DateTime.Now.Month, //统计月份
  2509. TradeAmt = TradeAmount, //团队交易总额
  2510. UpgradeFlag = 1, //升级标识
  2511. OperateDate = DateTime.Now, //操作时间
  2512. Status = 1,
  2513. });
  2514. db.SaveChanges();
  2515. }
  2516. else
  2517. {
  2518. rank.TradeAmt = TradeAmount;
  2519. rank.Rank = AfterLevel;
  2520. db.SaveChanges();
  2521. }
  2522. UserRankWhite rankWhite = db.UserRankWhite.FirstOrDefault(m => m.Id == user.Id);
  2523. if(rankWhite != null)
  2524. {
  2525. if(Utils.Instance.GetUserLevel(user.Id) >= rankWhite.Rank)
  2526. {
  2527. user.Version = 0;
  2528. db.SaveChanges();
  2529. }
  2530. }
  2531. }
  2532. // 降级逻辑
  2533. if(!upFlag && AfterLevel > 5)
  2534. {
  2535. AfterLevel = 5;
  2536. }
  2537. // 如果是达标创客,只能降级到K1
  2538. if(AfterLevel == 0 && Utils.Instance.IsStandardUser(user.Id))
  2539. {
  2540. AfterLevel = 1;
  2541. }
  2542. if (AfterLevel < BeforeLevel && BeforeLevel > 0)
  2543. {
  2544. function.WriteLog(user.MakerCode + "-" + user.RealName + ":K" + BeforeLevel + "->K" + AfterLevel, "创客降级日志");
  2545. user.UserLevel = AfterLevel;
  2546. DateTime checkTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
  2547. UserRank rank = db.UserRank.FirstOrDefault(m => m.CreateDate >= checkTime && m.UserId == user.Id);
  2548. if(rank == null)
  2549. {
  2550. db.UserRank.Add(new UserRank()
  2551. {
  2552. CreateDate = DateTime.Now,
  2553. UpdateDate = DateTime.Now,
  2554. UserId = user.Id, //创客
  2555. WhiteRank = BeforeLevel,
  2556. Rank = AfterLevel, //当前等级
  2557. StatYear = DateTime.Now.Year, //统计年份
  2558. StatMonth = DateTime.Now.Month, //统计月份
  2559. TradeAmt = TradeAmount, //团队交易总额
  2560. UpgradeFlag = 0, //升级标识
  2561. OperateDate = DateTime.Now, //操作时间
  2562. Status = 1,
  2563. });
  2564. db.SaveChanges();
  2565. }
  2566. else
  2567. {
  2568. rank.TradeAmt = TradeAmount;
  2569. rank.Rank = AfterLevel;
  2570. rank.Status = 1;
  2571. db.SaveChanges();
  2572. }
  2573. UserRankWhite rankWhite = db.UserRankWhite.FirstOrDefault(m => m.Id == user.Id);
  2574. if(rankWhite != null)
  2575. {
  2576. if(Utils.Instance.GetUserLevel(user.Id) < rankWhite.Rank)
  2577. {
  2578. user.Version = 3;
  2579. db.SaveChanges();
  2580. }
  2581. }
  2582. }
  2583. }
  2584. startid = subuser.Id;
  2585. }
  2586. function.WriteLog(startid.ToString(), "创客升级日志");
  2587. }
  2588. else
  2589. {
  2590. op = false;
  2591. }
  2592. }
  2593. //查找K0创客,如果商城下单购买一组机具券,则预设为K1
  2594. List<int> productIds = new List<int>();
  2595. productIds.Add(10);
  2596. productIds.Add(11);
  2597. op = true;
  2598. startid = 0;
  2599. while(op)
  2600. {
  2601. var users = db.Users.Select(m => new { m.Id, m.AuthFlag, m.UserLevel }).Where(m => m.Id > startid && m.AuthFlag == 1 && m.UserLevel == 0).OrderBy(m => m.Id).Take(50).ToList();
  2602. if(users.Count > 0)
  2603. {
  2604. foreach (var subuser in users)
  2605. {
  2606. bool hasOrder = db.Orders.Any(m => m.UserId == subuser.Id && m.Status > 0 && productIds.Contains(m.ProductId));
  2607. if(hasOrder)
  2608. {
  2609. Utils.Instance.LeaderPreUserLevel(subuser.Id, 1, DateTime.Parse("2025-01-01 00:00:00"));
  2610. db.UserRank.Add(new UserRank()
  2611. {
  2612. CreateDate = DateTime.Now,
  2613. UpdateDate = DateTime.Now,
  2614. UserId = subuser.Id, //创客
  2615. WhiteRank = 0,
  2616. Rank = 1, //当前等级
  2617. StatYear = DateTime.Now.Year, //统计年份
  2618. StatMonth = DateTime.Now.Month, //统计月份
  2619. TradeAmt = 0, //团队交易总额
  2620. UpgradeFlag = 1, //升级标识
  2621. OperateDate = DateTime.Now, //操作时间
  2622. Status = 1,
  2623. });
  2624. Users user = db.Users.FirstOrDefault(m => m.Id == subuser.Id);
  2625. if(user != null)
  2626. {
  2627. user.Version = 3;
  2628. }
  2629. db.SaveChanges();
  2630. }
  2631. }
  2632. }
  2633. else
  2634. {
  2635. op = false;
  2636. }
  2637. }
  2638. function.WriteLog(DateTime.Now.ToString(), "创客升级日志");
  2639. }
  2640. catch (Exception ex)
  2641. {
  2642. function.WriteLog(ex.ToString(), "创客升级异常");
  2643. }
  2644. db.Dispose();
  2645. mpmaindb.Dispose();
  2646. mpmaindb2.Dispose();
  2647. RedisDbconn.Instance.AddList("DoTableEveryMonthQueue", "1");
  2648. }
  2649. // 统计创客激活数
  2650. public void StartPosActNum()
  2651. {
  2652. Thread th = new Thread(StartPosActNumFor);
  2653. th.IsBackground = true;
  2654. th.Start();
  2655. }
  2656. public void StartPosActNumFor()
  2657. {
  2658. // DateTime end = DateTime.Parse("2022-06-15 00:00:00");
  2659. // DateTime check = DateTime.Parse("2022-06-14");
  2660. // while (check <= end)
  2661. // {
  2662. // StartPosActNumDo(check.ToString("yyyy-MM-dd"));
  2663. // check = check.AddDays(1);
  2664. // }
  2665. while (true)
  2666. {
  2667. if(DateTime.Now.Hour >= 2)
  2668. {
  2669. StartPosActNumEverTime();
  2670. }
  2671. Thread.Sleep(100);
  2672. }
  2673. }
  2674. public void StartPosActNumDo(object sender)
  2675. {
  2676. string date = sender.ToString();
  2677. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行创客激活数日志");
  2678. WebCMSEntities db = new WebCMSEntities();
  2679. try
  2680. {
  2681. string TradeDate = date.Replace("-", "");
  2682. string TradeMonth = TradeDate.Substring(0, 6);
  2683. string start = date + " 00:00:00";
  2684. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  2685. List<string> uids = new List<string>();
  2686. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT BuyUserId from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "')");
  2687. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行创客激活数日志");
  2688. foreach (DataRow userDr in userDt.Rows)
  2689. {
  2690. int UserId = int.Parse(userDr["Id"].ToString());
  2691. string ParentNav = userDr["ParentNav"].ToString();
  2692. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  2693. DataTable selfdt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId=" + UserId + " group by BrandId");
  2694. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  2695. foreach (DataRow selfDr in selfdt.Rows)
  2696. {
  2697. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  2698. int QrPayFlag = 0;
  2699. int ActCount = int.Parse(selfDr[1].ToString());
  2700. UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  2701. if (selfStat == null)
  2702. {
  2703. selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  2704. {
  2705. UserId = UserId,
  2706. TradeMonth = TradeMonth,
  2707. TradeDate = TradeDate,
  2708. BrandId = BrandId,
  2709. QueryCount = QrPayFlag,
  2710. SeoTitle = "self",
  2711. }).Entity;
  2712. db.SaveChanges();
  2713. }
  2714. selfStat.DirectDebitCapNum += ActCount;
  2715. db.SaveChanges();
  2716. }
  2717. if (!string.IsNullOrEmpty(ParentNav))
  2718. {
  2719. ParentNav += "," + UserId + ",";
  2720. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  2721. foreach (string NavUserIdString in ParentNavList)
  2722. {
  2723. if (!uids.Contains(NavUserIdString + start))
  2724. {
  2725. uids.Add(NavUserIdString + start);
  2726. int NavUserId = int.Parse(NavUserIdString);
  2727. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  2728. DataTable teamDt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId");
  2729. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  2730. foreach (DataRow teamDr in teamDt.Rows)
  2731. {
  2732. int BrandId = int.Parse(teamDr["BrandId"].ToString());
  2733. int QrPayFlag = 0;
  2734. int ActCount = int.Parse(teamDr[1].ToString());
  2735. UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  2736. if (teamStat == null)
  2737. {
  2738. teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  2739. {
  2740. UserId = NavUserId,
  2741. TradeMonth = TradeMonth,
  2742. TradeDate = TradeDate,
  2743. BrandId = BrandId,
  2744. QueryCount = QrPayFlag,
  2745. SeoTitle = "team",
  2746. }).Entity;
  2747. db.SaveChanges();
  2748. }
  2749. teamStat.NonDirectDebitCapNum += ActCount;
  2750. db.SaveChanges();
  2751. }
  2752. }
  2753. }
  2754. }
  2755. }
  2756. OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "'");
  2757. }
  2758. catch (Exception ex)
  2759. {
  2760. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行创客激活数异常");
  2761. }
  2762. db.Dispose();
  2763. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  2764. Thread.Sleep(60000);
  2765. }
  2766. public void StartPosActNumEverTime()
  2767. {
  2768. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  2769. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行创客激活数日志");
  2770. WebCMSEntities db = new WebCMSEntities();
  2771. try
  2772. {
  2773. DataTable idsDt = OtherMySqlConn.dtable("select Id from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime is not null and BuyUserId>0 limit 50");
  2774. if(idsDt.Rows.Count > 0)
  2775. {
  2776. string ids = "";
  2777. foreach (DataRow idsDr in idsDt.Rows)
  2778. {
  2779. ids += idsDr["Id"].ToString() + ",";
  2780. }
  2781. DataTable userDt = OtherMySqlConn.dtable("select BuyUserId,BrandId,DATE_FORMAT(ActivationTime, '%Y%m%d'),count(Id) from PosMachinesTwo where Id in (" + ids.TrimEnd(',') + ") group by BuyUserId,BrandId,DATE_FORMAT(ActivationTime, '%Y%m%d')");
  2782. if (userDt.Rows.Count > 0)
  2783. {
  2784. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行创客激活数日志");
  2785. foreach (DataRow userDr in userDt.Rows)
  2786. {
  2787. int UserId = int.Parse(userDr["BuyUserId"].ToString());
  2788. int BrandId = int.Parse(userDr["BrandId"].ToString());
  2789. string TradeDate = userDr[2].ToString();
  2790. int ActCount = int.Parse(function.CheckInt(userDr[3].ToString()));
  2791. int QrPayFlag = 0;
  2792. string TradeMonth = TradeDate.Substring(0, 6);
  2793. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  2794. string start = date + " 00:00:00";
  2795. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  2796. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  2797. string ParentNav = user.ParentNav;
  2798. UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  2799. if (selfStat == null)
  2800. {
  2801. selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  2802. {
  2803. UserId = UserId,
  2804. TradeMonth = TradeMonth,
  2805. TradeDate = TradeDate,
  2806. BrandId = BrandId,
  2807. QueryCount = QrPayFlag,
  2808. SeoTitle = "self",
  2809. }).Entity;
  2810. db.SaveChanges();
  2811. }
  2812. selfStat.DirectDebitCapNum += ActCount;
  2813. ParentNav += "," + UserId + ",";
  2814. if (!string.IsNullOrEmpty(ParentNav))
  2815. {
  2816. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  2817. foreach (string NavUserIdString in ParentNavList)
  2818. {
  2819. int NavUserId = int.Parse(NavUserIdString);
  2820. UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  2821. if (teamStat == null)
  2822. {
  2823. teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  2824. {
  2825. UserId = NavUserId,
  2826. TradeMonth = TradeMonth,
  2827. TradeDate = TradeDate,
  2828. BrandId = BrandId,
  2829. QueryCount = QrPayFlag,
  2830. SeoTitle = "team",
  2831. }).Entity;
  2832. db.SaveChanges();
  2833. }
  2834. teamStat.NonDirectDebitCapNum += ActCount;
  2835. }
  2836. }
  2837. }
  2838. db.SaveChanges();
  2839. OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  2840. }
  2841. }
  2842. }
  2843. catch (Exception ex)
  2844. {
  2845. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行创客激活数异常");
  2846. }
  2847. db.Dispose();
  2848. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行创客激活数日志");
  2849. }
  2850. // 统计新增创客数
  2851. public void StartNewUserNum()
  2852. {
  2853. Thread th = new Thread(StartNewUserNumFor);
  2854. th.IsBackground = true;
  2855. th.Start();
  2856. }
  2857. public void StartNewUserNumFor()
  2858. {
  2859. // DateTime end = DateTime.Parse("2022-06-15 00:00:00");
  2860. // DateTime check = DateTime.Parse("2022-06-14");
  2861. // while (check <= end)
  2862. // {
  2863. // StartNewUserNumDo(check.ToString("yyyy-MM-dd"));
  2864. // check = check.AddDays(1);
  2865. // }
  2866. while (true)
  2867. {
  2868. if(DateTime.Now.Hour >= 2)
  2869. {
  2870. StartNewUserNumEverTime();
  2871. }
  2872. Thread.Sleep(120000);
  2873. }
  2874. }
  2875. public void StartNewUserNumDo(object sender)
  2876. {
  2877. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  2878. string date = sender.ToString();
  2879. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
  2880. WebCMSEntities db = new WebCMSEntities();
  2881. try
  2882. {
  2883. string StatDate = date.Replace("-", "");
  2884. string StatMonth = StatDate.Substring(0, 6);
  2885. string start = date + " 00:00:00";
  2886. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  2887. List<string> uids = new List<string>();
  2888. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
  2889. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行新增创客数日志");
  2890. foreach (DataRow userDr in userDt.Rows)
  2891. {
  2892. int UserId = int.Parse(userDr["Id"].ToString());
  2893. string ParentNav = userDr["ParentNav"].ToString();
  2894. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  2895. DataTable selfdt = OtherMySqlConn.dtable("select count(Id) from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "' and ParentUserId=" + UserId + "");
  2896. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  2897. foreach (DataRow selfDr in selfdt.Rows)
  2898. {
  2899. int AddCount = int.Parse(selfDr[0].ToString());
  2900. PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
  2901. if (selfStat == null)
  2902. {
  2903. selfStat = db.PullnewSummary.Add(new PullnewSummary()
  2904. {
  2905. UserId = UserId,
  2906. StatMonth = StatMonth,
  2907. StatDate = StatDate,
  2908. SeoTitle = "self",
  2909. }).Entity;
  2910. db.SaveChanges();
  2911. }
  2912. selfStat.RecUserAuthNum += AddCount;
  2913. db.SaveChanges();
  2914. }
  2915. if (!string.IsNullOrEmpty(ParentNav))
  2916. {
  2917. ParentNav += "," + UserId + ",";
  2918. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  2919. foreach (string NavUserIdString in ParentNavList)
  2920. {
  2921. if (!uids.Contains(NavUserIdString + start))
  2922. {
  2923. uids.Add(NavUserIdString + start);
  2924. int NavUserId = int.Parse(NavUserIdString);
  2925. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  2926. DataTable teamDt = OtherMySqlConn.dtable("select count(Id) from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "' and ParentNav like '%," + NavUserId + ",%'");
  2927. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  2928. foreach (DataRow teamDr in teamDt.Rows)
  2929. {
  2930. int AddCount = int.Parse(teamDr[0].ToString());
  2931. PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
  2932. if (teamStat == null)
  2933. {
  2934. teamStat = db.PullnewSummary.Add(new PullnewSummary()
  2935. {
  2936. UserId = NavUserId,
  2937. StatMonth = StatMonth,
  2938. StatDate = StatDate,
  2939. SeoTitle = "team",
  2940. }).Entity;
  2941. db.SaveChanges();
  2942. }
  2943. teamStat.RecUserAuthNum += AddCount;
  2944. db.SaveChanges();
  2945. }
  2946. }
  2947. }
  2948. }
  2949. }
  2950. OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
  2951. }
  2952. catch (Exception ex)
  2953. {
  2954. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
  2955. }
  2956. db.Dispose();
  2957. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  2958. Thread.Sleep(60000);
  2959. }
  2960. public void StartNewUserNumEverTime()
  2961. {
  2962. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  2963. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行新增创客数日志");
  2964. WebCMSEntities db = new WebCMSEntities();
  2965. try
  2966. {
  2967. DataTable idsDt = OtherMySqlConn.dtable("select Id from Users where QueryCount=0 and AuthFlag=1 and AuthDate is not null limit 50");
  2968. if(idsDt.Rows.Count > 0)
  2969. {
  2970. string ids = "";
  2971. foreach (DataRow idsDr in idsDt.Rows)
  2972. {
  2973. ids += idsDr["Id"].ToString() + ",";
  2974. }
  2975. DataTable userDt = OtherMySqlConn.dtable("select ParentUserId,DATE_FORMAT(AuthDate, '%Y%m%d'),count(Id) from Users where Id in (" + ids.TrimEnd(',') + ") group by ParentUserId,DATE_FORMAT(AuthDate, '%Y%m%d')");
  2976. if(userDt.Rows.Count > 0)
  2977. {
  2978. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行新增创客数日志");
  2979. foreach (DataRow userDr in userDt.Rows)
  2980. {
  2981. string StatDate = userDr[1].ToString();
  2982. int UserId = int.Parse(userDr["ParentUserId"].ToString());
  2983. string StatMonth = StatDate.Substring(0, 6);
  2984. string date = StatDate.Substring(0, 4) + "-" + StatDate.Substring(4, 2) + "-" + StatDate.Substring(6, 2);
  2985. string start = date + " 00:00:00";
  2986. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  2987. int AddCount = int.Parse(userDr[2].ToString());
  2988. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  2989. string ParentNav = user.ParentNav;
  2990. PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
  2991. if (selfStat == null)
  2992. {
  2993. selfStat = db.PullnewSummary.Add(new PullnewSummary()
  2994. {
  2995. UserId = UserId,
  2996. StatMonth = StatMonth,
  2997. StatDate = StatDate,
  2998. SeoTitle = "self",
  2999. }).Entity;
  3000. db.SaveChanges();
  3001. }
  3002. selfStat.RecUserAuthNum += AddCount;
  3003. ParentNav += "," + UserId + ",";
  3004. if (!string.IsNullOrEmpty(ParentNav))
  3005. {
  3006. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  3007. foreach (string NavUserIdString in ParentNavList)
  3008. {
  3009. int NavUserId = int.Parse(NavUserIdString);
  3010. PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
  3011. if (teamStat == null)
  3012. {
  3013. teamStat = db.PullnewSummary.Add(new PullnewSummary()
  3014. {
  3015. UserId = NavUserId,
  3016. StatMonth = StatMonth,
  3017. StatDate = StatDate,
  3018. SeoTitle = "team",
  3019. }).Entity;
  3020. db.SaveChanges();
  3021. }
  3022. teamStat.RecUserAuthNum += AddCount;
  3023. }
  3024. }
  3025. }
  3026. db.SaveChanges();
  3027. OtherMySqlConn.op("update Users set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  3028. }
  3029. }
  3030. }
  3031. catch (Exception ex)
  3032. {
  3033. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行新增创客数异常");
  3034. }
  3035. db.Dispose();
  3036. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行新增创客数日志");
  3037. }
  3038. // 每天统计头一天的收益
  3039. public void StatProfit()
  3040. {
  3041. Thread th = new Thread(StatProfitDo);
  3042. th.IsBackground = true;
  3043. th.Start();
  3044. }
  3045. public void StatProfitDo()
  3046. {
  3047. // DateTime end = DateTime.Parse("2022-06-16 00:00:00");
  3048. // DateTime check = DateTime.Parse("2022-06-16");
  3049. // while (check <= end)
  3050. // {
  3051. // StatProfitEverDay(check.ToString("yyyy-MM-dd"));
  3052. // Thread.Sleep(1000);
  3053. // check = check.AddDays(1);
  3054. // }
  3055. while (true)
  3056. {
  3057. if(DateTime.Now.Hour >= 2)
  3058. {
  3059. StatProfitEverDayEverTime();
  3060. }
  3061. Thread.Sleep(120000);
  3062. }
  3063. }
  3064. public void StatProfitEverDay(object sender)
  3065. {
  3066. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  3067. string date = sender.ToString();
  3068. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天收益日志");
  3069. WebCMSEntities db = new WebCMSEntities();
  3070. try
  3071. {
  3072. string TradeDate = date.Replace("-", "");
  3073. string TradeMonth = TradeDate.Substring(0, 6);
  3074. string start = date + " 00:00:00";
  3075. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  3076. string startId = "0";
  3077. List<string> uids = new List<string>();
  3078. DataTable startDt = OtherMySqlConn.dtable("select min(Id) from UserAccountRecord where CreateDate>='" + start + "'");
  3079. if (startDt.Rows.Count > 0)
  3080. {
  3081. startId = startDt.Rows[0][0].ToString();
  3082. }
  3083. function.WriteLog(startId + "\n\n", "执行昨天收益日志");
  3084. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from UserAccountRecord where Id>=" + startId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
  3085. function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天收益日志");
  3086. foreach (DataRow userDr in userDt.Rows)
  3087. {
  3088. int UserId = int.Parse(userDr["Id"].ToString());
  3089. string ParentNav = userDr["ParentNav"].ToString();
  3090. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  3091. DataTable selfdt = OtherMySqlConn.dtable("select ChangeType,ProductType,sum(ChangeAmount) from UserAccountRecord where Id>=" + startId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by ChangeType,ProductType");
  3092. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  3093. foreach (DataRow selfDr in selfdt.Rows)
  3094. {
  3095. int ChangeType = int.Parse(selfDr["ChangeType"].ToString());
  3096. int ProductType = int.Parse(selfDr["ProductType"].ToString());
  3097. decimal ProfitAmount = decimal.Parse(selfDr[2].ToString());
  3098. UserRebateDetail selfStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "self");
  3099. if (selfStat == null)
  3100. {
  3101. selfStat = db.UserRebateDetail.Add(new UserRebateDetail()
  3102. {
  3103. UserId = UserId,
  3104. TradeMonth = TradeMonth,
  3105. TradeDate = TradeDate,
  3106. RebateType = ChangeType,
  3107. ProductType = ProductType,
  3108. SeoTitle = "self",
  3109. }).Entity;
  3110. db.SaveChanges();
  3111. }
  3112. selfStat.CreditRewardAmount += ProfitAmount;
  3113. db.SaveChanges();
  3114. }
  3115. if (!string.IsNullOrEmpty(ParentNav))
  3116. {
  3117. ParentNav += "," + UserId + ",";
  3118. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  3119. foreach (string NavUserIdString in ParentNavList)
  3120. {
  3121. if (!uids.Contains(NavUserIdString + start))
  3122. {
  3123. uids.Add(NavUserIdString + start);
  3124. int NavUserId = int.Parse(NavUserIdString);
  3125. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  3126. DataTable teamDt = OtherMySqlConn.dtable("select ChangeType,ProductType,sum(ChangeAmount) from UserAccountRecord where Id>=" + startId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by ChangeType,ProductType");
  3127. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  3128. foreach (DataRow teamDr in teamDt.Rows)
  3129. {
  3130. int ChangeType = int.Parse(teamDr["ChangeType"].ToString());
  3131. int ProductType = int.Parse(teamDr["ProductType"].ToString());
  3132. decimal ProfitAmount = decimal.Parse(teamDr[2].ToString());
  3133. UserRebateDetail teamStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "team");
  3134. if (teamStat == null)
  3135. {
  3136. teamStat = db.UserRebateDetail.Add(new UserRebateDetail()
  3137. {
  3138. UserId = NavUserId,
  3139. TradeMonth = TradeMonth,
  3140. TradeDate = TradeDate,
  3141. RebateType = ChangeType,
  3142. ProductType = ProductType,
  3143. SeoTitle = "team",
  3144. }).Entity;
  3145. db.SaveChanges();
  3146. }
  3147. teamStat.CreditRewardAmount += ProfitAmount;
  3148. db.SaveChanges();
  3149. }
  3150. }
  3151. }
  3152. }
  3153. }
  3154. }
  3155. catch (Exception ex)
  3156. {
  3157. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天收益异常");
  3158. }
  3159. db.Dispose();
  3160. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  3161. }
  3162. public void StatProfitEverDayEverTime()
  3163. {
  3164. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  3165. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时统计收益日志");
  3166. WebCMSEntities db = new WebCMSEntities();
  3167. try
  3168. {
  3169. string startId = function.ReadInstance("/UserAccountRecord/Id.txt");
  3170. if(string.IsNullOrEmpty(startId))
  3171. {
  3172. startId = "160653";
  3173. }
  3174. DataTable idsDt = OtherMySqlConn.dtable("select Id from UserAccountRecord where Id>=" + startId + " and QueryCount=0 order by Id limit 50");
  3175. if(idsDt.Rows.Count > 0)
  3176. {
  3177. string ids = "";
  3178. foreach (DataRow idsDr in idsDt.Rows)
  3179. {
  3180. ids += idsDr["Id"].ToString() + ",";
  3181. startId = idsDr["Id"].ToString();
  3182. }
  3183. DataTable userDt = OtherMySqlConn.dtable("select UserId,ChangeType,ProductType,DATE_FORMAT(CreateDate, '%Y%m%d'),sum(ChangeAmount) from UserAccountRecord where Id in (" + ids.TrimEnd(',') + ") group by UserId,ChangeType,ProductType,DATE_FORMAT(CreateDate, '%Y%m%d')");
  3184. if (userDt.Rows.Count > 0)
  3185. {
  3186. function.WriteLog("收益人数:" + userDt.Rows.Count + "\n\n", "实时统计收益日志");
  3187. foreach (DataRow userDr in userDt.Rows)
  3188. {
  3189. int UserId = int.Parse(userDr["UserId"].ToString());
  3190. int ChangeType = int.Parse(userDr["ChangeType"].ToString());
  3191. int ProductType = int.Parse(userDr["ProductType"].ToString());
  3192. string TradeDate = userDr[3].ToString();
  3193. decimal ProfitAmount = decimal.Parse(userDr[4].ToString());
  3194. string TradeMonth = TradeDate.Substring(0, 6);
  3195. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  3196. string start = date + " 00:00:00";
  3197. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  3198. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  3199. string ParentNav = user.ParentNav;
  3200. UserRebateDetail selfStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "self");
  3201. if (selfStat == null)
  3202. {
  3203. selfStat = db.UserRebateDetail.Add(new UserRebateDetail()
  3204. {
  3205. UserId = UserId,
  3206. TradeMonth = TradeMonth,
  3207. TradeDate = TradeDate,
  3208. RebateType = ChangeType,
  3209. ProductType = ProductType,
  3210. SeoTitle = "self",
  3211. }).Entity;
  3212. db.SaveChanges();
  3213. }
  3214. selfStat.CreditRewardAmount += ProfitAmount;
  3215. ParentNav += "," + UserId + ",";
  3216. if (!string.IsNullOrEmpty(ParentNav))
  3217. {
  3218. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  3219. foreach (string NavUserIdString in ParentNavList)
  3220. {
  3221. int NavUserId = int.Parse(NavUserIdString);
  3222. UserRebateDetail teamStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "team");
  3223. if (teamStat == null)
  3224. {
  3225. teamStat = db.UserRebateDetail.Add(new UserRebateDetail()
  3226. {
  3227. UserId = NavUserId,
  3228. TradeMonth = TradeMonth,
  3229. TradeDate = TradeDate,
  3230. RebateType = ChangeType,
  3231. ProductType = ProductType,
  3232. SeoTitle = "team",
  3233. }).Entity;
  3234. db.SaveChanges();
  3235. }
  3236. teamStat.CreditRewardAmount += ProfitAmount;
  3237. }
  3238. }
  3239. }
  3240. db.SaveChanges();
  3241. OtherMySqlConn.op("update UserAccountRecord set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  3242. function.WritePage("/UserAccountRecord/", "Id.txt", startId);
  3243. }
  3244. }
  3245. }
  3246. catch (Exception ex)
  3247. {
  3248. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时统计收益异常");
  3249. }
  3250. db.Dispose();
  3251. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时统计收益日志");
  3252. }
  3253. //押金奖励发放
  3254. public void StartPreActPrize()
  3255. {
  3256. Thread th = new Thread(StartPreActPrizeDo);
  3257. th.IsBackground = true;
  3258. th.Start();
  3259. }
  3260. public void StartPreActPrizeDo()
  3261. {
  3262. while(true)
  3263. {
  3264. string content = RedisDbconn.Instance.RPop<string>("DepositActPrizeQueue");
  3265. if(!string.IsNullOrEmpty(content))
  3266. {
  3267. try
  3268. {
  3269. int PosId = int.Parse(content);
  3270. WebCMSEntities db = new WebCMSEntities();
  3271. PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId) ?? new PxcModels.PosMachinesTwo();
  3272. PxcModels.PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo();
  3273. PreActPrize(db, pos, merchant, pos.SeoKeyword);
  3274. db.Dispose();
  3275. }
  3276. catch(Exception ex)
  3277. {
  3278. function.WriteLog(DateTime.Now.ToString() + "\nPosId:" + content + "\n" + ex.ToString(), "押金奖励发放异常");
  3279. }
  3280. }
  3281. else
  3282. {
  3283. Thread.Sleep(10000);
  3284. }
  3285. }
  3286. }
  3287. public void PreActPrize(WebCMSEntities db, PosMachinesTwo pos, PosMerchantInfo merchant, string Deposit)
  3288. {
  3289. function.WriteLog(DateTime.Now.ToString() + "\n" + pos.PosSn, "服务费奖励发放日志");
  3290. decimal DepositNumber = decimal.Parse(function.CheckNum(Deposit));
  3291. function.WriteLog("DepositNumber:" + DepositNumber, "服务费奖励发放日志");
  3292. function.WriteLog("BuyUserId:" + pos.BuyUserId, "服务费奖励发放日志");
  3293. if(DepositNumber > 0 && pos.BuyUserId > 0)
  3294. {
  3295. function.WriteLog("满足条件", "服务费奖励发放日志");
  3296. decimal ActPrize = 0;
  3297. if(DepositNumber > 1000)
  3298. {
  3299. DepositNumber = DepositNumber / 100;
  3300. }
  3301. if(DepositNumber == 199) ActPrize = 100;
  3302. if(DepositNumber == 299) ActPrize = 200;
  3303. if(DepositNumber == 249) ActPrize = 160;
  3304. function.WriteLog("ActPrize:" + ActPrize, "服务费奖励发放日志");
  3305. if(ActPrize > 0)
  3306. {
  3307. Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
  3308. int GetUserId = user.Id;
  3309. string ParentNav = user.ParentNav;
  3310. int TopUserId = 0;
  3311. if (!string.IsNullOrEmpty(ParentNav))
  3312. {
  3313. TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
  3314. }
  3315. function.WriteLog("发放给:" + GetUserId, "服务费奖励发放日志");
  3316. if((pos.BrandId == 12 || pos.BrandId == 13) && string.IsNullOrEmpty(merchant.KqMerNo))
  3317. {
  3318. if(!db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn && m.ActType == 1))
  3319. {
  3320. doActiveRewardFunc(db, merchant, pos, GetUserId, user.ParentNav, TopUserId, ActPrize, 0, 1);
  3321. }
  3322. }
  3323. else
  3324. {
  3325. doActiveReward(db, merchant, pos, GetUserId, user.ParentNav, TopUserId, ActPrize, 0, 1);
  3326. }
  3327. function.WriteLog("已发放", "服务费奖励发放日志");
  3328. }
  3329. }
  3330. function.WriteLog("\n\n\n", "服务费奖励发放日志");
  3331. }
  3332. #region 判断品牌互斥条件,根据身份证号
  3333. public bool CheckRepeatByBrand(WebCMSEntities db, int MerchantId)
  3334. {
  3335. int check = db.PosMachinesTwo.Count(m => m.Status > -1 && m.BindMerchantId == MerchantId);
  3336. return false;
  3337. }
  3338. #endregion
  3339. #region 开机奖励
  3340. public void PostOpenReward(WebCMSEntities db, PosMachinesTwo pos, PosMerchantInfo merchant, UserRankItem puser, decimal Prize)
  3341. {
  3342. Users machineUser = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
  3343. OpenRewardDetail detail = db.OpenRewardDetail.Add(new OpenRewardDetail()
  3344. {
  3345. CreateDate = DateTime.Now,
  3346. UpdateDate = DateTime.Now,
  3347. TradeMonth = DateTime.Now.ToString("yyyyMM"), //交易月
  3348. TradeDate = DateTime.Now, //达标日期
  3349. UserId = puser.Id, //创客
  3350. BrandId = pos.BrandId, //品牌
  3351. ProductName = RelationClass.GetKqProductsInfo(pos.BrandId), //产品名称
  3352. MerchantId = pos.BindMerchantId, //商户
  3353. DirectUserId = merchant.UserId, //商户直属人
  3354. SnNo = pos.PosSn, //SN号
  3355. MerNo = merchant.KqMerNo, //渠道商户号
  3356. SnType = pos.PosSnType, //机具类型
  3357. StandardDate = pos.ActivationTime, //商户的激活日期
  3358. SnStoreId = pos.StoreId, //SN仓库
  3359. MerBuddyType = puser.MerchantType, //商户创客类型
  3360. RewardType = 1, //奖励类型 1-开机直接奖励,2-开机间接奖励
  3361. RewardTips = "开机奖励", //奖励描述
  3362. CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
  3363. DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
  3364. CreditRewardAmount = Prize, //贷记卡交易奖励金额
  3365. RewardDesc = "开机奖励", //奖励描述
  3366. SeoTitle = machineUser.RealName,
  3367. }).Entity;
  3368. db.OpenReward.Add(new OpenReward()
  3369. {
  3370. CreateDate = DateTime.Now,
  3371. UpdateDate = DateTime.Now,
  3372. TradeMonth = DateTime.Now.ToString("yyyyMM"), //交易月
  3373. TradeDate = DateTime.Now, //达标日期
  3374. UserId = puser.Id, //创客
  3375. BrandId = pos.BrandId, //品牌
  3376. RewardType = 2, //奖励类型
  3377. CreditTradeAmt = pos.CreditTrade, //贷记卡交易总金额
  3378. DebitTradeAmt = pos.DebitCardTrade, //借记卡交易总金额
  3379. CreditRewardAmount = Prize, //贷记卡交易奖励金额
  3380. RewardDesc = "开机奖励", //奖励描述
  3381. });
  3382. string IdBrand = puser.Id + "_" + pos.BrandId;
  3383. UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
  3384. if (userData == null)
  3385. {
  3386. userData = db.UserMachineData.Add(new UserMachineData()
  3387. {
  3388. IdBrand = IdBrand,
  3389. }).Entity;
  3390. db.SaveChanges();
  3391. }
  3392. userData.OpenProfit += Prize;
  3393. db.SaveChanges();
  3394. //账户入库
  3395. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id);
  3396. if (account == null)
  3397. {
  3398. account = db.UserAccount.Add(new UserAccount()
  3399. {
  3400. Id = puser.Id,
  3401. UserId = puser.Id,
  3402. }).Entity;
  3403. db.SaveChanges();
  3404. }
  3405. //收支明细入库
  3406. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  3407. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  3408. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  3409. account.BalanceAmount += Prize;
  3410. account.TotalAmount += Prize;
  3411. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  3412. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  3413. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  3414. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  3415. {
  3416. CreateDate = DateTime.Now,
  3417. UpdateDate = DateTime.Now,
  3418. UserId = puser.Id, //创客
  3419. ChangeType = 50, //变动类型
  3420. ProductType = pos.BrandId, //产品类型
  3421. ChangeAmount = Prize, //变更金额
  3422. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  3423. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  3424. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  3425. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  3426. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  3427. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  3428. QueryCount = pos.Id,
  3429. Kind = 3,
  3430. }).Entity;
  3431. db.SaveChanges();
  3432. //发送APP推送消息
  3433. Utils.Instance.PrizePush(puser.Id, Prize);
  3434. }
  3435. #endregion
  3436. }
  3437. }