protected override void When()
 {
     try
     {
         _mapper.Map(_event, ActivityType.PayeSchemeAdded);
     }
     catch (Exception ex)
     {
         _ex = ex;
     }
 }
示例#2
0
        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());
 }
示例#6
0
        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);
        }