RoadFlow2.1 临时演示

RoleApp.cs 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. namespace RoadFlow.Platform
  6. {
  7. public class RoleApp
  8. {
  9. private RoadFlow.Data.Interface.IRoleApp dataRoleApp;
  10. public RoleApp()
  11. {
  12. this.dataRoleApp = Data.Factory.Factory.GetRoleApp();
  13. }
  14. /// <summary>
  15. /// 新增
  16. /// </summary>
  17. public int Add(RoadFlow.Data.Model.RoleApp model)
  18. {
  19. return dataRoleApp.Add(model);
  20. }
  21. /// <summary>
  22. /// 更新
  23. /// </summary>
  24. public int Update(RoadFlow.Data.Model.RoleApp model)
  25. {
  26. return dataRoleApp.Update(model);
  27. }
  28. /// <summary>
  29. /// 查询所有记录
  30. /// </summary>
  31. public List<RoadFlow.Data.Model.RoleApp> GetAll()
  32. {
  33. return dataRoleApp.GetAll();
  34. }
  35. /// <summary>
  36. /// 查询单条记录
  37. /// </summary>
  38. public RoadFlow.Data.Model.RoleApp Get(Guid id)
  39. {
  40. return dataRoleApp.Get(id);
  41. }
  42. /// <summary>
  43. /// 删除
  44. /// </summary>
  45. public int Delete(Guid id)
  46. {
  47. return dataRoleApp.Delete(id);
  48. }
  49. /// <summary>
  50. /// 查询记录条数
  51. /// </summary>
  52. public long GetCount()
  53. {
  54. return dataRoleApp.GetCount();
  55. }
  56. /// <summary>
  57. /// 查询一个角色所有记录
  58. /// </summary>
  59. public List<RoadFlow.Data.Model.RoleApp> GetAllByRoleID(Guid roleID)
  60. {
  61. return dataRoleApp.GetAllByRoleID(roleID);
  62. }
  63. /// <summary>
  64. /// 查询一个角色所有记录
  65. /// </summary>
  66. public System.Data.DataTable GetAllDataTableByRoleID(Guid roleID)
  67. {
  68. return dataRoleApp.GetAllDataTableByRoleID(roleID);
  69. }
  70. /// <summary>
  71. /// 查询所有记录
  72. /// </summary>
  73. public System.Data.DataTable GetAllDataTable()
  74. {
  75. return dataRoleApp.GetAllDataTable();
  76. }
  77. /// <summary>
  78. /// 查询单条记录
  79. /// </summary>
  80. public System.Data.DataRow GetFromCache(string id)
  81. {
  82. var dt = GetAllDataTableFromCache();
  83. var rows = dt.Select("ID='" + id.ToString() + "'");
  84. return rows.Length > 0 ? rows[0] : null;
  85. }
  86. /// <summary>
  87. /// 查询所有记录(缓存)
  88. /// </summary>
  89. public System.Data.DataTable GetAllDataTableFromCache()
  90. {
  91. string key = RoadFlow.Utility.Keys.CacheKeys.RoleApp.ToString();
  92. object obj = RoadFlow.Cache.IO.Opation.Get(key);
  93. if (obj == null || !(obj is System.Data.DataTable))
  94. {
  95. System.Data.DataTable dt = GetAllDataTable();
  96. RoadFlow.Cache.IO.Opation.Set(key, dt);
  97. return dt;
  98. }
  99. else
  100. {
  101. return obj as System.Data.DataTable;
  102. }
  103. }
  104. /// <summary>
  105. /// 清空缓存
  106. /// </summary>
  107. public void ClearAllDataTableCache()
  108. {
  109. string key = RoadFlow.Utility.Keys.CacheKeys.RoleApp.ToString();
  110. RoadFlow.Cache.IO.Opation.Remove(key);
  111. }
  112. /// <summary>
  113. /// 查询下级记录
  114. /// </summary>
  115. public System.Data.DataTable GetChildsDataTable(Guid id)
  116. {
  117. return dataRoleApp.GetChildsDataTable(id);
  118. }
  119. /// <summary>
  120. /// 查询下级记录
  121. /// </summary>
  122. public List<RoadFlow.Data.Model.RoleApp> GetChild(Guid id)
  123. {
  124. return dataRoleApp.GetChild(id);
  125. }
  126. /// <summary>
  127. /// 得到所有下级
  128. /// </summary>
  129. /// <param name="id"></param>
  130. /// <returns></returns>
  131. public List<RoadFlow.Data.Model.RoleApp> GetAllChild(Guid id)
  132. {
  133. List<RoadFlow.Data.Model.RoleApp> list = new List<RoadFlow.Data.Model.RoleApp>();
  134. var childs = GetChild(id);
  135. foreach (var child in childs)
  136. {
  137. list.Add(child);
  138. addChilds(list, child.ID);
  139. }
  140. return list;
  141. }
  142. private void addChilds(List<RoadFlow.Data.Model.RoleApp> list, Guid id)
  143. {
  144. var childs = GetChild(id);
  145. foreach (var child in childs)
  146. {
  147. list.Add(child);
  148. addChilds(list, child.ID);
  149. }
  150. }
  151. /// <summary>
  152. /// 删除当有应用和所有下级应用
  153. /// </summary>
  154. /// <param name="id"></param>
  155. /// <returns></returns>
  156. public int DeleteAndAllChilds(Guid id)
  157. {
  158. var childs = GetAllChild(id);
  159. int i = 0;
  160. foreach (var child in childs)
  161. {
  162. i += Delete(child.ID);
  163. }
  164. i += Delete(id);
  165. return i;
  166. }
  167. /// <summary>
  168. /// 是否有下级记录
  169. /// </summary>
  170. public bool HasChild(Guid id)
  171. {
  172. return dataRoleApp.HasChild(id);
  173. }
  174. /// <summary>
  175. /// 更新排序
  176. /// </summary>
  177. public int UpdateSort(Guid id, int sort)
  178. {
  179. return dataRoleApp.UpdateSort(id, sort);
  180. }
  181. /// <summary>
  182. /// 删除一个角色记录
  183. /// </summary>
  184. public int DeleteByRoleID(Guid roleID)
  185. {
  186. return dataRoleApp.DeleteByRoleID(roleID);
  187. }
  188. /// <summary>
  189. /// 删除一个应用记录
  190. /// </summary>
  191. public int DeleteByAppID(Guid appID)
  192. {
  193. return dataRoleApp.DeleteByAppID(appID);
  194. }
  195. /// <summary>
  196. /// 克隆表
  197. /// </summary>
  198. /// <param name="dt"></param>
  199. /// <returns></returns>
  200. public DataTable CloneDataTable(DataTable dt)
  201. {
  202. DataTable dt1 = dt.Clone();
  203. dt1.Merge(dt);
  204. return dt1;
  205. }
  206. /// <summary>
  207. /// 得到角色应用JSON
  208. /// </summary>
  209. /// <param name="roleID"></param>
  210. /// <returns></returns>
  211. public string GetRoleAppJsonString(Guid roleID, Guid userID, string rootDir="")
  212. {
  213. RoleApp RoleApp = new RoadFlow.Platform.RoleApp();
  214. UsersApp UsersApp = new Platform.UsersApp();
  215. AppLibrary Applibary = new AppLibrary();
  216. System.Data.DataTable roleAppDt = RoleApp.GetAllDataTableFromCache();
  217. System.Data.DataTable appDt = CloneDataTable(roleAppDt);
  218. UsersApp.AppendUserApps(userID, appDt);
  219. if (appDt.Rows.Count == 0)
  220. {
  221. return "[]";
  222. }
  223. var root = appDt.Select(string.Format("ParentID='{0}' AND RoleID='{1}'", Guid.Empty.ToString(), roleID));
  224. if (root.Length == 0)
  225. {
  226. return "[]";
  227. }
  228. var apps = appDt.Select(string.Format("ParentID='{0}'", root[0]["ID"].ToString()));
  229. System.Text.StringBuilder json = new System.Text.StringBuilder("[", 1000);
  230. System.Data.DataRow rootDr = root[0];
  231. json.Append("{");
  232. json.AppendFormat("\"id\":\"{0}\",", rootDr["ID"].ToString());
  233. json.AppendFormat("\"title\":\"{0}\",", rootDr["Title"].ToString().Trim());
  234. json.AppendFormat("\"ico\":\"{0}\",", rootDr["Ico"].ToString().IsNullOrEmpty() ? "" : rootDir + rootDr["Ico"].ToString());
  235. json.AppendFormat("\"link\":\"{0}\",", getAddress(rootDr).ToString());
  236. json.AppendFormat("\"model\":\"{0}\",", rootDr["OpenMode"].ToString());
  237. json.AppendFormat("\"width\":\"{0}\",", rootDr["Width"].ToString());
  238. json.AppendFormat("\"height\":\"{0}\",", rootDr["Height"].ToString());
  239. json.AppendFormat("\"hasChilds\":\"{0}\",", apps.Length > 0 ? "1" : "0");
  240. json.AppendFormat("\"childs\":[");
  241. for (int i = 0; i < apps.Length; i++)
  242. {
  243. DataRow dr = apps[i];
  244. if (!dr["UseMember"].ToString().IsNullOrEmpty() && dr["AppID"].ToString().IsGuid()
  245. && !Applibary.GetUseMemberCache(dr["AppID"].ToString().ToGuid()).Contains(userID))
  246. {
  247. continue;
  248. }
  249. var childs = appDt.Select("ParentID='" + dr["ID"].ToString() + "'");
  250. json.Append("{");
  251. json.AppendFormat("\"id\":\"{0}\",", dr["ID"].ToString());
  252. json.AppendFormat("\"title\":\"{0}\",", dr["Title"].ToString());
  253. json.AppendFormat("\"ico\":\"{0}\",", dr["Ico"].ToString().IsNullOrEmpty() ? "" : rootDir + dr["Ico"].ToString());
  254. json.AppendFormat("\"link\":\"{0}\",", getAddress(dr));
  255. json.AppendFormat("\"model\":\"{0}\",", dr["OpenMode"].ToString());
  256. json.AppendFormat("\"width\":\"{0}\",", dr["Width"].ToString());
  257. json.AppendFormat("\"height\":\"{0}\",", dr["Height"].ToString());
  258. json.AppendFormat("\"hasChilds\":\"{0}\",", childs.Length > 0 ? "1" : "0");
  259. json.AppendFormat("\"childs\":[");
  260. /* DataRow[] apps1 = appDt.Select(string.Format("ParentID='{0}'", dr["ID"].ToString()));
  261. for (int j = 0; j < apps1.Length; j++)
  262. {
  263. DataRow dr1 = apps1[j];
  264. var childs1 = appDt.Select("ParentID='" + dr1["ID"].ToString() + "'");
  265. json.Append("{");
  266. json.AppendFormat("\"id\":\"{0}\",", dr1["ID"]);
  267. json.AppendFormat("\"title\":\"{0}\",", dr1["Title"]);
  268. json.AppendFormat("\"ico\":\"{0}\",", dr1["Ico"].ToString().IsNullOrEmpty() ? "" : rootDir + dr1["Ico"]);
  269. json.AppendFormat("\"link\":\"{0}\",", getAddress(dr1));
  270. json.AppendFormat("\"model\":\"{0}\",", dr1["OpenMode"]);
  271. json.AppendFormat("\"width\":\"{0}\",", dr1["Width"]);
  272. json.AppendFormat("\"height\":\"{0}\",", dr1["Height"]);
  273. json.AppendFormat("\"hasChilds\":\"{0}\",", childs1.Length > 0 ? "1" : "0");
  274. json.AppendFormat("\"childs\":[");
  275. json.Append("]");
  276. json.Append("}");
  277. if (j < apps1.Length - 1)
  278. {
  279. json.Append(",");
  280. }
  281. }*/
  282. json.Append("]");
  283. json.Append("}");
  284. if (dr["ID"].ToString() != apps[apps.Length - 1]["ID"].ToString())
  285. {
  286. json.Append(",");
  287. }
  288. }
  289. json.Append("]");
  290. json.Append("}");
  291. json.Append("]");
  292. return json.ToString();
  293. }
  294. /// <summary>
  295. /// 得到角色应用刷新JSON
  296. /// </summary>
  297. /// <returns></returns>
  298. public string GetRoleAppRefreshJsonString(Guid roleID, Guid userID, Guid refreshID, string rootDir = "")
  299. {
  300. RoleApp roleApp = new RoadFlow.Platform.RoleApp();
  301. UsersApp UsersApp = new Platform.UsersApp();
  302. AppLibrary Applibary = new AppLibrary();
  303. DataTable roleAppDt = roleApp.GetAllDataTableFromCache();
  304. DataTable appDt1 = CloneDataTable(roleAppDt);
  305. UsersApp.AppendUserApps(userID, appDt1);
  306. var dv = appDt1.DefaultView;
  307. dv.RowFilter = string.Format("ParentID='{0}'", refreshID);
  308. dv.Sort = "Sort";
  309. var appDt = dv.ToTable();
  310. if (appDt.Rows.Count == 0)
  311. {
  312. return "[]";
  313. }
  314. int count = appDt.Rows.Count;
  315. System.Text.StringBuilder json = new System.Text.StringBuilder("[", count * 100);
  316. foreach (DataRow dr in appDt.Rows)
  317. {
  318. if (!dr["UseMember"].ToString().IsNullOrEmpty() && dr["AppID"].ToString().IsGuid()
  319. && !Applibary.GetUseMemberCache(dr["AppID"].ToString().ToGuid()).Contains(userID))
  320. {
  321. continue;
  322. }
  323. json.Append("{");
  324. json.AppendFormat("\"id\":\"{0}\",", dr["ID"].ToString());
  325. json.AppendFormat("\"title\":\"{0}\",", dr["Title"].ToString().Trim());
  326. json.AppendFormat("\"ico\":\"{0}\",", dr["Ico"].ToString().IsNullOrEmpty() ? "" : rootDir + dr["Ico"].ToString());
  327. json.AppendFormat("\"link\":\"{0}\",", getAddress(dr));
  328. json.AppendFormat("\"model\":\"{0}\",", dr["OpenMode"].ToString());
  329. json.AppendFormat("\"width\":\"{0}\",", dr["Width"].ToString());
  330. json.AppendFormat("\"height\":\"{0}\",", dr["Height"].ToString());
  331. json.AppendFormat("\"hasChilds\":\"{0}\",", appDt1.Select(string.Format("ParentID='{0}'", dr["id"].ToString())).Length > 0 ? "1" : "0");
  332. json.AppendFormat("\"childs\":[");
  333. json.Append("]");
  334. json.Append("}");
  335. if (dr["ID"].ToString() != appDt.Rows[appDt.Rows.Count - 1]["ID"].ToString())
  336. {
  337. json.Append(",");
  338. }
  339. }
  340. json.Append("]");
  341. return json.ToString();
  342. }
  343. /// <summary>
  344. /// 得到应用地址
  345. /// </summary>
  346. /// <param name="dr"></param>
  347. /// <returns></returns>
  348. private string getAddress(System.Data.DataRow dr)
  349. {
  350. string address = dr["Address"].ToString().Trim();
  351. string params1 = dr["Params"].ToString().Trim();
  352. string params2 = dr["Params1"].ToString().Trim();
  353. StringBuilder sb = new StringBuilder();
  354. if (params1.IsNullOrEmpty() && params2.IsNullOrEmpty())
  355. {
  356. return address;
  357. }
  358. if (!params2.IsNullOrEmpty())
  359. {
  360. sb.Append(params2.TrimStart('?').TrimStart('&').TrimEnd('&').TrimEnd('?'));
  361. }
  362. if (!params1.IsNullOrEmpty())
  363. {
  364. sb.Append('&');
  365. sb.Append(params1.TrimStart('?').TrimStart('&').TrimEnd('&').TrimEnd('?'));
  366. }
  367. return address.Contains("?") ? string.Concat(address, "&", sb.ToString()) : string.Concat(address, "?", sb.ToString());
  368. }
  369. /// <summary>
  370. /// 得到最大排序值
  371. /// </summary>
  372. /// <param name="id"></param>
  373. /// <returns></returns>
  374. public int GetMaxSort(Guid id)
  375. {
  376. return dataRoleApp.GetMaxSort(id);
  377. }
  378. /// <summary>
  379. /// 复制角色应用
  380. /// </summary>
  381. /// <param name="fromID"></param>
  382. /// <param name="toID"></param>
  383. /// <returns></returns>
  384. public bool CopyRoleApp(Guid fromID, Guid toID)
  385. {
  386. var toRole = new Role().Get(toID);
  387. if (toRole == null)
  388. {
  389. return false;
  390. }
  391. using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
  392. {
  393. DeleteByRoleID(toID);//先删除要复制的角色
  394. var apps = GetAllByRoleID(fromID);
  395. var root = apps.Find(p => p.ParentID == Guid.Empty);
  396. if (root != null)
  397. {
  398. Guid fID = root.ID;
  399. root.ID = Guid.NewGuid();
  400. root.RoleID = toID;
  401. Add(root);
  402. insertChilds(fID, root.ID, toID, apps);
  403. }
  404. scope.Complete();
  405. return true;
  406. }
  407. }
  408. private void insertChilds(Guid oldID, Guid newID, Guid roleID, List<RoadFlow.Data.Model.RoleApp> apps)
  409. {
  410. var childs = apps.FindAll(p => p.ParentID == oldID);
  411. foreach (var child in childs)
  412. {
  413. Guid fID = child.ID;
  414. child.ID = Guid.NewGuid();
  415. child.RoleID = roleID;
  416. child.ParentID = newID;
  417. Add(child);
  418. insertChilds(fID, child.ID, roleID, apps);
  419. }
  420. }
  421. /// <summary>
  422. /// 得到一个角色的根
  423. /// </summary>
  424. /// <param name="roleID"></param>
  425. /// <returns></returns>
  426. public RoadFlow.Data.Model.RoleApp GetRootByRoleID(Guid roleID)
  427. {
  428. var roles = GetAllByRoleID(roleID);
  429. return roles.Find(p => p.ParentID == Guid.Empty);
  430. }
  431. }
  432. }