Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk menguruskan proses semakan dalam ThinkPHP6?

Bagaimana untuk menguruskan proses semakan dalam ThinkPHP6?

WBOY
WBOYasal
2023-06-12 09:31:541824semak imbas

Dengan perkembangan Internet, semakin banyak syarikat mula menggunakan Internet untuk pemprosesan perniagaan, yang memerlukan syarikat mempunyai sistem pengurusan proses audit yang lengkap untuk memastikan keselamatan dan penyeragaman perniagaan. Dalam pembangunan PHP, rangka kerja ThinkPHP6 menyediakan fungsi pengurusan proses audit yang mudah Artikel ini akan memperkenalkan cara melaksanakan pengurusan proses audit dalam ThinkPHP6.

1. Idea asas pengurusan proses audit dalam ThinkPHP6

Idea asas pengurusan proses audit dalam ThinkPHP6 dicapai melalui rekod pangkalan data Secara amnya, dua jadual data perlu dicipta:

  • Jadual proses: rekod maklumat asas proses semakan, seperti nama proses, pencipta, masa penciptaan, dsb.;
  • Jadual langkah: rekod langkah semakan khusus dalam proses semakan, termasuk nama, status dan Pemproses, masa pemprosesan, dsb.

Proses pengurusan proses semakan boleh diterangkan secara ringkas seperti berikut:

  • Buat proses semakan: Pentadbir membuat proses semakan di latar belakang dan menetapkan nama dan pemprosesan setiap langkah semakan Orang dan maklumat lain;
  • Serahkan untuk semakan: Pengguna menyerahkan permohonan semakan, dan sistem memulakan semakan mengikut proses semakan
  • Langkah semakan dalam semakan proses: Mengikut maklumat yang direkodkan dalam jadual proses dan jadual langkah, secara automatik Tetapkan penyemak untuk menjalankan semakan;
  • Hasil semakan: lulus atau gagal semakan, dan akhirnya dapatkan hasil semakan.

2. Cipta jadual proses dan jadual langkah

Pertama, kita perlu mencipta jadual proses dan jadual langkah dalam pangkalan data.

Jadual proses:

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

Jadual langkah:

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 Cipta kelas model

Seterusnya, kita perlu mencipta kelas model, takrifkan. jadual proses dan Hubungan antara jadual langkah dan melaksanakan pelbagai kaedah operasi.

  1. Buat kelas model proses

Pertama, kami mencipta kelas model proses FlowModel, mentakrifkan hubungan satu-ke-banyak dengan kelas model langkah StepModel dan menyediakan proses kaedah berkaitan pengurusan.

// 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. Cipta kelas model langkah

Kemudian, kami cipta kelas model langkah StepModel, tentukan hubungan kepunyaan dengan FlowModel kelas model proses, dan sediakan kaedah yang berkaitan dengan langkah 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. Pelaksanaan proses semakan

Dalam pelaksanaan proses semakan, kita perlu memanggil kaedah proses dan kelas model langkah dalam lapisan pengawal atau perkhidmatan untuk melengkapkan setiap langkah langkah proses semakan.

  1. Buat proses audit

Apabila pentadbir membuat proses audit di latar belakang, dia perlu mencipta proses itu dahulu dan kemudian menambah langkah.

// 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. Serah untuk semakan

Selepas menyerahkan permohonan semakan, pengguna perlu mencetuskan proses semakan secara automatik dan membiarkan proses semakan mula berjalan.

// 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. Langkah audit dalam proses audit

Sistem secara automatik menugaskan juruaudit untuk menjalankan audit mengikut langkah yang ditakrifkan dalam proses audit, dan merekodkan keputusan 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('审核通过!');
    }
}

4 Ringkasan

Melalui contoh kod di atas, kita dapat melihat bahawa ThinkPHP6 telah melaksanakan fungsi pengurusan proses audit dengan sangat mudah, melalui pengurusan rekod jadual proses dan jadual langkah serta model. kelas Dengan menggunakan kaedah ini, kami boleh melengkapkan sistem pengurusan proses semakan yang lengkap dengan cepat dan ringkas.

Atas ialah kandungan terperinci Bagaimana untuk menguruskan proses semakan dalam ThinkPHP6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn