PosCouponPrizeService.cs 58 KB

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