AutoCompleteQueryManager.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using Abp.Application.Services.Dto;
  2. using Abp.Dependency;
  3. using Abp.Domain.Repositories;
  4. using Microsoft.EntityFrameworkCore;
  5. using VberZero.BaseSystem;
  6. namespace VberZero.DomainService.AutoCompletes;
  7. public class AutoCompleteQueryManager : VzDomainServiceBase, IAutoCompleteQueryManager, ISingletonDependency
  8. {
  9. public AutoCompleteQueryManager(IRepository<SysAutoCompleteQuery> repository)
  10. {
  11. Repository = repository;
  12. }
  13. private IRepository<SysAutoCompleteQuery> Repository { get; }
  14. /// <summary>
  15. /// 添加/修改新的查询
  16. /// </summary>
  17. /// <param name="codeKey"></param>
  18. /// <param name="value"></param>
  19. /// <param name="name"></param>
  20. /// <returns></returns>
  21. public async Task InsertOrUpdate(string codeKey, string value, string name)
  22. {
  23. await InsertOrUpdate(codeKey, value, name, null);
  24. }
  25. /// <summary>
  26. /// 添加/修改新的查询
  27. /// </summary>
  28. /// <param name="codeKey"></param>
  29. /// <param name="value"></param>
  30. /// <param name="name"></param>
  31. /// <param name="fun">给记录添加扩展值</param>
  32. /// <returns></returns>
  33. public async Task InsertOrUpdate(string codeKey, string value, string name,
  34. Func<SysAutoCompleteQuery, SysAutoCompleteQuery> fun)
  35. {
  36. var entity =
  37. await Repository.FirstOrDefaultAsync(a =>
  38. a.CodeKey == codeKey && a.ValueKey == value);
  39. var date = DateTime.Now;
  40. if (entity == null)
  41. {
  42. entity = new SysAutoCompleteQuery()
  43. {
  44. CodeKey = codeKey,
  45. ValueKey = value,
  46. NameKey = name,
  47. UseCount = 1,
  48. LastUseDate = date
  49. };
  50. fun?.Invoke(entity);
  51. await Repository.InsertAsync(entity);
  52. }
  53. else
  54. {
  55. entity.UseCount++;
  56. entity.LastUseDate = date;
  57. fun?.Invoke(entity);
  58. await Repository.UpdateAsync(entity);
  59. }
  60. }
  61. /// <summary>
  62. /// 查询指定记录
  63. /// </summary>
  64. /// <param name="codeKey"></param>
  65. /// <param name="value"></param>
  66. /// <returns></returns>
  67. public async Task<SysAutoCompleteQuery> QueryItem(string codeKey, string value)
  68. {
  69. var item = await Repository.FirstOrDefaultAsync(a => a.CodeKey == codeKey && a.ValueKey == value);
  70. return item;
  71. }
  72. /// <summary>
  73. /// 查询记录列表
  74. /// </summary>
  75. /// <param name="codeKey"></param>
  76. /// <param name="name"></param>
  77. /// <returns></returns>
  78. public async Task<List<SysAutoCompleteQuery>> QueryItems(string codeKey, string name)
  79. {
  80. var list = await Repository.GetAll().Where(a => a.CodeKey == codeKey && (string.IsNullOrEmpty(name) || a.NameKey.Contains(name))).OrderByDescending(a => a.UseCount).ThenByDescending(a => a.LastUseDate).ToListAsync();
  81. return list;
  82. }
  83. /// <summary>
  84. /// 查询记录列表分页
  85. /// </summary>
  86. /// <param name="codeKey"></param>
  87. /// <param name="keywords"></param>
  88. /// <param name="skip"></param>
  89. /// <param name="take"></param>
  90. /// <returns></returns>
  91. public async Task<PagedResultDto<SysAutoCompleteQuery>> PageItems(string codeKey, string keywords, int skip,
  92. int take)
  93. {
  94. take = take == 0 ? 20 : take;
  95. var query = Repository.GetAll().Where(a => a.CodeKey == codeKey && (string.IsNullOrEmpty(keywords) || a.NameKey.Contains(keywords)));
  96. var total = await query.CountAsync();
  97. var list = await query.OrderByDescending(a => a.UseCount).ThenByDescending(a => a.LastUseDate).Skip(skip).Take(take).ToListAsync();
  98. return new PagedResultDto<SysAutoCompleteQuery>(total, list);
  99. }
  100. }