FeedbackRepository.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using AutoMapper;
  6. using GxPress.Common.AppOptions;
  7. using GxPress.Common.Page;
  8. using GxPress.Common.Tools;
  9. using GxPress.Entity;
  10. using GxPress.Repository.Interface;
  11. using GxPress.Request.Feedback;
  12. using GxPress.Result.Feedback;
  13. using Microsoft.Extensions.Options;
  14. using Datory;
  15. using Dapper;
  16. namespace GxPress.Repository.Implement
  17. {
  18. public class FeedbackRepository : IFeedbackRepository
  19. {
  20. private readonly Repository<Feedback> _repository;
  21. private readonly Repository<User> _userRepository;
  22. private readonly IMapper _mapper;
  23. private readonly string _connectionString;
  24. private readonly string _databaseTypestr;
  25. public FeedbackRepository(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<Feedback>(database);
  32. _userRepository = new Repository<User>(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. /// <summary>
  39. /// 分页显示
  40. /// </summary>
  41. /// <param name="request"></param>
  42. /// <returns></returns>
  43. public async Task<PagedList<FeedbackPageResult>> GetPagedList(FeedbackPageRequest request)
  44. {
  45. var sqlValue = "";
  46. //获取分页条数
  47. if (request.FeedbackType > 0)
  48. sqlValue += $" and a.FeedbackType={request.FeedbackType}";
  49. if (!string.IsNullOrWhiteSpace(request.KeyWord))
  50. sqlValue += $" and (b.Name like '%{request.KeyWord}%' or a.Content like '%{request.KeyWord}%')";
  51. if (!string.IsNullOrEmpty(request.BeginTime) && !string.IsNullOrEmpty(request.EndTime))
  52. {
  53. if (DateTime.TryParse(request.BeginTime, out var beginTime) && DateTime.TryParse(request.EndTime, out var endTime))
  54. {
  55. if (endTime > beginTime)
  56. {
  57. sqlValue += $" and a.CreatedDate >='{beginTime.ToString("yyyy-MM-dd HH:mm:ss")}'";
  58. sqlValue += $" and a.CreatedDate <='{endTime.ToString("yyyy-MM-dd HH:mm:ss")}'";
  59. }
  60. }
  61. }
  62. var sql = $"SELECT a.*,b.Name FROM ccpph.tede_feedback a inner join ccpph.tede_user b on a.UserId=b.Id where 1=1 {sqlValue}";
  63. var countSql = $"SELECT count(1) FROM ccpph.tede_feedback a inner join ccpph.tede_user b on a.UserId=b.Id where 1=1 {sqlValue}";
  64. sql += $" order by a.CreatedDate desc LIMIT {(request.Page - 1) * request.PerPage},{request.PerPage}";
  65. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypestr, DatabaseType.MySql);
  66. var database = new Database(databaseType, _connectionString);
  67. var connection = database.GetConnection();
  68. var items = await connection
  69. .QueryAsync<FeedbackPageResult, User, FeedbackPageResult>(sql,
  70. (feedbackPageResult, user) =>
  71. {
  72. feedbackPageResult.Name = user == null ? "" : user.Name;
  73. return feedbackPageResult;
  74. },
  75. splitOn: "Name");
  76. var total = await connection.ExecuteScalarAsync<int>(countSql);
  77. //获取分页条数
  78. var pagedList = new PagedList<FeedbackPageResult>
  79. {
  80. Total = total
  81. };
  82. pagedList.Items = items;
  83. return pagedList;
  84. }
  85. public async Task<Feedback> GetAsync(int id)
  86. {
  87. return await _repository.GetAsync(id);
  88. }
  89. public async Task<int> InsertAsync(Feedback feedback)
  90. {
  91. return await _repository.InsertAsync(feedback);
  92. }
  93. /// <summary>
  94. /// 删除意见反馈
  95. /// </summary>
  96. /// <param name="id"></param>
  97. /// <returns></returns>
  98. public async Task<bool> DeleteAsync(int id)
  99. {
  100. return await _repository.DeleteAsync(id);
  101. }
  102. }
  103. }