protected override void When() { try { _mapper.Map(_event, ActivityType.PayeSchemeAdded); } catch (Exception ex) { _ex = ex; } }
public async Task <Activity> SaveActivity <TMessage>(TMessage message, ActivityType activityType) where TMessage : class { var messageContext = _messageContextProvider.GetContextForMessageBody(message); if (!Guid.TryParse(messageContext.MessageId, out Guid messageId)) { throw new Exception($"The attempt to save activity from message type {typeof(TMessage).FullName} failed because the message id supplied by {nameof(IMessageContextProvider)}.{nameof(IMessageContextProvider.GetContextForMessageBody)} is not a GUID (the value provided was {messageContext.MessageId}"); } var activity = _activityMapper.Map(message, activityType, messageId: messageId); await RunWithTry(() => _cosmosActivityRepository.UpsertActivityAsync(activity), "Saving activity to CosmosDB"); await RunWithTry(() => _elasticActivityRepository.UpsertActivityAsync(activity), "Saving activity to Elastic"); return(activity); }
public async Task BeforeBackup() { var activitiesFromMemory = AccountIds .SelectMany(i => Types .Select(t => { var message = _objectCreator.Create(t.Key, new { AccountId = i }); var activity = _activityMapper.Map(message, t.Value); return(activity); }) ) .OrderBy(a => a.AccountId) .ThenBy(a => a.Type) .ToList(); await Task.WhenAll(activitiesFromMemory.Select(a => _client.IndexAsync(a, i => i.Refresh(Refresh.True)))); var activitiesFromElastic = await GetActivitiesFromElastic(); Verify(activitiesFromMemory, activitiesFromElastic); File.WriteAllText(FilePath, JsonConvert.SerializeObject(activitiesFromElastic)); }
protected override void When() { _activity = _mapper.Map(_event, ActivityType.PayeSchemeAdded); }
protected override void When() { _activity = _mapper.Map(_event, ActivityType.PayeSchemeAdded, e => e.AccountId, e => e.CreatedAt, messageId: Guid.NewGuid()); }
public ServiceResult <ActivityDTO> CreateActivity(ActivityCreateParams activity) { Check.Argument.IsNotNull(activity, "activity"); var result = Validation.Validate <ServiceResult <ActivityDTO> >(() => string.IsNullOrEmpty(activity.Title), "Title", "标题不能为空") .And(() => !activity.ActivityType.HasValue, "ActivityType", "必须选择任务类型") .And(() => !activity.StartedOn.HasValue, "StartedOn", "开始时间不能为空") .And(() => activity.OwningUserId <= 0, "OwningUserName", "创建者不能为空") .Result(); var allOrgName = new List <string> { "ChangHong", "ChangHongAll" }; if (activity.ParentId.GetValueOrDefault(0) == 0) { var participant = activity.ParticipantNames.Split(';').ToList(); if (participant.Count(a => !allOrgName.Contains(a)) == 0) { result.RuleViolations.Add(new RuleViolation("participant", "发给所有人的帖子,Test.............")); } } if (!result.RuleViolations.IsEmpty()) { return(result); } var activityEntity = new Activity { ParentId = activity.ParentId, ActivityType = activity.ActivityType, Priority = activity.Priority, Title = activity.Title, AssignedOn = activity.AssignedOn, DateDue = activity.DateDue, StartedOn = activity.StartedOn ?? DateTime.UtcNow, CompletedOn = activity.CompletedOn, ActualHours = activity.ActualHours, Detail = activity.Detail, EstimatedProgress = activity.EstimatedProgress, OwningUserId = activity.OwningUserId, OrganizationId = activity.OrganizationId, Status = activity.Status, CreatedBy = activity.OwningUserId, ModifiedBy = activity.OwningUserId, CreatedOn = DateTime.UtcNow, ModifiedOn = DateTime.UtcNow, ParticipantIds = activity.ParticipantIds, ParticipantNames = activity.ParticipantNames, ReAssigned = activity.ReAssigned }; var orgParticipantIds = new List <int>(); var userParticipantIds = new List <int>(); if (!string.IsNullOrWhiteSpace(activity.ParticipantIds)) { var ids = activity.ParticipantIds.Split(";".ToArray(), StringSplitOptions.RemoveEmptyEntries); if (ids.Length > 0) { foreach (var id in ids) { var pv = id.Split(new[] { '_' }, StringSplitOptions.RemoveEmptyEntries); if (pv.Length != 2) { continue; } if (pv[0].ToLower() == "U".ToLower()) { int userId; if (int.TryParse(pv[1], out userId)) { if (!userParticipantIds.Contains(userId)) { userParticipantIds.Add(userId); } } } else if (pv[0].ToLower() == "O".ToLower()) { int orgId; if (int.TryParse(pv[1], out orgId)) { if (!orgParticipantIds.Contains(orgId)) { orgParticipantIds.Add(orgId); } } } } } } if (!userParticipantIds.Contains(activityEntity.OwningUserId)) { userParticipantIds.Add(activityEntity.OwningUserId); } //标记已读 activityEntity.Reads.Add(new ActivityRead { ActivityId = activityEntity.Id, UserId = activityEntity.OwningUserId, Read = true }); foreach (var participantId in userParticipantIds) { activityEntity.Participants.Add(new ActivityParticipant { ActivityId = activityEntity.Id, ParticipantId = participantId, OperateType = participantId != activityEntity.OwningUserId ? ActivityParticipantOperateType.User : ActivityParticipantOperateType.OwningUser }); } foreach (var participantId in orgParticipantIds) { activityEntity.Participants.Add(new ActivityParticipant { ActivityId = activityEntity.Id, ParticipantId = participantId, OperateType = ActivityParticipantOperateType.Organization }); } try { _databaseContext.Activities.Add(activityEntity); _databaseContext.SaveChanges(); if (activity.ParentId.HasValue) { var parentActivityEntity = _databaseContext.Activities .Include(a => a.Reads) .FirstOrDefault(a => a.Id == activity.ParentId.Value); if (parentActivityEntity != null) { parentActivityEntity.Status = ActivityStatuses.Processing; parentActivityEntity.ModifiedOn = DateTime.UtcNow; parentActivityEntity.ModifiedBy = activity.OwningUserId; // 新增回复则需要修改父活动的参与者状态 foreach (var read in parentActivityEntity.Reads) { if (read.UserId == activityEntity.OwningUserId) { read.Read = true; } else { read.Read = false; read.Hidden = false; } } _databaseContext.SaveChanges(); } } } catch (Exception ex) { result.RuleViolations.Add(new RuleViolation("_FORM", string.Format("不能保存活动记录。错误信息:{0}", ex.Message))); return(result); } result = new ServiceResult <ActivityDTO>(_activityMapper.Map(activityEntity)); return(result); }