SnapshotUserApplication.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using DocumentFormat.OpenXml.Vml.Office;
  2. using Hotline.Application.Snapshot.Contracts;
  3. using Hotline.Caching.Interfaces;
  4. using Hotline.Orders;
  5. using Hotline.Settings;
  6. using Hotline.Share.Dtos.Snapshot;
  7. using Hotline.Share.Tools;
  8. using Hotline.Snapshot;
  9. using Hotline.Snapshot.IRepository;
  10. using Hotline.ThirdAccountDomainServices;
  11. using Hotline.Tools;
  12. using Mapster;
  13. using NPOI.POIFS.Properties;
  14. using SqlSugar;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Linq;
  18. using System.Text;
  19. using System.Threading.Tasks;
  20. using XF.Domain.Dependency;
  21. using XF.Domain.Exceptions;
  22. using XF.Domain.Repository;
  23. namespace Hotline.Application.Snapshot;
  24. public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependency
  25. {
  26. private readonly ICitizenRepository _citizenRepository;
  27. private readonly ISystemDicDataCacheManager _dicData;
  28. private readonly IRepository<SafetyType> _safetyTypeRepository;
  29. public SnapshotUserApplication(ICitizenRepository citizenRepository, ISystemDicDataCacheManager dicData, IRepository<SafetyType> safetyTypeRepository)
  30. {
  31. _citizenRepository = citizenRepository;
  32. _dicData = dicData;
  33. _safetyTypeRepository = safetyTypeRepository;
  34. }
  35. public async Task AddCitizenRelationSafetyType(AddCitizenRelationSafetyTypeInDto dto, CancellationToken token)
  36. {
  37. dto.ValidateObject();
  38. var safeType = new SafetyType
  39. {
  40. Id = dto.SafetyTypeId,
  41. Citizens = []
  42. };
  43. foreach (var item in dto.CitizenIds)
  44. {
  45. safeType.Citizens.Add(new Citizen { Id = item });
  46. }
  47. await _safetyTypeRepository.AddNav(safeType)
  48. .Include(m => m.Citizens)
  49. .ExecuteCommandAsync();
  50. }
  51. public ISugarQueryable<CitizenRelationSafetyTypeOutDto> GetCitizenRelationSafetyType(CitizenRelationSafetyTypeInDto dto)
  52. {
  53. var query = _citizenRepository.Queryable()
  54. .LeftJoin<CitizenRelationSafetyType>((citizen, relation) => citizen.Id == relation.CitizenId)
  55. .LeftJoin<SafetyType>((citizen, relation, safety) => relation.SafetyTypeId == safety.Id)
  56. .WhereIF(dto.SafetyTypeId.NotNullOrEmpty(), (citizen, relation, safety) => safety.Id == dto.SafetyTypeId)
  57. .WhereIF(dto.Name.NotNullOrEmpty(), (citizen, relation, safety) => citizen.Name.Contains(dto.Name))
  58. .WhereIF(dto.PhoneNumber.NotNullOrEmpty(), (citizen, relation, safety) => citizen.PhoneNumber.Contains(dto.PhoneNumber))
  59. .Where((citizen, relation, safety) => safety.Id != null)
  60. .Select((citizen, relation, safety) => new CitizenRelationSafetyTypeOutDto
  61. {
  62. CitizenId = citizen.Id,
  63. CitizenName = citizen.Name,
  64. PhoneNumber = citizen.PhoneNumber,
  65. SafetyTypeName = safety.Name,
  66. SafetyTypeId = safety.Id
  67. });
  68. return query;
  69. }
  70. public async Task DeleteCitizenRelationSafetyAsync(DeleteCitizenRelationSafetyTypeInDto dto)
  71. {
  72. foreach (var item in dto.Items)
  73. {
  74. var citizen = await _citizenRepository.Queryable()
  75. .Includes(m => m.SafetyTypes)
  76. .Where(m => m.Id == item.CitizenId)
  77. .FirstAsync();
  78. var deleteSafetyType = citizen.SafetyTypes.FirstOrDefault(m => m.Id == item.SafetyTypeId);
  79. if (deleteSafetyType == null) continue;
  80. citizen.SafetyTypes.Remove(deleteSafetyType);
  81. _citizenRepository.UpdateNav(citizen)
  82. .Include(m => m.SafetyTypes)
  83. .ExecuteCommand();
  84. }
  85. }
  86. public ISugarQueryable<GetThirdCitizenOutDto> GetThirdCitizenAsync(GetThirdCitizenInDto dto)
  87. {
  88. var query = _citizenRepository.Queryable(includeDeleted: true)
  89. .LeftJoin<ThirdAccount>((citizen, third) => citizen.Id == third.ExternalId)
  90. .WhereIF(dto.PhoneNumber.NotNullOrEmpty(), (citizen, third) => citizen.PhoneNumber.Contains(dto.PhoneNumber))
  91. .Select((citizen, third) => new GetThirdCitizenOutDto(), true);
  92. #if DEBUG
  93. var sql = query.ToSqlString();
  94. #endif
  95. return query;
  96. }
  97. }