Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

358 řádky
14 KiB

  1. using Learun.DataBase.Repository;
  2. using Learun.Util;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. namespace Learun.Application.Base.Files
  7. {
  8. /// <summary>
  9. /// 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架
  10. /// Copyright (c) 2013-2018 上海力软信息技术有限公司
  11. /// 创 建:超级管理员
  12. /// 日 期:2019-11-28 09:23
  13. /// 描 述:文件夹管理
  14. /// </summary>
  15. public class FolderService : RepositoryFactory
  16. {
  17. #region 获取数据
  18. /// <summary>
  19. /// 获取页面显示列表数据
  20. /// </summary>
  21. /// <param name="keyWord">关键字</param>
  22. /// <param name="pId">父级id</param>
  23. /// <returns></returns>
  24. public IEnumerable<FolderEntity> GetList(string keyWord,string pId)
  25. {
  26. try
  27. {
  28. var strSql = new StringBuilder();
  29. strSql.Append("SELECT ");
  30. strSql.Append(@"
  31. t.F_Id,
  32. t.F_PId,
  33. t.F_Name,
  34. t.F_Time
  35. ");
  36. strSql.Append(" FROM lr_base_folder t ");
  37. strSql.Append(" WHERE 1=1 ");
  38. if (!string.IsNullOrEmpty(pId)) {
  39. strSql.Append(" AND t.F_PId = @pId ");
  40. }
  41. if (!string.IsNullOrEmpty(keyWord))
  42. {
  43. keyWord = "%" + keyWord + "%";
  44. strSql.Append(" AND t.F_Name Like @keyWord ");
  45. }
  46. strSql.Append(" Order by F_Name ");
  47. return this.BaseRepository().FindList<FolderEntity>(strSql.ToString(), new { keyWord, pId });
  48. }
  49. catch (Exception ex)
  50. {
  51. if (ex is ExceptionEx)
  52. {
  53. throw;
  54. }
  55. else
  56. {
  57. throw ExceptionEx.ThrowServiceException(ex);
  58. }
  59. }
  60. }
  61. /// <summary>
  62. /// 获取lr_base_folder表实体数据
  63. /// </summary>
  64. /// <param name="keyValue">主键</param>
  65. /// <returns></returns>
  66. public FolderEntity GetEntity(string keyValue)
  67. {
  68. try
  69. {
  70. return this.BaseRepository().FindEntity<FolderEntity>(keyValue);
  71. }
  72. catch (Exception ex)
  73. {
  74. if (ex is ExceptionEx)
  75. {
  76. throw;
  77. }
  78. else
  79. {
  80. throw ExceptionEx.ThrowServiceException(ex);
  81. }
  82. }
  83. }
  84. #endregion
  85. #region 提交数据
  86. /// <summary>
  87. /// 删除实体数据
  88. /// </summary>
  89. /// <param name="keyValue"></param>
  90. /// <returns></returns>
  91. public bool DeleteEntity(string keyValue)
  92. {
  93. var fileList = (List<FileBInfoEntity>)this.BaseRepository().FindList<FileBInfoEntity>(" select * from lr_base_fileinfo where F_IsPublish = 1 AND F_Folder = @folderId ", new { folderId = keyValue });
  94. if (fileList.Count > 0)
  95. {
  96. return false;
  97. }
  98. var folderList = (List<FolderEntity>)this.BaseRepository().FindList<FolderEntity>(" select * from lr_base_folder where F_PId = @folderId ", new { folderId = keyValue });
  99. if (fileList.Count > 0)
  100. {
  101. return false;
  102. }
  103. var authList = this.BaseRepository().FindList<FileAuthEntity>(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId ", new { F_FileInfoId = keyValue });
  104. var db = this.BaseRepository().BeginTrans();
  105. try
  106. {
  107. foreach (var item in authList) {
  108. db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId ", new { fromId = item.F_Id });
  109. }
  110. db.Delete<FolderEntity>(t => t.F_Id == keyValue);
  111. db.Commit();
  112. return true;
  113. }
  114. catch (Exception ex)
  115. {
  116. db.Rollback();
  117. if (ex is ExceptionEx)
  118. {
  119. throw;
  120. }
  121. else
  122. {
  123. throw ExceptionEx.ThrowServiceException(ex);
  124. }
  125. }
  126. }
  127. /// <summary>
  128. /// 保存实体数据(新增、修改)
  129. /// </summary>
  130. /// <param name="keyValue">主键</param>
  131. /// <param name="entity">实体</param>
  132. public void SaveEntity(string keyValue, FolderEntity entity)
  133. {
  134. var db = this.BaseRepository().BeginTrans();
  135. try
  136. {
  137. if (!string.IsNullOrEmpty(keyValue))
  138. {
  139. entity.Modify(keyValue);
  140. var entityTmp = db.FindEntity<FolderEntity>("select * from lr_base_folder where F_Id = @keyValue",new { keyValue });
  141. if (entityTmp.F_PId != entity.F_PId) {// 修改了上级了目录需要调整权限
  142. if (entityTmp.F_PId != "0") { // 需要删除原先继承过来的权限
  143. var authList = db.FindList<FileAuthEntity>(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId ", new { F_FileInfoId = keyValue });
  144. foreach (var item in authList)
  145. {
  146. if (item.F_Type == 1)// 来自上级文件夹的需要删除
  147. {
  148. db.ExecuteBySql(" delete from lr_base_fileauth where F_Id =@id ", new { id = item.F_Id });
  149. db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId AND F_Level > @deep AND F_Type = 1 ", new { fromId = item.F_from, deep = item.F_Level });
  150. }
  151. else {
  152. if (item.F_Type == 0)
  153. {
  154. item.F_from = item.F_Id;
  155. }
  156. db.ExecuteBySql(" delete from lr_base_fileauth where F_from =@fromId AND F_Level > @deep AND F_Type = 2 ", new { fromId = item.F_from, deep = item.F_Level });
  157. }
  158. }
  159. }
  160. if (entity.F_PId != "0") { // 添加新的权限
  161. var authList2 = db.FindList<FileAuthEntity>(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId AND F_Type != 2 ", new { F_FileInfoId = entity.F_PId });
  162. foreach (var item in authList2)
  163. {
  164. if (item.F_Type == 0)
  165. {
  166. item.F_from = item.F_Id;
  167. }
  168. FileAuthEntity authEntity = new FileAuthEntity()
  169. {
  170. F_Id = Guid.NewGuid().ToString(),
  171. F_AuthType = "1",
  172. F_FileInfoId = entity.F_Id,
  173. F_from = item.F_from,
  174. F_ObjId = item.F_ObjId,
  175. F_ObjName = item.F_ObjName,
  176. F_ObjType = item.F_ObjType,
  177. F_Time = item.F_Time,
  178. F_Type = 1,
  179. F_IsFolder = 1,
  180. F_Level = item.F_Level + 1
  181. };
  182. db.Insert(authEntity);
  183. SaveXJEntity(entity.F_Id, item.F_from, item, authEntity.F_Level + 1, db);
  184. }
  185. // 将自己的权限赋值给上级目录
  186. var authList3 = db.FindList<FileAuthEntity>(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId AND F_Type != 1 ", new { F_FileInfoId = entity.F_Id });
  187. foreach (var item in authList3)
  188. {
  189. if (item.F_Type == 0)
  190. {
  191. item.F_from = item.F_Id;
  192. }
  193. SaveSJEntity(entity.F_PId, item.F_from, item, item.F_Level + 1, db);
  194. }
  195. }
  196. }
  197. db.Update(entity);
  198. }
  199. else
  200. {
  201. entity.Create();
  202. db.Insert(entity);
  203. if (entity.F_PId != "0") {
  204. // 继承上级文件夹的权限
  205. var authList = db.FindList<FileAuthEntity>(" select * from lr_base_fileauth t where t.F_FileInfoId = @F_FileInfoId ", new { F_FileInfoId = entity.F_PId });
  206. foreach(var item in authList) {
  207. if (item.F_Type != 2) {
  208. if (item.F_Type == 0) {
  209. item.F_from = item.F_Id;
  210. }
  211. FileAuthEntity authEntity = new FileAuthEntity()
  212. {
  213. F_Id = Guid.NewGuid().ToString(),
  214. F_AuthType = "1",
  215. F_FileInfoId = entity.F_Id,
  216. F_from = item.F_from,
  217. F_ObjId = item.F_ObjId,
  218. F_ObjName = item.F_ObjName,
  219. F_ObjType = item.F_ObjType,
  220. F_Time = item.F_Time,
  221. F_Type = 1,
  222. F_IsFolder = 1,
  223. F_Level = item.F_Level + 1
  224. };
  225. db.Insert(authEntity);
  226. }
  227. }
  228. }
  229. }
  230. db.Commit();
  231. }
  232. catch (Exception ex)
  233. {
  234. db.Rollback();
  235. if (ex is ExceptionEx)
  236. {
  237. throw;
  238. }
  239. else
  240. {
  241. throw ExceptionEx.ThrowServiceException(ex);
  242. }
  243. }
  244. }
  245. /// <summary>
  246. /// 保存上级目录权限设置
  247. /// </summary>
  248. /// <param name="folderId"></param>
  249. /// <param name="fromId"></param>
  250. /// <param name="fromEntity"></param>
  251. /// <param name="deep"></param>
  252. /// <param name="db"></param>
  253. private void SaveSJEntity(string folderId, string fromId, FileAuthEntity fromEntity, int deep, IRepository db)
  254. {
  255. if (folderId != "0")
  256. {
  257. FileAuthEntity entity = new FileAuthEntity()
  258. {
  259. F_Id = Guid.NewGuid().ToString(),
  260. F_AuthType = "1",
  261. F_FileInfoId = folderId,
  262. F_from = fromId,
  263. F_ObjId = fromEntity.F_ObjId,
  264. F_ObjName = fromEntity.F_ObjName,
  265. F_ObjType = fromEntity.F_ObjType,
  266. F_Time = fromEntity.F_Time,
  267. F_Type = 2,
  268. F_IsFolder = 1,
  269. F_Level = deep
  270. };
  271. db.Insert(entity);
  272. var folderEntity = db.FindEntity<FolderEntity>(folderId);
  273. SaveSJEntity(folderEntity.F_PId, fromId, fromEntity, deep + 1, db);
  274. }
  275. }
  276. /// <summary>
  277. /// 保存下级目录权限设置
  278. /// </summary>
  279. /// <param name="folderId"></param>
  280. /// <param name="fromId"></param>
  281. /// <param name="fromEntity"></param>
  282. /// <param name="deep"></param>
  283. /// <param name="db"></param>
  284. private void SaveXJEntity(string folderId, string fromId, FileAuthEntity fromEntity, int deep, IRepository db)
  285. {
  286. // 获取文件
  287. var fileList = db.FindList<FileBInfoEntity>(" select * from lr_base_fileinfo where F_IsPublish = 1 AND F_Folder = @folderId ", new { folderId });
  288. foreach (var item in fileList)
  289. {
  290. FileAuthEntity fileAuth = new FileAuthEntity()
  291. {
  292. F_Id = Guid.NewGuid().ToString(),
  293. F_AuthType = fromEntity.F_AuthType,
  294. F_FileInfoId = item.F_Id,
  295. F_from = fromId,
  296. F_ObjId = fromEntity.F_ObjId,
  297. F_ObjName = fromEntity.F_ObjName,
  298. F_ObjType = fromEntity.F_ObjType,
  299. F_Time = fromEntity.F_Time,
  300. F_Type = 1,
  301. F_IsFolder = 0,
  302. F_Level = deep
  303. };
  304. db.Insert(fileAuth);
  305. }
  306. // 获取文件夹
  307. var folderList = db.FindList<FolderEntity>(" select * from lr_base_folder where F_PId = @folderId ", new { folderId });
  308. foreach (var item in folderList)
  309. {
  310. FileAuthEntity folderAuth = new FileAuthEntity()
  311. {
  312. F_Id = Guid.NewGuid().ToString(),
  313. F_AuthType = fromEntity.F_AuthType,
  314. F_FileInfoId = item.F_Id,
  315. F_from = fromId,
  316. F_ObjId = fromEntity.F_ObjId,
  317. F_ObjName = fromEntity.F_ObjName,
  318. F_ObjType = fromEntity.F_ObjType,
  319. F_Time = fromEntity.F_Time,
  320. F_Type = 1,
  321. F_IsFolder = 1,
  322. F_Level = deep
  323. };
  324. db.Insert(folderAuth);
  325. SaveXJEntity(item.F_Id, fromId, fromEntity, deep + 1, db);
  326. }
  327. }
  328. #endregion
  329. }
  330. }