Maison  >  Article  >  cadre php  >  Comment gérer le processus de révision dans ThinkPHP6 ?

Comment gérer le processus de révision dans ThinkPHP6 ?

WBOY
WBOYoriginal
2023-06-12 09:31:541767parcourir

Avec le développement d'Internet, de plus en plus d'entreprises commencent à utiliser Internet pour le traitement des affaires, ce qui oblige les entreprises à disposer d'un système complet de gestion des processus d'audit pour garantir la sécurité et la normalisation des activités. Dans le développement PHP, le framework ThinkPHP6 fournit des fonctions pratiques de gestion des processus d'audit. Cet article présentera comment implémenter la gestion des processus d'audit dans ThinkPHP6.

1. Idée de base de la gestion des processus d'audit dans ThinkPHP6

L'idée de base de la gestion des processus d'audit dans ThinkPHP6 est réalisée grâce à des enregistrements de base de données. Généralement, deux tables de données doivent être créées :

  • Table de processus : enregistrement. les informations de base du processus d'audit, telles que le nom du processus, le créateur, l'heure de création, etc.
  • Tableau des étapes : enregistrez les étapes de révision spécifiques dans le processus de révision, y compris le nom, le statut, le processeur, le temps de traitement, etc. chaque étape de révision.

Le processus de gestion du processus de révision peut être brièvement décrit comme suit :

  • Créer un processus de révision : l'administrateur crée le processus de révision en arrière-plan et définit le nom, le gestionnaire et d'autres informations de chaque étape de révision ;
  • Soumettre la révision ; : L'utilisateur soumet l'avis Après avoir postulé, le système démarre l'examen selon le processus d'examen ;
  • Les étapes d'examen du processus d'examen : sur la base des informations enregistrées dans le tableau du processus et le tableau des étapes, les évaluateurs sont automatiquement affectés à l'examen ;
  • Résultat de l'examen : l'examen est réussi ou échoué, et le résultat final est Résultats de l'examen.

2. Créez la table de processus et la table d'étapes

Tout d'abord, nous devons créer la table de processus et la table d'étapes dans la base de données.

Table de processus :

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='审核流程表';

Table d'étapes :

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. Créer une classe de modèle

Ensuite, nous devons créer une classe de modèle, définir la relation entre la table de processus et la table d'étapes et implémenter diverses méthodes de fonctionnement.

  1. Créer une classe de modèle de processus

Tout d'abord, nous créons la classe de modèle de processus FlowModel, définissons une relation un-à-plusieurs avec la classe de modèle d'étape StepModel et fournissons des méthodes liées à la gestion des processus.

// 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. Créez la classe de modèle d'étape

Ensuite, nous créons la classe de modèle d'étape StepModel, définissons la relation d'appartenance avec la classe de modèle de processus FlowModel et fournissons des méthodes liées aux étapes d'audit.

// 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. Implémentation du processus de révision

Dans la mise en œuvre du processus de révision, nous devons appeler les méthodes des classes de modèle de processus et d'étape dans le contrôleur ou la couche de service pour terminer chaque étape du processus de révision.

  1. Créer un processus d'audit

Lorsque l'administrateur crée un processus d'audit en arrière-plan, il doit d'abord créer le processus, puis ajouter des étapes.

// 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. Soumettre pour examen

Après avoir soumis la demande d'examen, l'utilisateur doit déclencher automatiquement le processus d'examen et laisser le processus d'examen démarrer.

// 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. Étapes d'audit dans le processus d'audit

Le système assigne automatiquement des auditeurs pour mener l'audit selon les étapes définies dans le processus d'audit et enregistre les résultats de l'audit.

// 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('审核通过!');
    }
}

IV.Résumé

Grâce aux exemples de code ci-dessus, nous pouvons voir que la fonction de gestion des processus d'audit est très facilement implémentée dans ThinkPHP6 grâce à la gestion des enregistrements des tables de processus et des tables d'étapes, et aux opérations de méthode de la classe modèle, nous pouvons compléter rapidement et simplement un système complet de gestion du processus d’examen.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn