Utils.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  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. bool orderCheck = db.Orders.Any(m => m.UserId == UserId && ids.Contains(m.ProductId) && m.Status > 0); //1. 商城下单过id为10、11、77、78、79的商品
  119. if(orderCheck)
  120. {
  121. db.Dispose();
  122. mpdb.Dispose();
  123. mpdb2.Dispose();
  124. return true;
  125. }
  126. else
  127. {
  128. //1. 激活POS机数量 + 激活来客吧商户数量 + 激活广电卡数量 ≥ 3
  129. int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == UserId && m.ActivationState == 1);
  130. int ActMerchantCount = mpdb.MerchantDepositOrder.Count(m => m.UserId == UserId && m.Status > 0) + mpdb2.MerchantDepositOrder.Count(m => m.UserId == UserId && m.Status > 0);
  131. if(ActiveCount + ActMerchantCount >= 3)
  132. {
  133. db.Dispose();
  134. mpdb.Dispose();
  135. mpdb2.Dispose();
  136. return true;
  137. }
  138. }
  139. }
  140. db.Dispose();
  141. mpdb.Dispose();
  142. mpdb2.Dispose();
  143. return false;
  144. }
  145. public bool IsStandardUser2(int UserId, DateTime OrderTime)
  146. {
  147. WebCMSEntities db = new WebCMSEntities();
  148. // Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  149. UserRankItem user = PosCouponPrizeService.Instance.GetUserLevel(UserId);
  150. if(user.UserType == 1)
  151. {
  152. return true;
  153. }
  154. if(user.LeaderLevel > 0)
  155. {
  156. Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId) ?? new Leaders();
  157. if(leader.ExpiredDate > DateTime.Now)
  158. {
  159. return true;
  160. }
  161. }
  162. MpMainModels.WebCMSEntities mpdb = new MpMainModels.WebCMSEntities();
  163. MpMainModels2.WebCMSEntities mpdb2 = new MpMainModels2.WebCMSEntities();
  164. int couponCount = db.PosCoupons.Count(m => m.CreateDate <= OrderTime && m.UserId == UserId && m.IsUse == 0); //1. 个人名下电签兑换券 + 大机兑换券 ≥ 3
  165. // TODO:待确认条件
  166. if(couponCount >= 3)
  167. {
  168. db.Dispose();
  169. mpdb.Dispose();
  170. mpdb2.Dispose();
  171. return true;
  172. }
  173. else
  174. {
  175. List<int> ids = new List<int>();
  176. ids.Add(10);
  177. ids.Add(11);
  178. ids.Add(77);
  179. ids.Add(78);
  180. ids.Add(79);
  181. 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的商品
  182. if(orderCheck)
  183. {
  184. db.Dispose();
  185. mpdb.Dispose();
  186. mpdb2.Dispose();
  187. return true;
  188. }
  189. else
  190. {
  191. //1. 激活POS机数量 + 激活来客吧商户数量 + 激活广电卡数量 ≥ 3
  192. int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == UserId && m.ActivationState == 1 && m.ActivationTime <= OrderTime);
  193. 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);
  194. if(ActiveCount + ActMerchantCount >= 3)
  195. {
  196. db.Dispose();
  197. mpdb.Dispose();
  198. mpdb2.Dispose();
  199. return true;
  200. }
  201. }
  202. }
  203. db.Dispose();
  204. mpdb.Dispose();
  205. mpdb2.Dispose();
  206. return false;
  207. }
  208. /// <summary>
  209. /// 预设职级
  210. /// </summary>
  211. /// <param name="UserId"></param>
  212. /// <param name="LeaderKind"></param>
  213. public void LeaderPreUserLevel(int UserId, int UserLevel, DateTime ExpiredDate)
  214. {
  215. WebCMSEntities db = new WebCMSEntities();
  216. UserRankWhite rank = db.UserRankWhite.FirstOrDefault(m => m.Id == UserId);
  217. if(rank == null)
  218. {
  219. rank = db.UserRankWhite.Add(new UserRankWhite()
  220. {
  221. CreateDate = DateTime.Now, //设置时间
  222. UserId = UserId, //用户
  223. Id = UserId,
  224. }).Entity;
  225. db.SaveChanges();
  226. }
  227. rank.Rank = UserLevel;
  228. rank.UpdateDate = ExpiredDate;
  229. db.SaveChanges();
  230. db.Dispose();
  231. }
  232. #region 获取创客职级
  233. public int GetUserLevel(int Id)
  234. {
  235. WebCMSEntities db = new WebCMSEntities();
  236. DateTime now = DateTime.Now;
  237. List<int> Levels = new List<int>();
  238. Users user = db.Users.FirstOrDefault(m => m.Id == Id) ?? new Users();
  239. UserRankWhite userRank = db.UserRankWhite.FirstOrDefault(m => m.Id == Id && m.UpdateDate > now) ?? new UserRankWhite();
  240. LeaderRankWhite leaderRank = db.LeaderRankWhite.FirstOrDefault(m => m.Id == Id && m.UpdateDate > now) ?? new LeaderRankWhite();
  241. OperatorRankWhite operatorRank = db.OperatorRankWhite.FirstOrDefault(m => m.Id == Id && m.UpdateDate > now) ?? new OperatorRankWhite();
  242. Levels.Add(user.UserLevel);
  243. Levels.Add(userRank.Rank);
  244. Levels.Add(leaderRank.Rank);
  245. Levels.Add(operatorRank.Rank);
  246. db.Dispose();
  247. return Levels.Max();
  248. }
  249. #endregion
  250. #region 解析机具押金值,单位转换
  251. public string TransferDeposit(PosMachinesTwo newpos, string Deposit)
  252. {
  253. decimal DepositNumber = decimal.Parse(function.CheckNum(Deposit));
  254. if(DepositNumber == 0)
  255. {
  256. return "";
  257. }
  258. WebCMSEntities db = new WebCMSEntities();
  259. int BrandId = newpos.BrandId;
  260. KqProducts pro = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  261. if(pro.NoticeMoneyUnit == 1 && DepositNumber > 1000)
  262. {
  263. DepositNumber = DepositNumber / 100;
  264. }
  265. if(pro.NoticeMoneyUnit == 2 && DepositNumber < 1000)
  266. {
  267. DepositNumber = DepositNumber * 100;
  268. }
  269. db.Dispose();
  270. return DepositNumber.ToString("f2");
  271. }
  272. #endregion
  273. #region 运营中心额度变更
  274. public void OperateAmountChange(OpModels.WebCMSEntities db, OpAmountItem param)
  275. {
  276. if(param.UseAmount <= 0 || param.UserId <= 0) return;
  277. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(param), "运营中心额度变更测试");
  278. OpModels.UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == param.UserId);
  279. if (account == null)
  280. {
  281. account = db.UserAccount.Add(new OpModels.UserAccount()
  282. {
  283. Id = param.UserId,
  284. UserId = param.UserId,
  285. }).Entity;
  286. db.SaveChanges();
  287. }
  288. decimal BeforeAmount = account.ValidForGetAmount + account.TotalAmt + account.ValidAmount;
  289. if(param.NoAccount == 0)
  290. {
  291. if(param.OperateType == 0 && param.UseTotalAmt > 0 && param.UseValidForGetAmount > 0 && param.UseValidAmount == 0)
  292. {
  293. account.TotalAmt -= param.UseTotalAmt;
  294. account.ValidForGetAmount += param.UseValidForGetAmount;
  295. }
  296. else
  297. {
  298. if(param.OperateType == 1)
  299. {
  300. account.TotalAmt += param.UseTotalAmt;
  301. account.ValidForGetAmount += param.UseValidForGetAmount;
  302. account.ValidAmount += param.UseValidAmount;
  303. }
  304. else if(param.OperateType == 2)
  305. {
  306. account.TotalAmt -= param.UseTotalAmt;
  307. account.ValidForGetAmount -= param.UseValidForGetAmount;
  308. account.ValidAmount -= param.UseValidAmount;
  309. }
  310. }
  311. }
  312. if(account.TotalAmt < 0) return;
  313. function.WriteLog("1", "运营中心额度变更测试");
  314. decimal AfterAmount = account.ValidForGetAmount + account.TotalAmt + account.ValidAmount;
  315. OpModels.AmountRecordNew add = db.AmountRecordNew.Add(new OpModels.AmountRecordNew()
  316. {
  317. CreateDate = DateTime.Now,
  318. UpdateDate = DateTime.Now,
  319. ChangeTypeId = param.ChangeType,
  320. Remark = param.Remark,
  321. AfterValidForGetAmount = account.ValidForGetAmount,
  322. AfterTotalAmt = account.TotalAmt,
  323. AfterValidAmount = account.ValidAmount,
  324. OperateType = param.OperateType,
  325. AfterAmount = AfterAmount,
  326. BeforeAmount = BeforeAmount,
  327. UseAmount = param.UseAmount,
  328. UserId = param.UserId,
  329. UseValidForGetAmount = param.UseValidForGetAmount,
  330. UseTotalAmt = param.UseTotalAmt,
  331. UseValidAmount = param.UseValidAmount,
  332. DataType = param.DataType,
  333. DataId = param.DataId,
  334. }).Entity;
  335. function.WriteLog("2", "运营中心额度变更测试");
  336. db.SaveChanges();
  337. function.WriteLog("3\n\n", "运营中心额度变更测试");
  338. }
  339. #endregion
  340. #region 推送订单信息
  341. public void SendMqOrder(Orders order)
  342. {
  343. string data = Newtonsoft.Json.JsonConvert.SerializeObject(new MqOrder()
  344. {
  345. id = order.Id,
  346. status = order.Status,
  347. createDate = order.CreateDate,
  348. snNos = order.SnNos,
  349. remark = order.Remark,
  350. buyCount = order.BuyCount,
  351. payStatus = order.PayStatus,
  352. productId = order.ProductId,
  353. sendStatus = order.SendStatus,
  354. deliveryType = order.DeliveryType,
  355. refundStatus = order.RefundStatus,
  356. payMode = order.PayMode,
  357. sendDate = order.SendDate == null ? "" : order.SendDate.Value.ToString("yyyy-MM-ddTHH:mm:ss"),
  358. payDate = order.PayDate == null ? "" : order.PayDate.Value.ToString("yyyy-MM-ddTHH:mm:ss"),
  359. postalCode = order.PostalCode,
  360. address = order.Address,
  361. areas = order.Areas,
  362. totalPrice = order.TotalPrice,
  363. mobile = order.Mobile,
  364. realName = order.RealName,
  365. orderNo = order.OrderNo,
  366. userId = order.UserId,
  367. parentOrderId = order.ParentOrderId,
  368. });
  369. function.WriteLog(DateTime.Now.ToString() + "\n" + data, "订单推送MQ日志");
  370. RedisDbconn.Instance.AddList("KxsOrderQueue", data);
  371. }
  372. #endregion
  373. #region 推送激活数据信息
  374. public void SendActData(PosMachinesTwo pos)
  375. {
  376. int actType = pos.BrandId != 14 ? 1 : 2;
  377. string data = "{";
  378. data += "\"userId\":\"" + pos.BuyUserId + "\",";
  379. data += "\"brandId\":\"" + pos.BrandId + "\",";
  380. data += "\"actTime\":\"" + pos.ActivationTime.Value.ToString("yyyy-MM-ddTHH:mm:ss") + "\",";
  381. data += "\"bindTime\":\"" + pos.BindingTime.Value.ToString("yyyy-MM-ddTHH:mm:ss") + "\",";
  382. data += "\"sn\":\"" + pos.PosSn + "\",";
  383. data += "\"actType\":\"" + actType + "\"";
  384. data += "}";
  385. function.WriteLog(DateTime.Now.ToString() + "\n" + data, "订单推送MQ日志");
  386. RedisDbconn.Instance.AddList("KxsActQueue", data);
  387. }
  388. #endregion
  389. #region 推送奖励信息
  390. public void PrizePush(int UserId, decimal Prize)
  391. {
  392. WebCMSEntities db = new WebCMSEntities();
  393. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  394. if(!string.IsNullOrEmpty(user.DeviceType))
  395. {
  396. RedisDbconn.Instance.AddList("AliyunPushQueue", "{\"Account\":\"" + user.Mobile + "\",\"Device\":\"" + user.DeviceType.ToUpper() + "\",\"Title\":\"客小爽创客版\",\"Body\":\"奖励到账" + Prize.ToString("f2") +"元,打开收支明细查看!\"}");
  397. }
  398. db.Dispose();
  399. }
  400. #endregion
  401. }
  402. }