PosCouponPrizeService.cs 58 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235
  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. }
  496. BuyPrize = CurBuyPrize;
  497. }
  498. }
  499. if(!BackAccountFlag)
  500. {
  501. BackAccountFlag = true;
  502. }
  503. }
  504. else if(parentUser.OperateLevel > 0 && CheckOpReserve(opdb, order.BuyCount, parentUser.Id))
  505. {
  506. //购机奖
  507. decimal CurBuyPrize = GetBuyPrize(parentUser, order);
  508. decimal GetPrize = CurBuyPrize - BuyPrize;
  509. if(GetPrize > 0)
  510. {
  511. int ChangeType = 120;
  512. if(parentUser.OperateLevel > 1)
  513. {
  514. ChangeType = 128;
  515. }
  516. BuyPrize = CurBuyPrize;
  517. }
  518. if(!BackAccountFlag)
  519. {
  520. BackAccountFlag = true;
  521. if(GetPrize == 60) function.WriteLog(order.Id + " " + parentUser.Id + " " + GetPrize, "补60购机奖励");
  522. }
  523. }
  524. }
  525. }
  526. }
  527. db.Dispose();
  528. opdb.Dispose();
  529. }
  530. /// <summary>
  531. /// 获取创客各种等级
  532. /// </summary>
  533. /// <param name="db"></param>
  534. /// <param name="UserId"></param>
  535. /// <returns></returns>
  536. public UserRankItem GetUserLevel(int UserId)
  537. {
  538. WebCMSEntities db = new WebCMSEntities();
  539. OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
  540. UserRankItem dic = new UserRankItem();
  541. DateTime now = DateTime.Now;
  542. Users user = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1) ?? new Users();
  543. UserRankWhite userWhite = db.UserRankWhite.FirstOrDefault(m => m.Id == UserId && m.UpdateDate > now) ?? new UserRankWhite();
  544. Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId) ?? new Leaders();
  545. dic.UserLevel = userWhite.Rank > user.UserLevel ? userWhite.Rank : user.UserLevel;
  546. if(leader.ExpiredDate > now)
  547. {
  548. dic.LeaderLevel = leader.LeaderLevel;
  549. }
  550. dic.AgoLeaderLevel = leader.LeaderLevel;
  551. OpModels.SysAdmin sys = opdb.SysAdmin.FirstOrDefault(m => m.UserId == UserId) ?? new OpModels.SysAdmin();
  552. if(sys.ExpireDate > now)
  553. {
  554. dic.OperateLevel = user.UserType;
  555. dic.UserType = user.UserType;
  556. }
  557. dic.MerchantType = user.MerchantType;
  558. dic.Id = user.Id;
  559. dic.MakerCode = user.MakerCode;
  560. dic.RealName = user.RealName;
  561. dic.ParentUserId = user.ParentUserId;
  562. dic.ParentNav = user.ParentNav;
  563. db.Dispose();
  564. opdb.Dispose();
  565. return dic;
  566. }
  567. public UserRankItem GetUserLevel2(int UserId, DateTime OrderTime)
  568. {
  569. WebCMSEntities db = new WebCMSEntities();
  570. OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
  571. UserRankItem dic = new UserRankItem();
  572. Users user = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1) ?? new Users();
  573. UserRankWhite userWhite = db.UserRankWhite.FirstOrDefault(m => m.Id == UserId && m.UpdateDate > OrderTime) ?? new UserRankWhite();
  574. Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId) ?? new Leaders();
  575. dic.UserLevel = userWhite.Rank > user.UserLevel ? userWhite.Rank : user.UserLevel;
  576. if(leader.ExpiredDate > OrderTime && leader.LastBuyDate < OrderTime)
  577. {
  578. dic.LeaderLevel = leader.LeaderLevel;
  579. }
  580. dic.AgoLeaderLevel = leader.LeaderLevel;
  581. OpModels.SysAdmin sys = opdb.SysAdmin.FirstOrDefault(m => m.UserId == UserId) ?? new OpModels.SysAdmin();
  582. if(sys.ExpireDate > OrderTime && sys.CreateDate < OrderTime)
  583. {
  584. dic.OperateLevel = user.UserType;
  585. dic.UserType = user.UserType;
  586. }
  587. dic.MerchantType = user.MerchantType;
  588. dic.Id = user.Id;
  589. dic.MakerCode = user.MakerCode;
  590. dic.RealName = user.RealName;
  591. dic.ParentUserId = user.ParentUserId;
  592. dic.ParentNav = user.ParentNav;
  593. db.Dispose();
  594. opdb.Dispose();
  595. return dic;
  596. }
  597. /// <summary>
  598. /// 直推奖励
  599. /// </summary>
  600. /// <param name="db"></param>
  601. /// <param name="OrderId"></param>
  602. /// <param name="UserId"></param>
  603. /// <param name="Count"></param>
  604. public void DirectPrize(WebCMSEntities db, int OrderId, int UserId, int Count = 1)
  605. {
  606. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  607. if (account == null)
  608. {
  609. account = db.UserAccount.Add(new UserAccount()
  610. {
  611. Id = UserId,
  612. UserId = UserId,
  613. }).Entity;
  614. db.SaveChanges();
  615. }
  616. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  617. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  618. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  619. account.BalanceAmount += 100 * Count;
  620. account.TotalAmount += 100 * Count;
  621. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  622. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  623. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  624. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  625. {
  626. CreateDate = DateTime.Now,
  627. UpdateDate = DateTime.Now,
  628. UserId = UserId, //创客
  629. ChangeType = 112, //变动类型
  630. ChangeAmount = 100 * Count, //变更金额
  631. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  632. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  633. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  634. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  635. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  636. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  637. QueryCount = OrderId,
  638. }).Entity;
  639. db.SaveChanges();
  640. //发送APP推送消息
  641. Utils.Instance.PrizePush(UserId, 100 * Count);
  642. }
  643. /// <summary>
  644. /// 判断盟主储蓄金足够
  645. /// </summary>
  646. /// <param name="db"></param>
  647. /// <param name="Count"></param>
  648. /// <param name="UserId"></param>
  649. /// <returns></returns>
  650. public bool CheckLeaderReserve(WebCMSEntities db, int Count, int UserId)
  651. {
  652. UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new UserAccount();
  653. if(acccount.LeaderReserve >= 400 * Count)
  654. {
  655. return true;
  656. }
  657. return false;
  658. }
  659. /// <summary>
  660. /// 判断运营中心/合伙人额度足够
  661. /// </summary>
  662. /// <param name="db"></param>
  663. /// <param name="Count"></param>
  664. /// <param name="UserId"></param>
  665. /// <returns></returns>
  666. public bool CheckOpReserve(OpModels.WebCMSEntities db, int Count, int UserId)
  667. {
  668. OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new OpModels.UserAccount();
  669. if(account.TotalAmt >= 400 * Count)
  670. {
  671. return true;
  672. }
  673. return false;
  674. }
  675. public bool CheckOpReserve(OpModels.WebCMSEntities db, decimal Amt, int UserId)
  676. {
  677. OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new OpModels.UserAccount();
  678. if(account.TotalAmt >= Amt)
  679. {
  680. return true;
  681. }
  682. return false;
  683. }
  684. /// <summary>
  685. /// 扣减/增加盟主储蓄金
  686. /// </summary>
  687. /// <param name="db"></param>
  688. /// <param name="OrderId"></param>
  689. /// <param name="UserId"></param>
  690. /// <param name="Money"></param>
  691. /// <param name="ChangeType"></param>
  692. /// <param name="SourceUserId"></param>
  693. /// <param name="Remark"></param>
  694. public int OpReserve(WebCMSEntities db, int OrderId, int UserId, decimal Money, int ChangeType, int SourceUserId = 0, string Remark = "储备金购买")
  695. {
  696. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  697. if (account == null)
  698. {
  699. account = db.UserAccount.Add(new UserAccount()
  700. {
  701. Id = UserId,
  702. UserId = UserId,
  703. }).Entity;
  704. db.SaveChanges();
  705. }
  706. decimal BeforeAmount = account.LeaderReserve; //变更前总金额
  707. if(ChangeType == 1)
  708. {
  709. account.LeaderReserve += Money;
  710. }
  711. else
  712. {
  713. account.LeaderReserve -= Money;
  714. }
  715. decimal AfterAmount = account.LeaderReserve; //变更后总金额
  716. LeaderReserveRecord add = db.LeaderReserveRecord.Add(new LeaderReserveRecord()
  717. {
  718. CreateDate = DateTime.Now,
  719. ChangeType = ChangeType,
  720. OrderId = OrderId,
  721. Remark = Remark,
  722. AfterAmt = AfterAmount,
  723. BeforeAmt = BeforeAmount,
  724. ChangeAmt = Money,
  725. TradeDate = DateTime.Now.ToString("yyyyMMdd"),
  726. TradeMonth = DateTime.Now.ToString("yyyyMM"),
  727. UserId = UserId,
  728. SourceUserId = SourceUserId,
  729. Sort = GetLeaderReserveRecordType(Remark),
  730. }).Entity;
  731. db.SaveChanges();
  732. return add.Id;
  733. }
  734. private int GetLeaderReserveRecordType(string Remark)
  735. {
  736. Dictionary<int, string> data = new Dictionary<int, string>();
  737. data.Add(11, "兑换机具券,机具券兑换,系统增加(盟主储蓄金),系统扣减(盟主储蓄金),储备金购买");
  738. data.Add(12, "系统增加(可提现余额),系统扣减(可提现余额)");
  739. data.Add(13, "推荐大盟主,推荐小盟主,商城购机,购机奖励");
  740. var item = data.FirstOrDefault(m => m.Value.Contains(Remark));
  741. if(item.Key > 0)
  742. {
  743. return item.Key;
  744. }
  745. return 0;
  746. }
  747. /// <summary>
  748. /// 操作盟主可提现余额
  749. /// </summary>
  750. /// <param name="db"></param>
  751. /// <param name="order"></param>
  752. /// <param name="UserId"></param>
  753. /// <param name="Money"></param>
  754. /// <param name="Count"></param>
  755. /// <param name="Kind"></param>
  756. public void OpLeaderAccount(WebCMSEntities db, Orders order, int UserId, decimal Money, int Count = 1, int ReserveRecordId = 0)
  757. {
  758. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  759. if (account == null)
  760. {
  761. account = db.UserAccount.Add(new UserAccount()
  762. {
  763. Id = UserId,
  764. UserId = UserId,
  765. }).Entity;
  766. db.SaveChanges();
  767. }
  768. int ChangeType = 0;
  769. if(Money == 400)
  770. {
  771. ChangeType = 117;
  772. }
  773. decimal BeforeLeaderBalanceAmount = account.LeaderBalanceAmount; //变更前余额
  774. account.LeaderBalanceAmount += Money * Count;
  775. decimal AfterLeaderBalanceAmount = account.LeaderBalanceAmount; //变更后余额
  776. LeaderAccountRecord leaderAccountRecord = db.LeaderAccountRecord.Add(new LeaderAccountRecord()
  777. {
  778. CreateDate = DateTime.Now,
  779. UpdateDate = DateTime.Now,
  780. UserId = UserId, //创客
  781. ChangeType = ChangeType, //变动类型
  782. ChangeAmount = Money * Count, //变更金额
  783. BeforeBalanceAmount = BeforeLeaderBalanceAmount, //变更前余额
  784. AfterBalanceAmount = AfterLeaderBalanceAmount, //变更后余额
  785. QueryCount = order.Id,
  786. Sort = order.UserId,
  787. }).Entity;
  788. db.SaveChanges();
  789. if(ReserveRecordId > 0)
  790. {
  791. LeaderReserveRecord edit = db.LeaderReserveRecord.FirstOrDefault(m => m.Id == ReserveRecordId);
  792. if(edit != null)
  793. {
  794. edit.AccountRecordId = leaderAccountRecord.Id;
  795. db.SaveChanges();
  796. }
  797. }
  798. }
  799. /// <summary>
  800. /// 操作余额
  801. /// </summary>
  802. /// <param name="db"></param>
  803. /// <param name="order"></param>
  804. /// <param name="UserId"></param>
  805. /// <param name="Money"></param>
  806. /// <param name="Count"></param>
  807. public void OpAccount(WebCMSEntities db, int OrderId, int UserId, decimal Money, int Count = 1, int ChangeType = 0, int Kind = 0)
  808. {
  809. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  810. if (account == null)
  811. {
  812. account = db.UserAccount.Add(new UserAccount()
  813. {
  814. Id = UserId,
  815. UserId = UserId,
  816. }).Entity;
  817. db.SaveChanges();
  818. }
  819. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  820. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  821. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  822. account.BalanceAmount += Money * Count;
  823. account.TotalAmount += Money * Count;
  824. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  825. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  826. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  827. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  828. {
  829. CreateDate = DateTime.Now,
  830. UpdateDate = DateTime.Now,
  831. UserId = UserId, //创客
  832. ChangeType = ChangeType, //变动类型
  833. ChangeAmount = Money * Count, //变更金额
  834. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  835. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  836. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  837. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  838. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  839. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  840. QueryCount = OrderId,
  841. Kind = Kind,
  842. }).Entity;
  843. db.SaveChanges();
  844. //发送APP推送消息
  845. Utils.Instance.PrizePush(UserId, Money * Count);
  846. }
  847. /// <summary>
  848. /// 操作运营中心/合伙人额度(TotalAmt未使用额度,ValidForGetAmount可提现额度)
  849. /// </summary>
  850. /// <param name="db"></param>
  851. /// <param name="UserId"></param>
  852. /// <param name="Money"></param>
  853. /// <param name="OperateType">(1增加,2减少)</param>
  854. /// <param name="AmountType">(1未使用额度,2可提现额度)</param>
  855. /// <param name="Remark"></param>
  856. /// <param name="record"></param>
  857. public void OperateAmountChange(OpModels.WebCMSEntities db, int UserId, decimal Money, int OperateType, int AmountType, string Remark = "", bool record = false, int OrderId = 0)
  858. {
  859. OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  860. if (account == null)
  861. {
  862. account = db.UserAccount.Add(new OpModels.UserAccount()
  863. {
  864. Id = UserId,
  865. UserId = UserId,
  866. }).Entity;
  867. db.SaveChanges();
  868. }
  869. decimal BeforeAmount = account.ValidAmount + account.TotalAmt + account.ValidForGetAmount; //变更前总金额
  870. if(OperateType == 1)
  871. {
  872. if(AmountType == 1)
  873. {
  874. account.TotalAmt += Money;
  875. }
  876. else if(AmountType == 2)
  877. {
  878. account.ValidForGetAmount += Money;
  879. }
  880. else
  881. {
  882. account.ValidAmount += Money;
  883. }
  884. }
  885. else
  886. {
  887. if(AmountType == 1)
  888. {
  889. account.TotalAmt -= Money;
  890. }
  891. else if(AmountType == 2)
  892. {
  893. account.ValidForGetAmount -= Money;
  894. }
  895. else
  896. {
  897. account.ValidAmount -= Money;
  898. }
  899. }
  900. decimal AfterAmount = account.ValidAmount + account.TotalAmt + account.ValidForGetAmount; //变更后总金额
  901. if(record)
  902. {
  903. OpModels.AmountRecord add = db.AmountRecord.Add(new OpModels.AmountRecord()
  904. {
  905. CreateDate = DateTime.Now,
  906. UpdateDate = DateTime.Now,
  907. OperateType = OperateType,
  908. AfterAmount = AfterAmount,
  909. AfterValidForGetAmount = account.ValidForGetAmount,
  910. AfterTotalAmt = account.TotalAmt,
  911. AfterValidAmount = account.ValidAmount,
  912. BeforeAmount = BeforeAmount,
  913. UseAmount = Money,
  914. UserId = UserId,
  915. SeoDescription = Remark,
  916. Version = AmountType,
  917. QueryCount = OrderId,
  918. }).Entity;
  919. OpModels.AmountChangeRecord amountChangeRecord = db.AmountChangeRecord.Add(new OpModels.AmountChangeRecord()
  920. {
  921. AmountType = 2,//1 未使用额度 2 可提现额度 3 关联分仓额度
  922. CreateDate = DateTime.Now,
  923. Title = Remark,
  924. UserId = UserId, //运营中心Id
  925. BeforeAmount = BeforeAmount,//使用前剩余额度
  926. AfterAmount = AfterAmount,//使用后剩余额度
  927. ChangeAmount = Money,//操作金额
  928. OperateType = OperateType,//操作类别
  929. Sort = OrderId,
  930. }).Entity;
  931. }
  932. db.SaveChanges();
  933. }
  934. /// <summary>
  935. /// 给券设置大盟主标记
  936. /// </summary>
  937. /// <param name="db"></param>
  938. /// <param name="LeaderUserId"></param>
  939. /// <param name="Count"></param>
  940. /// <param name="couponIds"></param>
  941. public int SetPosCouponLeaderFlag(WebCMSEntities db, int LeaderUserId, int Count, List<int> couponIds)
  942. {
  943. int SetCount = 0;
  944. UserAccount pacccount = db.UserAccount.FirstOrDefault(m => m.Id == LeaderUserId) ?? new UserAccount();
  945. foreach(int couponId in couponIds)
  946. {
  947. PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId);
  948. decimal LeaderReserve = pacccount.LeaderReserve;
  949. decimal CheckReserve = 400 * Count;
  950. // if(LeaderReserve < CheckReserve)
  951. // {
  952. // LeaderReserveRecord ReserveRecord = db.LeaderReserveRecord.FirstOrDefault(m => m.UserId == LeaderUserId && m.Remark == "推荐小盟主" && m.ChangeAmt - m.UsedReserve > 0);
  953. // if(ReserveRecord != null)
  954. // {
  955. // if(ReserveRecord.ChangeAmt - ReserveRecord.UsedReserve >= CheckReserve)
  956. // {
  957. // LeaderReserve = CheckReserve;
  958. // ReserveRecord.UsedReserve += CheckReserve;
  959. // }
  960. // else
  961. // {
  962. // decimal OtherLeaderReserve = ReserveRecord.ChangeAmt - ReserveRecord.UsedReserve;
  963. // ReserveRecord.UsedReserve += OtherLeaderReserve;
  964. // LeaderReserveRecord ReserveRecord2 = db.LeaderReserveRecord.FirstOrDefault(m => m.Id > ReserveRecord.Id && m.UserId == LeaderUserId && m.Remark == "推荐小盟主" && m.ChangeAmt - m.UsedReserve > 0);
  965. // if(ReserveRecord2 != null)
  966. // {
  967. // if(ReserveRecord2.ChangeAmt - ReserveRecord2.UsedReserve >= CheckReserve - OtherLeaderReserve)
  968. // {
  969. // LeaderReserve = CheckReserve - OtherLeaderReserve;
  970. // ReserveRecord2.UsedReserve += CheckReserve - OtherLeaderReserve;
  971. // }
  972. // else
  973. // {
  974. // OtherLeaderReserve = ReserveRecord2.ChangeAmt - ReserveRecord2.UsedReserve;
  975. // ReserveRecord2.UsedReserve += OtherLeaderReserve;
  976. // }
  977. // }
  978. // }
  979. // }
  980. // }
  981. if(coupon != null && LeaderReserve >= CheckReserve)
  982. {
  983. coupon.LeaderUserId = LeaderUserId;
  984. SetCount += 1;
  985. }
  986. }
  987. db.SaveChanges();
  988. return SetCount;
  989. }
  990. public int CheckPosCouponLeaderFlag(WebCMSEntities db, int UserId, int Count, List<string> codes)
  991. {
  992. int LeaderUserId = 0;
  993. decimal CheckReserve = 400 * Count;
  994. // decimal LeaderReserve = 0;
  995. LeaderReserveRecord ReserveRecord = db.LeaderReserveRecord.FirstOrDefault(m => m.SourceUserId == UserId && m.Remark == "推荐小盟主" && m.ChangeAmt - m.UsedReserve > CheckReserve);
  996. if(ReserveRecord != null)
  997. {
  998. LeaderUserId = ReserveRecord.UserId;
  999. // if(ReserveRecord.ChangeAmt - ReserveRecord.UsedReserve >= CheckReserve)
  1000. // {
  1001. // LeaderReserve = CheckReserve;
  1002. ReserveRecord.UsedReserve += CheckReserve;
  1003. // }
  1004. // else
  1005. // {
  1006. // decimal OtherLeaderReserve = ReserveRecord.ChangeAmt - ReserveRecord.UsedReserve;
  1007. // ReserveRecord.UsedReserve += OtherLeaderReserve;
  1008. // LeaderReserveRecord ReserveRecord2 = db.LeaderReserveRecord.FirstOrDefault(m => m.Id > ReserveRecord.Id && m.UserId == LeaderUserId && m.Remark == "推荐小盟主" && m.ChangeAmt - m.UsedReserve > 0);
  1009. // if(ReserveRecord2 != null)
  1010. // {
  1011. // if(ReserveRecord2.ChangeAmt - ReserveRecord2.UsedReserve >= CheckReserve - OtherLeaderReserve)
  1012. // {
  1013. // LeaderReserve = CheckReserve - OtherLeaderReserve;
  1014. // ReserveRecord2.UsedReserve += CheckReserve - OtherLeaderReserve;
  1015. // }
  1016. // else
  1017. // {
  1018. // OtherLeaderReserve = ReserveRecord2.ChangeAmt - ReserveRecord2.UsedReserve;
  1019. // ReserveRecord2.UsedReserve += OtherLeaderReserve;
  1020. // }
  1021. // }
  1022. // }
  1023. List<int> couponIds = db.PosCoupons.Where(m => codes.Contains(m.ExchangeCode)).OrderBy(m => m.Id).ToList().Select(m => m.Id).ToList();
  1024. foreach(int couponId in couponIds)
  1025. {
  1026. PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId);
  1027. if(coupon != null)
  1028. {
  1029. coupon.LeaderUserId = LeaderUserId;
  1030. }
  1031. }
  1032. db.SaveChanges();
  1033. }
  1034. return LeaderUserId;
  1035. }
  1036. /// <summary>
  1037. /// 获取购机奖金额
  1038. /// </summary>
  1039. /// <param name="user"></param>
  1040. /// <returns></returns>
  1041. public decimal GetBuyPrize(UserRankItem user, Orders order)
  1042. {
  1043. if(user.OperateLevel == 1) return 100;
  1044. if(user.OperateLevel == 2)
  1045. {
  1046. function.WriteLog("\n\n\n创客Id:" + user.Id, "训练营60拦截日志");
  1047. if(TradeTeamCheck2(user.Id))
  1048. {
  1049. return 160;
  1050. }
  1051. function.WriteLog("下单人:" + order.UserId, "训练营60拦截日志");
  1052. if(!TradeTeamCheck(order.UserId) && user.Id != order.UserId)
  1053. {
  1054. function.WriteLog("拦截", "训练营60拦截日志");
  1055. decimal Amount = order.BuyCount * 60;
  1056. RedisDbconn.Instance.AddList("TradeFilterQueue", "{\"OrderId\":\"" + order.Id + "\",\"PrizeUserId\":\"" + user.Id + "\",\"Amount\":\"" + Amount + "\",\"Kind\":\"1\"}");
  1057. function.WriteLog("end", "训练营60拦截日志");
  1058. return 100;
  1059. }
  1060. if(CheckSpecialUserNav(order.UserId))
  1061. {
  1062. return 100;
  1063. }
  1064. return 160;
  1065. }
  1066. if(user.OperateLevel == 3) return 180;
  1067. if(user.OperateLevel == 4) return 200;
  1068. if(user.LeaderLevel > 0) return 100;
  1069. return 0;
  1070. }
  1071. public bool TradeTeamCheck(int UserId)
  1072. {
  1073. bool op = true;
  1074. if(UserId == 0)
  1075. {
  1076. return op;
  1077. }
  1078. function.WriteLog("UserId:" + UserId, "训练营判断参与活动");
  1079. WebCMSEntities maindb = new WebCMSEntities();
  1080. Users muser = maindb.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  1081. string ParentNav = muser.ParentUserId + "," + UserId;
  1082. string[] ParentNavList = ParentNav.Split(',');
  1083. List<int> UserIds = new List<int>();
  1084. foreach(string IdString in ParentNavList)
  1085. {
  1086. UserIds.Add(int.Parse(function.CheckInt(IdString)));
  1087. }
  1088. JavaModels.WebCMSEntities db = new JavaModels.WebCMSEntities();
  1089. JavaModels.KxsCamp camp = db.KxsCamp.FirstOrDefault(m => m.Status == 1);
  1090. if(camp != null)
  1091. {
  1092. int CampId = camp.Id;
  1093. var users = db.KxsCampUser.Where(m => UserIds.Contains(m.UserId) && m.CampId == CampId).ToList();
  1094. foreach(var user in users)
  1095. {
  1096. function.WriteLog("活动Id:" + camp.Id, "训练营判断参与活动");
  1097. op = false;
  1098. break;
  1099. }
  1100. }
  1101. maindb.Dispose();
  1102. db.Dispose();
  1103. function.WriteLog("\n\n\n", "训练营判断参与活动");
  1104. return op;
  1105. }
  1106. public bool TradeTeamCheck2(int UserId)
  1107. {
  1108. bool op = false;
  1109. if(UserId == 0)
  1110. {
  1111. return op;
  1112. }
  1113. function.WriteLog("黄金合伙人-UserId:" + UserId, "训练营判断参与活动");
  1114. JavaModels.WebCMSEntities db = new JavaModels.WebCMSEntities();
  1115. var users = db.KxsCampUser.Where(m => m.UserId == UserId).ToList();
  1116. foreach(var user in users)
  1117. {
  1118. DateTime now = DateTime.Now;
  1119. // JavaModels.KxsCamp camp = db.KxsCamp.FirstOrDefault(m => m.Id == user.CampId && m.StartTime <= now && m.EndTime >= now);
  1120. JavaModels.KxsCamp camp = db.KxsCamp.FirstOrDefault(m => m.Id == user.CampId && m.Status == 1);
  1121. if(camp != null)
  1122. {
  1123. function.WriteLog("黄金合伙人-活动Id:" + camp.Id, "训练营判断参与活动");
  1124. op = true;
  1125. break;
  1126. }
  1127. }
  1128. db.Dispose();
  1129. function.WriteLog("\n\n\n", "训练营判断参与活动");
  1130. return op;
  1131. }
  1132. public bool CheckSpecialUserNav(int UserId)
  1133. {
  1134. List<int> ids = new List<int>();
  1135. WebCMSEntities maindb = new WebCMSEntities();
  1136. bool op = maindb.Users.Any(m => (m.ParentNav.Contains(",246751,") || m.Id == 246751) && m.Id == UserId);
  1137. maindb.Dispose();
  1138. return op;
  1139. }
  1140. /// <summary>
  1141. /// 获取可提现金额
  1142. /// </summary>
  1143. /// <param name="user"></param>
  1144. /// <returns></returns>
  1145. public decimal GetWithdrawMoney(UserRankItem user)
  1146. {
  1147. if(user.OperateLevel == 1) return 400;
  1148. // if(user.OperateLevel == 2) return 340;
  1149. // if(user.OperateLevel == 3) return 320;
  1150. // if(user.OperateLevel == 4) return 300;
  1151. if(user.OperateLevel == 2) return 400;
  1152. if(user.OperateLevel == 3) return 400;
  1153. if(user.OperateLevel == 4) return 400;
  1154. if(user.AgoLeaderLevel > 0) return 400;
  1155. return 0;
  1156. }
  1157. /// <summary>
  1158. /// 预设职级
  1159. /// </summary>
  1160. /// <param name="db"></param>
  1161. /// <param name="UserId">创客Id</param>
  1162. /// <param name="Rank">职级</param>
  1163. /// <param name="ExpiredDate">过期时间</param>
  1164. public void PreUserLevel(WebCMSEntities db, int UserId, int Rank, DateTime ExpiredDate)
  1165. {
  1166. UserRankWhite rank = db.UserRankWhite.FirstOrDefault(m => m.Id == UserId);
  1167. if(rank == null)
  1168. {
  1169. rank = db.UserRankWhite.Add(new UserRankWhite()
  1170. {
  1171. CreateDate = DateTime.Now, //设置时间
  1172. UserId = UserId, //用户
  1173. Id = UserId,
  1174. }).Entity;
  1175. db.SaveChanges();
  1176. }
  1177. rank.Rank = Rank;
  1178. rank.UpdateDate = ExpiredDate;
  1179. db.SaveChanges();
  1180. }
  1181. }
  1182. }