PosCouponPrizeService.cs 53 KB

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