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.
 
 
 
 
 
 

415 lines
19 KiB

  1. using Dapper;
  2. using Learun.DataBase.Repository;
  3. using Learun.Util;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Data.Common;
  8. using System.Linq;
  9. using System.Text;
  10. namespace Learun.Application.OA.File.FileInfo
  11. {
  12. /// <summary>
  13. /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
  14. /// Copyright (c) 2013-2017
  15. /// 创建人:陈彬彬
  16. /// 日 期:2018.06.20
  17. /// 描 述:文件管理
  18. /// </summary>
  19. public class FileInfoService : RepositoryFactory
  20. {
  21. #region 获取数据
  22. public IEnumerable<FileInfoEntity> GetList(string userId)
  23. {
  24. string sql = "select * from LR_OA_FileInfo where F_CreateUserId = @userId and F_DeleteMark = 0";
  25. return this.BaseRepository().FindList<FileInfoEntity>(sql, new { userId = userId });
  26. }
  27. public IEnumerable<FileInfoEntity> GetList()
  28. {
  29. string sql = "select * from LR_OA_FileInfo where F_DeleteMark = 0";
  30. return this.BaseRepository().FindList<FileInfoEntity>(sql);
  31. }
  32. public IEnumerable<FileInfoEntity> GetListByJson(string queryJson)
  33. {
  34. var dp = new object();
  35. var queryParam = queryJson.ToJObject();
  36. var strSql = new StringBuilder();
  37. strSql.Append("select * from LR_OA_FileInfo where F_DeleteMark = 0 ");
  38. if (!queryParam["year"].IsEmpty())
  39. {
  40. dp = new { year = queryParam["year"].ToInt() };
  41. strSql.Append(" and DATEPART(yyyy,F_CreateDate) = @year ");
  42. }
  43. else
  44. {
  45. dp = new { year = DateTime.Now.Year };
  46. strSql.Append(" and DATEPART(yyyy,F_CreateDate) = @year ");
  47. }
  48. return this.BaseRepository().FindList<FileInfoEntity>(strSql.ToString(), dp);
  49. }
  50. /// <summary>
  51. /// 所有文件(夹)列表
  52. /// </summary>
  53. /// <param name="folderId">文件夹Id</param>
  54. /// <param name="userId">用户Id</param>
  55. /// <returns></returns>
  56. public IEnumerable<FileInfoEntity> GetList(string folderId, string userId)
  57. {
  58. var strSql = new StringBuilder();
  59. string folderCondition = "";
  60. string fileCondition = "";
  61. if (!string.IsNullOrEmpty(folderId))
  62. {
  63. folderCondition = " AND F_ParentId = @folderId";
  64. fileCondition = " AND F_FolderId = @folderId";
  65. }
  66. else
  67. {
  68. fileCondition = " AND F_FolderId = '0'";
  69. }
  70. strSql.Append(@"SELECT *
  71. FROM ( SELECT F_FolderId AS F_FileId ,
  72. F_ParentId AS F_FolderId ,
  73. F_FolderName AS F_FileName ,
  74. '' AS F_FileSize ,
  75. 'folder' AS F_FileType ,
  76. F_CreateUserId,
  77. F_ModifyDate,
  78. F_IsShare
  79. FROM LR_OA_FileFolder where F_DeleteMark = 0");
  80. strSql.Append(folderCondition);
  81. strSql.Append(" UNION ");
  82. strSql.Append(@"SELECT F_FileId ,
  83. F_FolderId ,
  84. F_FileName ,
  85. F_FileSize ,
  86. F_FileType ,
  87. F_CreateUserId,
  88. F_ModifyDate,
  89. F_IsShare
  90. FROM LR_OA_FileInfo where F_DeleteMark = 0 ");
  91. strSql.Append(fileCondition);
  92. strSql.Append(") t WHERE F_CreateUserId = @userId");
  93. strSql.Append(" ORDER BY CASE WHEN F_FileType = 'folder' THEN 1 ELSE 2 END, F_ModifyDate ASC");
  94. return this.BaseRepository().FindList<FileInfoEntity>(strSql.ToString(), new { userId = userId, folderId = folderId });
  95. }
  96. /// <summary>
  97. /// 所有文件(夹)列表
  98. /// </summary>
  99. /// <param name="folderId">文件夹Id</param>
  100. /// <param name="userId">用户Id</param>
  101. /// <returns></returns>
  102. public IEnumerable<FileInfoEntity> GetList(string folderId, string userId, string queryJson)
  103. {
  104. var strSql = new StringBuilder();
  105. string folderCondition = "";
  106. string fileCondition = "";
  107. if (!string.IsNullOrEmpty(folderId))
  108. {
  109. folderCondition = " AND F_ParentId = @folderId";
  110. fileCondition = " AND F_FolderId = @folderId";
  111. }
  112. else
  113. {
  114. fileCondition = " AND F_FolderId = '0'";
  115. }
  116. strSql.Append(@"SELECT *
  117. FROM ( SELECT F_FolderId AS F_FileId ,
  118. F_ParentId AS F_FolderId ,
  119. F_FolderName AS F_FileName ,
  120. '' AS F_FileSize ,
  121. 'folder' AS F_FileType ,
  122. F_CreateUserId,
  123. F_ModifyDate,
  124. F_IsShare
  125. FROM LR_OA_FileFolder where F_DeleteMark = 0");
  126. strSql.Append(folderCondition);
  127. strSql.Append(" UNION ");
  128. strSql.Append(@"SELECT F_FileId ,
  129. F_FolderId ,
  130. F_FileName ,
  131. F_FileSize ,
  132. F_FileType ,
  133. F_CreateUserId,
  134. F_ModifyDate,
  135. F_IsShare
  136. FROM LR_OA_FileInfo where F_DeleteMark = 0 ");
  137. strSql.Append(fileCondition);
  138. strSql.Append(") t WHERE F_CreateUserId = @userId");
  139. var queryParam = queryJson.ToJObject();
  140. // 虚拟参数
  141. var dp = new DynamicParameters(new { });
  142. if (!queryParam["keyword"].IsEmpty())
  143. {
  144. string keyword = "%" + queryParam["keyword"].ToString() + "%";
  145. strSql.Append(" AND F_FileName like '" + keyword + "' ");
  146. }
  147. strSql.Append(" ORDER BY CASE WHEN F_FileType = 'folder' THEN 1 ELSE 2 END, F_ModifyDate ASC");
  148. return this.BaseRepository().FindList<FileInfoEntity>(strSql.ToString(), new { userId = userId, folderId = folderId });
  149. }
  150. /// <summary>
  151. /// 文档列表
  152. /// </summary>
  153. /// <param name="userId">用户Id</param>
  154. /// <returns></returns>
  155. public IEnumerable<FileInfoEntity> GetDocumentList(string userId, string queryJson)
  156. {
  157. var strSql = new StringBuilder();
  158. strSql.Append(@"SELECT F_FileId ,
  159. F_FolderId ,
  160. F_FileName ,
  161. F_FileSize ,
  162. F_FileType ,
  163. F_CreateUserId ,
  164. F_ModifyDate,
  165. F_IsShare
  166. FROM LR_OA_FileInfo
  167. WHERE F_DeleteMark = 0
  168. AND F_FileType IN ( 'log', 'txt', 'pdf', 'doc', 'docx', 'ppt', 'pptx',
  169. 'xls', 'xlsx' )
  170. AND F_CreateUserId = @userId");
  171. var queryParam = queryJson.ToJObject();
  172. // 虚拟参数
  173. var dp = new DynamicParameters(new { });
  174. if (!queryParam["keyword"].IsEmpty())
  175. {
  176. string keyword = "%" + queryParam["keyword"].ToString() + "%";
  177. strSql.Append(" AND F_FileName like '" + keyword + "' ");
  178. }
  179. strSql.Append(" ORDER BY F_ModifyDate ASC");
  180. return this.BaseRepository().FindList<FileInfoEntity>(strSql.ToString(), new { userId = userId });
  181. }
  182. /// <summary>
  183. /// 图片列表
  184. /// </summary>
  185. /// <param name="userId">用户Id</param>
  186. /// <returns></returns>
  187. public IEnumerable<FileInfoEntity> GetImageList(string userId, string queryJson)
  188. {
  189. var strSql = new StringBuilder();
  190. strSql.Append(@"SELECT F_FileId ,
  191. F_FolderId ,
  192. F_FileName ,
  193. F_FileSize ,
  194. F_FileType ,
  195. F_CreateUserId ,
  196. F_ModifyDate,
  197. F_IsShare
  198. FROM LR_OA_FileInfo
  199. WHERE F_DeleteMark = 0
  200. AND F_FileType IN ( 'ico', 'gif', 'jpeg', 'jpg', 'png', 'psd' )
  201. AND F_CreateUserId = @userId");
  202. var queryParam = queryJson.ToJObject();
  203. // 虚拟参数
  204. var dp = new DynamicParameters(new { });
  205. if (!queryParam["keyword"].IsEmpty())
  206. {
  207. string keyword = "%" + queryParam["keyword"].ToString() + "%";
  208. strSql.Append(" AND F_FileName like '" + keyword + "' ");
  209. }
  210. strSql.Append(" ORDER BY F_ModifyDate ASC");
  211. return this.BaseRepository().FindList<FileInfoEntity>(strSql.ToString(), new { userId = userId });
  212. }
  213. /// <summary>
  214. /// 回收站文件(夹)列表
  215. /// </summary>
  216. /// <param name="userId">用户Id</param>
  217. /// <returns></returns>
  218. public IEnumerable<FileInfoEntity> GetRecycledList(string userId)
  219. {
  220. var strSql = new StringBuilder();
  221. strSql.Append(@"SELECT *
  222. FROM ( SELECT F_FolderId AS F_FileId ,
  223. F_ParentId AS F_FolderId ,
  224. F_FolderName AS F_FileName ,
  225. '' AS F_FileSize ,
  226. 'folder' AS F_FileType ,
  227. F_CreateUserId,
  228. F_ModifyDate
  229. FROM LR_OA_FileFolder where F_DeleteMark = 1
  230. UNION
  231. SELECT F_FileId ,
  232. F_FolderId ,
  233. F_FileName ,
  234. F_FileSize ,
  235. F_FileType ,
  236. F_CreateUserId,
  237. F_ModifyDate
  238. FROM LR_OA_FileInfo where F_DeleteMark = 1
  239. ) t WHERE F_CreateUserId = @userId");
  240. strSql.Append(" ORDER BY F_ModifyDate DESC");
  241. return this.BaseRepository().FindList<FileInfoEntity>(strSql.ToString(), new { userId = userId });
  242. }
  243. /// <summary>
  244. /// 我的文件(夹)共享列表
  245. /// </summary>
  246. /// <param name="userId">用户Id</param>
  247. /// <returns></returns>
  248. public IEnumerable<FileInfoEntity> GetMyShareList(string userId, string queryJson)
  249. {
  250. var strSql = new StringBuilder();
  251. strSql.Append(@"SELECT *
  252. FROM ( SELECT F_FolderId AS F_FileId ,
  253. F_ParentId AS F_FolderId ,
  254. F_FolderName AS F_FileName ,
  255. '' AS F_FileSize ,
  256. 'folder' AS F_FileType ,
  257. F_CreateUserId,
  258. F_ModifyDate
  259. FROM LR_OA_FileFolder WHERE F_DeleteMark = 0 AND F_IsShare = 1
  260. UNION
  261. SELECT F_FileId ,
  262. F_FolderId ,
  263. F_FileName ,
  264. F_FileSize ,
  265. F_FileType ,
  266. F_CreateUserId,
  267. F_ModifyDate
  268. FROM LR_OA_FileInfo WHERE F_DeleteMark = 0 AND F_IsShare = 1
  269. ) t where 1=1 ");
  270. var queryParam = queryJson.ToJObject();
  271. // 虚拟参数
  272. var dp = new DynamicParameters(new { });
  273. if (!queryParam["keyword"].IsEmpty())
  274. {
  275. string keyword = "%" + queryParam["keyword"].ToString() + "%";
  276. strSql.Append(" AND F_FileName like '" + keyword + "' ");
  277. }
  278. strSql.Append(" ORDER BY F_ModifyDate DESC");
  279. return this.BaseRepository().FindList<FileInfoEntity>(strSql.ToString(), new { userId = userId });
  280. }
  281. /// <summary>
  282. /// 他人文件(夹)共享列表
  283. /// </summary>
  284. /// <param name="userId">用户Id</param>
  285. /// <returns></returns>
  286. public IEnumerable<FileInfoEntity> GetOthersShareList(string userId, string queryJson)
  287. {
  288. var strSql = new StringBuilder();
  289. strSql.Append(@"SELECT *
  290. FROM ( SELECT F_FolderId AS F_FileId ,
  291. F_ParentId AS F_FolderId ,
  292. F_FolderName AS F_FileName ,
  293. '' AS F_FileSize ,
  294. 'folder' AS F_FileType ,
  295. F_CreateUserId,
  296. F_CreateUserName,
  297. F_ShareTime AS F_ModifyDate
  298. FROM LR_OA_FileFolder WHERE F_DeleteMark = 0 AND F_IsShare = 1
  299. UNION
  300. SELECT F_FileId ,
  301. F_FolderId ,
  302. F_FileName ,
  303. F_FileSize ,
  304. F_FileType ,
  305. F_CreateUserId,
  306. F_CreateUserName,
  307. F_ShareTime AS F_ModifyDate
  308. FROM LR_OA_FileInfo WHERE F_DeleteMark = 0 AND F_IsShare = 1
  309. ) t where 1=1 ");
  310. var queryParam = queryJson.ToJObject();
  311. // 虚拟参数
  312. var dp = new DynamicParameters(new { });
  313. if (!queryParam["keyword"].IsEmpty())
  314. {
  315. string keyword = "%" + queryParam["keyword"].ToString() + "%";
  316. strSql.Append(" AND F_FileName like '" + keyword + "' ");
  317. }
  318. strSql.Append(" ORDER BY F_ModifyDate DESC");
  319. return this.BaseRepository().FindList<FileInfoEntity>(strSql.ToString(), new { userId = userId });
  320. }
  321. /// <summary>
  322. /// 文件实体
  323. /// </summary>
  324. /// <param name="keyValue">主键值</param>
  325. /// <returns></returns>
  326. public FileInfoEntity GetEntity(string keyValue)
  327. {
  328. return this.BaseRepository().FindEntity<FileInfoEntity>(keyValue);
  329. }
  330. #endregion
  331. #region 提交数据
  332. /// <summary>
  333. /// 还原文件
  334. /// </summary>
  335. /// <param name="keyValue">主键</param>
  336. public void RestoreFile(string keyValue)
  337. {
  338. FileInfoEntity fileInfoEntity = new FileInfoEntity();
  339. fileInfoEntity.Modify(keyValue);
  340. fileInfoEntity.F_DeleteMark = 0;
  341. this.BaseRepository().Update(fileInfoEntity);
  342. }
  343. /// <summary>
  344. /// 删除文件
  345. /// </summary>
  346. /// <param name="keyValue">主键</param>
  347. public void RemoveForm(string keyValue)
  348. {
  349. FileInfoEntity fileInfoEntity = new FileInfoEntity();
  350. fileInfoEntity.Modify(keyValue);
  351. fileInfoEntity.F_DeleteMark = 1;
  352. this.BaseRepository().Update(fileInfoEntity);
  353. }
  354. /// <summary>
  355. /// 彻底删除文件
  356. /// </summary>
  357. /// <param name="keyValue">主键</param>
  358. public void ThoroughRemoveForm(string keyValue)
  359. {
  360. this.BaseRepository().Delete<FileInfoEntity>(t => t.F_FileId == keyValue);
  361. }
  362. /// <summary>
  363. /// 保存文件表单(新增、修改)
  364. /// </summary>
  365. /// <param name="keyValue">主键值</param>
  366. /// <param name="fileInfoEntity">文件信息实体</param>
  367. /// <returns></returns>
  368. public void SaveForm(string keyValue, FileInfoEntity fileInfoEntity)
  369. {
  370. if (!string.IsNullOrEmpty(keyValue))
  371. {
  372. fileInfoEntity.Modify(keyValue);
  373. this.BaseRepository().Update(fileInfoEntity);
  374. }
  375. else
  376. {
  377. fileInfoEntity.Create();
  378. this.BaseRepository().Insert(fileInfoEntity);
  379. }
  380. }
  381. /// <summary>
  382. /// 共享文件
  383. /// </summary>
  384. /// <param name="keyValue">主键</param>
  385. /// <param name="IsShare">是否共享:1-共享 0取消共享</param>
  386. public void ShareFile(string keyValue, int IsShare)
  387. {
  388. FileInfoEntity fileInfoEntity = new FileInfoEntity();
  389. fileInfoEntity.F_FileId = keyValue;
  390. fileInfoEntity.F_IsShare = IsShare;
  391. fileInfoEntity.F_ShareTime = DateTime.Now;
  392. this.BaseRepository().Update(fileInfoEntity);
  393. }
  394. #endregion
  395. public int GetCount()
  396. {
  397. return this.BaseRepository().FindList<FileInfoEntity>().Count(x => x.F_DeleteMark == 0);
  398. }
  399. public Dictionary<int, int> GetMonthCount()
  400. {
  401. var dt = new DateTime(DateTime.Now.Year, 1, 1);
  402. var ls = this.BaseRepository().FindList<FileInfoEntity>(x => x.F_CreateDate >= dt).Select(x => new { Year = x.F_CreateDate.Value.Year, Month = x.F_CreateDate.Value.Month }).GroupBy(x => new { x.Year, x.Month }).ToDictionary(x => x.Key.Month, a => a.Count());
  403. return ls;
  404. }
  405. }
  406. }