入职任务预览,入职任务cope,验证填入的信息
This commit is contained in:
+59
-1
@@ -1,4 +1,4 @@
|
||||
namespace SimpleAdmin.Application;
|
||||
namespace SimpleAdmin.Application;
|
||||
|
||||
/// <summary>
|
||||
/// 入职任务分页查询参数。
|
||||
@@ -24,6 +24,64 @@ public class OnboardingTaskPageInput : BasePageInput
|
||||
/// 入职业务部门 Id。
|
||||
/// </summary>
|
||||
public long? DepartmentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 入职业务岗位 Id。
|
||||
/// </summary>
|
||||
public long? PositionId { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 入职任务分页数据及当前查询条件下的状态统计。
|
||||
/// </summary>
|
||||
public class OnboardingTaskPageOutput : SqlSugarPagedList<ObOnboardingTask>
|
||||
{
|
||||
/// <summary>
|
||||
/// 不受状态筛选影响的任务状态统计。
|
||||
/// </summary>
|
||||
public OnboardingTaskStatisticsOutput Statistics { get; set; } = new();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 入职任务状态统计。
|
||||
/// </summary>
|
||||
public class OnboardingTaskStatisticsOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// 待候选人填写数量。
|
||||
/// </summary>
|
||||
public int PendingFill { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 待人事审核数量。
|
||||
/// </summary>
|
||||
public int Reviewing { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 已退回待修改数量。
|
||||
/// </summary>
|
||||
public int Rejected { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审核通过或已归档数量。
|
||||
/// </summary>
|
||||
public int Approved { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 数据库按任务状态分组后的内部统计行。
|
||||
/// </summary>
|
||||
public class OnboardingTaskStatusCountOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// 任务状态。
|
||||
/// </summary>
|
||||
public string TaskStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 该状态的任务数量。
|
||||
/// </summary>
|
||||
public int Count { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ public interface IOnboardingTaskQueryService : ITransient
|
||||
/// <summary>
|
||||
/// 分页查询后台入职任务。
|
||||
/// </summary>
|
||||
Task<SqlSugarPagedList<ObOnboardingTask>> Page(OnboardingTaskPageInput input);
|
||||
Task<OnboardingTaskPageOutput> Page(OnboardingTaskPageInput input);
|
||||
|
||||
/// <summary>
|
||||
/// 查询任务基础信息、人员资料、合同、材料、表单值、链接和审核记录。
|
||||
|
||||
+64
-8
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user