Exemplo n.º 1
0
        public static string GetFilterByMask(ADSchemaType nMask, ExtraFilter ef)
        {
            StringBuilder strB = new StringBuilder(1024);

            strB.Append("(|");

            if ((ADSchemaType.Domain & nMask) != 0)
            {
                strB.Append("(objectCategory=domain)");
            }

            if ((ADSchemaType.Organizations & nMask) != 0)
            {
                string strOU = string.Empty;

                strOU += "(objectCategory=organizationalUnit)";

                if (ef.OUFilter != string.Empty)
                {
                    strOU += ef.OUFilter;
                }

                strB.Append("(&" + strOU + ")");
            }

            if ((ADSchemaType.Container & nMask) != 0)
            {
                string strContainer = "(objectCategory=person)(objectClass=user)";

                if (ef.ContainerFilter != string.Empty)
                {
                    strContainer += ef.ContainerFilter;
                }

                strB.Append("(&" + strContainer + ")");
            }

            if ((ADSchemaType.Users & nMask) != 0)
            {
                string strUser = "******";

                if (ef.UserFilter != string.Empty)
                {
                    strUser += ef.UserFilter;
                }

                strB.Append("(&" + strUser + ")");
            }

            if ((ADSchemaType.Groups & nMask) != 0)
            {
                string strGroup = "(objectCategory=group)(objectClass=group)";

                if (ef.GroupFilter != string.Empty)
                {
                    strGroup += ef.GroupFilter;
                }

                strB.Append("(&" + strGroup + ")");
            }

            strB.Append(")");

            return(strB.ToString());
        }
        public void Run()
        {
            FileInfo logfile = new FileInfo(Environment.CurrentDirectory.ToString() + "/log.txt");
            StreamWriter write = null;
            if (logfile.Exists)
            {
                write = logfile.AppendText();
                write.WriteLine("---------------------------------------------------------------------------------------");
            }
            else
            {
                write = logfile.CreateText();
            }

            write.WriteLine("用户名,导入结果,操作时间,失败原因");

            List<Picture> pictures = new List<Picture>();
            List<Picture> deletedPictures = new List<Picture>();
            Database database = null;
            try
            {
                #region 读取新加用户的图片的数据库信息
                database = DbHelper.GetDBDatabase("HB2008");
                string sql = @"select top 1000 c.LOGIN_NAME, a.FILE_NAME, a.CONTENT_DATA from WF.MATERIAL_CONTENT a join wf.IMAGE b " +
                              "on a.CONTENT_ID = b.ID join wf.INITIALIZATION_USER_AD_IMAGE c on b.RESOURCE_ID = c.PICTURE_ID where a.CLASS = 'HR_PHOTO' and c.UpdateStatus = 0 and c.VALIDSTATUS = 1 ";

                DbDataReader dr = database.ExecuteReader(CommandType.Text, sql);
                while (dr.Read())
                {
                    Picture pic = new Picture();

                    pic.LOGIN_NAME = dr["LOGIN_NAME"].ToString();
                    pic.FILE_NAME = dr["FILE_NAME"] != null ? dr["FILE_NAME"].ToString() : string.Empty;
                    pic.CONTENT_DATA = (byte[])dr["CONTENT_DATA"];
                    pictures.Add(pic);
                }
                dr.Close();
                #endregion

                #region 读取删除用户的图片的数据库信息
                sql = @"select LOGIN_NAME from WF.INITIALIZATION_USER_AD_IMAGE where VALIDSTATUS = 0 and UpdateStatus = 0  ";

                dr = database.ExecuteReader(CommandType.Text, sql);
                while (dr.Read())
                {
                    Picture pic = new Picture();

                    pic.LOGIN_NAME = dr["LOGIN_NAME"].ToString();
                    deletedPictures.Add(pic);
                }
                dr.Close();
                #endregion
            }
            catch
            {
                pictures.Clear();
                deletedPictures.Clear();
                write.WriteLine("SQL Server 服务器异常");
                return;
            }

            #region 向AD中写入图片信息
            foreach (Picture pic in pictures)
            {
                DirectoryEntry entity = null;
                List<SearchResult> result = null;
                try
                {
                    var exFilter = new ExtraFilter();
                    exFilter.UserFilter = "samAccountName=" + pic.LOGIN_NAME;
                    string filter = ADSearchConditions.GetFilterByMask(ADSchemaType.Users, exFilter);
                    ADSearchConditions conditons = new ADSearchConditions();
                    conditons.Scope = SearchScope.Subtree;
                    ServerInfo serverInfo = ServerInfoConfigSettings.GetConfig().ServerInfos["dc"].ToServerInfo();
                    MCS.Library.ADHelper adHelper = ADHelper.GetInstance(serverInfo);
                    result = adHelper.ExecuteSearch(adHelper.GetRootEntry(), filter, conditons, "distinguishedName");

					if (result.Count < 1)
                    {
                        write.WriteLine(pic.LOGIN_NAME + ",失败," + DateTime.Now + ",AD中找不到该账号");
                    }
                    else
                    {
                        #region 处理逻辑
                        entity = adHelper.NewEntry(result[0].Properties["distinguishedName"][0].ToString());
                        if (pic.CONTENT_DATA.Length < 102400)
                        {
                            if (entity.Properties.Contains("thumbnailPhoto"))
                            {
                                entity.Properties["thumbnailPhoto"][0] = pic.CONTENT_DATA;
                            }
                            else
                            {
                                entity.Properties["thumbnailPhoto"].Add(pic.CONTENT_DATA);
                            }
                        }
                        else
                        {
                            ImageHelper imgHelp = new ImageHelper(pic.CONTENT_DATA);
                            double percent = 80000.00 / pic.CONTENT_DATA.Length;

                            if (pic.FILE_NAME != string.Empty && pic.FILE_NAME != null)
                            {
                                if (pic.FILE_NAME.Split('.').Length > 1)
                                {
                                    if (pic.FILE_NAME.Split('.')[1].ToLower() == "jpg" || pic.FILE_NAME.Split('.')[1].ToLower() == "gif" || pic.FILE_NAME.Split('.')[1].ToLower() == "png" || pic.FILE_NAME.Split('.')[1].ToLower() == "bmp")
                                    {

                                        if (entity.Properties.Contains("thumbnailPhoto"))
                                        {
                                            entity.Properties["thumbnailPhoto"][0] = imgHelp.GetThumbnailImage(pic.FILE_NAME.Split('.')[1].ToLower(), percent);
                                        }
                                        else
                                        {
                                            entity.Properties["thumbnailPhoto"].Add(imgHelp.GetThumbnailImage(pic.FILE_NAME.Split('.')[1].ToLower(), percent));
                                        }
                                    }
                                    else
                                    {
                                        if (entity.Properties.Contains("thumbnailPhoto"))
                                        {
                                            entity.Properties["thumbnailPhoto"][0] = imgHelp.GetThumbnailImage("jpg", percent);
                                        }
                                        else
                                        {
                                            entity.Properties["thumbnailPhoto"].Add(imgHelp.GetThumbnailImage("jpg", percent));
                                        }
                                    }
                                }
                                else
                                {
                                    if (entity.Properties.Contains("thumbnailPhoto"))
                                    {
                                        entity.Properties["thumbnailPhoto"][0] = imgHelp.GetThumbnailImage("jpg", percent);
                                    }
                                    else
                                    {
                                        entity.Properties["thumbnailPhoto"].Add(imgHelp.GetThumbnailImage("jpg", percent));
                                    }
                                }
                            }
                            else
                            {
                                if (entity.Properties.Contains("thumbnailPhoto"))
                                {
                                    entity.Properties["thumbnailPhoto"][0] = imgHelp.GetThumbnailImage("jpg", percent);
                                }
                                else
                                {
                                    entity.Properties["thumbnailPhoto"].Add(imgHelp.GetThumbnailImage("jpg", percent));
                                }
                            }
                        }
                        #endregion
                        entity.CommitChanges();
                        entity.Close();
                    
                        string sql = @"update WF.INITIALIZATION_USER_AD_IMAGE set UPDATESTATUS = 1 , UPDATETIME = GETDATE() where LOGIN_NAME = '" + pic.LOGIN_NAME + "' ";
                        database.ExecuteNonQuery(CommandType.Text, sql);
                        write.WriteLine(pic.LOGIN_NAME + ",成功," + DateTime.Now + ",");
                    }
                }
                catch (Exception ex)
                {
                    if (entity != null)
                    {
                        entity.Close();
                    }

                    write.WriteLine(pic.LOGIN_NAME + ",失败," + DateTime.Now + "," + ex.Message);
                }
            }

            foreach (Picture pic in deletedPictures)
            {
                DirectoryEntry entity = null;
                List<SearchResult> result = null;
                try
                {
                    var exFilter = new ExtraFilter();
                    exFilter.UserFilter = "samAccountName=" + pic.LOGIN_NAME;
                    string filter = ADSearchConditions.GetFilterByMask(ADSchemaType.Users, exFilter);
                    ADSearchConditions conditons = new ADSearchConditions();
                    conditons.Scope = SearchScope.Subtree;
                    ServerInfo serverInfo = ServerInfoConfigSettings.GetConfig().ServerInfos["dc"].ToServerInfo();
                    MCS.Library.ADHelper adHelper = ADHelper.GetInstance(serverInfo);
                    result = adHelper.ExecuteSearch(adHelper.GetRootEntry(), filter, conditons, "distinguishedName");
                    if (result.Count < 1)
                    {
                        write.WriteLine(pic.LOGIN_NAME + ",失败," + DateTime.Now + ",AD中找不到该账号");
                    }
                    else
                    {
                        entity = adHelper.NewEntry(result[0].Properties["distinguishedName"][0].ToString());

                        if (entity.Properties.Contains("thumbnailPhoto"))
                        {
                            entity.Properties["thumbnailPhoto"].Clear();
                        }
                        
                        entity.CommitChanges();
                        entity.Close();

                        string sql = @"update WF.INITIALIZATION_USER_AD_IMAGE set UPDATESTATUS = 1, UPDATETIME = GETDATE() where LOGIN_NAME = '" + pic.LOGIN_NAME + "' ";
                        database.ExecuteNonQuery(CommandType.Text, sql);
                        write.WriteLine(pic.LOGIN_NAME + ",成功," + DateTime.Now + ",");
                    }
                }
                catch (Exception ex)
                {
                    if (entity != null)
                    {
                        entity.Close();
                    }

                    write.WriteLine(pic.LOGIN_NAME + ",失败," + DateTime.Now + "," + ex.Message);
                }
            }

            write.Close();
            #endregion

            pictures.Clear();
            deletedPictures.Clear();
        }
