软测单独项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

569 lines
19 KiB

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();
}
/// <summary>
/// 新增
/// </summary>
public int Add(RoadFlow.Data.Model.Organize model)
{
return dataOrganize.Add(model);
}
/// <summary>
/// 更新
/// </summary>
public int Update(RoadFlow.Data.Model.Organize model)
{
return dataOrganize.Update(model);
}
/// <summary>
/// 查询所有记录
/// </summary>
public List<RoadFlow.Data.Model.Organize> GetAll()
{
return dataOrganize.GetAll();
}
/// <summary>
/// 查询单条记录
/// </summary>
public RoadFlow.Data.Model.Organize Get(string id)
{
return dataOrganize.Get(id);
}
/// <summary>
/// 删除
/// </summary>
public int Delete(string id)
{
return dataOrganize.Delete(id);
}
/// <summary>
/// 查询记录条数
/// </summary>
public long GetCount()
{
return dataOrganize.GetCount();
}
/// <summary>
/// 根据根记录
/// </summary>
public RoadFlow.Data.Model.Organize GetRoot()
{
return dataOrganize.GetRoot();
}
/// <summary>
/// 查询下级记录
/// </summary>
public List<RoadFlow.Data.Model.Organize> GetChilds(string ID)
{
return dataOrganize.GetChilds(ID);
}
/// <summary>
/// 机构类型
/// </summary>
private Dictionary<int,string> types
{
get
{
var dict = new Dictionary<int, string>();
dict.Add(1, "单位");
dict.Add(2, "部门");
dict.Add(3, "岗位");
return dict;
}
}
/// <summary>
/// 状态
/// </summary>
private Dictionary<int, string> status
{
get
{
var dict = new Dictionary<int, string>();
dict.Add(0, "正常");
dict.Add(1, "冻结");
return dict;
}
}
/// <summary>
/// 得到类型选择
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public string GetTypeRadio(string name, string value = "", string attributes="")
{
StringBuilder radios = new StringBuilder();
foreach (var type in types)
{
radios.AppendFormat("<input type=\"radio\" style=\"vertical-align:middle;\" value=\"{0}\" id=\"orgtypes_{0}\" {1} name=\"{2}\" {3} /><label style=\"vertical-align:middle;\" for=\"orgtypes_{0}\">{4}</label>",
type.Key,
type.Key.ToString() == value ? "checked=\"checked\"" : "",
name,
attributes,
type.Value);
}
return radios.ToString();
}
/// <summary>
/// 得到状态选择
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public string GetStatusRadio(string name, string value = "", string attributes = "")
{
StringBuilder radios = new StringBuilder();
foreach (var statu in status)
{
radios.AppendFormat("<input type=\"radio\" style=\"vertical-align:middle;\" value=\"{0}\" id=\"orgstatus_{0}\" {1} name=\"{2}\" {3}/><label style=\"vertical-align:middle;\" for=\"orgstatus_{0}\">{4}</label>",
statu.Key,
statu.Key.ToString() == value ? "checked=\"checked\"" : "",
name,
attributes,
statu.Value);
}
return radios.ToString();
}
/// <summary>
/// 得到一个父级下的最大排序值
/// </summary>
/// <returns></returns>
public int GetMaxSort(Guid id)
{
return dataOrganize.GetMaxSort(id);
}
///// <summary>
///// 得到一个机构下的所有人员
///// </summary>
///// <param name="id"></param>
///// <returns></returns>
//public List<RoadFlow.Data.Model.Users> GetAllUsers(string id)
//{
// var childs = GetAllChildsId(id);
// List<string> ids = new List<string>();
// ids.Add(id);
// foreach (var child in childs)
// {
// ids.Add(child.ID);
// }
// return new Users().GetAllByOrganizeIDArray(ids.ToArray());
//}
/// <summary>
/// 得到一个机构下的所有人员
/// FIRE_ORG
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public List<FangYar.Model.TBL.TBL_SYS_USERS_Model> GetAllUsers(string id)
{
FangYar.BLL.TBL.SysUsersBLL userbll = new FangYar.BLL.TBL.SysUsersBLL();
return userbll.GetListByOrgId(id);
}
/// <summary>
/// 得到一组机构字符串下所有人员
/// </summary>
/// <param name="idString"></param>
/// <returns></returns>
public List<FangYar.Model.TBL.TBL_SYS_USERS_Model> GetAllUsersIdString(string idString)
{
if (idString.IsNullOrEmpty())
{
return new List<FangYar.Model.TBL.TBL_SYS_USERS_Model>();
}
string[] idArray = idString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
List<FangYar.Model.TBL.TBL_SYS_USERS_Model> userList = new List<FangYar.Model.TBL.TBL_SYS_USERS_Model>();
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<FangYar.Model.TBL.TBL_SYS_USERS_Model> 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()));
}
}
}
/// <summary>
/// 得到一组机构字符串下所有人员ID
/// </summary>
/// <param name="idString"></param>
/// <returns></returns>
public List<string> GetAllUsersIdListIdString(string idString)
{
var users = GetAllUsersIdString(idString);
List<string> list = new List<string>();
foreach (var user in users)
{
if (user != null)
{
list.Add(user.USERS_UID);
}
}
return list;
}
/// <summary>
/// 得到一组机构字符串下所有人员ID
/// </summary>
/// <param name="idString"></param>
/// <returns></returns>
public List<string> GetAllUsersIdList(string id)
{
var users = GetAllUsers(id);
List<string> list = new List<string>();
foreach (var user in users)
{
if (user != null)
{
list.Add(user.USERS_UID);
}
}
return list;
}
/// <summary>
/// 更新下级数
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 更新排序
/// </summary>
/// <returns></returns>
public int UpdateSort(Guid id, int sort)
{
return dataOrganize.UpdateSort(id, sort);
}
/// <summary>
/// 查询一个组织的所有上级
/// </summary>
public List<RoadFlow.Data.Model.Organize> GetAllParent(string number)
{
return number.IsNullOrEmpty() ? new List<RoadFlow.Data.Model.Organize>() : dataOrganize.GetAllParent(number);
}
/// <summary>
/// 查询一个组织的所有上级
/// </summary>
public List<RoadFlow.Data.Model.Organize> GetAllParentId(string id)
{
var org = Get(id);
if (org == null)
{
return new List<RoadFlow.Data.Model.Organize>();
}
return dataOrganize.GetAllParent(org.Number2);
}
/// <summary>
/// 查询一个组织的所有下级
/// </summary>
/// <param name="number">编号</param>
/// <returns></returns>
public List<RoadFlow.Data.Model.Organize> GetAllChilds(string number)
{
return number.IsNullOrEmpty() ? new List<RoadFlow.Data.Model.Organize>() : dataOrganize.GetAllChild(number);
}
/// <summary>
/// 查询一个组织的所有下级
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public List<RoadFlow.Data.Model.Organize> GetAllChildsId(string id)
{
var org = Get(id);
if (org == null)
{
return new List<RoadFlow.Data.Model.Organize>();
}
return dataOrganize.GetAllChild(org.Number2);
}
/// <summary>
/// 查询一个机构的所有上级名称
/// </summary>
/// <param name="id"></param>
/// <param name="split">分隔字符串</param>
/// <param name="reverse">是否倒置</param>
/// <returns></returns>
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();
}
/// <summary>
/// 将一个机构移动到另一个机构下
/// </summary>
/// <param name="fromID">机构ID</param>
/// <param name="toID">要移动到的机构ID</param>
/// <returns></returns>
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;
}
}
/// <summary>
/// 根据机构ID得到机构名称
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 根据ID得到名称(有前缀的情况)
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 得到一组机构的名称(逗号分隔,有前缀)
/// </summary>
/// <param name="idString"></param>
/// <param name="split">分隔符</param>
/// <returns></returns>
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++<array.Length-1)
{
sb.Append(split);
}
}
return sb.ToString();
}
/// <summary>
/// 删除一个机构及其所有下级(包括下级人员)
/// </summary>
/// <param name="orgID"></param>
/// <returns></returns>
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;
}
}
}