Пример #1
0
        public object[] CheckManagerRight(object[] objParam)
        {
            string sDB = objParam[0].ToString();
            string sUserId = objParam[1].ToString();
            string password = (string)GetClientInfo(ClientInfoType.Password);

            if (ServerConfig.LoginObjectEnabled)//ILogin
            {
                if (ServerConfig.LoginObject.GetMenuRight(sUserId, password))
                {
                    return new object[] { 0, "0" };
                }
                else
                {
                    return new object[] { 0, "1" };
                }
            }
            else
            {
                ClientType ct = ClientType.ctMsSql;
                IDbConnection mySqlConnection = AllocateConnection(sDB, ref ct, true);
                try
                {
                    string sRet = "";
                    //为了区分不同的数据库 by Rei
                    InfoCommand myInfoCommand = new InfoCommand(ClientInfo);
                    myInfoCommand.CommandText = "SELECT USERID,AUTOLOGIN FROM USERS WHERE USERID = '" +
                      sUserId + "'";

                    myInfoCommand.Connection = mySqlConnection;
                    IDataReader aReader = myInfoCommand.ExecuteReader();
                    if (!aReader.Read())  // userid not found
                    {
                        sRet = "2";
                    }
                    else
                    {
                        string autologin = aReader.GetValue(1).ToString();
                        if (string.Compare(autologin, "s", true) == 0)//IgnoreCase
                        {
                            sRet = "0";
                        }
                        else
                        {
                            sRet = "1";
                        }
                    }
                    myInfoCommand.Cancel();
                    aReader.Close();
                    return new object[] { 0, sRet };
                }
                finally
                {
                    ReleaseConnection(sDB, mySqlConnection, true);
                }
            }
        }
Пример #2
0
        public object[] CheckUser(object[] objParam)
        {
            string[] ss = objParam[0].ToString().Split(":".ToCharArray());
            string username = "";
            string useridindb = "";
            try
            {
                string sUserId = ss[0];
                string sUserPwd = ss[1];
                string sDB = ss[2];
                string relogin = ss[3];

                //matida 2010/1/29 add
                String SharePoint = String.Empty;
                if (ss.Length == 5)
                    SharePoint = ss[4].ToLower();
                if (ss.Length == 7)
                    SharePoint = ss[6].ToLower();

                object computername = GetClientInfo(ClientInfoType.ComputerName);
                string strcomputer = computername != null ? computername.ToString() : string.Empty;

                if (!SrvGL.AllowLoginInOtherPC && relogin == "0" && SrvGL.isUserLogined(sUserId.ToLower()))
                {
                    UserInfo info = SrvGL.GetUsersInfo(sUserId.ToLower());
                    if (!info.Contains(strcomputer))
                    {
                        return new object[] { 0, LoginResult.RequestReLogin, username, useridindb };
                    }
                }
                if (ServerConfig.LoginObjectEnabled)//ILogin
                {
                    if (!ServerConfig.LoginObject.CheckUser(sUserId, sUserPwd))
                    {
                        return new object[] { 0, LoginResult.PasswordError, username, useridindb };
                    }
                    username = ServerConfig.LoginObject.GetUserInfo(sUserId, sUserPwd, UserInfoType.UserName).ToString();
                    useridindb = sUserId;
                    SrvGL.LogUser(sUserId.ToLower(), username, strcomputer, 1);
                }
                else
                {

                    //rich modified, 根据andy的最高指示,systemtable和eepalias要分离;(如果systemtable未设置,则使用前端传过来的eepalias)
                    ClientType ct = ClientType.ctMsSql;
                    IDbConnection mySqlConnection = AllocateConnection(sDB, ref ct, true);
                    try
                    {

                        //为了区分不同的数据库 by Rei
                        InfoCommand myInfoCommand = new InfoCommand(ClientInfo);

                        if (ServerConfig.UserDefination)
                        {
                            myInfoCommand.CommandText = string.Format("Select {0},{1},{2},'N','S' From {3} Where {0} = '{4}'", ServerConfig.UserID
                                , ServerConfig.Password, ServerConfig.UserName, ServerConfig.UserTable, sUserId);
                        }
                        else
                        {
                            myInfoCommand.CommandText = "SELECT USERID,PWD,USERNAME,MSAD,AUTOLOGIN FROM USERS WHERE USERID = '" +
                              sUserId + "'";
                        }

                        myInfoCommand.Connection = mySqlConnection;
                        IDataReader aReader = myInfoCommand.ExecuteReader(CommandBehavior.CloseConnection);

                        if (!aReader.Read())  // userid not found
                        {
                            myInfoCommand.Cancel();
                            aReader.Close();
                            return new object[] { 0, LoginResult.UserNotFound, username, useridindb };
                        }
                        if (string.Compare(aReader.GetValue(4).ToString(), "x", true) == 0)
                        {
                            myInfoCommand.Cancel();
                            aReader.Close();
                            return new object[] { 0, LoginResult.Disabled, username, useridindb };
                        }
                        object sPwd = aReader.GetValue(1);
                        if (ct == ClientType.ctOleDB && sPwd.ToString() == " ")
                            sPwd = "";
                        username = aReader.GetValue(2).ToString();
                        useridindb = aReader.GetValue(0).ToString();    //get userid in database to avoid case problem
                        string msad = aReader.GetValue(3).ToString();
                        string domainname = ss.Length == 6 ? ss[4] : string.Empty;
                        string domaincheck = ss.Length == 6 ? ss[5] : string.Empty;
                        myInfoCommand.Cancel();
                        aReader.Close();

                        if (domainname.Length == 0)
                        {
                            if (string.Compare(msad, "Y", true) == 0)
                            {
                                ADClass.ADPath = "LDAP://" + ServerConfig.DomainPath;
                                ADClass.ADUser = ServerConfig.DomainUser;
                                ADClass.ADPassword = ServerConfig.DomainPassword;

                                if (!ADClass.IsUserValid(sUserId, sUserPwd))
                                {
                                    return new object[] { 0, LoginResult.PasswordError, username, useridindb };
                                }
                            }
                            else
                            {
                                if (sUserPwd.Length > 10)
                                {
                                    return new object[] { 0, LoginResult.PasswordError, username, useridindb };
                                }
                                string enPwd = sUserPwd;
                                if (sUserPwd.Length > 0)
                                {
                                    char[] p = new char[] { };
                                    bool q = Encrypt.EncryptPassword(sUserId, sUserPwd, 10, ref p, false);
                                    enPwd = new string(p);
                                }

                                if (!Comparer.Equals(enPwd, sPwd.ToString().Trim()) && SharePoint != "sharepoint")  // pwd not correct //matida 2010/1/29 add
                                {
                                    return new object[] { 0, LoginResult.PasswordError, username, useridindb };
                                }
                            }
                        }
                        else
                        {
                            if (string.Compare(domainname, ServerConfig.DomainPath, true) != 0 || (string.Compare(msad, "Y", true) != 0) || CliUtils.DomainCheckSum(domainname) != domaincheck)
                            {
                                return new object[] { 0, LoginResult.PasswordError, username, useridindb };
                            }
                        }
                        SrvGL.LogUser(sUserId.ToLower(), username, strcomputer, 1);
                    }
                    finally
                    {
                        ReleaseConnection(sDB, mySqlConnection, true);
                    }
                }
            }
            catch (Exception e)
            {
                return new object[] { 1, e.Message };
            }
            return new object[] { 0, LoginResult.Success, username, useridindb };
        }
