public MarkNotCompletedTasksDaily(UnixUtcTime firstExecution, TaskInstances taskInstances) : base(firstExecution, TimeSpan.FromDays(1), () => taskInstances .ActiveItemsDueBefore(Clock.UnixUtcNow.Minus(TimeSpan.FromDays(2))) .Select(x => taskInstances.Apply( new MarkTaskNotComplete { Id = x.Id, At = Clock.UnixUtcNow, ApproverUserId = new ServiceUser() }))) { }
/// <summary> /// 转移任务交接对象(用于接任务和交任务不在同一个NPC的情况) /// </summary> /// <param name="t"></param> public void TransferTaskToThis(Task t) { if (!t) { return; } TaskInstances.Add(t); t.currentTaskGiver = this._ID; }
private void InitTask(Task[] ts) { if (ts.Length == 0) { return; } if (taskInstances.Count > 0) { taskInstances.Clear(); } foreach (Task t in ts) { if (t) { foreach (CollectObjective co in t.CollectObjectives) { t.Objectives.Add(co); } foreach (KillObjective ko in t.KillObjectives) { t.Objectives.Add(ko); } foreach (TalkObjective to in t.TalkObjectives) { t.Objectives.Add(to); } if (t.CmpltObjectiveInOrder) { t.Objectives.Sort((x, y) => { if (x.OrderIndex > y.OrderIndex) { return(1); } else if (x.OrderIndex < y.OrderIndex) { return(-1); } else { return(0); } }); for (int i = 1; i < t.Objectives.Count; ++i) { if (t.Objectives[i].OrderIndex >= t.Objectives[i - 1].OrderIndex) { t.Objectives[i].PreObjective = t.Objectives[i - 1]; t.Objectives[i - 1].NextObjective = t.Objectives[i]; } } } int n1, n2, n3; n1 = n2 = n3 = 1; foreach (Objective o in t.Objectives) { if (o is CollectObjective) { o.obID = t.TaskID + "_C0" + n1; n1++; } if (o is KillObjective) { o.obID = t.TaskID + "_K0" + n2; n2++; } if (o is TalkObjective) { o.obID = t.TaskID + "_T0" + n3; n3++; } } if (TaskMgr.Instance.HasOngoingTask(t) && !t.CmpltOnOriginalNpc && t.AcceptAble) { if (!TaskGiverMgr.Instance.GiverTransferStation.ContainsKey(t.CmpltNpcID)) { TaskGiverMgr.Instance.GiverTransferStation.Add(t.CmpltNpcID, ResMgr.Instance.Load <Task>(t.TaskID)); } TaskGiverMgr.Instance.GiverTransferStation[t.CmpltNpcID].originTaskGiver = this._ID; TaskGiverMgr.Instance.GiverTransferStation[t.CmpltNpcID].currentTaskGiver = this._ID; } else { t.originTaskGiver = this._ID; t.currentTaskGiver = this._ID; TaskInstances.Add(t); } } } currentTask = GetCurrentTask(); }
public void ConfigureServices(IServiceCollection services) { try { services.AddCors(); services.AddMvc(); var sqlDb = new SqlDatabase(new EnvironmentVariable("HomeTaskManagementSqlConnection")); services.AddSingleton(new MiniAuth(new EnvironmentVariable("HomeTaskManagementSecret"))); services.AddSingleton(new AppHealth(TimeSpan.FromMinutes(15), sqlDb)); var eventStore = new SqlEventStore(sqlDb, "HomeTask.Events"); var blobStore = new SqlBlobStore(sqlDb, "HomeTask.Blobs"); var messages = new Messages(); var users = new Users(new UsersTable(sqlDb)); services.AddSingleton(users); var tasks = new Tasks(new TasksTable(sqlDb)); var accounts = new Accounts(eventStore); services.AddSingleton(accounts); var pledges = new Pledges(eventStore, users, accounts, new PledgeFundingSettings()); var assignments = new TaskAssignments(eventStore, tasks, users, new AssignmentSettings()); var taskInstances = new TaskInstances(new InMemoryTaskInstanceStore(), assignments, messages); var treasury = new Treasury(blobStore, accounts); services.AddSingleton(users); services.AddSingleton(new AppCommands(new Dictionary <string, IRequest>(StringComparer.InvariantCultureIgnoreCase) { { nameof(OpenAccount), new AdminOnly(new JsonRequest <OpenAccount>(x => accounts.Apply(x))) }, { nameof(SetOverdraftPolicy), new AdminOnly(new JsonRequest <SetOverdraftPolicy>(x => accounts.Apply(x))) }, { nameof(TransactionRequest), new AdminOnly(new JsonRequest <TransactionRequest>(x => accounts.Apply(x))) }, { nameof(RegisterUser), new JsonRequest <RegisterUser>(x => users.Apply(x)) }, { nameof(UnregisterUser), new JsonRequest <UnregisterUser>(x => users.Apply(x)) }, { nameof(AddRoles), new AdminOnly(new JsonRequest <AddRoles>(x => users.Apply(x))) }, { nameof(RemoveRoles), new AdminOnly(new JsonRequest <RemoveRoles>(x => users.Apply(x))) }, { nameof(AssignTask), new AdminOnly(new JsonRequest <AssignTask>(x => assignments.Apply(x))) }, { nameof(CreateTask), new AdminOnly(new JsonRequest <CreateTask>(x => tasks.Apply(x))) }, { nameof(DeleteTask), new AdminOnly(new JsonRequest <DeleteTask>(x => tasks.Apply(x))) }, { nameof(SetPledge), new AdminOnly(new JsonRequest <SetPledge>(x => pledges.Apply(x))) }, { nameof(FundPledges), new ServiceOrAdmin(new JsonRequest <FundPledges>(x => pledges.Apply(x))) }, { nameof(MarkTaskComplete), new ApproverOnly(new JsonRequest <MarkTaskComplete>(x => taskInstances.Apply(x))) }, { nameof(MarkTaskNotComplete), new JsonRequest <MarkTaskNotComplete>(x => taskInstances.Apply(x)) }, { nameof(MarkTaskFunded), new ServiceOrAdmin(new JsonRequest <MarkTaskFunded>(x => taskInstances.Apply(x))) }, { nameof(ScheduleWorkItemsThrough), new ServiceOrAdmin(new JsonRequest <ScheduleWorkItemsThrough>(x => taskInstances.Apply(x))) }, { nameof(WaiveTask), new AdminOnly(new JsonRequest <WaiveTask>(x => taskInstances.Apply(x))) }, { nameof(RecordExpenditure), new JsonRequest <RecordExpenditure>(x => treasury.Apply(x)) } })); services.AddSingleton(new AppQueries(new Dictionary <string, IRequest>(StringComparer.InvariantCultureIgnoreCase) { { "accounts", new ParameterlessRequest(() => accounts.GetAll().Select(x => new AccountBalance { Name = users.Get(x.Id).Name, Balance = x.Balance })) }, { nameof(Account), new JsonRequest <GetById>(x => Response.Success(accounts.Get(x.Id))) } })); new AppRecurringTasks( new FundPledgesDaily(pledges), new MarkNotCompletedTasksDaily(taskInstances), new ScheduleTasksDaily(taskInstances)) .Start(); new HandleTaskInstanceCompletionPayments(taskInstances, accounts, messages) .Start(); new FundScheduledTasks(taskInstances, accounts, messages) .Start(); } catch (Exception e) { Console.WriteLine($"Fatal error in Startup: {e.Message}"); Debug.WriteLine($"Fatal error in Startup: {e.Message}"); Environment.Exit(-1); } }
public HandleTaskInstanceCompletionPayments(TaskInstances taskInstances, Accounts accounts, Messages messages) { _taskInstances = taskInstances; _accounts = accounts; _messages = messages; }
public FundScheduledTasks(TaskInstances taskInstances, Accounts accounts, Messages messages) { _taskInstances = taskInstances; _accounts = accounts; _messages = messages; }
public MarkNotCompletedTasksDaily(TaskInstances taskInstances) : this(Clock.UnixUtcNow.StartOfDay().Plus(TimeSpan.FromDays(1)), taskInstances) { }
public ScheduleTasksDaily(TaskInstances taskInstances) : this(Clock.UnixUtcNow.StartOfDay().Plus(TimeSpan.FromDays(1)), taskInstances) { }
public ScheduleTasksDaily(UnixUtcTime firstExecution, TaskInstances taskInstances) : base(firstExecution, TimeSpan.FromDays(1), () => taskInstances.Apply(new ScheduleWorkItemsThrough(Clock.UnixUtcNow.Plus(TimeSpan.FromDays(1))))) { }