Exemplo n.º 3
0
        public static string GetFilterByMask(ADSchemaType nMask, ExtraFilter ef)
        {
            StringBuilder strB = new StringBuilder(1024);

            strB.Append("(|");

            if ((ADSchemaType.Domain & nMask) != 0)
                strB.Append("(objectCategory=domain)");

            if ((ADSchemaType.Organizations & nMask) != 0)
            {
                string strOU = string.Empty;

                strOU += "(objectCategory=organizationalUnit)";

                if (ef.OUFilter != string.Empty)
                    strOU += ef.OUFilter;

                strB.Append("(&" + strOU + ")");
            }

            if ((ADSchemaType.Container & nMask) != 0)
            {
                string strContainer = "(objectCategory=person)(objectClass=user)";

                if (ef.ContainerFilter != string.Empty)
                    strContainer += ef.ContainerFilter;

                strB.Append("(&" + strContainer + ")");
            }

            if ((ADSchemaType.Users & nMask) != 0)
            {
                string strUser = "******";

                if (ef.UserFilter != string.Empty)
                    strUser += ef.UserFilter;

                strB.Append("(&" + strUser + ")");
            }

            if ((ADSchemaType.Groups & nMask) != 0)
            {
                string strGroup = "(objectCategory=group)(objectClass=group)";

                if (ef.GroupFilter != string.Empty)
                    strGroup += ef.GroupFilter;

                strB.Append("(&" + strGroup + ")");
            }

            strB.Append(")");

            return strB.ToString();
        }