NoteRepository.cs 41 KB

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