Пример #3
0
        public object AutoSeqMenuID(object[] objParam)
        {
            ClientType ct = ClientType.ctMsSql;
            IDbConnection nwindConn = AllocateConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), ref ct, true);
            try
            {
                string strSql = "";

                //为了区分不同的数据库 by Rei
                InfoCommand cmd = new InfoCommand(ClientInfo);
                if (nwindConn is SqlConnection)
                {
                    strSql = "select max(convert(int,MENUID)) from MENUTABLE where isnumeric(MENUID)=1";
                }
                else if (nwindConn is OracleConnection)
                {
                    strSql = "select max(to_number(MENUID)) from MENUTABLE";
                }
                else if (nwindConn is OdbcConnection)
                {
                    strSql = "select max(MENUID) from MENUTABLE";
                }
                else if (nwindConn is OleDbConnection)
                {
                    strSql = "select max(convert(int,MENUID)) from MENUTABLE";
                }
                else if (nwindConn.GetType().Name == "MySqlConnection")
                {
                    strSql = "select max(cast(MENUID as signed)) from MENUTABLE";
                }
                else if (nwindConn.GetType().Name == "IfxConnection")
                {
                    strSql = "select max(MENUID) from MENUTABLE";
                }

                cmd.Connection = nwindConn;
                cmd.CommandText = strSql;
                IDataReader dr = cmd.ExecuteReader();
                dr.Read();
                string count = dr[0].ToString();
                cmd.Cancel();
                dr.Close();
                int i = Convert.ToInt32(count) + 1;

                return new object[] { 0, i };
            }
            finally
            {
                ReleaseConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), nwindConn, true);
            }
        }
