yudao-cloud 开发指南 yudao-cloud 开发指南
  • 萌新必读
  • 后端手册
  • 微服务手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • HRM 手册
  • FMS 手册
  • PMS 手册
  • OA 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 前端手册 Admin Uniapp
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • HRM 手册
  • FMS 手册
  • PMS 手册
  • OA 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
单体版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读
  • 后端手册
  • 微服务手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • HRM 手册
  • FMS 手册
  • PMS 手册
  • OA 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 前端手册 Admin Uniapp
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • MES 手册
  • WMS 手册
  • HRM 手册
  • FMS 手册
  • PMS 手册
  • OA 手册
  • IM 即时通讯手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
单体版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读

    • 简介
    • 交流群
    • 视频教程
    • 功能列表
    • 快速启动(后端项目)
    • 快速启动(前端项目)
    • 接口文档
    • 技术选型
    • 项目结构
    • 代码热加载
    • 一键改包
    • 迁移模块(适合新项目)
    • 删除功能(以租户为例)
    • 表结构变更(版本升级)
    • 国产信创数据库(DM 达梦、大金、OpenGauss、瀚高)
    • 内网穿透
    • 面试题、简历模版、简历优化
    • 项目外包
  • 后端手册

    • 新建服务
    • 代码生成【单表】(新增功能)
    • 代码生成【主子表】
    • 代码生成(树表)
    • 代码生成(移动端)
    • 功能权限
    • 数据权限
    • 用户体系
    • 三方登录
    • OAuth 2.0(SSO 单点登录)
    • SaaS 多租户【字段隔离】
    • SaaS 多租户【数据库隔离】
    • WebSocket 实时通信
    • 异常处理(错误码)
    • 参数校验、时间传参
    • 分页实现
    • VO 对象转换、数据翻译
    • 文件存储(上传下载)
    • Excel 导入导出
    • 操作日志、访问日志、异常日志
    • MyBatis 数据库
    • MyBatis 联表&分页查询
    • 多数据源(读写分离)、事务
    • Redis 缓存
    • 本地缓存
    • 异步任务
    • 分布式锁
    • 幂等性(防重复提交)
    • 请求限流(RateLimiter)
    • HTTP 接口签名(防篡改)
    • HTTP 接口加解密
    • 单元测试
    • 验证码
    • 工具类 Util
    • 数据库文档
  • 微服务手册

    • 微服务调试(必读)
    • 注册中心 Nacos
    • 配置中心 Nacos
    • 服务网关 Spring Cloud Gateway
    • 服务调用 Feign
    • 定时任务 XXL Job
    • 消息队列(内存)
    • 消息队列(Redis)
    • 消息队列(RocketMQ)
    • 消息队列(RabbitMQ)
    • 消息队列(Kafka)
    • 消息队列(Cloud)
    • 分布式事务 Seata
    • 服务保障 Sentinel
  • 工作流手册

    • 工作流演示
    • 功能开启
    • 工作流(达梦适配)
    • 审批接入(流程表单)
    • 审批接入(业务表单)
    • 流程设计器(BPMN)
    • 流程设计器(钉钉、飞书)
    • 选择审批人、发起人自选
    • 会签、或签、依次审批
    • 流程发起、取消、重新发起
    • 审批通过、不通过、驳回
    • 审批加签、减签
    • 审批转办、委派、抄送
    • 执行监听器、任务监听器
    • 流程表达式
    • 流程审批通知
    • 移动端审批
  • 大屏手册

    • 报表设计器
    • 大屏设计器
  • 支付手册

    • 功能开启
    • 支付宝支付接入
    • 微信公众号支付接入
    • 微信小程序支付接入
    • 支付宝、微信退款接入
    • 支付宝转账接入
    • 微信转账接入
    • 钱包充值、支付、退款
    • 模拟支付、退款
    • 移动端支付管理
  • 会员手册

    • 功能开启
    • 微信公众号登录
    • 微信小程序登录
    • 微信小程序订阅消息
    • 微信小程序码
    • 会员用户、标签、分组
    • 会员等级、积分、签到
    • 移动端会员管理
  • 商城手册

    • 商城演示
    • 功能开启
    • 商城装修
    • 在线客服
    • 【商品】商品分类
    • 【商品】商品属性
    • 【商品】商品 SPU 与 SKU
    • 【商品】商品评价
    • 【交易】购物车
    • 【交易】交易订单
    • 【交易】售后退款
    • 【交易】快递发货
    • 【交易】门店自提
    • 【交易】分销返佣
    • 【营销】优惠劵
    • 【营销】积分商城
    • 【营销】拼团活动
    • 【营销】秒杀活动
    • 【营销】砍价活动
    • 【营销】满减送活动
    • 【营销】限时折扣
    • 【营销】内容管理
    • 【统计】会员、商品、交易统计
    • 移动端商城管理
  • ERP手册

    • ERP 演示
    • 功能开启
    • 【产品】产品信息、分类、单位
    • 【库存】产品库存、库存明细
    • 【库存】其它入库、其它出库
    • 【库存】库存调拨、库存盘点
    • 【采购】采购订单、入库、退货
    • 【销售】销售订单、出库、退货
    • 【财务】采购付款、销售收款
    • 移动端 ERP
  • CRM手册

    • CRM 演示
    • 功能开启
    • 【线索】线索管理
    • 【客户】客户管理、公海客户
    • 【商机】商机管理、商机状态
    • 【合同】合同管理、合同提醒
    • 【回款】回款管理、回款计划
    • 【产品】产品管理、产品分类
    • 【通用】数据权限
    • 【通用】跟进记录、待办事项
    • 移动端 CRM
  • AI大模型手册

    • AI 大模型演示
    • 功能开启
    • AI 聊天对话
    • AI 绘画创作
    • AI 知识库(RAG)
    • AI 音乐创作
    • AI 写作助手
    • AI 思维导图
    • AI 工具(function calling)
    • AI 工作流
    • Dify 工作流
    • FastGPT 工作流
    • Coze 智能体
    • 推理模式(thinking)
    • 联网搜索
    • MCP Client 客户端
    • MCP Server 服务端
    • 【模型接入】Claude
    • 【模型接入】OpenAI
    • 【模型接入】通义千问
    • 【模型接入】DeepSeek
    • 【模型接入】字节豆包
    • 【模型接入】腾讯混元
    • 【模型接入】硅基流动
    • 【模型接入】MiniMax
    • 【模型接入】月之暗面
    • 【模型接入】百川智能
    • 【模型接入】文心一言
    • 【模型接入】LLAMA
    • 【模型接入】智谱 GLM
    • 【模型接入】讯飞星火
    • 【模型接入】微软 OpenAI
    • 【模型接入】谷歌 Gemini
    • 【模型接入】Stable Diffusion
    • 【模型接入】Midjourney
    • 【模型接入】Suno
    • 【模型接入】Grok
    • 【模型接入】阶跃星辰
    • 移动端 AI 大模型
  • IoT物联网手册

    • 功能开启
    • 产品管理
    • 设备管理
    • 物模型配置
    • 设备网关与子设备
    • 设备动态注册
    • 设备接入(概述)
    • 设备接入(HTTP 协议)
    • 设备接入(MQTT 协议)
    • 设备接入(EMQX 协议)
    • 设备接入(TCP 协议)
    • 设备接入(UDP 协议)
    • 设备接入(WebSocket 协议)
    • 设备接入(CoAP 协议)
    • 设备接入(Modbus Client 模式)
    • 设备接入(Modbus Server 模式)
    • 设备接入(自定义协议)
    • 场景联动
    • 数据流转
    • 告警配置
    • OTA 固件升级
    • 移动端 IoT 物联网
  • MES手册

    • MES 演示
    • 功能开启
    • 【基础】物料产品、分类、计量单位
    • 【基础】客户管理、供应商管理
    • 【基础】车间设置、工作站设置
    • 【基础】编码规则
    • 【生产】工序设置、工艺流程
    • 【生产】生产工单
    • 【生产】生产排产、工序流转卡
    • 【生产】生产报工
    • 【生产】安灯配置、安灯呼叫
    • 【生产】工作记录
    • 【仓库】仓库与库区库位、条码赋码、SN码
    • 【仓库】批次管理、库存现有量、库存事务
    • 【仓库】到货通知、采购入库、采购退货
    • 【仓库】生产领料、生产退料、物料消耗
    • 【仓库】产品产出、产品入库
    • 【仓库】发货通知、销售出库、销售退货
    • 【仓库】外协发料、外协入库
    • 【仓库】其他入库、其他出库
    • 【仓库】调拨单、装箱管理
    • 【仓库】库存盘点
    • 【质量】检测项设置、常见缺陷
    • 【质量】质检方案
    • 【质量】来料检验(IQC)
    • 【质量】过程检验(IPQC)
    • 【质量】出货检验(OQC)
    • 【质量】退货检验(RQC)
    • 【质量】待检任务、检验结果、缺陷记录
    • 【设备】设备类型、设备台账
    • 【设备】点检保养项目、点检保养方案
    • 【设备】点检记录、保养记录、维修单
    • 【工具】工具类型、工装夹具台账
    • 【排班】班组设置、节假日设置
    • 【排班】排班计划、排班日历
    • 移动端 MES
  • WMS手册

    • WMS 演示
    • 功能开启
    • 【基础】仓库
    • 【基础】商品、SKU、分类、品牌
    • 【基础】往来企业(供应商、客户)
    • 【库存】库存记录、流水、统计
    • 【单据】入库
    • 【单据】出库
    • 【单据】移库
    • 【单据】盘库
    • 【其它】WMS、MES、ERP 对比
    • 移动端 WMS
  • HRM人力资源

    • HRM 演示
    • 功能开启
    • 【组织】工作台、组织架构
    • 【员工】员工管理
    • 【招聘】招聘管理
    • 【考勤】考勤管理
    • 【社保】社保管理
    • 【薪资】计薪设置、薪资档案
    • 【薪资】月度工资、工资条
    • 【绩效】绩效模板、绩效计划
    • 【绩效】绩效考核、绩效档案
    • 移动端 HRM
  • FMS财务管理

    • FMS 演示
    • 功能开启
    • 【设置】账套管理、财务参数、财务指标
    • 【设置】币别、科目、辅助核算、初始余额
    • 【设置】凭证字、常用摘要、凭证模板
    • 【凭证】凭证管理
    • 【账簿】账簿管理
    • 【报表】财务报表
    • 【结账】期末结账
    • 移动端 FMS
  • PMS项目管理

    • PMS 演示
    • 功能开启
    • 【项目中心】工作台与项目管理
    • 【项目中心】项目详情与迭代
    • 【项目中心】工作项与协作
    • 【知识中心】知识库管理
    • 【知识中心】文档与协作
    • 移动端 PMS
  • OA协同办公

    • OA 演示
    • 功能开启
    • 【协作】日程、任务、计划与汇报
    • 【协作】公告、讨论、通讯录与笔记
    • 【办公】企业邮箱
    • 【办公】企业云盘
    • 【行政】办公用品、用印管理
    • 【行政】会议室、车辆管理
    • 【流程】公文管理
      • 1. 套红模板
        • 1.1 表结构
        • 1.2 管理后台
      • 2. 公文发文
        • 2.1 表结构
        • 2.2 状态流转
        • 2.3 管理后台
      • 3. 公文收文
        • 3.1 表结构
        • 3.2 状态流转
        • 3.3 管理后台
    • 【流程】出差、费用报销
    • 【流程】考勤、请假、加班、转正与离职
    • 移动端 OA
  • IM即时通讯手册

    • IM 演示
    • 功能开启
    • 【好友】好友关系、好友申请
    • 【群聊】群组、群成员、入群申请
    • 【消息】私聊、群聊、频道消息
    • 【频道】频道、频道素材
    • 【内容】表情、敏感词
    • 【通话】语音通话、视频通话、共享屏幕
    • 【WebSocket】实时推送与离线消息
    • 移动端 IM 即时通讯
  • 公众号手册

    • 功能开启
    • 公众号接入
    • 公众号粉丝
    • 公众号标签
    • 公众号消息
    • 模版消息
    • 自动回复
    • 公众号菜单
    • 公众号素材
    • 公众号图文
    • 公众号统计
    • 移动端公众号管理
  • 系统手册

    • 短信配置
    • 邮件配置
    • 站内信配置
    • Webhook(钉钉、飞书、企微)
    • 数据脱敏
    • 敏感词
    • 地区 & IP 库
  • 运维手册

    • 开发环境
    • Linux 部署
    • Docker 部署
    • Jenkins 部署
    • 宝塔部署
    • 1Panel 部署
    • HTTPS 证书
    • 服务监控
  • 前端手册 Vue 3

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • CRUD 组件
    • 国际化
    • IDE 调试
    • 代码格式化
  • 前端手册 Vben 5

    • 开发规范
    • 菜单路由
    • 图标、主题、国际化
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • IDE 调试
    • 代码格式化
  • 前端手册 Vue 2

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
  • 前端手册 Admin Uniapp

    • 开发规范
    • 菜单路由
    • 图标、主题、国际化
    • 字典数据
    • 系统组件
    • 通用方法
    • IDE 调试
    • 代码格式化
    • 运行发布
  • 更新日志

    • 【v2026-08】
    • 【v2026-07】
    • 【v2026-06】
    • 【v2026-05】
    • 【v2026-04】
    • 【v2026-03】
    • 【v2026-01】
    • 【v2025-12】
    • 【v2025-11】
    • 【v2025-10】
    • 【v2025-09】
    • 【v2025-08】
  • 开发指南
  • OA协同办公
