/// <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)); }
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)); }
/// <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); }
/// <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); }