MeetingRepository.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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 System;
  11. using System.Linq;
  12. using GxPress.Request.App.WorkMeeting;
  13. using Dapper;
  14. namespace GxPress.Repository.Implement.WorkMeeting
  15. {
  16. public class MeetingRepository : IMeetingRepository
  17. {
  18. private readonly Repository<Meeting> _repository;
  19. private readonly IMeetingOrderRepository _meetingOrderRepository;
  20. private readonly Repository<Entity.WorkMeeting.MeetingSummaryTodo> meetingSummaryTodoRepository;
  21. private readonly string _connectionString;
  22. private readonly string _databaseTypeStr;
  23. public MeetingRepository(IOptionsMonitor<DatabaseOptions> dbOptionsAccessor, IDistributedCache cache, IMeetingOrderRepository meetingOrderRepository)
  24. {
  25. _databaseTypeStr = dbOptionsAccessor.CurrentValue.DatabaseType;
  26. _connectionString = dbOptionsAccessor.CurrentValue.ConnectionString;
  27. var databaseType = StringUtils.ToEnum<DatabaseType>(dbOptionsAccessor.CurrentValue.DatabaseType, DatabaseType.MySql);
  28. var database = new Database(databaseType, dbOptionsAccessor.CurrentValue.ConnectionString);
  29. _repository = new Repository<Meeting>(database, cache);
  30. meetingSummaryTodoRepository = new Repository<Entity.WorkMeeting.MeetingSummaryTodo>(database);
  31. _meetingOrderRepository = meetingOrderRepository;
  32. }
  33. public IDatabase Database => _repository.Database;
  34. public string TableName => _repository.TableName;
  35. public List<TableColumn> TableColumns => _repository.TableColumns;
  36. public async Task<int> InsertAsync(Meeting item)
  37. {
  38. return await _repository.InsertAsync(item);
  39. }
  40. public async Task<bool> UpdateAsync(Meeting item)
  41. {
  42. return await _repository.UpdateAsync(item);
  43. }
  44. public async Task<IEnumerable<Meeting>> GetCurrentListAsync(int userId, string keyword)
  45. {
  46. var query = new SqlKata.Query();
  47. var meetingSummaryTodos = await meetingSummaryTodoRepository.GetAllAsync(Q.Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.UserId), userId).Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.TypeId), 1));
  48. query.Where(q => q.WhereIn(nameof(Meeting.Id), meetingSummaryTodos.Select(n => n.MeetingSummaryId)));
  49. query.Where(nameof(Meeting.EndDateTime), ">", DateTime.Now)
  50. .OrderByDesc(nameof(Meeting.CreatedDate));
  51. if (!string.IsNullOrEmpty(keyword))
  52. {
  53. query.Where(q => q
  54. .WhereLike(nameof(Meeting.Name), $"%{keyword}%")
  55. .OrWhereLike(nameof(Meeting.Description), $"%{keyword}%")
  56. );
  57. }
  58. return await _repository.GetAllAsync(query);
  59. }
  60. public async Task<IEnumerable<Meeting>> GetHistoryListAsync(int userId, string keyword, int page = 1, int perPage = 10)
  61. {
  62. var sql = $@"select * from tede_meeting where Id in( select MeetingSummaryId from tede_meeting_summary_todo where TypeId=1 and UserId={userId}) and EndDateTime<'{DateTime.Now}'";
  63. if (!string.IsNullOrWhiteSpace(keyword))
  64. sql += $" and (Name like '%{keyword}%' or Description like '%{keyword}%')";
  65. sql += $" limit {(page - 1) * perPage},{perPage}";
  66. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypeStr, DatabaseType.MySql);
  67. var database = new Database(databaseType, _connectionString);
  68. var connection = database.GetConnection();
  69. var items = await connection
  70. .QueryAsync<Meeting>(sql);
  71. return items;
  72. }
  73. public async Task<Meeting> GetAsync(int meetingId)
  74. {
  75. return await _repository.GetAsync(meetingId);
  76. }
  77. public async Task<bool> DeleteAsync(int meetingId)
  78. {
  79. await _meetingOrderRepository.DeleteByMeetingIdAsync(meetingId);
  80. //删除关联用户
  81. await meetingSummaryTodoRepository.DeleteAsync(Q.Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.TypeId), 1).Where(nameof(Entity.WorkMeeting.MeetingSummaryTodo.MeetingSummaryId), meetingId));
  82. return await _repository.DeleteAsync(meetingId);
  83. }
  84. public async Task DeleteByRoomIdAsync(int roomId)
  85. {
  86. await _repository.DeleteAsync(Q.Where(nameof(Meeting.RoomId), roomId));
  87. }
  88. /// <summary>
  89. /// 获取会议人员
  90. /// </summary>
  91. /// <param name="request"></param>
  92. /// <returns></returns>
  93. public async Task<IEnumerable<MeetingUserResult>> GetUserByMeeting(MeetingUsersRequest request)
  94. {
  95. string sql = $"select * from ccpph.tede_user where Id in(select UserId from ccpph.tede_meeting_summary_todo where TypeId=1 and MeetingSummaryId={request.MeetingId})";
  96. if (!string.IsNullOrWhiteSpace(request.KeyWord))
  97. {
  98. sql += $" AND (Name like '%{request.KeyWord}%' or Phone like '%{request.KeyWord}%')";
  99. }
  100. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypeStr, DatabaseType.MySql);
  101. var database = new Database(databaseType, _connectionString);
  102. var connection = database.GetConnection();
  103. var items = await connection
  104. .QueryAsync<MeetingUserResult>(sql);
  105. foreach (var item in items)
  106. item.AvatarUrl = StringUtils.AddDomainMin(item.AvatarUrl);
  107. return items;
  108. }
  109. }
  110. }