RoadFlow2.1 临时演示

Organize.cs 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Linq;
  5. namespace RoadFlow.Platform
  6. {
  7. public class Organize
  8. {
  9. private RoadFlow.Data.Interface.IOrganize dataOrganize;
  10. public Organize()
  11. {
  12. this.dataOrganize = Data.Factory.Factory.GetOrganize();
  13. }
  14. /// <summary>
  15. /// 新增
  16. /// </summary>
  17. public int Add(RoadFlow.Data.Model.Organize model)
  18. {
  19. return dataOrganize.Add(model);
  20. }
  21. /// <summary>
  22. /// 更新
  23. /// </summary>
  24. public int Update(RoadFlow.Data.Model.Organize model)
  25. {
  26. return dataOrganize.Update(model);
  27. }
  28. /// <summary>
  29. /// 查询所有记录
  30. /// </summary>
  31. public List<RoadFlow.Data.Model.Organize> GetAll()
  32. {
  33. return dataOrganize.GetAll();
  34. }
  35. /// <summary>
  36. /// 查询单条记录
  37. /// </summary>
  38. public RoadFlow.Data.Model.Organize Get(Guid id)
  39. {
  40. return dataOrganize.Get(id);
  41. }
  42. /// <summary>
  43. /// 删除
  44. /// </summary>
  45. public int Delete(Guid id)
  46. {
  47. return dataOrganize.Delete(id);
  48. }
  49. /// <summary>
  50. /// 查询记录条数
  51. /// </summary>
  52. public long GetCount()
  53. {
  54. return dataOrganize.GetCount();
  55. }
  56. /// <summary>
  57. /// 根据根记录
  58. /// </summary>
  59. public RoadFlow.Data.Model.Organize GetRoot()
  60. {
  61. return dataOrganize.GetRoot();
  62. }
  63. /// <summary>
  64. /// 查询下级记录
  65. /// </summary>
  66. public List<RoadFlow.Data.Model.Organize> GetChilds(Guid ID)
  67. {
  68. return dataOrganize.GetChilds(ID);
  69. }
  70. /// <summary>
  71. /// 机构类型
  72. /// </summary>
  73. private Dictionary<int,string> types
  74. {
  75. get
  76. {
  77. var dict = new Dictionary<int, string>();
  78. dict.Add(1, "单位");
  79. dict.Add(2, "部门");
  80. dict.Add(3, "岗位");
  81. return dict;
  82. }
  83. }
  84. /// <summary>
  85. /// 状态
  86. /// </summary>
  87. private Dictionary<int, string> status
  88. {
  89. get
  90. {
  91. var dict = new Dictionary<int, string>();
  92. dict.Add(0, "正常");
  93. dict.Add(1, "冻结");
  94. return dict;
  95. }
  96. }
  97. /// <summary>
  98. /// 得到类型选择
  99. /// </summary>
  100. /// <param name="value"></param>
  101. /// <returns></returns>
  102. public string GetTypeRadio(string name, string value = "", string attributes="")
  103. {
  104. StringBuilder radios = new StringBuilder();
  105. foreach (var type in types)
  106. {
  107. 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>",
  108. type.Key,
  109. type.Key.ToString() == value ? "checked=\"checked\"" : "",
  110. name,
  111. attributes,
  112. type.Value);
  113. }
  114. return radios.ToString();
  115. }
  116. /// <summary>
  117. /// 得到状态选择
  118. /// </summary>
  119. /// <param name="value"></param>
  120. /// <returns></returns>
  121. public string GetStatusRadio(string name, string value = "", string attributes = "")
  122. {
  123. StringBuilder radios = new StringBuilder();
  124. foreach (var statu in status)
  125. {
  126. 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>",
  127. statu.Key,
  128. statu.Key.ToString() == value ? "checked=\"checked\"" : "",
  129. name,
  130. attributes,
  131. statu.Value);
  132. }
  133. return radios.ToString();
  134. }
  135. /// <summary>
  136. /// 得到一个父级下的最大排序值
  137. /// </summary>
  138. /// <returns></returns>
  139. public int GetMaxSort(Guid id)
  140. {
  141. return dataOrganize.GetMaxSort(id);
  142. }
  143. /// <summary>
  144. /// 得到一个机构下的所有人员
  145. /// </summary>
  146. /// <param name="id"></param>
  147. /// <returns></returns>
  148. public List<RoadFlow.Data.Model.Users> GetAllUsers(Guid id)
  149. {
  150. var childs = GetAllChilds(id);
  151. List<Guid> ids = new List<Guid>();
  152. ids.Add(id);
  153. foreach (var child in childs)
  154. {
  155. ids.Add(child.ID);
  156. }
  157. return new Users().GetAllByOrganizeIDArray(ids.ToArray());
  158. }
  159. /// <summary>
  160. /// 得到一组机构字符串下所有人员
  161. /// </summary>
  162. /// <param name="idString"></param>
  163. /// <returns></returns>
  164. public List<RoadFlow.Data.Model.Users> GetAllUsers(string idString)
  165. {
  166. if (idString.IsNullOrEmpty())
  167. {
  168. return new List<RoadFlow.Data.Model.Users>();
  169. }
  170. string[] idArray = idString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  171. List<RoadFlow.Data.Model.Users> userList = new List<RoadFlow.Data.Model.Users>();
  172. Users busers = new Users();
  173. WorkGroup bwg = new WorkGroup();
  174. foreach (string id in idArray)
  175. {
  176. if (id.StartsWith(Users.PREFIX))//人员
  177. {
  178. userList.Add(busers.Get(Users.RemovePrefix(id).ToGuid()));
  179. }
  180. else if (id.IsGuid())//机构
  181. {
  182. userList.AddRange(GetAllUsers(id.ToGuid()));
  183. }
  184. else if (id.StartsWith(WorkGroup.PREFIX))//工作组
  185. {
  186. addWorkGroupUsers(userList, bwg.Get(WorkGroup.RemovePrefix(id).ToGuid()));
  187. }
  188. }
  189. userList.RemoveAll(p => p == null);
  190. return userList.Distinct(new UsersEqualityComparer()).ToList();
  191. }
  192. private void addWorkGroupUsers(List<RoadFlow.Data.Model.Users> userList, RoadFlow.Data.Model.WorkGroup wg)
  193. {
  194. if (wg == null || wg.Members.IsNullOrEmpty())
  195. {
  196. return;
  197. }
  198. string[] idArray = wg.Members.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  199. Users busers = new Users();
  200. WorkGroup bwg = new WorkGroup();
  201. foreach (var id in idArray)
  202. {
  203. if (id.StartsWith(Users.PREFIX))//人员
  204. {
  205. userList.Add(busers.Get(Users.RemovePrefix(id).ToGuid()));
  206. }
  207. else if (id.IsGuid())//机构
  208. {
  209. userList.AddRange(GetAllUsers(id.ToGuid()));
  210. }
  211. else if (id.StartsWith(WorkGroup.PREFIX))//工作组
  212. {
  213. addWorkGroupUsers(userList, bwg.Get(WorkGroup.RemovePrefix(id).ToGuid()));
  214. }
  215. }
  216. }
  217. /// <summary>
  218. /// 得到一组机构字符串下所有人员ID
  219. /// </summary>
  220. /// <param name="idString"></param>
  221. /// <returns></returns>
  222. public List<Guid> GetAllUsersIdList(string idString)
  223. {
  224. var users = GetAllUsers(idString);
  225. List<Guid> list = new List<Guid>();
  226. foreach (var user in users)
  227. {
  228. if (user != null)
  229. {
  230. list.Add(user.ID);
  231. }
  232. }
  233. return list;
  234. }
  235. /// <summary>
  236. /// 得到一组机构字符串下所有人员ID
  237. /// </summary>
  238. /// <param name="idString"></param>
  239. /// <returns></returns>
  240. public List<Guid> GetAllUsersIdList(Guid id)
  241. {
  242. var users = GetAllUsers(id);
  243. List<Guid> list = new List<Guid>();
  244. foreach (var user in users)
  245. {
  246. if (user != null)
  247. {
  248. list.Add(user.ID);
  249. }
  250. }
  251. return list;
  252. }
  253. /// <summary>
  254. /// 更新下级数
  255. /// </summary>
  256. /// <returns></returns>
  257. public int UpdateChildsLength(Guid id)
  258. {
  259. int i = 0;
  260. var org = Get(id);
  261. if (org == null)
  262. {
  263. return i;
  264. }
  265. i = GetChilds(id).Count;
  266. i += GetAllUsers(id).Count;
  267. dataOrganize.UpdateChildsLength(id, i);
  268. return i;
  269. }
  270. /// <summary>
  271. /// 更新排序
  272. /// </summary>
  273. /// <returns></returns>
  274. public int UpdateSort(Guid id, int sort)
  275. {
  276. return dataOrganize.UpdateSort(id, sort);
  277. }
  278. /// <summary>
  279. /// 查询一个组织的所有上级
  280. /// </summary>
  281. public List<RoadFlow.Data.Model.Organize> GetAllParent(string number)
  282. {
  283. return number.IsNullOrEmpty() ? new List<RoadFlow.Data.Model.Organize>() : dataOrganize.GetAllParent(number);
  284. }
  285. /// <summary>
  286. /// 查询一个组织的所有上级
  287. /// </summary>
  288. public List<RoadFlow.Data.Model.Organize> GetAllParent(Guid id)
  289. {
  290. var org = Get(id);
  291. if (org == null)
  292. {
  293. return new List<RoadFlow.Data.Model.Organize>();
  294. }
  295. return dataOrganize.GetAllParent(org.Number);
  296. }
  297. /// <summary>
  298. /// 查询一个组织的所有下级
  299. /// </summary>
  300. /// <param name="number">编号</param>
  301. /// <returns></returns>
  302. public List<RoadFlow.Data.Model.Organize> GetAllChilds(string number)
  303. {
  304. return number.IsNullOrEmpty() ? new List<RoadFlow.Data.Model.Organize>() : dataOrganize.GetAllChild(number);
  305. }
  306. /// <summary>
  307. /// 查询一个组织的所有下级
  308. /// </summary>
  309. /// <param name="id"></param>
  310. /// <returns></returns>
  311. public List<RoadFlow.Data.Model.Organize> GetAllChilds(Guid id)
  312. {
  313. var org = Get(id);
  314. if (org == null)
  315. {
  316. return new List<RoadFlow.Data.Model.Organize>();
  317. }
  318. return dataOrganize.GetAllChild(org.Number);
  319. }
  320. /// <summary>
  321. /// 查询一个机构的所有上级名称
  322. /// </summary>
  323. /// <param name="id"></param>
  324. /// <param name="split">分隔字符串</param>
  325. /// <param name="reverse">是否倒置</param>
  326. /// <returns></returns>
  327. public string GetAllParentNames(Guid id, bool reverse = false, string split = " / ")
  328. {
  329. var parents = GetAllParent(id);
  330. if (reverse)
  331. {
  332. parents.Reverse();
  333. }
  334. StringBuilder names = new StringBuilder(parents.Count * 100);
  335. int i=0;
  336. foreach (var parent in parents)
  337. {
  338. names.Append(parent.Name);
  339. if (i++ < parents.Count - 1)
  340. {
  341. names.Append(split);
  342. }
  343. }
  344. return names.ToString();
  345. }
  346. /// <summary>
  347. /// 将一个机构移动到另一个机构下
  348. /// </summary>
  349. /// <param name="fromID">机构ID</param>
  350. /// <param name="toID">要移动到的机构ID</param>
  351. /// <returns></returns>
  352. public bool Move(Guid fromID, Guid toID)
  353. {
  354. var from = Get(fromID);
  355. var to = Get(toID);
  356. if (from == null || to == null)
  357. {
  358. return false;
  359. }
  360. if (to.Number.StartsWith(from.Number, StringComparison.CurrentCultureIgnoreCase))
  361. {
  362. return false;
  363. }
  364. using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
  365. {
  366. Guid oldParentID = from.ParentID;
  367. from.ParentID = toID;
  368. from.Depth = to.Depth + 1;
  369. from.Number = to.Number + "," + from.ID.ToString();
  370. Update(from);
  371. var childs = GetAllChilds(fromID).OrderBy(p => p.Depth);
  372. foreach (var child in childs)
  373. {
  374. child.Number = Get(child.ParentID).Number + "," + child.ID.ToString();
  375. child.Depth = child.Number.Split(',').Length - 1;
  376. Update(child);
  377. }
  378. UpdateChildsLength(toID);
  379. UpdateChildsLength(oldParentID);
  380. scope.Complete();
  381. return true;
  382. }
  383. }
  384. /// <summary>
  385. /// 根据ID得到名称
  386. /// </summary>
  387. /// <param name="id"></param>
  388. /// <returns></returns>
  389. public string GetName(Guid id)
  390. {
  391. var org = Get(id);
  392. return org == null ? "" : org.Name;
  393. }
  394. /// <summary>
  395. /// 根据ID得到名称(有前缀的情况)
  396. /// </summary>
  397. /// <param name="id"></param>
  398. /// <returns></returns>
  399. public string GetName(string id)
  400. {
  401. string name = string.Empty;
  402. if (id.IsGuid())//机构
  403. {
  404. return GetName(id.ToGuid());
  405. }
  406. else if (id.StartsWith(Users.PREFIX))//用户
  407. {
  408. string uid = Users.RemovePrefix(id);
  409. Guid userID;
  410. if(!uid.IsGuid(out userID))
  411. {
  412. return "";
  413. }
  414. else
  415. {
  416. return new Users().GetName(userID);
  417. }
  418. }
  419. else if (id.StartsWith(WorkGroup.PREFIX))//工作组
  420. {
  421. string uid = WorkGroup.RemovePrefix(id);
  422. Guid wid;
  423. if (!uid.IsGuid(out wid))
  424. {
  425. return "";
  426. }
  427. else
  428. {
  429. return new WorkGroup().GetName(wid);
  430. }
  431. }
  432. return "";
  433. }
  434. /// <summary>
  435. /// 得到一组机构的名称(逗号分隔,有前缀)
  436. /// </summary>
  437. /// <param name="idString"></param>
  438. /// <param name="split">分隔符</param>
  439. /// <returns></returns>
  440. public string GetNames(string idString, string split=",")
  441. {
  442. if (idString.IsNullOrEmpty())
  443. {
  444. return "";
  445. }
  446. string[] array = idString.Split(',');
  447. StringBuilder sb = new StringBuilder(array.Length * 50);
  448. int i = 0;
  449. foreach (var arr in array)
  450. {
  451. if (arr.IsNullOrEmpty())
  452. {
  453. continue;
  454. }
  455. sb.Append(GetName(arr));
  456. if(i++<array.Length-1)
  457. {
  458. sb.Append(split);
  459. }
  460. }
  461. return sb.ToString();
  462. }
  463. /// <summary>
  464. /// 删除一个机构及其所有下级(包括下级人员)
  465. /// </summary>
  466. /// <param name="orgID"></param>
  467. /// <returns></returns>
  468. public int DeleteAndAllChilds(Guid orgID)
  469. {
  470. int i = 0;
  471. using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
  472. {
  473. UsersRelation bur = new UsersRelation();
  474. Users user = new Users();
  475. UsersInfo userInfo = new UsersInfo();
  476. var childs = GetAllChilds(orgID);
  477. foreach (var child in childs)
  478. {
  479. //删除人员及关系
  480. var urs = bur.GetAllByOrganizeID(child.ID);
  481. foreach (var ur in urs)
  482. {
  483. bur.Delete(ur.UserID, ur.OrganizeID);
  484. user.Delete(ur.UserID);
  485. i += userInfo.Delete(ur.UserID);
  486. }
  487. i += Delete(child.ID);
  488. }
  489. //删除人员及关系
  490. var urs1 = bur.GetAllByOrganizeID(orgID);
  491. foreach (var ur in urs1)
  492. {
  493. bur.Delete(ur.UserID, ur.OrganizeID);
  494. user.Delete(ur.UserID);
  495. i += userInfo.Delete(ur.UserID);
  496. }
  497. i += Delete(orgID);
  498. scope.Complete();
  499. }
  500. return i;
  501. }
  502. }
  503. }