Пример #4
0
        public object[] PackageRollback(object[] objParam)
        {
            string projectname = ((string)objParam[0]);
            string filename = ((string)objParam[1]);
            string dt = ((string)objParam[2]);
            PackageType ptype = ((PackageType)objParam[3]);
            string packagetype = "";
            switch (ptype)
            {
                case PackageType.Client: packagetype = "C"; break;
                case PackageType.Server: packagetype = "S"; break;
                case PackageType.WebClient: packagetype = "W"; break;
            }
            ClientType ct = ClientType.ctMsSql;
            //IDbConnection nwindConn = AllocateConnection(GetSystemDBName(), ref ct, false);  //menuchecklog用sysDB里的
            IDbConnection nwindConn = AllocateConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), ref ct, true);  //取登陆后的DBAlias ——by Rei
            try
            {
                string strsql = "";
                if (nwindConn is SqlConnection)
                    strsql = "DELETE FROM MENUCHECKLOG WHERE ITEMTYPE ='" + projectname + "' AND [FILENAME] ='" + filename
                        + "' AND FILETYPE='" + packagetype + "' AND PACKAGEDATE >'" + dt + "'";
                else if (nwindConn is OdbcConnection)
                    strsql = "DELETE FROM MENUCHECKLOG WHERE ITEMTYPE ='" + projectname + "' AND FILENAME ='" + filename
                        + "' AND FILETYPE='" + packagetype + "' AND PACKAGEDATE > to_date('" + String.Format("{0:yyyyMMddHHmmss}", Convert.ToDateTime(dt)) + "', '%Y%m%d%H%M%S')";
                else if (nwindConn is OracleConnection)
                    strsql = "DELETE FROM MENUCHECKLOG WHERE ITEMTYPE ='" + projectname + "' AND FILENAME ='" + filename
                        + "' AND FILETYPE='" + packagetype + "' AND PACKAGEDATE > to_date('" + dt + "', 'yyyy-mm-dd hh24:mi:ss')";
                else if (nwindConn is OleDbConnection)
                    strsql = "DELETE FROM MENUCHECKLOG WHERE ITEMTYPE ='" + projectname + "' AND FILENAME ='" + filename
                        + "' AND FILETYPE='" + packagetype + "' AND PACKAGEDATE >'" + dt + "'";
                else if (nwindConn.GetType().Name == "MySqlConnection")
                    strsql = "DELETE FROM MENUCHECKLOG WHERE ITEMTYPE ='" + projectname + "' AND FILENAME ='" + filename
                        + "' AND FILETYPE='" + packagetype + "' AND PACKAGEDATE > '" + dt + "'";
                else if (nwindConn.GetType().Name == "IfxConnection")
                    strsql = "DELETE FROM MENUCHECKLOG WHERE ITEMTYPE ='" + projectname + "' AND FILENAME ='" + filename
                        + "' AND FILETYPE='" + packagetype + "' AND PACKAGEDATE > to_date('" + String.Format("{0:yyyyMMddHHmmss}", Convert.ToDateTime(dt)) + "', '%Y%m%d%H%M%S')";

                InfoCommand cmd = new InfoCommand(ClientInfo);
                cmd.Connection = nwindConn;
                cmd.CommandText = strsql;
                cmd.ExecuteNonQuery();

                string strBlob = "";
                if (nwindConn is SqlConnection)
                    strBlob = "SELECT FILECONTENT, FILEDATE FROM MENUCHECKLOG WHERE [FILENAME] = '" + filename + "' AND PACKAGEDATE = '" + dt
                            + "' AND ITEMTYPE ='" + projectname + "' AND FILETYPE='" + packagetype + "'";
                else if (nwindConn is OdbcConnection)
                    strBlob = "SELECT FILECONTENT, FILEDATE FROM MENUCHECKLOG WHERE FILENAME = '" + filename + "' AND PACKAGEDATE = to_date('" + String.Format("{0:yyyyMMddHHmmss}", Convert.ToDateTime(dt)) + "', '%Y%m%d%H%M%S') "
                            + " AND ITEMTYPE ='" + projectname + "' AND FILETYPE='" + packagetype + "'";
                else if (nwindConn is OracleConnection)
                    strBlob = "SELECT FILECONTENT, FILEDATE FROM MENUCHECKLOG WHERE FILENAME = '" + filename + "' AND PACKAGEDATE = to_date('" + dt + "', 'yyyy-mm-dd hh24:mi:ss')"
                            + " AND ITEMTYPE ='" + projectname + "' AND FILETYPE='" + packagetype + "'";
                else if (nwindConn is OleDbConnection)
                    strBlob = "SELECT FILECONTENT, FILEDATE FROM MENUCHECKLOG WHERE FILENAME = '" + filename + "' AND PACKAGEDATE = '" + dt
                            + "' AND ITEMTYPE ='" + projectname + "' AND FILETYPE='" + packagetype + "'";
                else if (nwindConn.GetType().Name == "MySqlConnection")
                    strBlob = "SELECT FILECONTENT, FILEDATE FROM MENUCHECKLOG WHERE FILENAME = '" + filename + "' AND PACKAGEDATE = '" + dt + "'"
                            + " AND ITEMTYPE ='" + projectname + "' AND FILETYPE='" + packagetype + "'";
                else if (nwindConn.GetType().Name == "IfxConnection")
                    strBlob = "SELECT FILECONTENT, FILEDATE FROM MENUCHECKLOG WHERE FILENAME = '" + filename + "' AND PACKAGEDATE = to_date('" + String.Format("{0:yyyyMMddHHmmss}", Convert.ToDateTime(dt)) + "', '%Y%m%d%H%M%S') "
                            + " AND ITEMTYPE ='" + projectname + "' AND FILETYPE='" + packagetype + "'";
                cmd.CommandText = strBlob;

                IDataReader idr = cmd.ExecuteReader();
                idr.Read();

                try
                {
                    byte[] blob = new byte[idr.GetBytes(0, 0, null, 0, int.MaxValue)];
                    idr.GetBytes(0, 0, blob, 0, blob.Length);
                    DateTime dtfile = new DateTime();
                    try
                    {
                        dtfile = (DateTime)idr.GetValue(1);                   //找到记录
                    }
                    catch
                    {
                        dtfile = DateTime.MinValue;
                    }
                    cmd.Cancel();
                    idr.Close();
                    PackageService ps = new PackageService();
                    ps.Upload(filename, projectname, ptype, blob, dtfile);
                    return new object[] { 0, 0 };
                }
                catch (Exception e)
                {
                    return new object[] { 0, 1, e.Message };
                }
            }
            finally
            {
                ReleaseConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), nwindConn, true);
            }
        }
