SnapshotUserApplication.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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, new InsertNavOptions()
  49. {
  50. ManyToManyNoDeleteMap = true
  51. })
  52. .ExecuteCommandAsync();
  53. }
  54. public ISugarQueryable<CitizenRelationSafetyTypeOutDto> GetCitizenRelationSafetyType(CitizenRelationSafetyTypeInDto dto)
  55. {
  56. var query = _citizenRepository.Queryable()
  57. .LeftJoin<CitizenRelationSafetyType>((citizen, relation) => citizen.Id == relation.CitizenId)
  58. .LeftJoin<SafetyType>((citizen, relation, safety) => relation.SafetyTypeId == safety.Id)
  59. .WhereIF(dto.SafetyTypeId.NotNullOrEmpty(), (citizen, relation, safety) => safety.Id == dto.SafetyTypeId)
  60. .WhereIF(dto.Name.NotNullOrEmpty(), (citizen, relation, safety) => citizen.Name.Contains(dto.Name))
  61. .WhereIF(dto.PhoneNumber.NotNullOrEmpty(), (citizen, relation, safety) => citizen.PhoneNumber.Contains(dto.PhoneNumber))
  62. .Where((citizen, relation, safety) => safety.Id != null)
  63. .Select((citizen, relation, safety) => new CitizenRelationSafetyTypeOutDto
  64. {
  65. CitizenId = citizen.Id,
  66. CitizenName = citizen.Name,
  67. PhoneNumber = citizen.PhoneNumber,
  68. SafetyTypeName = safety.Name,
  69. SafetyTypeId = safety.Id
  70. });
  71. return query;
  72. }
  73. public async Task DeleteCitizenRelationSafetyAsync(DeleteCitizenRelationSafetyTypeInDto dto)
  74. {
  75. foreach (var item in dto.Items)
  76. {
  77. var citizen = await _citizenRepository.Queryable()
  78. .Includes(m => m.SafetyTypes)
  79. .Where(m => m.Id == item.CitizenId)
  80. .FirstAsync();
  81. var deleteSafetyType = citizen.SafetyTypes.FirstOrDefault(m => m.Id == item.SafetyTypeId);
  82. if (deleteSafetyType == null) continue;
  83. citizen.SafetyTypes.Remove(deleteSafetyType);
  84. _citizenRepository.UpdateNav(citizen)
  85. .Include(m => m.SafetyTypes)
  86. .ExecuteCommand();
  87. }
  88. }
  89. public ISugarQueryable<GetThirdCitizenOutDto> GetThirdCitizenAsync(GetThirdCitizenInDto dto)
  90. {
  91. var query = _citizenRepository.Queryable(includeDeleted: true)
  92. .LeftJoin<ThirdAccount>((citizen, third) => citizen.Id == third.ExternalId)
  93. .WhereIF(dto.PhoneNumber.NotNullOrEmpty(), (citizen, third) => citizen.PhoneNumber.Contains(dto.PhoneNumber))
  94. .Select((citizen, third) => new GetThirdCitizenOutDto { CitizenId = citizen.Id}, true);
  95. #if DEBUG
  96. var sql = query.ToSqlString();
  97. #endif
  98. return query;
  99. }
  100. }