ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP6 でレビュープロセスを管理するにはどうすればよいですか?

ThinkPHP6 でレビュープロセスを管理するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-06-12 09:31:541859ブラウズ

インターネットの発展に伴い、ますます多くの企業が業務処理にインターネットを使用し始めています。そのため、企業はビジネスのセキュリティと標準化を確保するために完全な監査プロセス管理システムを導入する必要があります。 PHP 開発では、ThinkPHP6 フレームワークによって便利な監査プロセス管理機能が提供されていますが、この記事では、ThinkPHP6 で監査プロセス管理を実装する方法を紹介します。

1. ThinkPHP6 監査プロセス管理の基本的な考え方

ThinkPHP6 監査プロセス管理の基本的な考え方は、データベース レコードを通じて実現されます。通常、2 つのデータ テーブルを作成する必要があります。 :

  • プロセス テーブル: プロセス名、作成者、作成時間などの監査プロセスの基本情報を記録します;
  • ステップ テーブル: 特定の監査ステップを記録します名前、ステータス、プロセッサ、処理時間などを含む監査プロセス。

レビュー プロセス管理のプロセスは次のように簡単に説明できます。

  • レビュー プロセスの作成: 管理者はバックグラウンドでレビュー プロセスを作成し、名前と処理を設定します。各レビューステップの人物およびその他の情報;
  • レビューのために送信: ユーザーがレビュー申請を送信し、システムがレビュープロセスに従ってレビューを開始します;
  • レビューのレビューステッププロセス: プロセステーブルとステップテーブルに記録された情報に従って、レビューを実施するレビュー担当者を自動的に割り当てます;
  • 監査結果: レビューの合否を決定し、最終的にレビュー結果を取得します。

2. プロセス テーブルとステップ テーブルの作成

まず、データベースにプロセス テーブルとステップ テーブルを作成する必要があります。

プロセス テーブル:

CREATE TABLE `tp_flow` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(50) DEFAULT NULL COMMENT '流程名称',
  `create_user_id` int(11) DEFAULT NULL COMMENT '创建人ID',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='审核流程表';

ステップ テーブル:

