入职任务预览,入职任务cope,验证填入的信息

This commit is contained in:
fuenmao
2026-08-29 17:26:29 +08:00
parent 1d42c52d53
commit 6151872b6b
17 changed files with 1215 additions and 95 deletions
@@ -17,22 +17,78 @@ public class OnboardingTaskQueryService : IOnboardingTaskQueryService
/// <summary>
/// 分页查询后台入职任务。
/// </summary>
public async Task<SqlSugarPagedList<ObOnboardingTask>> Page(OnboardingTaskPageInput input)
public async Task<OnboardingTaskPageOutput> Page(OnboardingTaskPageInput input)
{
const string approvedGroupStatus = "approved_or_archived";
var filterApprovedGroup = string.Equals(
input.TaskStatus,
approvedGroupStatus,
StringComparison.OrdinalIgnoreCase);
var list = await _db.Queryable<ObOnboardingTask>()
.WhereIF(!string.IsNullOrWhiteSpace(input.TaskNo), item => item.TaskNo.Contains(input.TaskNo))
.WhereIF(!string.IsNullOrWhiteSpace(input.TaskStatus), item => item.TaskStatus == input.TaskStatus)
.WhereIF(input.CompanyId.HasValue, item => item.CompanyId == input.CompanyId.Value)
.WhereIF(input.DepartmentId.HasValue, item => item.DepartmentId == input.DepartmentId.Value)
.WhereIF(!string.IsNullOrWhiteSpace(input.TaskNo),
item => item.TaskNo.Contains(input.TaskNo))
.WhereIF(!string.IsNullOrWhiteSpace(input.TaskStatus) && !filterApprovedGroup,
item => item.TaskStatus == input.TaskStatus)
.WhereIF(filterApprovedGroup,
item => item.TaskStatus == OnboardingTaskStatus.Approved
|| item.TaskStatus == OnboardingTaskStatus.Archived)
.WhereIF(input.CompanyId.HasValue,
item => item.CompanyId == input.CompanyId.Value)
.WhereIF(input.DepartmentId.HasValue,
item => item.DepartmentId == input.DepartmentId.Value)
.WhereIF(input.PositionId.HasValue,
item => item.PositionId == input.PositionId.Value)
.OrderByDescending(item => item.CreateTime)
.ToPagedListAsync(input.PageNum, input.PageSize);
if (list.List != null && list.List.Any())
{
await FillTaskMetadata(list.List);
}
return list;
// 统计继续应用组织、岗位和任务编号条件,但不受当前状态筛选影响。
var statusRows = await _db.Queryable<ObOnboardingTask>()
.WhereIF(!string.IsNullOrWhiteSpace(input.TaskNo),
item => item.TaskNo.Contains(input.TaskNo))
.WhereIF(input.CompanyId.HasValue,
item => item.CompanyId == input.CompanyId.Value)
.WhereIF(input.DepartmentId.HasValue,
item => item.DepartmentId == input.DepartmentId.Value)
.WhereIF(input.PositionId.HasValue,
item => item.PositionId == input.PositionId.Value)
.GroupBy(item => item.TaskStatus)
.Select(item => new OnboardingTaskStatusCountOutput
{
TaskStatus = item.TaskStatus,
Count = SqlFunc.AggregateCount(item.Id)
})
.ToListAsync();
var statusCountMap = statusRows.ToDictionary(
item => item.TaskStatus,
item => item.Count);
return new OnboardingTaskPageOutput
{
PageNum = list.PageNum,
PageSize = list.PageSize,
Total = list.Total,
Pages = list.Pages,
List = list.List,
HasPrevPages = list.HasPrevPages,
HasNextPages = list.HasNextPages,
Statistics = new OnboardingTaskStatisticsOutput
{
PendingFill = statusCountMap.GetValueOrDefault(
OnboardingTaskStatus.PendingFill),
Reviewing = statusCountMap.GetValueOrDefault(
OnboardingTaskStatus.Reviewing),
Rejected = statusCountMap.GetValueOrDefault(
OnboardingTaskStatus.Rejected),
Approved = statusCountMap.GetValueOrDefault(
OnboardingTaskStatus.Approved)
+ statusCountMap.GetValueOrDefault(
OnboardingTaskStatus.Archived)
}
};
}
/// <summary>