NoteRepository.cs 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using AutoMapper;
  4. using Dapper;
  5. using Datory;
  6. using GxPress.Common.AppOptions;
  7. using GxPress.Common.Page;
  8. using GxPress.Common.Tools;
  9. using GxPress.Entity;
  10. using GxPress.EnumConst;
  11. using GxPress.Repository.Interface.Note;
  12. using GxPress.Request.App.Note;
  13. using GxPress.Request.Web;
  14. using GxPress.Result.App.Note;
  15. using GxPress.Result.Web;
  16. using Microsoft.Extensions.Options;
  17. namespace GxPress.Repository.Implement.Note
  18. {
  19. public class NoteRepository : INoteRepository
  20. {
  21. private readonly Repository<Entity.Note.Note> _repository;
  22. private readonly IMapper _mapper;
  23. private readonly string _connectionString;
  24. private readonly string _databaseTypestr;
  25. public NoteRepository(IOptionsMonitor<DatabaseOptions> dbOptionsAccessor, IMapper mapper)
  26. {
  27. _databaseTypestr = dbOptionsAccessor.CurrentValue.DatabaseType;
  28. _connectionString = dbOptionsAccessor.CurrentValue.ConnectionString;
  29. var databaseType =
  30. StringUtils.ToEnum<DatabaseType>(dbOptionsAccessor.CurrentValue.DatabaseType, DatabaseType.MySql);
  31. var database = new Database(databaseType, dbOptionsAccessor.CurrentValue.ConnectionString);
  32. _repository = new Repository<Entity.Note.Note>(database);
  33. _mapper = mapper;
  34. }
  35. public IDatabase Database => _repository.Database;
  36. public string TableName => _repository.TableName;
  37. public List<TableColumn> TableColumns => _repository.TableColumns;
  38. public async Task<Entity.Note.Note> GetAsync(int id)
  39. {
  40. return await _repository.GetAsync(id);
  41. }
  42. public async Task<bool> DeleteAsync(SqlKata.Query query)
  43. {
  44. return await _repository.DeleteAsync(query) > 0;
  45. }
  46. public async Task<int> InsertAsync(Entity.Note.Note note)
  47. {
  48. return await _repository.InsertAsync(note);
  49. }
  50. public async Task<bool> UpdateAsync(Entity.Note.Note note)
  51. {
  52. return await _repository.UpdateAsync(note);
  53. }
  54. public async Task<bool> UpdateAsync(SqlKata.Query query)
  55. {
  56. return await _repository.UpdateAsync(query) > 0;
  57. }
  58. /// <summary>
  59. /// 设置置顶
  60. /// </summary>
  61. /// <param name="noteId"></param>
  62. /// <returns></returns>
  63. public async Task<bool> SetIsTopAsync(int noteId)
  64. {
  65. var note = await _repository.GetAsync(noteId);
  66. note.IsTop = !note.IsTop;
  67. return await _repository.UpdateAsync(note);
  68. }
  69. /// <summary>
  70. /// 获取笔记分页
  71. /// </summary>
  72. /// <param name="request"></param>
  73. /// <returns></returns>
  74. public async Task<PagedList<NotePageListRequest>> NotePageListAsync(NoteSearchPageListRequest request)
  75. {
  76. var pagedList = new PagedList<NotePageListRequest>();
  77. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypestr, DatabaseType.MySql);
  78. var database = new Database(databaseType, _connectionString);
  79. var connection = database.GetConnection();
  80. var result =
  81. await connection
  82. .QueryAsync<NotePageListRequest>(GetCollectionSql(request));
  83. pagedList.Items = result;
  84. pagedList.Total = await NotePageListCountAsync(GetCollectionSqlCount(request));
  85. return pagedList;
  86. }
  87. /// <summary>
  88. /// 集合
  89. /// </summary>
  90. /// <param name="request"></param>
  91. /// <returns></returns>
  92. public string GetCollectionSql(NoteSearchPageListRequest request)
  93. {
  94. string sql = "";
  95. var noteTypeId = request.TypeValue == 0 ? AllTypeConst.Note.GetHashCode() : AllTypeConst.TopicNote.GetHashCode();
  96. if (request.VisitUserId > 0)
  97. {
  98. sql =
  99. $@"SELECT a.Id,a.MiddleId,a.RoleId,a.ParentId,a.AttributeValue,(SELECT GROUP_CONCAT(SourceName Separator'、') from tede_user_middle where MiddleType={noteTypeId} and DataSourceId=a.MiddleSonId) as EnjoyUser,(SELECT
  100. COUNT(1)
  101. FROM
  102. tede_analyze
  103. WHERE
  104. UserId = {request.UserId} AND TypeValue ={noteTypeId}
  105. AND SourceId = a.MiddleId
  106. AND AnalyzeType = 1) AS PraiseCount,
  107. (SELECT
  108. COUNT(1)
  109. FROM
  110. tede_analyze
  111. WHERE
  112. UserId = {request.UserId} AND TypeValue ={noteTypeId}
  113. AND SourceId = a.MiddleId
  114. AND AnalyzeType = 1
  115. LIMIT 0 , 1) AS IsPraise,
  116. (SELECT
  117. COUNT(1)
  118. FROM
  119. tede_comment
  120. WHERE
  121. ArticleId = a.MiddleId and pid=0
  122. AND TypeValue = {noteTypeId}) AS CommentCount,
  123. (SELECT
  124. COUNT(1)
  125. FROM
  126. tede_analyze
  127. WHERE
  128. UserId = {request.UserId} AND TypeValue ={noteTypeId}
  129. AND SourceId = a.MiddleId
  130. AND AnalyzeType = 4) AS RetransmissionCount,
  131. (SELECT
  132. COUNT(1)
  133. FROM
  134. tede_analyze
  135. WHERE
  136. UserId = {request.UserId} AND TypeValue = {noteTypeId}
  137. AND SourceId = a.MiddleId
  138. AND AnalyzeType = 4
  139. LIMIT 0 , 1) AS IsRetransmission,
  140. (SELECT
  141. COUNT(1)
  142. FROM
  143. tede_analyze
  144. WHERE
  145. UserId = {request.UserId} AND TypeValue = {noteTypeId}
  146. AND SourceId = a.MiddleId
  147. AND AnalyzeType = 3
  148. LIMIT 0 , 1) AS IsCollect,
  149. (SELECT
  150. COUNT(1)
  151. FROM
  152. tede_analyze
  153. WHERE
  154. UserId = {request.UserId} AND TypeValue = {noteTypeId}
  155. AND SourceId = a.MiddleId
  156. AND AnalyzeType = 3) AS CollectCount,
  157. (SELECT
  158. COUNT(1)
  159. FROM
  160. tede_middle
  161. WHERE
  162. ParentId = a.Id and IsDelete=0) FileCount, b.Title, b.Content,b.ReadCount,b.MediaId,b.CatalogId,
  163. b.ChapterId,c.Name,c.AvatarUrl,c.Nick,d.Name FROM tede_middle a LEFT JOIN tede_note b ON a.MiddleId = b.Id left join tede_user c on c.Id=b.UserId left join tede_department d on d.Id=c.DepartmentId
  164. WHERE a.UserId = {request.VisitUserId} AND a.FolderType ={noteTypeId} AND a.IsDelete = 0";
  165. if (request.FolderId == 0)
  166. sql += @" AND(a.RoleId = 1 OR a.RoleId = 3) AND a.ParentId = 0";
  167. else
  168. sql += $" and a.ParentId={request.FolderId}";
  169. if (!string.IsNullOrEmpty(request.SearchKey))
  170. sql += $@" AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%' or b.UserId in (select Id from tede_user where name like '%{request.SearchKey}%'))";
  171. sql +=
  172. $@" OR a.id IN(SELECT MiddleId FROM tede_folder_user WHERE UserId = {request.UserId}) AND a.FolderType ={noteTypeId} AND a.UserId = {request.VisitUserId}";
  173. if (request.FolderId == 0 && !string.IsNullOrEmpty(request.SearchKey))
  174. sql += $@" AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%' or b.UserId in (select Id from tede_user where name like '%{request.SearchKey}%'))";
  175. else if (!string.IsNullOrEmpty(request.SearchKey))
  176. sql += $@" and a.ParentId={request.FolderId} AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%' or b.UserId in (select Id from tede_user where name like '%{request.SearchKey}%'))";
  177. else
  178. sql += $" and a.ParentId={request.FolderId}";
  179. sql +=
  180. $@" ORDER BY a.AttributeValue desc,a.IsTop DESC, a.LastModifiedDate DESC";
  181. if (request.Page > 0)
  182. sql += $@" limit {(request.Page - 1) * request.PerPage},{request.PerPage}";
  183. }
  184. else
  185. {
  186. sql =
  187. $@"SELECT a.Id,a.MiddleId,a.RoleId,a.ParentId,a.AttributeValue,a.UserId,
  188. a.CreatedDate,a.IsTop,a.FolderName,a.FolderType,
  189. (SELECT GROUP_CONCAT(SourceName Separator'、') from tede_user_middle where MiddleType={noteTypeId}
  190. and DataSourceId=a.MiddleSonId) as EnjoyUser,
  191. (SELECT
  192. COUNT(1)
  193. FROM
  194. tede_analyze
  195. WHERE
  196. UserId = {request.UserId} AND TypeValue = {noteTypeId}
  197. AND SourceId = a.MiddleId
  198. AND AnalyzeType = 1) AS PraiseCount,
  199. (SELECT
  200. COUNT(1)
  201. FROM
  202. tede_analyze
  203. WHERE
  204. UserId = {request.UserId} AND TypeValue ={noteTypeId}
  205. AND SourceId = a.MiddleId
  206. AND AnalyzeType = 1
  207. LIMIT 0 , 1) AS IsPraise,
  208. (SELECT
  209. COUNT(1)
  210. FROM
  211. tede_comment
  212. WHERE
  213. UserId = {request.UserId} AND ArticleId = a.MiddleId
  214. AND TypeValue = {noteTypeId}) AS CommentCount,
  215. (SELECT
  216. COUNT(1)
  217. FROM
  218. tede_analyze
  219. WHERE
  220. UserId = {request.UserId} AND TypeValue = {noteTypeId}
  221. AND SourceId = a.MiddleId
  222. AND AnalyzeType = 4) AS RetransmissionCount,
  223. (SELECT
  224. COUNT(1)
  225. FROM
  226. tede_analyze
  227. WHERE
  228. UserId = {request.UserId} AND TypeValue = {noteTypeId}
  229. AND SourceId = a.MiddleId
  230. AND AnalyzeType = 4
  231. LIMIT 0 , 1) AS IsRetransmission,
  232. (SELECT
  233. COUNT(1)
  234. FROM
  235. tede_analyze
  236. WHERE
  237. UserId = {request.UserId} AND TypeValue ={noteTypeId}
  238. AND SourceId = a.MiddleId
  239. AND AnalyzeType = 3
  240. LIMIT 0 , 1) AS IsCollect,
  241. (SELECT
  242. COUNT(1)
  243. FROM
  244. tede_analyze
  245. WHERE
  246. UserId = {request.UserId} AND TypeValue = {noteTypeId}
  247. AND SourceId = a.MiddleId
  248. AND AnalyzeType = 3) AS IsCollect,
  249. (SELECT
  250. COUNT(1)
  251. FROM
  252. tede_middle
  253. WHERE
  254. ParentId = a.Id and IsDelete=0) FileCount, b.Title, b.Content,b.ReadCount,b.MediaId,b.CatalogId,
  255. b.ChapterId,c.Name,c.AvatarUrl,d.Name AS DepartmentName,
  256. (SELECT
  257. FolderName
  258. FROM
  259. tede_middle
  260. WHERE
  261. id = (SELECT
  262. ParentId
  263. FROM
  264. tede_middle
  265. WHERE
  266. MiddleId = a.Id AND FolderType ={noteTypeId})) AS FolderParentName,
  267. (SELECT
  268. Id
  269. FROM
  270. tede_middle
  271. WHERE
  272. id = (SELECT
  273. ParentId
  274. FROM
  275. tede_middle
  276. WHERE
  277. MiddleId = a.Id AND FolderType = {noteTypeId})) AS FolderId
  278. FROM tede_middle a LEFT JOIN tede_note b ON a.MiddleId = b.Id
  279. left join tede_user c on c.Id=b.UserId
  280. left join tede_department d on d.Id=c.DepartmentId
  281. WHERE a.UserId = {request.UserId} AND a.FolderType = {noteTypeId} AND a.IsDelete = 0 ";
  282. if (request.TypeValue == 0)
  283. sql += "and (a.RoleId in(2) or a.AttributeValue=1)";
  284. else
  285. sql += "and (a.RoleId in(1,3) or a.AttributeValue=1)";
  286. if (request.FolderId == 0 && !string.IsNullOrEmpty(request.SearchKey))
  287. sql += $@" AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%' or b.UserId in (select Id from tede_user where name like '%{request.SearchKey}%'))";
  288. else if (!string.IsNullOrEmpty(request.SearchKey))
  289. sql += $@" and a.ParentId={request.FolderId} AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%')";
  290. else
  291. sql += $" and a.ParentId={request.FolderId}";
  292. sql +=
  293. $@" ORDER BY a.AttributeValue desc,a.IsTop DESC,a.Sort DESC , a.LastModifiedDate DESC";
  294. if (request.Page > 0)
  295. sql += $@" limit {(request.Page - 1) * request.PerPage},{request.PerPage}";
  296. }
  297. return sql;
  298. }
  299. /// <summary>
  300. /// 条数
  301. /// </summary>
  302. /// <param name="request"></param>
  303. /// <returns></returns>
  304. public string GetCollectionSqlCount(NoteSearchPageListRequest request)
  305. {
  306. var noteTypeId = request.TypeValue == 0 ? AllTypeConst.Note.GetHashCode() : AllTypeConst.TopicNote.GetHashCode();
  307. string sql = "";
  308. if (request.VisitUserId > 0)
  309. {
  310. sql =
  311. $@"SELECT count(1) FROM tede_middle a LEFT JOIN tede_note b ON a.MiddleId = b.Id WHERE a.UserId = {request.VisitUserId} AND a.FolderType = {noteTypeId} AND a.IsDelete = 0";
  312. if (request.FolderId == 0)
  313. sql += @" AND(a.RoleId = 1 OR a.RoleId = 3) AND a.ParentId = 0";
  314. else
  315. sql += $" and a.ParentId={request.FolderId}";
  316. if (!string.IsNullOrEmpty(request.SearchKey))
  317. sql += $@" AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%' or b.UserId in (select Id from tede_user where name like '%{request.SearchKey}%'))";
  318. sql +=
  319. $@" OR a.id IN(SELECT MiddleId FROM tede_folder_user WHERE UserId = {request.UserId}) AND a.FolderType = {noteTypeId} AND a.UserId = {request.VisitUserId}";
  320. if (request.FolderId == 0 && !string.IsNullOrEmpty(request.SearchKey))
  321. sql += $@" AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%' or b.UserId in (select Id from tede_user where name like '%{request.SearchKey}%'))";
  322. else if (!string.IsNullOrEmpty(request.SearchKey))
  323. sql += $@" and a.ParentId={request.FolderId} AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%' or b.UserId in (select Id from tede_user where name like '%{request.SearchKey}%'))";
  324. else
  325. sql += $" and a.ParentId={request.FolderId}";
  326. }
  327. else
  328. {
  329. sql =
  330. $@"SELECT count(1) FROM tede_middle a LEFT JOIN tede_note b ON a.MiddleId = b.Id left join tede_user c on c.Id=b.UserId left join tede_department d on d.Id=c.DepartmentId WHERE a.UserId = {request.UserId} AND a.FolderType ={noteTypeId} AND a.IsDelete = 0";
  331. if (request.TypeValue == 0)
  332. sql += " and (a.RoleId in(2) or a.AttributeValue=1)";
  333. else
  334. sql += " and (a.RoleId in(1,3) or a.AttributeValue=1)";
  335. if (request.FolderId == 0 && !string.IsNullOrEmpty(request.SearchKey))
  336. sql += $@" AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%' or b.UserId in (select Id from tede_user where name like '%{request.SearchKey}%'))";
  337. else if (!string.IsNullOrEmpty(request.SearchKey))
  338. sql += $@" and a.ParentId={request.FolderId} AND(b.Title LIKE '%{request.SearchKey}%' OR a.FolderName LIKE '%{request.SearchKey}%' or b.Content LIKE '%{request.SearchKey}%' or b.UserId in (select Id from tede_user where name like '%{request.SearchKey}%'))";
  339. else
  340. sql += $" and a.ParentId={request.FolderId}";
  341. }
  342. return sql;
  343. }
  344. public async Task<int> NotePageListCountAsync(string sql)
  345. {
  346. var pagedList = new PagedList<NotePageListRequest>();
  347. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypestr, DatabaseType.MySql);
  348. var database = new Database(databaseType, _connectionString);
  349. var connection = database.GetConnection();
  350. var result =
  351. await connection
  352. .ExecuteScalarAsync<int>(sql);
  353. return result;
  354. }
  355. /// <summary>
  356. /// 删除笔记
  357. /// </summary>
  358. /// <param name="id"></param>
  359. /// <returns></returns>
  360. public async Task<bool> DeleteAsync(int id) => await _repository.DeleteAsync(id);
  361. /// <summary>
  362. ///查询个人摘录
  363. /// </summary>
  364. /// <param name="request"></param>
  365. /// <returns></returns>
  366. public async Task<PagedList<NoteUserExtractResult>> GetAllByUserId(NoteUserRequest request)
  367. {
  368. var result = new PagedList<NoteUserExtractResult>();
  369. var sql = $@"SELECT
  370. a.Id,
  371. a.CreatedDate,
  372. a.Title,
  373. a.Content,
  374. a.UserId,
  375. a.ReadCount,
  376. a.HtmlContent,
  377. a.MediaId,
  378. a.CatalogId,
  379. a.ChapterId,
  380. (SELECT
  381. COUNT(1)
  382. FROM
  383. tede_analyze
  384. WHERE
  385. UserId = {request.UserId} AND TypeValue = 3
  386. AND SourceId = a.Id
  387. AND AnalyzeType = 1) AS PraiseCount,
  388. (SELECT
  389. COUNT(1)
  390. FROM
  391. tede_analyze
  392. WHERE
  393. UserId = {request.UserId} AND TypeValue = 3
  394. AND SourceId = a.Id
  395. AND AnalyzeType = 1
  396. LIMIT 0 , 1) AS IsPraise,
  397. (SELECT
  398. COUNT(1)
  399. FROM
  400. tede_comment
  401. WHERE
  402. ArticleId = a.Id AND pid = 0
  403. AND TypeValue = 3) AS CommentCount,
  404. (SELECT
  405. COUNT(1)
  406. FROM
  407. tede_analyze
  408. WHERE
  409. UserId = {request.UserId} AND TypeValue = 3
  410. AND SourceId = a.Id
  411. AND AnalyzeType = 4) AS RetransmissionCount,
  412. (SELECT
  413. COUNT(1)
  414. FROM
  415. tede_analyze
  416. WHERE
  417. UserId = {request.UserId} AND TypeValue = 3
  418. AND SourceId = a.Id
  419. AND AnalyzeType = 4
  420. LIMIT 0 , 1) AS IsRetransmission,
  421. b.Name,b.AvatarUrl
  422. FROM
  423. tede_note a
  424. INNER JOIN
  425. tede_user b ON a.UserId = b.Id
  426. WHERE
  427. UserId = {request.UserId} and a.MediaId='{request.MediaId}'
  428. ORDER BY CreatedDate DESC";
  429. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypestr, DatabaseType.MySql);
  430. var database = new Database(databaseType, _connectionString);
  431. var connection = database.GetConnection();
  432. result.Items =
  433. await connection
  434. .QueryAsync<NoteUserExtractResult>(sql);
  435. sql = $@"SELECT
  436. count(1)
  437. FROM
  438. tede_note a
  439. INNER JOIN
  440. tede_user b ON a.UserId = b.Id
  441. WHERE
  442. UserId = {request.UserId} and a.MediaId='{request.MediaId}' and a.CatalogId='{request.CatalogId}' and a.ChapterId='{request.ChapterId}'";
  443. result.Total =
  444. await connection.ExecuteScalarAsync<int>(sql);
  445. return result;
  446. }
  447. /// <summary>
  448. /// web页面查询话题
  449. /// </summary>
  450. /// <param name="request"></param>
  451. /// <returns></returns>
  452. public async Task<PagedList<NoteTopicResult>> GetTopicNoteAsync(NoteSearchPageListRequest request)
  453. {
  454. var noteTypeId = GxPress.EnumConst.AllTypeConst.Note.GetHashCode();
  455. var sql = $@"SELECT
  456. a.Id,
  457. a.Title,
  458. a.Content,
  459. a.HtmlContent,
  460. a.CreatedDate,
  461. b.Id as UserId,
  462. b.Name,
  463. b.AvatarUrl,
  464. c.Id,
  465. c.FolderName,
  466. (SELECT
  467. COUNT(1)
  468. FROM
  469. tede_analyze
  470. WHERE
  471. TypeValue ={noteTypeId} AND SourceId = a.Id
  472. AND AnalyzeType = 1) AS PraiseCount,
  473. (SELECT
  474. COUNT(1)
  475. FROM
  476. tede_analyze
  477. WHERE
  478. UserId = {request.UserId} AND TypeValue ={noteTypeId}
  479. AND SourceId = a.Id
  480. AND AnalyzeType = 1
  481. LIMIT 0 , 1) AS IsPraise,
  482. (SELECT
  483. COUNT(1)
  484. FROM
  485. tede_comment
  486. WHERE
  487. ArticleId = a.Id AND TypeValue = {noteTypeId}
  488. AND Pid = 0) AS CommentCount,
  489. (SELECT
  490. COUNT(1)
  491. FROM
  492. tede_analyze
  493. WHERE
  494. UserId = {request.UserId} AND TypeValue = {noteTypeId}
  495. AND SourceId = a.Id
  496. AND AnalyzeType = 4) AS RetransmissionCount,
  497. (SELECT
  498. COUNT(1)
  499. FROM
  500. tede_analyze
  501. WHERE
  502. UserId = {request.UserId} AND TypeValue ={noteTypeId}
  503. AND SourceId = a.Id
  504. AND AnalyzeType = 4
  505. LIMIT 0 , 1) AS IsRetransmission,
  506. (SELECT
  507. COUNT(1)
  508. FROM
  509. tede_analyze
  510. WHERE
  511. UserId = {request.UserId} AND TypeValue = {noteTypeId}
  512. AND SourceId = a.Id
  513. AND AnalyzeType = 3
  514. LIMIT 0 , 1) AS IsCollect
  515. FROM
  516. tede_note a
  517. INNER JOIN
  518. tede_user b ON a.UserId = b.Id
  519. INNER JOIN
  520. tede_middle c ON c.Id = a.FolderId
  521. WHERE
  522. a.IsTopic = 1";
  523. if (!string.IsNullOrEmpty(request.SearchKey))
  524. {
  525. sql += $@" and (b.Name like '%11%' or a.Title like '%11%' or a.Content like '%11%')";
  526. }
  527. sql += $@" AND (a.FolderId IN (SELECT
  528. Id
  529. FROM
  530. tede_middle
  531. WHERE
  532. id IN (SELECT
  533. MiddleId
  534. FROM
  535. tede_folder_user
  536. WHERE
  537. UserId = {request.UserId})
  538. AND RoleId IN (3))
  539. OR a.FolderId IN (SELECT
  540. Id
  541. FROM
  542. tede_middle
  543. WHERE
  544. RoleId IN (1))) ";
  545. sql += $@" limit {(request.Page - 1) * request.PerPage},{request.PerPage}";
  546. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypestr, DatabaseType.MySql);
  547. var database = new Database(databaseType, _connectionString);
  548. var connection = database.GetConnection();
  549. var result = new PagedList<NoteTopicResult>();
  550. result.Items =
  551. await connection
  552. .QueryAsync<NoteTopicResult, User, Entity.Middle.Middle, NoteTopicResult>(sql,
  553. (noteTopicResult, user, middle) =>
  554. {
  555. noteTopicResult.UserName = user == null ? "" : user.Name;
  556. noteTopicResult.AvatarUrl = user == null ? "" : StringUtils.AddDomainMin(user.AvatarUrl);
  557. noteTopicResult.FolderId = middle == null ? 0 : middle.Id;
  558. noteTopicResult.FolderName = middle == null ? "" : middle.FolderName;
  559. return noteTopicResult;
  560. }, splitOn: "Id,Name,Id");
  561. sql = $@"SELECT
  562. count(1)
  563. FROM
  564. tede_note a
  565. INNER JOIN
  566. tede_user b ON a.UserId = b.Id
  567. INNER JOIN
  568. tede_middle c ON c.Id = a.FolderId
  569. WHERE
  570. a.IsTopic = 1";
  571. if (!string.IsNullOrEmpty(request.SearchKey))
  572. {
  573. sql += $@" and (b.Name like '%11%' or a.Title like '%11%' or a.Content like '%11%')";
  574. }
  575. sql += $@" AND (a.FolderId IN (SELECT
  576. Id
  577. FROM
  578. tede_middle
  579. WHERE
  580. id IN (SELECT
  581. MiddleId
  582. FROM
  583. tede_folder_user
  584. WHERE
  585. UserId = {request.UserId})
  586. AND RoleId IN (3))
  587. OR a.FolderId IN (SELECT
  588. Id
  589. FROM
  590. tede_middle
  591. WHERE
  592. RoleId IN (1))) ";
  593. result.Total =
  594. await connection.ExecuteScalarAsync<int>(sql);
  595. return result;
  596. }
  597. /// <summary>
  598. /// 笔记没有文件夹分页
  599. /// </summary>
  600. /// <param name="request"></param>
  601. /// <returns></returns>
  602. public async Task<PagedList<NoteNotFolderPageResult>> GetNoteNotFolderPageResult(NoteSearchPageListRequest request)
  603. {
  604. var sqlValue = "";
  605. if (!string.IsNullOrEmpty(request.SearchKey))
  606. {
  607. sqlValue += $" and (a.Title like '%{request.SearchKey}%' or a.Content like '%{request.SearchKey}%')";
  608. }
  609. var noteConstValue = GxPress.EnumConst.AllTypeConst.Note.GetHashCode();
  610. var sql = $@"SELECT
  611. a.Id,
  612. a.Title,
  613. a.Content,
  614. a.UserId,
  615. a.CreatedDate,
  616. a.MediaId,
  617. a.ReadCount,
  618. a.IsTop,
  619. (SELECT
  620. FolderName
  621. FROM
  622. tede_middle
  623. WHERE
  624. id = (SELECT
  625. ParentId
  626. FROM
  627. tede_middle
  628. WHERE
  629. MiddleId = a.Id AND FolderType = {noteConstValue})) AS FolderName,
  630. (SELECT
  631. Id
  632. FROM
  633. tede_middle
  634. WHERE
  635. id = (SELECT
  636. ParentId
  637. FROM
  638. tede_middle
  639. WHERE
  640. MiddleId = a.Id AND FolderType = {noteConstValue})) AS FolderId,
  641. (SELECT
  642. COUNT(1)
  643. FROM
  644. tede_analyze
  645. WHERE
  646. UserId = {request.UserId} AND TypeValue = {noteConstValue}
  647. AND SourceId = a.Id
  648. AND AnalyzeType = 1) AS PraiseCount,
  649. (SELECT
  650. COUNT(1)
  651. FROM
  652. tede_analyze
  653. WHERE
  654. UserId = {request.UserId} AND TypeValue = {noteConstValue}
  655. AND SourceId = a.Id
  656. AND AnalyzeType = 1
  657. LIMIT 0 , 1) AS IsPraise,
  658. (SELECT
  659. COUNT(1)
  660. FROM
  661. tede_comment
  662. WHERE
  663. UserId = {request.UserId} AND ArticleId = a.Id
  664. AND TypeValue = {noteConstValue}) AS CommentCount,
  665. (SELECT
  666. COUNT(1)
  667. FROM
  668. tede_analyze
  669. WHERE
  670. UserId = {request.UserId} AND TypeValue ={noteConstValue}
  671. AND SourceId = a.Id
  672. AND AnalyzeType = {noteConstValue}) AS RetransmissionCount,
  673. (SELECT
  674. COUNT(1)
  675. FROM
  676. tede_analyze
  677. WHERE
  678. UserId = {request.UserId} AND TypeValue = {noteConstValue}
  679. AND SourceId = a.Id
  680. AND AnalyzeType = 4
  681. LIMIT 0 , 1) AS IsRetransmission,
  682. (SELECT
  683. COUNT(1)
  684. FROM
  685. tede_analyze
  686. WHERE
  687. UserId = {request.UserId} AND TypeValue = {noteConstValue}
  688. AND SourceId = a.Id
  689. AND AnalyzeType = 3
  690. LIMIT 0 , 1) AS IsCollect,
  691. (SELECT
  692. COUNT(1)
  693. FROM
  694. tede_analyze
  695. WHERE
  696. UserId = {request.UserId} AND TypeValue = {noteConstValue}
  697. AND SourceId = a.Id
  698. AND AnalyzeType = 3) AS IsCollect,
  699. b.Name,
  700. b.AvatarUrl,c.Id,c.MiddleId
  701. FROM
  702. tede_note a
  703. INNER JOIN
  704. tede_user b ON a.UserId = b.Id inner join tede_middle c on c.MiddleId=a.Id
  705. WHERE
  706. a.IsDelete = 0 and a.IsTopic=0 AND a.UserId = {request.UserId} and c.FolderType={noteConstValue} {sqlValue}
  707. ORDER BY a.IsTop desc ,a.LastModifiedDate DESC
  708. limit {(request.Page - 1) * request.PerPage},{request.PerPage}";
  709. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypestr, DatabaseType.MySql);
  710. var database = new Database(databaseType, _connectionString);
  711. var connection = database.GetConnection();
  712. var result = new PagedList<NoteNotFolderPageResult>();
  713. result.Items =
  714. await connection
  715. .QueryAsync<NoteNotFolderPageResult, User, Entity.Middle.Middle, NoteNotFolderPageResult>(sql,
  716. (result, user, middle) =>
  717. {
  718. result.MiddleId = middle.MiddleId;
  719. result.Id = middle.Id;
  720. result.Name = user == null ? "" : user.Name;
  721. result.AvatarUrl = user == null ? "" : StringUtils.AddDomainMin(user.AvatarUrl);
  722. return result;
  723. }, splitOn: "Id,Id,Name,Id");
  724. sql = $@"SELECT count(1)
  725. FROM
  726. tede_note a
  727. INNER JOIN
  728. tede_user b ON a.UserId = b.Id inner join tede_middle c on c.MiddleId=a.Id
  729. WHERE
  730. a.IsDelete = 0 and a.IsTopic=0 AND a.UserId = {request.UserId} and c.FolderType={noteConstValue} {sqlValue}";
  731. result.Total = await connection.ExecuteScalarAsync<int>(sql);
  732. return result;
  733. }
  734. /// <summary>
  735. /// 获取用户最近使用的文件夹
  736. /// </summary>
  737. /// <param name="userId"></param>
  738. /// <returns></returns>
  739. public async Task<IEnumerable<int>> GetLatelyFolderIdAsync(int userId, bool isTopic)
  740. {
  741. var query = Q.NewQuery();
  742. query.Select(nameof(Entity.Note.Note.FolderId));
  743. query.Where(nameof(Entity.Note.Note.UserId), userId);
  744. query.Where(nameof(Entity.Note.Note.IsTopic), isTopic);
  745. query.Where(nameof(Entity.Note.Note.FolderId), ">", 0);
  746. query.OrderByDesc(nameof(Entity.Note.Note.CreatedDate));
  747. return await _repository.GetAllAsync<int>(query);
  748. }
  749. }
  750. }