连级别
This commit is contained in:
parent
de9592be03
commit
27992efca2
|
|
@ -513,7 +513,7 @@ public class PersonnelController : BaseApiController
|
|||
/// 审批人员
|
||||
/// </summary>
|
||||
[HttpPost("{id}/approve")]
|
||||
[Authorize(Policy = "RegimentLevel")] // 团级及以上权限
|
||||
[Authorize(Policy = "BattalionLevel")] // 营级及以上权限
|
||||
public async Task<IActionResult> Approve(int id)
|
||||
{
|
||||
var unitId = GetCurrentUnitId();
|
||||
|
|
@ -547,7 +547,7 @@ public class PersonnelController : BaseApiController
|
|||
/// 拒绝人员
|
||||
/// </summary>
|
||||
[HttpPost("{id}/reject")]
|
||||
[Authorize(Policy = "RegimentLevel")] // 团级及以上权限
|
||||
[Authorize(Policy = "BattalionLevel")] // 营级及以上权限
|
||||
public async Task<IActionResult> Reject(int id, [FromBody] RejectPersonnelRequest request)
|
||||
{
|
||||
var userId = GetCurrentUserId();
|
||||
|
|
|
|||
|
|
@ -672,13 +672,30 @@ public class PersonnelService : IPersonnelService
|
|||
if (requestByUnit == null)
|
||||
throw new ArgumentException("申报单位不存在");
|
||||
|
||||
// 验证申报单位必须是当前审批单位
|
||||
if (personnel.ApprovedByUnitId != requestByUnitId)
|
||||
throw new ArgumentException("只有当前审批单位才能发起向上申报");
|
||||
|
||||
// 师级人才不能再向上申报
|
||||
if (personnel.ApprovedLevel == PersonnelLevel.Division)
|
||||
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;
|
||||
|
|
@ -711,16 +728,37 @@ public class PersonnelService : IPersonnelService
|
|||
var approvedByUnit = await _context.OrganizationalUnits.FindAsync(approvedByUnitId);
|
||||
if (approvedByUnit == null)
|
||||
throw new ArgumentException("审批单位不存在");
|
||||
|
||||
// 验证审批单位必须是申报单位的上级
|
||||
var isParent = await _organizationService.IsParentUnitAsync(approvedByUnitId, personnel.PendingUpgradeByUnitId.Value);
|
||||
if (!isParent)
|
||||
throw new ArgumentException("审批单位必须是申报单位的上级");
|
||||
|
||||
var previousLevel = personnel.ApprovedLevel;
|
||||
|
||||
// 人才等级升级为申报单位的等级
|
||||
var newLevel = (PersonnelLevel)(int)personnel.PendingUpgradeByUnit!.Level;
|
||||
_logger.LogInformation("ApproveUpgrade: personnelId={PersonnelId}, approvedByUnitId={ApprovedByUnitId}, pendingUpgradeByUnitId={PendingUpgradeByUnitId}, approvedByUnitLevel={Level}, personnelApprovedLevel={PersonnelLevel}",
|
||||
personnelId, approvedByUnitId, personnel.PendingUpgradeByUnitId.Value, approvedByUnit.Level, personnel.ApprovedLevel);
|
||||
|
||||
var previousLevel = personnel.ApprovedLevel;
|
||||
PersonnelLevel newLevel;
|
||||
|
||||
// 特殊情况:师部直接升级团级人才为师级
|
||||
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.ApprovedByUnitId = approvedByUnitId;
|
||||
|
|
|
|||
|
|
@ -283,29 +283,42 @@ function canUpgrade(person: Personnel): boolean {
|
|||
// 2. 不是师级人才(师级不能再向上)
|
||||
// 3. 没有待处理的向上申报请求
|
||||
// 4. 当前用户是审批单位(可以发起向上申报)
|
||||
// 或者:师部可以直接升级团级人才
|
||||
if (!authStore.user || !person.approvedLevel || !person.approvedByUnitId) return false
|
||||
if (person.approvedLevel === PersonnelLevel.Division) 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 {
|
||||
if (!authStore.user || !person.pendingUpgradeByUnitId) return false
|
||||
// 用户单位层级必须高于申报单位层级
|
||||
|
||||
const userLevelNum = authStore.organizationalLevelNum
|
||||
// 申报单位层级 = 人员等级 + 1(因为审批单位比人员等级高1级)
|
||||
const personnelLevelNum = {
|
||||
'Division': 1,
|
||||
'Regiment': 2,
|
||||
'Battalion': 3,
|
||||
'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