Пример #5
0
        //FL use Cancel
        public object GetUserRole(object[] objParam)
        {
            ClientType ct = ClientType.ctNone;
            IDbConnection nwindConn = AllocateConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), ref ct, true);
            try
            {
                string user = (string)GetClientInfo(ClientInfoType.LoginUser);
                string orgKind = (string)GetClientInfo(ClientInfoType.OrgKind);
                StringBuilder role = new StringBuilder();
                StringBuilder orgRole = new StringBuilder();
                StringBuilder orgShare = new StringBuilder();

                StringBuilder groupList = new StringBuilder();
                InfoCommand cmd = new InfoCommand(ClientInfo);
                cmd.Connection = nwindConn;
                cmd.CommandText = String.Format("SELECT GROUPID FROM GROUPS WHERE GROUPID IN (SELECT GROUPID FROM USERGROUPS WHERE USERID='{0}') AND ISROLE='Y'"
                                    , user);
                using (IDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        if (role.Length > 0)
                        {
                            role.Append(';');
                            groupList.Append(',');
                        }
                        role.Append((string)reader["GROUPID"]);
                        groupList.Append(string.Format("'{0}'", reader["GROUPID"]));
                    }
                    cmd.Cancel();
                    reader.Close();
                }
                if (role.Length > 0)
                {
                    orgRole.Append(role);
                    cmd = new InfoCommand(ClientInfo);
                    cmd.Connection = nwindConn;
                    cmd.CommandText = string.Format("Select ORG_NO From SYS_ORG Where ORG_MAN IN({0}) and ORG_KIND='{1}'", groupList, orgKind);
                    StringBuilder orglist = new StringBuilder();
                    using (IDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            if (orglist.Length > 0)
                            {
                                orglist.Append(',');
                            }
                            orglist.Append(string.Format("'{0}'", reader["ORG_NO"]));
                        }
                        cmd.Cancel();
                        reader.Close();
                    }
                    if (orglist.Length > 0)//找到Org_No
                    {
                        StringBuilder orgParentlist = new StringBuilder();
                        orgParentlist.Append(orglist);
                        while (true)//递归找到所有的子org
                        {
                            cmd = new InfoCommand(ClientInfo);
                            cmd.Connection = nwindConn;
                            cmd.CommandText = string.Format("Select ORG_NO,ORG_MAN From SYS_ORG Where UPPER_ORG IN ({0})", orgParentlist);
                            using (IDataReader reader = cmd.ExecuteReader())
                            {
                                orgParentlist = new StringBuilder();
                                while (reader.Read())
                                {
                                    orglist.Append(',');
                                    orglist.Append(string.Format("'{0}'", reader["ORG_NO"]));
                                    if (orgParentlist.Length > 0)
                                    {
                                        orgParentlist.Append(',');
                                    }
                                    orgParentlist.Append(string.Format("'{0}'", reader["ORG_NO"]));
                                    orgRole.Append(';');
                                    orgRole.Append((string)reader["ORG_MAN"]);
                                }
                                cmd.Cancel();
                                reader.Close();
                                if (orgParentlist.Length == 0)//找到底了
                                {
                                    break;
                                }
                            }
                        }
                        cmd = new InfoCommand(ClientInfo);
                        cmd.Connection = nwindConn;
                        cmd.CommandText = string.Format("Select ROLE_ID From SYS_ORGROLES WHERE ORG_NO IN ({0})", orglist);
                        using (IDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                orgRole.Append(';');
                                orgRole.Append((string)reader["ROLE_ID"]);
                            }
                            cmd.Cancel();
                            reader.Close();
                        }
                        orgShare.Append(orgRole);
                    }
                    else
                    {
                        orgShare.Append(role);
                        cmd = new InfoCommand(ClientInfo);
                        cmd.Connection = nwindConn;
                        cmd.CommandText = string.Format("Select ROLE_ID From SYS_ORGROLES WHERE ORG_NO IN (Select ORG_NO From SYS_ORGROLES Where ROLE_ID IN ({0}))", groupList);
                        using (IDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                orgShare.Append(';');
                                orgShare.Append((string)reader["ROLE_ID"]);
                            }
                            cmd.Cancel();
                            reader.Close();
                        }
                    }
                }
                return new object[] { 0, role.ToString(), orgRole.ToString(), orgShare.ToString() };
            }
            finally
            {
                ReleaseConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), nwindConn, true);
            }
        }