芋道源码
2026-09-17
目录

【流程】公文管理

公文管理,由 yudao-module-oa 后端模块的 officialdoc 包实现,前端实现在 @/views/oa/officialdoc/template、@/views/oa/officialdoc/send、@/views/oa/officialdoc/receive 目录。

公文管理按「套红模板 → 公文发文 → 公文收文」组织。发文走 BPM 审批,通过后按主送、抄送部门生成收文;主送收文需签收并走办理审批,抄送仅知会、不发起流程。

本文涉及表如下图所示:

公文管理表关系

# 1. 套红模板

套红模板,由 OaOfficialDocTemplateController 提供接口(/oa/officialdoc-template)。

# 1.1 表结构

省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段

套红模板表 oa_official_doc_template,保存公文红头的发文机关、字号前缀、字体和印章图片:

CREATE TABLE `oa_official_doc_template` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `name` varchar(128) NOT NULL COMMENT '模板名称',
  `authority_name` varchar(255) NOT NULL COMMENT '红头名称',
  `font_size` int NOT NULL COMMENT '红头名称字号',
  `no_prefix` varchar(64) DEFAULT NULL COMMENT '发文字号前缀',

  `seal_pic_url` varchar(2048) DEFAULT NULL COMMENT '印章图片地址',
  `separator_type` int NOT NULL COMMENT '分隔线类型',

  `status` int NOT NULL COMMENT '状态',
  `sort` int NOT NULL COMMENT '显示顺序',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='套红模板';

