连级别

This commit is contained in:
18631081161 2026-01-17 00:37:13 +08:00
parent de9592be03
commit 27992efca2
3 changed files with 71 additions and 20 deletions

View File

@ -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();

View File

@ -672,13 +672,30 @@ 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;
@ -711,16 +728,37 @@ public class PersonnelService : IPersonnelService
var approvedByUnit = await _context.OrganizationalUnits.FindAsync(approvedByUnitId); var approvedByUnit = await _context.OrganizationalUnits.FindAsync(approvedByUnitId);
if (approvedByUnit == null) if (approvedByUnit == null)
throw new ArgumentException("审批单位不存在"); throw new ArgumentException("审批单位不存在");
// 验证审批单位必须是申报单位的上级
var isParent = await _organizationService.IsParentUnitAsync(approvedByUnitId, personnel.PendingUpgradeByUnitId.Value);
if (!isParent)
throw new ArgumentException("审批单位必须是申报单位的上级");
var previousLevel = personnel.ApprovedLevel;
// 人才等级升级为申报单位的等级 _logger.LogInformation("ApproveUpgrade: personnelId={PersonnelId}, approvedByUnitId={ApprovedByUnitId}, pendingUpgradeByUnitId={PendingUpgradeByUnitId}, approvedByUnitLevel={Level}, personnelApprovedLevel={PersonnelLevel}",
var newLevel = (PersonnelLevel)(int)personnel.PendingUpgradeByUnit!.Level; 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.ApprovedLevel = newLevel;
personnel.ApprovedByUnitId = approvedByUnitId; personnel.ApprovedByUnitId = approvedByUnitId;

View File

@ -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
// = + 11
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 // = - 11
// (3)(2)(1)
const upgradeByUnitLevel = personnelLevelNum - 1
//
// (1)(2)(1)
// userLevelNum <= upgradeByUnitLevel
return userLevelNum <= upgradeByUnitLevel
} }
// //