using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace RoadFlow.Platform { public class Organize { private RoadFlow.Data.Interface.IOrganize dataOrganize; public Organize() { this.dataOrganize = Data.Factory.Factory.GetOrganize(); } /// /// 新增 /// public int Add(RoadFlow.Data.Model.Organize model) { return dataOrganize.Add(model); } /// /// 更新 /// public int Update(RoadFlow.Data.Model.Organize model) { return dataOrganize.Update(model); } /// /// 查询所有记录 /// public List GetAll() { return dataOrganize.GetAll(); } /// /// 查询单条记录 /// public RoadFlow.Data.Model.Organize Get(string id) { return dataOrganize.Get(id); } /// /// 删除 /// public int Delete(string id) { return dataOrganize.Delete(id); } /// /// 查询记录条数 /// public long GetCount() { return dataOrganize.GetCount(); } /// /// 根据根记录 /// public RoadFlow.Data.Model.Organize GetRoot() { return dataOrganize.GetRoot(); } /// /// 查询下级记录 /// public List GetChilds(string ID) { return dataOrganize.GetChilds(ID); } /// /// 机构类型 /// private Dictionary types { get { var dict = new Dictionary(); dict.Add(1, "单位"); dict.Add(2, "部门"); dict.Add(3, "岗位"); return dict; } } /// /// 状态 /// private Dictionary status { get { var dict = new Dictionary(); dict.Add(0, "正常"); dict.Add(1, "冻结"); return dict; } } /// /// 得到类型选择 /// /// /// public string GetTypeRadio(string name, string value = "", string attributes="") { StringBuilder radios = new StringBuilder(); foreach (var type in types) { radios.AppendFormat("", type.Key, type.Key.ToString() == value ? "checked=\"checked\"" : "", name, attributes, type.Value); } return radios.ToString(); } /// /// 得到状态选择 /// /// /// public string GetStatusRadio(string name, string value = "", string attributes = "") { StringBuilder radios = new StringBuilder(); foreach (var statu in status) { radios.AppendFormat("", statu.Key, statu.Key.ToString() == value ? "checked=\"checked\"" : "", name, attributes, statu.Value); } return radios.ToString(); } /// /// 得到一个父级下的最大排序值 /// /// public int GetMaxSort(Guid id) { return dataOrganize.GetMaxSort(id); } ///// ///// 得到一个机构下的所有人员 ///// ///// ///// //public List GetAllUsers(string id) //{ // var childs = GetAllChildsId(id); // List ids = new List(); // ids.Add(id); // foreach (var child in childs) // { // ids.Add(child.ID); // } // return new Users().GetAllByOrganizeIDArray(ids.ToArray()); //} /// /// 得到一个机构下的所有人员 /// FIRE_ORG /// /// /// public List GetAllUsers(string id) { FangYar.BLL.TBL.SysUsersBLL userbll = new FangYar.BLL.TBL.SysUsersBLL(); return userbll.GetListByOrgId(id); } /// /// 得到一组机构字符串下所有人员 /// /// /// public List GetAllUsersIdString(string idString) { if (idString.IsNullOrEmpty()) { return new List(); } string[] idArray = idString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); List userList = new List(); FangYar.BLL.TBL.SysUsersBLL userbll = new FangYar.BLL.TBL.SysUsersBLL(); WorkGroup bwg = new WorkGroup(); foreach (string id in idArray) { if (id.StartsWith(Users.PREFIX))//人员 { userList.Add(userbll.GetModelByUID(Users.RemovePrefix(id))); } else if (id.IsGuid())//机构 { userList.AddRange(GetAllUsers(id)); } else if (id.StartsWith(WorkGroup.PREFIX))//工作组 { addWorkGroupUsers(userList, bwg.Get(WorkGroup.RemovePrefix(id).ToGuid())); } else { userList.Add(userbll.GetModelByUID(Users.RemovePrefix(id))); } } userList.RemoveAll(p => p == null); return userList.Distinct(new UsersEqualityComparer()).ToList(); } private void addWorkGroupUsers(List userList, RoadFlow.Data.Model.WorkGroup wg) { if (wg == null || wg.Members.IsNullOrEmpty()) { return; } string[] idArray = wg.Members.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); //Users busers = new Users(); FangYar.BLL.TBL.SysUsersBLL userbll = new FangYar.BLL.TBL.SysUsersBLL(); WorkGroup bwg = new WorkGroup(); foreach (var id in idArray) { if (id.StartsWith(Users.PREFIX))//人员 { userList.Add(userbll.GetModelByUID(Users.RemovePrefix(id))); } else if (id.IsGuid())//机构 { userList.AddRange(GetAllUsers(id)); } else if (id.StartsWith(WorkGroup.PREFIX))//工作组 { addWorkGroupUsers(userList, bwg.Get(WorkGroup.RemovePrefix(id).ToGuid())); } } } /// /// 得到一组机构字符串下所有人员ID /// /// /// public List GetAllUsersIdListIdString(string idString) { var users = GetAllUsersIdString(idString); List list = new List(); foreach (var user in users) { if (user != null) { list.Add(user.USERS_UID); } } return list; } /// /// 得到一组机构字符串下所有人员ID /// /// /// public List GetAllUsersIdList(string id) { var users = GetAllUsers(id); List list = new List(); foreach (var user in users) { if (user != null) { list.Add(user.USERS_UID); } } return list; } /// /// 更新下级数 /// /// public int UpdateChildsLength(string id) { int i = 0; var org = Get(id); if (org == null) { return i; } i = GetChilds(id).Count; i += GetAllUsers(id).Count; dataOrganize.UpdateChildsLength(id, i); return i; } /// /// 更新排序 /// /// public int UpdateSort(Guid id, int sort) { return dataOrganize.UpdateSort(id, sort); } /// /// 查询一个组织的所有上级 /// public List GetAllParent(string number) { return number.IsNullOrEmpty() ? new List() : dataOrganize.GetAllParent(number); } /// /// 查询一个组织的所有上级 /// public List GetAllParentId(string id) { var org = Get(id); if (org == null) { return new List(); } return dataOrganize.GetAllParent(org.Number2); } /// /// 查询一个组织的所有下级 /// /// 编号 /// public List GetAllChilds(string number) { return number.IsNullOrEmpty() ? new List() : dataOrganize.GetAllChild(number); } /// /// 查询一个组织的所有下级 /// /// /// public List GetAllChildsId(string id) { var org = Get(id); if (org == null) { return new List(); } return dataOrganize.GetAllChild(org.Number2); } /// /// 查询一个机构的所有上级名称 /// /// /// 分隔字符串 /// 是否倒置 /// public string GetAllParentNames(string id, bool reverse = false, string split = " / ") { var parents = GetAllParentId(id); if (reverse) { parents.Reverse(); } StringBuilder names = new StringBuilder(parents.Count * 100); int i=0; foreach (var parent in parents) { names.Append(parent.Name); if (i++ < parents.Count - 1) { names.Append(split); } } return names.ToString(); } /// /// 将一个机构移动到另一个机构下 /// /// 机构ID /// 要移动到的机构ID /// public bool Move(string fromID, string toID) { var from = Get(fromID); var to = Get(toID); if (from == null || to == null) { return false; } if (to.Number2.StartsWith(from.Number2, StringComparison.CurrentCultureIgnoreCase)) { return false; } using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Suppress)) { string oldParentID = from.ParentID; from.ParentID = toID; from.Depth = to.Depth + 1; from.Number2 = to.Number2 + "," + from.ID.ToString(); Update(from); var childs = GetAllChilds(fromID).OrderBy(p => p.Depth); foreach (var child in childs) { child.Number2 = Get(child.ParentID).Number2 + "," + child.ID.ToString(); child.Depth = child.Number2.Split(',').Length - 1; Update(child); } UpdateChildsLength(toID); UpdateChildsLength(oldParentID); scope.Complete(); return true; } } /// /// 根据机构ID得到机构名称 /// /// /// public string GetOrgName(string id) { FangYar.BLL.FIRE.FIRE_ORG orgbll = new FangYar.BLL.FIRE.FIRE_ORG(); FangYar.Model.FIRE.FIRE_ORG org = orgbll.GetModel(id); //var org = Get(id); return org == null ? "" : org.ORG_NAME; } /// /// 根据ID得到名称(有前缀的情况) /// /// /// public string GetNameQZ(string id) { string res = ""; string name = string.Empty; if (id.IsGuid())//机构 { res = GetOrgName(id); } else if (id.StartsWith(Users.PREFIX))//用户 { string uid = Users.RemovePrefix(id); if(uid == "" || uid == null) { res = ""; } else { FangYar.BLL.TBL.SysUsersBLL userbll = new FangYar.BLL.TBL.SysUsersBLL(); FangYar.Model.TBL.TBL_SYS_USERS_Model user = userbll.GetModelByUID(uid); res = user == null ? "" : user.USERS_NAME; } }else { if (id == "" || id == null) { res = ""; } else { FangYar.BLL.TBL.SysUsersBLL userbll = new FangYar.BLL.TBL.SysUsersBLL(); FangYar.Model.TBL.TBL_SYS_USERS_Model user = userbll.GetModelByUID(id); res = user == null ? "" : user.USERS_NAME; } } //else if (id.StartsWith(WorkGroup.PREFIX))//工作组 //{ // string uid = WorkGroup.RemovePrefix(id); // Guid wid; // if (!uid.IsGuid(out wid)) // { // return ""; // } // else // { // return new WorkGroup().GetName(wid); // } //} return res; } /// /// 得到一组机构的名称(逗号分隔,有前缀) /// /// /// 分隔符 /// public string GetNames(string idString, string split=",") { if (idString.IsNullOrEmpty()) { return ""; } string[] array = idString.Split(','); StringBuilder sb = new StringBuilder(array.Length * 50); int i = 0; foreach (var arr in array) { if (arr.IsNullOrEmpty()) { continue; } sb.Append(GetNameQZ(arr)); if(i++ /// 删除一个机构及其所有下级(包括下级人员) /// /// /// public int DeleteAndAllChilds(string orgID) { int i = 0; using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Required)) { UsersRelation bur = new UsersRelation(); Users user = new Users(); UsersInfo userInfo = new UsersInfo(); var childs = GetAllChildsId(orgID); foreach (var child in childs) { //删除人员及关系 var urs = bur.GetAllByOrganizeID(child.ID); foreach (var ur in urs) { bur.Delete(ur.UserID, ur.OrganizeID); user.Delete(ur.UserID); i += userInfo.Delete(ur.UserID); } i += Delete(child.ID); } //删除人员及关系 var urs1 = bur.GetAllByOrganizeID(orgID); foreach (var ur in urs1) { bur.Delete(ur.UserID, ur.OrganizeID); user.Delete(ur.UserID); i += userInfo.Delete(ur.UserID); } i += Delete(orgID); scope.Complete(); } return i; } } }