RepositoryExtension.Points.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using Aliyun.OSS;
  2. using Elasticsearch.Net;
  3. using JiaZhiQuan.Common.AliOSS;
  4. using JiaZhiQuan.Common.Config;
  5. using JiaZhiQuan.Common.ElasticSearch;
  6. using JiaZhiQuan.Common.ElasticSearch.Models;
  7. using Newtonsoft.Json;
  8. using Newtonsoft.Json.Linq;
  9. using Senparc.Weixin.MP.Containers;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Data;
  13. using System.Diagnostics;
  14. using System.Dynamic;
  15. using System.Linq;
  16. using System.Net.Http;
  17. using System.Reflection;
  18. using System.Security.Cryptography;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. using Wicture.DbRESTFul;
  22. using Wicture.DbRESTFul.Cache;
  23. using Wicture.DbRESTFul.Infrastructure.Repository;
  24. namespace JiaZhiQuan.Common
  25. {
  26. public static partial class RepositoryExtension
  27. {
  28. /// <summary>
  29. /// 检查是否需要给用户发放笔记价值币
  30. /// </summary>
  31. public static async Task<bool> CheckShouldPostPointsGiven(this DbRESTFulRepository repository, long userId, ConfigFromDb dbConfig, IDbConnection conn = null)
  32. {
  33. if (CommonUtils.IsMockUser(userId) || dbConfig.UserPointsPublishPost < 1) return false;
  34. var date = DateTime.Now.ToString("yyyy-MM-dd");
  35. return (await repository.QuerySingleOrDefaultAsync<int>($"select count(id) from n_user_points_record where userId={userId} and way='POST' and createAtDate='{date}'", null, conn)) < dbConfig.UserPointsPublishPostMaxCount;
  36. }
  37. /// <summary>
  38. /// 检查是否需要给用户发放评论价值币
  39. /// </summary>
  40. public static async Task<bool> CheckShouldCommentPointsGiven(this DbRESTFulRepository repository, long userId, ConfigFromDb dbConfig, IDbConnection conn = null)
  41. {
  42. if (CommonUtils.IsMockUser(userId) || dbConfig.UserPointsComment < 1) return false;
  43. var date = DateTime.Now.ToString("yyyy-MM-dd");
  44. return (await repository.QuerySingleOrDefaultAsync<int>($"select count(id) from n_user_points_record where userId={userId} and way='COMMENT' and createAtDate='{date}'", null, conn)) < dbConfig.UserPointsCommentMaxCount;
  45. }
  46. public static async Task<bool> GivenPoints(this DbRESTFulRepository repository, long userId, ConfigFromDb config, IDbConnection conn)
  47. {
  48. if (await repository.CheckShouldCommentPointsGiven(userId, config, conn))
  49. {
  50. var trans = conn.BeginTransaction();
  51. try
  52. {
  53. await repository.QueryAsync<dynamic>("insert into n_user_points_record(userId, points, way, description, createAt, createAtDate) values (@userId, @points, 'COMMENT', @description, @now, @now)", new { userId, points = config.UserPointsComment, description = "发表评论,欧拉币奖励", now = DateTime.Now }, conn, trans);
  54. await repository.QueryAsync<dynamic>("update n_user_statistic set points=points+@points where userId=@userId", new { points = config.UserPointsComment, userId }, conn, trans);
  55. trans.Commit();
  56. }
  57. catch (Exception ex)
  58. {
  59. trans.Rollback();
  60. LoggerManager.Logger.Error(ex, "赠送欧拉币失败" + "\r\n" + ex.Message);
  61. }
  62. return true;
  63. }
  64. return false;
  65. }
  66. }
  67. }