Exemplo n.º 1
0
        /// <summary>
        /// 购买主题
        /// </summary>
        /// <param name="uid">用户id</param>
        /// <param name="tid">主题id</param>
        /// <param name="posterid">发帖者用户id</param>
        /// <param name="price">价格</param>
        /// <param name="netamount"></param>
        /// <returns></returns>
        public static int BuyTopic(int uid, int tid, int posterid, int price, float netamount)
        {
            int tmpprice = price;

            if (price > Scoresets.GetMaxIncPerTopic())
            {
                tmpprice = Scoresets.GetMaxIncPerTopic();
            }

            ShortUserInfo userInfo = Discuz.Data.Users.GetShortUserInfo(uid);

            if (userInfo == null)
            {
                return(-2);
            }

            if (GetUserExtCredits(userInfo, Scoresets.GetTopicAttachCreditsTrans()) < price)
            {
                return(-1);
            }

            Discuz.Data.Users.BuyTopic(uid, tid, posterid, price, netamount, Scoresets.GetTopicAttachCreditsTrans());
            CreditsFacade.UpdateUserCredits(uid);
            CreditsFacade.UpdateUserCredits(posterid);
            return(Discuz.Data.PaymentLogs.CreatePaymentLog(uid, tid, posterid, price, netamount));
        }
Exemplo n.º 2
0
        public static int BuyTopic(int uid, int tid, int posterid, int price, float netamount)
        {
            if (price > Scoresets.GetMaxIncPerTopic())
            {
                Scoresets.GetMaxIncPerTopic();
            }

            var user = User.FindByID(uid);

            if (user == null)
            {
                return(-2);
            }

            if (PaymentLogs.GetUserExtCredits(user, Scoresets.GetTopicAttachCreditsTrans()) < (float)price)
            {
                return(-1);
            }

            Discuz.Data.Users.BuyTopic(uid, tid, posterid, price, netamount, Scoresets.GetTopicAttachCreditsTrans());
            CreditsFacade.UpdateUserCredits(uid);
            CreditsFacade.UpdateUserCredits(posterid);
            return(Discuz.Data.PaymentLogs.CreatePaymentLog(uid, tid, posterid, price, netamount));
        }
Exemplo n.º 3
0
        /// <summary>
        /// 通过指定值更新用户积分
        /// </summary>
        /// <param name="uid">用户ID</param>
        /// <param name="values">积分变动值,应保证是一个长度为8的数组,对应8种扩展积分的变动值</param>
        /// <param name="allowMinus">是否允许被扣成负分,true允许,false不允许并且不进行扣分返回-1</param>
        /// <returns></returns>
        public static int UpdateUserExtCredits(int uid, float[] values, bool allowMinus)
        {
            if (uid < 1 || Discuz.Data.Users.GetUserInfo(uid) == null)
            {
                return(0);
            }

            if (values.Length < 8)
            {
                return(-1);
            }

            if (!allowMinus)//不允许扣成负分时要进行判断积分是否足够被减
            {
                // 如果要减扩展积分, 首先判断扩展积分是否足够被减
                if (!Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, values))
                {
                    return(-1);
                }
            }

            Discuz.Data.UserCredits.UpdateUserExtCredits(uid, values);

            CreditsFacade.UpdateUserCredits(uid);

            //向应用同步扩展积分
            for (int i = 0; i < values.Length; i++)
            {
                if (values[i] != 0.0)
                {
                    Sync.UpdateCredits(uid, i + 1, values[i].ToString(), "");
                }
            }
            ///更新用户积分
            return(1);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 更新用户积分(适用于单用户,单个或多个操作)
        /// </summary>
        /// <param name="uid">用户ID</param>
        /// <param name="extCredits">使用的积分规则</param>
        /// <param name="mount">更新数量,比如由上传2个附件引发此操作,那么此参数值应为2</param>
        /// <param name="creditsOperationType">积分操作类型,如发帖等</param>
        /// <param name="pos">加或减标志(正数为加,负数为减,通常被传入1或者-1)</param>
        /// <param name="allowMinus">是否允许被扣成负分,true允许,false不允许并且不进行扣分返回-1</param>
        /// <returns></returns>
        private static int UpdateUserExtCredits(int uid, float[] extCredits, int mount, CreditsOperationType creditsOperationType, int pos, bool allowMinus)
        {
            if (uid == -1)//如果当前用户为游客,则直接返回-1
            {
                return(-1);
            }

            //float[] extCredits = Scoresets.GetUserExtCredits(creditsOperationType);
            float extCredit = 0;

            foreach (float e in extCredits)//此循环用于校验当前积分操作是否需要更新用户积分
            {
                if (e != 0)
                {
                    extCredit = e;
                    break;
                }
            }

            if (extCredit == 0)//如果搜索积分设置中全部为0,即不操作积分,则直接返回1
            {
                return(1);
            }

            // 如果要减扩展积分, 首先判断扩展积分是否足够被减
            if (pos < 0)
            {
                //当不是删除主题或回复时
                if (creditsOperationType != CreditsOperationType.PostTopic && creditsOperationType != CreditsOperationType.PostReply)
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, pos, mount))
                    {
                        return(-1);
                    }
                }
            }
            else
            {
                if (creditsOperationType == CreditsOperationType.DownloadAttachment || creditsOperationType == CreditsOperationType.Search)//临时性解决用户搜索扣分可以为负数的问题,当积分系统被重新开发时,该判断代码可根据实际情况拿掉
                {
                    if (!allowMinus && !Discuz.Data.UserCredits.CheckUserCreditsIsEnough(uid, extCredits, -1, mount))
                    {
                        return(-1);
                    }
                }
            }

            Discuz.Data.UserCredits.UpdateUserExtCredits(uid, extCredits, pos, mount);

            for (int i = 0; i < extCredits.Length; i++)
            {
                if (extCredits[i] != 0.0)
                {
                    Sync.UpdateCredits(uid, i + 1, extCredits[i].ToString(), "");
                }
            }
            //根据积分公式更新用户积分,并且受分数变动影响有可能会更改用户所属的用户组
            CreditsFacade.UpdateUserCredits(uid);
            ///更新用户积分
            return(1);
        }