① 模板保存发文机关名称(authority_name)、字号前缀、字体大小和分隔线样式。发文选择启用模板后,正文与正式公文文件保存在发文单中,不会随模板后续修改联动已存发文。

② seal_pic_url 是平台图片上传得到的 URL,不关联印章台账 oa_seal 的 id 字段,与用印管理无关。

③ 枚举 separator_type 分隔线类型,对应字典 oa_official_doc_separator_type:

值 说明
0 单线
1 双线

④ status 使用通用启用、停用状态(CommonStatusEnum):0 开启、1 关闭。发文提交时由 validateOfficialDocTemplate 校验,停用模板不能用于新增发文,抛出 OFFICIAL_DOC_TEMPLATE_DISABLED 异常。

# 1.2 管理后台

对应 [OA 办公协同 -> 公文管理 -> 套红模板] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/oa/officialdoc/template 目录。

# 列表

管理后台 - 套红模板

# 新增与修改

点击【新增】打开 OaOfficialDocTemplateForm.vue,填写模板名称、发文机关、字号前缀、字体大小和印章图片,设置状态及排序后保存。

管理后台 - 套红模板表单

# 停用与删除

停用模板后不再用于新增发文选择。删除模板不删除已关联的发文记录。

# 2. 公文发文

公文发文,由 OaOfficialDocSendController 提供接口(/oa/officialdoc-send)。

