From 22a7df5becbbda1852a15a003b6097f9a2caf1b2 Mon Sep 17 00:00:00 2001 From: fuenmao <980740792@qq.com> Date: Mon, 24 Aug 2026 15:32:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entity/Onboarding/ObCompany.cs | 34 + .../Entity/Onboarding/ObContractScope.cs | 26 + .../Entity/Onboarding/ObContractTemplate.cs | 18 + .../Onboarding/ObContractTemplateVersion.cs | 34 + .../Entity/Onboarding/ObEmployee.cs | 118 + .../Entity/Onboarding/ObFormField.cs | 26 + .../Entity/Onboarding/ObFormRequirement.cs | 22 + .../Onboarding/ObMaterialRequirement.cs | 23 +- .../Entity/Onboarding/ObMaterialType.cs | 22 + .../Entity/Onboarding/ObOnboardingTask.cs | 54 + .../Entity/Onboarding/ObPosition.cs | 31 +- .../Entity/Onboarding/ObTaskAudit.cs | 30 + .../Entity/Onboarding/ObTaskContract.cs | 58 + .../Onboarding/ObTaskContractVariable.cs | 34 + .../Entity/Onboarding/ObTaskEmployeeInfo.cs | 110 + .../Entity/Onboarding/ObTaskFormValue.cs | 26 + .../Entity/Onboarding/ObTaskLink.cs | 31 +- .../Entity/Onboarding/ObTaskMaterial.cs | 34 + .../Entity/Onboarding/ObTaskOperationLog.cs | 34 + .../Entity/Onboarding/ObTemplateVariable.cs | 54 + .../Entity/Onboarding/OnboardingStatus.cs | 136 + .../Audit/Dto/OnboardingAuditInput.cs | 9 + .../Audit/IOnboardingAuditService.cs | 9 + .../Audit/OnboardingAuditService.cs | 14 +- .../Company/Dto/OnboardingCompanyInput.cs | 28 + .../Company/IOnboardingCompanyService.cs | 21 + .../Company/OnboardingCompanyService.cs | 21 + .../Dto/OnboardingContractDocumentInput.cs | 6 + .../IOnboardingContractDocumentService.cs | 12 +- .../OnboardingContractDocumentService.cs | 10 +- .../IOnboardingContractSnapshotService.cs | 8 +- .../OnboardingContractSnapshotService.cs | 8 +- .../Dto/OnboardingContractScopeInput.cs | 46 + .../Dto/OnboardingContractTemplateInput.cs | 42 + .../Dto/OnboardingContractVersionInput.cs | 50 + .../Dto/OnboardingTemplateVariableInput.cs | 66 + .../IOnboardingContractTemplateService.cs | 48 + .../OnboardingContractTemplateService.cs | 48 + .../Employee/Dto/OnboardingEmployeeInput.cs | 38 +- .../Employee/IOnboardingEmployeeService.cs | 11 +- .../Employee/OnboardingEmployeeService.cs | 10 +- .../Dto/OnboardingEntryConfigInput.cs | 101 + .../IOnboardingEntryConfigService.cs | 41 +- .../OnboardingEntryConfigService.cs | 38 +- .../IOnboardingTaskLifecycleService.cs | 17 +- .../OnboardingTaskLifecycleService.cs | 10 +- .../Dto/OnboardingMaterialReviewInput.cs | 13 + .../IOnboardingMaterialReviewService.cs | 12 +- .../OnboardingMaterialReviewService.cs | 7 +- .../Position/Dto/OnboardingPositionInput.cs | 29 + .../Position/IOnboardingPositionService.cs | 21 + .../Position/OnboardingPositionService.cs | 21 + ...OnboardingMaterialUploadValidationInput.cs | 18 + .../Dto/OnboardingPublicSubmissionInput.cs | 47 + .../IOnboardingPublicSubmissionService.cs | 18 + .../OnboardingPublicSubmissionService.cs | 21 +- .../IOnboardingPublicTaskService.cs | 12 + .../PublicTask/OnboardingPublicTaskService.cs | 13 +- .../Task/Dto/OnboardingTaskInput.cs | 40 + .../Task/Dto/OnboardingTaskPublicInput.cs | 108 + .../Onboarding/Task/IOnboardingTaskService.cs | 6 + .../Onboarding/Task/OnboardingTaskService.cs | 9 +- .../OnboardingTaskContractVariableInput.cs | 84 +- .../IOnboardingTaskContractVariableService.cs | 11 +- .../OnboardingTaskContractVariableService.cs | 8 +- .../TaskQuery/Dto/OnboardingTaskQueryInput.cs | 46 + .../TaskQuery/IOnboardingTaskQueryService.cs | 11 +- .../TaskQuery/OnboardingTaskQueryService.cs | 17 +- .../SimpleAdmin.Application.xml | 3099 +++++++++++++++++ .../Onboarding/OnboardingAuditController.cs | 11 +- .../Onboarding/OnboardingCompanyController.cs | 23 +- .../OnboardingContractDocumentController.cs | 5 +- .../OnboardingContractTemplateController.cs | 53 +- .../OnboardingEmployeeController.cs | 11 +- .../OnboardingEntryConfigController.cs | 41 +- .../OnboardingMaterialReviewController.cs | 8 +- .../OnboardingPositionController.cs | 23 +- .../OnboardingPublicSubmissionController.cs | 20 +- .../OnboardingPublicTaskController.cs | 14 +- ...nboardingTaskContractVariableController.cs | 11 +- .../Onboarding/OnboardingTaskController.cs | 8 +- .../OnboardingTaskLifecycleController.cs | 11 +- .../OnboardingTaskQueryController.cs | 11 +- SimpleAdmin.Web.Core/SimpleAdmin.Web.Core.xml | 370 ++ 84 files changed, 5913 insertions(+), 45 deletions(-) diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObCompany.cs b/SimpleAdmin.Application/Entity/Onboarding/ObCompany.cs index 70f7e07..f187462 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObCompany.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObCompany.cs @@ -10,16 +10,50 @@ namespace SimpleAdmin.Application; +/// +/// 入职业务公司档案,保存合同甲方及入职归属公司信息。 +/// [SugarTable("ob_company", TableDescription = "入职业务公司")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObCompany : BaseEntity { + /// + /// 公司业务编码。 + /// public virtual string CompanyCode { get; set; } + + /// + /// 公司显示名称。 + /// public virtual string CompanyName { get; set; } + + /// + /// 合同中使用的甲方完整法定名称。 + /// public virtual string LegalName { get; set; } + + /// + /// 统一社会信用代码。 + /// public string UnifiedSocialCreditCode { get; set; } + + /// + /// 法定代表人姓名。 + /// public string LegalRepresentative { get; set; } + + /// + /// 工商注册地址。 + /// public string RegisteredAddress { get; set; } + + /// + /// 公司联系电话。 + /// public string ContactPhone { get; set; } + + /// + /// 业务备注。 + /// public string Remark { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObContractScope.cs b/SimpleAdmin.Application/Entity/Onboarding/ObContractScope.cs index 30c0be2..2b1f208 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObContractScope.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObContractScope.cs @@ -10,14 +10,40 @@ namespace SimpleAdmin.Application; +/// +/// 合同适用范围,将已启用的合同版本绑定到公司或具体岗位。 +/// [SugarTable("ob_contract_scope", TableDescription = "公司岗位合同适用范围")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObContractScope : BaseEntity { + /// + /// 所属入职业务公司 Id。 + /// public long CompanyId { get; set; } + + /// + /// 所属岗位 Id;为空时表示适用于公司下全部岗位。 + /// public long? PositionId { get; set; } + + /// + /// 合同模板主档案 Id。 + /// public long TemplateId { get; set; } + + /// + /// 合同模板版本 Id。 + /// public long TemplateVersionId { get; set; } + + /// + /// 该适用范围下的合同是否必签。 + /// public bool Required { get; set; } + + /// + /// 显示排序码。 + /// public int? SortCode { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObContractTemplate.cs b/SimpleAdmin.Application/Entity/Onboarding/ObContractTemplate.cs index fc6ac64..331af71 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObContractTemplate.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObContractTemplate.cs @@ -10,12 +10,30 @@ namespace SimpleAdmin.Application; +/// +/// 合同模板主档案,用于区分不同合同类型及模板用途。 +/// [SugarTable("ob_contract_template", TableDescription = "合同模板主档案")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObContractTemplate : BaseEntity { + /// + /// 合同模板业务编码。 + /// public string TemplateCode { get; set; } + + /// + /// 合同模板名称。 + /// public string TemplateName { get; set; } + + /// + /// 合同类型。 + /// public string ContractType { get; set; } + + /// + /// 模板用途说明。 + /// public string Description { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObContractTemplateVersion.cs b/SimpleAdmin.Application/Entity/Onboarding/ObContractTemplateVersion.cs index 1a5d9d8..c2f750c 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObContractTemplateVersion.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObContractTemplateVersion.cs @@ -10,16 +10,50 @@ namespace SimpleAdmin.Application; +/// +/// 合同模板版本,保存不可变的 DOCX 源文件及版本有效期。 +/// [SugarTable("ob_contract_template_version", TableDescription = "合同模板版本")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObContractTemplateVersion : BaseEntity { + /// + /// 合同模板主档案 Id。 + /// public long TemplateId { get; set; } + + /// + /// 模板版本号。 + /// public string VersionNo { get; set; } + + /// + /// 模板 DOCX 源文件 Id。 + /// public long SourceDocxFileId { get; set; } + + /// + /// 源文件内容哈希,用于校验文件是否变化。 + /// public string FileHash { get; set; } + + /// + /// 版本生效日期。 + /// public DateTime? EffectiveDate { get; set; } + + /// + /// 版本失效日期。 + /// public DateTime? ExpiryDate { get; set; } + + /// + /// 模板版本状态。 + /// public string VersionStatus { get; set; } = ContractTemplateVersionStatus.Draft; + + /// + /// 业务备注。 + /// public string Remark { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObEmployee.cs b/SimpleAdmin.Application/Entity/Onboarding/ObEmployee.cs index 44b6ff2..a747cef 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObEmployee.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObEmployee.cs @@ -10,37 +10,155 @@ namespace SimpleAdmin.Application; +/// +/// 审核通过后生成的正式员工档案,是入职流程的最终业务数据。 +/// [SugarTable("ob_employee", TableDescription = "正式员工档案")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObEmployee : BaseEntity { + /// + /// 员工编号。 + /// public string EmployeeNo { get; set; } + + /// + /// 内部人员编号。 + /// public string InternalNo { get; set; } + + /// + /// 员工姓名。 + /// public string EmployeeName { get; set; } + + /// + /// 所属入职业务公司 Id。 + /// public long CompanyId { get; set; } + + /// + /// 所属部门名称。 + /// public string DepartmentName { get; set; } + + /// + /// 所属入职业务岗位 Id。 + /// public long PositionId { get; set; } + + /// + /// 性别。 + /// public string Gender { get; set; } + + /// + /// 手机号码。 + /// public string Phone { get; set; } + + /// + /// 身份证号码。 + /// public string IdCardNumber { get; set; } + + /// + /// 毕业院校。 + /// public string College { get; set; } + + /// + /// 最高学历。 + /// public string Education { get; set; } + + /// + /// 所学专业。 + /// public string Major { get; set; } + + /// + /// 出生日期。 + /// public DateTime? BirthDate { get; set; } + + /// + /// 户籍所在地。 + /// public string RegisteredResidence { get; set; } + + /// + /// 民族。 + /// public string Nation { get; set; } + + /// + /// 现居住或联系地址。 + /// public string ContactAddress { get; set; } + + /// + /// 入职日期。 + /// public DateTime? EntryDate { get; set; } + + /// + /// 合同开始日期。 + /// public DateTime? ContractStartDate { get; set; } + + /// + /// 合同结束日期。 + /// public DateTime? ContractEndDate { get; set; } + + /// + /// 试用期开始日期。 + /// public DateTime? ProbationStartDate { get; set; } + + /// + /// 试用期结束日期。 + /// public DateTime? ProbationEndDate { get; set; } + + /// + /// 转正日期。 + /// public DateTime? RegularizationDate { get; set; } + + /// + /// 社保缴纳公司。 + /// public string SocialInsuranceCompany { get; set; } + + /// + /// 合同性质。 + /// public string ContractNature { get; set; } + + /// + /// 工资银行卡号。 + /// public string BankCardNumber { get; set; } + + /// + /// 银行卡开户名。 + /// public string BankAccountName { get; set; } + + /// + /// 开户银行名称。 + /// public string BankName { get; set; } + + /// + /// 业务备注。 + /// public string Remark { get; set; } + + /// + /// 审核通过时冻结的动态字段信息 JSON。 + /// public string ExtraInfoJson { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObFormField.cs b/SimpleAdmin.Application/Entity/Onboarding/ObFormField.cs index 03639dc..ea6b07c 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObFormField.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObFormField.cs @@ -10,14 +10,40 @@ namespace SimpleAdmin.Application; +/// +/// 动态入职字段定义,用于扩展固定人员基础信息之外的填写项。 +/// [SugarTable("ob_form_field", TableDescription = "动态入职填写字段")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObFormField : BaseEntity { + /// + /// 动态字段业务编码。 + /// public string FieldCode { get; set; } + + /// + /// 动态字段显示名称。 + /// public string FieldName { get; set; } + + /// + /// 变量数据类型。 + /// public string DataType { get; set; } + + /// + /// 选择型字段或变量的可选项 JSON。 + /// public string OptionsJson { get; set; } + + /// + /// 字段校验规则。 + /// public string ValidationRule { get; set; } + + /// + /// 员工端输入提示。 + /// public string Placeholder { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObFormRequirement.cs b/SimpleAdmin.Application/Entity/Onboarding/ObFormRequirement.cs index 613c17a..7737af7 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObFormRequirement.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObFormRequirement.cs @@ -10,13 +10,35 @@ namespace SimpleAdmin.Application; +/// +/// 动态字段填写要求,配置公司或岗位需要展示及校验的字段。 +/// [SugarTable("ob_form_requirement", TableDescription = "公司岗位动态填写项要求")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObFormRequirement : BaseEntity { + /// + /// 所属入职业务公司 Id。 + /// public long CompanyId { get; set; } + + /// + /// 所属岗位 Id;为空时表示适用于公司下全部岗位。 + /// public long? PositionId { get; set; } + + /// + /// 动态字段定义 Id。 + /// public long FieldId { get; set; } + + /// + /// 候选人是否必须填写该动态字段。 + /// public bool Required { get; set; } + + /// + /// 显示排序码。 + /// public int? SortCode { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObMaterialRequirement.cs b/SimpleAdmin.Application/Entity/Onboarding/ObMaterialRequirement.cs index 8e3776a..8d28fe4 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObMaterialRequirement.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObMaterialRequirement.cs @@ -10,14 +10,35 @@ namespace SimpleAdmin.Application; +/// +/// 入职材料要求,配置公司或岗位需要候选人上传的材料。 +/// [SugarTable("ob_material_requirement", TableDescription = "公司岗位入职资料要求")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObMaterialRequirement : BaseEntity { + /// + /// 所属入职业务公司 Id。 + /// public long CompanyId { get; set; } + + /// + /// 所属岗位 Id;为空时表示适用于公司下全部岗位。 + /// public long? PositionId { get; set; } + + /// + /// 材料类型 Id。 + /// public long MaterialTypeId { get; set; } + + /// + /// 候选人是否必须上传该类材料。 + /// public bool Required { get; set; } + + /// + /// 显示排序码。 + /// public int? SortCode { get; set; } } - diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObMaterialType.cs b/SimpleAdmin.Application/Entity/Onboarding/ObMaterialType.cs index b2e8b98..36848cf 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObMaterialType.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObMaterialType.cs @@ -10,13 +10,35 @@ namespace SimpleAdmin.Application; +/// +/// 入职材料类型,定义允许上传的文件类型、数量和大小。 +/// [SugarTable("ob_material_type", TableDescription = "入职上传资料类型")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObMaterialType : BaseEntity { + /// + /// 材料类型业务编码。 + /// public string MaterialCode { get; set; } + + /// + /// 材料显示名称。 + /// public string MaterialName { get; set; } + + /// + /// 允许上传的文件扩展名,多个值使用逗号分隔。 + /// public string AllowedExtensions { get; set; } + + /// + /// 单个任务允许上传的最大文件数量。 + /// public int MaxFileCount { get; set; } + + /// + /// 单个文件最大大小,单位为 MB。 + /// public int? MaxFileSizeMb { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObOnboardingTask.cs b/SimpleAdmin.Application/Entity/Onboarding/ObOnboardingTask.cs index 720f34d..b372944 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObOnboardingTask.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObOnboardingTask.cs @@ -10,21 +10,75 @@ namespace SimpleAdmin.Application; +/// +/// 新员工入职任务,承载候选人填写、审核、转正式员工和归档全过程。 +/// [SugarTable("ob_onboarding_task", TableDescription = "新员工入职任务")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObOnboardingTask : BaseEntity { + /// + /// 入职任务编号。 + /// public string TaskNo { get; set; } + + /// + /// 审核通过后生成的正式员工 Id。 + /// public long? EmployeeId { get; set; } + + /// + /// 所属入职业务公司 Id。 + /// public long CompanyId { get; set; } + + /// + /// 入职任务所属岗位 Id。 + /// public long PositionId { get; set; } + + /// + /// 创建任务时指定的审核人用户 Id。 + /// public long? AssignedReviewerUserId { get; set; } + + /// + /// 入职任务当前状态。 + /// public string TaskStatus { get; set; } = OnboardingTaskStatus.Draft; + + /// + /// 员工填写链接业务过期时间。 + /// public DateTime? LinkExpireAt { get; set; } + + /// + /// 候选人累计提交轮次。 + /// public int SubmitCount { get; set; } + + /// + /// 候选人最近一次提交时间。 + /// public DateTime? LastSubmittedAt { get; set; } + + /// + /// 审核或流程操作发生时间。 + /// public DateTime? AuditedAt { get; set; } + + /// + /// 任务归档时间。 + /// public DateTime? ArchivedAt { get; set; } + + /// + /// 最近一次审核退回原因。 + /// public string RejectReason { get; set; } + + /// + /// 业务备注。 + /// public string Remark { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObPosition.cs b/SimpleAdmin.Application/Entity/Onboarding/ObPosition.cs index 9882d1a..dcedb81 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObPosition.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObPosition.cs @@ -10,16 +10,45 @@ namespace SimpleAdmin.Application; +/// +/// 入职业务岗位档案,保存岗位默认合同期限、试用期及业务参数。 +/// [SugarTable("ob_position", TableDescription = "入职业务岗位")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObPosition : BaseEntity { + /// + /// 所属入职业务公司 Id。 + /// public long CompanyId { get; set; } + + /// + /// 岗位业务编码。 + /// public virtual string PositionCode { get; set; } + + /// + /// 岗位名称。 + /// public virtual string PositionName { get; set; } + + /// + /// 默认合同期限,单位为年。 + /// public decimal? DefaultContractYears { get; set; } + + /// + /// 默认试用期,单位为月。 + /// public int? DefaultProbationMonths { get; set; } + + /// + /// 岗位默认合同参数 JSON。 + /// public string DefaultParamsJson { get; set; } + + /// + /// 业务备注。 + /// public string Remark { get; set; } } - diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObTaskAudit.cs b/SimpleAdmin.Application/Entity/Onboarding/ObTaskAudit.cs index a84ec5e..707fc6e 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObTaskAudit.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObTaskAudit.cs @@ -10,15 +10,45 @@ namespace SimpleAdmin.Application; +/// +/// 入职任务提交与审核记录,按轮次保留意见及数据快照。 +/// [SugarTable("ob_task_audit", TableDescription = "入职任务提交与审核记录")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObTaskAudit : BaseEntity { + /// + /// 所属入职任务 Id。 + /// public long TaskId { get; set; } + + /// + /// 审核轮次,与任务提交次数对应。 + /// public int AuditRound { get; set; } + + /// + /// 审核或流程动作。 + /// public string AuditAction { get; set; } + + /// + /// 审核操作人用户 Id;员工提交时可为空。 + /// public long? AuditorUserId { get; set; } + + /// + /// 审核意见或流程说明。 + /// public string AuditOpinion { get; set; } + + /// + /// 本轮提交或审核时的数据快照 JSON。 + /// public string SnapshotJson { get; set; } + + /// + /// 审核或流程操作发生时间。 + /// public DateTime AuditedAt { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObTaskContract.cs b/SimpleAdmin.Application/Entity/Onboarding/ObTaskContract.cs index 3db8a68..2abb9cc 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObTaskContract.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObTaskContract.cs @@ -10,22 +10,80 @@ namespace SimpleAdmin.Application; +/// +/// 入职任务合同实例,锁定模板版本并记录生成、阅读和签署状态。 +/// [SugarTable("ob_task_contract", TableDescription = "入职任务合同明细")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObTaskContract : BaseEntity { + /// + /// 所属入职任务 Id。 + /// public long TaskId { get; set; } + + /// + /// 合同模板主档案 Id。 + /// public long TemplateId { get; set; } + + /// + /// 合同模板版本 Id。 + /// public long TemplateVersionId { get; set; } + + /// + /// 任务创建时冻结的合同名称。 + /// public string ContractName { get; set; } + + /// + /// 合同类型。 + /// public string ContractType { get; set; } + + /// + /// 是否为候选人必须阅读确认的合同。 + /// public bool Required { get; set; } + + /// + /// 任务合同当前状态。 + /// public string ContractStatus { get; set; } = TaskContractStatus.PendingGenerate; + + /// + /// 生成后的 DOCX 文件 Id。 + /// public long? GeneratedDocxFileId { get; set; } + + /// + /// 归档或打印使用的 PDF 文件 Id。 + /// public long? GeneratedPdfFileId { get; set; } + + /// + /// 合同文件生成时间。 + /// public DateTime? GeneratedAt { get; set; } + + /// + /// 候选人首次阅读时间。 + /// public DateTime? ReadAt { get; set; } + + /// + /// 候选人确认阅读时间。 + /// public DateTime? ConfirmedAt { get; set; } + + /// + /// 线下签署完成时间。 + /// public DateTime? OfflineSignedAt { get; set; } + + /// + /// 合同打印时间。 + /// public DateTime? PrintedAt { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObTaskContractVariable.cs b/SimpleAdmin.Application/Entity/Onboarding/ObTaskContractVariable.cs index 98fe20b..4bf9b21 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObTaskContractVariable.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObTaskContractVariable.cs @@ -10,16 +10,50 @@ namespace SimpleAdmin.Application; +/// +/// 任务合同变量最终值快照,合同生成后不再读取模板实时值。 +/// [SugarTable("ob_task_contract_variable", TableDescription = "任务合同变量最终值快照")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObTaskContractVariable : BaseEntity { + /// + /// 所属任务合同 Id。 + /// public long TaskContractId { get; set; } + + /// + /// DOCX 中使用的变量编码。 + /// public string VariableCode { get; set; } + + /// + /// 变量显示名称。 + /// public string VariableName { get; set; } + + /// + /// 变量来源类型,例如员工、公司、合同或系统。 + /// public string VariableType { get; set; } + + /// + /// 变量数据类型。 + /// public string DataType { get; set; } + + /// + /// 合同生成时使用的最终变量值。 + /// public string VariableValue { get; set; } + + /// + /// 最终值来源类型。 + /// public string SourceType { get; set; } + + /// + /// 是否由人事手工覆盖自动值。 + /// public bool IsManualOverride { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObTaskEmployeeInfo.cs b/SimpleAdmin.Application/Entity/Onboarding/ObTaskEmployeeInfo.cs index 49b8f89..97d02a5 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObTaskEmployeeInfo.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObTaskEmployeeInfo.cs @@ -10,35 +10,145 @@ namespace SimpleAdmin.Application; +/// +/// 候选人在入职任务中提交的固定人员基础信息。 +/// [SugarTable("ob_task_employee_info", TableDescription = "候选人提交的固定基础信息")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObTaskEmployeeInfo : BaseEntity { + /// + /// 所属入职任务 Id。 + /// public long TaskId { get; set; } + + /// + /// 员工编号。 + /// public string EmployeeNo { get; set; } + + /// + /// 内部人员编号。 + /// public string InternalNo { get; set; } + + /// + /// 员工姓名。 + /// public string EmployeeName { get; set; } + + /// + /// 所属部门名称。 + /// public string DepartmentName { get; set; } + + /// + /// 性别。 + /// public string Gender { get; set; } + + /// + /// 手机号码。 + /// public string Phone { get; set; } + + /// + /// 身份证号码。 + /// public string IdCardNumber { get; set; } + + /// + /// 毕业院校。 + /// public string College { get; set; } + + /// + /// 最高学历。 + /// public string Education { get; set; } + + /// + /// 所学专业。 + /// public string Major { get; set; } + + /// + /// 出生日期。 + /// public DateTime? BirthDate { get; set; } + + /// + /// 户籍所在地。 + /// public string RegisteredResidence { get; set; } + + /// + /// 民族。 + /// public string Nation { get; set; } + + /// + /// 现居住或联系地址。 + /// public string ContactAddress { get; set; } + + /// + /// 入职日期。 + /// public DateTime? EntryDate { get; set; } + + /// + /// 合同开始日期。 + /// public DateTime? ContractStartDate { get; set; } + + /// + /// 合同结束日期。 + /// public DateTime? ContractEndDate { get; set; } + + /// + /// 试用期开始日期。 + /// public DateTime? ProbationStartDate { get; set; } + + /// + /// 试用期结束日期。 + /// public DateTime? ProbationEndDate { get; set; } + + /// + /// 转正日期。 + /// public DateTime? RegularizationDate { get; set; } + + /// + /// 社保缴纳公司。 + /// public string SocialInsuranceCompany { get; set; } + + /// + /// 合同性质。 + /// public string ContractNature { get; set; } + + /// + /// 工资银行卡号。 + /// public string BankCardNumber { get; set; } + + /// + /// 银行卡开户名。 + /// public string BankAccountName { get; set; } + + /// + /// 开户银行名称。 + /// public string BankName { get; set; } + + /// + /// 业务备注。 + /// public string Remark { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObTaskFormValue.cs b/SimpleAdmin.Application/Entity/Onboarding/ObTaskFormValue.cs index 2ac5fe6..056b031 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObTaskFormValue.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObTaskFormValue.cs @@ -10,14 +10,40 @@ namespace SimpleAdmin.Application; +/// +/// 候选人动态字段填写值,保留字段快照及提交轮次。 +/// [SugarTable("ob_task_form_value", TableDescription = "候选人动态填写信息")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObTaskFormValue : BaseEntity { + /// + /// 所属入职任务 Id。 + /// public long TaskId { get; set; } + + /// + /// 动态字段定义 Id。 + /// public long FieldId { get; set; } + + /// + /// 动态字段业务编码。 + /// public string FieldCode { get; set; } + + /// + /// 动态字段显示名称。 + /// public string FieldName { get; set; } + + /// + /// 候选人填写的字段值。 + /// public string FieldValue { get; set; } + + /// + /// 该数据所属的提交轮次。 + /// public int SubmitRound { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObTaskLink.cs b/SimpleAdmin.Application/Entity/Onboarding/ObTaskLink.cs index 5942430..7de1398 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObTaskLink.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObTaskLink.cs @@ -10,16 +10,45 @@ namespace SimpleAdmin.Application; +/// +/// 新员工专属填写链接,仅保存 Token 哈希及链接生命周期信息。 +/// [SugarTable("ob_task_link", TableDescription = "新员工专属填写链接")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObTaskLink : BaseEntity { + /// + /// 所属入职任务 Id。 + /// public long TaskId { get; set; } + + /// + /// 访问 Token 的 SHA-256 哈希,不保存明文 Token。 + /// public string TokenHash { get; set; } + + /// + /// 填写链接当前状态。 + /// public string LinkStatus { get; set; } = OnboardingLinkStatus.Active; + + /// + /// 链接过期时间。 + /// public DateTime ExpiresAt { get; set; } + + /// + /// 链接最近访问时间。 + /// public DateTime? LastAccessedAt { get; set; } + + /// + /// 链接累计访问次数。 + /// public int AccessCount { get; set; } + + /// + /// 链接撤销时间。 + /// public DateTime? RevokedAt { get; set; } } - diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObTaskMaterial.cs b/SimpleAdmin.Application/Entity/Onboarding/ObTaskMaterial.cs index 2aec507..166b449 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObTaskMaterial.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObTaskMaterial.cs @@ -10,16 +10,50 @@ namespace SimpleAdmin.Application; +/// +/// 候选人上传的入职材料,记录文件、提交轮次及审核状态。 +/// [SugarTable("ob_task_material", TableDescription = "候选人上传资料")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObTaskMaterial : BaseEntity { + /// + /// 所属入职任务 Id。 + /// public long TaskId { get; set; } + + /// + /// 材料类型 Id。 + /// public long MaterialTypeId { get; set; } + + /// + /// 材料显示名称。 + /// public string MaterialName { get; set; } + + /// + /// 系统文件 Id。 + /// public long FileId { get; set; } + + /// + /// 该数据所属的提交轮次。 + /// public int SubmitRound { get; set; } + + /// + /// 材料上传时间。 + /// public DateTime UploadedAt { get; set; } + + /// + /// 材料审核状态。 + /// public string ReviewStatus { get; set; } = TaskMaterialReviewStatus.Pending; + + /// + /// 材料审核意见。 + /// public string ReviewRemark { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObTaskOperationLog.cs b/SimpleAdmin.Application/Entity/Onboarding/ObTaskOperationLog.cs index 3c0a54e..dbb46f8 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObTaskOperationLog.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObTaskOperationLog.cs @@ -10,16 +10,50 @@ namespace SimpleAdmin.Application; +/// +/// 入职任务操作日志,用于追踪关键状态变化及操作人。 +/// [SugarTable("ob_task_operation_log", TableDescription = "入职任务操作日志")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObTaskOperationLog : BaseEntity { + /// + /// 所属入职任务 Id。 + /// public long TaskId { get; set; } + + /// + /// 操作人类型,例如员工、人事或系统。 + /// public string OperatorType { get; set; } + + /// + /// 后台操作人用户 Id。 + /// public long? OperatorUserId { get; set; } + + /// + /// 操作类型。 + /// public string OperationType { get; set; } + + /// + /// 操作说明。 + /// public string OperationContent { get; set; } + + /// + /// 本次变更的数据 JSON。 + /// public string ChangeDataJson { get; set; } + + /// + /// 操作来源 IP 地址。 + /// public string IpAddress { get; set; } + + /// + /// 操作发生时间。 + /// public DateTime OperatedAt { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/ObTemplateVariable.cs b/SimpleAdmin.Application/Entity/Onboarding/ObTemplateVariable.cs index 1f26bb9..f6f230a 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/ObTemplateVariable.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/ObTemplateVariable.cs @@ -10,21 +10,75 @@ namespace SimpleAdmin.Application; +/// +/// 合同模板变量定义,描述 DOCX 占位符、来源类型及填写规则。 +/// [SugarTable("ob_template_variable", TableDescription = "合同模板变量定义")] [Tenant(SqlSugarConst.DB_DEFAULT)] public class ObTemplateVariable : BaseEntity { + /// + /// 合同模板版本 Id。 + /// public long TemplateVersionId { get; set; } + + /// + /// DOCX 中使用的变量编码。 + /// public string VariableCode { get; set; } + + /// + /// 变量显示名称。 + /// public string VariableName { get; set; } + + /// + /// 变量来源类型,例如员工、公司、合同或系统。 + /// public string VariableType { get; set; } + + /// + /// 变量数据类型。 + /// public string DataType { get; set; } + + /// + /// 变量关联的候选人基础信息字段。 + /// public string EmployeeField { get; set; } + + /// + /// 变量默认值。 + /// public string DefaultValue { get; set; } + + /// + /// 选择型字段或变量的可选项 JSON。 + /// public string OptionsJson { get; set; } + + /// + /// 变量格式化规则。 + /// public string FormatRule { get; set; } + + /// + /// 是否必填、必传或必签。 + /// public bool Required { get; set; } + + /// + /// 人事是否可在创建任务后手工填写或调整。 + /// public bool HrEditable { get; set; } + + /// + /// 显示排序码。 + /// public int? SortCode { get; set; } + + /// + /// 业务备注。 + /// public string Remark { get; set; } } diff --git a/SimpleAdmin.Application/Entity/Onboarding/OnboardingStatus.cs b/SimpleAdmin.Application/Entity/Onboarding/OnboardingStatus.cs index 11a29ae..a015bd8 100644 --- a/SimpleAdmin.Application/Entity/Onboarding/OnboardingStatus.cs +++ b/SimpleAdmin.Application/Entity/Onboarding/OnboardingStatus.cs @@ -15,13 +15,44 @@ namespace SimpleAdmin.Application; /// public static class OnboardingTaskStatus { + /// + /// 草稿,任务尚未生成员工填写链接。 + /// public const string Draft = "draft"; + + /// + /// 待填写,候选人可以通过有效链接编辑资料。 + /// public const string PendingFill = "pending_fill"; + + /// + /// 审核中,候选人已提交且资料暂时锁定。 + /// public const string Reviewing = "reviewing"; + + /// + /// 已退回,候选人可根据意见补充后再次提交。 + /// public const string Rejected = "rejected"; + + /// + /// 已通过,系统已经生成正式员工档案。 + /// public const string Approved = "approved"; + + /// + /// 已归档,任务流程结束且历史数据只读。 + /// public const string Archived = "archived"; + + /// + /// 已过期,任务或链接超过有效期。 + /// public const string Expired = "expired"; + + /// + /// 已撤销,任务或链接被人事主动终止。 + /// public const string Revoked = "revoked"; } @@ -30,9 +61,24 @@ public static class OnboardingTaskStatus /// public static class OnboardingLinkStatus { + /// + /// 有效,链接可以正常访问。 + /// public const string Active = "active"; + + /// + /// 已过期,任务或链接超过有效期。 + /// public const string Expired = "expired"; + + /// + /// 已撤销,任务或链接被人事主动终止。 + /// public const string Revoked = "revoked"; + + /// + /// 已替换,旧链接已由新链接取代。 + /// public const string Replaced = "replaced"; } @@ -41,8 +87,19 @@ public static class OnboardingLinkStatus /// public static class ContractTemplateVersionStatus { + /// + /// 草稿,任务尚未生成员工填写链接。 + /// public const string Draft = "draft"; + + /// + /// 已启用,可用于创建新的入职任务。 + /// public const string Enabled = "enabled"; + + /// + /// 已停用,不再用于新任务。 + /// public const string Disabled = "disabled"; } @@ -51,10 +108,29 @@ public static class ContractTemplateVersionStatus /// public static class TaskContractStatus { + /// + /// 待生成,任务合同尚未生成文件。 + /// public const string PendingGenerate = "pending_generate"; + + /// + /// 待确认,合同已生成并等待候选人阅读确认。 + /// public const string PendingConfirm = "pending_confirm"; + + /// + /// 已确认,候选人已完成阅读确认。 + /// public const string Confirmed = "confirmed"; + + /// + /// 待线下签署,首版暂不接入第三方电子签。 + /// public const string OfflinePendingSign = "offline_pending_sign"; + + /// + /// 已归档,任务流程结束且历史数据只读。 + /// public const string Archived = "archived"; } @@ -63,9 +139,24 @@ public static class TaskContractStatus /// public static class ContractVariableType { + /// + /// 值来源于候选人或正式员工信息。 + /// public const string Employee = "employee"; + + /// + /// 值来源于公司档案。 + /// public const string Company = "company"; + + /// + /// 值来源于合同业务参数。 + /// public const string Contract = "contract"; + + /// + /// 值由系统自动生成。 + /// public const string System = "system"; } @@ -74,9 +165,24 @@ public static class ContractVariableType /// public static class ContractVariableSourceType { + /// + /// 值来源于候选人或正式员工信息。 + /// public const string Employee = "employee"; + + /// + /// 值来源于公司档案。 + /// public const string Company = "company"; + + /// + /// 值由人事手工录入。 + /// public const string HrInput = "hr_input"; + + /// + /// 值由系统自动生成。 + /// public const string System = "system"; } @@ -85,8 +191,19 @@ public static class ContractVariableSourceType /// public static class TaskMaterialReviewStatus { + /// + /// 待审核。 + /// public const string Pending = "pending"; + + /// + /// 审核通过。 + /// public const string Passed = "passed"; + + /// + /// 需要补充或重新上传。 + /// public const string NeedSupplement = "need_supplement"; } @@ -95,9 +212,28 @@ public static class TaskMaterialReviewStatus /// public static class OnboardingAuditAction { + /// + /// 候选人提交入职资料。 + /// public const string Submit = "submit"; + + /// + /// 人事审核通过。 + /// public const string Approve = "approve"; + + /// + /// 人事退回补充。 + /// public const string Reject = "reject"; + + /// + /// 人事撤销任务。 + /// public const string Revoke = "revoke"; + + /// + /// 人事归档任务。 + /// public const string Archive = "archive"; } diff --git a/SimpleAdmin.Application/Services/Onboarding/Audit/Dto/OnboardingAuditInput.cs b/SimpleAdmin.Application/Services/Onboarding/Audit/Dto/OnboardingAuditInput.cs index edf6937..efe73e9 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Audit/Dto/OnboardingAuditInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Audit/Dto/OnboardingAuditInput.cs @@ -1,9 +1,18 @@ namespace SimpleAdmin.Application; +/// +/// 入职审核、退回、撤销或归档操作参数。 +/// public class OnboardingAuditActionInput { + /// + /// 入职任务 Id。 + /// [IdNotNull(ErrorMessage = "任务Id不能为空")] public long TaskId { get; set; } + /// + /// 审核意见或流程操作说明。 + /// public string AuditOpinion { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/Audit/IOnboardingAuditService.cs b/SimpleAdmin.Application/Services/Onboarding/Audit/IOnboardingAuditService.cs index 899ed57..49bf297 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Audit/IOnboardingAuditService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Audit/IOnboardingAuditService.cs @@ -1,7 +1,16 @@ namespace SimpleAdmin.Application; +/// +/// 定义入职审核业务能力。 +/// public interface IOnboardingAuditService : ITransient { + /// + /// 审核通过入职任务,并在同一事务中创建正式员工档案。 + /// Task Approve(OnboardingAuditActionInput input); + /// + /// 退回入职任务,保存审核意见并允许候选人补充资料。 + /// Task Reject(OnboardingAuditActionInput input); } diff --git a/SimpleAdmin.Application/Services/Onboarding/Audit/OnboardingAuditService.cs b/SimpleAdmin.Application/Services/Onboarding/Audit/OnboardingAuditService.cs index 115a312..a5c3f4e 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Audit/OnboardingAuditService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Audit/OnboardingAuditService.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Application; +/// +/// 实现入职审核业务能力。 +/// public class OnboardingAuditService : IOnboardingAuditService { private readonly SqlSugarScope _db; @@ -15,6 +18,9 @@ public class OnboardingAuditService : IOnboardingAuditService _snapshotService = snapshotService; } + /// + /// 审核通过入职任务,并在同一事务中创建正式员工档案。 + /// public async Task Approve(OnboardingAuditActionInput input) { var task = await GetAuditableTask(input.TaskId); @@ -30,6 +36,7 @@ public class OnboardingAuditService : IOnboardingAuditService throw Oops.Bah("仍有资料需要补充,不能审核通过"); } + // 审核通过是创建正式员工的唯一入口,因此必须在入库前拦截身份证号或手机号重复。 var hasExistingEmployee = await _db.Queryable() .AnyAsync(item => item.IdCardNumber == employeeInfo.IdCardNumber || item.Phone == employeeInfo.Phone); if (hasExistingEmployee) @@ -46,6 +53,7 @@ public class OnboardingAuditService : IOnboardingAuditService employee.PositionId = task.PositionId; employee.ExtraInfoJson = global::System.Text.Json.JsonSerializer.Serialize(extraValues); + // 员工档案、任务状态和审核记录必须同时成功,避免出现“已通过但没有员工档案”的中间状态。 await _db.Ado.BeginTranAsync(); try { @@ -66,6 +74,9 @@ public class OnboardingAuditService : IOnboardingAuditService } } + /// + /// 退回入职任务,保存审核意见并允许候选人补充资料。 + /// public async Task Reject(OnboardingAuditActionInput input) { if (string.IsNullOrWhiteSpace(input.AuditOpinion)) @@ -92,6 +103,7 @@ public class OnboardingAuditService : IOnboardingAuditService var config = await _config.GetByConfigKey(CateGoryConst.CONFIG_BIZ_DEFINE, "onboard.reviewer.userIds") ?? throw Oops.Bah("请配置入职审核人"); using var configJson = global::System.Text.Json.JsonDocument.Parse(config.ConfigValue); + // 审核人由全局配置与公司专属配置合并得出,不依赖独立业务表。 var reviewerIds = new List(); if (configJson.RootElement.TryGetProperty("all", out var allReviewers)) { @@ -126,5 +138,3 @@ public class OnboardingAuditService : IOnboardingAuditService }).ExecuteCommandAsync(); } } - - diff --git a/SimpleAdmin.Application/Services/Onboarding/Company/Dto/OnboardingCompanyInput.cs b/SimpleAdmin.Application/Services/Onboarding/Company/Dto/OnboardingCompanyInput.cs index e44aaf0..1a8a2c5 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Company/Dto/OnboardingCompanyInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Company/Dto/OnboardingCompanyInput.cs @@ -1,25 +1,53 @@ namespace SimpleAdmin.Application; +/// +/// 入职业务公司分页查询参数。 +/// public class OnboardingCompanyPageInput : BasePageInput { + /// + /// 公司名称。 + /// public virtual string CompanyName { get; set; } + + /// + /// 启用状态或状态筛选条件。 + /// public string Status { get; set; } } +/// +/// 新增入职业务公司参数。 +/// public class OnboardingCompanyAddInput : ObCompany { + /// + /// 公司业务编码。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "公司编码不能为空")] public override string CompanyCode { get; set; } + /// + /// 公司名称。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "公司名称不能为空")] public override string CompanyName { get; set; } + /// + /// 合同甲方完整法定名称。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "合同甲方全称不能为空")] public override string LegalName { get; set; } } +/// +/// 编辑入职业务公司参数。 +/// public class OnboardingCompanyEditInput : OnboardingCompanyAddInput { + /// + /// 业务数据 Id。 + /// [IdNotNull(ErrorMessage = "公司Id不能为空")] public override long Id { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/Company/IOnboardingCompanyService.cs b/SimpleAdmin.Application/Services/Onboarding/Company/IOnboardingCompanyService.cs index 233c844..1e94ed8 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Company/IOnboardingCompanyService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Company/IOnboardingCompanyService.cs @@ -1,11 +1,32 @@ namespace SimpleAdmin.Application; +/// +/// 定义入职业务公司业务能力。 +/// public interface IOnboardingCompanyService : ITransient { + /// + /// 分页查询入职业务公司。 + /// Task> Page(OnboardingCompanyPageInput input); + /// + /// 查询全部已启用的入职业务公司。 + /// Task> ListEnabled(); + /// + /// 查询公司详情。 + /// Task Detail(BaseIdInput input); + /// + /// 新增入职业务公司。 + /// Task Add(OnboardingCompanyAddInput input); + /// + /// 编辑入职业务公司。 + /// Task Edit(OnboardingCompanyEditInput input); + /// + /// 删除未被岗位、任务或员工引用的公司。 + /// Task Delete(BaseIdListInput input); } diff --git a/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs b/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs index 3a9396f..c765e43 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs @@ -1,7 +1,13 @@ namespace SimpleAdmin.Application; +/// +/// 实现入职业务公司业务能力。 +/// public class OnboardingCompanyService : DbRepository, IOnboardingCompanyService { + /// + /// 分页查询入职业务公司。 + /// public async Task> Page(OnboardingCompanyPageInput input) { return await Context.Queryable() @@ -14,6 +20,9 @@ public class OnboardingCompanyService : DbRepository, IOnboardingComp .ToPagedListAsync(input.PageNum, input.PageSize); } + /// + /// 查询全部已启用的入职业务公司。 + /// public Task> ListEnabled() { return Context.Queryable() @@ -22,17 +31,26 @@ public class OnboardingCompanyService : DbRepository, IOnboardingComp .ToListAsync(); } + /// + /// 查询公司详情。 + /// public async Task Detail(BaseIdInput input) { return await GetByIdAsync(input.Id) ?? throw Oops.Bah("公司不存在"); } + /// + /// 新增入职业务公司。 + /// public async Task Add(OnboardingCompanyAddInput input) { await EnsureCodeUnique(input.CompanyCode, 0); await InsertAsync(input.Adapt()); } + /// + /// 编辑入职业务公司。 + /// public async Task Edit(OnboardingCompanyEditInput input) { await Detail(new BaseIdInput { Id = input.Id }); @@ -40,6 +58,9 @@ public class OnboardingCompanyService : DbRepository, IOnboardingComp await UpdateAsync(input.Adapt()); } + /// + /// 删除未被岗位、任务或员工引用的公司。 + /// public async Task Delete(BaseIdListInput input) { if (input.Ids.Count == 0) diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractDocument/Dto/OnboardingContractDocumentInput.cs b/SimpleAdmin.Application/Services/Onboarding/ContractDocument/Dto/OnboardingContractDocumentInput.cs index 7edc8cd..863bf77 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractDocument/Dto/OnboardingContractDocumentInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractDocument/Dto/OnboardingContractDocumentInput.cs @@ -1,7 +1,13 @@ namespace SimpleAdmin.Application; +/// +/// 生成任务合同文件参数。 +/// public class OnboardingGenerateContractInput { + /// + /// 任务合同 Id。 + /// [IdNotNull(ErrorMessage = "任务合同Id不能为空")] public long TaskContractId { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractDocument/IOnboardingContractDocumentService.cs b/SimpleAdmin.Application/Services/Onboarding/ContractDocument/IOnboardingContractDocumentService.cs index b99f1ab..5c9334a 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractDocument/IOnboardingContractDocumentService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractDocument/IOnboardingContractDocumentService.cs @@ -1,2 +1,12 @@ namespace SimpleAdmin.Application; -public interface IOnboardingContractDocumentService : ITransient { Task Generate(OnboardingGenerateContractInput input); } + +/// +/// 定义入职合同文件生成能力。 +/// +public interface IOnboardingContractDocumentService : ITransient +{ + /// + /// 根据已审核通过的任务合同生成并保存 DOCX 文件。 + /// + Task Generate(OnboardingGenerateContractInput input); +} diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractDocument/OnboardingContractDocumentService.cs b/SimpleAdmin.Application/Services/Onboarding/ContractDocument/OnboardingContractDocumentService.cs index c49de91..ae6d39e 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractDocument/OnboardingContractDocumentService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractDocument/OnboardingContractDocumentService.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Application; +/// +/// 实现入职合同文件生成业务能力。 +/// public class OnboardingContractDocumentService : IOnboardingContractDocumentService { private readonly SqlSugarScope _db; @@ -11,6 +14,9 @@ public class OnboardingContractDocumentService : IOnboardingContractDocumentServ _fileService = fileService; } + /// + /// 根据已锁定的模板版本和变量快照生成任务合同 DOCX 文件。 + /// public async Task Generate(OnboardingGenerateContractInput input) { var contract = await _db.Queryable().InSingleAsync(input.TaskContractId) @@ -38,6 +44,7 @@ public class OnboardingContractDocumentService : IOnboardingContractDocumentServ using var sourceBytes = new MemoryStream(); await sourceStream.CopyToAsync(sourceBytes); + // 合同只读取任务变量快照,确保模板或员工档案后续修改不会影响已生成文件。 var rendered = ReplaceDocxText( sourceBytes.ToArray(), variables.ToDictionary(x => x.VariableCode, x => x.VariableValue ?? string.Empty)); @@ -63,6 +70,7 @@ public class OnboardingContractDocumentService : IOnboardingContractDocumentServ global::System.IO.Compression.ZipArchiveMode.Create, true); + // DOCX 本质是 ZIP 包,仅替换正文、页眉和页脚 XML 中的文本节点,其他资源原样复制。 foreach (var entry in archive.Entries) { var next = target.CreateEntry(entry.FullName, global::System.IO.Compression.CompressionLevel.Optimal); @@ -95,5 +103,3 @@ public class OnboardingContractDocumentService : IOnboardingContractDocumentServ return output.ToArray(); } } - - diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractSnapshot/IOnboardingContractSnapshotService.cs b/SimpleAdmin.Application/Services/Onboarding/ContractSnapshot/IOnboardingContractSnapshotService.cs index ec62571..b05e6fc 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractSnapshot/IOnboardingContractSnapshotService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractSnapshot/IOnboardingContractSnapshotService.cs @@ -1,7 +1,13 @@ namespace SimpleAdmin.Application; +/// +/// 定义任务合同变量快照业务能力。 +/// public interface IOnboardingContractSnapshotService : ITransient { /// 根据任务、公司与候选人资料刷新自动变量;人事已手工填写的变量不会被覆盖。 + /// + /// 根据任务、公司和候选人资料构建或刷新合同变量快照。 + /// Task Build(long taskId, ObTaskEmployeeInfo employeeInfo = null); -} \ No newline at end of file +} diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractSnapshot/OnboardingContractSnapshotService.cs b/SimpleAdmin.Application/Services/Onboarding/ContractSnapshot/OnboardingContractSnapshotService.cs index 3595834..ebfa2f3 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractSnapshot/OnboardingContractSnapshotService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractSnapshot/OnboardingContractSnapshotService.cs @@ -1,11 +1,17 @@ namespace SimpleAdmin.Application; /// 冻结任务合同变量;DOCX 生成阶段只读取本快照,不再读取模板实时值。 +/// +/// 实现任务合同变量快照业务能力。 +/// public class OnboardingContractSnapshotService : IOnboardingContractSnapshotService { private readonly SqlSugarScope _db; public OnboardingContractSnapshotService() => _db = DbContext.DB; + /// + /// 根据任务、公司和候选人资料构建或刷新合同变量快照。 + /// public async Task Build(long taskId, ObTaskEmployeeInfo employeeInfo = null) { var task = await _db.Queryable().InSingleAsync(taskId) ?? throw Oops.Bah("入职任务不存在"); @@ -20,6 +26,7 @@ public class OnboardingContractSnapshotService : IOnboardingContractSnapshotServ var rows = definitions.Select(definition => { var old = oldRows.FirstOrDefault(x => x.VariableCode == definition.VariableCode); + // 人事手工填写的工资、补贴等合同参数优先级最高,刷新自动变量时不能覆盖。 var preserveManual = old?.IsManualOverride == true; return new ObTaskContractVariable { @@ -80,4 +87,3 @@ public class OnboardingContractSnapshotService : IOnboardingContractSnapshotServ }; } } - diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractScopeInput.cs b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractScopeInput.cs index 47e78c2..ca4a1d3 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractScopeInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractScopeInput.cs @@ -1,27 +1,73 @@ namespace SimpleAdmin.Application; +/// +/// 合同适用范围分页查询参数。 +/// public class OnboardingContractScopePageInput : BasePageInput { + /// + /// 入职业务公司 Id。 + /// public long? CompanyId { get; set; } + + /// + /// 岗位 Id;为空时表示公司级配置。 + /// public long? PositionId { get; set; } + + /// + /// 合同模板 Id。 + /// public long? TemplateId { get; set; } } +/// +/// 新增合同适用范围参数。 +/// public class OnboardingContractScopeAddInput { + /// + /// 入职业务公司 Id。 + /// [IdNotNull(ErrorMessage = "公司Id不能为空")] public long CompanyId { get; set; } + + /// + /// 岗位 Id;为空时表示公司级配置。 + /// public long? PositionId { get; set; } + + /// + /// 合同模板 Id。 + /// [IdNotNull(ErrorMessage = "模板Id不能为空")] public long TemplateId { get; set; } + + /// + /// 合同模板版本 Id。 + /// [IdNotNull(ErrorMessage = "模板版本Id不能为空")] public long TemplateVersionId { get; set; } + + /// + /// 是否必填、必传或必签。 + /// public bool Required { get; set; } = true; + + /// + /// 显示排序码。 + /// public int? SortCode { get; set; } } +/// +/// 编辑合同适用范围参数。 +/// public class OnboardingContractScopeEditInput : OnboardingContractScopeAddInput { + /// + /// 业务数据 Id。 + /// [IdNotNull(ErrorMessage = "适用范围Id不能为空")] public long Id { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractTemplateInput.cs b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractTemplateInput.cs index 0b71d83..dec4d89 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractTemplateInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractTemplateInput.cs @@ -1,26 +1,68 @@ namespace SimpleAdmin.Application; +/// +/// 合同模板分页查询参数。 +/// public class OnboardingContractTemplatePageInput : BasePageInput { + /// + /// 合同模板名称。 + /// public string TemplateName { get; set; } + + /// + /// 合同类型。 + /// public string ContractType { get; set; } + + /// + /// 启用状态或状态筛选条件。 + /// public string Status { get; set; } } +/// +/// 新增合同模板参数。 +/// public class OnboardingContractTemplateAddInput { + /// + /// 合同模板业务编码。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "模板编码不能为空")] public string TemplateCode { get; set; } + + /// + /// 合同模板名称。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "模板名称不能为空")] public string TemplateName { get; set; } + + /// + /// 合同类型。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "合同类型不能为空")] public string ContractType { get; set; } + + /// + /// 业务说明。 + /// public string Description { get; set; } + + /// + /// 启用状态或状态筛选条件。 + /// public string Status { get; set; } = "enable"; } +/// +/// 编辑合同模板参数。 +/// public class OnboardingContractTemplateEditInput : OnboardingContractTemplateAddInput { + /// + /// 业务数据 Id。 + /// [IdNotNull(ErrorMessage = "模板Id不能为空")] public long Id { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractVersionInput.cs b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractVersionInput.cs index d005e30..2bf12f9 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractVersionInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingContractVersionInput.cs @@ -1,30 +1,80 @@ namespace SimpleAdmin.Application; +/// +/// 合同模板版本分页查询参数。 +/// public class OnboardingContractVersionPageInput : BasePageInput { + /// + /// 合同模板 Id。 + /// [IdNotNull(ErrorMessage = "模板Id不能为空")] public long TemplateId { get; set; } + + /// + /// 模板版本状态。 + /// public string VersionStatus { get; set; } } +/// +/// 新增合同模板版本参数。 +/// public class OnboardingContractVersionAddInput { + /// + /// 合同模板 Id。 + /// [IdNotNull(ErrorMessage = "模板Id不能为空")] public long TemplateId { get; set; } + + /// + /// 模板版本号。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "版本号不能为空")] public string VersionNo { get; set; } + + /// + /// 模板 DOCX 源文件 Id。 + /// [IdNotNull(ErrorMessage = "DOCX源文件不能为空")] public long SourceDocxFileId { get; set; } + + /// + /// 源文件内容哈希。 + /// public string FileHash { get; set; } + + /// + /// 生效日期。 + /// public DateTime? EffectiveDate { get; set; } + + /// + /// 失效日期。 + /// public DateTime? ExpiryDate { get; set; } + + /// + /// 业务备注。 + /// public string Remark { get; set; } } +/// +/// 设置合同模板版本状态参数。 +/// public class OnboardingContractVersionStatusInput { + /// + /// 业务数据 Id。 + /// [IdNotNull(ErrorMessage = "版本Id不能为空")] public long Id { get; set; } + + /// + /// 模板版本状态。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "版本状态不能为空")] public string VersionStatus { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingTemplateVariableInput.cs b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingTemplateVariableInput.cs index bdb0238..02bc657 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingTemplateVariableInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/Dto/OnboardingTemplateVariableInput.cs @@ -1,35 +1,101 @@ namespace SimpleAdmin.Application; +/// +/// 模板变量分页查询参数。 +/// public class OnboardingTemplateVariablePageInput : BasePageInput { + /// + /// 合同模板版本 Id。 + /// [IdNotNull(ErrorMessage = "模板版本Id不能为空")] public long TemplateVersionId { get; set; } } +/// +/// 新增模板变量参数。 +/// public class OnboardingTemplateVariableAddInput { + /// + /// 合同模板版本 Id。 + /// [IdNotNull(ErrorMessage = "模板版本Id不能为空")] public long TemplateVersionId { get; set; } + + /// + /// 合同变量编码。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "变量编码不能为空")] public string VariableCode { get; set; } + + /// + /// 合同变量名称。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "变量名称不能为空")] public string VariableName { get; set; } + + /// + /// 合同变量来源类型。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "变量类型不能为空")] public string VariableType { get; set; } + + /// + /// 字段或变量数据类型。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "数据类型不能为空")] public string DataType { get; set; } + + /// + /// 关联的候选人基础信息字段。 + /// public string EmployeeField { get; set; } + + /// + /// 默认值。 + /// public string DefaultValue { get; set; } + + /// + /// 可选项 JSON。 + /// public string OptionsJson { get; set; } + + /// + /// 格式化规则。 + /// public string FormatRule { get; set; } + + /// + /// 是否必填、必传或必签。 + /// public bool Required { get; set; } + + /// + /// 人事是否可以编辑。 + /// public bool HrEditable { get; set; } + + /// + /// 显示排序码。 + /// public int? SortCode { get; set; } + + /// + /// 业务备注。 + /// public string Remark { get; set; } } +/// +/// 编辑模板变量参数。 +/// public class OnboardingTemplateVariableEditInput : OnboardingTemplateVariableAddInput { + /// + /// 业务数据 Id。 + /// [IdNotNull(ErrorMessage = "变量Id不能为空")] public long Id { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/IOnboardingContractTemplateService.cs b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/IOnboardingContractTemplateService.cs index 2fe85b7..30f7dea 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/IOnboardingContractTemplateService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/IOnboardingContractTemplateService.cs @@ -1,19 +1,67 @@ namespace SimpleAdmin.Application; +/// +/// 定义合同模板、版本、变量和适用范围业务能力。 +/// public interface IOnboardingContractTemplateService : ITransient { + /// + /// 分页查询合同模板主档案。 + /// Task> Page(OnboardingContractTemplatePageInput input); + /// + /// 查询合同模板详情。 + /// Task Detail(BaseIdInput input); + /// + /// 新增合同模板主档案。 + /// Task Add(OnboardingContractTemplateAddInput input); + /// + /// 编辑合同模板主档案。 + /// Task Edit(OnboardingContractTemplateEditInput input); + /// + /// 删除未被版本、适用范围或任务合同引用的模板。 + /// Task Delete(BaseIdListInput input); + /// + /// 分页查询指定合同模板的版本。 + /// Task> VersionPage(OnboardingContractVersionPageInput input); + /// + /// 新增合同模板 DOCX 版本。 + /// Task AddVersion(OnboardingContractVersionAddInput input); + /// + /// 启用或停用合同模板版本。 + /// Task SetVersionStatus(OnboardingContractVersionStatusInput input); + /// + /// 分页查询指定模板版本的变量定义。 + /// Task> VariablePage(OnboardingTemplateVariablePageInput input); + /// + /// 为草稿模板版本新增变量。 + /// Task AddVariable(OnboardingTemplateVariableAddInput input); + /// + /// 编辑草稿模板版本中的变量。 + /// Task EditVariable(OnboardingTemplateVariableEditInput input); + /// + /// 删除草稿模板版本中的变量。 + /// Task DeleteVariable(BaseIdListInput input); Task> ScopePage(OnboardingContractScopePageInput input); + /// + /// 新增公司或岗位的合同适用范围。 + /// Task AddScope(OnboardingContractScopeAddInput input); + /// + /// 编辑合同适用范围。 + /// Task EditScope(OnboardingContractScopeEditInput input); + /// + /// 删除合同适用范围。 + /// Task DeleteScope(BaseIdListInput input);} diff --git a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/OnboardingContractTemplateService.cs b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/OnboardingContractTemplateService.cs index 04bda13..41b70d7 100644 --- a/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/OnboardingContractTemplateService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/ContractTemplate/OnboardingContractTemplateService.cs @@ -5,6 +5,9 @@ namespace SimpleAdmin.Application; /// public class OnboardingContractTemplateService : DbRepository, IOnboardingContractTemplateService { + /// + /// 分页查询合同模板主档案。 + /// public async Task> Page(OnboardingContractTemplatePageInput input) { return await Context.Queryable() @@ -18,17 +21,26 @@ public class OnboardingContractTemplateService : DbRepository + /// 查询合同模板详情。 + /// public async Task Detail(BaseIdInput input) { return await GetByIdAsync(input.Id) ?? throw Oops.Bah("合同模板不存在"); } + /// + /// 新增合同模板主档案。 + /// public async Task Add(OnboardingContractTemplateAddInput input) { await EnsureCodeUnique(input.TemplateCode, 0); await InsertAsync(input.Adapt()); } + /// + /// 编辑合同模板主档案。 + /// public async Task Edit(OnboardingContractTemplateEditInput input) { await Detail(new BaseIdInput { Id = input.Id }); @@ -36,6 +48,9 @@ public class OnboardingContractTemplateService : DbRepository()); } + /// + /// 删除未被版本、适用范围或任务合同引用的模板。 + /// public async Task Delete(BaseIdListInput input) { if (input.Ids.Count == 0) @@ -59,6 +74,9 @@ public class OnboardingContractTemplateService : DbRepository().ToArray()); } + /// + /// 分页查询指定合同模板的版本。 + /// public async Task> VersionPage(OnboardingContractVersionPageInput input) { return await Context.Queryable() @@ -68,6 +86,9 @@ public class OnboardingContractTemplateService : DbRepository + /// 新增合同模板 DOCX 版本。 + /// public async Task AddVersion(OnboardingContractVersionAddInput input) { await Detail(new BaseIdInput { Id = input.TemplateId }); @@ -85,6 +106,9 @@ public class OnboardingContractTemplateService : DbRepository()).ExecuteCommandAsync(); } + /// + /// 启用或停用合同模板版本。 + /// public async Task SetVersionStatus(OnboardingContractVersionStatusInput input) { if (input.VersionStatus != ContractTemplateVersionStatus.Enabled @@ -108,6 +132,9 @@ public class OnboardingContractTemplateService : DbRepository + /// 分页查询指定模板版本的变量定义。 + /// public async Task> VariablePage(OnboardingTemplateVariablePageInput input) { return await Context.Queryable() @@ -117,6 +144,9 @@ public class OnboardingContractTemplateService : DbRepository + /// 为草稿模板版本新增变量。 + /// public async Task AddVariable(OnboardingTemplateVariableAddInput input) { await EnsureVersionDraft(input.TemplateVersionId); @@ -124,6 +154,9 @@ public class OnboardingContractTemplateService : DbRepository()).ExecuteCommandAsync(); } + /// + /// 编辑草稿模板版本中的变量。 + /// public async Task EditVariable(OnboardingTemplateVariableEditInput input) { var variable = await Context.Queryable().InSingleAsync(input.Id) @@ -136,6 +169,9 @@ public class OnboardingContractTemplateService : DbRepository()).ExecuteCommandAsync(); } + /// + /// 删除草稿模板版本中的变量。 + /// public async Task DeleteVariable(BaseIdListInput input) { if (input.Ids.Count == 0) @@ -152,6 +188,9 @@ public class OnboardingContractTemplateService : DbRepository().In(input.Ids).ExecuteCommandAsync(); } + /// + /// 分页查询合同适用范围。 + /// public async Task> ScopePage(OnboardingContractScopePageInput input) { return await Context.Queryable() @@ -162,6 +201,9 @@ public class OnboardingContractTemplateService : DbRepository + /// 新增公司或岗位的合同适用范围。 + /// public async Task AddScope(OnboardingContractScopeAddInput input) { await EnsureScopeValid(input.CompanyId, input.PositionId, input.TemplateId, input.TemplateVersionId); @@ -169,6 +211,9 @@ public class OnboardingContractTemplateService : DbRepository()).ExecuteCommandAsync(); } + /// + /// 编辑合同适用范围。 + /// public async Task EditScope(OnboardingContractScopeEditInput input) { var scopeExists = await Context.Queryable().AnyAsync(it => it.Id == input.Id); @@ -180,6 +225,9 @@ public class OnboardingContractTemplateService : DbRepository()).ExecuteCommandAsync(); } + /// + /// 删除合同适用范围。 + /// public async Task DeleteScope(BaseIdListInput input) { if (input.Ids.Count == 0) diff --git a/SimpleAdmin.Application/Services/Onboarding/Employee/Dto/OnboardingEmployeeInput.cs b/SimpleAdmin.Application/Services/Onboarding/Employee/Dto/OnboardingEmployeeInput.cs index 9d636d2..97a809b 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Employee/Dto/OnboardingEmployeeInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Employee/Dto/OnboardingEmployeeInput.cs @@ -1,17 +1,53 @@ namespace SimpleAdmin.Application; +/// +/// 正式员工档案分页查询参数。 +/// public class OnboardingEmployeePageInput : BasePageInput { + /// + /// 员工姓名。 + /// public string EmployeeName { get; set; } + + /// + /// 手机号码。 + /// public string Phone { get; set; } + + /// + /// 入职业务公司 Id。 + /// public long? CompanyId { get; set; } + + /// + /// 岗位 Id;为空时表示公司级配置。 + /// public long? PositionId { get; set; } } +/// +/// 正式员工档案详情输出。 +/// public class OnboardingEmployeeDetailOutput { + /// + /// 正式员工档案。 + /// public ObEmployee Employee { get; set; } + + /// + /// 入职任务主数据。 + /// public ObOnboardingTask Task { get; set; } + + /// + /// 任务合同列表。 + /// public List Contracts { get; set; } = new List(); + + /// + /// 提交与审核记录列表。 + /// public List Audits { get; set; } = new List(); -} \ No newline at end of file +} diff --git a/SimpleAdmin.Application/Services/Onboarding/Employee/IOnboardingEmployeeService.cs b/SimpleAdmin.Application/Services/Onboarding/Employee/IOnboardingEmployeeService.cs index c2a6129..a7740e8 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Employee/IOnboardingEmployeeService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Employee/IOnboardingEmployeeService.cs @@ -1,7 +1,16 @@ namespace SimpleAdmin.Application; +/// +/// 定义正式员工档案查询业务能力。 +/// public interface IOnboardingEmployeeService : ITransient { + /// + /// 分页查询审核通过后生成的正式员工档案。 + /// Task> Page(OnboardingEmployeePageInput input); + /// + /// 查询正式员工及其来源任务、合同和审核记录。 + /// Task Detail(BaseIdInput input); -} \ No newline at end of file +} diff --git a/SimpleAdmin.Application/Services/Onboarding/Employee/OnboardingEmployeeService.cs b/SimpleAdmin.Application/Services/Onboarding/Employee/OnboardingEmployeeService.cs index 2471277..950a79d 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Employee/OnboardingEmployeeService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Employee/OnboardingEmployeeService.cs @@ -1,11 +1,17 @@ namespace SimpleAdmin.Application; /// 仅展示审核通过后创建的正式员工档案;入职资料的来源任务可追溯。 +/// +/// 实现正式员工档案查询业务能力。 +/// public class OnboardingEmployeeService : IOnboardingEmployeeService { private readonly SqlSugarScope _db; public OnboardingEmployeeService() => _db = DbContext.DB; + /// + /// 分页查询审核通过后生成的正式员工档案。 + /// public Task> Page(OnboardingEmployeePageInput input) => _db.Queryable() .WhereIF(!string.IsNullOrWhiteSpace(input.EmployeeName), x => x.EmployeeName.Contains(input.EmployeeName) || x.IdCardNumber.Contains(input.EmployeeName)) .WhereIF(!string.IsNullOrWhiteSpace(input.Phone), x => x.Phone.Contains(input.Phone)) @@ -13,6 +19,9 @@ public class OnboardingEmployeeService : IOnboardingEmployeeService .WhereIF(input.PositionId.HasValue, x => x.PositionId == input.PositionId.Value) .OrderByDescending(x => x.CreateTime).ToPagedListAsync(input.PageNum, input.PageSize); + /// + /// 查询正式员工及其来源任务、合同和审核记录。 + /// public async Task Detail(BaseIdInput input) { var employee = await _db.Queryable().InSingleAsync(input.Id) ?? throw Oops.Bah("正式员工不存在"); @@ -22,4 +31,3 @@ public class OnboardingEmployeeService : IOnboardingEmployeeService return new OnboardingEmployeeDetailOutput { Employee = employee, Task = task, Contracts = contracts, Audits = audits }; } } - diff --git a/SimpleAdmin.Application/Services/Onboarding/EntryConfig/Dto/OnboardingEntryConfigInput.cs b/SimpleAdmin.Application/Services/Onboarding/EntryConfig/Dto/OnboardingEntryConfigInput.cs index 60b5367..cacfc21 100644 --- a/SimpleAdmin.Application/Services/Onboarding/EntryConfig/Dto/OnboardingEntryConfigInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/EntryConfig/Dto/OnboardingEntryConfigInput.cs @@ -1,68 +1,169 @@ namespace SimpleAdmin.Application; +/// +/// 保存动态入职字段参数。 +/// public class OnboardingFormFieldSaveInput { + /// + /// 业务数据 Id。 + /// public long? Id { get; set; } + /// + /// 动态字段编码。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "字段编码不能为空")] public string FieldCode { get; set; } + /// + /// 动态字段名称。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "字段名称不能为空")] public string FieldName { get; set; } + /// + /// 字段或变量数据类型。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "数据类型不能为空")] public string DataType { get; set; } + /// + /// 可选项 JSON。 + /// public string OptionsJson { get; set; } + + /// + /// 字段校验规则。 + /// public string ValidationRule { get; set; } + + /// + /// 员工端输入提示。 + /// public string Placeholder { get; set; } + + /// + /// 启用状态或状态筛选条件。 + /// public string Status { get; set; } = "enable"; } +/// +/// 保存入职材料类型参数。 +/// public class OnboardingMaterialTypeSaveInput { + /// + /// 业务数据 Id。 + /// public long? Id { get; set; } + /// + /// 材料类型编码。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "资料编码不能为空")] public string MaterialCode { get; set; } + /// + /// 材料名称。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "资料名称不能为空")] public string MaterialName { get; set; } + /// + /// 允许上传的文件扩展名。 + /// public string AllowedExtensions { get; set; } + + /// + /// 允许上传的最大文件数量。 + /// public int MaxFileCount { get; set; } = 1; + + /// + /// 单个文件最大大小,单位为 MB。 + /// public int? MaxFileSizeMb { get; set; } + + /// + /// 启用状态或状态筛选条件。 + /// public string Status { get; set; } = "enable"; } +/// +/// 保存公司岗位动态字段要求参数。 +/// public class OnboardingFormRequirementSaveInput { + /// + /// 业务数据 Id。 + /// public long? Id { get; set; } + /// + /// 入职业务公司 Id。 + /// [IdNotNull(ErrorMessage = "公司Id不能为空")] public long CompanyId { get; set; } + /// + /// 岗位 Id;为空时表示公司级配置。 + /// public long? PositionId { get; set; } + /// + /// 动态字段 Id。 + /// [IdNotNull(ErrorMessage = "字段Id不能为空")] public long FieldId { get; set; } + /// + /// 是否必填、必传或必签。 + /// public bool Required { get; set; } + + /// + /// 显示排序码。 + /// public int? SortCode { get; set; } } +/// +/// 保存公司岗位材料要求参数。 +/// public class OnboardingMaterialRequirementSaveInput { + /// + /// 业务数据 Id。 + /// public long? Id { get; set; } + /// + /// 入职业务公司 Id。 + /// [IdNotNull(ErrorMessage = "公司Id不能为空")] public long CompanyId { get; set; } + /// + /// 岗位 Id;为空时表示公司级配置。 + /// public long? PositionId { get; set; } + /// + /// 材料类型 Id。 + /// [IdNotNull(ErrorMessage = "资料类型Id不能为空")] public long MaterialTypeId { get; set; } + /// + /// 是否必填、必传或必签。 + /// public bool Required { get; set; } + + /// + /// 显示排序码。 + /// public int? SortCode { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/EntryConfig/IOnboardingEntryConfigService.cs b/SimpleAdmin.Application/Services/Onboarding/EntryConfig/IOnboardingEntryConfigService.cs index fe6bcf8..5bb40b3 100644 --- a/SimpleAdmin.Application/Services/Onboarding/EntryConfig/IOnboardingEntryConfigService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/EntryConfig/IOnboardingEntryConfigService.cs @@ -1,17 +1,56 @@ namespace SimpleAdmin.Application; +/// +/// 定义动态字段、材料类型及公司岗位要求配置业务能力。 +/// public interface IOnboardingEntryConfigService : ITransient { + /// + /// 查询全部动态入职字段。 + /// Task> ListFormFields(); + /// + /// 新增或编辑动态入职字段。 + /// Task SaveFormField(OnboardingFormFieldSaveInput input); + /// + /// 删除未被填写要求引用的动态字段。 + /// Task DeleteFormFields(BaseIdListInput input); + /// + /// 查询全部入职材料类型。 + /// Task> ListMaterialTypes(); + /// + /// 新增或编辑入职材料类型。 + /// Task SaveMaterialType(OnboardingMaterialTypeSaveInput input); + /// + /// 删除未被要求或上传记录引用的材料类型。 + /// Task DeleteMaterialTypes(BaseIdListInput input); + /// + /// 查询指定公司的动态字段填写要求。 + /// Task> ListFormRequirements(long companyId); + /// + /// 新增或编辑公司岗位动态字段要求。 + /// Task SaveFormRequirement(OnboardingFormRequirementSaveInput input); + /// + /// 删除动态字段填写要求。 + /// Task DeleteFormRequirements(BaseIdListInput input); + /// + /// 查询指定公司的材料上传要求。 + /// Task> ListMaterialRequirements(long companyId); + /// + /// 新增或编辑公司岗位材料要求。 + /// Task SaveMaterialRequirement(OnboardingMaterialRequirementSaveInput input); + /// + /// 删除材料上传要求。 + /// Task DeleteMaterialRequirements(BaseIdListInput input); -} \ No newline at end of file +} diff --git a/SimpleAdmin.Application/Services/Onboarding/EntryConfig/OnboardingEntryConfigService.cs b/SimpleAdmin.Application/Services/Onboarding/EntryConfig/OnboardingEntryConfigService.cs index 02c9c16..2baeb23 100644 --- a/SimpleAdmin.Application/Services/Onboarding/EntryConfig/OnboardingEntryConfigService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/EntryConfig/OnboardingEntryConfigService.cs @@ -12,6 +12,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService _db = DbContext.DB; } + /// + /// 查询全部动态入职字段。 + /// public Task> ListFormFields() { return _db.Queryable() @@ -19,6 +22,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService .ToListAsync(); } + /// + /// 新增或编辑动态入职字段。 + /// public async Task SaveFormField(OnboardingFormFieldSaveInput input) { var fieldCodeExists = await _db.Queryable() @@ -51,6 +57,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService await _db.Insertable(entity).ExecuteCommandAsync(); } + /// + /// 删除未被填写要求引用的动态字段。 + /// public async Task DeleteFormFields(BaseIdListInput input) { if (input.Ids.Count == 0) @@ -64,6 +73,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService await _db.Deleteable().In(input.Ids).ExecuteCommandAsync(); } + /// + /// 查询全部入职材料类型。 + /// public Task> ListMaterialTypes() { return _db.Queryable() @@ -71,6 +83,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService .ToListAsync(); } + /// + /// 新增或编辑入职材料类型。 + /// public async Task SaveMaterialType(OnboardingMaterialTypeSaveInput input) { if (input.MaxFileCount <= 0) @@ -105,6 +120,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService await _db.Insertable(entity).ExecuteCommandAsync(); } + /// + /// 删除未被要求或上传记录引用的材料类型。 + /// public async Task DeleteMaterialTypes(BaseIdListInput input) { if (input.Ids.Count == 0) @@ -123,6 +141,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService await _db.Deleteable().In(input.Ids).ExecuteCommandAsync(); } + /// + /// 查询指定公司的动态字段填写要求。 + /// public Task> ListFormRequirements(long companyId) { return _db.Queryable() @@ -131,6 +152,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService .ToListAsync(); } + /// + /// 新增或编辑公司岗位动态字段要求。 + /// public async Task SaveFormRequirement(OnboardingFormRequirementSaveInput input) { await EnsureCompanyAndPosition(input.CompanyId, input.PositionId); @@ -167,6 +191,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService await _db.Insertable(entity).ExecuteCommandAsync(); } + /// + /// 删除动态字段填写要求。 + /// public Task DeleteFormRequirements(BaseIdListInput input) { if (input.Ids.Count == 0) @@ -175,6 +202,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService return _db.Deleteable().In(input.Ids).ExecuteCommandAsync(); } + /// + /// 查询指定公司的材料上传要求。 + /// public Task> ListMaterialRequirements(long companyId) { return _db.Queryable() @@ -183,6 +213,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService .ToListAsync(); } + /// + /// 新增或编辑公司岗位材料要求。 + /// public async Task SaveMaterialRequirement(OnboardingMaterialRequirementSaveInput input) { await EnsureCompanyAndPosition(input.CompanyId, input.PositionId); @@ -219,6 +252,9 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService await _db.Insertable(entity).ExecuteCommandAsync(); } + /// + /// 删除材料上传要求。 + /// public Task DeleteMaterialRequirements(BaseIdListInput input) { if (input.Ids.Count == 0) @@ -243,5 +279,3 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService throw Oops.Bah("岗位不存在、未启用或不属于该公司"); } } - - diff --git a/SimpleAdmin.Application/Services/Onboarding/Lifecycle/IOnboardingTaskLifecycleService.cs b/SimpleAdmin.Application/Services/Onboarding/Lifecycle/IOnboardingTaskLifecycleService.cs index 9a99104..853c3fd 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Lifecycle/IOnboardingTaskLifecycleService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Lifecycle/IOnboardingTaskLifecycleService.cs @@ -1,2 +1,17 @@ namespace SimpleAdmin.Application; -public interface IOnboardingTaskLifecycleService : ITransient { Task Archive(OnboardingAuditActionInput input); Task Revoke(OnboardingAuditActionInput input); } + +/// +/// 定义入职任务撤销和归档能力。 +/// +public interface IOnboardingTaskLifecycleService : ITransient +{ + /// + /// 归档已经审核通过的入职任务。 + /// + Task Archive(OnboardingAuditActionInput input); + + /// + /// 撤销尚未归档的入职任务并使员工链接失效。 + /// + Task Revoke(OnboardingAuditActionInput input); +} diff --git a/SimpleAdmin.Application/Services/Onboarding/Lifecycle/OnboardingTaskLifecycleService.cs b/SimpleAdmin.Application/Services/Onboarding/Lifecycle/OnboardingTaskLifecycleService.cs index bc0f268..f7733d6 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Lifecycle/OnboardingTaskLifecycleService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Lifecycle/OnboardingTaskLifecycleService.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Application; +/// +/// 实现入职任务生命周期业务能力。 +/// public class OnboardingTaskLifecycleService : IOnboardingTaskLifecycleService { private readonly SqlSugarScope _db; @@ -11,6 +14,9 @@ public class OnboardingTaskLifecycleService : IOnboardingTaskLifecycleService _config = config; } + /// + /// 归档已审核通过的入职任务。 + /// public async Task Archive(OnboardingAuditActionInput input) { var task = await Authorize(input.TaskId); @@ -25,6 +31,9 @@ public class OnboardingTaskLifecycleService : IOnboardingTaskLifecycleService await Log(task, OnboardingAuditAction.Archive, input.AuditOpinion); } + /// + /// 撤销入职任务并同步撤销仍然有效的员工填写链接。 + /// public async Task Revoke(OnboardingAuditActionInput input) { var task = await Authorize(input.TaskId); @@ -88,4 +97,3 @@ public class OnboardingTaskLifecycleService : IOnboardingTaskLifecycleService }).ExecuteCommandAsync(); } } - diff --git a/SimpleAdmin.Application/Services/Onboarding/MaterialReview/Dto/OnboardingMaterialReviewInput.cs b/SimpleAdmin.Application/Services/Onboarding/MaterialReview/Dto/OnboardingMaterialReviewInput.cs index de6241d..b5ddcfb 100644 --- a/SimpleAdmin.Application/Services/Onboarding/MaterialReview/Dto/OnboardingMaterialReviewInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/MaterialReview/Dto/OnboardingMaterialReviewInput.cs @@ -1,10 +1,23 @@ namespace SimpleAdmin.Application; +/// +/// 审核候选人上传材料参数。 +/// public class OnboardingMaterialReviewInput { + /// + /// 任务材料记录 Id。 + /// [IdNotNull(ErrorMessage = "任务资料Id不能为空")] public long TaskMaterialId { get; set; } + /// + /// 材料审核状态。 + /// public string ReviewStatus { get; set; } + + /// + /// 材料审核意见。 + /// public string ReviewRemark { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/MaterialReview/IOnboardingMaterialReviewService.cs b/SimpleAdmin.Application/Services/Onboarding/MaterialReview/IOnboardingMaterialReviewService.cs index 1820e3d..6a0f816 100644 --- a/SimpleAdmin.Application/Services/Onboarding/MaterialReview/IOnboardingMaterialReviewService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/MaterialReview/IOnboardingMaterialReviewService.cs @@ -1,2 +1,12 @@ namespace SimpleAdmin.Application; -public interface IOnboardingMaterialReviewService : ITransient { Task Review(OnboardingMaterialReviewInput input); } + +/// +/// 定义候选人上传材料的审核能力。 +/// +public interface IOnboardingMaterialReviewService : ITransient +{ + /// + /// 审核单份候选人上传材料。 + /// + Task Review(OnboardingMaterialReviewInput input); +} diff --git a/SimpleAdmin.Application/Services/Onboarding/MaterialReview/OnboardingMaterialReviewService.cs b/SimpleAdmin.Application/Services/Onboarding/MaterialReview/OnboardingMaterialReviewService.cs index d688099..84ba66f 100644 --- a/SimpleAdmin.Application/Services/Onboarding/MaterialReview/OnboardingMaterialReviewService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/MaterialReview/OnboardingMaterialReviewService.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Application; +/// +/// 实现候选人上传材料审核业务能力。 +/// public class OnboardingMaterialReviewService : IOnboardingMaterialReviewService { private readonly SqlSugarScope _db; @@ -11,6 +14,9 @@ public class OnboardingMaterialReviewService : IOnboardingMaterialReviewService _config = config; } + /// + /// 审核单份候选人上传材料并记录审核意见。 + /// public async Task Review(OnboardingMaterialReviewInput input) { if (input.ReviewStatus != TaskMaterialReviewStatus.Passed @@ -63,4 +69,3 @@ public class OnboardingMaterialReviewService : IOnboardingMaterialReviewService } } } - diff --git a/SimpleAdmin.Application/Services/Onboarding/Position/Dto/OnboardingPositionInput.cs b/SimpleAdmin.Application/Services/Onboarding/Position/Dto/OnboardingPositionInput.cs index 551738b..ac9c36e 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Position/Dto/OnboardingPositionInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Position/Dto/OnboardingPositionInput.cs @@ -1,23 +1,52 @@ namespace SimpleAdmin.Application; +/// +/// 入职业务岗位分页查询参数。 +/// public class OnboardingPositionPageInput : BasePageInput { + /// + /// 入职业务公司 Id。 + /// public long? CompanyId { get; set; } + + /// + /// 岗位名称。 + /// public virtual string PositionName { get; set; } + + /// + /// 启用状态或状态筛选条件。 + /// public string Status { get; set; } } +/// +/// 新增入职业务岗位参数。 +/// public class OnboardingPositionAddInput : ObPosition { + /// + /// 岗位业务编码。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "岗位编码不能为空")] public override string PositionCode { get; set; } + /// + /// 岗位名称。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "岗位名称不能为空")] public override string PositionName { get; set; } } +/// +/// 编辑入职业务岗位参数。 +/// public class OnboardingPositionEditInput : OnboardingPositionAddInput { + /// + /// 业务数据 Id。 + /// [IdNotNull(ErrorMessage = "岗位Id不能为空")] public override long Id { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/Position/IOnboardingPositionService.cs b/SimpleAdmin.Application/Services/Onboarding/Position/IOnboardingPositionService.cs index d564900..5c8994d 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Position/IOnboardingPositionService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Position/IOnboardingPositionService.cs @@ -1,11 +1,32 @@ namespace SimpleAdmin.Application; +/// +/// 定义入职业务岗位业务能力。 +/// public interface IOnboardingPositionService : ITransient { + /// + /// 分页查询入职业务岗位。 + /// Task> Page(OnboardingPositionPageInput input); + /// + /// 查询指定公司下全部已启用岗位。 + /// Task> ListEnabled(long companyId); + /// + /// 查询岗位详情。 + /// Task Detail(BaseIdInput input); + /// + /// 新增入职业务岗位。 + /// Task Add(OnboardingPositionAddInput input); + /// + /// 编辑入职业务岗位。 + /// Task Edit(OnboardingPositionEditInput input); + /// + /// 删除未被任务或正式员工引用的岗位。 + /// Task Delete(BaseIdListInput input); } diff --git a/SimpleAdmin.Application/Services/Onboarding/Position/OnboardingPositionService.cs b/SimpleAdmin.Application/Services/Onboarding/Position/OnboardingPositionService.cs index 134f484..b193966 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Position/OnboardingPositionService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Position/OnboardingPositionService.cs @@ -1,7 +1,13 @@ namespace SimpleAdmin.Application; +/// +/// 实现入职业务岗位业务能力。 +/// public class OnboardingPositionService : DbRepository, IOnboardingPositionService { + /// + /// 分页查询入职业务岗位。 + /// public async Task> Page(OnboardingPositionPageInput input) { return await Context.Queryable() @@ -15,6 +21,9 @@ public class OnboardingPositionService : DbRepository, IOnboardingPo .ToPagedListAsync(input.PageNum, input.PageSize); } + /// + /// 查询指定公司下全部已启用岗位。 + /// public Task> ListEnabled(long companyId) { return Context.Queryable() @@ -23,11 +32,17 @@ public class OnboardingPositionService : DbRepository, IOnboardingPo .ToListAsync(); } + /// + /// 查询岗位详情。 + /// public async Task Detail(BaseIdInput input) { return await GetByIdAsync(input.Id) ?? throw Oops.Bah("岗位不存在"); } + /// + /// 新增入职业务岗位。 + /// public async Task Add(OnboardingPositionAddInput input) { await EnsureCompanyExists(input.CompanyId); @@ -35,6 +50,9 @@ public class OnboardingPositionService : DbRepository, IOnboardingPo await InsertAsync(input.Adapt()); } + /// + /// 编辑入职业务岗位。 + /// public async Task Edit(OnboardingPositionEditInput input) { await Detail(new BaseIdInput { Id = input.Id }); @@ -43,6 +61,9 @@ public class OnboardingPositionService : DbRepository, IOnboardingPo await UpdateAsync(input.Adapt()); } + /// + /// 删除未被任务或正式员工引用的岗位。 + /// public async Task Delete(BaseIdListInput input) { if (input.Ids.Count == 0) diff --git a/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/Dto/OnboardingMaterialUploadValidationInput.cs b/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/Dto/OnboardingMaterialUploadValidationInput.cs index 511ed08..e78792b 100644 --- a/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/Dto/OnboardingMaterialUploadValidationInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/Dto/OnboardingMaterialUploadValidationInput.cs @@ -1,9 +1,27 @@ namespace SimpleAdmin.Application; +/// +/// 员工端材料上传前校验参数。 +/// public class OnboardingMaterialUploadValidationInput { + /// + /// 员工填写链接中的明文 Token。 + /// public string Token { get; set; } + + /// + /// 材料类型 Id。 + /// public long MaterialTypeId { get; set; } + + /// + /// 待上传文件名称。 + /// public string FileName { get; set; } + + /// + /// 待上传文件大小,单位为字节。 + /// public long FileLength { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/Dto/OnboardingPublicSubmissionInput.cs b/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/Dto/OnboardingPublicSubmissionInput.cs index b117b70..d4bf95f 100644 --- a/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/Dto/OnboardingPublicSubmissionInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/Dto/OnboardingPublicSubmissionInput.cs @@ -1,38 +1,85 @@ namespace SimpleAdmin.Application; +/// +/// 单个动态字段填写值。 +/// public class OnboardingDynamicValueInput { + /// + /// 动态字段 Id。 + /// public long FieldId { get; set; } + + /// + /// 动态字段填写值。 + /// public string FieldValue { get; set; } } +/// +/// 批量保存员工动态字段参数。 +/// public class OnboardingSaveDynamicValuesInput { + /// + /// 员工填写链接中的明文 Token。 + /// [global::System.ComponentModel.DataAnnotations.Required] public string Token { get; set; } + /// + /// 待保存的字段或变量值集合。 + /// public List Values { get; set; } = new(); } +/// +/// 保存员工已上传材料参数。 +/// public class OnboardingSaveMaterialInput { + /// + /// 员工填写链接中的明文 Token。 + /// [global::System.ComponentModel.DataAnnotations.Required] public string Token { get; set; } + /// + /// 材料类型 Id。 + /// public long MaterialTypeId { get; set; } + + /// + /// 系统文件 Id。 + /// public long FileId { get; set; } } +/// +/// 员工确认阅读合同参数。 +/// public class OnboardingConfirmContractInput { + /// + /// 员工填写链接中的明文 Token。 + /// [global::System.ComponentModel.DataAnnotations.Required] public string Token { get; set; } + /// + /// 任务合同 Id。 + /// public long TaskContractId { get; set; } } +/// +/// 员工提交入职资料参数。 +/// public class OnboardingSubmitInput { + /// + /// 员工填写链接中的明文 Token。 + /// [global::System.ComponentModel.DataAnnotations.Required] public string Token { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/IOnboardingPublicSubmissionService.cs b/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/IOnboardingPublicSubmissionService.cs index c7e7c00..82af52c 100644 --- a/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/IOnboardingPublicSubmissionService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/IOnboardingPublicSubmissionService.cs @@ -1,10 +1,28 @@ namespace SimpleAdmin.Application; +/// +/// 定义员工端入职资料提交业务能力。 +/// public interface IOnboardingPublicSubmissionService : ITransient { + /// + /// 保存候选人填写的动态字段值。 + /// Task SaveDynamicValues(OnboardingSaveDynamicValuesInput input); + /// + /// 关联候选人已经上传的系统文件与材料类型。 + /// Task SaveMaterial(OnboardingSaveMaterialInput input); + /// + /// 记录候选人已阅读并确认指定任务合同。 + /// Task ConfirmContract(OnboardingConfirmContractInput input); + /// + /// 校验全部必填资料后提交入职任务进入审核。 + /// Task Submit(OnboardingSubmitInput input); + /// + /// 在保存文件前校验材料适用范围、扩展名、大小和数量。 + /// Task ValidateMaterialUpload(OnboardingMaterialUploadValidationInput input); } diff --git a/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/OnboardingPublicSubmissionService.cs b/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/OnboardingPublicSubmissionService.cs index eb0b1a1..2066888 100644 --- a/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/OnboardingPublicSubmissionService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/PublicSubmission/OnboardingPublicSubmissionService.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Application; +/// +/// 实现员工端入职资料提交业务能力。 +/// public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionService { private readonly SqlSugarScope _db; @@ -12,6 +15,9 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ _snapshotService = snapshotService; } + /// + /// 保存候选人填写的动态字段值。 + /// public async Task SaveDynamicValues(OnboardingSaveDynamicValuesInput input) { var task = await GetEditableTask(input.Token); @@ -52,6 +58,9 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ } } + /// + /// 关联候选人已经上传的系统文件与材料类型。 + /// public async Task SaveMaterial(OnboardingSaveMaterialInput input) { var task = await GetEditableTask(input.Token); @@ -84,6 +93,9 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ }).ExecuteCommandAsync(); } + /// + /// 记录候选人已阅读并确认指定任务合同。 + /// public async Task ConfirmContract(OnboardingConfirmContractInput input) { var task = await GetEditableTask(input.Token); @@ -97,6 +109,9 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ await _db.Updateable(contract).ExecuteCommandAsync(); } + /// + /// 校验全部必填资料后提交入职任务进入审核。 + /// public async Task Submit(OnboardingSubmitInput input) { var task = await GetEditableTask(input.Token); @@ -111,6 +126,7 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ await _snapshotService.Build(task.Id, info); + // 提交时统一完成动态字段、材料、合同变量和合同确认校验,保存阶段只负责暂存。 var requiredFields = (await GetEffectiveFormRequirements(task)) .Where(item => item.Required) .Select(item => item.FieldId) @@ -160,6 +176,9 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ }).ExecuteCommandAsync(); } + /// + /// 在保存文件前校验材料适用范围、扩展名、大小和数量。 + /// public async Task ValidateMaterialUpload(OnboardingMaterialUploadValidationInput input) { var task = await GetEditableTask(input.Token); @@ -262,5 +281,3 @@ public class OnboardingPublicSubmissionService : IOnboardingPublicSubmissionServ return task; } } - - diff --git a/SimpleAdmin.Application/Services/Onboarding/PublicTask/IOnboardingPublicTaskService.cs b/SimpleAdmin.Application/Services/Onboarding/PublicTask/IOnboardingPublicTaskService.cs index 3941de1..1ad6d39 100644 --- a/SimpleAdmin.Application/Services/Onboarding/PublicTask/IOnboardingPublicTaskService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/PublicTask/IOnboardingPublicTaskService.cs @@ -1,8 +1,20 @@ namespace SimpleAdmin.Application; +/// +/// 定义员工端入职任务访问业务能力。 +/// public interface IOnboardingPublicTaskService : ITransient { + /// + /// 通过有效 Token 获取员工端任务、字段、材料和合同信息。 + /// Task Detail(OnboardingTaskPublicAccessInput input); + /// + /// 保存候选人固定基础信息并刷新合同变量快照。 + /// Task SaveEmployeeInfo(OnboardingTaskPublicSaveInput input); + /// + /// 校验任务归属后返回合同模板源文件 Id。 + /// Task GetContractSourceFileId(OnboardingPublicContractSourceInput input); } diff --git a/SimpleAdmin.Application/Services/Onboarding/PublicTask/OnboardingPublicTaskService.cs b/SimpleAdmin.Application/Services/Onboarding/PublicTask/OnboardingPublicTaskService.cs index a082964..31d8c25 100644 --- a/SimpleAdmin.Application/Services/Onboarding/PublicTask/OnboardingPublicTaskService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/PublicTask/OnboardingPublicTaskService.cs @@ -15,6 +15,9 @@ public class OnboardingPublicTaskService : IOnboardingPublicTaskService _snapshotService = snapshotService; } + /// + /// 通过有效 Token 获取员工端任务、字段、材料和合同信息。 + /// public async Task Detail(OnboardingTaskPublicAccessInput input) { var link = await GetActiveLink(input.Token); @@ -77,6 +80,9 @@ public class OnboardingPublicTaskService : IOnboardingPublicTaskService }; } + /// + /// 保存候选人固定基础信息并刷新合同变量快照。 + /// public async Task SaveEmployeeInfo(OnboardingTaskPublicSaveInput input) { var link = await GetActiveLink(input.Token); @@ -103,6 +109,9 @@ public class OnboardingPublicTaskService : IOnboardingPublicTaskService await _snapshotService.Build(task.Id, entity); } + /// + /// 校验任务归属后返回合同模板源文件 Id。 + /// public async Task GetContractSourceFileId(OnboardingPublicContractSourceInput input) { var link = await GetActiveLink(input.Token); @@ -121,6 +130,7 @@ public class OnboardingPublicTaskService : IOnboardingPublicTaskService .Where(x => x.CompanyId == task.CompanyId && (x.PositionId == null || x.PositionId == task.PositionId)) .ToListAsync(); + // 同一字段同时存在公司级和岗位级配置时,岗位配置覆盖公司默认配置。 return requirements .GroupBy(x => x.FieldId) .Select(group => group.FirstOrDefault(x => x.PositionId == task.PositionId) ?? group.First()) @@ -133,6 +143,7 @@ public class OnboardingPublicTaskService : IOnboardingPublicTaskService .Where(x => x.CompanyId == task.CompanyId && (x.PositionId == null || x.PositionId == task.PositionId)) .ToListAsync(); + // 同一材料同时存在公司级和岗位级配置时,岗位配置覆盖公司默认配置。 return requirements .GroupBy(x => x.MaterialTypeId) .Select(group => group.FirstOrDefault(x => x.PositionId == task.PositionId) ?? group.First()) @@ -153,5 +164,3 @@ public class OnboardingPublicTaskService : IOnboardingPublicTaskService return link; } } - - diff --git a/SimpleAdmin.Application/Services/Onboarding/Task/Dto/OnboardingTaskInput.cs b/SimpleAdmin.Application/Services/Onboarding/Task/Dto/OnboardingTaskInput.cs index 8ba0c23..36e9e65 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Task/Dto/OnboardingTaskInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Task/Dto/OnboardingTaskInput.cs @@ -1,20 +1,60 @@ namespace SimpleAdmin.Application; +/// +/// 创建新员工入职任务参数。 +/// public class OnboardingTaskCreateInput { + /// + /// 入职业务公司 Id。 + /// [IdNotNull(ErrorMessage = "公司Id不能为空")] public long CompanyId { get; set; } + + /// + /// 入职任务所属岗位 Id。 + /// [IdNotNull(ErrorMessage = "岗位Id不能为空")] public long PositionId { get; set; } + + /// + /// 创建任务时指定的审核人用户 Id。 + /// public long? AssignedReviewerUserId { get; set; } + + /// + /// 链接过期时间;实际有效期由系统配置计算。 + /// public DateTime? LinkExpireAt { get; set; } + + /// + /// 业务备注。 + /// public string Remark { get; set; } } +/// +/// 入职任务创建结果。 +/// public class OnboardingTaskCreatedOutput { + /// + /// 入职任务 Id。 + /// public long TaskId { get; set; } + + /// + /// 入职任务编号。 + /// public string TaskNo { get; set; } + + /// + /// 新生成的员工填写链接 Token,仅在创建结果中返回。 + /// public string LinkToken { get; set; } + + /// + /// 员工填写链接过期时间。 + /// public DateTime ExpiresAt { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/Task/Dto/OnboardingTaskPublicInput.cs b/SimpleAdmin.Application/Services/Onboarding/Task/Dto/OnboardingTaskPublicInput.cs index ace1cf7..3d202eb 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Task/Dto/OnboardingTaskPublicInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Task/Dto/OnboardingTaskPublicInput.cs @@ -1,61 +1,169 @@ namespace SimpleAdmin.Application; +/// +/// 员工端通过 Token 访问任务参数。 +/// public class OnboardingTaskPublicAccessInput { + /// + /// 员工填写链接中的明文 Token。 + /// [global::System.ComponentModel.DataAnnotations.Required] public string Token { get; set; } } +/// +/// 员工端获取合同源文件参数。 +/// public class OnboardingPublicContractSourceInput { + /// + /// 员工填写链接中的明文 Token。 + /// [global::System.ComponentModel.DataAnnotations.Required] public string Token { get; set; } + /// + /// 任务合同 Id。 + /// [IdNotNull(ErrorMessage = "任务合同Id不能为空")] public long TaskContractId { get; set; } } +/// +/// 员工端保存固定基础信息参数。 +/// public class OnboardingTaskPublicSaveInput : ObTaskEmployeeInfo { + /// + /// 员工填写链接中的明文 Token。 + /// [global::System.ComponentModel.DataAnnotations.Required] public string Token { get; set; } + /// + /// 员工姓名。 + /// [global::System.ComponentModel.DataAnnotations.Required] public new string EmployeeName { get; set; } + /// + /// 手机号码。 + /// [global::System.ComponentModel.DataAnnotations.Required] public new string Phone { get; set; } + /// + /// 身份证号码。 + /// [global::System.ComponentModel.DataAnnotations.Required] public new string IdCardNumber { get; set; } } +/// +/// 员工端动态字段展示信息。 +/// public class OnboardingPublicFormFieldOutput { + /// + /// 动态字段 Id。 + /// public long FieldId { get; set; } + + /// + /// 动态字段编码。 + /// public string FieldCode { get; set; } + + /// + /// 动态字段名称。 + /// public string FieldName { get; set; } + + /// + /// 字段或变量数据类型。 + /// public string DataType { get; set; } + + /// + /// 可选项 JSON。 + /// public string OptionsJson { get; set; } + + /// + /// 是否必填、必传或必签。 + /// public bool Required { get; set; } } +/// +/// 员工端材料上传要求。 +/// public class OnboardingPublicMaterialOutput { + /// + /// 材料类型 Id。 + /// public long MaterialTypeId { get; set; } + + /// + /// 材料名称。 + /// public string MaterialName { get; set; } + + /// + /// 允许上传的文件扩展名。 + /// public string AllowedExtensions { get; set; } + + /// + /// 允许上传的最大文件数量。 + /// public int MaxFileCount { get; set; } + + /// + /// 是否必填、必传或必签。 + /// public bool Required { get; set; } } +/// +/// 员工端入职任务完整详情。 +/// public class OnboardingTaskPublicDetailOutput { + /// + /// 入职任务主数据。 + /// public ObOnboardingTask Task { get; set; } + + /// + /// 候选人固定基础信息。 + /// public ObTaskEmployeeInfo EmployeeInfo { get; set; } + + /// + /// 任务合同列表。 + /// public List Contracts { get; set; } + + /// + /// 候选人已保存的动态字段值。 + /// public List DynamicValues { get; set; } + + /// + /// 员工端需要展示的动态字段。 + /// public List FormFields { get; set; } + + /// + /// 员工端需要展示的材料要求。 + /// public List MaterialRequirements { get; set; } + + /// + /// 候选人已上传材料列表。 + /// public List Materials { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/Task/IOnboardingTaskService.cs b/SimpleAdmin.Application/Services/Onboarding/Task/IOnboardingTaskService.cs index ee96c01..aae6734 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Task/IOnboardingTaskService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Task/IOnboardingTaskService.cs @@ -1,6 +1,12 @@ namespace SimpleAdmin.Application; +/// +/// 定义入职任务创建业务能力。 +/// public interface IOnboardingTaskService : ITransient { + /// + /// 校验公司、岗位和合同范围后创建入职任务、链接及任务合同。 + /// Task Create(OnboardingTaskCreateInput input); } diff --git a/SimpleAdmin.Application/Services/Onboarding/Task/OnboardingTaskService.cs b/SimpleAdmin.Application/Services/Onboarding/Task/OnboardingTaskService.cs index 779b1bb..b6d77a7 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Task/OnboardingTaskService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Task/OnboardingTaskService.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Application; +/// +/// 实现入职任务创建业务能力。 +/// public class OnboardingTaskService : IOnboardingTaskService { private readonly SqlSugarScope _db; @@ -15,6 +18,9 @@ public class OnboardingTaskService : IOnboardingTaskService _snapshotService = snapshotService; } + /// + /// 校验公司、岗位和合同范围后创建入职任务、链接及任务合同。 + /// public async Task Create(OnboardingTaskCreateInput input) { var companyEnabled = await _db.Queryable() @@ -73,6 +79,7 @@ public class OnboardingTaskService : IOnboardingTaskService Remark = input.Remark }; + // 任务、链接、合同实例和变量快照属于同一创建动作,必须保证事务一致性。 await _db.Ado.BeginTranAsync(); try { @@ -124,5 +131,3 @@ public class OnboardingTaskService : IOnboardingTaskService }; } } - - diff --git a/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/Dto/OnboardingTaskContractVariableInput.cs b/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/Dto/OnboardingTaskContractVariableInput.cs index 4c8819a..8646183 100644 --- a/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/Dto/OnboardingTaskContractVariableInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/Dto/OnboardingTaskContractVariableInput.cs @@ -1,43 +1,125 @@ namespace SimpleAdmin.Application; +/// +/// 查询任务合同变量参数。 +/// public class OnboardingTaskContractVariableQueryInput { + /// + /// 入职任务 Id。 + /// [IdNotNull(ErrorMessage = "入职任务Id不能为空")] public long TaskId { get; set; } } +/// +/// 批量保存任务合同变量参数。 +/// public class OnboardingTaskContractVariableSaveInput { + /// + /// 任务合同 Id。 + /// [IdNotNull(ErrorMessage = "任务合同Id不能为空")] public long TaskContractId { get; set; } + + /// + /// 待保存的字段或变量值集合。 + /// [global::System.ComponentModel.DataAnnotations.Required(ErrorMessage = "变量不能为空")] public List Values { get; set; } = new List(); } +/// +/// 单个任务合同变量保存值。 +/// public class OnboardingTaskContractVariableValueInput { + /// + /// 业务数据 Id。 + /// [IdNotNull(ErrorMessage = "变量Id不能为空")] public long Id { get; set; } + + /// + /// 任务合同变量最终值。 + /// public string VariableValue { get; set; } } +/// +/// 单份任务合同及其变量输出。 +/// public class OnboardingTaskContractVariableOutput { + /// + /// 任务合同 Id。 + /// public long TaskContractId { get; set; } + + /// + /// 任务合同名称。 + /// public string ContractName { get; set; } + + /// + /// 合同类型。 + /// public string ContractType { get; set; } + + /// + /// 任务合同变量列表。 + /// public List Variables { get; set; } = new List(); } +/// +/// 单个任务合同变量输出。 +/// public class OnboardingTaskContractVariableItemOutput { + /// + /// 业务数据 Id。 + /// public long Id { get; set; } + + /// + /// 合同变量编码。 + /// public string VariableCode { get; set; } + + /// + /// 合同变量名称。 + /// public string VariableName { get; set; } + + /// + /// 合同变量来源类型。 + /// public string VariableType { get; set; } + + /// + /// 字段或变量数据类型。 + /// public string DataType { get; set; } + + /// + /// 任务合同变量最终值。 + /// public string VariableValue { get; set; } + + /// + /// 是否必填、必传或必签。 + /// public bool Required { get; set; } + + /// + /// 人事是否可以编辑。 + /// public bool HrEditable { get; set; } + + /// + /// 当前用户是否可以编辑该变量。 + /// public bool Editable { get; set; } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/IOnboardingTaskContractVariableService.cs b/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/IOnboardingTaskContractVariableService.cs index b1ce963..22d948b 100644 --- a/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/IOnboardingTaskContractVariableService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/IOnboardingTaskContractVariableService.cs @@ -1,7 +1,16 @@ namespace SimpleAdmin.Application; +/// +/// 定义任务合同变量维护业务能力。 +/// public interface IOnboardingTaskContractVariableService : ITransient { + /// + /// 查询任务下全部合同及其变量当前值。 + /// Task> List(OnboardingTaskContractVariableQueryInput input); + /// + /// 保存允许人事编辑的任务合同变量值。 + /// Task Save(OnboardingTaskContractVariableSaveInput input); -} \ No newline at end of file +} diff --git a/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/OnboardingTaskContractVariableService.cs b/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/OnboardingTaskContractVariableService.cs index 91cfc49..3f7b58d 100644 --- a/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/OnboardingTaskContractVariableService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/TaskContractVariable/OnboardingTaskContractVariableService.cs @@ -10,6 +10,9 @@ public class OnboardingTaskContractVariableService : IOnboardingTaskContractVari public OnboardingTaskContractVariableService() => _db = DbContext.DB; + /// + /// 查询任务下全部合同及其变量当前值。 + /// public async Task> List( OnboardingTaskContractVariableQueryInput input) { @@ -68,6 +71,9 @@ public class OnboardingTaskContractVariableService : IOnboardingTaskContractVari }).ToList(); } + /// + /// 保存允许人事编辑的任务合同变量值。 + /// public async Task Save(OnboardingTaskContractVariableSaveInput input) { var contract = await _db.Queryable() @@ -127,6 +133,7 @@ public class OnboardingTaskContractVariableService : IOnboardingTaskContractVari row.VariableValue = inputValue.VariableValue; row.SourceType = ContractVariableSourceType.HrInput; + // 标记为手工覆盖后,后续刷新员工或公司自动变量时保留该值。 row.IsManualOverride = true; } @@ -137,4 +144,3 @@ public class OnboardingTaskContractVariableService : IOnboardingTaskContractVari } } } - diff --git a/SimpleAdmin.Application/Services/Onboarding/TaskQuery/Dto/OnboardingTaskQueryInput.cs b/SimpleAdmin.Application/Services/Onboarding/TaskQuery/Dto/OnboardingTaskQueryInput.cs index 2847fe2..14cd71f 100644 --- a/SimpleAdmin.Application/Services/Onboarding/TaskQuery/Dto/OnboardingTaskQueryInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/TaskQuery/Dto/OnboardingTaskQueryInput.cs @@ -1,17 +1,63 @@ namespace SimpleAdmin.Application; +/// +/// 入职任务分页查询参数。 +/// public class OnboardingTaskPageInput : BasePageInput { + /// + /// 入职任务编号。 + /// public string TaskNo { get; set; } + + /// + /// 入职任务状态筛选条件。 + /// public string TaskStatus { get; set; } + + /// + /// 入职业务公司 Id。 + /// public long? CompanyId { get; set; } } +/// +/// 后台入职任务详情输出。 +/// public class OnboardingTaskDetailOutput { + /// + /// 入职任务主数据。 + /// public ObOnboardingTask Task { get; set; } + + /// + /// 候选人固定基础信息。 + /// public ObTaskEmployeeInfo EmployeeInfo { get; set; } + + /// + /// 任务合同列表。 + /// public List Contracts { get; set; } + + /// + /// 候选人已上传材料列表。 + /// public List Materials { get; set; } + + /// + /// 候选人动态字段值列表。 + /// + public List FormValues { get; set; } + + /// + /// 任务当前有效链接信息。 + /// + public ObTaskLink Link { get; set; } + + /// + /// 提交与审核记录列表。 + /// public List Audits { get; set; } } diff --git a/SimpleAdmin.Application/Services/Onboarding/TaskQuery/IOnboardingTaskQueryService.cs b/SimpleAdmin.Application/Services/Onboarding/TaskQuery/IOnboardingTaskQueryService.cs index a24af85..2a11668 100644 --- a/SimpleAdmin.Application/Services/Onboarding/TaskQuery/IOnboardingTaskQueryService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/TaskQuery/IOnboardingTaskQueryService.cs @@ -1,8 +1,17 @@ namespace SimpleAdmin.Application; +/// +/// 定义入职任务查询业务能力。 +/// public interface IOnboardingTaskQueryService : ITransient { + /// + /// 分页查询后台入职任务。 + /// Task> Page(OnboardingTaskPageInput input); + /// + /// 查询任务基础信息、人员资料、合同、材料、表单值、链接和审核记录。 + /// Task Detail(BaseIdInput input); -} \ No newline at end of file +} diff --git a/SimpleAdmin.Application/Services/Onboarding/TaskQuery/OnboardingTaskQueryService.cs b/SimpleAdmin.Application/Services/Onboarding/TaskQuery/OnboardingTaskQueryService.cs index b3ab815..3a1ccd0 100644 --- a/SimpleAdmin.Application/Services/Onboarding/TaskQuery/OnboardingTaskQueryService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/TaskQuery/OnboardingTaskQueryService.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Application; +/// +/// 实现入职任务查询业务能力。 +/// public class OnboardingTaskQueryService : IOnboardingTaskQueryService { private readonly SqlSugarScope _db; @@ -9,6 +12,9 @@ public class OnboardingTaskQueryService : IOnboardingTaskQueryService _db = DbContext.DB; } + /// + /// 分页查询后台入职任务。 + /// public Task> Page(OnboardingTaskPageInput input) { return _db.Queryable() @@ -19,6 +25,9 @@ public class OnboardingTaskQueryService : IOnboardingTaskQueryService .ToPagedListAsync(input.PageNum, input.PageSize); } + /// + /// 查询任务基础信息、人员资料、合同、材料、表单值、链接和审核记录。 + /// public async Task Detail(BaseIdInput input) { var task = await _db.Queryable().InSingleAsync(input.Id) @@ -35,6 +44,13 @@ public class OnboardingTaskQueryService : IOnboardingTaskQueryService Materials = await _db.Queryable() .Where(item => item.TaskId == task.Id) .ToListAsync(), + FormValues = await _db.Queryable() + .Where(item => item.TaskId == task.Id) + .ToListAsync(), + Link = await _db.Queryable() + .Where(item => item.TaskId == task.Id && item.LinkStatus == "active") + .OrderByDescending(item => item.CreateTime) + .FirstAsync(), Audits = await _db.Queryable() .Where(item => item.TaskId == task.Id) .OrderByDescending(item => item.AuditedAt) @@ -42,4 +58,3 @@ public class OnboardingTaskQueryService : IOnboardingTaskQueryService }; } } - diff --git a/SimpleAdmin.Application/SimpleAdmin.Application.xml b/SimpleAdmin.Application/SimpleAdmin.Application.xml index 2ec50bd..a2b0b18 100644 --- a/SimpleAdmin.Application/SimpleAdmin.Application.xml +++ b/SimpleAdmin.Application/SimpleAdmin.Application.xml @@ -54,80 +54,3179 @@ 排序码 + + + 入职业务公司档案,保存合同甲方及入职归属公司信息。 + + + + + 公司业务编码。 + + + + + 公司显示名称。 + + + + + 合同中使用的甲方完整法定名称。 + + + + + 统一社会信用代码。 + + + + + 法定代表人姓名。 + + + + + 工商注册地址。 + + + + + 公司联系电话。 + + + + + 业务备注。 + + + + + 合同适用范围,将已启用的合同版本绑定到公司或具体岗位。 + + + + + 所属入职业务公司 Id。 + + + + + 所属岗位 Id;为空时表示适用于公司下全部岗位。 + + + + + 合同模板主档案 Id。 + + + + + 合同模板版本 Id。 + + + + + 该适用范围下的合同是否必签。 + + + + + 显示排序码。 + + + + + 合同模板主档案,用于区分不同合同类型及模板用途。 + + + + + 合同模板业务编码。 + + + + + 合同模板名称。 + + + + + 合同类型。 + + + + + 模板用途说明。 + + + + + 合同模板版本,保存不可变的 DOCX 源文件及版本有效期。 + + + + + 合同模板主档案 Id。 + + + + + 模板版本号。 + + + + + 模板 DOCX 源文件 Id。 + + + + + 源文件内容哈希,用于校验文件是否变化。 + + + + + 版本生效日期。 + + + + + 版本失效日期。 + + + + + 模板版本状态。 + + + + + 业务备注。 + + + + + 审核通过后生成的正式员工档案,是入职流程的最终业务数据。 + + + + + 员工编号。 + + + + + 内部人员编号。 + + + + + 员工姓名。 + + + + + 所属入职业务公司 Id。 + + + + + 所属部门名称。 + + + + + 所属入职业务岗位 Id。 + + + + + 性别。 + + + + + 手机号码。 + + + + + 身份证号码。 + + + + + 毕业院校。 + + + + + 最高学历。 + + + + + 所学专业。 + + + + + 出生日期。 + + + + + 户籍所在地。 + + + + + 民族。 + + + + + 现居住或联系地址。 + + + + + 入职日期。 + + + + + 合同开始日期。 + + + + + 合同结束日期。 + + + + + 试用期开始日期。 + + + + + 试用期结束日期。 + + + + + 转正日期。 + + + + + 社保缴纳公司。 + + + + + 合同性质。 + + + + + 工资银行卡号。 + + + + + 银行卡开户名。 + + + + + 开户银行名称。 + + + + + 业务备注。 + + + + + 审核通过时冻结的动态字段信息 JSON。 + + + + + 动态入职字段定义,用于扩展固定人员基础信息之外的填写项。 + + + + + 动态字段业务编码。 + + + + + 动态字段显示名称。 + + + + + 变量数据类型。 + + + + + 选择型字段或变量的可选项 JSON。 + + + + + 字段校验规则。 + + + + + 员工端输入提示。 + + + + + 动态字段填写要求,配置公司或岗位需要展示及校验的字段。 + + + + + 所属入职业务公司 Id。 + + + + + 所属岗位 Id;为空时表示适用于公司下全部岗位。 + + + + + 动态字段定义 Id。 + + + + + 候选人是否必须填写该动态字段。 + + + + + 显示排序码。 + + + + + 入职材料要求,配置公司或岗位需要候选人上传的材料。 + + + + + 所属入职业务公司 Id。 + + + + + 所属岗位 Id;为空时表示适用于公司下全部岗位。 + + + + + 材料类型 Id。 + + + + + 候选人是否必须上传该类材料。 + + + + + 显示排序码。 + + + + + 入职材料类型,定义允许上传的文件类型、数量和大小。 + + + + + 材料类型业务编码。 + + + + + 材料显示名称。 + + + + + 允许上传的文件扩展名,多个值使用逗号分隔。 + + + + + 单个任务允许上传的最大文件数量。 + + + + + 单个文件最大大小,单位为 MB。 + + + + + 新员工入职任务,承载候选人填写、审核、转正式员工和归档全过程。 + + + + + 入职任务编号。 + + + + + 审核通过后生成的正式员工 Id。 + + + + + 所属入职业务公司 Id。 + + + + + 入职任务所属岗位 Id。 + + + + + 创建任务时指定的审核人用户 Id。 + + + + + 入职任务当前状态。 + + + + + 员工填写链接业务过期时间。 + + + + + 候选人累计提交轮次。 + + + + + 候选人最近一次提交时间。 + + + + + 审核或流程操作发生时间。 + + + + + 任务归档时间。 + + + + + 最近一次审核退回原因。 + + + + + 业务备注。 + + + + + 入职业务岗位档案,保存岗位默认合同期限、试用期及业务参数。 + + + + + 所属入职业务公司 Id。 + + + + + 岗位业务编码。 + + + + + 岗位名称。 + + + + + 默认合同期限,单位为年。 + + + + + 默认试用期,单位为月。 + + + + + 岗位默认合同参数 JSON。 + + + + + 业务备注。 + + + + + 入职任务提交与审核记录,按轮次保留意见及数据快照。 + + + + + 所属入职任务 Id。 + + + + + 审核轮次,与任务提交次数对应。 + + + + + 审核或流程动作。 + + + + + 审核操作人用户 Id;员工提交时可为空。 + + + + + 审核意见或流程说明。 + + + + + 本轮提交或审核时的数据快照 JSON。 + + + + + 审核或流程操作发生时间。 + + + + + 入职任务合同实例,锁定模板版本并记录生成、阅读和签署状态。 + + + + + 所属入职任务 Id。 + + + + + 合同模板主档案 Id。 + + + + + 合同模板版本 Id。 + + + + + 任务创建时冻结的合同名称。 + + + + + 合同类型。 + + + + + 是否为候选人必须阅读确认的合同。 + + + + + 任务合同当前状态。 + + + + + 生成后的 DOCX 文件 Id。 + + + + + 归档或打印使用的 PDF 文件 Id。 + + + + + 合同文件生成时间。 + + + + + 候选人首次阅读时间。 + + + + + 候选人确认阅读时间。 + + + + + 线下签署完成时间。 + + + + + 合同打印时间。 + + + + + 任务合同变量最终值快照,合同生成后不再读取模板实时值。 + + + + + 所属任务合同 Id。 + + + + + DOCX 中使用的变量编码。 + + + + + 变量显示名称。 + + + + + 变量来源类型,例如员工、公司、合同或系统。 + + + + + 变量数据类型。 + + + + + 合同生成时使用的最终变量值。 + + + + + 最终值来源类型。 + + + + + 是否由人事手工覆盖自动值。 + + + + + 候选人在入职任务中提交的固定人员基础信息。 + + + + + 所属入职任务 Id。 + + + + + 员工编号。 + + + + + 内部人员编号。 + + + + + 员工姓名。 + + + + + 所属部门名称。 + + + + + 性别。 + + + + + 手机号码。 + + + + + 身份证号码。 + + + + + 毕业院校。 + + + + + 最高学历。 + + + + + 所学专业。 + + + + + 出生日期。 + + + + + 户籍所在地。 + + + + + 民族。 + + + + + 现居住或联系地址。 + + + + + 入职日期。 + + + + + 合同开始日期。 + + + + + 合同结束日期。 + + + + + 试用期开始日期。 + + + + + 试用期结束日期。 + + + + + 转正日期。 + + + + + 社保缴纳公司。 + + + + + 合同性质。 + + + + + 工资银行卡号。 + + + + + 银行卡开户名。 + + + + + 开户银行名称。 + + + + + 业务备注。 + + + + + 候选人动态字段填写值,保留字段快照及提交轮次。 + + + + + 所属入职任务 Id。 + + + + + 动态字段定义 Id。 + + + + + 动态字段业务编码。 + + + + + 动态字段显示名称。 + + + + + 候选人填写的字段值。 + + + + + 该数据所属的提交轮次。 + + + + + 新员工专属填写链接,仅保存 Token 哈希及链接生命周期信息。 + + + + + 所属入职任务 Id。 + + + + + 访问 Token 的 SHA-256 哈希,不保存明文 Token。 + + + + + 填写链接当前状态。 + + + + + 链接过期时间。 + + + + + 链接最近访问时间。 + + + + + 链接累计访问次数。 + + + + + 链接撤销时间。 + + + + + 候选人上传的入职材料,记录文件、提交轮次及审核状态。 + + + + + 所属入职任务 Id。 + + + + + 材料类型 Id。 + + + + + 材料显示名称。 + + + + + 系统文件 Id。 + + + + + 该数据所属的提交轮次。 + + + + + 材料上传时间。 + + + + + 材料审核状态。 + + + + + 材料审核意见。 + + + + + 入职任务操作日志,用于追踪关键状态变化及操作人。 + + + + + 所属入职任务 Id。 + + + + + 操作人类型,例如员工、人事或系统。 + + + + + 后台操作人用户 Id。 + + + + + 操作类型。 + + + + + 操作说明。 + + + + + 本次变更的数据 JSON。 + + + + + 操作来源 IP 地址。 + + + + + 操作发生时间。 + + + + + 合同模板变量定义,描述 DOCX 占位符、来源类型及填写规则。 + + + + + 合同模板版本 Id。 + + + + + DOCX 中使用的变量编码。 + + + + + 变量显示名称。 + + + + + 变量来源类型,例如员工、公司、合同或系统。 + + + + + 变量数据类型。 + + + + + 变量关联的候选人基础信息字段。 + + + + + 变量默认值。 + + + + + 选择型字段或变量的可选项 JSON。 + + + + + 变量格式化规则。 + + + + + 是否必填、必传或必签。 + + + + + 人事是否可在创建任务后手工填写或调整。 + + + + + 显示排序码。 + + + + + 业务备注。 + + 入职任务状态。 + + + 草稿,任务尚未生成员工填写链接。 + + + + + 待填写,候选人可以通过有效链接编辑资料。 + + + + + 审核中,候选人已提交且资料暂时锁定。 + + + + + 已退回,候选人可根据意见补充后再次提交。 + + + + + 已通过,系统已经生成正式员工档案。 + + + + + 已归档,任务流程结束且历史数据只读。 + + + + + 已过期,任务或链接超过有效期。 + + + + + 已撤销,任务或链接被人事主动终止。 + + 入职链接状态。 + + + 有效,链接可以正常访问。 + + + + + 已过期,任务或链接超过有效期。 + + + + + 已撤销,任务或链接被人事主动终止。 + + + + + 已替换,旧链接已由新链接取代。 + + 合同模板版本状态。 + + + 草稿,任务尚未生成员工填写链接。 + + + + + 已启用,可用于创建新的入职任务。 + + + + + 已停用,不再用于新任务。 + + 入职任务合同状态。 + + + 待生成,任务合同尚未生成文件。 + + + + + 待确认,合同已生成并等待候选人阅读确认。 + + + + + 已确认,候选人已完成阅读确认。 + + + + + 待线下签署,首版暂不接入第三方电子签。 + + + + + 已归档,任务流程结束且历史数据只读。 + + 合同变量类型。 + + + 值来源于候选人或正式员工信息。 + + + + + 值来源于公司档案。 + + + + + 值来源于合同业务参数。 + + + + + 值由系统自动生成。 + + 合同变量最终值来源。 + + + 值来源于候选人或正式员工信息。 + + + + + 值来源于公司档案。 + + + + + 值由人事手工录入。 + + + + + 值由系统自动生成。 + + 入职资料审核状态。 + + + 待审核。 + + + + + 审核通过。 + + + + + 需要补充或重新上传。 + + 入职审核动作。 + + + 候选人提交入职资料。 + + + + + 人事审核通过。 + + + + + 人事退回补充。 + + + + + 人事撤销任务。 + + + + + 人事归档任务。 + + 系统配置 + + + 入职审核、退回、撤销或归档操作参数。 + + + + + 入职任务 Id。 + + + + + 审核意见或流程操作说明。 + + + + + 定义入职审核业务能力。 + + + + + 审核通过入职任务,并在同一事务中创建正式员工档案。 + + + + + 退回入职任务,保存审核意见并允许候选人补充资料。 + + + + + 实现入职审核业务能力。 + + + + + 审核通过入职任务,并在同一事务中创建正式员工档案。 + + + + + 退回入职任务,保存审核意见并允许候选人补充资料。 + + + + + 入职业务公司分页查询参数。 + + + + + 公司名称。 + + + + + 启用状态或状态筛选条件。 + + + + + 新增入职业务公司参数。 + + + + + 公司业务编码。 + + + + + 公司名称。 + + + + + 合同甲方完整法定名称。 + + + + + 编辑入职业务公司参数。 + + + + + 业务数据 Id。 + + + + + 定义入职业务公司业务能力。 + + + + + 分页查询入职业务公司。 + + + + + 查询全部已启用的入职业务公司。 + + + + + 查询公司详情。 + + + + + 新增入职业务公司。 + + + + + 编辑入职业务公司。 + + + + + 删除未被岗位、任务或员工引用的公司。 + + + + + 实现入职业务公司业务能力。 + + + + + 分页查询入职业务公司。 + + + + + 查询全部已启用的入职业务公司。 + + + + + 查询公司详情。 + + + + + 新增入职业务公司。 + + + + + 编辑入职业务公司。 + + + + + 删除未被岗位、任务或员工引用的公司。 + + + + + 生成任务合同文件参数。 + + + + + 任务合同 Id。 + + + + + 定义入职合同文件生成能力。 + + + + + 根据已审核通过的任务合同生成并保存 DOCX 文件。 + + + + + 实现入职合同文件生成业务能力。 + + + + + 根据已锁定的模板版本和变量快照生成任务合同 DOCX 文件。 + + + + + 定义任务合同变量快照业务能力。 + + 根据任务、公司与候选人资料刷新自动变量;人事已手工填写的变量不会被覆盖。 + + 根据任务、公司和候选人资料构建或刷新合同变量快照。 + 冻结任务合同变量;DOCX 生成阶段只读取本快照,不再读取模板实时值。 + + 实现任务合同变量快照业务能力。 + + + + + 根据任务、公司和候选人资料构建或刷新合同变量快照。 + + + + + 合同适用范围分页查询参数。 + + + + + 入职业务公司 Id。 + + + + + 岗位 Id;为空时表示公司级配置。 + + + + + 合同模板 Id。 + + + + + 新增合同适用范围参数。 + + + + + 入职业务公司 Id。 + + + + + 岗位 Id;为空时表示公司级配置。 + + + + + 合同模板 Id。 + + + + + 合同模板版本 Id。 + + + + + 是否必填、必传或必签。 + + + + + 显示排序码。 + + + + + 编辑合同适用范围参数。 + + + + + 业务数据 Id。 + + + + + 合同模板分页查询参数。 + + + + + 合同模板名称。 + + + + + 合同类型。 + + + + + 启用状态或状态筛选条件。 + + + + + 新增合同模板参数。 + + + + + 合同模板业务编码。 + + + + + 合同模板名称。 + + + + + 合同类型。 + + + + + 业务说明。 + + + + + 启用状态或状态筛选条件。 + + + + + 编辑合同模板参数。 + + + + + 业务数据 Id。 + + + + + 合同模板版本分页查询参数。 + + + + + 合同模板 Id。 + + + + + 模板版本状态。 + + + + + 新增合同模板版本参数。 + + + + + 合同模板 Id。 + + + + + 模板版本号。 + + + + + 模板 DOCX 源文件 Id。 + + + + + 源文件内容哈希。 + + + + + 生效日期。 + + + + + 失效日期。 + + + + + 业务备注。 + + + + + 设置合同模板版本状态参数。 + + + + + 业务数据 Id。 + + + + + 模板版本状态。 + + + + + 模板变量分页查询参数。 + + + + + 合同模板版本 Id。 + + + + + 新增模板变量参数。 + + + + + 合同模板版本 Id。 + + + + + 合同变量编码。 + + + + + 合同变量名称。 + + + + + 合同变量来源类型。 + + + + + 字段或变量数据类型。 + + + + + 关联的候选人基础信息字段。 + + + + + 默认值。 + + + + + 可选项 JSON。 + + + + + 格式化规则。 + + + + + 是否必填、必传或必签。 + + + + + 人事是否可以编辑。 + + + + + 显示排序码。 + + + + + 业务备注。 + + + + + 编辑模板变量参数。 + + + + + 业务数据 Id。 + + + + + 定义合同模板、版本、变量和适用范围业务能力。 + + + + + 分页查询合同模板主档案。 + + + + + 查询合同模板详情。 + + + + + 新增合同模板主档案。 + + + + + 编辑合同模板主档案。 + + + + + 删除未被版本、适用范围或任务合同引用的模板。 + + + + + 分页查询指定合同模板的版本。 + + + + + 新增合同模板 DOCX 版本。 + + + + + 启用或停用合同模板版本。 + + + + + 分页查询指定模板版本的变量定义。 + + + + + 为草稿模板版本新增变量。 + + + + + 编辑草稿模板版本中的变量。 + + + + + 删除草稿模板版本中的变量。 + + + + + 新增公司或岗位的合同适用范围。 + + + + + 编辑合同适用范围。 + + + + + 删除合同适用范围。 + 合同模板主档案;具体 DOCX 文件、变量与适用范围均挂在此档案下。 + + + 分页查询合同模板主档案。 + + + + + 查询合同模板详情。 + + + + + 新增合同模板主档案。 + + + + + 编辑合同模板主档案。 + + + + + 删除未被版本、适用范围或任务合同引用的模板。 + + + + + 分页查询指定合同模板的版本。 + + + + + 新增合同模板 DOCX 版本。 + + + + + 启用或停用合同模板版本。 + + + + + 分页查询指定模板版本的变量定义。 + + + + + 为草稿模板版本新增变量。 + + + + + 编辑草稿模板版本中的变量。 + + + + + 删除草稿模板版本中的变量。 + + + + + 分页查询合同适用范围。 + + + + + 新增公司或岗位的合同适用范围。 + + + + + 编辑合同适用范围。 + + + + + 删除合同适用范围。 + + + + + 正式员工档案分页查询参数。 + + + + + 员工姓名。 + + + + + 手机号码。 + + + + + 入职业务公司 Id。 + + + + + 岗位 Id;为空时表示公司级配置。 + + + + + 正式员工档案详情输出。 + + + + + 正式员工档案。 + + + + + 入职任务主数据。 + + + + + 任务合同列表。 + + + + + 提交与审核记录列表。 + + + + + 定义正式员工档案查询业务能力。 + + + + + 分页查询审核通过后生成的正式员工档案。 + + + + + 查询正式员工及其来源任务、合同和审核记录。 + + 仅展示审核通过后创建的正式员工档案;入职资料的来源任务可追溯。 + + 实现正式员工档案查询业务能力。 + + + + + 分页查询审核通过后生成的正式员工档案。 + + + + + 查询正式员工及其来源任务、合同和审核记录。 + + + + + 保存动态入职字段参数。 + + + + + 业务数据 Id。 + + + + + 动态字段编码。 + + + + + 动态字段名称。 + + + + + 字段或变量数据类型。 + + + + + 可选项 JSON。 + + + + + 字段校验规则。 + + + + + 员工端输入提示。 + + + + + 启用状态或状态筛选条件。 + + + + + 保存入职材料类型参数。 + + + + + 业务数据 Id。 + + + + + 材料类型编码。 + + + + + 材料名称。 + + + + + 允许上传的文件扩展名。 + + + + + 允许上传的最大文件数量。 + + + + + 单个文件最大大小,单位为 MB。 + + + + + 启用状态或状态筛选条件。 + + + + + 保存公司岗位动态字段要求参数。 + + + + + 业务数据 Id。 + + + + + 入职业务公司 Id。 + + + + + 岗位 Id;为空时表示公司级配置。 + + + + + 动态字段 Id。 + + + + + 是否必填、必传或必签。 + + + + + 显示排序码。 + + + + + 保存公司岗位材料要求参数。 + + + + + 业务数据 Id。 + + + + + 入职业务公司 Id。 + + + + + 岗位 Id;为空时表示公司级配置。 + + + + + 材料类型 Id。 + + + + + 是否必填、必传或必签。 + + + + + 显示排序码。 + + + + + 定义动态字段、材料类型及公司岗位要求配置业务能力。 + + + + + 查询全部动态入职字段。 + + + + + 新增或编辑动态入职字段。 + + + + + 删除未被填写要求引用的动态字段。 + + + + + 查询全部入职材料类型。 + + + + + 新增或编辑入职材料类型。 + + + + + 删除未被要求或上传记录引用的材料类型。 + + + + + 查询指定公司的动态字段填写要求。 + + + + + 新增或编辑公司岗位动态字段要求。 + + + + + 删除动态字段填写要求。 + + + + + 查询指定公司的材料上传要求。 + + + + + 新增或编辑公司岗位材料要求。 + + + + + 删除材料上传要求。 + 维护员工端动态字段、材料类型及公司岗位要求。 + + + 查询全部动态入职字段。 + + + + + 新增或编辑动态入职字段。 + + + + + 删除未被填写要求引用的动态字段。 + + + + + 查询全部入职材料类型。 + + + + + 新增或编辑入职材料类型。 + + + + + 删除未被要求或上传记录引用的材料类型。 + + + + + 查询指定公司的动态字段填写要求。 + + + + + 新增或编辑公司岗位动态字段要求。 + + + + + 删除动态字段填写要求。 + + + + + 查询指定公司的材料上传要求。 + + + + + 新增或编辑公司岗位材料要求。 + + + + + 删除材料上传要求。 + + + + + 定义入职任务撤销和归档能力。 + + + + + 归档已经审核通过的入职任务。 + + + + + 撤销尚未归档的入职任务并使员工链接失效。 + + + + + 实现入职任务生命周期业务能力。 + + + + + 归档已审核通过的入职任务。 + + + + + 撤销入职任务并同步撤销仍然有效的员工填写链接。 + + + + + 审核候选人上传材料参数。 + + + + + 任务材料记录 Id。 + + + + + 材料审核状态。 + + + + + 材料审核意见。 + + + + + 定义候选人上传材料的审核能力。 + + + + + 审核单份候选人上传材料。 + + + + + 实现候选人上传材料审核业务能力。 + + + + + 审核单份候选人上传材料并记录审核意见。 + + + + + 入职业务岗位分页查询参数。 + + + + + 入职业务公司 Id。 + + + + + 岗位名称。 + + + + + 启用状态或状态筛选条件。 + + + + + 新增入职业务岗位参数。 + + + + + 岗位业务编码。 + + + + + 岗位名称。 + + + + + 编辑入职业务岗位参数。 + + + + + 业务数据 Id。 + + + + + 定义入职业务岗位业务能力。 + + + + + 分页查询入职业务岗位。 + + + + + 查询指定公司下全部已启用岗位。 + + + + + 查询岗位详情。 + + + + + 新增入职业务岗位。 + + + + + 编辑入职业务岗位。 + + + + + 删除未被任务或正式员工引用的岗位。 + + + + + 实现入职业务岗位业务能力。 + + + + + 分页查询入职业务岗位。 + + + + + 查询指定公司下全部已启用岗位。 + + + + + 查询岗位详情。 + + + + + 新增入职业务岗位。 + + + + + 编辑入职业务岗位。 + + + + + 删除未被任务或正式员工引用的岗位。 + + + + + 员工端材料上传前校验参数。 + + + + + 员工填写链接中的明文 Token。 + + + + + 材料类型 Id。 + + + + + 待上传文件名称。 + + + + + 待上传文件大小,单位为字节。 + + + + + 单个动态字段填写值。 + + + + + 动态字段 Id。 + + + + + 动态字段填写值。 + + + + + 批量保存员工动态字段参数。 + + + + + 员工填写链接中的明文 Token。 + + + + + 待保存的字段或变量值集合。 + + + + + 保存员工已上传材料参数。 + + + + + 员工填写链接中的明文 Token。 + + + + + 材料类型 Id。 + + + + + 系统文件 Id。 + + + + + 员工确认阅读合同参数。 + + + + + 员工填写链接中的明文 Token。 + + + + + 任务合同 Id。 + + + + + 员工提交入职资料参数。 + + + + + 员工填写链接中的明文 Token。 + + + + + 定义员工端入职资料提交业务能力。 + + + + + 保存候选人填写的动态字段值。 + + + + + 关联候选人已经上传的系统文件与材料类型。 + + + + + 记录候选人已阅读并确认指定任务合同。 + + + + + 校验全部必填资料后提交入职任务进入审核。 + + + + + 在保存文件前校验材料适用范围、扩展名、大小和数量。 + + + + + 实现员工端入职资料提交业务能力。 + + + + + 保存候选人填写的动态字段值。 + + + + + 关联候选人已经上传的系统文件与材料类型。 + + + + + 记录候选人已阅读并确认指定任务合同。 + + + + + 校验全部必填资料后提交入职任务进入审核。 + + + + + 在保存文件前校验材料适用范围、扩展名、大小和数量。 + + + + + 定义员工端入职任务访问业务能力。 + + + + + 通过有效 Token 获取员工端任务、字段、材料和合同信息。 + + + + + 保存候选人固定基础信息并刷新合同变量快照。 + + + + + 校验任务归属后返回合同模板源文件 Id。 + + 员工手机端入口;仅凭一次性任务链接访问,绝不创建正式员工。 + + + 通过有效 Token 获取员工端任务、字段、材料和合同信息。 + + + + + 保存候选人固定基础信息并刷新合同变量快照。 + + + + + 校验任务归属后返回合同模板源文件 Id。 + + + + + 查询任务合同变量参数。 + + + + + 入职任务 Id。 + + + + + 批量保存任务合同变量参数。 + + + + + 任务合同 Id。 + + + + + 待保存的字段或变量值集合。 + + + + + 单个任务合同变量保存值。 + + + + + 业务数据 Id。 + + + + + 任务合同变量最终值。 + + + + + 单份任务合同及其变量输出。 + + + + + 任务合同 Id。 + + + + + 任务合同名称。 + + + + + 合同类型。 + + + + + 任务合同变量列表。 + + + + + 单个任务合同变量输出。 + + + + + 业务数据 Id。 + + + + + 合同变量编码。 + + + + + 合同变量名称。 + + + + + 合同变量来源类型。 + + + + + 字段或变量数据类型。 + + + + + 任务合同变量最终值。 + + + + + 是否必填、必传或必签。 + + + + + 人事是否可以编辑。 + + + + + 当前用户是否可以编辑该变量。 + + + + + 定义任务合同变量维护业务能力。 + + + + + 查询任务下全部合同及其变量当前值。 + + + + + 保存允许人事编辑的任务合同变量值。 + + 管理端在链接发送前填写合同薪资、补贴等人事变量。 + + + 查询任务下全部合同及其变量当前值。 + + + + + 保存允许人事编辑的任务合同变量值。 + + + + + 入职任务分页查询参数。 + + + + + 入职任务编号。 + + + + + 入职任务状态筛选条件。 + + + + + 入职业务公司 Id。 + + + + + 后台入职任务详情输出。 + + + + + 入职任务主数据。 + + + + + 候选人固定基础信息。 + + + + + 任务合同列表。 + + + + + 候选人已上传材料列表。 + + + + + 候选人动态字段值列表。 + + + + + 任务当前有效链接信息。 + + + + + 提交与审核记录列表。 + + + + + 定义入职任务查询业务能力。 + + + + + 分页查询后台入职任务。 + + + + + 查询任务基础信息、人员资料、合同、材料、表单值、链接和审核记录。 + + + + + 实现入职任务查询业务能力。 + + + + + 分页查询后台入职任务。 + + + + + 查询任务基础信息、人员资料、合同、材料、表单值、链接和审核记录。 + + + + + 创建新员工入职任务参数。 + + + + + 入职业务公司 Id。 + + + + + 入职任务所属岗位 Id。 + + + + + 创建任务时指定的审核人用户 Id。 + + + + + 链接过期时间;实际有效期由系统配置计算。 + + + + + 业务备注。 + + + + + 入职任务创建结果。 + + + + + 入职任务 Id。 + + + + + 入职任务编号。 + + + + + 新生成的员工填写链接 Token,仅在创建结果中返回。 + + + + + 员工填写链接过期时间。 + + + + + 员工端通过 Token 访问任务参数。 + + + + + 员工填写链接中的明文 Token。 + + + + + 员工端获取合同源文件参数。 + + + + + 员工填写链接中的明文 Token。 + + + + + 任务合同 Id。 + + + + + 员工端保存固定基础信息参数。 + + + + + 员工填写链接中的明文 Token。 + + + + + 员工姓名。 + + + + + 手机号码。 + + + + + 身份证号码。 + + + + + 员工端动态字段展示信息。 + + + + + 动态字段 Id。 + + + + + 动态字段编码。 + + + + + 动态字段名称。 + + + + + 字段或变量数据类型。 + + + + + 可选项 JSON。 + + + + + 是否必填、必传或必签。 + + + + + 员工端材料上传要求。 + + + + + 材料类型 Id。 + + + + + 材料名称。 + + + + + 允许上传的文件扩展名。 + + + + + 允许上传的最大文件数量。 + + + + + 是否必填、必传或必签。 + + + + + 员工端入职任务完整详情。 + + + + + 入职任务主数据。 + + + + + 候选人固定基础信息。 + + + + + 任务合同列表。 + + + + + 候选人已保存的动态字段值。 + + + + + 员工端需要展示的动态字段。 + + + + + 员工端需要展示的材料要求。 + + + + + 候选人已上传材料列表。 + + + + + 定义入职任务创建业务能力。 + + + + + 校验公司、岗位和合同范围后创建入职任务、链接及任务合同。 + + + + + 实现入职任务创建业务能力。 + + + + + 校验公司、岗位和合同范围后创建入职任务、链接及任务合同。 + + 机构服务 diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingAuditController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingAuditController.cs index 773269c..004ba88 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingAuditController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingAuditController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供入职审核相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职审核")] [Route("biz/onboarding/audit")] [RolePermission] @@ -12,15 +15,21 @@ public class OnboardingAuditController _service = service; } + /// + /// 审核通过任务并创建正式员工档案。 + /// [HttpPost("approve")] public async Task Approve([FromBody] OnboardingAuditActionInput input) { await _service.Approve(input); } + /// + /// 退回任务并要求候选人补充资料。 + /// [HttpPost("reject")] public async Task Reject([FromBody] OnboardingAuditActionInput input) { await _service.Reject(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingCompanyController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingCompanyController.cs index 56e707c..da2b7da 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingCompanyController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingCompanyController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供入职业务公司相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职公司管理")] [Route("biz/onboarding/company")] [RolePermission] @@ -12,39 +15,57 @@ public class OnboardingCompanyController _service = service; } + /// + /// 分页查询入职业务公司。 + /// [HttpGet("page")] public async Task Page([FromQuery] OnboardingCompanyPageInput input) { return await _service.Page(input); } + /// + /// 查询已启用公司列表。 + /// [HttpGet("list-enabled")] public async Task ListEnabled() { return await _service.ListEnabled(); } + /// + /// 查询公司详情。 + /// [HttpGet("detail")] public async Task Detail([FromQuery] BaseIdInput input) { return await _service.Detail(input); } + /// + /// 新增入职业务公司。 + /// [HttpPost("add")] public async Task Add([FromBody] OnboardingCompanyAddInput input) { await _service.Add(input); } + /// + /// 编辑入职业务公司。 + /// [HttpPost("edit")] public async Task Edit([FromBody] OnboardingCompanyEditInput input) { await _service.Edit(input); } + /// + /// 删除入职业务公司。 + /// [HttpPost("delete")] public async Task Delete([FromBody] BaseIdListInput input) { await _service.Delete(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingContractDocumentController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingContractDocumentController.cs index 0ddbcea..d17dbc0 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingContractDocumentController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingContractDocumentController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供入职合同文件生成相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职合同文件")] [Route("biz/onboarding/contract-document")] [RolePermission] @@ -22,4 +25,4 @@ public class OnboardingContractDocumentController { return await _service.Generate(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingContractTemplateController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingContractTemplateController.cs index 922c843..640b06b 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingContractTemplateController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingContractTemplateController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供合同模板、版本、变量和适用范围相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职合同模板")] [Route("biz/onboarding/contract-template")] [RolePermission] @@ -12,99 +15,147 @@ public class OnboardingContractTemplateController _service = service; } + /// + /// 分页查询合同模板。 + /// [HttpGet("page")] public async Task Page([FromQuery] OnboardingContractTemplatePageInput input) { return await _service.Page(input); } + /// + /// 查询合同模板详情。 + /// [HttpGet("detail")] public async Task Detail([FromQuery] BaseIdInput input) { return await _service.Detail(input); } + /// + /// 新增合同模板。 + /// [HttpPost("add")] public async Task Add([FromBody] OnboardingContractTemplateAddInput input) { await _service.Add(input); } + /// + /// 编辑合同模板。 + /// [HttpPost("edit")] public async Task Edit([FromBody] OnboardingContractTemplateEditInput input) { await _service.Edit(input); } + /// + /// 删除合同模板。 + /// [HttpPost("delete")] public async Task Delete([FromBody] BaseIdListInput input) { await _service.Delete(input); } + /// + /// 分页查询合同模板版本。 + /// [HttpGet("version/page")] public async Task VersionPage([FromQuery] OnboardingContractVersionPageInput input) { return await _service.VersionPage(input); } + /// + /// 新增合同模板版本。 + /// [HttpPost("version/add")] public async Task AddVersion([FromBody] OnboardingContractVersionAddInput input) { await _service.AddVersion(input); } + /// + /// 设置合同模板版本状态。 + /// [HttpPost("version/set-status")] public async Task SetVersionStatus([FromBody] OnboardingContractVersionStatusInput input) { await _service.SetVersionStatus(input); } + /// + /// 分页查询模板变量。 + /// [HttpGet("variable/page")] public async Task VariablePage([FromQuery] OnboardingTemplateVariablePageInput input) { return await _service.VariablePage(input); } + /// + /// 新增模板变量。 + /// [HttpPost("variable/add")] public async Task AddVariable([FromBody] OnboardingTemplateVariableAddInput input) { await _service.AddVariable(input); } + /// + /// 编辑模板变量。 + /// [HttpPost("variable/edit")] public async Task EditVariable([FromBody] OnboardingTemplateVariableEditInput input) { await _service.EditVariable(input); } + /// + /// 删除模板变量。 + /// [HttpPost("variable/delete")] public async Task DeleteVariable([FromBody] BaseIdListInput input) { await _service.DeleteVariable(input); } + /// + /// 分页查询合同适用范围。 + /// [HttpGet("scope/page")] public async Task ScopePage([FromQuery] OnboardingContractScopePageInput input) { return await _service.ScopePage(input); } + /// + /// 新增合同适用范围。 + /// [HttpPost("scope/add")] public async Task AddScope([FromBody] OnboardingContractScopeAddInput input) { await _service.AddScope(input); } + /// + /// 编辑合同适用范围。 + /// [HttpPost("scope/edit")] public async Task EditScope([FromBody] OnboardingContractScopeEditInput input) { await _service.EditScope(input); } + /// + /// 删除合同适用范围。 + /// [HttpPost("scope/delete")] public async Task DeleteScope([FromBody] BaseIdListInput input) { await _service.DeleteScope(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingEmployeeController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingEmployeeController.cs index d4cca36..4261250 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingEmployeeController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingEmployeeController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供正式员工档案相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职正式员工档案")] [Route("biz/onboarding/employee")] [RolePermission] @@ -12,15 +15,21 @@ public class OnboardingEmployeeController _service = service; } + /// + /// 分页查询正式员工档案。 + /// [HttpGet("page")] public async Task Page([FromQuery] OnboardingEmployeePageInput input) { return await _service.Page(input); } + /// + /// 查询正式员工详情及来源记录。 + /// [HttpGet("detail")] public async Task Detail([FromQuery] BaseIdInput input) { return await _service.Detail(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingEntryConfigController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingEntryConfigController.cs index 7a86bdc..2a71aee 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingEntryConfigController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingEntryConfigController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供入职字段与材料要求配置相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职填写与材料配置")] [Route("biz/onboarding/entry-config")] [RolePermission] @@ -12,75 +15,111 @@ public class OnboardingEntryConfigController _service = service; } + /// + /// 查询动态入职字段。 + /// [HttpGet("form-field/list")] public async Task ListFormFields() { return await _service.ListFormFields(); } + /// + /// 保存动态入职字段。 + /// [HttpPost("form-field/save")] public async Task SaveFormField([FromBody] OnboardingFormFieldSaveInput input) { await _service.SaveFormField(input); } + /// + /// 删除动态入职字段。 + /// [HttpPost("form-field/delete")] public async Task DeleteFormFields([FromBody] BaseIdListInput input) { await _service.DeleteFormFields(input); } + /// + /// 查询入职材料类型。 + /// [HttpGet("material-type/list")] public async Task ListMaterialTypes() { return await _service.ListMaterialTypes(); } + /// + /// 保存入职材料类型。 + /// [HttpPost("material-type/save")] public async Task SaveMaterialType([FromBody] OnboardingMaterialTypeSaveInput input) { await _service.SaveMaterialType(input); } + /// + /// 删除入职材料类型。 + /// [HttpPost("material-type/delete")] public async Task DeleteMaterialTypes([FromBody] BaseIdListInput input) { await _service.DeleteMaterialTypes(input); } + /// + /// 查询公司岗位动态字段要求。 + /// [HttpGet("form-requirement/list")] public async Task ListFormRequirements([FromQuery] long companyId) { return await _service.ListFormRequirements(companyId); } + /// + /// 保存公司岗位动态字段要求。 + /// [HttpPost("form-requirement/save")] public async Task SaveFormRequirement([FromBody] OnboardingFormRequirementSaveInput input) { await _service.SaveFormRequirement(input); } + /// + /// 删除动态字段要求。 + /// [HttpPost("form-requirement/delete")] public async Task DeleteFormRequirements([FromBody] BaseIdListInput input) { await _service.DeleteFormRequirements(input); } + /// + /// 查询公司岗位材料要求。 + /// [HttpGet("material-requirement/list")] public async Task ListMaterialRequirements([FromQuery] long companyId) { return await _service.ListMaterialRequirements(companyId); } + /// + /// 保存公司岗位材料要求。 + /// [HttpPost("material-requirement/save")] public async Task SaveMaterialRequirement([FromBody] OnboardingMaterialRequirementSaveInput input) { await _service.SaveMaterialRequirement(input); } + /// + /// 删除材料要求。 + /// [HttpPost("material-requirement/delete")] public async Task DeleteMaterialRequirements([FromBody] BaseIdListInput input) { await _service.DeleteMaterialRequirements(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingMaterialReviewController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingMaterialReviewController.cs index 1753c30..4229e97 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingMaterialReviewController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingMaterialReviewController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供候选人材料审核相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职资料审核")] [Route("biz/onboarding/material")] [RolePermission] @@ -12,9 +15,12 @@ public class OnboardingMaterialReviewController _service = service; } + /// + /// 审核候选人上传的材料。 + /// [HttpPost("review")] public async Task Review([FromBody] OnboardingMaterialReviewInput input) { await _service.Review(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPositionController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPositionController.cs index 0d49894..b56bf75 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPositionController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPositionController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供入职业务岗位相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职岗位管理")] [Route("biz/onboarding/position")] [RolePermission] @@ -12,39 +15,57 @@ public class OnboardingPositionController _service = service; } + /// + /// 分页查询入职业务岗位。 + /// [HttpGet("page")] public async Task Page([FromQuery] OnboardingPositionPageInput input) { return await _service.Page(input); } + /// + /// 查询指定公司的已启用岗位。 + /// [HttpGet("list-enabled")] public async Task ListEnabled([FromQuery] long companyId) { return await _service.ListEnabled(companyId); } + /// + /// 查询岗位详情。 + /// [HttpGet("detail")] public async Task Detail([FromQuery] BaseIdInput input) { return await _service.Detail(input); } + /// + /// 新增入职业务岗位。 + /// [HttpPost("add")] public async Task Add([FromBody] OnboardingPositionAddInput input) { await _service.Add(input); } + /// + /// 编辑入职业务岗位。 + /// [HttpPost("edit")] public async Task Edit([FromBody] OnboardingPositionEditInput input) { await _service.Edit(input); } + /// + /// 删除入职业务岗位。 + /// [HttpPost("delete")] public async Task Delete([FromBody] BaseIdListInput input) { await _service.Delete(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPublicSubmissionController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPublicSubmissionController.cs index dd05155..7b8db3d 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPublicSubmissionController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPublicSubmissionController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供员工端资料提交相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "员工入职提交")] [Route("open/onboarding")] [AllowAnonymous] @@ -14,30 +17,45 @@ public class OnboardingPublicSubmissionController _fileService = fileService; } + /// + /// 保存员工动态字段。 + /// [HttpPost("save-dynamic-values")] public async Task SaveDynamicValues([FromBody] OnboardingSaveDynamicValuesInput input) { await _service.SaveDynamicValues(input); } + /// + /// 保存员工已上传材料记录。 + /// [HttpPost("save-material")] public async Task SaveMaterial([FromBody] OnboardingSaveMaterialInput input) { await _service.SaveMaterial(input); } + /// + /// 确认已阅读指定合同。 + /// [HttpPost("confirm-contract")] public async Task ConfirmContract([FromBody] OnboardingConfirmContractInput input) { await _service.ConfirmContract(input); } + /// + /// 提交入职资料进入审核。 + /// [HttpPost("submit")] public async Task Submit([FromBody] OnboardingSubmitInput input) { await _service.Submit(input); } + /// + /// 校验并上传员工入职材料。 + /// [HttpPost("upload-material")] [Consumes("multipart/form-data")] [RequestSizeLimit(20 * 1024 * 1024)] @@ -64,4 +82,4 @@ public class OnboardingPublicSubmissionController FileId = fileId }); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPublicTaskController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPublicTaskController.cs index 595656d..0977df3 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPublicTaskController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingPublicTaskController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供员工端入职任务访问相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "员工入职填写")] [Route("open/onboarding")] [AllowAnonymous] @@ -14,22 +17,31 @@ public class OnboardingPublicTaskController _fileService = fileService; } + /// + /// 通过 Token 获取员工端入职任务详情。 + /// [HttpPost("detail")] public async Task Detail([FromBody] OnboardingTaskPublicAccessInput input) { return await _service.Detail(input); } + /// + /// 保存候选人固定基础信息。 + /// [HttpPost("save-employee-info")] public async Task SaveEmployeeInfo([FromBody] OnboardingTaskPublicSaveInput input) { await _service.SaveEmployeeInfo(input); } + /// + /// 下载当前任务锁定的合同模板源文件。 + /// [HttpGet("contract-source")] public async Task ContractSource([FromQuery] OnboardingPublicContractSourceInput input) { var fileId = await _service.GetContractSourceFileId(input); return await _fileService.Download(new BaseIdInput { Id = fileId }); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskContractVariableController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskContractVariableController.cs index dadbd79..bb82761 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskContractVariableController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskContractVariableController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供任务合同变量维护相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职任务合同参数")] [Route("biz/onboarding/task-contract-variable")] [RolePermission] @@ -12,15 +15,21 @@ public class OnboardingTaskContractVariableController _service = service; } + /// + /// 查询任务合同变量。 + /// [HttpGet("list")] public async Task List([FromQuery] OnboardingTaskContractVariableQueryInput input) { return await _service.List(input); } + /// + /// 保存任务合同变量。 + /// [HttpPost("save")] public async Task Save([FromBody] OnboardingTaskContractVariableSaveInput input) { await _service.Save(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskController.cs index 7a1d049..bef82fa 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供入职任务创建相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职任务")] [Route("biz/onboarding/task")] [RolePermission] @@ -12,9 +15,12 @@ public class OnboardingTaskController _service = service; } + /// + /// 创建入职任务并返回员工填写链接。 + /// [HttpPost("create")] public async Task Create([FromBody] OnboardingTaskCreateInput input) { return await _service.Create(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskLifecycleController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskLifecycleController.cs index 9c32aab..462843a 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskLifecycleController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskLifecycleController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供入职任务生命周期相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职任务归档")] [Route("biz/onboarding/task")] [RolePermission] @@ -12,15 +15,21 @@ public class OnboardingTaskLifecycleController _service = service; } + /// + /// 归档审核通过的入职任务。 + /// [HttpPost("archive")] public async Task Archive([FromBody] OnboardingAuditActionInput input) { await _service.Archive(input); } + /// + /// 撤销入职任务及员工填写链接。 + /// [HttpPost("revoke")] public async Task Revoke([FromBody] OnboardingAuditActionInput input) { await _service.Revoke(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskQueryController.cs b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskQueryController.cs index e0b6eeb..b8a90fb 100644 --- a/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskQueryController.cs +++ b/SimpleAdmin.Web.Core/Controllers/Application/Onboarding/OnboardingTaskQueryController.cs @@ -1,5 +1,8 @@ namespace SimpleAdmin.Web.Core; +/// +/// 提供入职任务查询相关 HTTP 接口。 +/// [ApiDescriptionSettings("Application", Tag = "入职任务查询")] [Route("biz/onboarding/task")] [RolePermission] @@ -12,15 +15,21 @@ public class OnboardingTaskQueryController _service = service; } + /// + /// 分页查询入职任务。 + /// [HttpGet("page")] public async Task Page([FromQuery] OnboardingTaskPageInput input) { return await _service.Page(input); } + /// + /// 查询入职任务完整详情。 + /// [HttpGet("detail")] public async Task Detail([FromQuery] BaseIdInput input) { return await _service.Detail(input); } -} \ No newline at end of file +} diff --git a/SimpleAdmin.Web.Core/SimpleAdmin.Web.Core.xml b/SimpleAdmin.Web.Core/SimpleAdmin.Web.Core.xml index df8e209..5d9d422 100644 --- a/SimpleAdmin.Web.Core/SimpleAdmin.Web.Core.xml +++ b/SimpleAdmin.Web.Core/SimpleAdmin.Web.Core.xml @@ -26,11 +26,381 @@ 模拟 Configure + + + 提供入职审核相关 HTTP 接口。 + + + + + 审核通过任务并创建正式员工档案。 + + + + + 退回任务并要求候选人补充资料。 + + + + + 提供入职业务公司相关 HTTP 接口。 + + + + + 分页查询入职业务公司。 + + + + + 查询已启用公司列表。 + + + + + 查询公司详情。 + + + + + 新增入职业务公司。 + + + + + 编辑入职业务公司。 + + + + + 删除入职业务公司。 + + + + + 提供入职合同文件生成相关 HTTP 接口。 + + 生成入职合同文件 + + + 提供合同模板、版本、变量和适用范围相关 HTTP 接口。 + + + + + 分页查询合同模板。 + + + + + 查询合同模板详情。 + + + + + 新增合同模板。 + + + + + 编辑合同模板。 + + + + + 删除合同模板。 + + + + + 分页查询合同模板版本。 + + + + + 新增合同模板版本。 + + + + + 设置合同模板版本状态。 + + + + + 分页查询模板变量。 + + + + + 新增模板变量。 + + + + + 编辑模板变量。 + + + + + 删除模板变量。 + + + + + 分页查询合同适用范围。 + + + + + 新增合同适用范围。 + + + + + 编辑合同适用范围。 + + + + + 删除合同适用范围。 + + + + + 提供正式员工档案相关 HTTP 接口。 + + + + + 分页查询正式员工档案。 + + + + + 查询正式员工详情及来源记录。 + + + + + 提供入职字段与材料要求配置相关 HTTP 接口。 + + + + + 查询动态入职字段。 + + + + + 保存动态入职字段。 + + + + + 删除动态入职字段。 + + + + + 查询入职材料类型。 + + + + + 保存入职材料类型。 + + + + + 删除入职材料类型。 + + + + + 查询公司岗位动态字段要求。 + + + + + 保存公司岗位动态字段要求。 + + + + + 删除动态字段要求。 + + + + + 查询公司岗位材料要求。 + + + + + 保存公司岗位材料要求。 + + + + + 删除材料要求。 + + + + + 提供候选人材料审核相关 HTTP 接口。 + + + + + 审核候选人上传的材料。 + + + + + 提供入职业务岗位相关 HTTP 接口。 + + + + + 分页查询入职业务岗位。 + + + + + 查询指定公司的已启用岗位。 + + + + + 查询岗位详情。 + + + + + 新增入职业务岗位。 + + + + + 编辑入职业务岗位。 + + + + + 删除入职业务岗位。 + + + + + 提供员工端资料提交相关 HTTP 接口。 + + + + + 保存员工动态字段。 + + + + + 保存员工已上传材料记录。 + + + + + 确认已阅读指定合同。 + + + + + 提交入职资料进入审核。 + + + + + 校验并上传员工入职材料。 + + + + + 提供员工端入职任务访问相关 HTTP 接口。 + + + + + 通过 Token 获取员工端入职任务详情。 + + + + + 保存候选人固定基础信息。 + + + + + 下载当前任务锁定的合同模板源文件。 + + + + + 提供任务合同变量维护相关 HTTP 接口。 + + + + + 查询任务合同变量。 + + + + + 保存任务合同变量。 + + + + + 提供入职任务创建相关 HTTP 接口。 + + + + + 创建入职任务并返回员工填写链接。 + + + + + 提供入职任务生命周期相关 HTTP 接口。 + + + + + 归档审核通过的入职任务。 + + + + + 撤销入职任务及员工填写链接。 + + + + + 提供入职任务查询相关 HTTP 接口。 + + + + + 分页查询入职任务。 + + + + + 查询入职任务完整详情。 + + 机构管理控制器