PosCouponPrizeService.cs 57 KB

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