コード例 #1
0
        /// <summary>
        /// 给用户添加积分-并记录流水
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="feeType"></param>
        /// <param name="fee"></param>
        /// <returns></returns>
        public bool AddScoreOrCoin(long userId, int feeType, int fee, CoinSourceEnum coinSourceEnum, bool needSave = false, ScoreBeloneMainEnumType scoreBeloneMainEnumType = ScoreBeloneMainEnumType.None, long mainId = 0)
        {
            DbContextTransaction tran = null;

            if (needSave)
            {
                tran = _amazonBBSDBContext.Database.BeginTransaction();
            }
            //作者增加积分
            var authorExt = _amazonBBSDBContext.UserExt.FirstOrDefault(a => a.UserID == userId);

            if (feeType == 1)
            {
                authorExt.TotalScore += fee;
            }
            else
            {
                authorExt.TotalCoin += fee;
            }
            //添加记录
            var model = _amazonBBSDBContext.ScoreCoinLog.Add(new ScoreCoinLog()
            {
                UserID     = userId,
                Coin       = fee,
                CoinSource = coinSourceEnum.GetHashCode(),
                CoinTime   = DateTime.Now,
                CoinType   = feeType,
                CreateUser = userId.ToString(),
                UserName   = _amazonBBSDBContext.UserBase.FirstOrDefault(a => a.UserID == userId)?.UserName
            });

            //关联积分对象
            if (mainId > 0 && scoreBeloneMainEnumType != ScoreBeloneMainEnumType.None)
            {
                if (needSave)
                {
                    _amazonBBSDBContext.SaveChanges();
                }
                _amazonBBSDBContext.ScoreBeloneItem.Add(new ScoreBeloneItem
                {
                    CreateTime     = DateTime.Now,
                    MainId         = mainId,
                    MainType       = scoreBeloneMainEnumType.GetHashCode(),
                    ScoreCoinLogId = model.ScoreCoinLogId,
                    UserID         = userId
                });
            }

            if (needSave)
            {
                _amazonBBSDBContext.SaveChanges();
                tran.Commit();
            }
            return(true);
        }
コード例 #2
0
        /// <summary>
        /// 记录消费积分/VIP分的流水
        /// </summary>
        public bool Log(int coin, int coinType, CoinSourceEnum coinSource, long feeUserID, string feeUserName, SqlTransaction tran, long createUser = 0)
        {
            ScoreCoinLog model = new ScoreCoinLog()
            {
                Coin       = coin,
                UserID     = feeUserID,
                CoinSource = coinSource.GetHashCode(),
                CoinTime   = DateTime.Now,
                CoinType   = coinType,
                CreateUser = createUser == 0 ? feeUserID.ToString() : createUser.ToString(),
                UserName   = feeUserName
            };

            return(ScoreCoinLogBLL.Instance.Add(model, tran) > 0);
        }
コード例 #3
0
        /// <summary>
        /// 判断用户是否拥有足够的积分/VIP分 ,并扣除相应金钱 并记录消费流水
        /// </summary>
        /// <param name="type">1积分 2金钱/VIP分</param>
        /// <param name="coin">数量</param>
        /// <param name="userID">用户ID</param>
        /// <param name="coinSourceEnum">coinSourceEnum</param>
        /// <param name="needSave">是否保存DBContext</param>
        /// <returns></returns>
        public Tuple <bool, string> HasEnoughCoinAndSubCoin(int type, int coin, long userID, CoinSourceEnum coinSourceEnum, bool needSave = false)
        {
            bool   ok  = false;
            string msg = string.Empty;
            var    ext = _amazonBBSDBContext.UserExt.FirstOrDefault(a => a.UserID == userID);

            if (type == 1)
            {
                ok = ext.TotalScore >= coin;
            }
            else
            {
                ok = ext.TotalCoin >= coin;
            }
            if (ok)
            {
                //扣除
                if (type == 1)
                {
                    ext.TotalScore -= coin;
                }
                else
                {
                    ext.TotalCoin -= coin;
                }
                //记录流水
                ScoreCoinLog scorecoinlog = new ScoreCoinLog()
                {
                    UserID     = userID,
                    Coin       = -coin,
                    CoinSource = coinSourceEnum.GetHashCode(),
                    CoinTime   = DateTime.Now,
                    CoinType   = type,
                    CreateUser = userID.ToString(),
                    UserName   = _amazonBBSDBContext.UserBase.FirstOrDefault(a => a.UserID == userID).UserName,
                };
                _amazonBBSDBContext.ScoreCoinLog.Add(scorecoinlog);
                if (needSave)
                {
                    _amazonBBSDBContext.SaveChanges();
                }
            }
            else
            {
                msg = $"你的{(type == 1 ? "积分" : "金钱")}不足够";
            }
            return(new Tuple <bool, string>(ok, msg));
        }
コード例 #4
0
        /// <summary>
        /// 用户评论 帖子 文章  触发 加分 及通知  动作
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="coinSourceEnum"></param>
        public void AddScoreOnComment_BBS_Article(long userId, long mainId, ScoreBeloneMainEnumType scoreBeloneMainEnumType, CoinSourceEnum coinSourceEnum)
        {
            try
            {
                int            score           = 0;
                string         publishTypeName = string.Empty;
                NoticeTypeEnum noticeTypeEnum  = NoticeTypeEnum.None;
                if (coinSourceEnum == CoinSourceEnum.UserComment_BBS)
                {
                    publishTypeName = "帖子";
                    score           = ConfigHelper.AppSettings("commentQuestion").ToInt32();
                    noticeTypeEnum  = NoticeTypeEnum.OnPublishBBS;
                }
                else
                {
                    publishTypeName = "文章";
                    score           = ConfigHelper.AppSettings("commentArticle").ToInt32();
                    noticeTypeEnum  = NoticeTypeEnum.OnPublishArticle;
                }

                int coinSource1 = CoinSourceEnum.UserComment_BBS.GetHashCode();
                int coinSource2 = CoinSourceEnum.UserComment_Article.GetHashCode();
                //bool canAdd = true;
                //判断 今日是否达到 上限

                var start = DateTime.Now.Date;
                var end   = DateTime.Now;

                var count__ = _amazonBBSDBContext.ScoreCoinLog.Count(a => a.UserID == userId && a.CoinType == 1 && (a.CoinSource == coinSource2 || a.CoinSource == coinSource1) && a.CoinTime >= start && a.CoinTime <= end);

                if (count__ < ConfigHelper.AppSettings("DayInAddScoreCount").ToInt32())
                {
                    if (AddScoreOrCoin(userId, 1, score, coinSourceEnum, true, scoreBeloneMainEnumType, mainId))
                    {
                        //站内信通知
                        NoticeBLL.Instance.OnComment_BBS_Article_AddScore_Notice_Commenter(userId, DateTime.Now, publishTypeName, score.ToString(), noticeTypeEnum);
                    }
                }
            }
            catch (Exception e)
            {
            }
        }