|
@@ -0,0 +1,83 @@
|
|
|
+using DocumentFormat.OpenXml.Vml.Office;
|
|
|
+using Hotline.Application.Snapshot.Contracts;
|
|
|
+using Hotline.Caching.Interfaces;
|
|
|
+using Hotline.Orders;
|
|
|
+using Hotline.Settings;
|
|
|
+using Hotline.Share.Dtos.Snapshot;
|
|
|
+using Hotline.Share.Tools;
|
|
|
+using Hotline.Snapshot;
|
|
|
+using Hotline.Snapshot.IRepository;
|
|
|
+using Hotline.ThirdAccountDomainServices;
|
|
|
+using Hotline.Tools;
|
|
|
+using SqlSugar;
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using XF.Domain.Dependency;
|
|
|
+using XF.Domain.Exceptions;
|
|
|
+using XF.Domain.Repository;
|
|
|
+
|
|
|
+namespace Hotline.Application.Snapshot;
|
|
|
+
|
|
|
+public class SnapshotUserApplication : ISnapshotUserApplication, IScopeDependency
|
|
|
+{
|
|
|
+ private readonly IRepository<CitizenRelationSafetyType> _citizenRelationSafetyTypeRepository;
|
|
|
+ private readonly ICitizenRepository _citizenRepository;
|
|
|
+ private readonly ISystemDicDataCacheManager _dicData;
|
|
|
+
|
|
|
+ public SnapshotUserApplication(IRepository<CitizenRelationSafetyType> citizenRelationSafetyTypeRepository, ICitizenRepository citizenRepository, ISystemDicDataCacheManager dicData)
|
|
|
+ {
|
|
|
+ _citizenRelationSafetyTypeRepository = citizenRelationSafetyTypeRepository;
|
|
|
+ _citizenRepository = citizenRepository;
|
|
|
+ _dicData = dicData;
|
|
|
+ }
|
|
|
+
|
|
|
+ public async Task<string> AddCitizenRelationSafetyType(AddCitizenRelationSafetyTypeInDto dto, CancellationToken token)
|
|
|
+ {
|
|
|
+ dto.ValidateObject();
|
|
|
+ var safetyType = _dicData.SafetyType.FirstOrDefault(m => m.DicDataValue == dto.DicDataValue);
|
|
|
+ if (safetyType == null) UserFriendlyException.SameMessage("志愿者类型错误");
|
|
|
+ await _citizenRepository.Queryable()
|
|
|
+ .LeftJoin<ThirdAccount>((citizen, account) => account.ExternalId == citizen.Id)
|
|
|
+ .Where(citizen => citizen.PhoneNumber == dto.PhoneNumber)
|
|
|
+ .Select((citizen, account) => citizen.Id)
|
|
|
+ .FirstAsync(token)
|
|
|
+ .Then(async citizenId =>
|
|
|
+ {
|
|
|
+ var relationEntity = await _citizenRelationSafetyTypeRepository.Queryable()
|
|
|
+ .Where(m => m.CitizenId == citizenId && m.SafetyTypeValue == dto.DicDataValue)
|
|
|
+ .FirstAsync(token);
|
|
|
+ if (relationEntity != null) return string.Empty;
|
|
|
+ relationEntity = new CitizenRelationSafetyType
|
|
|
+ {
|
|
|
+ CitizenId = citizenId,
|
|
|
+ Name = dto.Name,
|
|
|
+ SafetyTypeValue = dto.DicDataValue
|
|
|
+ };
|
|
|
+ return await _citizenRelationSafetyTypeRepository.AddAsync(relationEntity, token);
|
|
|
+ }, nullCache =>
|
|
|
+ {
|
|
|
+ throw UserFriendlyException.SameMessage("微信用户不存在");
|
|
|
+ });
|
|
|
+
|
|
|
+ return string.Empty;
|
|
|
+ }
|
|
|
+
|
|
|
+ public ISugarQueryable<CitizenRelationSafetyTypeOutDto> GetCitizenRelationSafetyType(CitizenRelationSafetyTypeInDto dto)
|
|
|
+ {
|
|
|
+ var query = _citizenRelationSafetyTypeRepository.Queryable()
|
|
|
+ .LeftJoin<SystemDicData>((relation, dicData) => relation.SafetyTypeValue == dicData.DicDataValue && dicData.DicTypeCode == SysDicTypeConsts.SafetyType)
|
|
|
+ .LeftJoin<Citizen>((relation, dicData, citizen) => citizen.Id == relation.CitizenId)
|
|
|
+ .WhereIF(dto.SafetyTypeValue.NotNullOrEmpty(), (relation, dicData) => relation.SafetyTypeValue == dto.SafetyTypeValue)
|
|
|
+ .Select((relation, dicData, citizen) => new CitizenRelationSafetyTypeOutDto
|
|
|
+ {
|
|
|
+ CitizenRelationSafetyTypeId = relation.Id,
|
|
|
+ Name = relation.Name,
|
|
|
+ PhoneNumber = citizen.PhoneNumber,
|
|
|
+ SafetyTypeTxt = dicData.DicDataName,
|
|
|
+ });
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+}
|