Beispiel #1
0
        //关于缓存期限:
        //1、PointItem实体、列表 使用CachingExpirationType.RelativelyStable
        //2、PointCategory实体、列表 使用CachingExpirationType.RelativelyStable
        //3、PointRecord实体、列表 使用正常的缓存策略
        //4、积分记录的所有积分类型都是0,则不创建

        #region 积分变更及记录

        /// <summary>
        /// 依据规则增减积分
        /// </summary>
        /// <param name="userId">增减积分的UserId</param>
        /// <param name="pointItemKey">积分项目标识</param>
        /// <param name="description">积分记录描述</param>
        public void GenerateByRole(long userId, string pointItemKey, string description)
        {
            //1、依据pointItemKey查找积分项目,如果未找到则中断执行;
            PointItem pointItem = GetPointItem(pointItemKey);

            if (pointItem == null)
            {
                return;
            }
            if (pointItem.ExperiencePoints == 0 && pointItem.ReputationPoints == 0 && pointItem.TradePoints == 0)
            {
                return;
            }
            //2、检查用户当日各类积分是否达到限额,如果达到限额则不加积分,如果未达到则更新当日积分限额
            Dictionary <string, int> dictionary = pointStatisticRepository.UpdateStatistic(userId, GetPointCategory2PointsDictionary(pointItem));

            //如果用户当日各类积分都超出限额,则不产生积分
            if (dictionary.Count(n => n.Value != 0) == 0)
            {
                return;
            }

            //3、按照pointItemKey对应的积分项目,生成积分记录,并对用户积分额进行增减;

            int experiencePoints = dictionary[PointCategoryKeys.Instance().ExperiencePoints()];
            int reputationPoints = dictionary[PointCategoryKeys.Instance().ReputationPoints()];
            int tradePoints      = dictionary[PointCategoryKeys.Instance().TradePoints()];
            int tradePoints2     = 0;
            int tradePoints3     = 0;
            int tradePoints4     = 0;

            if (dictionary.ContainsKey("TradePoints2"))
            {
                tradePoints2 = dictionary["TradePoints2"];
            }
            if (dictionary.ContainsKey("TradePoints3"))
            {
                tradePoints3 = dictionary["TradePoints3"];
            }
            if (dictionary.ContainsKey("TradePoints4"))
            {
                tradePoints4 = dictionary["TradePoints4"];
            }

            PointRecord pointRecord = new PointRecord(userId, pointItem.ItemName, description, experiencePoints, reputationPoints, tradePoints);

            pointRecord.TradePoints2 = tradePoints2;
            pointRecord.TradePoints3 = tradePoints3;
            pointRecord.TradePoints4 = tradePoints4;
            pointRecordRepository.Insert(pointRecord);
            IUserService userService = DIContainer.Resolve <IUserService>();

            userService.ChangePoints(userId, experiencePoints, reputationPoints, tradePoints, tradePoints2, tradePoints3, tradePoints4);

            CountService countService = new CountService(TenantTypeIds.Instance().User());

            countService.ChangeCount(CountTypes.Instance().ReputationPointsCounts(), userId, userId, pointRecord.ReputationPoints);
        }
Beispiel #2
0
        /// <summary>
        /// 奖励和惩罚用户
        /// </summary>
        /// <param name="user">用户</param>
        /// <param name="description">理由</param>
        /// <param name="experiencePoints">经验积分值</param>
        /// <param name="reputationPoints">威望积分值</param>
        /// <param name="tradePoints">交易积分值</param>
        /// <param name="isIncome">是否是收入</param>
        public void RewardAndPunishment(IUser user, string description, int experiencePoints, int reputationPoints, int tradePoints, bool isIncome)
        {
            //更新用户积分
            ChangePoints(user, experiencePoints, reputationPoints, tradePoints, 0, 0, 0);

            //产生积分记录
            PointRecord pointRecord = PointRecord.New();

            pointRecord.UserId = user.UserId;
            if (isIncome)
            {
                pointRecord.PointItemName = "系统奖励";
            }
            else
            {
                pointRecord.PointItemName = "系统扣除";
            }
            if (string.IsNullOrEmpty(description))
            {
                if (isIncome)
                {
                    pointRecord.Description = "系统奖励了你经验:" + experiencePoints + ",威望:" + reputationPoints + ",金币:" + tradePoints;
                }
                else
                {
                    pointRecord.Description = "系统扣除了你经验:" + -experiencePoints + ",威望:" + -reputationPoints + ",金币:" + -tradePoints;
                }
            }
            else
            {
                if (isIncome)
                {
                    pointRecord.Description = description + ",系统奖励了你经验:" + experiencePoints + ",威望:" + reputationPoints + ",金币:" + tradePoints;
                }
                else
                {
                    pointRecord.Description = description + ",系统扣除了你经验:" + -experiencePoints + ",威望:" + -reputationPoints + ",金币:" + -tradePoints;
                }
            }
            pointRecord.ExperiencePoints = experiencePoints;
            pointRecord.ReputationPoints = reputationPoints;
            pointRecord.TradePoints      = tradePoints;
            pointRecord.TradePoints2     = 0;
            pointRecord.TradePoints3     = 0;
            pointRecord.TradePoints4     = 0;
            pointRecord.IsIncome         = isIncome;
            pointRecordRepository.Insert(pointRecord);
        }