Пример #6
0
        public object GetUserGroup(object[] objParam)
        {
            string userid = objParam[0].ToString();
            string groupid = "";
            string groupname = string.Empty;
            ClientType ct = ClientType.ctMsSql;
            IDbConnection nwindConn = AllocateConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), ref ct, true);
            try
            {
                string strSql = "select USERGROUPS.USERID,USERGROUPS.GROUPID,GROUPS.GROUPNAME FROM USERGROUPS LEFT JOIN GROUPS ON USERGROUPS.GROUPID=GROUPS.GROUPID where USERID ='" + userid + "'";

                //为了区分不同的数据库 by Rei
                InfoCommand cmd = new InfoCommand(ClientInfo);

                cmd.CommandText = strSql;
                cmd.Connection = nwindConn;
                IDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    groupid += dr["GROUPID"].ToString() + ";";
                    groupname += dr["GROUPNAME"].ToString() + ";";
                }
                if (groupid != "")
                {
                    groupid = groupid.Substring(0, groupid.LastIndexOf(';'));
                    groupname = groupname.Substring(0, groupname.LastIndexOf(';'));
                }
                cmd.Cancel();
                dr.Close();

                return new object[] { 0, groupid, groupname };
            }
            finally
            {
                ReleaseConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), nwindConn, true);
            }
        }
Пример #7
0
        public object GetRoles(object[] parames)
        {
            ClientType ct = ClientType.ctMsSql;
            IDbConnection nwindConn = AllocateConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), ref ct, true);
            try
            {
                List<string> list = new List<string>();
                String sql = "";
                String connectMark = "+";
                if (nwindConn is SqlConnection)
                    connectMark = "+";
                else if (nwindConn is OdbcConnection)
                    connectMark = "||";
                else if (nwindConn is OracleConnection)
                    connectMark = "||";
                else if (nwindConn is OleDbConnection)
                    connectMark = "+";
                else if (nwindConn.GetType().Name == "MySqlConnection")
                    connectMark = "||";
                else if (nwindConn.GetType().Name == "IfxConnection")
                    connectMark = "||";

                if (nwindConn.GetType().Name == "MySqlConnection")
                    sql = "select CONCAT(GROUPID,' ; ',GROUPNAME) from GROUPS where ISROLE='Y'";
                else
                    sql = "select GROUPID " + connectMark + " ' ; ' " + connectMark + " GROUPNAME from GROUPS where ISROLE='Y'";

                InfoCommand command = new InfoCommand(ClientInfo);
                command.CommandText = sql;
                command.Connection = nwindConn;

                IDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);

                while (reader.Read())
                {
                    list.Add(reader[0].ToString());
                }
                command.Cancel();
                reader.Close();
                return new object[] { 0, list.ToArray() };
            }
            finally
            {
                ReleaseConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), nwindConn, false);
            }
        }
