using Aliyun.OSS; using Elasticsearch.Net; using JiaZhiQuan.Common.AliOSS; using JiaZhiQuan.Common.Config; using JiaZhiQuan.Common.ElasticSearch; using JiaZhiQuan.Common.ElasticSearch.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Senparc.Weixin.MP.Containers; using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Dynamic; using System.Linq; using System.Net.Http; using System.Reflection; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using Wicture.DbRESTFul; using Wicture.DbRESTFul.Cache; using Wicture.DbRESTFul.Infrastructure.Repository; namespace JiaZhiQuan.Common { public static partial class RepositoryExtension { /// /// 检查是否需要给用户发放笔记价值币 /// public static async Task CheckShouldPostPointsGiven(this DbRESTFulRepository repository, long userId, ConfigFromDb dbConfig, IDbConnection conn = null) { if (CommonUtils.IsMockUser(userId) || dbConfig.UserPointsPublishPost < 1) return false; var date = DateTime.Now.ToString("yyyy-MM-dd"); return (await repository.QuerySingleOrDefaultAsync($"select count(id) from n_user_points_record where userId={userId} and way='POST' and createAtDate='{date}'", null, conn)) < dbConfig.UserPointsPublishPostMaxCount; } /// /// 检查是否需要给用户发放评论价值币 /// public static async Task CheckShouldCommentPointsGiven(this DbRESTFulRepository repository, long userId, ConfigFromDb dbConfig, IDbConnection conn = null) { if (CommonUtils.IsMockUser(userId) || dbConfig.UserPointsComment < 1) return false; var date = DateTime.Now.ToString("yyyy-MM-dd"); return (await repository.QuerySingleOrDefaultAsync($"select count(id) from n_user_points_record where userId={userId} and way='COMMENT' and createAtDate='{date}'", null, conn)) < dbConfig.UserPointsCommentMaxCount; } public static async Task GivenPoints(this DbRESTFulRepository repository, long userId, ConfigFromDb config, IDbConnection conn) { if (await repository.CheckShouldCommentPointsGiven(userId, config, conn)) { var trans = conn.BeginTransaction(); try { await repository.QueryAsync("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); await repository.QueryAsync("update n_user_statistic set points=points+@points where userId=@userId", new { points = config.UserPointsComment, userId }, conn, trans); trans.Commit(); } catch (Exception ex) { trans.Rollback(); LoggerManager.Logger.Error(ex, "赠送欧拉币失败" + "\r\n" + ex.Message); } return true; } return false; } } }