yxk-20260728

改善提案
在 Task_improve003 部门负责人审核节点,负责人只能选择基准奖项本档或更低档奖项,不允许升档。基准奖项按是否经过部门评议确定:
need_dept_score='1':以 suggested_award 为基准。
未经过部门评议:以 initial_award 为基准。
奖项编码保持现有顺序:0=金奖、1=银奖、2=铜奖、3=参与奖;编码数值大于等于基准编码即为本档或降档。
This commit is contained in:
ye1023
2026-07-28 18:34:20 +08:00
parent 9a6416f2fd
commit 58da0788bb
@@ -300,6 +300,10 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
public void saveLeaderAward(ImprovementProposalBpmActionDTO action, LoginUser loginUser) {
validateAward(action.getLeaderFinalAward());
ImprovementProposal proposal = validateRunningTask(action, loginUser, TASK_LEADER_AWARD);
String awardBase = resolveLeaderAwardBase(proposal);
if (awardRank(action.getLeaderFinalAward()) < awardRank(awardBase)) {
throw new IllegalStateException("负责人确认奖项只能选择当前档位或降档奖项");
}
String needInstituteVote = AWARD_GOLD.equals(action.getLeaderFinalAward()) ? "1" : "0";
ImprovementProposal update = new ImprovementProposal();
update.setId(proposal.getId());
@@ -497,11 +501,30 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
}
private void validateAward(String award) {
if (!AWARD_GOLD.equals(award) && !AWARD_SILVER.equals(award) && !AWARD_BRONZE.equals(award) && !AWARD_PARTICIPATION.equals(award)) {
if (!isValidAward(award)) {
throw new IllegalStateException("请选择有效的奖项");
}
}
private boolean isValidAward(String award) {
return AWARD_GOLD.equals(award) || AWARD_SILVER.equals(award) || AWARD_BRONZE.equals(award) || AWARD_PARTICIPATION.equals(award);
}
/**
* 负责人只能在当前评定档位内确认或降档:经过评分时以系统建议奖项为准,未评分时以初评奖项为准。
*/
private String resolveLeaderAwardBase(ImprovementProposal proposal) {
String awardBase = "1".equals(proposal.getNeedDeptScore()) ? proposal.getSuggestedAward() : proposal.getInitialAward();
if (!isValidAward(awardBase)) {
throw new IllegalStateException("部门评议建议奖项尚未生成,不能确认负责人奖项");
}
return awardBase;
}
private int awardRank(String award) {
return Integer.parseInt(award);
}
private boolean needsDeptScore(String award) {
return AWARD_GOLD.equals(award) || AWARD_SILVER.equals(award);
}