PosCouponPrizeService.cs 56 KB

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