CREATE TABLE `tp_step` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `flow_id` int(11) DEFAULT NULL COMMENT '流程ID',
  `name` varchar(50) DEFAULT NULL COMMENT '步骤名称',
  `status` tinyint(1) DEFAULT '0' COMMENT '状态:0-未处理,1-已处理',
  `handler_id` int(11) DEFAULT NULL COMMENT '处理人ID',
  `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='审核步骤表';

3. モデル クラスの作成

次に、モデル クラスを作成し、プロセステーブルとステップテーブルの関係を構築し、様々な演算方法を実現します。

  1. プロセス モデル クラスの作成

まず、プロセス モデル クラス FlowModel を作成し、ステップ モデル クラス StepModel と 1 対多の関係を定義し、プロセスを提供します。管理関連のメソッド。

// ppmodelFlowModel.php
namespace appmodel;

use thinkModel;

class FlowModel extends Model
{
    protected $table = 'tp_flow';

    // 定义与StepModel的一对多关系
    public function steps()
    {
        return $this->hasMany('StepModel', 'flow_id', 'id');
    }

    // 创建审核流程
    public function addFlow($data)
    {
        return $this->save($data);
    }

    // 编辑审核流程
    public function editFlow($id, $data)
    {
        return $this->where('id', $id)->update($data);
    }

    // 删除审核流程
    public function delFlow($id)
    {
        return $this->where('id', $id)->delete();
    }

    // 按照ID获取审核流程详情
    public function getFlowById($id)
    {
        return $this->with('steps')->find($id);
    }

    // 获取审核流程列表
    public function getFlowList()
    {
        return $this->with('steps')->select();
    }
}

2. ステップモデルクラスの作成

次に、ステップモデルクラス StepModel を作成し、プロセスモデルクラス FlowModel との所属関係を定義し、監査ステップに関連するメソッドを提供します。

// ppmodelStepModel.php
namespace appmodel;

use thinkModel;

class StepModel extends Model
{
    protected $table = 'tp_step';

    // 定义与FlowModel的属于关系
    public function flow()
    {
        return $this->belongsTo('FlowModel', 'flow_id');
    }

    // 添加审核步骤
    public function addStep($data)
    {
        return $this->save($data);
    }

    // 编辑审核步骤
    public function editStep($id, $data)
    {
        return $this->where('id', $id)->update($data);
    }

    // 删除审核步骤
    public function delStep($id)
    {
        return $this->where('id', $id)->delete();
    }

    // 按照ID获取审核步骤详情
    public function getStepById($id)
    {
        return $this->find($id);
    }

    // 获取审核步骤列表
    public function getStepListByFlowId($flow_id)
    {
        return $this->where('flow_id', $flow_id)->select();
    }

    // 更新审核步骤状态
    public function updateStepStatus($id, $status, $handler_id, $handle_time)
    {
        $data = [
            'status' => $status,
            'handler_id' => $handler_id,
            'handle_time' => $handle_time,
        ];
        return $this->where('id', $id)->update($data);
    }
}

3. 監査プロセスの実装

監査プロセスの実装では、コントローラーまたはサービス層でプロセス クラスとステップ モデル クラスのメソッドを呼び出して、それぞれの処理を完了する必要があります。監査プロセスのステップ。

  1. 監査プロセスの作成

管理者がバックグラウンドで監査プロセスを作成する場合、最初にプロセスを作成してからステップを追加する必要があります。

// ppcontrollerFlowController.php
namespace appcontroller;

use appBaseController;
use appmodelFlowModel;
use appmodelStepModel;
use thinkRequest;

class FlowController extends BaseController
{
    protected $flowModel;
    protected $stepModel;

    public function __construct(FlowModel $flowModel, StepModel $stepModel)
    {
        $this->flowModel = $flowModel;
        $this->stepModel = $stepModel;
    }

    // 创建审核流程
    public function addFlow(Request $request)
    {
        $data = $request->post();

        // 添加审核流程
        $flow_result = $this->flowModel->addFlow([
            'name' => $data['name'],
            'create_user_id' => $this->getCurrentUserId(),
            'create_time' => date('Y-m-d H:i:s'),
        ]);
        if (!$flow_result) {
            return $this->error('创建审核流程失败!');
        }

        // 添加审核步骤
        $step_data = [];
        foreach ($data['step'] as $key => $value) {
            $step_data[] = [
                'flow_id' => $this->flowModel->id,
                'name' => $value['name'],
                'handler_id' => $value['handler_id'],
            ];
        }
        $step_result = $this->stepModel->saveAll($step_data);
        if (!$step_result) {
            return $this->error('添加审核步骤失败!');
        }

        return $this->success('创建审核流程成功!');
    }
}
  1. レビュー用に送信

ユーザーがレビュー アプリケーションを送信した後、ユーザーはレビュー プロセスを自動的にトリガーし、レビュー プロセスの実行を開始する必要があります。

// ppcontrollerApplyController.php
namespace appcontroller;

use appBaseController;
use appmodelStepModel;
use thinkRequest;

class ApplyController extends BaseController
{
    protected $stepModel;

    public function __construct(StepModel $stepModel)
    {
        $this->stepModel = $stepModel;
    }

    // 提交审核
    public function submitApply(Request $request)
    {
        $data = $request->post();

        // 获取审核流程的第一步骤
        $steps = $this->stepModel->getStepListByFlowId($data['flow_id']);
        if (empty($steps)) {
            return $this->error('该审核流程未添加步骤!');
        }
        $first_step = $steps[0];

        // 更新第一步骤状态
        $update_result = $this->stepModel->updateStepStatus($first_step->id, 1, $this->getCurrentUserId(), date('Y-m-d H:i:s'));
        if (!$update_result) {
            return $this->error('更新审核步骤状态失败!');
        }

        return $this->success('提交审核成功!');
    }
}
  1. 監査プロセスの監査手順

システムは、監査プロセスで定義された手順に従って監査を実施する監査人を自動的に割り当て、監査結果を記録します。

// ppcontrollerApproveController.php
namespace appcontroller;

use appBaseController;
use appmodelStepModel;
use thinkRequest;

class ApproveController extends BaseController
{
    protected $stepModel;

    public function __construct(StepModel $stepModel)
    {
        $this->stepModel = $stepModel;
    }

    // 审核步骤
    public function approveStep(Request $request)
    {
        $data = $request->post();

        // 获取当前步骤
        $step = $this->stepModel->getStepById($data['step_id']);

        // 更新当前步骤状态
        $update_result = $this->stepModel->updateStepStatus($data['step_id'], $data['status'], $this->getCurrentUserId(), date('Y-m-d H:i:s'));
        if (!$update_result) {
            return $this->error('更新审核步骤状态失败!');
        }

        // 获取下一步骤
        $next_step = $this->stepModel->where('flow_id', $step->flow_id)->where('id', '>', $data['step_id'])->order('id asc')->find();
        if (!$next_step) {
            return $this->success('已审核完成!');
        }

        // 更新下一步骤状态
        $update_result = $this->stepModel->updateStepStatus($next_step->id, 1, $next_step->handler_id, null);
        if (!$update_result) {
            return $this->error('更新审核步骤状态失败!');
        }

        return $this->success('审核通过!');
    }
}

4. 概要

上記のコード例を通じて、プロセス テーブルとステップ テーブルのレコード管理を通じて、監査プロセス管理機能が ThinkPHP6 に非常に便利に実装されていることがわかります。モデル クラス この方法を使用すると、完全なレビュー プロセス管理システムを迅速かつ簡単に完成させることができます。

以上がThinkPHP6 でレビュープロセスを管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。