MeetingSummaryRepository.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using Datory;
  4. using GxPress.Common.AppOptions;
  5. using GxPress.Common.Tools;
  6. using GxPress.Entity.WorkMeeting;
  7. using GxPress.Repository.Interface.WorkMeeting;
  8. using Microsoft.Extensions.Caching.Distributed;
  9. using Microsoft.Extensions.Options;
  10. using SqlKata;
  11. using System.Linq;
  12. using GxPress.Request.App.WorkMeeting;
  13. using Dapper;
  14. namespace GxPress.Repository.Implement.WorkMeeting
  15. {
  16. public class MeetingSummaryRepository : IMeetingSummaryRepository
  17. {
  18. private readonly Repository<MeetingSummary> _repository;
  19. private readonly Repository<Entity.WorkMeeting.MeetingSummaryTodo> meetingSummaryTodoRepository;
  20. private readonly string _connectionString;
  21. private readonly string _databaseTypeStr;
  22. public MeetingSummaryRepository(IOptionsMonitor<DatabaseOptions> dbOptionsAccessor, IDistributedCache cache)
  23. {
  24. _databaseTypeStr = dbOptionsAccessor.CurrentValue.DatabaseType;
  25. _connectionString = dbOptionsAccessor.CurrentValue.ConnectionString;
  26. var databaseType = StringUtils.ToEnum<DatabaseType>(dbOptionsAccessor.CurrentValue.DatabaseType, DatabaseType.MySql);
  27. var database = new Database(databaseType, dbOptionsAccessor.CurrentValue.ConnectionString);
  28. _repository = new Repository<MeetingSummary>(database, cache);
  29. meetingSummaryTodoRepository = new Repository<Entity.WorkMeeting.MeetingSummaryTodo>(database);
  30. }
  31. public IDatabase Database => _repository.Database;
  32. public string TableName => _repository.TableName;
  33. public List<TableColumn> TableColumns => _repository.TableColumns;
  34. public async Task<int> InsertAsync(MeetingSummary item)
  35. {
  36. return await _repository.InsertAsync(item);
  37. }
  38. public async Task UpdateAsync(MeetingSummary item)
  39. {
  40. await _repository.UpdateAsync(item);
  41. }
  42. public async Task<IEnumerable<MeetingSummary>> GetListAsync(string keyword, int userId, int typeId, int meetingId, int page = 1, int perPage = 10)
  43. {
  44. // var query = Q.Where(nameof(MeetingSummary.UserId), userId);
  45. //if (!string.IsNullOrEmpty(keyword))
  46. //{
  47. // query.Where(q => q
  48. // .WhereLike(nameof(MeetingSummary.Title), $"%{keyword}%")
  49. // .OrWhereLike(nameof(MeetingSummary.Content), $"%{keyword}%")
  50. // );
  51. //}
  52. var query = new SqlKata.Query();
  53. if (typeId == 1)
  54. {
  55. var meetingSummaryTodos = await meetingSummaryTodoRepository.GetAllAsync(Q.Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.UserId), userId).Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.IsAdmin), true).Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.TypeId), 2));
  56. query.Where(q => q.WhereIn(nameof(MeetingSummary.Id), meetingSummaryTodos.Select(n => n.MeetingSummaryId)));
  57. }
  58. else if (typeId == 2)
  59. {
  60. var meetingSummaryTodos = await meetingSummaryTodoRepository.GetAllAsync(Q.Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.UserId), userId).Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.IsAdmin), false).Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.TypeId), 2));
  61. query.Where(q => q.WhereIn(nameof(MeetingSummary.Id), meetingSummaryTodos.Select(n => n.MeetingSummaryId)));
  62. }
  63. else if (meetingId > 0)
  64. {
  65. query.Where(q => q.Where(nameof(MeetingSummary.MeetingId), meetingId));
  66. }
  67. else
  68. {
  69. var meetingSummaryTodos = (await meetingSummaryTodoRepository.GetAllAsync(Q.Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.UserId), userId).Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.TypeId), 2))).ToList();
  70. query.Where(q => q.WhereIn(nameof(MeetingSummary.Id), meetingSummaryTodos.Select(n => n.MeetingSummaryId)));
  71. }
  72. if (!string.IsNullOrEmpty(keyword))
  73. {
  74. query.Where(q => q
  75. .WhereLike(nameof(MeetingSummary.Title), $"%{keyword}%")
  76. .OrWhereLike(nameof(MeetingSummary.Content), $"%{keyword}%")
  77. );
  78. }
  79. // return await _repository.GetAllAsync(query);
  80. return await _repository.GetAllAsync(query.OrderByDesc(nameof(MeetingSummary.Id)));
  81. }
  82. /// <summary>
  83. /// 会议列表
  84. /// </summary>
  85. /// <param name="keyword"></param>
  86. /// <param name="userId"></param>
  87. /// <param name="typeId"></param>
  88. /// <param name="meetingId"></param>
  89. /// <param name="page"></param>
  90. /// <param name="perPage"></param>
  91. /// <returns></returns>
  92. public async Task<IEnumerable<MeetingSummaryResult>> GetListMeetingSummaryResultAsync(string keyword, int userId, int typeId, int meetingId, int page = 1, int perPage = 10)
  93. {
  94. var sql = $@"SELECT
  95. a.*,(select Address from ccpph.tede_meeting_location where Id=e.Id) as Address,(select Name from ccpph.tede_meeting where Id=a.MeetingId) as MeetingName,(select Name from ccpph.tede_user where Id=a.UserId) as UserName
  96. FROM
  97. ccpph.tede_meeting_summary a
  98. INNER JOIN
  99. ccpph.tede_meeting_summary_todo b ON a.Id = b.MeetingSummaryId
  100. INNER JOIN
  101. ccpph.tede_meeting c ON a.MeetingId = c.Id
  102. INNER JOIN
  103. ccpph.tede_meeting_room d ON c.RoomId = d.Id
  104. INNER JOIN
  105. ccpph.tede_meeting_location e ON d.LocationId = e.Id
  106. WHERE
  107. b.UserId = {userId}";
  108. if (typeId == 1)
  109. sql += $" AND b.IsAdmin =1 and a.UserId={userId}";
  110. if (typeId == 2)
  111. sql += $" AND b.IsAdmin =0 and a.UserId<>{userId}";
  112. if (meetingId > 0)
  113. sql += $@" AND a.MeetingId ={meetingId}";
  114. if (!string.IsNullOrWhiteSpace(keyword))
  115. sql += $@" AND a.Title LIKE '%{keyword}%'";
  116. sql += $@" order by a.CreatedDate desc limit {(page - 1) * perPage},{perPage}";
  117. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypeStr, DatabaseType.MySql);
  118. var database = new Database(databaseType, _connectionString);
  119. var connection = database.GetConnection();
  120. var result =
  121. await connection
  122. .QueryAsync<MeetingSummaryResult>(sql);
  123. return result;
  124. }
  125. public async Task<MeetingSummary> GetAsync(int id)
  126. {
  127. return await _repository.GetAsync(id);
  128. }
  129. public async Task<bool> DeleteAsync(int summaryId)
  130. {
  131. //删除关联用户
  132. await meetingSummaryTodoRepository.DeleteAsync(Q.Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.TypeId), 2).Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.MeetingSummaryId), summaryId));
  133. return await _repository.DeleteAsync(summaryId);
  134. }
  135. public async Task DeleteByRoomIdAsync(int roomId)
  136. {
  137. await _repository.DeleteAsync(Q.Where(nameof(MeetingSummary.RoomId), roomId));
  138. }
  139. public async Task<MeetingSummary> GetAsync(Query query)
  140. {
  141. return await _repository.GetAsync(query);
  142. }
  143. }
  144. }