Esempio n. 1
0
        /// 获取签到信息
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <returns>MemberSignModel.</returns>
        public static MemberSignModel GetMemberSignModel(int userId)
        {
            using (var dal = FactoryDispatcher.UserFactory())
            {
                string          cacheKey = GetMemberSignCacheKey(userId);
                MemberSignModel model    = WebCacheHelper <MemberSignModel> .Get(cacheKey);

                if (model == null)
                {
                    model = dal.GetMemberSignModel(userId);
                    if (model == null)
                    {
                        return(null);
                    }
                    WebCacheHelper.Insert(cacheKey, model, new System.Web.Caching.CacheDependency(WebCacheHelper.GetDepFile(cacheKey)));
                }
                return(model);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 签到功能
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="appsystem">The appsystem.</param>
        /// <param name="addr">The addr.</param>
        /// <param name="apiCode">The API code.</param>
        /// <returns>true if XXXX, false otherwise.</returns>
        public static int SignIn(UserModel user, string appsystem, string addr, ref ApiStatusCode apiCode)
        {
            int userId = user.UserId;

            try
            {
                string outputMsg = string.Empty;

                /**
                 * 输出签到积分,从区间中随机获取
                 */
                int Integral = 0;

                /**
                 * 输出签到额外奖励积分
                 */
                int RewardIntegral = 0;

                /**
                 * 日期格式
                 */
                string dateFormat = "yyyy-MM-dd";

                /**
                 * 获取商家签到配置信息
                 */
                SignInConfig signCfg = ConfigLogic.GetSignInConfig();

                /**
                 * 判断商户是否开启签到功能
                 */
                if (signCfg == null || !signCfg.EnableSign || signCfg.SignScore <= 0)
                {
                    apiCode = ApiStatusCode.签到功能未开启;
                    return(0);
                }

                Integral = signCfg.SignScore;

                /**
                 * 连续签到天数,默认0
                 */
                int             SignCount  = 0;
                MemberSignModel memberSign = GetMemberSignModel(userId);
                if (memberSign == null)
                {
                    memberSign        = new MemberSignModel();
                    memberSign.UserId = userId;
                }
                else
                {
                    /**
                     * 判断今天是否签到过
                     */
                    if (memberSign.lastSignTime.ToString(dateFormat).Equals(DateTime.Now.ToString(dateFormat)))
                    {
                        apiCode = ApiStatusCode.今日已签到;
                        return(0);
                    }
                }


                /**
                 * 判断是否开启连续签到功能
                 * 如果开启,则判断连续签到逻辑
                 */
                if (signCfg.EnableContinuousSign)
                {
                    /**
                     * 判断昨天是否已经满足奖励条件
                     * 如果满足,则连续签到天数置0,重新计数
                     */
                    if (memberSign.SignCount >= signCfg.ContinuousSignDay && signCfg.ContinuousSignRewardScore > 0)
                    {
                        RewardIntegral = signCfg.ContinuousSignRewardScore;
                        //重新计数
                        memberSign.SignCount = 0;
                    }

                    /**
                     * 当前已签到天数
                     */
                    SignCount = memberSign.SignCount;

                    /**
                     * 连续签到天数是否大于0
                     */
                    if (SignCount > 0)
                    {
                        /**
                         * 判断昨天是否签到,如果签到过,则连续签到天数加1
                         * 否则,连续签到天数置1
                         */
                        if (memberSign.lastSignTime.ToString(dateFormat).Equals(DateTime.Now.AddDays(-1).ToString(dateFormat)))
                        {
                            SignCount += 1;
                        }
                        else
                        {
                            SignCount = 1;
                        }
                    }
                    else
                    {
                        SignCount = 1;
                    }

                    /**
                     * 判断连续签到天数是否满足奖励条件
                     * 满足条件后,获取奖励积分,并且连续签到天数置0
                     */
                    if (SignCount >= signCfg.ContinuousSignDay && signCfg.ContinuousSignRewardScore > 0)
                    {
                        RewardIntegral = signCfg.ContinuousSignRewardScore;
                    }
                }
                else
                {
                    SignCount = 0;
                }

                using (TransactionScope scope = new TransactionScope())
                {
                    using (var dal = FactoryDispatcher.UserFactory())
                    {
                        /**
                         * 更新会员签到数据
                         */
                        memberSign.SignCount          = SignCount;
                        memberSign.TotalSignIntegral += (Integral + RewardIntegral);
                        memberSign.lastSignTime       = DateTime.Now;
                        memberSign.TotalSignDays     += 1;
                        if (memberSign.ID > 0)
                        {
                            dal.UpdateMemberSignInfo(memberSign);
                        }
                        else
                        {
                            memberSign.ID = dal.AddMemberSignInfo(memberSign);
                        }

                        /**
                         * 更新签到缓存
                         */
                        RefreshMemberSignCache(userId, memberSign);
                        //将签到获得积分,冲入用户积分账号中
                        if (dal.addUserIntegral(userId, Integral + RewardIntegral) > 0)
                        {
                            /**
                             * 添加签到日志
                             */
                            BeansRecordsModel model2 = new BeansRecordsModel();
                            model2.Amount     = Integral + RewardIntegral;
                            model2.UserId     = userId;
                            model2.LogType    = 1;
                            model2.Income     = 1;
                            model2.Remark     = "签到";
                            model2.OrderId    = "";
                            model2.CreateTime = DateTime.Now;
                            dal.AddBeansRecords(model2);

                            UserSignLogModel signLog = new UserSignLogModel()
                            {
                                UserId          = userId,
                                BelongOneUserId = user.BelongOne,
                                ShopId          = user.ShopId,
                                BelongOneShopId = user.ShopBelongId,
                                AppSystem       = appsystem,
                                Amount          = Integral + RewardIntegral,
                                Reward          = RewardIntegral,
                                UserAddress     = addr,
                                Remark          = "签到" + (RewardIntegral > 0 ? ",连续签到奖励" + RewardIntegral + "积分" : "")
                            };
                            dal.AddUserSignLog(signLog);

                            apiCode = ApiStatusCode.OK;
                        }
                    }
                    scope.Complete();
                    return(Integral + RewardIntegral);
                }
            }
            catch (Exception ex)
            {
                apiCode = ApiStatusCode.请重新签到;
                LogHelper.Log(string.Format("SignIn-->StackTrace:{0},Message:{1},MemberId:{2}", ex.StackTrace, ex.Message, ex, userId));
                return(0);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 更新缓存
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="memberSign">签到数据</param>
        private static void RefreshMemberSignCache(int userId, MemberSignModel memberSign)
        {
            string cacheKey = GetMemberSignCacheKey(userId);

            WebCacheHelper.Insert(cacheKey, memberSign, new System.Web.Caching.CacheDependency(WebCacheHelper.GetDepFile(cacheKey)));
        }