Ejemplo n.º 1
0
        public ExchangePlayCardRelation GetExchangePlayCardRelation(int userId, int appId, out int resultCode)
        {
            bool blackout = false;//是否断签

            resultCode = 200;

            Store storeModel = StoreBLL.SingleModel.GetModelByAId(appId);

            if (storeModel == null || string.IsNullOrEmpty(storeModel.configJson))
            {
                resultCode = 404;//店铺配置信息没有找到
                return(null);
            }
            ExchangePlayCardConfig exchangePlayCardConfig = new ExchangePlayCardConfig();

            storeModel.funJoinModel = JsonConvert.DeserializeObject <StoreConfigModel>(storeModel.configJson);
            if (string.IsNullOrEmpty(storeModel.funJoinModel.ExchangePlayCardConfig))
            {
                resultCode = 403;//签到配置信息没有找到
                return(null);
            }

            exchangePlayCardConfig = JsonConvert.DeserializeObject <ExchangePlayCardConfig>(storeModel.funJoinModel.ExchangePlayCardConfig);
            if (exchangePlayCardConfig.State == 0)
            {
                resultCode = 302;//签到开关关闭
                return(null);
            }


            #region 表示空白从未打卡过
            ExchangePlayCardRelation exchangePlayCardRelation = base.GetModel($"userId={userId} and Aid={appId}");
            if (exchangePlayCardRelation == null)
            {
                exchangePlayCardRelation = new ExchangePlayCardRelation()
                {
                    Aid = appId, UserId = userId, UpdateTime = DateTime.Now
                };
                for (int i = 0; i < 7; i++)
                {
                    exchangePlayCardRelation.listPlayCardLog.Add(new ExchangePlayCardLog()
                    {
                        Aid     = appId,
                        UserId  = userId,
                        AddTime = DateTime.Now.AddMinutes(i),
                        Played  = false,
                        Points  = exchangePlayCardConfig.DayGivePoints
                    });
                }

                return(exchangePlayCardRelation);
            }
            #endregion

            ExchangePlayCardLog exchangePlayCardLog = ExchangePlayCardLogBLL.SingleModel.GetModel($"userId={userId} and Aid={appId}");
            if (exchangePlayCardLog != null)
            {
                //判断是否断签
                double day = CommondHelper.DateDiff(Convert.ToDateTime(exchangePlayCardLog.AddTime.ToString("yyyy-MM-dd")), Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"))).TotalDays;
                if (day > 1)//大于1表示断签了隔了至少一天没有签到
                {
                    blackout = true;
                }
            }



            if (blackout)
            {
                //断签则将连续签到天数归零以及上次赠送积分的连续签到的天数归零

                exchangePlayCardRelation.ConnectDay     = 0;
                exchangePlayCardRelation.LastConnectDay = 0;
                exchangePlayCardRelation.UpdateTime     = DateTime.Now;
                if (!base.Update(exchangePlayCardRelation, "ConnectDay,LastConnectDay,UpdateTime"))
                {
                    resultCode = 500;//说明异常
                }

                for (int i = 0; i < 7; i++)
                {
                    exchangePlayCardRelation.listPlayCardLog.Add(new ExchangePlayCardLog()
                    {
                        Aid     = appId,
                        UserId  = userId,
                        AddTime = DateTime.Now.AddMinutes(i),
                        Played  = false,
                        Points  = exchangePlayCardConfig.DayGivePoints
                    });
                }

                return(exchangePlayCardRelation);
            }

            //没有断签 返回连续签到信息
            int tempDay = exchangePlayCardRelation.ConnectDay;
            if (tempDay > 7)
            {
                tempDay = exchangePlayCardRelation.ConnectDay % 7;
            }
            exchangePlayCardRelation.listPlayCardLog = ExchangePlayCardLogBLL.SingleModel.GetList($"userId={userId} and Aid={appId}", tempDay, 1, "*", "AddTime desc");
            if (tempDay < 7)
            {
                exchangePlayCardRelation.listPlayCardLog = exchangePlayCardRelation.listPlayCardLog.OrderBy(x => x.AddTime).ToList();

                for (int i = 0; i < 7 - tempDay; i++)
                {
                    exchangePlayCardRelation.listPlayCardLog.Add(new ExchangePlayCardLog()
                    {
                        Aid     = appId,
                        UserId  = userId,
                        AddTime = DateTime.Now.AddMinutes(i),
                        Played  = false,
                        Points  = exchangePlayCardConfig.DayGivePoints
                    });
                }
            }
            ExchangePlayCardLog todayPlayCardLog = ExchangePlayCardLogBLL.SingleModel.GetModel($"userId={userId} and Aid={appId} and to_days(AddTime) = to_days(now())");
            //测试用 ExchangePlayCardLog todayPlayCardLog = _exchangePlayCardLogBLL.GetModel($"userId={userId} and Aid={appId} and AddTime>NOW()-INTERVAL 2 MINUTE");//
            if (todayPlayCardLog != null)//2分钟之内
            {
                //今天已经签到
                exchangePlayCardRelation.TodayPlayCard = true;
            }


            return(exchangePlayCardRelation);
        }