# 2.1 表结构

省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段

公文发文表 oa_official_doc_send,保存发文的标题、字号、密级、主送抄送部门和审批状态:

CREATE TABLE `oa_official_doc_send` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `no` varchar(64) DEFAULT NULL COMMENT '单据编号',
  `template_id` bigint NOT NULL COMMENT '套红模板编号',
  `title` varchar(255) NOT NULL COMMENT '标题',

  `no_prefix` varchar(64) DEFAULT NULL COMMENT '发文字号前缀',
  `year` int DEFAULT NULL COMMENT '发文年度',
  `sequence` int DEFAULT NULL COMMENT '发文序号',
  `document_no` varchar(64) DEFAULT NULL COMMENT '公文文号',

  `secrecy_level` int NOT NULL COMMENT '密级',
  `urgency_level` int NOT NULL COMMENT '紧急程度',
  `disclosure_type` int NOT NULL COMMENT '公开类别',
  `issue_time` datetime NOT NULL COMMENT '发文时间',

  `send_dept_id` bigint NOT NULL COMMENT '发文部门编号',
  `main_dept_ids` json NOT NULL COMMENT '主送部门编号列表',
  `copy_dept_ids` json DEFAULT NULL COMMENT '抄送部门编号列表',
  `signer_user_id` bigint DEFAULT NULL COMMENT '签发人用户编号',

  `content` text COMMENT '正文',
  `file_urls` json DEFAULT NULL COMMENT '附件地址列表',
  `formal_file_url` varchar(2048) DEFAULT NULL COMMENT '正式公文地址',
  `remark` varchar(500) DEFAULT NULL COMMENT '附注',

  `status` int DEFAULT NULL COMMENT '审批状态',
  `process_instance_id` varchar(64) DEFAULT NULL COMMENT 'BPM 流程实例编号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='公文发文';

