软测单独项目
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.
 
 
 
 
 
 

461 lines
16 KiB

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace RoadFlow.Platform
{
public class RoleApp
{
private RoadFlow.Data.Interface.IRoleApp dataRoleApp;
public RoleApp()
{
this.dataRoleApp = Data.Factory.Factory.GetRoleApp();
}
/// <summary>
/// 新增
/// </summary>
public int Add(RoadFlow.Data.Model.RoleApp model)
{
return dataRoleApp.Add(model);
}
/// <summary>
/// 更新
/// </summary>
public int Update(RoadFlow.Data.Model.RoleApp model)
{
return dataRoleApp.Update(model);
}
/// <summary>
/// 查询所有记录
/// </summary>
public List<RoadFlow.Data.Model.RoleApp> GetAll()
{
return dataRoleApp.GetAll();
}
/// <summary>
/// 查询单条记录
/// </summary>
public RoadFlow.Data.Model.RoleApp Get(Guid id)
{
return dataRoleApp.Get(id);
}
/// <summary>
/// 删除
/// </summary>
public int Delete(Guid id)
{
return dataRoleApp.Delete(id);
}
/// <summary>
/// 查询记录条数
/// </summary>
public long GetCount()
{
return dataRoleApp.GetCount();
}
/// <summary>
/// 查询一个角色所有记录
/// </summary>
public List<RoadFlow.Data.Model.RoleApp> GetAllByRoleID(Guid roleID)
{
return dataRoleApp.GetAllByRoleID(roleID);
}
/// <summary>
/// 查询一个角色所有记录
/// </summary>
public System.Data.DataTable GetAllDataTableByRoleID(Guid roleID)
{
return dataRoleApp.GetAllDataTableByRoleID(roleID);
}
/// <summary>
/// 查询所有记录
/// </summary>
public System.Data.DataTable GetAllDataTable()
{
return dataRoleApp.GetAllDataTable();
}
/// <summary>
/// 查询单条记录
/// </summary>
public System.Data.DataRow GetFromCache(string id)
{
var dt = GetAllDataTableFromCache();
var rows = dt.Select("ID='" + id.ToString() + "'");
return rows.Length > 0 ? rows[0] : null;
}
/// <summary>
/// 查询所有记录(缓存)
/// </summary>
public System.Data.DataTable GetAllDataTableFromCache()
{
string key = RoadFlow.Utility.Keys.CacheKeys.RoleApp.ToString();
object obj = RoadFlow.Cache.IO.Opation.Get(key);
if (obj == null || !(obj is System.Data.DataTable))
{
System.Data.DataTable dt = GetAllDataTable();
RoadFlow.Cache.IO.Opation.Set(key, dt);
return dt;
}
else
{
return obj as System.Data.DataTable;
}
}
/// <summary>
/// 清空缓存
/// </summary>
public void ClearAllDataTableCache()
{
string key = RoadFlow.Utility.Keys.CacheKeys.RoleApp.ToString();
RoadFlow.Cache.IO.Opation.Remove(key);
}
/// <summary>
/// 查询下级记录
/// </summary>
public System.Data.DataTable GetChildsDataTable(Guid id)
{
return dataRoleApp.GetChildsDataTable(id);
}
/// <summary>
/// 查询下级记录
/// </summary>
public List<RoadFlow.Data.Model.RoleApp> GetChild(Guid id)
{
return dataRoleApp.GetChild(id);
}
/// <summary>
/// 得到所有下级
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public List<RoadFlow.Data.Model.RoleApp> GetAllChild(Guid id)
{
List<RoadFlow.Data.Model.RoleApp> list = new List<RoadFlow.Data.Model.RoleApp>();
var childs = GetChild(id);
foreach (var child in childs)
{
list.Add(child);
addChilds(list, child.ID);
}
return list;
}
private void addChilds(List<RoadFlow.Data.Model.RoleApp> list, Guid id)
{
var childs = GetChild(id);
foreach (var child in childs)
{
list.Add(child);
addChilds(list, child.ID);
}
}
/// <summary>
/// 删除当有应用和所有下级应用
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public int DeleteAndAllChilds(Guid id)
{
var childs = GetAllChild(id);
int i = 0;
foreach (var child in childs)
{
i += Delete(child.ID);
}
i += Delete(id);
return i;
}
/// <summary>
/// 是否有下级记录
/// </summary>
public bool HasChild(Guid id)
{
return dataRoleApp.HasChild(id);
}
/// <summary>
/// 更新排序
/// </summary>
public int UpdateSort(Guid id, int sort)
{
return dataRoleApp.UpdateSort(id, sort);
}
/// <summary>
/// 删除一个角色记录
/// </summary>
public int DeleteByRoleID(Guid roleID)
{
return dataRoleApp.DeleteByRoleID(roleID);
}
/// <summary>
/// 删除一个应用记录
/// </summary>
public int DeleteByAppID(string appID)
{
return dataRoleApp.DeleteByAppID(appID);
}
/// <summary>
/// 克隆表
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public DataTable CloneDataTable(DataTable dt)
{
DataTable dt1 = dt.Clone();
dt1.Merge(dt);
return dt1;
}
/// <summary>
/// 得到角色应用JSON
/// </summary>
/// <param name="roleID"></param>
/// <returns></returns>
public string GetRoleAppJsonString(Guid roleID, string userID, string rootDir="")
{
RoleApp RoleApp = new RoadFlow.Platform.RoleApp();
UsersApp UsersApp = new Platform.UsersApp();
AppLibrary Applibary = new AppLibrary();
System.Data.DataTable roleAppDt = RoleApp.GetAllDataTableFromCache();
System.Data.DataTable appDt = CloneDataTable(roleAppDt);
UsersApp.AppendUserApps(userID, appDt);
if (appDt.Rows.Count == 0)
{
return "[]";
}
var root = appDt.Select(string.Format("ParentID='{0}' AND RoleID='{1}'", Guid.Empty.ToString(), roleID));
if (root.Length == 0)
{
return "[]";
}
var apps = appDt.Select(string.Format("ParentID='{0}'", root[0]["ID"].ToString()));
System.Text.StringBuilder json = new System.Text.StringBuilder("[", 1000);
System.Data.DataRow rootDr = root[0];
json.Append("{");
json.AppendFormat("\"id\":\"{0}\",", rootDr["ID"].ToString());
json.AppendFormat("\"title\":\"{0}\",", rootDr["Title"].ToString().Trim());
json.AppendFormat("\"ico\":\"{0}\",", rootDr["Ico"].ToString().IsNullOrEmpty() ? "" : rootDir + rootDr["Ico"].ToString());
json.AppendFormat("\"link\":\"{0}\",", getAddress(rootDr).ToString());
json.AppendFormat("\"model\":\"{0}\",", rootDr["OpenMode"].ToString());
json.AppendFormat("\"width\":\"{0}\",", rootDr["Width"].ToString());
json.AppendFormat("\"height\":\"{0}\",", rootDr["Height"].ToString());
json.AppendFormat("\"hasChilds\":\"{0}\",", apps.Length > 0 ? "1" : "0");
json.AppendFormat("\"childs\":[");
for (int i = 0; i < apps.Length; i++)
{
DataRow dr = apps[i];
if (!dr["UseMember"].ToString().IsNullOrEmpty() && dr["AppID"].ToString().IsGuid()
&& !Applibary.GetUseMemberCache(dr["AppID"].ToString()).Contains(userID))
{
continue;
}
var childs = appDt.Select("ParentID='" + dr["ID"].ToString() + "'");
json.Append("{");
json.AppendFormat("\"id\":\"{0}\",", dr["ID"].ToString());
json.AppendFormat("\"title\":\"{0}\",", dr["Title"].ToString());
json.AppendFormat("\"ico\":\"{0}\",", dr["Ico"].ToString().IsNullOrEmpty() ? "" : rootDir + dr["Ico"].ToString());
json.AppendFormat("\"link\":\"{0}\",", getAddress(dr));
json.AppendFormat("\"model\":\"{0}\",", dr["OpenMode"].ToString());
json.AppendFormat("\"width\":\"{0}\",", dr["Width"].ToString());
json.AppendFormat("\"height\":\"{0}\",", dr["Height"].ToString());
json.AppendFormat("\"hasChilds\":\"{0}\",", childs.Length > 0 ? "1" : "0");
json.AppendFormat("\"childs\":[");
/* DataRow[] apps1 = appDt.Select(string.Format("ParentID='{0}'", dr["ID"].ToString()));
for (int j = 0; j < apps1.Length; j++)
{
DataRow dr1 = apps1[j];
var childs1 = appDt.Select("ParentID='" + dr1["ID"].ToString() + "'");
json.Append("{");
json.AppendFormat("\"id\":\"{0}\",", dr1["ID"]);
json.AppendFormat("\"title\":\"{0}\",", dr1["Title"]);
json.AppendFormat("\"ico\":\"{0}\",", dr1["Ico"].ToString().IsNullOrEmpty() ? "" : rootDir + dr1["Ico"]);
json.AppendFormat("\"link\":\"{0}\",", getAddress(dr1));
json.AppendFormat("\"model\":\"{0}\",", dr1["OpenMode"]);
json.AppendFormat("\"width\":\"{0}\",", dr1["Width"]);
json.AppendFormat("\"height\":\"{0}\",", dr1["Height"]);
json.AppendFormat("\"hasChilds\":\"{0}\",", childs1.Length > 0 ? "1" : "0");
json.AppendFormat("\"childs\":[");
json.Append("]");
json.Append("}");
if (j < apps1.Length - 1)
{
json.Append(",");
}
}*/
json.Append("]");
json.Append("}");
if (dr["ID"].ToString() != apps[apps.Length - 1]["ID"].ToString())
{
json.Append(",");
}
}
json.Append("]");
json.Append("}");
json.Append("]");
return json.ToString();
}
/// <summary>
/// 得到角色应用刷新JSON
/// </summary>
/// <returns></returns>
public string GetRoleAppRefreshJsonString(Guid roleID, string userID, Guid refreshID, string rootDir = "")
{
RoleApp roleApp = new RoadFlow.Platform.RoleApp();
UsersApp UsersApp = new Platform.UsersApp();
AppLibrary Applibary = new AppLibrary();
DataTable roleAppDt = roleApp.GetAllDataTableFromCache();
DataTable appDt1 = CloneDataTable(roleAppDt);
UsersApp.AppendUserApps(userID, appDt1);
var dv = appDt1.DefaultView;
dv.RowFilter = string.Format("ParentID='{0}'", refreshID);
dv.Sort = "Sort";
var appDt = dv.ToTable();
if (appDt.Rows.Count == 0)
{
return "[]";
}
int count = appDt.Rows.Count;
System.Text.StringBuilder json = new System.Text.StringBuilder("[", count * 100);
foreach (DataRow dr in appDt.Rows)
{
if (!dr["UseMember"].ToString().IsNullOrEmpty() && dr["AppID"].ToString().IsGuid()
&& !Applibary.GetUseMemberCache(dr["AppID"].ToString()).Contains(userID))
{
continue;
}
json.Append("{");
json.AppendFormat("\"id\":\"{0}\",", dr["ID"].ToString());
json.AppendFormat("\"title\":\"{0}\",", dr["Title"].ToString().Trim());
json.AppendFormat("\"ico\":\"{0}\",", dr["Ico"].ToString().IsNullOrEmpty() ? "" : rootDir + dr["Ico"].ToString());
json.AppendFormat("\"link\":\"{0}\",", getAddress(dr));
json.AppendFormat("\"model\":\"{0}\",", dr["OpenMode"].ToString());
json.AppendFormat("\"width\":\"{0}\",", dr["Width"].ToString());
json.AppendFormat("\"height\":\"{0}\",", dr["Height"].ToString());
json.AppendFormat("\"hasChilds\":\"{0}\",", appDt1.Select(string.Format("ParentID='{0}'", dr["id"].ToString())).Length > 0 ? "1" : "0");
json.AppendFormat("\"childs\":[");
json.Append("]");
json.Append("}");
if (dr["ID"].ToString() != appDt.Rows[appDt.Rows.Count - 1]["ID"].ToString())
{
json.Append(",");
}
}
json.Append("]");
return json.ToString();
}
/// <summary>
/// 得到应用地址
/// </summary>
/// <param name="dr"></param>
/// <returns></returns>
private string getAddress(System.Data.DataRow dr)
{
string address = dr["Address"].ToString().Trim();
string params1 = dr["Params"].ToString().Trim();
string params2 = dr["Params1"].ToString().Trim();
StringBuilder sb = new StringBuilder();
if (params1.IsNullOrEmpty() && params2.IsNullOrEmpty())
{
return address;
}
if (!params2.IsNullOrEmpty())
{
sb.Append(params2.TrimStart('?').TrimStart('&').TrimEnd('&').TrimEnd('?'));
}
if (!params1.IsNullOrEmpty())
{
sb.Append('&');
sb.Append(params1.TrimStart('?').TrimStart('&').TrimEnd('&').TrimEnd('?'));
}
return address.Contains("?") ? string.Concat(address, "&", sb.ToString()) : string.Concat(address, "?", sb.ToString());
}
/// <summary>
/// 得到最大排序值
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public int GetMaxSort(Guid id)
{
return dataRoleApp.GetMaxSort(id);
}
/// <summary>
/// 复制角色应用
/// </summary>
/// <param name="fromID"></param>
/// <param name="toID"></param>
/// <returns></returns>
public bool CopyRoleApp(Guid fromID, Guid toID)
{
var toRole = new Role().Get(toID);
if (toRole == null)
{
return false;
}
using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Suppress))
{
DeleteByRoleID(toID);//先删除要复制的角色
var apps = GetAllByRoleID(fromID);
var root = apps.Find(p => p.ParentID == Guid.Empty);
if (root != null)
{
Guid fID = root.ID;
root.ID = Guid.NewGuid();
root.RoleID = toID;
Add(root);
insertChilds(fID, root.ID, toID, apps);
}
scope.Complete();
return true;
}
}
private void insertChilds(Guid oldID, Guid newID, Guid roleID, List<RoadFlow.Data.Model.RoleApp> apps)
{
var childs = apps.FindAll(p => p.ParentID == oldID);
foreach (var child in childs)
{
Guid fID = child.ID;
child.ID = Guid.NewGuid();
child.RoleID = roleID;
child.ParentID = newID;
Add(child);
insertChilds(fID, child.ID, roleID, apps);
}
}
/// <summary>
/// 得到一个角色的根
/// </summary>
/// <param name="roleID"></param>
/// <returns></returns>
public RoadFlow.Data.Model.RoleApp GetRootByRoleID(Guid roleID)
{
var roles = GetAllByRoleID(roleID);
return roles.Find(p => p.ParentID == Guid.Empty);
}
}
}