Task <ProjectAnnualPlan> IProjectGrain.GetProjectAnnualPlan(short year) { if (Kernel == null) { throw new ProjectNotFoundException(); } foreach (ProjectAnnualPlan item in ProjectAnnualPlanList) { if (item.Year == year) { return(Task.FromResult(item)); } } return(Task.FromResult(Kernel.NewDetail(ProjectAnnualPlan.Set(p => p.Year, year). Set(p => p.AnnualReceivables, Kernel.ContAmount - Kernel.TotalReceivables)))); }
async Task IProjectGrain.PutProjectAnnualPlan(ProjectAnnualPlan source) { if (Kernel == null) { throw new ProjectNotFoundException(); } if (!await IsMyProject()) { throw new SecurityException("非请毋动!"); } DateTime today = DateTime.Today; foreach (ProjectAnnualPlan item in ProjectAnnualPlanList) { if (item.Year == source.Year) { if (source.AnnualReceivables > Kernel.ContAmount - Kernel.TotalReceivables + item.AnnualReceivables) { throw new ValidationException(String.Format("本应收款({0})已超过{1}可报数额({2})!", source.AnnualReceivables, Kernel.ProjectName, Kernel.ContAmount - Kernel.TotalReceivables + item.AnnualReceivables)); } Database.Execute((DbTransaction dbTransaction) => { item.UpdateSelf(dbTransaction, source); if (today.Year == source.Year) { Kernel.UpdateSelf(dbTransaction, NameValue.Set <ProjectInfo>(p => p.TotalReceivables, p => p.TotalReceivables - item.AnnualReceivables + source.AnnualReceivables). Set(p => p.AnnualMilestone, source.AnnualMilestone)); } else { Kernel.UpdateSelf(dbTransaction, NameValue.Set <ProjectInfo>(p => p.TotalReceivables, p => p.TotalReceivables - item.AnnualReceivables + source.AnnualReceivables)); } }); return; } } if (source.AnnualReceivables > Kernel.ContAmount - Kernel.TotalReceivables) { throw new ValidationException(String.Format("本应收款({0})已超过{1}可报数额({2})!", source.AnnualReceivables, Kernel.ProjectName, Kernel.ContAmount - Kernel.TotalReceivables)); } Database.Execute((DbTransaction dbTransaction) => { source.InsertSelf(dbTransaction); if (today.Year == source.Year) { Kernel.UpdateSelf(dbTransaction, NameValue.Set <ProjectInfo>(p => p.TotalReceivables, p => p.TotalReceivables + source.AnnualReceivables). Set(p => p.AnnualMilestone, source.AnnualMilestone)); } else { Kernel.UpdateSelf(dbTransaction, NameValue.Set <ProjectInfo>(p => p.TotalReceivables, p => p.TotalReceivables + source.AnnualReceivables)); } }); ProjectAnnualPlanList.Add(source); }
public async Task Put() { ProjectAnnualPlan projectAnnualPlan = await Request.ReadBodyAsync<ProjectAnnualPlan>(); await ClusterClient.Default.GetGrain<IProjectGrain>(projectAnnualPlan.PiId).PutProjectAnnualPlan(projectAnnualPlan); }