连级别
This commit is contained in:
parent
de9592be03
commit
27992efca2
|
|
@ -513,7 +513,7 @@ public class PersonnelController : BaseApiController
|
||||||
/// 审批人员
|
/// 审批人员
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost("{id}/approve")]
|
[HttpPost("{id}/approve")]
|
||||||
[Authorize(Policy = "RegimentLevel")] // 团级及以上权限
|
[Authorize(Policy = "BattalionLevel")] // 营级及以上权限
|
||||||
public async Task<IActionResult> Approve(int id)
|
public async Task<IActionResult> Approve(int id)
|
||||||
{
|
{
|
||||||
var unitId = GetCurrentUnitId();
|
var unitId = GetCurrentUnitId();
|
||||||
|
|
@ -547,7 +547,7 @@ public class PersonnelController : BaseApiController
|
||||||
/// 拒绝人员
|
/// 拒绝人员
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost("{id}/reject")]
|
[HttpPost("{id}/reject")]
|
||||||
[Authorize(Policy = "RegimentLevel")] // 团级及以上权限
|
[Authorize(Policy = "BattalionLevel")] // 营级及以上权限
|
||||||
public async Task<IActionResult> Reject(int id, [FromBody] RejectPersonnelRequest request)
|
public async Task<IActionResult> Reject(int id, [FromBody] RejectPersonnelRequest request)
|
||||||
{
|
{
|
||||||
var userId = GetCurrentUserId();
|
var userId = GetCurrentUserId();
|
||||||
|
|
|
||||||
|
|
@ -672,14 +672,31 @@ public class PersonnelService : IPersonnelService
|
||||||
if (requestByUnit == null)
|
if (requestByUnit == null)
|
||||||
throw new ArgumentException("申报单位不存在");
|
throw new ArgumentException("申报单位不存在");
|
||||||
|
|
||||||
// 验证申报单位必须是当前审批单位
|
|
||||||
if (personnel.ApprovedByUnitId != requestByUnitId)
|
|
||||||
throw new ArgumentException("只有当前审批单位才能发起向上申报");
|
|
||||||
|
|
||||||
// 师级人才不能再向上申报
|
// 师级人才不能再向上申报
|
||||||
if (personnel.ApprovedLevel == PersonnelLevel.Division)
|
if (personnel.ApprovedLevel == PersonnelLevel.Division)
|
||||||
throw new ArgumentException("师级人才不能再向上申报");
|
throw new ArgumentException("师级人才不能再向上申报");
|
||||||
|
|
||||||
|
// 特殊情况:师部可以直接升级团级人才为师级
|
||||||
|
// 此时师部既是申报单位也是审批单位
|
||||||
|
if (requestByUnit.Level == OrganizationalLevel.Division &&
|
||||||
|
personnel.ApprovedLevel == PersonnelLevel.Regiment)
|
||||||
|
{
|
||||||
|
// 师部直接升级团级人才,不需要验证是否是审批单位
|
||||||
|
// 标记为待向上申报(由师部自己审批)
|
||||||
|
personnel.PendingUpgradeByUnitId = requestByUnitId;
|
||||||
|
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
_logger.LogInformation("团级人才 {PersonnelId} 已由师部 {UnitId} 发起直接升级请求",
|
||||||
|
personnelId, requestByUnitId);
|
||||||
|
|
||||||
|
return personnel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证申报单位必须是当前审批单位
|
||||||
|
if (personnel.ApprovedByUnitId != requestByUnitId)
|
||||||
|
throw new ArgumentException("只有当前审批单位才能发起向上申报");
|
||||||
|
|
||||||
// 标记为待向上申报
|
// 标记为待向上申报
|
||||||
personnel.PendingUpgradeByUnitId = requestByUnitId;
|
personnel.PendingUpgradeByUnitId = requestByUnitId;
|
||||||
|
|
||||||
|
|
@ -712,15 +729,36 @@ public class PersonnelService : IPersonnelService
|
||||||
if (approvedByUnit == null)
|
if (approvedByUnit == null)
|
||||||
throw new ArgumentException("审批单位不存在");
|
throw new ArgumentException("审批单位不存在");
|
||||||
|
|
||||||
// 验证审批单位必须是申报单位的上级
|
_logger.LogInformation("ApproveUpgrade: personnelId={PersonnelId}, approvedByUnitId={ApprovedByUnitId}, pendingUpgradeByUnitId={PendingUpgradeByUnitId}, approvedByUnitLevel={Level}, personnelApprovedLevel={PersonnelLevel}",
|
||||||
var isParent = await _organizationService.IsParentUnitAsync(approvedByUnitId, personnel.PendingUpgradeByUnitId.Value);
|
personnelId, approvedByUnitId, personnel.PendingUpgradeByUnitId.Value, approvedByUnit.Level, personnel.ApprovedLevel);
|
||||||
if (!isParent)
|
|
||||||
throw new ArgumentException("审批单位必须是申报单位的上级");
|
|
||||||
|
|
||||||
var previousLevel = personnel.ApprovedLevel;
|
var previousLevel = personnel.ApprovedLevel;
|
||||||
|
PersonnelLevel newLevel;
|
||||||
|
|
||||||
// 人才等级升级为申报单位的等级
|
// 特殊情况:师部直接升级团级人才为师级
|
||||||
var newLevel = (PersonnelLevel)(int)personnel.PendingUpgradeByUnit!.Level;
|
var isDivisionUnit = approvedByUnit.Level == OrganizationalLevel.Division;
|
||||||
|
var isRegimentPersonnel = personnel.ApprovedLevel == PersonnelLevel.Regiment;
|
||||||
|
|
||||||
|
_logger.LogInformation("检查条件: isDivisionUnit={IsDivision}, isRegimentPersonnel={IsRegiment}",
|
||||||
|
isDivisionUnit, isRegimentPersonnel);
|
||||||
|
|
||||||
|
if (isDivisionUnit && isRegimentPersonnel)
|
||||||
|
{
|
||||||
|
// 师部直接升级团级人才为师级
|
||||||
|
newLevel = PersonnelLevel.Division;
|
||||||
|
_logger.LogInformation("师部直接升级团级人才为师级");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 验证审批单位必须是申报单位的上级
|
||||||
|
var isParent = await _organizationService.IsParentUnitAsync(approvedByUnitId, personnel.PendingUpgradeByUnitId.Value);
|
||||||
|
_logger.LogInformation("检查上级关系: isParent={IsParent}", isParent);
|
||||||
|
if (!isParent)
|
||||||
|
throw new ArgumentException("审批单位必须是申报单位的上级");
|
||||||
|
|
||||||
|
// 人才等级升级为申报单位的等级
|
||||||
|
newLevel = (PersonnelLevel)(int)personnel.PendingUpgradeByUnit!.Level;
|
||||||
|
}
|
||||||
|
|
||||||
personnel.ApprovedLevel = newLevel;
|
personnel.ApprovedLevel = newLevel;
|
||||||
personnel.ApprovedByUnitId = approvedByUnitId;
|
personnel.ApprovedByUnitId = approvedByUnitId;
|
||||||
|
|
|
||||||
|
|
@ -283,29 +283,42 @@ function canUpgrade(person: Personnel): boolean {
|
||||||
// 2. 不是师级人才(师级不能再向上)
|
// 2. 不是师级人才(师级不能再向上)
|
||||||
// 3. 没有待处理的向上申报请求
|
// 3. 没有待处理的向上申报请求
|
||||||
// 4. 当前用户是审批单位(可以发起向上申报)
|
// 4. 当前用户是审批单位(可以发起向上申报)
|
||||||
|
// 或者:师部可以直接升级团级人才
|
||||||
if (!authStore.user || !person.approvedLevel || !person.approvedByUnitId) return false
|
if (!authStore.user || !person.approvedLevel || !person.approvedByUnitId) return false
|
||||||
if (person.approvedLevel === PersonnelLevel.Division) return false
|
if (person.approvedLevel === PersonnelLevel.Division) return false
|
||||||
if (person.pendingUpgradeByUnitId) return false // 已有待处理的向上申报
|
if (person.pendingUpgradeByUnitId) return false // 已有待处理的向上申报
|
||||||
|
|
||||||
// 当前用户单位是审批单位,可以发起向上申报
|
// 当前用户单位是审批单位,可以发起向上申报
|
||||||
return person.approvedByUnitId === authStore.user.organizationalUnitId
|
if (person.approvedByUnitId === authStore.user.organizationalUnitId) return true
|
||||||
|
|
||||||
|
// 特殊情况:师部可以直接升级团级人才为师级
|
||||||
|
if (authStore.organizationalLevelNum === 1 && person.approvedLevel === PersonnelLevel.Regiment) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断是否可以审批向上申报请求
|
// 判断是否可以审批向上申报请求
|
||||||
function canApproveUpgrade(person: Personnel): boolean {
|
function canApproveUpgrade(person: Personnel): boolean {
|
||||||
if (!authStore.user || !person.pendingUpgradeByUnitId) return false
|
if (!authStore.user || !person.pendingUpgradeByUnitId) return false
|
||||||
// 用户单位层级必须高于申报单位层级
|
|
||||||
const userLevelNum = authStore.organizationalLevelNum
|
const userLevelNum = authStore.organizationalLevelNum
|
||||||
// 申报单位层级 = 人员等级 + 1(因为审批单位比人员等级高1级)
|
|
||||||
const personnelLevelNum = {
|
const personnelLevelNum = {
|
||||||
'Division': 1,
|
'Division': 1,
|
||||||
'Regiment': 2,
|
'Regiment': 2,
|
||||||
'Battalion': 3,
|
'Battalion': 3,
|
||||||
'Company': 4
|
'Company': 4
|
||||||
}[person.approvedLevel || 'Company'] || 4
|
}[person.approvedLevel || 'Company'] || 4
|
||||||
const upgradeByUnitLevel = personnelLevelNum - 1 // 申报单位层级
|
|
||||||
|
|
||||||
return userLevelNum < upgradeByUnitLevel
|
// 申报单位层级 = 人员等级 - 1(因为审批单位比人员等级高1级)
|
||||||
|
// 例如:营级人才(3)由团级(2)申报,师级(1)审批
|
||||||
|
const upgradeByUnitLevel = personnelLevelNum - 1
|
||||||
|
|
||||||
|
// 用户单位层级必须高于申报单位层级(数值越小层级越高)
|
||||||
|
// 特殊情况:师部(1)可以直接升级团级人才(2)为师级,此时申报单位也是师部(1)
|
||||||
|
// 所以需要 userLevelNum <= upgradeByUnitLevel
|
||||||
|
return userLevelNum <= upgradeByUnitLevel
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断是否可以审批该人员
|
// 判断是否可以审批该人员
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user