PosCouponPrizeService.cs 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Data;
  5. using System.Threading;
  6. using MySystem.PxcModels;
  7. using Library;
  8. using LitJson;
  9. namespace MySystem
  10. {
  11. public class PosCouponPrizeService
  12. {
  13. public readonly static PosCouponPrizeService Instance = new PosCouponPrizeService();
  14. private PosCouponPrizeService()
  15. { }
  16. public void Start()
  17. {
  18. Thread th = new Thread(ready);
  19. th.IsBackground = true;
  20. th.Start();
  21. }
  22. private void ready()
  23. {
  24. bool op = true;
  25. while (op)
  26. {
  27. string content = RedisDbconn.Instance.RPop<string>("PosCouponPrizeQueue");
  28. if (!string.IsNullOrEmpty(content))
  29. {
  30. try
  31. {
  32. dosomething(int.Parse(function.CheckInt(content)));
  33. }
  34. catch(Exception ex)
  35. {
  36. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "商城下单机具券发奖异常");
  37. }
  38. }
  39. else
  40. {
  41. Thread.Sleep(2000);
  42. }
  43. }
  44. }
  45. public void dosomething(int OrderId)
  46. {
  47. WebCMSEntities db = new WebCMSEntities();
  48. OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
  49. Orders order = db.Orders.FirstOrDefault(m => m.Id == OrderId);
  50. if(order != null)
  51. {
  52. List<int> ChkIds = new List<int>(); //机具券商品Id集合
  53. ChkIds.Add(10);
  54. ChkIds.Add(11);
  55. ChkIds.Add(77);
  56. ChkIds.Add(78);
  57. ChkIds.Add(79);
  58. ChkIds.Add(92);
  59. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:商品id是(10,11,77,78,79,91);当前订单商品Id:" + order.ProductId + "");
  60. //判断是否是指定商品
  61. if(ChkIds.Contains(order.ProductId))
  62. {
  63. Utils.Instance.PrizeRecord(2, order.OrderNo, "满足条件");
  64. int Kind = 0;
  65. if (order.ProductId == 10)
  66. {
  67. Kind = 1;
  68. }
  69. else if (order.ProductId == 11)
  70. {
  71. Kind = 2;
  72. }
  73. int CouponCount = 0;
  74. if(Kind == 1)
  75. {
  76. CouponCount = 3 * order.BuyCount;
  77. }
  78. else if(Kind == 2)
  79. {
  80. CouponCount = 2 * order.BuyCount;
  81. }
  82. UserRankItem orderUser = GetUserLevel(order.UserId);
  83. if(orderUser.UserLevel == 0)
  84. {
  85. PreUserLevel(db, order.UserId, 1, DateTime.Parse("2025-01-01 00:00:00"));
  86. }
  87. List<string> codes = function.CheckNull(order.SnNos).Split(',').ToList();
  88. string ParentNav = orderUser.ParentNav + "," + orderUser.Id + ",";
  89. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  90. Array.Reverse(ParentNavList);
  91. int index = 0;
  92. bool DirectPrizeFlag = false; //推荐奖励发放标识
  93. bool BuyPrizeFlag = false; //购机奖励发放标识
  94. bool BackAccountFlag = false; //备用金返余额标识
  95. bool BigLeaderFlag = false; //大盟主标记
  96. decimal BuyPrize = 0; //购机奖励
  97. Utils.Instance.PrizeRecord(2, order.OrderNo, "开始向上递归查找");
  98. foreach(string ParentId in ParentNavList)
  99. {
  100. UserRankItem parentUser = GetUserLevel(int.Parse(ParentId));
  101. Utils.Instance.PrizeRecord(2, order.OrderNo, "创客编号:" + parentUser.MakerCode + ";创客姓名:" + parentUser.RealName + ";");
  102. index += 1;
  103. if(index == 1)
  104. {
  105. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:下单人是盟主;下单人盟主等级:" + orderUser.LeaderLevel + "");
  106. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:下单人是运营中心或合伙人;下单人合伙人等级:" + orderUser.OperateLevel + "");
  107. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:推荐奖励是否已发放;当前状态:" + DirectPrizeFlag + "");
  108. }
  109. if(index == 1 && (orderUser.LeaderLevel > 0 || orderUser.OperateLevel > 0) && !DirectPrizeFlag)
  110. {
  111. Utils.Instance.PrizeRecord(2, order.OrderNo, "满足条件,发放推荐奖励给下单人");
  112. DirectPrize(db, order.Id, order.UserId, order.BuyCount);
  113. DirectPrizeFlag = true;
  114. }
  115. if(index > 1)
  116. {
  117. bool IsStandardUser = Utils.Instance.IsStandardUser(parentUser.Id);
  118. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:上级是有效创客;是否有效创客:" + IsStandardUser + "");
  119. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:推荐奖励是否已发放;当前状态:" + DirectPrizeFlag + "");
  120. if(IsStandardUser && !DirectPrizeFlag)
  121. {
  122. Utils.Instance.PrizeRecord(2, order.OrderNo, "满足条件,发放推荐奖励给上级");
  123. DirectPrize(db, order.Id, parentUser.Id, order.BuyCount);
  124. DirectPrizeFlag = true;
  125. }
  126. }
  127. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:创客是盟主;创客盟主等级:" + parentUser.AgoLeaderLevel + "");
  128. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:盟主储备金是否充足;");
  129. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:创客是运营中心或合伙人;合伙人等级:" + parentUser.AgoLeaderLevel + "");
  130. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:合伙人未使用额度是否充足;");
  131. if(parentUser.AgoLeaderLevel > 0 && CheckLeaderReserve(db, order.BuyCount, parentUser.Id))
  132. {
  133. Utils.Instance.PrizeRecord(2, order.OrderNo, "满足条件,发放购机奖");
  134. //购机奖
  135. if(parentUser.LeaderLevel > 0)
  136. {
  137. decimal CurBuyPrize = GetBuyPrize(parentUser, order.UserId);
  138. decimal GetPrize = CurBuyPrize - BuyPrize;
  139. Utils.Instance.PrizeRecord(2, order.OrderNo, "发放金额:" + GetPrize);
  140. if(GetPrize > 0 && !BuyPrizeFlag)
  141. {
  142. bool PrizeFlag = true;
  143. int ChangeType = 118;
  144. if(parentUser.OperateLevel == 1)
  145. {
  146. ChangeType = 120;
  147. }
  148. if(parentUser.OperateLevel > 1)
  149. {
  150. ChangeType = 128;
  151. if(function.CheckNull(RedisDbconn.Instance.Get<string>("YingXunUser")).Contains("," + orderUser.Id + ","))
  152. {
  153. PrizeFlag = false;
  154. }
  155. }
  156. if(PrizeFlag)
  157. {
  158. OpAccount(db, order.Id, parentUser.Id, CurBuyPrize - BuyPrize, order.BuyCount, ChangeType);
  159. BuyPrizeFlag = true;
  160. }
  161. BuyPrize = CurBuyPrize;
  162. }
  163. if(parentUser.OperateLevel == 2 && CurBuyPrize == 100) BuyPrizeFlag = true;
  164. }
  165. if(!BackAccountFlag)
  166. {
  167. BackAccountFlag = true;
  168. //扣减备用金
  169. int ReserveRecordId = OpReserve(db, order.Id, parentUser.Id, GetWithdrawMoney(parentUser) * order.BuyCount, 2, order.UserId, "购机奖励");
  170. //返回到余额
  171. OpLeaderAccount(db, order, parentUser.Id, GetWithdrawMoney(parentUser), order.BuyCount, ReserveRecordId);
  172. }
  173. //给券打大盟主标记
  174. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:创客是盟主;创客盟主等级:" + parentUser.LeaderLevel + "");
  175. Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:盟主储备金是否充足;");
  176. if(parentUser.LeaderLevel == 1 && CheckLeaderReserve(db, order.BuyCount, parentUser.Id) && !BigLeaderFlag)
  177. {
  178. Utils.Instance.PrizeRecord(2, order.OrderNo, "满足小盟主条件,开始检查大盟主关联的额度");
  179. int LeaderId = CheckPosCouponLeaderFlag(db, parentUser.Id, order.BuyCount, codes);
  180. if(LeaderId > 0)
  181. {
  182. BigLeaderFlag = true;
  183. Utils.Instance.PrizeRecord(2, order.OrderNo, "满足条件,大盟主标记打给" + LeaderId);
  184. }
  185. }
  186. else if(parentUser.LeaderLevel == 2 && !BigLeaderFlag)
  187. {
  188. Utils.Instance.PrizeRecord(2, order.OrderNo, "满足大盟主条件,大盟主标记打给" + parentUser.Id + ",对应机具券:" + order.SnNos);
  189. BigLeaderFlag = true;
  190. if(!string.IsNullOrEmpty(order.SnNos))
  191. {
  192. List<int> couponIds = db.PosCoupons.Where(m => codes.Contains(m.ExchangeCode)).OrderBy(m => m.Id).Take(CouponCount).ToList().Select(m => m.Id).ToList();
  193. Utils.Instance.PrizeRecord(2, order.OrderNo, "开始打标记,数量:" + couponIds.Count);
  194. SetPosCouponLeaderFlag(db, parentUser.Id, order.BuyCount, couponIds);
  195. Utils.Instance.PrizeRecord(2, order.OrderNo, "结束打标记");
  196. }
  197. }
  198. }
  199. else if(parentUser.OperateLevel > 0 && CheckOpReserve(opdb, order.BuyCount, parentUser.Id) && !BuyPrizeFlag)
  200. {
  201. Utils.Instance.PrizeRecord(2, order.OrderNo, "满足条件,发放购机奖");
  202. //购机奖
  203. decimal CurBuyPrize = GetBuyPrize(parentUser, order.UserId);
  204. decimal GetPrize = CurBuyPrize - BuyPrize;
  205. Utils.Instance.PrizeRecord(2, order.OrderNo, "发放金额:" + GetPrize);
  206. if(GetPrize > 0)
  207. {
  208. int ChangeType = 120;
  209. if(parentUser.OperateLevel > 1)
  210. {
  211. ChangeType = 128;
  212. }
  213. OpAccount(db, order.Id, parentUser.Id, GetPrize, order.BuyCount, ChangeType);
  214. BuyPrize = CurBuyPrize;
  215. BuyPrizeFlag = true;
  216. }
  217. if(parentUser.OperateLevel == 2 && CurBuyPrize == 100) BuyPrizeFlag = true;
  218. if(!BackAccountFlag)
  219. {
  220. BackAccountFlag = true;
  221. decimal GetAmount = GetWithdrawMoney(parentUser) * order.BuyCount;
  222. //扣减备用金
  223. // OperateAmountChange(opdb, parentUser.Id, GetAmount, 2, 1, "商城购机", true, order.Id);
  224. // //返回到余额
  225. // OperateAmountChange(opdb, parentUser.Id, GetAmount, 1, 2, "商城购机", true, order.Id);
  226. OpAmountItem item = new OpAmountItem()
  227. {
  228. UserId = parentUser.Id,
  229. OperateType = 0,
  230. ChangeType = 5,
  231. Remark = "商城购机",
  232. UseAmount = GetAmount,
  233. UseValidForGetAmount = GetAmount,
  234. UseTotalAmt = GetAmount,
  235. DataType = 1,
  236. DataId = order.Id,
  237. };
  238. RedisDbconn.Instance.AddList("OperateAmountRecordServiceQueue", item);
  239. }
  240. }
  241. }
  242. }
  243. }
  244. db.Dispose();
  245. opdb.Dispose();
  246. }
  247. public void StartTmp()
  248. {
  249. Thread th = new Thread(tmpuse);
  250. th.IsBackground = true;
  251. th.Start();
  252. }
  253. public void tmpuse()
  254. {
  255. List<string> OrderNos = new List<string>();
  256. // OrderNos.Add("BM2024060113545453402672795");
  257. List<int> ChkIds = new List<int>(); //机具券商品Id集合
  258. ChkIds.Add(10);
  259. ChkIds.Add(11);
  260. ChkIds.Add(77);
  261. ChkIds.Add(78);
  262. ChkIds.Add(79);
  263. ChkIds.Add(92);
  264. DateTime chkDate = DateTime.Parse("2024-06-01 00:00:00");
  265. WebCMSEntities db = new WebCMSEntities();
  266. OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
  267. List<Orders> orders = db.Orders.Where(m => m.CreateDate >= chkDate && OrderNos.Contains(m.OrderNo) && ChkIds.Contains(m.ProductId) && m.Status > 0).ToList();
  268. foreach(Orders order in orders)
  269. {
  270. int Kind = 0;
  271. if (order.ProductId == 10)
  272. {
  273. Kind = 1;
  274. }
  275. else if (order.ProductId == 11)
  276. {
  277. Kind = 2;
  278. }
  279. int CouponCount = 0;
  280. if(Kind == 1)
  281. {
  282. CouponCount = 3 * order.BuyCount;
  283. }
  284. else if(Kind == 2)
  285. {
  286. CouponCount = 2 * order.BuyCount;
  287. }
  288. UserAccountRecord record = db.UserAccountRecord.FirstOrDefault(m => m.Id >= 4579675 && m.QueryCount == order.Id && m.ChangeType == 112) ?? new UserAccountRecord();
  289. UserRankItem orderUser = GetUserLevel2(order.UserId, order.PayDate.Value);
  290. if(orderUser.UserLevel == 0)
  291. {
  292. PreUserLevel(db, order.UserId, 1, DateTime.Parse("2025-01-01 00:00:00"));
  293. }
  294. string ParentNav = orderUser.ParentNav + "," + orderUser.Id + ",";
  295. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  296. Array.Reverse(ParentNavList);
  297. int index = 0;
  298. bool DirectPrizeFlag = false; //推荐奖励发放标识
  299. foreach(string ParentId in ParentNavList)
  300. {
  301. UserRankItem parentUser = GetUserLevel2(int.Parse(ParentId), order.PayDate.Value);
  302. index += 1;
  303. if(index == 1 && (orderUser.LeaderLevel > 0 || orderUser.OperateLevel > 0) && !DirectPrizeFlag)
  304. {
  305. // DirectPrize(db, order.Id, order.UserId, order.BuyCount);
  306. if(record.UserId != order.UserId) function.WriteLog("下单人--订单号:" + order.OrderNo + ";应发对象:" + order.UserId + ";实发对象:" + record.UserId + ";发放金额:" + order.BuyCount + "00;", "推荐奖励计算");
  307. DirectPrizeFlag = true;
  308. }
  309. if(index > 1)
  310. {
  311. if(Utils.Instance.IsStandardUser2(parentUser.Id, order.PayDate.Value) && !DirectPrizeFlag)
  312. {
  313. // DirectPrize(db, order.Id, parentUser.Id, order.BuyCount);
  314. if(record.UserId != parentUser.Id) function.WriteLog("上级--订单号:" + order.OrderNo + ";应发对象:" + parentUser.Id + ";实发对象:" + record.UserId + ";发放金额:" + order.BuyCount + "00;", "推荐奖励计算");
  315. DirectPrizeFlag = true;
  316. }
  317. }
  318. }
  319. if(!DirectPrizeFlag && record.Id == 0)
  320. {
  321. function.WriteLog("没发--订单号:" + order.OrderNo + ";发放金额:" + order.BuyCount + "00;", "推荐奖励计算");
  322. }
  323. }
  324. db.Dispose();
  325. opdb.Dispose();
  326. }
  327. public void Start2()
  328. {
  329. Thread th = new Thread(ready2);
  330. th.IsBackground = true;
  331. th.Start();
  332. }
  333. private void ready2()
  334. {
  335. bool op = true;
  336. while (op)
  337. {
  338. string content = RedisDbconn.Instance.RPop<string>("PosCouponPrizeQueue2");
  339. if (!string.IsNullOrEmpty(content))
  340. {
  341. try
  342. {
  343. dosomething(int.Parse(function.CheckInt(content)));
  344. }
  345. catch
  346. {
  347. }
  348. }
  349. else
  350. {
  351. Thread.Sleep(5000);
  352. }
  353. }
  354. }
  355. public void dosomething2(int OrderId)
  356. {
  357. WebCMSEntities db = new WebCMSEntities();
  358. OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
  359. Orders order = db.Orders.FirstOrDefault(m => m.Id == OrderId);
  360. if(order != null)
  361. {
  362. List<int> ChkIds = new List<int>(); //机具券商品Id集合
  363. ChkIds.Add(10);
  364. ChkIds.Add(11);
  365. ChkIds.Add(77);
  366. ChkIds.Add(78);
  367. ChkIds.Add(79);
  368. //判断是否是指定商品
  369. if(ChkIds.Contains(order.ProductId))
  370. {
  371. int Kind = 0;
  372. if (order.ProductId == 10)
  373. {
  374. Kind = 1;
  375. }
  376. else if (order.ProductId == 11)
  377. {
  378. Kind = 2;
  379. }
  380. int CouponCount = 0;
  381. if(Kind == 1)
  382. {
  383. CouponCount = 3 * order.BuyCount;
  384. }
  385. else if(Kind == 2)
  386. {
  387. CouponCount = 2 * order.BuyCount;
  388. }
  389. UserRankItem orderUser = GetUserLevel(order.UserId);
  390. if(orderUser.UserLevel == 0)
  391. {
  392. }
  393. string ParentNav = orderUser.ParentNav + "," + orderUser.Id + ",";
  394. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  395. Array.Reverse(ParentNavList);
  396. int index = 0;
  397. bool DirectPrizeFlag = false; //推荐奖励发放标识
  398. bool BackAccountFlag = false; //备用金返余额标识
  399. bool BigLeaderFlag = false; //大盟主标记
  400. decimal BuyPrize = 0; //购机奖励
  401. foreach(string ParentId in ParentNavList)
  402. {
  403. UserRankItem parentUser = GetUserLevel(int.Parse(ParentId));
  404. index += 1;
  405. if(index == 1 && (orderUser.LeaderLevel > 0 || orderUser.OperateLevel > 0) && !DirectPrizeFlag)
  406. {
  407. DirectPrizeFlag = true;
  408. }
  409. if(index > 1)
  410. {
  411. if(Utils.Instance.IsStandardUser(parentUser.Id) && !DirectPrizeFlag)
  412. {
  413. DirectPrizeFlag = true;
  414. }
  415. }
  416. if(parentUser.AgoLeaderLevel > 0 && CheckLeaderReserve(db, order.BuyCount, parentUser.Id))
  417. {
  418. //购机奖
  419. if(parentUser.LeaderLevel > 0)
  420. {
  421. decimal CurBuyPrize = GetBuyPrize(parentUser, order.UserId);
  422. decimal GetPrize = CurBuyPrize - BuyPrize;
  423. if(GetPrize > 0)
  424. {
  425. bool PrizeFlag = true;
  426. int ChangeType = 118;
  427. if(parentUser.OperateLevel == 1)
  428. {
  429. ChangeType = 120;
  430. }
  431. if(parentUser.OperateLevel > 1)
  432. {
  433. ChangeType = 128;
  434. if(function.CheckNull(RedisDbconn.Instance.Get<string>("YingXunUser")).Contains("," + orderUser.Id + ","))
  435. {
  436. PrizeFlag = false;
  437. }
  438. }
  439. if(PrizeFlag && !db.UserAccountRecord.Any(m => m.QueryCount == order.Id && m.ChangeType == ChangeType))
  440. {
  441. // OpAccount(db, order.Id, parentUser.Id, GetPrize, order.BuyCount, ChangeType);
  442. }
  443. BuyPrize = CurBuyPrize;
  444. }
  445. }
  446. if(!BackAccountFlag)
  447. {
  448. BackAccountFlag = true;
  449. }
  450. }
  451. else if(parentUser.OperateLevel > 0 && CheckOpReserve(opdb, order.BuyCount, parentUser.Id))
  452. {
  453. //购机奖
  454. decimal CurBuyPrize = GetBuyPrize(parentUser, order.UserId);
  455. decimal GetPrize = CurBuyPrize - BuyPrize;
  456. if(GetPrize > 0)
  457. {
  458. int ChangeType = 120;
  459. if(parentUser.OperateLevel > 1)
  460. {
  461. ChangeType = 128;
  462. }
  463. BuyPrize = CurBuyPrize;
  464. }
  465. if(!BackAccountFlag)
  466. {
  467. BackAccountFlag = true;
  468. }
  469. }
  470. }
  471. }
  472. }
  473. db.Dispose();
  474. opdb.Dispose();
  475. }
  476. /// <summary>
  477. /// 获取创客各种等级
  478. /// </summary>
  479. /// <param name="db"></param>
  480. /// <param name="UserId"></param>
  481. /// <returns></returns>
  482. public UserRankItem GetUserLevel(int UserId)
  483. {
  484. WebCMSEntities db = new WebCMSEntities();
  485. OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
  486. UserRankItem dic = new UserRankItem();
  487. DateTime now = DateTime.Now;
  488. Users user = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1) ?? new Users();
  489. UserRankWhite userWhite = db.UserRankWhite.FirstOrDefault(m => m.Id == UserId && m.UpdateDate > now) ?? new UserRankWhite();
  490. Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId) ?? new Leaders();
  491. dic.UserLevel = userWhite.Rank > user.UserLevel ? userWhite.Rank : user.UserLevel;
  492. if(leader.ExpiredDate > now)
  493. {
  494. dic.LeaderLevel = leader.LeaderLevel;
  495. }
  496. dic.AgoLeaderLevel = leader.LeaderLevel;
  497. OpModels.SysAdmin sys = opdb.SysAdmin.FirstOrDefault(m => m.UserId == UserId) ?? new OpModels.SysAdmin();
  498. if(sys.ExpireDate > now)
  499. {
  500. dic.OperateLevel = user.UserType;
  501. dic.UserType = user.UserType;
  502. }
  503. dic.MerchantType = user.MerchantType;
  504. dic.Id = user.Id;
  505. dic.MakerCode = user.MakerCode;
  506. dic.RealName = user.RealName;
  507. dic.ParentUserId = user.ParentUserId;
  508. dic.ParentNav = user.ParentNav;
  509. db.Dispose();
  510. opdb.Dispose();
  511. return dic;
  512. }
  513. public UserRankItem GetUserLevel2(int UserId, DateTime OrderTime)
  514. {
  515. WebCMSEntities db = new WebCMSEntities();
  516. OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
  517. UserRankItem dic = new UserRankItem();
  518. Users user = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1) ?? new Users();
  519. UserRankWhite userWhite = db.UserRankWhite.FirstOrDefault(m => m.Id == UserId && m.UpdateDate > OrderTime) ?? new UserRankWhite();
  520. Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId) ?? new Leaders();
  521. dic.UserLevel = userWhite.Rank > user.UserLevel ? userWhite.Rank : user.UserLevel;
  522. if(leader.ExpiredDate > OrderTime && leader.LastBuyDate < OrderTime)
  523. {
  524. dic.LeaderLevel = leader.LeaderLevel;
  525. }
  526. dic.AgoLeaderLevel = leader.LeaderLevel;
  527. OpModels.SysAdmin sys = opdb.SysAdmin.FirstOrDefault(m => m.UserId == UserId) ?? new OpModels.SysAdmin();
  528. if(sys.ExpireDate > OrderTime && sys.CreateDate < OrderTime)
  529. {
  530. dic.OperateLevel = user.UserType;
  531. dic.UserType = user.UserType;
  532. }
  533. dic.MerchantType = user.MerchantType;
  534. dic.Id = user.Id;
  535. dic.MakerCode = user.MakerCode;
  536. dic.RealName = user.RealName;
  537. dic.ParentUserId = user.ParentUserId;
  538. dic.ParentNav = user.ParentNav;
  539. db.Dispose();
  540. opdb.Dispose();
  541. return dic;
  542. }
  543. /// <summary>
  544. /// 直推奖励
  545. /// </summary>
  546. /// <param name="db"></param>
  547. /// <param name="OrderId"></param>
  548. /// <param name="UserId"></param>
  549. /// <param name="Count"></param>
  550. public void DirectPrize(WebCMSEntities db, int OrderId, int UserId, int Count = 1)
  551. {
  552. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  553. if (account == null)
  554. {
  555. account = db.UserAccount.Add(new UserAccount()
  556. {
  557. Id = UserId,
  558. UserId = UserId,
  559. }).Entity;
  560. db.SaveChanges();
  561. }
  562. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  563. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  564. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  565. account.BalanceAmount += 100 * Count;
  566. account.TotalAmount += 100 * Count;
  567. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  568. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  569. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  570. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  571. {
  572. CreateDate = DateTime.Now,
  573. UpdateDate = DateTime.Now,
  574. UserId = UserId, //创客
  575. ChangeType = 112, //变动类型
  576. ChangeAmount = 100 * Count, //变更金额
  577. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  578. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  579. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  580. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  581. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  582. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  583. QueryCount = OrderId,
  584. }).Entity;
  585. db.SaveChanges();
  586. //发送APP推送消息
  587. Utils.Instance.PrizePush(UserId, 100 * Count);
  588. }
  589. /// <summary>
  590. /// 判断盟主储蓄金足够
  591. /// </summary>
  592. /// <param name="db"></param>
  593. /// <param name="Count"></param>
  594. /// <param name="UserId"></param>
  595. /// <returns></returns>
  596. public bool CheckLeaderReserve(WebCMSEntities db, int Count, int UserId)
  597. {
  598. UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new UserAccount();
  599. if(acccount.LeaderReserve >= 400 * Count)
  600. {
  601. return true;
  602. }
  603. return false;
  604. }
  605. /// <summary>
  606. /// 判断运营中心/合伙人额度足够
  607. /// </summary>
  608. /// <param name="db"></param>
  609. /// <param name="Count"></param>
  610. /// <param name="UserId"></param>
  611. /// <returns></returns>
  612. public bool CheckOpReserve(OpModels.WebCMSEntities db, int Count, int UserId)
  613. {
  614. OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new OpModels.UserAccount();
  615. if(account.TotalAmt >= 400 * Count)
  616. {
  617. return true;
  618. }
  619. return false;
  620. }
  621. public bool CheckOpReserve(OpModels.WebCMSEntities db, decimal Amt, int UserId)
  622. {
  623. OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new OpModels.UserAccount();
  624. if(account.TotalAmt >= Amt)
  625. {
  626. return true;
  627. }
  628. return false;
  629. }
  630. /// <summary>
  631. /// 扣减/增加盟主储蓄金
  632. /// </summary>
  633. /// <param name="db"></param>
  634. /// <param name="OrderId"></param>
  635. /// <param name="UserId"></param>
  636. /// <param name="Money"></param>
  637. /// <param name="ChangeType"></param>
  638. /// <param name="SourceUserId"></param>
  639. /// <param name="Remark"></param>
  640. public int OpReserve(WebCMSEntities db, int OrderId, int UserId, decimal Money, int ChangeType, int SourceUserId = 0, string Remark = "储备金购买")
  641. {
  642. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  643. if (account == null)
  644. {
  645. account = db.UserAccount.Add(new UserAccount()
  646. {
  647. Id = UserId,
  648. UserId = UserId,
  649. }).Entity;
  650. db.SaveChanges();
  651. }
  652. decimal BeforeAmount = account.LeaderReserve; //变更前总金额
  653. if(ChangeType == 1)
  654. {
  655. account.LeaderReserve += Money;
  656. }
  657. else
  658. {
  659. account.LeaderReserve -= Money;
  660. }
  661. decimal AfterAmount = account.LeaderReserve; //变更后总金额
  662. LeaderReserveRecord add = db.LeaderReserveRecord.Add(new LeaderReserveRecord()
  663. {
  664. CreateDate = DateTime.Now,
  665. ChangeType = ChangeType,
  666. OrderId = OrderId,
  667. Remark = Remark,
  668. AfterAmt = AfterAmount,
  669. BeforeAmt = BeforeAmount,
  670. ChangeAmt = Money,
  671. TradeDate = DateTime.Now.ToString("yyyyMMdd"),
  672. TradeMonth = DateTime.Now.ToString("yyyyMM"),
  673. UserId = UserId,
  674. SourceUserId = SourceUserId,
  675. Sort = GetLeaderReserveRecordType(Remark),
  676. }).Entity;
  677. db.SaveChanges();
  678. return add.Id;
  679. }
  680. private int GetLeaderReserveRecordType(string Remark)
  681. {
  682. Dictionary<int, string> data = new Dictionary<int, string>();
  683. data.Add(11, "兑换机具券,机具券兑换,系统增加(盟主储蓄金),系统扣减(盟主储蓄金),储备金购买");
  684. data.Add(12, "系统增加(可提现余额),系统扣减(可提现余额)");
  685. data.Add(13, "推荐大盟主,推荐小盟主,商城购机,购机奖励");
  686. var item = data.FirstOrDefault(m => m.Value.Contains(Remark));
  687. if(item.Key > 0)
  688. {
  689. return item.Key;
  690. }
  691. return 0;
  692. }
  693. /// <summary>
  694. /// 操作盟主可提现余额
  695. /// </summary>
  696. /// <param name="db"></param>
  697. /// <param name="order"></param>
  698. /// <param name="UserId"></param>
  699. /// <param name="Money"></param>
  700. /// <param name="Count"></param>
  701. /// <param name="Kind"></param>
  702. public void OpLeaderAccount(WebCMSEntities db, Orders order, int UserId, decimal Money, int Count = 1, int ReserveRecordId = 0)
  703. {
  704. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  705. if (account == null)
  706. {
  707. account = db.UserAccount.Add(new UserAccount()
  708. {
  709. Id = UserId,
  710. UserId = UserId,
  711. }).Entity;
  712. db.SaveChanges();
  713. }
  714. int ChangeType = 0;
  715. if(Money == 400)
  716. {
  717. ChangeType = 117;
  718. }
  719. decimal BeforeLeaderBalanceAmount = account.LeaderBalanceAmount; //变更前余额
  720. account.LeaderBalanceAmount += Money * Count;
  721. decimal AfterLeaderBalanceAmount = account.LeaderBalanceAmount; //变更后余额
  722. LeaderAccountRecord leaderAccountRecord = db.LeaderAccountRecord.Add(new LeaderAccountRecord()
  723. {
  724. CreateDate = DateTime.Now,
  725. UpdateDate = DateTime.Now,
  726. UserId = UserId, //创客
  727. ChangeType = ChangeType, //变动类型
  728. ChangeAmount = Money * Count, //变更金额
  729. BeforeBalanceAmount = BeforeLeaderBalanceAmount, //变更前余额
  730. AfterBalanceAmount = AfterLeaderBalanceAmount, //变更后余额
  731. QueryCount = order.Id,
  732. Sort = order.UserId,
  733. }).Entity;
  734. db.SaveChanges();
  735. if(ReserveRecordId > 0)
  736. {
  737. LeaderReserveRecord edit = db.LeaderReserveRecord.FirstOrDefault(m => m.Id == ReserveRecordId);
  738. if(edit != null)
  739. {
  740. edit.AccountRecordId = leaderAccountRecord.Id;
  741. db.SaveChanges();
  742. }
  743. }
  744. }
  745. /// <summary>
  746. /// 操作余额
  747. /// </summary>
  748. /// <param name="db"></param>
  749. /// <param name="order"></param>
  750. /// <param name="UserId"></param>
  751. /// <param name="Money"></param>
  752. /// <param name="Count"></param>
  753. public void OpAccount(WebCMSEntities db, int OrderId, int UserId, decimal Money, int Count = 1, int ChangeType = 0, int Kind = 0)
  754. {
  755. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  756. if (account == null)
  757. {
  758. account = db.UserAccount.Add(new UserAccount()
  759. {
  760. Id = UserId,
  761. UserId = UserId,
  762. }).Entity;
  763. db.SaveChanges();
  764. }
  765. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  766. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  767. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  768. account.BalanceAmount += Money * Count;
  769. account.TotalAmount += Money * Count;
  770. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  771. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  772. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  773. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  774. {
  775. CreateDate = DateTime.Now,
  776. UpdateDate = DateTime.Now,
  777. UserId = UserId, //创客
  778. ChangeType = ChangeType, //变动类型
  779. ChangeAmount = Money * Count, //变更金额
  780. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  781. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  782. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  783. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  784. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  785. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  786. QueryCount = OrderId,
  787. Kind = Kind,
  788. }).Entity;
  789. db.SaveChanges();
  790. //发送APP推送消息
  791. Utils.Instance.PrizePush(UserId, Money * Count);
  792. }
  793. /// <summary>
  794. /// 操作运营中心/合伙人额度(TotalAmt未使用额度,ValidForGetAmount可提现额度)
  795. /// </summary>
  796. /// <param name="db"></param>
  797. /// <param name="UserId"></param>
  798. /// <param name="Money"></param>
  799. /// <param name="OperateType">(1增加,2减少)</param>
  800. /// <param name="AmountType">(1未使用额度,2可提现额度)</param>
  801. /// <param name="Remark"></param>
  802. /// <param name="record"></param>
  803. public void OperateAmountChange(OpModels.WebCMSEntities db, int UserId, decimal Money, int OperateType, int AmountType, string Remark = "", bool record = false, int OrderId = 0)
  804. {
  805. OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  806. if (account == null)
  807. {
  808. account = db.UserAccount.Add(new OpModels.UserAccount()
  809. {
  810. Id = UserId,
  811. UserId = UserId,
  812. }).Entity;
  813. db.SaveChanges();
  814. }
  815. decimal BeforeAmount = account.ValidAmount + account.TotalAmt + account.ValidForGetAmount; //变更前总金额
  816. if(OperateType == 1)
  817. {
  818. if(AmountType == 1)
  819. {
  820. account.TotalAmt += Money;
  821. }
  822. else if(AmountType == 2)
  823. {
  824. account.ValidForGetAmount += Money;
  825. }
  826. else
  827. {
  828. account.ValidAmount += Money;
  829. }
  830. }
  831. else
  832. {
  833. if(AmountType == 1)
  834. {
  835. account.TotalAmt -= Money;
  836. }
  837. else if(AmountType == 2)
  838. {
  839. account.ValidForGetAmount -= Money;
  840. }
  841. else
  842. {
  843. account.ValidAmount -= Money;
  844. }
  845. }
  846. decimal AfterAmount = account.ValidAmount + account.TotalAmt + account.ValidForGetAmount; //变更后总金额
  847. if(record)
  848. {
  849. OpModels.AmountRecord add = db.AmountRecord.Add(new OpModels.AmountRecord()
  850. {
  851. CreateDate = DateTime.Now,
  852. UpdateDate = DateTime.Now,
  853. OperateType = OperateType,
  854. AfterAmount = AfterAmount,
  855. AfterValidForGetAmount = account.ValidForGetAmount,
  856. AfterTotalAmt = account.TotalAmt,
  857. AfterValidAmount = account.ValidAmount,
  858. BeforeAmount = BeforeAmount,
  859. UseAmount = Money,
  860. UserId = UserId,
  861. SeoDescription = Remark,
  862. Version = AmountType,
  863. QueryCount = OrderId,
  864. }).Entity;
  865. OpModels.AmountChangeRecord amountChangeRecord = db.AmountChangeRecord.Add(new OpModels.AmountChangeRecord()
  866. {
  867. AmountType = 2,//1 未使用额度 2 可提现额度 3 关联分仓额度
  868. CreateDate = DateTime.Now,
  869. Title = Remark,
  870. UserId = UserId, //运营中心Id
  871. BeforeAmount = BeforeAmount,//使用前剩余额度
  872. AfterAmount = AfterAmount,//使用后剩余额度
  873. ChangeAmount = Money,//操作金额
  874. OperateType = OperateType,//操作类别
  875. Sort = OrderId,
  876. }).Entity;
  877. }
  878. db.SaveChanges();
  879. }
  880. /// <summary>
  881. /// 给券设置大盟主标记
  882. /// </summary>
  883. /// <param name="db"></param>
  884. /// <param name="LeaderUserId"></param>
  885. /// <param name="Count"></param>
  886. /// <param name="couponIds"></param>
  887. public int SetPosCouponLeaderFlag(WebCMSEntities db, int LeaderUserId, int Count, List<int> couponIds)
  888. {
  889. int SetCount = 0;
  890. UserAccount pacccount = db.UserAccount.FirstOrDefault(m => m.Id == LeaderUserId) ?? new UserAccount();
  891. foreach(int couponId in couponIds)
  892. {
  893. PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId);
  894. decimal LeaderReserve = pacccount.LeaderReserve;
  895. decimal CheckReserve = 400 * Count;
  896. // if(LeaderReserve < CheckReserve)
  897. // {
  898. // LeaderReserveRecord ReserveRecord = db.LeaderReserveRecord.FirstOrDefault(m => m.UserId == LeaderUserId && m.Remark == "推荐小盟主" && m.ChangeAmt - m.UsedReserve > 0);
  899. // if(ReserveRecord != null)
  900. // {
  901. // if(ReserveRecord.ChangeAmt - ReserveRecord.UsedReserve >= CheckReserve)
  902. // {
  903. // LeaderReserve = CheckReserve;
  904. // ReserveRecord.UsedReserve += CheckReserve;
  905. // }
  906. // else
  907. // {
  908. // decimal OtherLeaderReserve = ReserveRecord.ChangeAmt - ReserveRecord.UsedReserve;
  909. // ReserveRecord.UsedReserve += OtherLeaderReserve;
  910. // LeaderReserveRecord ReserveRecord2 = db.LeaderReserveRecord.FirstOrDefault(m => m.Id > ReserveRecord.Id && m.UserId == LeaderUserId && m.Remark == "推荐小盟主" && m.ChangeAmt - m.UsedReserve > 0);
  911. // if(ReserveRecord2 != null)
  912. // {
  913. // if(ReserveRecord2.ChangeAmt - ReserveRecord2.UsedReserve >= CheckReserve - OtherLeaderReserve)
  914. // {
  915. // LeaderReserve = CheckReserve - OtherLeaderReserve;
  916. // ReserveRecord2.UsedReserve += CheckReserve - OtherLeaderReserve;
  917. // }
  918. // else
  919. // {
  920. // OtherLeaderReserve = ReserveRecord2.ChangeAmt - ReserveRecord2.UsedReserve;
  921. // ReserveRecord2.UsedReserve += OtherLeaderReserve;
  922. // }
  923. // }
  924. // }
  925. // }
  926. // }
  927. if(coupon != null && LeaderReserve >= CheckReserve)
  928. {
  929. coupon.LeaderUserId = LeaderUserId;
  930. SetCount += 1;
  931. }
  932. }
  933. db.SaveChanges();
  934. return SetCount;
  935. }
  936. public int CheckPosCouponLeaderFlag(WebCMSEntities db, int UserId, int Count, List<string> codes)
  937. {
  938. int LeaderUserId = 0;
  939. decimal CheckReserve = 400 * Count;
  940. // decimal LeaderReserve = 0;
  941. LeaderReserveRecord ReserveRecord = db.LeaderReserveRecord.FirstOrDefault(m => m.SourceUserId == UserId && m.Remark == "推荐小盟主" && m.ChangeAmt - m.UsedReserve > CheckReserve);
  942. if(ReserveRecord != null)
  943. {
  944. LeaderUserId = ReserveRecord.UserId;
  945. // if(ReserveRecord.ChangeAmt - ReserveRecord.UsedReserve >= CheckReserve)
  946. // {
  947. // LeaderReserve = CheckReserve;
  948. ReserveRecord.UsedReserve += CheckReserve;
  949. // }
  950. // else
  951. // {
  952. // decimal OtherLeaderReserve = ReserveRecord.ChangeAmt - ReserveRecord.UsedReserve;
  953. // ReserveRecord.UsedReserve += OtherLeaderReserve;
  954. // LeaderReserveRecord ReserveRecord2 = db.LeaderReserveRecord.FirstOrDefault(m => m.Id > ReserveRecord.Id && m.UserId == LeaderUserId && m.Remark == "推荐小盟主" && m.ChangeAmt - m.UsedReserve > 0);
  955. // if(ReserveRecord2 != null)
  956. // {
  957. // if(ReserveRecord2.ChangeAmt - ReserveRecord2.UsedReserve >= CheckReserve - OtherLeaderReserve)
  958. // {
  959. // LeaderReserve = CheckReserve - OtherLeaderReserve;
  960. // ReserveRecord2.UsedReserve += CheckReserve - OtherLeaderReserve;
  961. // }
  962. // else
  963. // {
  964. // OtherLeaderReserve = ReserveRecord2.ChangeAmt - ReserveRecord2.UsedReserve;
  965. // ReserveRecord2.UsedReserve += OtherLeaderReserve;
  966. // }
  967. // }
  968. // }
  969. List<int> couponIds = db.PosCoupons.Where(m => codes.Contains(m.ExchangeCode)).OrderBy(m => m.Id).ToList().Select(m => m.Id).ToList();
  970. foreach(int couponId in couponIds)
  971. {
  972. PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId);
  973. if(coupon != null)
  974. {
  975. coupon.LeaderUserId = LeaderUserId;
  976. }
  977. }
  978. db.SaveChanges();
  979. }
  980. return LeaderUserId;
  981. }
  982. /// <summary>
  983. /// 获取购机奖金额
  984. /// </summary>
  985. /// <param name="user"></param>
  986. /// <returns></returns>
  987. public decimal GetBuyPrize(UserRankItem user, int OrderUserId = 0)
  988. {
  989. if(user.OperateLevel == 1) return 100;
  990. if(user.OperateLevel == 2)
  991. {
  992. if(TradeTeamCheck2(user.Id))
  993. {
  994. return 160;
  995. }
  996. if(!TradeTeamCheck(OrderUserId) && user.Id != OrderUserId)
  997. {
  998. return 100;
  999. }
  1000. return 160;
  1001. }
  1002. if(user.OperateLevel == 3) return 180;
  1003. if(user.OperateLevel == 4) return 200;
  1004. if(user.LeaderLevel > 0) return 100;
  1005. return 0;
  1006. }
  1007. public bool TradeTeamCheck(int UserId)
  1008. {
  1009. bool op = true;
  1010. if(UserId == 0)
  1011. {
  1012. return op;
  1013. }
  1014. function.WriteLog("UserId:" + UserId, "训练营判断参与活动");
  1015. WebCMSEntities maindb = new WebCMSEntities();
  1016. Users muser = maindb.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  1017. string ParentNav = muser.ParentUserId + "," + UserId;
  1018. string[] ParentNavList = ParentNav.Split(',');
  1019. List<int> UserIds = new List<int>();
  1020. foreach(string IdString in ParentNavList)
  1021. {
  1022. UserIds.Add(int.Parse(function.CheckInt(IdString)));
  1023. }
  1024. JavaModels.WebCMSEntities db = new JavaModels.WebCMSEntities();
  1025. var users = db.KxsCampUser.Where(m => UserIds.Contains(m.UserId)).ToList();
  1026. foreach(var user in users)
  1027. {
  1028. DateTime now = DateTime.Now;
  1029. // JavaModels.KxsCamp camp = db.KxsCamp.FirstOrDefault(m => m.Id == user.CampId && m.StartTime <= now && m.EndTime >= now);
  1030. JavaModels.KxsCamp camp = db.KxsCamp.FirstOrDefault(m => m.Id == user.CampId && m.Status == 1);
  1031. if(camp != null)
  1032. {
  1033. function.WriteLog("活动Id:" + camp.Id, "训练营判断参与活动");
  1034. op = false;
  1035. break;
  1036. }
  1037. }
  1038. maindb.Dispose();
  1039. db.Dispose();
  1040. function.WriteLog("\n\n\n", "训练营判断参与活动");
  1041. return op;
  1042. }
  1043. public bool TradeTeamCheck2(int UserId)
  1044. {
  1045. bool op = false;
  1046. if(UserId == 0)
  1047. {
  1048. return op;
  1049. }
  1050. function.WriteLog("黄金合伙人-UserId:" + UserId, "训练营判断参与活动");
  1051. JavaModels.WebCMSEntities db = new JavaModels.WebCMSEntities();
  1052. var users = db.KxsCampUser.Where(m => m.UserId == UserId).ToList();
  1053. foreach(var user in users)
  1054. {
  1055. DateTime now = DateTime.Now;
  1056. // JavaModels.KxsCamp camp = db.KxsCamp.FirstOrDefault(m => m.Id == user.CampId && m.StartTime <= now && m.EndTime >= now);
  1057. JavaModels.KxsCamp camp = db.KxsCamp.FirstOrDefault(m => m.Id == user.CampId && m.Status == 1);
  1058. if(camp != null)
  1059. {
  1060. function.WriteLog("黄金合伙人-活动Id:" + camp.Id, "训练营判断参与活动");
  1061. op = true;
  1062. break;
  1063. }
  1064. }
  1065. db.Dispose();
  1066. function.WriteLog("\n\n\n", "训练营判断参与活动");
  1067. return op;
  1068. }
  1069. /// <summary>
  1070. /// 获取可提现金额
  1071. /// </summary>
  1072. /// <param name="user"></param>
  1073. /// <returns></returns>
  1074. public decimal GetWithdrawMoney(UserRankItem user)
  1075. {
  1076. if(user.OperateLevel == 1) return 400;
  1077. // if(user.OperateLevel == 2) return 340;
  1078. // if(user.OperateLevel == 3) return 320;
  1079. // if(user.OperateLevel == 4) return 300;
  1080. if(user.OperateLevel == 2) return 400;
  1081. if(user.OperateLevel == 3) return 400;
  1082. if(user.OperateLevel == 4) return 400;
  1083. if(user.AgoLeaderLevel > 0) return 400;
  1084. return 0;
  1085. }
  1086. /// <summary>
  1087. /// 预设职级
  1088. /// </summary>
  1089. /// <param name="db"></param>
  1090. /// <param name="UserId">创客Id</param>
  1091. /// <param name="Rank">职级</param>
  1092. /// <param name="ExpiredDate">过期时间</param>
  1093. public void PreUserLevel(WebCMSEntities db, int UserId, int Rank, DateTime ExpiredDate)
  1094. {
  1095. UserRankWhite rank = db.UserRankWhite.FirstOrDefault(m => m.Id == UserId);
  1096. if(rank == null)
  1097. {
  1098. rank = db.UserRankWhite.Add(new UserRankWhite()
  1099. {
  1100. CreateDate = DateTime.Now, //设置时间
  1101. UserId = UserId, //用户
  1102. Id = UserId,
  1103. }).Entity;
  1104. db.SaveChanges();
  1105. }
  1106. rank.Rank = Rank;
  1107. rank.UpdateDate = ExpiredDate;
  1108. db.SaveChanges();
  1109. }
  1110. }
  1111. }