You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel请假申请审批通过后用户总年假额度未正常扣除问题咨询

问题排查

  • 审批逻辑approval方法未调用扣减余额的leaveBalance方法,审批通过后没有触发余额更新流程
  • approval方法的条件判断误用赋值运算符=而非比较运算符==,虽然实际能修改状态,但逻辑完全不符合预期,无法正确判断审批操作类型
  • leaveBalance方法存在多处逻辑错误:
    • 无意义查询所有请假申请Application::all(),未关联当前审批的请假单
    • 从请求参数$request->days_taken取请假天数,但审批请求通常不会传递该参数,应该直接从对应请假单中读取已存储的days_taken
    • 传入的$id参数语义不明确,如果是请假申请ID,直接查User::find($id)完全找不到对应用户
  • 你尝试的修改代码存在语法错误:auth()->user(-漏写右括号,会直接抛出语法错误无法运行
  • 缺少重复扣减校验:如果已审批通过的申请重复触发审批操作,会导致余额重复扣减

修复方案

推荐直接将余额扣减逻辑合并到审批方法中,不需要单独拆出leaveBalance方法,简化逻辑:

public function approval(Request $request, $id)
{
    $leaverequest = Application::findOrFail($id);
    // 已审批的申请不允许重复操作,0是待审批状态、1是通过、2是驳回,可按你实际枚举值调整
    if ($leaverequest->status != 0) {
        return redirect()->back()->with('error', '该申请已完成审批,无法重复操作');
    }
    // 正确使用比较运算符判断操作类型
    if ($request->approve) {
        $leaverequest->status = 1;
        // 审批通过,仅年假类型(leave_id=1)需要扣减余额
        if ($leaverequest->leave_id == 1) {
            $user = User::findOrFail($leaverequest->user_id);
            // 二次校验余额避免并发问题导致余额为负
            if ($user->total_annual >= $leaverequest->days_taken) {
                $user->decrement('total_annual', $leaverequest->days_taken);
            } else {
                return redirect()->back()->with('error', '用户年假余额不足,无法审批通过');
            }
        }
        $leaverequest->save();
        return redirect()->back()->with('success', '审批通过');
    } elseif ($request->reject) {
        $leaverequest->status = 2;
        $leaverequest->save();
        return redirect()->back()->with('success', '已驳回申请');
    }
    return redirect()->back();
}

如果你需要保留单独的leaveBalance方法,修正后在审批通过时调用即可:

public function leaveBalance(Application $leaverequest)
{
    // 仅年假类型且审批通过才扣减余额
    if ($leaverequest->leave_id == 1 && $leaverequest->status == 1) {
        $user = User::findOrFail($leaverequest->user_id);
        $user->decrement('total_annual', $leaverequest->days_taken);
    }
}

内容的提问来源于stack exchange,提问作者wartortle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 11:06:02