NoteRepository.cs 39 KB

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