TopicGroupRepository.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using AutoMapper;
  7. using Dapper;
  8. using Datory;
  9. using GxPress.Common.AppOptions;
  10. using GxPress.Common.Tools;
  11. using GxPress.Entity;
  12. using GxPress.Entity.Topic;
  13. using GxPress.Repository.Interface.Topic;
  14. using GxPress.Request.App.Topic;
  15. using Microsoft.Extensions.Options;
  16. using SqlKata;
  17. namespace GxPress.Repository.Implement.Topic
  18. {
  19. public class TopicGroupRepository : ITopicGroupRepository
  20. {
  21. private readonly Repository<TopicGroup> _repository;
  22. private readonly IMapper _mapper;
  23. private readonly string _connectionString;
  24. private readonly string _databaseTypestr;
  25. public TopicGroupRepository(IOptionsMonitor<DatabaseOptions> dbOptionsAccessor, IMapper mapper)
  26. {
  27. _databaseTypestr = dbOptionsAccessor.CurrentValue.DatabaseType;
  28. _connectionString = dbOptionsAccessor.CurrentValue.ConnectionString;
  29. var databaseType = StringUtils.ToEnum<DatabaseType>(dbOptionsAccessor.CurrentValue.DatabaseType, DatabaseType.MySql);
  30. var database = new Database(databaseType, dbOptionsAccessor.CurrentValue.ConnectionString);
  31. _repository = new Repository<TopicGroup>(database);
  32. _mapper = mapper;
  33. }
  34. public IDatabase Database => _repository.Database;
  35. public string TableName => _repository.TableName;
  36. public List<TableColumn> TableColumns => _repository.TableColumns;
  37. public async Task<TopicGroup> GetAsync(int id)
  38. {
  39. return await _repository.GetAsync(id);
  40. }
  41. /// <summary>
  42. /// 根据ID删除分组
  43. /// </summary>
  44. /// <param name="ids"></param>
  45. /// <returns></returns>
  46. public async Task<bool> DeleteAsync(List<int> ids)
  47. {
  48. return await _repository.DeleteAsync(Q.WhereIn(nameof(TopicGroup.Id), ids)) > 0;
  49. }
  50. /// <summary>
  51. /// 插入
  52. /// </summary>
  53. /// <param name="topicGroup"></param>
  54. /// <returns></returns>
  55. public async Task<bool> InsertAsync(TopicGroup topicGroup)
  56. {
  57. var id = await _repository.InsertAsync(topicGroup) > 0;
  58. return await _repository.UpdateAsync(Q.Set(nameof(TopicGroup.Sort), id).Where(nameof(TopicGroup.Id), id)) >
  59. 0;
  60. }
  61. /// <summary>
  62. /// 根据用户ID获取分组
  63. /// </summary>
  64. /// <param name="userId"></param>
  65. /// <returns></returns>
  66. public async Task<IEnumerable<TopicGroup>> GetTopicGroupsAsync(int userId)
  67. {
  68. return await _repository.GetAllAsync(Q.Where(nameof(TopicGroup.UserId), userId)
  69. .OrderByDesc(nameof(TopicGroup.Sort)));
  70. }
  71. /// <summary>
  72. /// 修改分组名称
  73. /// </summary>
  74. /// <param name="request"></param>
  75. /// <returns></returns>
  76. public async Task<bool> UpdateAsync(TopicGroupInRequest request)
  77. {
  78. return await _repository.UpdateAsync(Q.Set(nameof(TopicGroup.Name), request.Name)
  79. .Where(nameof(TopicGroup.Id), request.Id)) > 0;
  80. }
  81. /// <summary>
  82. /// 排序
  83. /// </summary>
  84. /// <param name="firstId"></param>
  85. /// <param name="secondId"></param>
  86. /// <param name="userId"></param>
  87. /// <returns></returns>
  88. public async Task<bool> MoveSortAsync(int firstId, int secondId, int userId)
  89. {
  90. //获取第一个
  91. var topicGroupFirst = await _repository.GetAsync(firstId);
  92. //获取第二个数据
  93. var topicGroupSecond = await _repository.GetAsync(secondId);
  94. var sort = 0;
  95. var databaseType = _databaseTypestr.ToEnum<DatabaseType>(DatabaseType.MySql);
  96. var database = new Database(databaseType, _connectionString);
  97. var connection = database.GetConnection();
  98. if (topicGroupFirst.Sort < topicGroupSecond.Sort)
  99. {
  100. //修改第一个排序
  101. await _repository.UpdateAsync(Q.Set(nameof(TopicGroupUser.Sort), topicGroupSecond.Sort)
  102. .Where(nameof(TopicGroup.Id), firstId));
  103. sort = topicGroupSecond.Sort;
  104. var sql =
  105. $"update ccpph.tede_topic_group set Sort=Sort-1 where UserId={userId} and Sort<={sort} and Id not in({firstId}) and id>0";
  106. return await connection.ExecuteAsync(sql) > 0;
  107. }
  108. else
  109. {
  110. //修改第一个排序
  111. await _repository.UpdateAsync(Q.Set(nameof(TopicGroupUser.Sort), topicGroupSecond.Sort)
  112. .Where(nameof(TopicGroup.Id), firstId));
  113. sort = topicGroupSecond.Sort;
  114. var sql =
  115. $"update ccpph.tede_topic_group set Sort=Sort+1 where UserId={userId} and Sort>={sort} and Id not in({firstId}) and id>0";
  116. return await connection.ExecuteAsync(sql) > 0;
  117. }
  118. }
  119. public async Task<bool> UpdateAsync(Query query)
  120. {
  121. return await _repository.UpdateAsync(query)>0;
  122. }
  123. }
  124. }