SnapshotUserApplication.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 SqlSugar;
  14. using System;
  15. using System.Collections.Generic;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. using XF.Domain.Dependency;
  20. using XF.Domain.Exceptions;
  21. using XF.Domain.Repository;
  22. namespace Hotline.Application.Snapshot;
  23. public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependency
  24. {
  25. private readonly ICitizenRepository _citizenRepository;
  26. private readonly ISystemDicDataCacheManager _dicData;
  27. private readonly IRepository<SafetyType> _safetyTypeRepository;
  28. public SnapshotUserApplication(ICitizenRepository citizenRepository, ISystemDicDataCacheManager dicData, IRepository<SafetyType> safetyTypeRepository)
  29. {
  30. _citizenRepository = citizenRepository;
  31. _dicData = dicData;
  32. _safetyTypeRepository = safetyTypeRepository;
  33. }
  34. public async Task AddCitizenRelationSafetyType(AddCitizenRelationSafetyTypeInDto dto, CancellationToken token)
  35. {
  36. dto.ValidateObject();
  37. var safeType = new SafetyType
  38. {
  39. Id = dto.SafetyTypeId,
  40. Citizens = []
  41. };
  42. foreach (var item in dto.CitizenIds)
  43. {
  44. safeType.Citizens.Add(new Citizen { Id = item });
  45. }
  46. await _safetyTypeRepository.AddNav(safeType)
  47. .Include(m => m.Citizens)
  48. .ExecuteCommandAsync();
  49. }
  50. public ISugarQueryable<CitizenRelationSafetyTypeOutDto> GetCitizenRelationSafetyType(CitizenRelationSafetyTypeInDto dto)
  51. {
  52. var query = _citizenRepository.Queryable()
  53. .LeftJoin<CitizenRelationSafetyType>((citizen, relation) => citizen.Id == relation.CitizenId)
  54. .LeftJoin<SafetyType>((citizen, relation, safety) => relation.SafetyTypeId == safety.Id)
  55. .WhereIF(dto.SafetyTypeId.NotNullOrEmpty(), (citizen, relation, safety) => safety.Id == dto.SafetyTypeId)
  56. .Select((citizen, relation, safety) => new CitizenRelationSafetyTypeOutDto
  57. {
  58. CitizenId = citizen.Id,
  59. CitizenName = citizen.Name,
  60. PhoneNumber = citizen.PhoneNumber,
  61. SafetyTypeName = safety.Name,
  62. SafetyTypeId = safety.Id
  63. });
  64. return query;
  65. }
  66. public async Task DeleteCitizenRelationSafetyAsync(DeleteCitizenRelationSafetyTypeInDto dto)
  67. {
  68. foreach (var item in dto.Items)
  69. {
  70. var citizen = await _citizenRepository.Queryable()
  71. .Includes(m => m.SafetyTypes)
  72. .Where(m => m.Id == item.CitizenId)
  73. .FirstAsync();
  74. var deleteSafetyType = citizen.SafetyTypes.FirstOrDefault(m => m.Id == item.SafetyTypeId);
  75. if (deleteSafetyType == null) continue;
  76. citizen.SafetyTypes.Remove(deleteSafetyType);
  77. _citizenRepository.UpdateNav(citizen)
  78. .Include(m => m.SafetyTypes)
  79. .ExecuteCommand();
  80. }
  81. }
  82. }