コード例 #1
0
        public async Task <int> SyncTimeRecordsV2(string userid, string token, DateTime startDate, DateTime endDate)
        {
            // 先到clockify获取数据
            var ls = await _clockifyService.GetTimeEntriesV2(userid, token, startDate, endDate);

            _logger.LogDebug(JsonConvert.SerializeObject(ls));
            var list = new List <TimeEntry>();

            //_projectService.ListAsync(a=>a.)
            var projectIdList = (await _projectService.ListAllAsync()).Select(a => a.Gid).ToList();
            var taskIdList    = (await _projectTaskService.ListAllAsync()).Select(a => a.Gid).ToList();
            var tasksToAdd    = new List <ProjectTask>();
            var projectsToAdd = new List <Project>();

            foreach (var l in ls)
            {
                try
                {
                    list.Add(new TimeEntry()
                    {
                        Gid    = l._id,
                        UserId = l.userId,
                        //WorkspaceId = l.workspaceId,
                        Description = l.description,
                        //IsBillable =
                        IsLocked        = l.isLocked,
                        ProjectId       = l.projectId,
                        TaskId          = l.taskId,
                        TotalHours      = (decimal)(l.timeInterval.duration / 3600.0f),
                        Date            = l.timeInterval.start.Date.AddHours(8),
                        CreatedDate     = DateTime.Now,
                        CreatedUserID   = userid,
                        CreatedUserName = userid,
                        IsDeleted       = false,
                        UpdatedDate     = DateTime.Now,
                        UpdatedUserID   = userid,
                        UpdatedUserName = userid
                    });

                    // 检查TaskGID是不是已经存在,如果不存在,同时在Task表里增加对应的空task的项目记录。
                    if (!taskIdList.Contains(l.taskId))
                    {
                        taskIdList.Add(l.taskId);
                        tasksToAdd.Add(new ProjectTask()
                        {
                            Gid        = l.taskId,
                            ProjectGid = l.projectId
                        });
                    }

                    // 检查project是否存在,如果不存在,在project表里添加一条项目记录
                    if (!projectIdList.Contains(l.projectId))
                    {
                        projectIdList.Add(l.projectId);
                        projectsToAdd.Add(new Project()
                        {
                            Archived  = false,
                            Billable  = true,
                            Gid       = l.projectId,
                            IsDeleted = false,
                            Name      = l.projectName
                        });
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex.Message);
                    _logger.LogError(JsonConvert.SerializeObject(l));
                }
            }

            // 然后在本地插入或者同步数据
            await _timeEntryService.DeleteAsync(a => a.Date >= startDate && a.Date < endDate.AddDays(1));

            //var affectedRecordCount = _timeEntryService.SqlExecute($"delete from timeentry where [date]>='{startDate.ToString("yyyy-MM-dd")}' and [date]<'{endDate.AddDays(1).ToString("yyyy-MM-dd")}'");

            var insertedRecordCount = await _timeEntryService.AddManyAsync(list);

            var cnt = _projectTaskService.AddManyAsync(tasksToAdd);

            cnt = _projectService.AddManyAsync(projectsToAdd);

            return(insertedRecordCount);
        }