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;
}
}
}