php流程引擎的简单设计及实现

前不久简单设计了个php的工作流程引擎,只有后端部分,前端没有做(前端写着好麻烦,于是偷懒了)。
主要功能是流程创建,可以设置流程使用是单独某人可用还是每个部门可用还是某个角色可用,每个流程可以设置自己的编号规则。流程里分为多个工作节点,每个节点可以设置是审批类型是或签还是会签,固定人审批还是某个部门某个角色的人审批,每个节点可以设置抄送人,可以设置根据申请人提交的表单数据来确定是否经过这个节点(多个字段都满足或者满足其中一个就要经过这个审批节点)。流程创建成功后自动生成该流程对应的数据表。


数据表

流程字段表单表:cmf_flowform
流程字段表单表
流程表:cmf_workflow
流程表
流程类型表:cmf_workflowtype
流程类型表
审批项表:cmf_program
审批项表
审批记录表:cmf_flowlog
审批记录表
其它的一些常用表:
这里写图片描述
这里写图片描述
这里写图片描述

具体实现

代码目录结构:
这里写图片描述
外部只调用Workflow.php的方法来实现新建流程、新建审批工作项,审批,编辑流程,编辑审批项等。

整个审批流程怎么走是用一个php数组来判断的,转换成json后保存在流程表的FlowNodes字段下,数组包含键值如下:

$flow = [
    [
        'type'  => // 1:会签  2:或签
        'role'  => // 审批人角色id
        'department => // 审批人部门id
        'user'=> // 审批人id
        'self'  => // 1:本部门对应角色签批
        'copy'  => // 抄送人id
        'need'  => [
            [
                'field' => // 字段
                'type'  => // 1:值大于  2:值相等  3:值小于
                'value' => // 需要时字段条件值
            ]
            [
                'field' => // 字段
                'type'  => // 1:值大于  2:值相等  3:值小于
                'value' => // 需要时字段条件值
            ]
        ]
        'needtype'  => // 1:且  2:或
    ]
];

每个流程还有自己编号规则,编号规则也是用一个数组表示,转json后保存在流程表OrderRule字段下。下面是示例:

$orderRule = [
    [
        'type'      => // 1:标签 2:日期 3:增长值
        'value'     => // type为1时有值,字符串,例如:HQ
        'datetype'  => // type为2时有值  1:年 2:年月 3:年月日
        'length'    => // 增长值最高长度 type为3时有值
    ]
];

// 下面这个编号规则第一个编号就是HT201803001
$orderRule = [
    [
        'type'  => 1,
        'value' => 'HT'
    ],
    [
        'type'  => 2,
        'datetype'  => 2
    ],
    [
        'type'  => 3,
        'length'=> 3,
    ]
];

新建审批项调用Workflow.php的方法createFlow($data)。

$data = [
    'Name'      => '事假',
    'Introduce' => '用户事假申请',
    'FlowNodes' => [
        [
            'type'          => 2,
            'role'          => 2,
            'self'          => 1,
            'need'          => 1,
        ],
        [
            'type'          => 2,
            'role'          => 4,
            'copy'          => 4,
            'need'          => [
                [
                    'field' => 'TimeBetween1Total',
                    'type'  => 1,
                    'value' => 3,
                ]
            ],
            'needtype'      => 1,
        ]
    ],
    'DepartmentID'  => NULL,
    'RoleID'        => 1,
    'TypeID'        => 1,
    'UserID'        => NULL,
    'OrderRule'     => [
        [
            'type'  => 1,
            'value' => 'SJ'
        ],
        [
            'type'  => 2,
            'datetype'  => 2
        ],
        [
            'type'  => 3,
            'length'=> 3,
        ]
    ],
    'Form'  => [
        [
            'fieldtypeid'   => 1,
            'FieldName'     => 'Content',
            'FieldTitle'    => '原因',
            'Placeholder'   =&
  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
网上购物的设计实现通常需要使用PHP作为后端开发语言。PHP是一种强大且广泛应用于Web开发的脚本语言,其灵活性和高度可定制性使得它成为网上购物系统的理想选择。 首先,网上购物系统的设计需要考虑以下几个方面:用户管理,商品管理,购物车管理,订单管理和支付接口。 用户管理是网上购物系统的核心之一。使用PHP可以创建用户登录和注册功能,实现用户信息的存储和管理。通过数据库存储用户信息,例如用户名、密码、地址和联系方式等。 商品管理是网上购物系统的另一个重要部分。借助PHP,可以设计实现商品的增删改查功能。商品信息、价格、库存等可以保存在数据库中,并通过网页形式展示给用户。 购物车管理是网上购物系统的重要组成部分。PHP可以实现将用户选择的商品添加到购物车、更新购物车中商品数量、删除购物车中商品等功能。购物车信息可以存储在数据库中,方便用户对已选商品进行管理。 订单管理是网上购物系统中用户提交订单后的流程PHP可以实现将用户购物车中的商品生成订单,并进行订单信息的存储和管理。用户可以通过用户界面查询订单状态、取消订单等操作。 支付接口是网上购物系统必备的一部分。借助PHP,可以设计响应各种支付方式的接口,例如支付宝、微信支付等。用户提交订单后,可以通过支付接口进行支付操作。 总结来说,PHP是一种适用于网上购物系统设计实现的强大工具。使用PHP可以轻松处理用户管理、商品管理、购物车管理、订单管理和支付接口等核心功能。同时,PHP还具备灵活性和可扩展性,方便系统的拓展和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值