示例#1
0
        /// <summary>
        /// 积分事件触发
        /// </summary>
        /// <param name="websiteOwner">站点所有者</param>
        /// <param name="openId">openId</param>
        /// <param name="value">原始值</param>
        /// <param name="scoreEvent">事件名称</param>
        /// <param name="remark">备注</param>
        /// <param name="msg">提示信息</param>
        /// <param name="addScore">增加积分</param>
        /// <param name="showName">显示名称</param>
        /// <returns></returns>
        public bool EventUpdate(string websiteOwner, string openId, decimal value, string scoreEvent, string remark, out string msg, out int addScore, string showName = "", string serialNumber = "")
        {
            int score = 0;//最终添加的积分

            addScore = 0;
            msg      = "";//返回消息
            BLLApiLog       bllApiLog       = new BLLApiLog();
            BLLScoreDefine  bllScoreDefine  = new BLLScoreDefine();
            ScoreDefineInfo scoreDefineInfo = bllScoreDefine.GetScoreDefineInfoByScoreEvent(scoreEvent, WebsiteOwner);

            if (scoreDefineInfo == null)
            {
                msg = "积分规则不存在,请检查";
                return(false);
            }
            if (scoreDefineInfo.IsHide == 1)
            {
                msg = "积分规则已停用";
                return(false);
            }
            UserInfo userInfo = bllUser.GetUserInfoByOpenId(openId);

            if (userInfo == null && (websiteOwner == "dongwu" || websiteOwner == "dongwudev"))
            {
                userInfo = bllUser.CreateNewUser(websiteOwner, openId, showName);
            }
            if (userInfo == null)
            {
                msg = "openid不存在,请检查";
                return(false);
            }
            List <ScoreDefineInfoExt> scoreDefineEx = bllScoreDefine.GetScoreDefineExList(scoreDefineInfo.ScoreId);

            //优先级: 扩展->基本比例-一般
            if (scoreDefineEx != null && scoreDefineEx.Count > 0)
            {
                DateTime dtNow = DateTime.Now;
                var      item  = scoreDefineEx.FirstOrDefault(p => p.BeginTime <= DateTime.Now && p.EndTime >= DateTime.Now);
                if (item != null)
                {
                    //score = (double)Math.Round(value / (item.RateValue / item.RateScore), 2);
                    score = (int)Math.Ceiling(value / (item.RateValue / item.RateScore));
                }
            }
            if (score == 0)
            {
                if (scoreDefineInfo.BaseRateScore > 0 && scoreDefineInfo.BaseRateValue > 0)//基础比例
                {
                    //score = (double)Math.Round(value / (scoreDefineInfo.BaseRateValue / scoreDefineInfo.BaseRateScore), 2);
                    score = (int)Math.Ceiling(value / (scoreDefineInfo.BaseRateValue / scoreDefineInfo.BaseRateScore));
                }
            }
            if (score == 0)
            {
                score = (int)scoreDefineInfo.Score;
            }

            //if (score == 0)
            //{
            //    msg = "增加积分不能为0";
            //    return false;
            //}
            if (scoreDefineInfo.DayLimit > 0)
            {
                double nTotal = bllUser.GetUserDayScoreSUMEvent(userInfo.UserID, scoreEvent, true);
                if (scoreDefineInfo.DayLimit < nTotal + score)
                {
                    msg = scoreDefineInfo.ScoreEvent + "每日所得积分超限制";
                    return(false);
                }
            }
            if (scoreDefineInfo.TotalLimit > 0)
            {
                double nTotal = bllUser.GetUserDayScoreSUMEvent(userInfo.UserID, scoreEvent, false);
                if (scoreDefineInfo.TotalLimit < nTotal + score)
                {
                    msg = scoreDefineInfo.ScoreEvent + "所得总积分超限制";
                    return(false);
                }
            }

            //积分记录
            UserScoreDetailsInfo scoreModel = new UserScoreDetailsInfo();

            scoreModel.AddNote      = !string.IsNullOrEmpty(remark) ? remark : scoreDefineInfo.Description;
            scoreModel.AddTime      = DateTime.Now;
            scoreModel.Score        = score;
            scoreModel.UserID       = userInfo.UserID;
            scoreModel.OpenId       = userInfo.WXOpenId;
            scoreModel.ScoreType    = scoreDefineInfo.ScoreType;
            scoreModel.WebSiteOwner = WebsiteOwner;
            scoreModel.ScoreEvent   = scoreEvent;
            scoreModel.SerialNumber = serialNumber;
            BLLTransaction tran = new BLLTransaction();

            try
            {
                int historyTotalScore = 0;
                if (score > 0)
                {
                    historyTotalScore = score;
                }
                string sql = string.Format("TotalScore+={0},HistoryTotalScore+={1}", score, historyTotalScore);
                if (!string.IsNullOrEmpty(showName))
                {
                    sql += string.Format(",TrueName='{0}'", showName);
                }
                if (Update(userInfo, sql, string.Format(" AutoId={0}", userInfo.AutoID), tran) == 1 && Add(scoreModel, tran))
                {
                    #region 日志记录
                    if (!bllApiLog.Add(userInfo.WebsiteOwner, Enums.EnumApiModule.ScoreEvent, string.Format("积分事件,事件名称:{0}原始值{1}积分值:{2}", scoreDefineInfo.ScoreEvent, value, score), userInfo.WXOpenId, userInfo.UserID, serialNumber))
                    {
                        msg = "日志记录失败";
                        tran.Rollback();
                        return(false);
                    }

                    #endregion
                    tran.Commit();
                    addScore = score;
                    return(true);
                }
                else
                {
                    msg = "操作失败";
                    tran.Rollback();
                    return(false);
                }
            }
            catch (Exception ex)
            {
                msg = ex.ToString();
                tran.Rollback();
                return(false);
            }
        }