① template_id 关联 oa_official_doc_template 表的 id 字段;send_dept_id 关联 system_dept 表的 id 字段。signer_user_id 关联 system_users 表的 id 字段,DO / 响应 VO 有该字段,但 OaOfficialDocSendSaveReqVO 未暴露,创建与更新接口不能写入签发人。

② 业务单号 no 由 OaNoRedisDAO 以 FW 为前缀生成(如 FW20260913000001),与正式公文字号 document_no 分别保存。document_no 是冗余组合字段,由 buildOfficialDocSendDocumentNo 按「前缀 + 〔年度〕 + 序号 + 号」拼成,例如 测试〔2026〕1号;三段均可为空,缺省时对应片段直接省略。

③ main_dept_ids、copy_dept_ids 以 JSON 数组保存部门编号;file_urls 是其他附件,formal_file_url 是正式公文地址,不能混为同一个字段。JSON 结构如下:

main_dept_ids / copy_dept_ids(部门编号列表)与 file_urls(附件)

主送、抄送部门是 List<Long>,库中存为 JSON 数组;主送不能为空,抄送可空:

{
  "main_dept_ids": [10, 11],
  "copy_dept_ids": [12]
}

file_urls 是附件地址列表:

["https://example.com/attachment.pdf"]

④ 枚举字段对应字典:

字段 字典 取值
secrecy_level oa_official_doc_secret_level 0 公开 / 1 内部 / 2 秘密 / 3 机密 / 4 绝密
urgency_level oa_official_doc_urgency_level 0 普通 / 1 急件 / 2 特急
disclosure_type oa_official_doc_public_category 0 主动公开 / 1 依申请公开 / 2 不予公开

⑤ status 是 BPM 审批状态,process_instance_id 关联流程实例。详见 §2.2 状态流转。发文审批通过后,按主送、抄送部门生成收文,oa_official_doc_receive.send_id 关联原发文。

# 2.2 状态流转

发文审批状态由 OaOfficialDocSendServiceImpl 与 BPM 共同控制,status 复用 BpmProcessInstanceStatusEnum,对应字典 bpm_process_instance_status(字典数据通常不含 -1,-1 仅表示业务侧尚未发起流程的草稿):