Пример #8
0
        public object GetParam(object[] objParam)
        {
            // byte[] buffer = new byte[24];

            ClientType ct = ClientType.ctMsSql;
            IDbConnection nwindConn = AllocateConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), ref ct, true);
            try
            {
                string strCaption = (string)objParam[0];
                string strItemType = (string)objParam[1];
                string captionlanguage = (string)objParam[2];
                string strSql = "select * from MENUTABLE where MENUID = '" + strCaption + "' and ITEMTYPE = '" + strItemType + "'";

                //为了区分不同的数据库 by Rei
                InfoCommand cmd = new InfoCommand(ClientInfo);

                cmd.CommandText = strSql;
                cmd.Connection = nwindConn;
                ArrayList lst = new ArrayList();
                IDataReader dr = cmd.ExecuteReader();

                dr.Read();
                lst.Add(dr["MENUID"].ToString());
                lst.Add(dr["CAPTION" + captionlanguage].ToString());
                lst.Add(dr["PARENT"].ToString());
                lst.Add(dr["MODULETYPE"].ToString());
                lst.Add(dr["IMAGEURL"].ToString());
                lst.Add(dr["PACKAGE"].ToString());
                lst.Add(dr["ITEMPARAM"].ToString());
                lst.Add(dr["FORM"].ToString());
                lst.Add(dr["ITEMTYPE"].ToString());
                lst.Add(dr["SEQ_NO"].ToString());
                cmd.Cancel();
                dr.Close();

                string strBlob = "";
                //为了区分不同的数据库 by Rei
                if (nwindConn is SqlConnection)
                    strBlob = "select [IMAGE] from MENUTABLE where MENUID = '" + strCaption + "' and ITEMTYPE = '" + strItemType + "'";
                else if (nwindConn is OracleConnection)
                    strBlob = "select IMAGE from MENUTABLE where MENUID = '" + strCaption + "' and ITEMTYPE = '" + strItemType + "'";
                else if (nwindConn is OdbcConnection)
                    strBlob = "select IMAGE from MENUTABLE WHERE MENUID = '" + strCaption + "' and ITEMTYPE = '" + strItemType + "'";
                else if (nwindConn is OleDbConnection)
                    strBlob = "select IMAGE from MENUTABLE WHERE MENUID = '" + strCaption + "' and ITEMTYPE = '" + strItemType + "'";
                else if (nwindConn.GetType().Name == "MySqlConnection")
                    strBlob = "select IMAGE from MENUTABLE WHERE MENUID = '" + strCaption + "' and ITEMTYPE = '" + strItemType + "'";
                else if (nwindConn.GetType().Name == "IfxConnection")
                    strBlob = "select IMAGE from MENUTABLE WHERE MENUID = '" + strCaption + "' and ITEMTYPE = '" + strItemType + "'";

                InfoCommand cmd1 = new InfoCommand(ClientInfo);
                cmd1.Connection = nwindConn;
                cmd1.CommandText = strBlob;
                IDataReader idr = cmd1.ExecuteReader();
                idr.Read();

                try
                {
                    byte[] blob = new byte[idr.GetBytes(0, 0, null, 0, int.MaxValue)];
                    idr.GetBytes(0, 0, blob, 0, blob.Length);
                    cmd1.Cancel();
                    idr.Close();
                    return new object[] { 0, lst, blob };
                }
                catch
                {
                    cmd1.Cancel();
                    idr.Close();
                    return new object[] { 0, lst, new byte[1] };
                }
            }
            finally
            {
                ReleaseConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), nwindConn, true);
            }

            //nwindConn.Close();

            //return new object[] { 0, lst, blob};
        }
