public async Task <IActionResult> CalculateAc(string startDate, string endDate) { // by项目进行计算 var tasks = await _timeEntryService.GetAvaliableTaskByTimeEntry(DateTime.Parse(startDate), DateTime.Parse(endDate)); var effortUsed = new List <EffortUsedByRoleByDate>(); var timeEntries = (await _timeEntryService.WhereAsync(a => a.Date >= DateTime.Parse(startDate) && a.Date < DateTime.Parse(endDate).AddDays(1))).ToList(); var index = 0; var totalCnt = tasks.Count(); foreach (var task in tasks) { effortUsed.AddRange(await _timeEntryService.CalculateACByRoleAndSave(task.ProjectGid, task.Gid, DateTime.Parse(startDate), DateTime.Parse(endDate), timeEntries)); _logger.LogInformation($"progress: {index++}/{totalCnt}, {(index*100/totalCnt).ToString("F2")}%"); } await _acByRoleByDateService.SqlExecuteNonQuery($"delete from [AcByRoleByDate] where [date]>='{startDate}' and [date]<='{endDate}'"); await _acByRoleByDateService.AddManyAsync(effortUsed); return(new JsonResult(new { Message = $"Calculate finished! - {tasks.Count()} tasks!, EffortUsed - {effortUsed.Count()} records." })); }