状态值 枚举 说明 可执行操作
-1 NOT_START 未开始(草稿) 编辑、删除、提交
1 RUNNING 审批中 撤销
2 APPROVE 审批通过 —(已生成收文)
3 REJECT 审批不通过 —
4 CANCEL 已取消 —

流程定义 Key 为 oa_official_doc_send(BpmModelConstants.OFFICIAL_DOC_SEND)。

状态流转说明

新增发文 ──→ 草稿(-1) ──提交──→ 审批中(1) ──┬──通过──→ 审批通过(2) → 按主送/抄送生成收文
              ↑                              ├──不通过──→ 审批不通过(3)
              └──── 仅草稿可改 ───────────────┴──撤销──→ 已取消(4)
  • 创建 / 修改(createOfficialDocSend / updateOfficialDocSend):状态固定为 未开始(-1)。只有草稿可以修改和删除,由本人操作校验。
  • 提交(submitOfficialDocSend):草稿(-1) → 审批中(1),发起 oa_official_doc_send 流程,businessKey = id。提交前再次校验模板启用与部门合法。
  • 撤销(cancelOfficialDocSend):仅 审批中(1) 可调用,原因文案为「申请人撤销公文发文」,终态由 BPM 事件回写为 已取消(4)。
  • 审批回调(updateOfficialDocSendStatus,监听器 OaOfficialDocSendStatusListener):若当前已非 审批中(1) 则直接返回,避免重复生成收文;审批通过(2) 时调用 createOfficialDocReceiveListByOfficialDocSend,按 main_dept_ids 生成主送收文、按 copy_dept_ids 生成抄送收文(同部门同类型不重复)。

# 2.3 管理后台

对应 [OA 办公协同 -> 公文管理 -> 公文发文] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/oa/officialdoc/send 目录。

# 列表

管理后台 - 公文发文

# 新增与修改

点击【新增】打开 OaOfficialDocSendForm.vue,选择模板,填写标题、发文字号、密级、紧急程度、公开类别、日期、发文部门、主送和抄送部门及正文,上传正式公文和附件后保存。

管理后台 - 公文发文表单

# 提交与撤销

在列表点击【提交】,调用 POST /oa/officialdoc-send/submit 发起 oa_official_doc_send 流程;审批中可撤销,调用 PUT /oa/officialdoc-send/cancel。未提交草稿可以修改、删除。

# 查看详情

点击单据进入 @/views/oa/officialdoc/send/detail/index.vue,查看发文内容、正式公文、附件和审批状态。审批进度复用 BPM 流程详情。

管理后台 - 公文发文详情

# 3. 公文收文

公文收文,由 OaOfficialDocReceiveController 提供接口(/oa/officialdoc-receive)。

# 3.1 表结构

省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段

公文收文表 oa_official_doc_receive,保存来文登记、签收和办理情况,可关联内部发文:

CREATE TABLE `oa_official_doc_receive` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',

  `no` varchar(64) DEFAULT NULL COMMENT '单据编号',
  `send_id` bigint DEFAULT NULL COMMENT '来源发文编号,手工收文为空',
  `receive_type` int NOT NULL COMMENT '收文类型',

  `title` varchar(255) DEFAULT NULL COMMENT '标题',
  `document_no` varchar(64) DEFAULT NULL COMMENT '来文字号',
  `secrecy_level` int DEFAULT NULL COMMENT '密级',
  `urgency_level` int DEFAULT NULL COMMENT '紧急程度',
  `receive_time` datetime DEFAULT NULL COMMENT '收文时间',

  `receive_dept_id` bigint NOT NULL COMMENT '收文部门编号',
  `handler_user_id` bigint DEFAULT NULL COMMENT '主办人用户编号',

  `instruction` text COMMENT '领导批示',
  `result` text COMMENT '办理结果',
  `deadline_time` datetime DEFAULT NULL COMMENT '办理期限',
  `summary` text COMMENT '内容摘要',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',

  `file_urls` json DEFAULT NULL COMMENT '附件地址列表',
  `formal_file_url` varchar(2048) DEFAULT NULL COMMENT '正式公文地址',

  `handle_status` int DEFAULT NULL COMMENT '办理状态',
  `status` int DEFAULT NULL COMMENT '审批状态',
  `process_instance_id` varchar(64) DEFAULT NULL COMMENT 'BPM 流程实例编号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='公文收文';

