
在企业的运营管理中审批流程的高效执行对于保障业务顺利进行至关重要。一个良好设计的审批系统能够显著提高决策的及时性和准确性同时促进各部门间的协同工作。本文将深入探讨如何构建一个既透明又高效的审批流程系统通过案例分析学校的管理模式展示如何实现一个清晰、灵活且易于管理的审批流程。本文还将探讨审批系统设计的关键要素如基础模板配置、审批流程的设计以及实现审批系统时需要注意的细节。通过这些讨论目标是为读者提供一个关于如何有效管理和优化审批流程的全面视角。文章目录业务场景设计方式基础模板配置通用审批流程业务实现方式注意总结业务场景一个企业的正常运作离不开审批工作而这项工作往往需要各个部门的协同完成。因此在审批业务中需要实现全方面的协调和高效沟通。这不仅涉及到审批流程的透明度和可追踪性也包括确保流程的灵活性以适应不同部门的特定需求。为了提高效率审批系统应集成清晰的指导原则和标准操作流程同时还需具备强大的数据支持和分析功能以便实时监控审批进度确保决策的及时性和准确性。此外考虑到各部门之间的相互依赖性审批系统还应支持跨部门协作确保信息的流畅传递和快速响应。通过这些措施可以有效提升企业的运营效率加强部门间的协同作用从而推动整个企业的稳健发展。这里以学校的管理模式举例一个简单审批流程。对所有业务管理一目了然。设计方式模块分类模块应用基础模板配置通用审批模板审批模板流程审批日期以及用户流水单审批流程业务印章申请、学生退学、开具证明、离职申请、物品领用、采购审批、用车申请、损坏赔偿、报销/请款流程 等等这里设计的理念是通用配置搭配个性配置应用实现完整的业务流程。由于学校的管理流程审批比较简单因此这里这么设计比较合理。审批的工作方式分为创建基础流程配置与流程审批。基础模板配置通用基础流程配置需要创建审批模板以及对应模板的流程。这里需要配置4个地方审批的名称模板的id能够使用的部门即发起部门能够审批的部门。这里可能会有疑问每个流程权限控制怎么处理这里先卖个关子这样配置后后面其实就不用考虑这些乱七八糟的问题了。点击每个模板的对应的审批模板可以配置该流程的顺序这里例学生退学举例这里分别配置的默认的配置部门顺序这里对应的审批部门需要进行自定义配置这里作用是在每次创建用户审批流水单的时候自动根据模板创建审批流程。这里审批模板流程可以使用前后端不同方式控制我这里做了2套一个是前端验证一个是后端验证目的是保证审批顺序不能重复不能有跳的数字等等后端验证操作比较麻烦因此介绍一下前端配置的部分这里比较好理解。每次新增都会默认自增顺序以及锁定模板名称和ID这里只需要在下拉选择对应顺序的部门即可。删除流程只能从后往前逐一删除避免了误操作的情况。如果想删除中间某个流程必须这么操作。以上配置会跟随着所有流程操作。并且在后端业务验证中需要进行判断如果流程没有完整的审核的话即最少一个提交一个审核那么需要进行提示操作。审批流程业务这里配置的业务用户创建的审核内容是每个审核流程都需要展示的因此和之前基础的表单配置一致。但是这里的内容不用再这里显示给用户查看揉入到每个新建流程中合并嵌套表单进行添加操作即可。这样设计为了后面嵌套直接匹配对应的模板就可以了操作起来更加简单方便。在新建审批内容之后会看到第一行数据为提交该申请的部门后面为审批顺序自动同步过来的流程数据。并且再新建完审批内容之后每个参与审批的人直接点击审批操作都可以看到提交的内容信息。对应审批页面会看到每个流程的状态。这里会看到流程结束审批通过和审批驳回3个特殊状态。这3个状态的逻辑是审批流程都完事即所有部门审批通过之后即审批通过并且标记流程结束。如果其中一个流程中被驳回会标记驳回并自动标记流程结束。在每个数据更新的环节需要有流程消息通知的环节。这里最重要的还是实现一个流程消息提醒功能。根据配置好的通知部门不管在新建流程还是审批环节都是要在消息中心创建对应的内容来提醒用户。这里是消息提醒的模块。实现方式注意需要对创建角色添加审批权限在dvadmin/system/models.py中的class Role(CoreModel)添加字段控制是否有权限审核默认为否。classRole(CoreModel):......audit_permissionsmodels.BooleanField(defaultFalse,verbose_name审批审核权,help_text审批审核权)......然后需要在前端的角色管理编辑界面将添加的这个字段调出来可以操作即可。还需要再API接口的用户接口部分将该字段显示出来需要修改dvadmin/system/view/user.py搜索result[role_info] role.values(id, name, key)添加权限表示字段即可。classUserViewSet(CustomModelViewSet):....defuser_info(self,request):获取当前用户信息......ifrole:result[role_info]role.values(id,name,key,audit_permissions)......这样设计比重新起一个对照表单接口要简单的多不过要基于对框架比较熟悉的基础之上操作否则可能项目都跑不起来了。在message_center.py中修改MessageCenterCreateSerializer更改消息类型这里可以根据前端配置的信息去修改显示消息的各种样式。主要用于处理消息中心新增数据的序列化和保存操作。通过这个类不仅完成了消息数据的保存还根据消息的不同类型推送了相应的通知给特定的用户。classMessageCenterCreateSerializer(CustomModelSerializer): 消息中心-新增-序列化器 save方法被重写。这个方法是核心部分首先调用父类的save方法将数据保存到数据库中。随后代码通过self.initial_data获取请求中传入的原始数据具体提取了target_type以及其他相关字段如目标用户、角色、部门等信息。defsave(self,**kwargs):datasuper().save(**kwargs)# 保存数据并获取返回的结果initial_dataself.initial_data target_typeinitial_data.get(target_type)usersinitial_data.get(target_user,[])根据target_type的不同值决定了应该如何筛选目标用户。比如当target_type为 1 时表示按角色推送消息。代码会从传入的target_role列表中查询拥有这些角色的用户。类似地target_type为 2 表示按部门发送此时会根据传入的target_dept查找用户。当消息是系统通知或者审批消息时推送给所有用户。iftarget_typein[1]:# 按角色target_roleinitial_data.get(target_role,[])usersUsers.objects.filter(role__id__intarget_role).values_list(id,flatTrue)websocket_push(dvadmin,message{sender:system,contentType:USER,content:您有一条新消息~,refresh_unread:True})iftarget_typein[2]:# 按部门target_deptinitial_data.get(target_dept,[])usersUsers.objects.filter(dept__id__intarget_dept).values_list(id,flatTrue)websocket_push(dvadmin,message{sender:system,contentType:DEPT,content:您有一条新消息~,refresh_unread:True})iftarget_typein[3]:# 系统通知usersUsers.objects.values_list(id,flatTrue)websocket_push(dvadmin,message{sender:system,contentType:SYSTEM,content:您有一条新消息~,refresh_unread:True})iftarget_typein[4]:# 审批消息usersUsers.objects.values_list(id,flatTrue)websocket_push(dvadmin,message{sender:system,contentType:WORKFLOW,content:您有一条新消息~,refresh_unread:True})在找到目标用户后代码会将用户与消息中心的数据进行关联并保存这些信息。同时如果目标类型是按角色或部门推送代码还会创建一个专门的 WebSocket 通道通过该通道向每个用户发送实时通知。targetuser_data[]foruserinusers:targetuser_data.append({messagecenter:data.id,users:user})iftarget_typein[1,2]:room_namefuser_{user}websocket_push(room_name,message{sender:system,contentType:SYSTEM,content:您有一条新消息~,refresh_unread:True})最后通过MessageCenterTargetUserSerializer序列化器确保这些用户数据能够正确保存到数据库中。该序列化器负责验证生成的targetuser_data数据并将其保存。targetuser_instanceMessageCenterTargetUserSerializer(datatargetuser_data,manyTrue,requestself.request)targetuser_instance.is_valid(raise_exceptionTrue)targetuser_instance.save()returndata整个save方法通过以上几个步骤完成了消息的保存、用户的筛选以及通知的推送最终实现了消息中心新增操作的功能。而Meta类定义了模型和字段指定使用MessageCenter这个模型并将所有字段序列化但将id字段设为只读。classMeta:modelMessageCenter fields__all__read_only_fields[id]总结通过详细的案例分析和实现细节讨论本文展示了如何在企业环境中有效地设计和实施审批流程系统。关键在于结合通用配置和个性化设置以满足不同部门的特定需求。在构建这样的系统时不仅要考虑流程的透明度和可追踪性还需要考虑跨部门协作和数据支持。本文中的方法和技巧尤其是在实现方式中的注意事项为打造一个高效、灵活且用户友好的审批系统提供了实用的指导。这样的系统不仅能提升企业的运营效率还能加强部门间的协同作用从而促进整个组织的稳健发展。