Пример #1
0
        /// <summary>
        /// 单点登录
        /// </summary>
        /// <param name="pLanguageLCID">Web平台当前语言(中文:2052,英文:1033。)</param>
        /// <param name="pClientIP">客户端IP地址</param>
        /// <param name="pClientID">登录用户所属客户标识</param>
        /// <param name="pUserID">登录用户标识</param>
        /// <param name="pWebSiteSessionId">Web站点的会话标识</param>
        public int Login(int pLanguageLCID, string pClientIP, string pClientID, string pUserID, string pWebSiteSessionId)
        {
            //TO-DO:登录成功后,准备记录MSTR集成组件所使用的单点登录信息。
            var sqlHelper = new JIT.Utility.DataAccess.DefaultSQLHelper(ConfigurationManager.AppSettings["MstrIntegrationConn"]);
            //1.根据客户获取报表服务器及项目相关信息
            var userInfo = new ReportUserInfo()
            {
                ClientID = pClientID, UserID = pUserID
            };
            MSTRProjectEntity mstrProjectQueryEntity = new MSTRProjectEntity();

            mstrProjectQueryEntity.ClientID = pClientID;
            MSTRProjectBLL mstrProjectBLL = new MSTRProjectBLL(userInfo, sqlHelper);

            MSTRProjectEntity[] mstrProjectEntities = mstrProjectBLL.QueryByEntity(mstrProjectQueryEntity, null);
            if (mstrProjectEntities == null || mstrProjectEntities.Length == 0)
            {
                JIT.Utility.Log.Loggers.Exception(new JIT.Utility.Log.ExceptionLogInfo(new Exception("未找到客户ID为[" + pClientID + "]的MSTR项目信息.")));
                return(-1);

                throw new Exception("未找到客户ID为[" + pClientID + "]的MSTR项目信息.");
            }
            var mstrProjectInfo = mstrProjectEntities[0];
            //2.记录用户会话记录
            MSTRIntegrationUserSessionBLL    mstrIntegrationUserSessionBLL         = new MSTRIntegrationUserSessionBLL(userInfo, sqlHelper);
            MSTRIntegrationUserSessionEntity mstrIntegrationUserSessionQueryEntity = new MSTRIntegrationUserSessionEntity();

            mstrIntegrationUserSessionQueryEntity.UserID    = pUserID;
            mstrIntegrationUserSessionQueryEntity.ClientID  = pClientID;
            mstrIntegrationUserSessionQueryEntity.IP        = pClientIP;
            mstrIntegrationUserSessionQueryEntity.IsChange  = 0;
            mstrIntegrationUserSessionQueryEntity.IsCheckIP = 0;

            mstrIntegrationUserSessionQueryEntity.LCID             = pLanguageLCID;
            mstrIntegrationUserSessionQueryEntity.MSTRIServerName  = mstrProjectInfo.IServerName;
            mstrIntegrationUserSessionQueryEntity.MSTRIServerPort  = mstrProjectInfo.IServerPort;
            mstrIntegrationUserSessionQueryEntity.MSTRProjectName  = mstrProjectInfo.ProjectName;
            mstrIntegrationUserSessionQueryEntity.WebSessionID     = pWebSiteSessionId;
            mstrIntegrationUserSessionQueryEntity.MSTRUserName     = mstrProjectInfo.MSTRUserName;
            mstrIntegrationUserSessionQueryEntity.MSTRUserPassword = mstrProjectInfo.MSTRUserPassword;
            mstrIntegrationUserSessionBLL.Create(mstrIntegrationUserSessionQueryEntity);
            //记录单点登录表中的自增主键
            //HttpContext.Current.Session["MstrSSO_SessionID"] = mstrIntegrationUserSessionQueryEntity.SessionID.Value;
            //HttpContext.Current.Session["MstrSSO_UserID"] = pUserID;
            //HttpContext.Current.Session["MstrSSO_ClientID"] = pClientID;
            //HttpContext.Current.Session["MstrSSO_LCID"] = pLanguageLCID;
            return(mstrIntegrationUserSessionQueryEntity.SessionID.Value);
        }
