//public long AddAction(SystemActionType type, // string tag, // ISystemActionInput inputData, // long? parentActionId, // long? by, // SystemActionStatus? status = SystemActionStatus.None) //{ // var input = JsonConvert.SerializeObject(inputData); // _logService.Info("AddAction, type=" + type + ", inputData=" + input); // var newAction = new SystemActionDTO() // { // ParentId = parentActionId, // Status = (int)status, // Type = (int)type, // Tag = tag, // InputData = input, // CreateDate = _time.GetUtcTime(), // CreatedBy = by, // }; // using (var db = _dbFactory.GetRWDb()) // { // db.SystemActions.AddAction(newAction); // db.Commit(); // } // return newAction.Id; //} public void SetResult(IUnitOfWork db, long actionId, SystemActionStatus status, ISystemActionOutput outputData, string groupId = null) { string output = null; if (outputData != null) { output = JsonConvert.SerializeObject(outputData); } _logService.Info("SetResult, actionId=" + actionId + " status=" + status + ", outputData=" + output + ", groupId=" + groupId); var action = db.SystemActions.Get(actionId); if (action != null) { if (groupId != null) { action.GroupId = groupId; } action.Status = (int)status; action.OutputData = output; action.AttemptDate = _time.GetUtcTime(); if (status != SystemActionStatus.InProgress) { action.AttemptNumber++; } } }
public static string GetName(SystemActionStatus actionType) { switch (actionType) { case SystemActionStatus.None: return("Awaiting"); case SystemActionStatus.Done: return("Done"); case SystemActionStatus.InProgress: return("In progress"); case SystemActionStatus.Fail: return("Failed"); case SystemActionStatus.Suspended: return("Suspended"); } return("-"); }
protected void DefaultActionUpdateEntitiesAfterResponse(long feedId, IList <FeedResultMessage> errorList, string itemAdditionalFieldName, int maxAttemptCount) { using (var db = DbFactory.GetRWDb()) { var feedItems = db.FeedItems.GetAllAsDto().Where(fi => fi.FeedId == feedId).ToList(); var systemActionIds = feedItems.Select(f => f.ItemId).ToList(); var systemActions = db.SystemActions.GetAll().Where(i => systemActionIds.Contains(i.Id)).ToList(); var itemIds = systemActions.Select(a => StringHelper.TryGetInt(a.Tag)) .Where(a => a.HasValue) .Select(a => a.Value) .ToList(); //Remove all exist errors var dbExistErrors = db.ItemAdditions.GetAll().Where(i => itemIds.Contains(i.ItemId) && i.Field == itemAdditionalFieldName).ToList(); foreach (var dbExistError in dbExistErrors) { db.ItemAdditions.Remove(dbExistError); } foreach (var action in systemActions) { var feedItem = feedItems.FirstOrDefault(fi => fi.ItemId == action.Id); if (feedItem != null) { var itemErrors = errorList.Where(e => e.MessageId == feedItem.MessageId).ToList(); TextMessageOutput output = null; SystemActionStatus status = SystemActionStatus.None; if (itemErrors.Any()) { action.AttemptNumber++; action.AttemptDate = Time.GetAppNowTime(); if (action.AttemptNumber > maxAttemptCount) { action.Status = (int)SystemActionStatus.Fail; } var itemId = StringHelper.TryGetLong(action.Tag); if (itemId.HasValue) { foreach (var itemError in itemErrors) { db.ItemAdditions.Add(new Core.Entities.Listings.ItemAddition() { ItemId = (int)itemId.Value, Field = itemAdditionalFieldName, Value = itemError.Message, CreateDate = Time.GetAppNowTime(), }); } } output = new TextMessageOutput() { IsSuccess = false, Messages = itemErrors.Select(i => new MessageString() { Status = MessageStatus.Error, Message = i.Message }).ToList() }; status = SystemActionStatus.Fail; } else { output = new TextMessageOutput() { IsSuccess = false }; status = SystemActionStatus.Done; } action.OutputData = SystemActionHelper.ToStr(output); action.Status = (int)status; Log.Info("Update action status, actionId=" + action.Id + ", status=" + action.Status); } } db.Commit(); } }