① 收文可以由发文审批通过后自动生成,也可以手工登记。自动生成的收文通过 send_id 关联 oa_official_doc_send 表的 id 字段,手工收文该字段为空。业务单号 no 以 SW 为前缀生成。

② receive_dept_id 关联 system_dept 表的 id 字段,handler_user_id 关联 system_users 表的 id 字段。分页按当前用户所属部门过滤 receive_dept_id。

③ 枚举 receive_type 收文类型(OaOfficialDocReceiveTypeEnum),对应字典 oa_official_doc_receive_type:

值 枚举 说明
0 MAIN 主送(需办理,可提交 BPM)
1 COPY 抄送(仅知会,禁止提交审批)

④ handle_status 是办理状态,与 BPM 审批状态 status 分别维护。详见 §3.2 状态流转。

⑤ 由发文自动生成的收文,file_urls、formal_file_url 在编辑时只读,不可通过 update 替换或清空。

# 3.2 状态流转

收文同时维护两套状态:

办理状态 handle_status(OaOfficialDocHandleStatusEnum),对应字典 oa_official_doc_handle_status:

状态值 枚举 说明 可执行操作
0 WAIT_CLAIM 待签收 本部门签收
1 CLAIMED 已签收 填写办理资料、主送可提交
2 PROCESSING 办理中 撤销审批
3 COMPLETED 已办结 —

审批状态 status 同样复用 BpmProcessInstanceStatusEnum / 字典 bpm_process_instance_status(-1/1/2/3/4,字典通常无 -1)。流程定义 Key 为 oa_official_doc_receive。仅主送(receive_type = 0)走 BPM;抄送不审批。

状态流转说明

【自动投递】发文通过 → 待签收(0) ──签收──→ 已签收(1) ──主送提交──→ 办理中(2)+审批中(1)
                                                              ├──通过──→ 已办结(3)+审批通过(2)
                                                              ├──不通过──→ 已签收(1)+审批不通过(3)
                                                              └──撤销──→ 已签收(1)+已取消(4)

【抄送】待签收 → 签收 → 已签收(不发起流程)
【手工收文】直接归属创建人,receive_type 强制主送,不能签收接口
  • 签收(claimOfficialDocReceive):要求 send_id 非空、creator 为空、handle_status = 待签收(0),且当前用户部门等于 receive_dept_id。效果:handle_status → 已签收(1),creator 写入当前用户;不修改 handler_user_id、receive_time。
  • 提交(submitOfficialDocReceive):仅主送可提交;status → 审批中(1),handle_status → 办理中(2)。抄送提交抛出 OFFICIAL_DOC_STATUS_INVALID。
  • 审批回调(updateOfficialDocReceiveStatus,监听器 OaOfficialDocReceiveStatusListener):审批通过(2) → handle_status = 已办结(3);驳回、取消等其他终态 → handle_status 回退为 已签收(1)。

# 3.3 管理后台

对应 [OA 办公协同 -> 公文管理 -> 公文收文] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/oa/officialdoc/receive 目录。

# 新增与签收

外来公文可通过【新增】打开 OaOfficialDocReceiveForm.vue 手工登记;由发文生成的待签收记录,通过【签收】调用 PUT /oa/officialdoc-receive/claim。

管理后台 - 公文收文

# 办理与提交

填写收文部门、主办人、领导批示、办理期限、办理结果和附件等资料。保存后在列表点击【提交】,调用 POST /oa/officialdoc-receive/submit 发起 oa_official_doc_receive 流程。收文来源与办理状态会影响可执行操作。

管理后台 - 公文收文办理

# 查看关联发文

进入 @/views/oa/officialdoc/receive/detail/index.vue 查看收文资料。自动生成的收文显示关联发文,可点击【查看关联发文】;手工收文展示自身填写的资料和文件。

【行政】会议室、车辆管理
【流程】出差、费用报销

← 【行政】会议室、车辆管理 【流程】出差、费用报销→

Theme by Vdoing | Copyright © 2019-2026 芋道源码 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×