Task <ProjectMonthlyReport> IProjectGrain.GetProjectMonthlyReport(short year, short month) { if (Kernel == null) { throw new ProjectNotFoundException(); } ProjectMonthlyReport ultimoReport = null; DateTime ultimo = new DateTime(year, month, 1).AddMilliseconds(-1); foreach (ProjectMonthlyReport item in ProjectMonthlyReportList) { if (item.Year == year && item.Month == month) { return(Task.FromResult(item)); } else if (item.Year == ultimo.Year && item.Month == ultimo.Month) { ultimoReport = item; } } return(Task.FromResult(Kernel.NewDetail(ProjectMonthlyReport. Set(p => p.Year, year). Set(p => p.Month, month). Set(p => p.Status, ultimoReport != null ? ultimoReport.Status : null). Set(p => p.MonthlyPlan, ultimoReport != null ? ultimoReport.NextMonthlyPlan : "*")))); }
async Task IProjectGrain.PutProjectMonthlyReport(ProjectMonthlyReport source) { if (Kernel == null) { throw new ProjectNotFoundException(); } if (!await IsMyProject()) { throw new SecurityException("非请毋动!"); } if (source.Month < 1 || source.Month > 12) { throw new ValidationException(String.Format("咱这可没{0}月份唉!", source.Month)); } DateTime today = DateTime.Today; if (source.Year > today.Year || source.Year == today.Year && source.Month > today.Month) { throw new ValidationException("未来不可期~"); } foreach (ProjectMonthlyReport item in ProjectMonthlyReportList) { if (item.Year == source.Year && item.Month == source.Month) { Database.Execute((DbTransaction dbTransaction) => { item.UpdateSelf(dbTransaction, source); if (today.Year == source.Year && today.Month == source.Month) { Kernel.UpdateSelf(dbTransaction, NameValue.Set <ProjectInfo>(p => p.CurrentStatus, source.Status)); } }); return; } } Database.Execute((DbTransaction dbTransaction) => { source.InsertSelf(dbTransaction); if (today.Year == source.Year && today.Month == source.Month) { Kernel.UpdateSelf(dbTransaction, NameValue.Set <ProjectInfo>(p => p.CurrentStatus, source.Status)); } }); ProjectMonthlyReportList.Add(source); }
public async Task Put() { ProjectMonthlyReport projectMonthlyReport = await Request.ReadBodyAsync <ProjectMonthlyReport>(); await ClusterClient.Default.GetGrain <IProjectGrain>(projectMonthlyReport.PiId).PutProjectMonthlyReport(projectMonthlyReport); }