Utils.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Library;
  5. using MySystem.PxcModels;
  6. namespace MySystem
  7. {
  8. public class Utils
  9. {
  10. public readonly static Utils Instance = new Utils();
  11. private Utils()
  12. { }
  13. /// <summary>
  14. /// 操作收支明细
  15. /// </summary>
  16. /// <param name="UserId"></param>
  17. /// <param name="Money"></param>
  18. /// <param name="ChangeType"></param>
  19. public void OpAccount(int UserId, decimal Money, int ChangeType, bool IsTotal = true)
  20. {
  21. WebCMSEntities db = new WebCMSEntities();
  22. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  23. if (account == null)
  24. {
  25. account = db.UserAccount.Add(new UserAccount()
  26. {
  27. Id = UserId,
  28. UserId = UserId,
  29. }).Entity;
  30. db.SaveChanges();
  31. }
  32. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  33. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  34. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  35. account.BalanceAmount += Money;
  36. if(IsTotal)
  37. {
  38. account.TotalAmount += Money;
  39. }
  40. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  41. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  42. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  43. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  44. {
  45. CreateDate = DateTime.Now,
  46. UpdateDate = DateTime.Now,
  47. UserId = UserId, //创客
  48. ChangeType = ChangeType, //变动类型
  49. ChangeAmount = Money, //变更金额
  50. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  51. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  52. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  53. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  54. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  55. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  56. }).Entity;
  57. db.SaveChanges();
  58. db.Dispose();
  59. }
  60. public void ToChargeAmount(int UserId, decimal Money)
  61. {
  62. WebCMSEntities db = new WebCMSEntities();
  63. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
  64. if (account == null)
  65. {
  66. account = db.UserAccount.Add(new UserAccount()
  67. {
  68. Id = UserId,
  69. UserId = UserId,
  70. }).Entity;
  71. db.SaveChanges();
  72. }
  73. account.ToChargeAmount += Money;
  74. db.SaveChanges();
  75. db.Dispose();
  76. }
  77. /// <summary>
  78. /// 判断是否达标创客
  79. /// </summary>
  80. /// <param name="UserId"></param>
  81. /// <returns></returns>
  82. public bool IsStandardUser(int UserId)
  83. {
  84. WebCMSEntities db = new WebCMSEntities();
  85. // Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  86. UserRankItem user = PosCouponPrizeService.Instance.GetUserLevel(UserId);
  87. if(user.UserType == 1)
  88. {
  89. return true;
  90. }
  91. if(user.LeaderLevel > 0)
  92. {
  93. Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId) ?? new Leaders();
  94. if(leader.ExpiredDate > DateTime.Now)
  95. {
  96. return true;
  97. }
  98. }
  99. MpMainModels.WebCMSEntities mpdb = new MpMainModels.WebCMSEntities();
  100. MpMainModels2.WebCMSEntities mpdb2 = new MpMainModels2.WebCMSEntities();
  101. int couponCount = db.PosCoupons.Count(m => m.UserId == UserId && m.IsUse == 0); //1. 个人名下电签兑换券 + 大机兑换券 ≥ 3
  102. // TODO:待确认条件
  103. if(couponCount >= 3)
  104. {
  105. db.Dispose();
  106. mpdb.Dispose();
  107. mpdb2.Dispose();
  108. return true;
  109. }
  110. else
  111. {
  112. List<int> ids = new List<int>();
  113. ids.Add(10);
  114. ids.Add(11);
  115. ids.Add(77);
  116. ids.Add(78);
  117. ids.Add(79);
  118. ids.Add(92);
  119. bool orderCheck = db.Orders.Any(m => m.UserId == UserId && ids.Contains(m.ProductId) && m.Status > 0); //1. 商城下单过id为10、11、77、78、79的商品
  120. if(orderCheck)
  121. {
  122. db.Dispose();
  123. mpdb.Dispose();
  124. mpdb2.Dispose();
  125. return true;
  126. }
  127. else
  128. {
  129. //1. 激活POS机数量 + 激活来客吧商户数量 + 激活广电卡数量 ≥ 3
  130. int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == UserId && m.ActivationState == 1);
  131. int ActMerchantCount = mpdb.MerchantDepositOrder.Count(m => m.UserId == UserId && m.Status > 0) + mpdb2.MerchantDepositOrder.Count(m => m.UserId == UserId && m.Status > 0);
  132. if(ActiveCount + ActMerchantCount >= 3)
  133. {
  134. db.Dispose();
  135. mpdb.Dispose();
  136. mpdb2.Dispose();
  137. return true;
  138. }
  139. }
  140. }
  141. db.Dispose();
  142. mpdb.Dispose();
  143. mpdb2.Dispose();
  144. return false;
  145. }
  146. public bool IsStandardUser2(int UserId, DateTime OrderTime)
  147. {
  148. WebCMSEntities db = new WebCMSEntities();
  149. // Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  150. UserRankItem user = PosCouponPrizeService.Instance.GetUserLevel(UserId);
  151. if(user.UserType == 1)
  152. {
  153. return true;
  154. }
  155. if(user.LeaderLevel > 0)
  156. {
  157. Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId) ?? new Leaders();
  158. if(leader.ExpiredDate > DateTime.Now)
  159. {
  160. return true;
  161. }
  162. }
  163. MpMainModels.WebCMSEntities mpdb = new MpMainModels.WebCMSEntities();
  164. MpMainModels2.WebCMSEntities mpdb2 = new MpMainModels2.WebCMSEntities();
  165. int couponCount = db.PosCoupons.Count(m => m.CreateDate <= OrderTime && m.UserId == UserId && m.IsUse == 0); //1. 个人名下电签兑换券 + 大机兑换券 ≥ 3
  166. // TODO:待确认条件
  167. if(couponCount >= 3)
  168. {
  169. db.Dispose();
  170. mpdb.Dispose();
  171. mpdb2.Dispose();
  172. return true;
  173. }
  174. else
  175. {
  176. List<int> ids = new List<int>();
  177. ids.Add(10);
  178. ids.Add(11);
  179. ids.Add(77);
  180. ids.Add(78);
  181. ids.Add(79);
  182. bool orderCheck = db.Orders.Any(m => m.PayDate <= OrderTime && m.UserId == UserId && ids.Contains(m.ProductId) && m.Status > 0); //1. 商城下单过id为10、11、77、78、79的商品
  183. if(orderCheck)
  184. {
  185. db.Dispose();
  186. mpdb.Dispose();
  187. mpdb2.Dispose();
  188. return true;
  189. }
  190. else
  191. {
  192. //1. 激活POS机数量 + 激活来客吧商户数量 + 激活广电卡数量 ≥ 3
  193. int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == UserId && m.ActivationState == 1 && m.ActivationTime <= OrderTime);
  194. int ActMerchantCount = mpdb.MerchantDepositOrder.Count(m => m.UserId == UserId && m.Status > 0 && m.UpdateDate <= OrderTime) + mpdb2.MerchantDepositOrder.Count(m => m.UserId == UserId && m.Status > 0 && m.UpdateDate <= OrderTime);
  195. if(ActiveCount + ActMerchantCount >= 3)
  196. {
  197. db.Dispose();
  198. mpdb.Dispose();
  199. mpdb2.Dispose();
  200. return true;
  201. }
  202. }
  203. }
  204. db.Dispose();
  205. mpdb.Dispose();
  206. mpdb2.Dispose();
  207. return false;
  208. }
  209. /// <summary>
  210. /// 预设职级
  211. /// </summary>
  212. /// <param name="UserId"></param>
  213. /// <param name="LeaderKind"></param>
  214. public void LeaderPreUserLevel(int UserId, int UserLevel, DateTime ExpiredDate)
  215. {
  216. WebCMSEntities db = new WebCMSEntities();
  217. UserRankWhite rank = db.UserRankWhite.FirstOrDefault(m => m.Id == UserId);
  218. if(rank == null)
  219. {
  220. rank = db.UserRankWhite.Add(new UserRankWhite()
  221. {
  222. CreateDate = DateTime.Now, //设置时间
  223. UserId = UserId, //用户
  224. Id = UserId,
  225. }).Entity;
  226. db.SaveChanges();
  227. }
  228. rank.Rank = UserLevel;
  229. rank.UpdateDate = ExpiredDate;
  230. db.SaveChanges();
  231. db.Dispose();
  232. }
  233. #region 获取创客职级
  234. public int GetUserLevel(int Id)
  235. {
  236. WebCMSEntities db = new WebCMSEntities();
  237. DateTime now = DateTime.Now;
  238. List<int> Levels = new List<int>();
  239. Users user = db.Users.FirstOrDefault(m => m.Id == Id) ?? new Users();
  240. UserRankWhite userRank = db.UserRankWhite.FirstOrDefault(m => m.Id == Id && m.UpdateDate > now) ?? new UserRankWhite();
  241. LeaderRankWhite leaderRank = db.LeaderRankWhite.FirstOrDefault(m => m.Id == Id && m.UpdateDate > now) ?? new LeaderRankWhite();
  242. OperatorRankWhite operatorRank = db.OperatorRankWhite.FirstOrDefault(m => m.Id == Id && m.UpdateDate > now) ?? new OperatorRankWhite();
  243. Levels.Add(user.UserLevel);
  244. Levels.Add(userRank.Rank);
  245. Levels.Add(leaderRank.Rank);
  246. Levels.Add(operatorRank.Rank);
  247. db.Dispose();
  248. return Levels.Max();
  249. }
  250. #endregion
  251. #region 解析机具押金值,单位转换
  252. public string TransferDeposit(PosMachinesTwo newpos, string Deposit)
  253. {
  254. decimal DepositNumber = decimal.Parse(function.CheckNum(Deposit));
  255. if(DepositNumber == 0)
  256. {
  257. return "";
  258. }
  259. WebCMSEntities db = new WebCMSEntities();
  260. int BrandId = newpos.BrandId;
  261. KqProducts pro = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  262. if(pro.NoticeMoneyUnit == 1 && DepositNumber > 1000)
  263. {
  264. DepositNumber = DepositNumber / 100;
  265. }
  266. if(pro.NoticeMoneyUnit == 2 && DepositNumber < 1000)
  267. {
  268. DepositNumber = DepositNumber * 100;
  269. }
  270. db.Dispose();
  271. return DepositNumber.ToString("f2");
  272. }
  273. #endregion
  274. #region 运营中心额度变更
  275. public void OperateAmountChange(OpModels.WebCMSEntities db, OpAmountItem param)
  276. {
  277. if(param.UseAmount <= 0 || param.UserId <= 0) return;
  278. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(param), "运营中心额度变更测试");
  279. OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == param.UserId);
  280. if (account == null)
  281. {
  282. account = db.UserAccount.Add(new OpModels.UserAccount()
  283. {
  284. Id = param.UserId,
  285. UserId = param.UserId,
  286. }).Entity;
  287. db.SaveChanges();
  288. }
  289. decimal BeforeAmount = account.ValidForGetAmount + account.TotalAmt + account.ValidAmount;
  290. if(param.NoAccount == 0)
  291. {
  292. if(param.OperateType == 0 && param.UseTotalAmt > 0 && param.UseValidForGetAmount > 0 && param.UseValidAmount == 0)
  293. {
  294. account.TotalAmt -= param.UseTotalAmt;
  295. account.ValidForGetAmount += param.UseValidForGetAmount;
  296. }
  297. else
  298. {
  299. if(param.OperateType == 1)
  300. {
  301. account.TotalAmt += param.UseTotalAmt;
  302. account.ValidForGetAmount += param.UseValidForGetAmount;
  303. account.ValidAmount += param.UseValidAmount;
  304. }
  305. else if(param.OperateType == 2)
  306. {
  307. account.TotalAmt -= param.UseTotalAmt;
  308. account.ValidForGetAmount -= param.UseValidForGetAmount;
  309. account.ValidAmount -= param.UseValidAmount;
  310. }
  311. }
  312. }
  313. if(account.TotalAmt < 0) return;
  314. function.WriteLog("1", "运营中心额度变更测试");
  315. decimal AfterAmount = account.ValidForGetAmount + account.TotalAmt + account.ValidAmount;
  316. OpModels.AmountRecordNew add = db.AmountRecordNew.Add(new OpModels.AmountRecordNew()
  317. {
  318. CreateDate = DateTime.Now,
  319. UpdateDate = DateTime.Now,
  320. ChangeTypeId = param.ChangeType,
  321. Remark = param.Remark,
  322. AfterValidForGetAmount = account.ValidForGetAmount,
  323. AfterTotalAmt = account.TotalAmt,
  324. AfterValidAmount = account.ValidAmount,
  325. OperateType = param.OperateType,
  326. AfterAmount = AfterAmount,
  327. BeforeAmount = BeforeAmount,
  328. UseAmount = param.UseAmount,
  329. UserId = param.UserId,
  330. UseValidForGetAmount = param.UseValidForGetAmount,
  331. UseTotalAmt = param.UseTotalAmt,
  332. UseValidAmount = param.UseValidAmount,
  333. DataType = param.DataType,
  334. DataId = param.DataId,
  335. }).Entity;
  336. function.WriteLog("2", "运营中心额度变更测试");
  337. db.SaveChanges();
  338. function.WriteLog("3\n\n", "运营中心额度变更测试");
  339. }
  340. #endregion
  341. #region 推送订单信息
  342. public void SendMqOrder(Orders order)
  343. {
  344. string chk = RedisDbconn.Instance.Get<string>("KxsOrderQueueChk:" + order.Id + ":" + order.Status);
  345. if(!string.IsNullOrEmpty(chk))
  346. {
  347. return;
  348. }
  349. RedisDbconn.Instance.Set("KxsOrderQueueChk:" + order.Id + ":" + order.Status, DateTime.Now.ToString());
  350. RedisDbconn.Instance.SetExpire("KxsOrderQueueChk:" + order.Id + ":" + order.Status, 7200);
  351. string data = Newtonsoft.Json.JsonConvert.SerializeObject(new MqOrder()
  352. {
  353. id = order.Id,
  354. status = order.Status,
  355. createDate = order.CreateDate,
  356. snNos = order.SnNos,
  357. remark = order.Remark,
  358. buyCount = order.BuyCount,
  359. payStatus = order.PayStatus,
  360. productId = order.ProductId,
  361. sendStatus = order.SendStatus,
  362. deliveryType = order.DeliveryType,
  363. refundStatus = order.RefundStatus,
  364. payMode = order.PayMode,
  365. sendDate = order.SendDate == null ? "" : order.SendDate.Value.ToString("yyyy-MM-ddTHH:mm:ss"),
  366. payDate = order.PayDate == null ? "" : order.PayDate.Value.ToString("yyyy-MM-ddTHH:mm:ss"),
  367. postalCode = order.PostalCode,
  368. address = order.Address,
  369. areas = order.Areas,
  370. totalPrice = order.TotalPrice,
  371. mobile = order.Mobile,
  372. realName = order.RealName,
  373. orderNo = order.OrderNo,
  374. userId = order.UserId,
  375. parentOrderId = order.ParentOrderId,
  376. });
  377. function.WriteLog(DateTime.Now.ToString() + "\n" + data, "订单推送MQ日志");
  378. RedisDbconn.Instance.AddList("KxsOrderQueue", data);
  379. }
  380. #endregion
  381. #region 推送激活数据信息
  382. public void SendActData(PosMachinesTwo pos)
  383. {
  384. string chk = RedisDbconn.Instance.Get<string>("KxsActQueueChk:" + pos.PosSn);
  385. if(!string.IsNullOrEmpty(chk))
  386. {
  387. return;
  388. }
  389. RedisDbconn.Instance.Set("KxsActQueueChk:" + pos.PosSn, DateTime.Now.ToString());
  390. RedisDbconn.Instance.SetExpire("KxsActQueueChk:" + pos.PosSn, 7200);
  391. int actType = pos.BrandId != 14 ? 1 : 2;
  392. if(pos.BrandId >= 23 && pos.BrandId <= 26) actType = 5;
  393. string data = "{";
  394. data += "\"userId\":\"" + pos.BuyUserId + "\",";
  395. data += "\"brandId\":\"" + pos.BrandId + "\",";
  396. string actTime = pos.ActivationTime == null ? "" : pos.ActivationTime.Value.ToString("yyyy-MM-ddTHH:mm:ss");
  397. data += "\"actTime\":\"" + actTime + "\",";
  398. data += "\"bindTime\":\"" + pos.BindingTime.Value.ToString("yyyy-MM-ddTHH:mm:ss") + "\",";
  399. data += "\"sn\":\"" + pos.PosSn + "\",";
  400. data += "\"actType\":\"" + actType + "\"";
  401. data += "}";
  402. function.WriteLog(DateTime.Now.ToString() + "\n" + data, "订单推送MQ日志");
  403. RedisDbconn.Instance.AddList("KxsActQueue", data);
  404. }
  405. #endregion
  406. #region 推送奖励信息
  407. public void PrizePush(int UserId, decimal Prize)
  408. {
  409. WebCMSEntities db = new WebCMSEntities();
  410. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  411. if(!string.IsNullOrEmpty(user.DeviceType))
  412. {
  413. RedisDbconn.Instance.AddList("AliyunPushQueue", "{\"Account\":\"" + user.Mobile + "\",\"Device\":\"" + user.DeviceType.ToUpper() + "\",\"Title\":\"客小爽创客版\",\"Body\":\"奖励到账" + Prize.ToString("f2") +"元,打开收支明细查看!\"}");
  414. }
  415. db.Dispose();
  416. }
  417. #endregion
  418. #region 记录奖励详细流程
  419. public void PrizeRecord(int Kind, string CodeNumber, string Detail)
  420. {
  421. PrizeFlowRecord item = new PrizeFlowRecord()
  422. {
  423. CreateDate = DateTime.Now,
  424. Kind = Kind,
  425. CodeNumber = CodeNumber,
  426. Detail = Detail,
  427. };
  428. RedisDbconn.Instance.AddList("PrizeFlowQueue", Newtonsoft.Json.JsonConvert.SerializeObject(item));
  429. }
  430. #endregion
  431. #region 判断好哒产品
  432. public bool IsHaoDa(int BrandId)
  433. {
  434. List<int> Check = new List<int>();
  435. Check.Add(18);
  436. Check.Add(19);
  437. Check.Add(20);
  438. Check.Add(21);
  439. Check.Add(29);
  440. return Check.Contains(BrandId);
  441. }
  442. #endregion
  443. #region 判断WIFI产品
  444. public bool IsWifi(int BrandId)
  445. {
  446. List<int> Check = new List<int>();
  447. Check.Add(23);
  448. Check.Add(24);
  449. Check.Add(25);
  450. Check.Add(26);
  451. return Check.Contains(BrandId);
  452. }
  453. #endregion
  454. }
  455. }