Пример #2
0
        /// <summary>
        /// 获取Mstr格式的Url
        /// </summary>
        /// <param name="pQueryParameter">提问回答对象</param>
        /// <param name="pDataRigthHierachy">用于处理数据权限的提问回答</param>
        /// <returns>Mstr格式的Url</returns>
        public string GetMstrUrl(PromptAnswerItem[] pQueryParameter, DataRigthHierachy pDataRigthHierachy)
        {
            //if (this._httpSessionState["MstrSSO_SessionID"] == null)
            //    throw new Exception("会话超时,请重新登录。");
            #region Mstr项目、报表等信息
            //项目信息
            MSTRProjectEntity mstrProjectQueryEntity = new MSTRProjectEntity();
            //mstrProjectQueryEntity.ProjectID = reportInfo.ProjectID;
            mstrProjectQueryEntity.ClientID = this._currentUserInfo.ClientID;//一个客户仅允许一个项目
            MSTRProjectBLL      mstrProjectBLL      = new MSTRProjectBLL(this._currentUserInfo, this._sqlHelper);
            MSTRProjectEntity[] mstrProjectEntities = mstrProjectBLL.QueryByEntity(mstrProjectQueryEntity, null);
            if (mstrProjectEntities == null || mstrProjectEntities.Length == 0)
            {
                return(null);

                throw new Exception("未找到客户标识为[" + this._currentUserInfo.ClientID + "]的报表项目。");
            }
            var projectInfo = mstrProjectEntities[0];

            //获取报表信息
            MSTRReportEntity mstrReportQueryEntity = new MSTRReportEntity();
            if (this._mstrReportGuid == null)
            {//用于刷新的报表
                mstrReportQueryEntity.ProjectID  = projectInfo.ProjectID;
                mstrReportQueryEntity.ReportType = 99;
                //mstrReportQueryEntity.ReportName = "KeepSession";
            }
            else
            {
                mstrReportQueryEntity.ProjectID  = projectInfo.ProjectID;
                mstrReportQueryEntity.ReportGUID = this._mstrReportGuid.ToString();
            }
            MSTRReportBLL      mstrReportBLL      = new MSTRReportBLL(this._currentUserInfo, this._sqlHelper);
            MSTRReportEntity[] mstrReportEntities = mstrReportBLL.QueryByEntity(mstrReportQueryEntity, null);
            if (mstrReportEntities == null || mstrReportEntities.Length == 0)
            {
                throw new Exception("未找到标识为[" + this._mstrReportGuid + "]的报表。");
            }
            var reportInfo = mstrReportEntities[0];

            //取出当前报表所有Prompt
            MSTRReportPromptEntity mstrReportPromptQueryEntity = new MSTRReportPromptEntity();
            mstrReportPromptQueryEntity.ReportID = reportInfo.ReportID;
            MSTRReportPromptBLL      mstrReportPromptBLL      = new MSTRReportPromptBLL(this._currentUserInfo, this._sqlHelper);
            MSTRReportPromptEntity[] mstrReportPromptEntities = mstrReportPromptBLL.QueryByEntity(mstrReportPromptQueryEntity, null);
            int mappintCount = (mstrReportPromptEntities == null ? 0 : mstrReportPromptEntities.Length);
            JIT.Utility.Log.Loggers.Debug(new JIT.Utility.Log.DebugLogInfo()
            {
                ClientID = this._currentUserInfo.ClientID, UserID = this._currentUserInfo.UserID, Message = string.Format("报表[{0}]所关联的提问数量为[{1}]", reportInfo.ReportName, mappintCount)
            });

            #endregion

            #region 依次生成Mstr所需格式的PromptAnswer
            string mstrPromptAnswerUrl = string.Empty;
            if (mstrReportPromptEntities != null && mstrReportPromptEntities.Length > 0)
            {
                //取出每个Prompt的详情
                int[] promptIds = new int[mstrReportPromptEntities.Length];
                for (int i = 0; i < mstrReportPromptEntities.Length; i++)
                {
                    promptIds[i] = mstrReportPromptEntities[i].PromptID.Value;
                }
                IWhereCondition[] whereCondition = new IWhereCondition[1];
                JIT.Utility.DataAccess.Query.InCondition <int> promptIDsCondition = new JIT.Utility.DataAccess.Query.InCondition <int>();
                promptIDsCondition.FieldName = "PromptID";
                promptIDsCondition.Values    = promptIds;
                whereCondition[0]            = promptIDsCondition;
                MSTRPromptBLL      mstrPromptBLL      = new MSTRPromptBLL(this._currentUserInfo, this._sqlHelper);
                MSTRPromptEntity[] mstrPromptEntities = mstrPromptBLL.Query(whereCondition, null);

                //依次拼接Prompt
                //记录各个类型的提问答案
                Dictionary <PromptAnswerType, string> dictPromptAnswers = new Dictionary <PromptAnswerType, string>();
                dictPromptAnswers.Add(PromptAnswerType.ElementsPromptAnswer, string.Empty);
                dictPromptAnswers.Add(PromptAnswerType.ObjectsPromptAnswer, string.Empty);
                dictPromptAnswers.Add(PromptAnswerType.ValuePromptAnswer, string.Empty);

                //合并提问回答
                List <PromptAnswerItem> lstAnswers = new List <PromptAnswerItem>();
                lstAnswers.AddRange(pQueryParameter);
                if (pDataRigthHierachy != null)
                {
                    lstAnswers.AddRange(pDataRigthHierachy.PromptAnswerItems);
                }
                //处理空回答
                foreach (var promptItem in mstrPromptEntities)
                {
                    var answeredItem = lstAnswers.ToArray().Where(answer => answer.PromptCode == promptItem.PromptCode).ToArray();
                    if (answeredItem.Length == 0)
                    {//未回答项,准备空回答
                        PromptAnswerItem emptyPromptAnswerItem = new PromptAnswerItem();
                        emptyPromptAnswerItem.PromptCode     = promptItem.PromptCode;
                        emptyPromptAnswerItem.PromptType     = (PromptAnswerType)promptItem.PromptType;
                        emptyPromptAnswerItem.QueryCondition = new string[0] {
                        };
                        lstAnswers.Add(emptyPromptAnswerItem);
                    }
                }

                //List<int> lstAnsweredPromptId=new List<int>();//已提供回答的提问项标识
                foreach (var answerItem in lstAnswers)
                {
                    //根据代码查找Prompt
                    var promptItems = mstrPromptEntities.Where(item => item.PromptCode == answerItem.PromptCode).ToArray();
                    if (promptItems == null || promptItems.Length == 0)
                    {
                        throw new Exception("配置表中未找到代码为[" + answerItem.PromptCode + "]的报表提问。");
                    }
                    if (promptItems.Length > 1)
                    {
                        throw new Exception("配置表中代码为[" + answerItem.PromptCode + "]的报表提问出现多次(" + promptItems.Length.ToString() + "次)。");
                    }

                    var promptItem = promptItems[0];
                    answerItem.PromptType = (PromptAnswerType)promptItem.PromptType;
                    //拼接Mstr格式的URL
                    string promptAnswerString = GetPromptAnswerString(answerItem.PromptType, promptItem.PromptGUID, answerItem.QueryCondition);
                    switch (answerItem.PromptType)
                    {
                    case PromptAnswerType.ElementsPromptAnswer:
                        dictPromptAnswers[PromptAnswerType.ElementsPromptAnswer] += promptItem.PromptGUID + ";" + promptAnswerString + ",";
                        break;

                    case PromptAnswerType.ValuePromptAnswer:
                        dictPromptAnswers[PromptAnswerType.ValuePromptAnswer] += promptAnswerString + "^";
                        break;

                    case PromptAnswerType.ObjectsPromptAnswer:
                        dictPromptAnswers[PromptAnswerType.ObjectsPromptAnswer] += promptAnswerString + "^";
                        break;

                    default:
                        throw new Exception("未知的提问类型");
                    }
                }

                if (dictPromptAnswers[PromptAnswerType.ElementsPromptAnswer] != string.Empty)
                {
                    if (dictPromptAnswers[PromptAnswerType.ElementsPromptAnswer].EndsWith(","))
                    {
                        dictPromptAnswers[PromptAnswerType.ElementsPromptAnswer] = dictPromptAnswers[PromptAnswerType.ElementsPromptAnswer].Substring(0, dictPromptAnswers[PromptAnswerType.ElementsPromptAnswer].Length - 1);
                    }
                    mstrPromptAnswerUrl += "&elementsPromptAnswers=" + dictPromptAnswers[PromptAnswerType.ElementsPromptAnswer];
                }
                if (dictPromptAnswers[PromptAnswerType.ObjectsPromptAnswer] != string.Empty)
                {
                    if (dictPromptAnswers[PromptAnswerType.ObjectsPromptAnswer].EndsWith("^"))
                    {
                        dictPromptAnswers[PromptAnswerType.ObjectsPromptAnswer] = dictPromptAnswers[PromptAnswerType.ObjectsPromptAnswer].Substring(0, dictPromptAnswers[PromptAnswerType.ObjectsPromptAnswer].Length - 1);
                    }
                    mstrPromptAnswerUrl += "&objectsPromptAnswers=" + dictPromptAnswers[PromptAnswerType.ObjectsPromptAnswer];
                }
                if (dictPromptAnswers[PromptAnswerType.ValuePromptAnswer] != string.Empty)
                {
                    if (dictPromptAnswers[PromptAnswerType.ValuePromptAnswer].EndsWith("^"))
                    {
                        dictPromptAnswers[PromptAnswerType.ValuePromptAnswer] = dictPromptAnswers[PromptAnswerType.ValuePromptAnswer].Substring(0, dictPromptAnswers[PromptAnswerType.ValuePromptAnswer].Length - 1);
                    }
                    mstrPromptAnswerUrl += "&valuePromptAnswers=" + dictPromptAnswers[PromptAnswerType.ValuePromptAnswer];
                }
            }
            #endregion 依次生成Mstr所需格式的PromptAnswer
            string reportUrl;
            switch ((ReportType)reportInfo.ReportType.Value)
            {
            case ReportType.Report:
                reportUrl = string.Format("{0}&port={1}&evt=4001&src=mstrWeb.4001&reportID={2}&ipclientid={4}&ipsessionid={5}&reportViewMode={6}{3}", projectInfo.WebServerBaseUrl, projectInfo.IServerPort, reportInfo.ReportGUID, mstrPromptAnswerUrl, this._currentUserInfo.ClientID, this._mstrIntegrationSessionID, reportInfo.ReportViewMode);
                //reportUrl = string.Format("{0}&port={1}&evt=4001&src=mstrWeb.4001&reportID={2}&reportViewMode={6}", projectInfo.WebServerBaseUrl, projectInfo.IServerPort, reportInfo.ReportGUID, mstrPromptAnswerUrl, this._currentUserInfo.ClientID, (int)this._httpSessionState["MstrSSO_SessionID"], reportInfo.ReportViewMode);
                break;

            case ReportType.Document:
                reportUrl = string.Format("{0}&port={1}&evt=2048001&src=mstrWeb.2048001&documentID={2}&ipclientid={4}&ipsessionid={5}&reportViewMode={6}{3}", projectInfo.WebServerBaseUrl, projectInfo.IServerPort, reportInfo.ReportGUID, mstrPromptAnswerUrl, this._currentUserInfo.ClientID, this._mstrIntegrationSessionID, reportInfo.ReportViewMode);
                //reportUrl = string.Format("{0}&port={1}&evt=2048001&src=mstrWeb.2048001&documentID={2}&reportViewMode={6}", projectInfo.WebServerBaseUrl, projectInfo.IServerPort, reportInfo.ReportGUID, mstrPromptAnswerUrl, this._currentUserInfo.ClientID, (int)this._httpSessionState["MstrSSO_SessionID"], reportInfo.ReportViewMode);
                break;

            case ReportType.KeepSesson:
                reportUrl = string.Format("{0}&port={1}&evt=4001&src=mstrWeb.4001&reportID={2}&ipclientid={4}&ipsessionid={5}&reportViewMode={6}{3}", projectInfo.WebServerBaseUrl, projectInfo.IServerPort, reportInfo.ReportGUID, mstrPromptAnswerUrl, this._currentUserInfo.ClientID, this._mstrIntegrationSessionID, reportInfo.ReportViewMode);
                break;

            default:
                throw new Exception("无效的报表类型.");
                break;
            }
            return(reportUrl);
        }