Пример #9
0
        public object[] FLOvertimeList(object[] objParam)
        {
            ClientType ct = ClientType.ctMsSql;
            IDbConnection nwindConn = AllocateConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), ref ct, true);
            try
            {
                //获取本人的Roles
                List<string> lstRoles = new List<string>();
                string currentUser = objParam[0].ToString();
                string sqlCurRoles = "select GROUPID from USERGROUPS where " + (string.IsNullOrEmpty(currentUser) ? "" : "USERID = '" + currentUser + "' and ") + "GROUPID in (select GROUPID from GROUPS where ISROLE = 'Y')";
                InfoCommand cmdCurRoles = new InfoCommand(ClientInfo);
                cmdCurRoles.Connection = nwindConn;
                cmdCurRoles.CommandText = sqlCurRoles;
                IDataReader drCurRoles = cmdCurRoles.ExecuteReader();
                while (drCurRoles.Read())
                {
                    lstRoles.Add(drCurRoles["GROUPID"].ToString());
                }
                cmdCurRoles.Cancel();
                drCurRoles.Close();

                List<string> lstOrgs = new List<string>();

                int level = Convert.ToInt16(objParam[1]);
                for (int i = 0; i < level; i++)
                {
                    string orgMans = "";
                    foreach (string man in lstRoles)
                    {
                        orgMans += "'" + man + "',";
                    }
                    if (orgMans.IndexOf(',') != -1)
                        orgMans = orgMans.Substring(0, orgMans.LastIndexOf(','));
                    string sqlOrg = string.IsNullOrEmpty(orgMans) ? "select ORG_NO from SYS_ORG where ORG_MAN IS NULL" : "select ORG_NO from SYS_ORG where ORG_MAN in (" + orgMans + ")";
                    InfoCommand cmdOrg = new InfoCommand(getConnectionType(nwindConn), ClientInfo);
                    cmdOrg.Connection = nwindConn;
                    cmdOrg.CommandText = sqlOrg;
                    IDataReader drOrg = cmdOrg.ExecuteReader();
                    while (drOrg.Read())
                    {
                        string org = drOrg["ORG_NO"].ToString();
                        if (!lstOrgs.Contains(org))
                            lstOrgs.Add(org);
                    }
                    cmdOrg.Cancel();
                    drOrg.Close();

                    string upperOrgs = "";
                    foreach (string org in lstOrgs)
                    {
                        upperOrgs += "'" + org + "',";
                    }
                    if (upperOrgs.IndexOf(',') != -1)
                        upperOrgs = upperOrgs.Substring(0, upperOrgs.LastIndexOf(','));
                    string sqlOrgManRole = string.IsNullOrEmpty(upperOrgs) ? "select ORG_MAN from SYS_ORG where UPPER_ORG IS NULL" : "select ORG_MAN from SYS_ORG where UPPER_ORG in (" + upperOrgs + ")";
                    InfoCommand cmdOrgManRole = new InfoCommand(getConnectionType(nwindConn), ClientInfo);
                    cmdOrgManRole.Connection = nwindConn;
                    cmdOrgManRole.CommandText = sqlOrgManRole;
                    IDataReader drOrgManRole = cmdOrgManRole.ExecuteReader();
                    while (drOrgManRole.Read())
                    {
                        string orgMan = drOrgManRole["ORG_MAN"].ToString();
                        if (!lstRoles.Contains(orgMan))
                            lstRoles.Add(orgMan);
                    }
                    cmdOrgManRole.Cancel();
                    drOrgManRole.Close();
                }

                string roles = "";
                foreach (string role in lstRoles)
                {
                    roles += "'" + role + "',";
                }
                if (roles.IndexOf(',') != -1)
                    roles = roles.Substring(0, roles.LastIndexOf(','));
                bool delay = Convert.ToBoolean(objParam[4]);
                //joy 2010/1/11 modify : 增加 ATTACHMENTS,MULTISTEPRETURN,PARAMETERS 欄位,因為逾時需要用到這些欄位
                string sqlTodolist = "SELECT " + (delay ? "LISTID, FLOW_ID, FLOW_DESC, APPLICANT, S_USER_ID, S_STEP_ID, S_STEP_DESC, D_STEP_ID, D_STEP_DESC, EXP_TIME, URGENT_TIME, TIME_UNIT, USERNAME, FORM_NAME, NAVIGATOR_MODE, FLNAVIGATOR_MODE, PARAMETERS, SENDTO_KIND, SENDTO_ID, FLOWIMPORTANT, FLOWURGENT, STATUS, FORM_TABLE, FORM_KEYS, FORM_PRESENTATION, FORM_PRESENT_CT, REMARK, PROVIDER_NAME, VERSION, EMAIL_ADD, EMAIL_STATUS, VDSNAME, SENDBACKSTEP, LEVEL_NO, WEBFORM_NAME, UPDATE_DATE, UPDATE_TIME, FLOWPATH, PLUSAPPROVE, PLUSROLES, ATTACHMENTS, MULTISTEPRETURN, PARAMETERS" : "FLOW_DESC, TIME_UNIT, FLOWURGENT, UPDATE_DATE, UPDATE_TIME, URGENT_TIME, EXP_TIME") + " from SYS_TODOLIST where " + (string.IsNullOrEmpty(roles) ? "1=0" : ("(SENDTO_ID in (" + roles + ")  and SENDTO_KIND='1') or (SENDTO_ID ='" + currentUser + "' and SENDTO_KIND='2')")) + (delay ? " ORDER BY UPDATE_DATE" : " ORDER BY FLOW_DESC");
                InfoCommand cmdTodolist = new InfoCommand(getConnectionType(nwindConn), ClientInfo);
                cmdTodolist.Connection = nwindConn;
                cmdTodolist.CommandText = sqlTodolist;
                IDataAdapter adpater = DBUtils.CreateDbDataAdapter(cmdTodolist);

                DataTable allList = new DataTable();
                (adpater as DbDataAdapter).Fill(allList);

                if (delay)
                {
                    DataColumn colSendToDetail = new DataColumn("SENDTO_DETAIL", typeof(string), "SENDTO_ID+'('+USERNAME+')'");
                    DataColumn colUpdateWholeTime = new DataColumn("UPDATE_WHOLE_TIME", typeof(string), "UPDATE_DATE + ' ' + UPDATE_TIME");
                    DataColumn colOverTime = new DataColumn("OVERTIME", typeof(string));
                    allList.Columns.AddRange(new DataColumn[] { colSendToDetail, colUpdateWholeTime, colOverTime });
                }
                List<DataRow> overTimeRows = new List<DataRow>();
                #region find over time
                foreach (DataRow row in allList.Rows)
                {
                    string TIME_UNIT = row["TIME_UNIT"].ToString();
                    string FLOWURGENT = row["FLOWURGENT"].ToString();
                    string UPDATE_DATE = row["UPDATE_DATE"].ToString();
                    string UPDATE_TIME = row["UPDATE_TIME"].ToString();
                    string URGENT_TIME = row["URGENT_TIME"].ToString();
                    string EXP_TIME = row["EXP_TIME"].ToString();

                    if (TIME_UNIT == "Day" && FLOWURGENT == "1")
                    {
                        if (Convert.ToDecimal(URGENT_TIME) == Decimal.Zero) continue;
                        TimeSpan span = this.WorkTimeSpan(DateTime.Now.Date, Convert.ToDateTime(UPDATE_DATE), (bool)objParam[2], (objParam[3] == null) ? null : (List<string>)objParam[3]);

                        int overtimes = span.Days - Convert.ToInt32(Convert.ToDecimal(URGENT_TIME));
                        if (delay) row["OVERTIME"] = overtimes.ToString() + "Days";
                        if (overtimes >= 0)
                        {
                            overTimeRows.Add(row);
                        }
                    }
                    else if (TIME_UNIT == "Day" && FLOWURGENT == "0")
                    {
                        if (Convert.ToDecimal(EXP_TIME) == Decimal.Zero) continue;
                        TimeSpan span = this.WorkTimeSpan(DateTime.Now.Date, Convert.ToDateTime(UPDATE_DATE), (bool)objParam[2], (objParam[3] == null) ? null : (List<string>)objParam[3]);
                        int overtimes = span.Days - Convert.ToInt32(Convert.ToDecimal(EXP_TIME));
                        if (delay) row["OVERTIME"] = overtimes.ToString() + "Days";
                        if (overtimes >= 0)
                        {
                            overTimeRows.Add(row);
                        }
                    }
                    else if (TIME_UNIT == "Hour" && FLOWURGENT == "1")
                    {
                        if (Convert.ToDecimal(URGENT_TIME) == Decimal.Zero) continue;
                        TimeSpan spanDay = this.WorkTimeSpan(DateTime.Now.Date, Convert.ToDateTime(UPDATE_DATE), (bool)objParam[2], (objParam[3] == null) ? null : (List<string>)objParam[3]);
                        int spanHour = DateTime.Now.Hour - Convert.ToDateTime(UPDATE_TIME).Hour;
                        int overtimes = spanDay.Days * 8 + spanHour - Convert.ToInt32(Convert.ToDecimal(URGENT_TIME));
                        if (delay) row["OVERTIME"] = overtimes.ToString() + "Hours";
                        if (overtimes >= 0)
                        {
                            overTimeRows.Add(row);
                        }
                    }
                    else if (TIME_UNIT == "Hour" && FLOWURGENT == "0")
                    {
                        if (Convert.ToDecimal(EXP_TIME) == Decimal.Zero) continue;
                        TimeSpan spanDay = this.WorkTimeSpan(DateTime.Now.Date, Convert.ToDateTime(UPDATE_DATE), (bool)objParam[2], (objParam[3] == null) ? null : (List<string>)objParam[3]);
                        int spanHour = DateTime.Now.Hour - Convert.ToDateTime(UPDATE_TIME).Hour;
                        int overtimes = spanDay.Days * 8 + spanHour - Convert.ToInt32(Convert.ToDecimal(EXP_TIME));
                        if (delay) row["OVERTIME"] = overtimes.ToString() + "Hours";
                        if (overtimes >= 0)
                        {
                            overTimeRows.Add(row);
                        }
                    }
                }
                #endregion

                DataTable overtimeList = null;
                if (delay)
                {
                    overtimeList = allList.Clone();
                    foreach (DataRow row in overTimeRows)
                    {
                        overtimeList.ImportRow(row);
                    }
                }
                else
                {
                    overtimeList = new DataTable();
                    DataColumn colFlowDesc = new DataColumn("FLOW_DESC", typeof(string));
                    DataColumn colDelayCount = new DataColumn("DELAY_COUNT", typeof(int));
                    overtimeList.Columns.AddRange(new DataColumn[] { colFlowDesc, colDelayCount });

                    string desc = "";
                    foreach (DataRow row in overTimeRows)
                    {
                        if (desc != row["FLOW_DESC"].ToString())
                        {
                            desc = row["FLOW_DESC"].ToString();
                            int count = overTimeRows.FindAll(delegate(DataRow irow) { return irow["FLOW_DESC"].ToString() == desc; }).Count;
                            DataRow newRow = overtimeList.NewRow();
                            newRow["FLOW_DESC"] = desc;
                            newRow["DELAY_COUNT"] = count;
                            overtimeList.Rows.Add(newRow);
                        }
                    }
                }
                return new object[] { 0, overtimeList };
            }
            finally
            {
                ReleaseConnection(GetClientInfo(ClientInfoType.LoginDB).ToString(), nwindConn, true);
            }
        }