Skip to content
本页目录

EDMS 电子公文管理系统

电子公文管理系统,主要针对于公文方面的一些业务,包括首页、公文流转、字号管理、公文收藏、公文检索、外出授权、流经部门文件、收发文登记、公文干预、流程管理等公文中所有操作基本都来自这里

功能范围

序号子平台说明
1首页首页卡片展示
2公文流转实现公文在单位内部的流转控制
3字号管理收发文字号管理
4公文收藏用户可以把公文放入自己的收藏文件夹便于下次查找
5公文检索所有流转的公文可以在此菜单中进行各种条件检索快速锁定符合要求的公文数据
6外出授权对于有外出的人员可以将自己外出这段时间的工作授权给其他人,比如A->B, A不在的这段时间B可以接替A继续进行工作审批
7流经部门文件这个相对于上面的公文检索而言,范围缩小到对所有经过本部门的公文进行全局查询
8收发文登记这个主要是用来进行公文的交换,比如省厅财政局,市政府等无论是横向还是纵向的单位进行公文交换都可以在这里处理,别人发给本单位的公文可以在这里收,自己单位的公文也可以发出去,满足文件交换的需求
9公文干预主要针对一些特殊的情况的处理,公文修订比如流程已经走完了,想修改文号、意见、附件等一些基本的属性,还有更复杂比如想加签、减签、流程转向等,公文干预是对已经处理的公文的一些功能的一些弥补措施,请不要随意使用
10流程管理是公文流程的可视化展示,可以便捷的通过界面上的方式来修改流程,增加修改流程节点,变更经办人,控制属性显示隐藏,操作按钮,配置自定义服务等

版本

v5.0.6,发布于2023年8月31日

更新内容

本版本是FOA基于MAS、LOCAS、FIS结构发布的第一个版本。

LOCAS详情参考:http://docs.zktx-soft.com/release/locas/v2_4.html

FIS 详请参考:http://docs.zktx-soft.com/release/fis/v2_0.html

新增

以下所有模块都是基于mas版首次更新

  • 增加首页
  • 增加公文流转
  • 增加字号管理
  • 增加公文收藏
  • 增加公文检索
  • 增加外出授权
  • 增加流经部门文件
  • 增加收发文登记
  • 增加公文干预
  • 增加流程管理

平台基座要求

  • [MAS >= v5.9.9]
  • [LOCAS >= v2.3]
  • [FIS >= v2.0]

微应用版本明细

序号微应用Code版本号更新说明
1foa-odocfoa-odocrelease-5.0.6
2foa-flowfoa-flowrelease-5.0.6
3foa-docrsfoa-docrsrelease-5.0.6
4foa-configfoa-configrelease-5.0.6
5foa-archivesfoa-archivesrelease-5.0.6

微服务版本明细

序号微应用Code版本号更新说明
1公文流转foa5-gwlz5.0.7
2收发文登记foa5-doc-register5.0.7
3字号管理foa5-symbol5.0.7
4外出授权foa5-out-grant5.0.7
5部门文件foa5-doc-dep-search5.0.7
6文件收藏foa5-doc-favorite5.0.7
7公文搜索foa5-doc-search5.0.7
8省厅文件foa5-plugin-stoa5.0.7
9工作流foa5-vue-workflow5.0.7
10规则表达式foa5-regular-expression5.0.7
11JEXL表达式foa5-jexl-expression5.0.7
12省厅公文卡片foa5-card-stoa5.0.7
13公文卡片foa5-card-stoa5.0.7
14全省版公文卡片foa5-card-qs5.0.7

数据库升级

因用户管理变更为uom服务,数据库数据需要变更,因为公文系统已经在用需要处理历史数据,并且因为uom服务由财政大脑,财政预算,公文系统共同使用,为了减少对公文的影响,需要将原来uom已经初始化的数据都搬进foa的业务库里面,处理数据之前请务必备份原来的数据库,备份,备份,一定要备份。处理的脚步比较多,请一段一段,涉及存储过程的请用pgadmin软件执行,否则会报错。

  • 第一步:修改原数据库表名
sql
--修改前备份一下 cos_admin_role_info和cos_admin_role_mapping的数据
-- cos_admin_role_mapping -> cos_user_role_mapping
-- cos_admin_role_info   -> cos_user_role_info
-- 修改表名表名前请务必先备份数据
ALTER TABLE cos_admin_role_info RENAME TO cos_user_role_info;

ALTER TABLE cos_admin_role_mapping RENAME TO cos_user_role_mapping;
  • 第二步:sql处理历史数据
sql
--参数:tenant是三门租户的tenant的id,不要弄错了
select c_id from cos_admin_tenant_info t where t.c_code='sm';

-- 迁移数据开始 
alter table  cos_dd_organizations add c_old_oid int8;

UPDATE cos_dd_organizations dd
SET dd.c_old_oid = b.c_id
FROM cos_admin_org b
WHERE dd.c_organization_code=b.c_code 
and  dd.c_tenant_id=:tenant 
and b.c_tenant_id=:tenant;

-- cos_odoc_document 更新业务表
-- 备份旧数据
alter table  cos_odoc_document add c_oid_bak VARCHAR(255);

select d.c_id,d.c_title,d.c_creator_org,d.c_oid_bak from cos_odoc_document d ;
-- 备份旧数据
update cos_odoc_document set c_oid_bak=c_creator_org;

UPDATE cos_odoc_document dd
SET dd.c_creator_org = b.c_id
FROM cos_dd_organizations b
WHERE dd.c_creator_org=b.c_old_oid 
and dd.c_tenant_id=:tenant 
and b.c_tenant_id=:tenant;

--迁移主办处室
alter table  cos_odoc_document add c_main_dept_id_bak VARCHAR(255);

select d.c_id,d.c_title,d.c_creator_org,d.c_main_dept_id,d.c_main_dept_id_bak from cos_odoc_document d ;
-- 备份旧数据
update cos_odoc_document set c_main_dept_id_bak=c_main_dept_id;

UPDATE cos_odoc_document dd
SET dd.c_main_dept_id = b.c_id
FROM cos_dd_organizations b
WHERE dd.c_main_dept_id=b.c_old_oid 
and dd.c_tenant_id=:tenant 
and b.c_tenant_id=:tenant;

-- 更新cos_user_role_mapping
-- 备份旧数据
alter table  cos_user_role_mapping add c_oid_bak int8;

select * from cos_user_role_mapping d ;
-- 备份旧数据
update cos_user_role_mapping set c_oid_bak=c_org_id;

UPDATE cos_user_role_mapping dd
SET dd.c_org_id = b.c_id
FROM cos_dd_organizations b
WHERE dd.c_org_id=b.c_old_oid 
and dd.c_tenant_id=:tenant 
and b.c_tenant_id=:tenant;

-- 更新cos_odoc_pass
-- 备份旧数据
alter table  cos_odoc_pass add c_passed_org_id_bak int8;

select * from cos_odoc_pass d ;
-- 备份旧数据
update cos_odoc_pass set c_passed_org_id_bak=c_passed_org_id;

select * from cos_odoc_pass d ;

UPDATE cos_odoc_pass dd
SET dd.c_passed_org_id = b.c_id
FROM cos_dd_organizations b
WHERE dd.c_passed_org_id=b.c_old_oid 
and dd.c_tenant_id=:tenant 
and b.c_tenant_id=:tenant;

-- select * from cos_odoc_related_file;   c_org_id

-- 更新cos_odoc_related_file
-- 备份旧数据
alter table  cos_odoc_related_file add c_org_id_bak VARCHAR(100);

select * from cos_odoc_related_file d ;
-- 备份旧数据
update cos_odoc_related_file set c_org_id_bak=c_org_id;

select * from cos_odoc_related_file d ;

UPDATE cos_odoc_related_file dd
SET dd.c_org_id = b.c_id
FROM cos_dd_organizations b
WHERE dd.c_org_id=b.c_old_oid 
and dd.c_tenant_id=:tenant 
and b.c_tenant_id=:tenant;

-- 更新cos_odoc_symbol
-- 备份旧数据
alter table  cos_odoc_symbol add c_dept_id_bak INT8;

select * from cos_odoc_symbol d ;
-- 备份旧数据
update cos_odoc_symbol set c_dept_id_bak=c_dept_id;

select * from cos_odoc_symbol d ;

UPDATE cos_odoc_symbol dd
SET dd.c_dept_id = b.c_id
FROM cos_dd_organizations b
WHERE dd.c_dept_id=b.c_old_oid 
and dd.c_tenant_id=:tenant 
and b.c_tenant_id=:tenant;

-- 更新cos_odoc_rwfj_status
-- 备份旧数据
alter table  cos_odoc_rwfj_status add c_dpid_bak VARCHAR(100);

select * from cos_odoc_rwfj_status d ;
-- 备份旧数据
update cos_odoc_rwfj_status set c_dpid_bak=c_dpid;

select * from cos_odoc_rwfj_status d ;

UPDATE cos_odoc_rwfj_status dd
SET dd.c_dpid = b.c_id
FROM cos_dd_organizations b
WHERE dd.c_dpid=b.c_old_oid 
and dd.c_tenant_id=:tenant 
and b.c_tenant_id=:tenant;

-- 更新cos_odoc_flow_log   c_submitor_dept_id   
-- 备份旧数据
alter table  cos_odoc_flow_log add c_submitor_dept_id_bak VARCHAR(100);

select * from cos_odoc_flow_log d ;
-- 备份旧数据
update cos_odoc_flow_log set c_submitor_dept_id_bak=c_submitor_dept_id;

-- 查询 
select d.c_id,d.c_submitor_dept,d.c_submitor_dept_id,d.c_submitor_dept_id_bak,d.c_executor,d.c_executor_bak 
from cos_odoc_flow_log d ;

UPDATE cos_odoc_flow_log dd
SET dd.c_submitor_dept_id = b.c_id
FROM cos_dd_organizations b
WHERE dd.c_submitor_dept_id=b.c_old_oid 
and dd.c_tenant_id=:tenant 
and b.c_tenant_id=:tenant;
  • 第三步:存储过程处理历史数据
sql
--参数:tenant是三门租户的tenant的id,不要弄错了
--参数:jfwcode对应局发文的公文code
--参数:dzggcode对应电子公告的公文code
select c_id from cos_admin_tenant_info t where t.c_code='sm';

--  cos_odoc_flow_log
-- 备份旧数据
alter table  cos_odoc_flow_log add c_executor_bak VARCHAR(255);

select d.c_executor,d.c_executor_bak from cos_odoc_flow_log d ;
-- 备份旧数据
update cos_odoc_flow_log set c_executor_bak=c_executor;
-- c_executor 替换
CREATE OR REPLACE PROCEDURE replate_data_flow_log
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc; 
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE cos_odoc_flow_log SET c_executor = regexp_replace(c_executor, '-'|| v_item.c_old_oid||',', '-'||v_item.c_id||',', 'g') where c_tenant_id=:tenant;
	END LOOP;
END replate_data_flow_log;

--执行
exec replate_data_flow_log();


-- 更新Act_Hi_Taskinst
-- 备份旧数据
alter table  Act_Hi_Taskinst add assignee_bak VARCHAR(255);

select * from Act_Hi_Taskinst d ;
-- 备份旧数据
update Act_Hi_Taskinst set assignee_bak=assignee_;

-- Act_Hi_Taskinst assignee_
CREATE OR REPLACE PROCEDURE replate_data_Hi_Taskinst
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc; 
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE Act_Hi_Taskinst SET assignee_ = regexp_replace(assignee_, '-'|| v_item.c_old_oid, '-'||v_item.c_id, 'g') where tenant_id_=:tenant;
	END LOOP;
END replate_data_Hi_Taskinst;

--执行
exec replate_data_Hi_Taskinst();


-- act_ru_task
alter table  act_ru_task add assignee_bak VARCHAR(255);

select * from act_ru_task d ;
-- 备份旧数据
update act_ru_task set assignee_bak=assignee_;

select d.assignee_,d.assignee_bak from act_ru_task d ;

--assignee_
CREATE OR REPLACE PROCEDURE replate_data_ru_task
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc;  
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE act_ru_task SET assignee_ = regexp_replace(assignee_, '-'|| v_item.c_old_oid, '-'||v_item.c_id, 'g') where tenant_id_=:tenant;
	END LOOP;
END replate_data_ru_task;

--执行
exec replate_data_ru_task();

-- 更新act_ru_actinst
-- 备份旧数据
alter table  act_ru_actinst add assignee_bak VARCHAR(255);

select d.assignee_,d.assignee_bak from act_ru_actinst d ;
-- 备份旧数据
update act_ru_actinst set assignee_bak=assignee_;

select d.assignee_,d.assignee_bak from act_ru_actinst d ;

--assignee_
CREATE OR REPLACE PROCEDURE replate_data_ru_actinst
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc; 
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE act_ru_actinst SET assignee_ = regexp_replace(assignee_, '-'|| v_item.c_old_oid, '-'||v_item.c_id, 'g') where tenant_id_=:tenant;
	END LOOP;
END replate_data_ru_actinst;

--执行
exec replate_data_ru_actinst();


-- 更新 cos_odoc_group
alter table  cos_odoc_group add c_persons_bak text;

select c_persons,c_persons_bak from cos_odoc_group d ;
-- 备份旧数据
update cos_odoc_group set c_persons_bak=c_persons;

--c_persons
CREATE OR REPLACE PROCEDURE replate_data_odoc_group
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc;  
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE cos_odoc_group SET c_persons = regexp_replace(c_persons, '-'|| v_item.c_old_oid, '-'||v_item.c_id, 'g') where c_tenant_id=:tenant;
	END LOOP;
END replate_data_odoc_group;

--执行
exec replate_data_odoc_group();



-- 更新 cos_odoc_pulish_group
alter table  cos_odoc_pulish_group add c_account_ids_bak text;

select c_account_ids,c_account_ids_bak from cos_odoc_pulish_group d ;
-- 备份旧数据
update cos_odoc_pulish_group set c_account_ids_bak=c_account_ids;

--c_account_ids
CREATE OR REPLACE PROCEDURE replate_data_pulish_group
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc; 
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE cos_odoc_pulish_group SET c_account_ids = regexp_replace(c_account_ids, '-'|| v_item.c_old_oid, '-'||v_item.c_id, 'g')  where c_tenant_id=:tenant;
	END LOOP;
END replate_data_pulish_group;

--执行
exec replate_data_pulish_group();

-- 更新cos_odoc_flow_advice
-- 备份旧数据
alter table  cos_odoc_flow_advice add c_owner_bak VARCHAR(255);

select c_owner,c_owner_bak from cos_odoc_flow_advice d ;
-- 备份旧数据
update cos_odoc_flow_advice set c_owner_bak=c_owner;
-- 查询 
select c_owner,c_owner_bak from cos_odoc_flow_advice d ;
-- c_owner
CREATE OR REPLACE PROCEDURE replate_data_flow_advice
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc;  
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE cos_odoc_flow_advice SET c_owner = regexp_replace(c_owner, '-'|| v_item.c_old_oid, '-'||v_item.c_id, 'g')  where c_tenant_id=:tenant;
	END LOOP;
END replate_data_flow_advice;

--执行
exec replate_data_flow_advice();

-- cos_odoc_favorite 更新公文收藏
alter table  cos_odoc_favorite add c_url_bak text;

select c_url,c_url_bak from cos_odoc_favorite where c_tenant_id=:tenant;
-- 备份旧数据
update cos_odoc_favorite set c_url_bak=c_url;

-- 查询 
select c_url,c_url_bak from cos_odoc_favorite where c_tenant_id=:tenant;

-- c_url  "mainDeptId":"561", "creatorOrg":"561",
CREATE OR REPLACE PROCEDURE replate_data_odoc_favorite
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc; 
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE cos_odoc_favorite SET c_url = regexp_replace(c_url, '"mainDeptId":"'|| v_item.c_old_oid||'",', '"mainDeptId":"'|| v_item.c_id||'",', 'g')  where c_tenant_id=:tenant;
		UPDATE cos_odoc_favorite SET c_url = regexp_replace(c_url, '"creatorOrg":"'|| v_item.c_old_oid||'",', '"creatorOrg":"'|| v_item.c_id||'",', 'g')  where c_tenant_id=:tenant;
	END LOOP;
END replate_data_odoc_favorite;

--执行
exec replate_data_odoc_favorite();


-- 迁移局发文会签单位
-- select c_string4 from cos_odoc_document where c_tenant_id=:tenant  and c_doc_code='fw-test' 
alter table  cos_odoc_document add c_string4_bak text;

select c_string4,c_string4_bak from cos_odoc_document where c_tenant_id=:tenant ;
-- 备份旧数据
update cos_odoc_document set c_string4_bak=c_string4;

-- 查询 
select c_string4,c_string4_bak from cos_odoc_document where c_tenant_id=:tenant ;

-- c_string4
CREATE OR REPLACE PROCEDURE replate_data_fw_hqdw
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc; 
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE cos_odoc_document SET c_string4 = regexp_replace(c_string4, v_item.c_old_oid,v_item.c_id, 'g')  where c_tenant_id=:tenant and c_doc_code=:jfwcode ;
	END LOOP;
END replate_data_fw_hqdw;

--执行
exec replate_data_fw_hqdw();

-- 迁移电子公告发布对象属性
-- select c_longtext1 from cos_odoc_document where c_tenant_id=:tenant  and c_doc_code='dzgg' 
alter table  cos_odoc_document add c_longtext1_bak text;

select c_longtext1,c_longtext1_bak from cos_odoc_document where c_tenant_id=:tenant  ;
-- 备份旧数据
update cos_odoc_document set c_longtext1_bak=c_longtext1;

-- 查询 
select c_longtext1,c_longtext1_bak from cos_odoc_document where c_tenant_id=:tenant  ;

-- c_longtext1
CREATE OR REPLACE PROCEDURE replate_data_dzgg_pub
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc; 
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE cos_odoc_document SET c_longtext1 = regexp_replace(c_longtext1, '-'|| v_item.c_old_oid,'-'|| v_item.c_id, 'g')  where c_tenant_id=:tenant and c_doc_code=:dzggcode;
	END LOOP;
END replate_data_dzgg_pub;

--执行
exec replate_data_dzgg_pub();

-- act_hi_actinst
-- 备份旧数据
alter table  act_hi_actinst add assignee_bak VARCHAR(255);

select d.assignee_,d.assignee_bak from act_hi_actinst d ;
-- 备份旧数据
update act_hi_actinst set assignee_bak=assignee_;

select d.assignee_,d.assignee_bak from act_hi_actinst d ;

--assignee_
CREATE OR REPLACE PROCEDURE replate_data_hi_actinst
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc; 
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE act_hi_actinst SET assignee_ = regexp_replace(assignee_, '-'|| v_item.c_old_oid, '-'||v_item.c_id, 'g') where tenant_id_=:tenant;
	END LOOP;
END replate_data_hi_actinst;

--执行
exec replate_data_hi_actinst();

-- act_hi_identitylink
-- 备份旧数据
alter table  act_hi_identitylink add user_id_bak VARCHAR(255);

select d.user_id_,d.user_id_bak from act_hi_identitylink d ;
-- 备份旧数据
update act_hi_identitylink set user_id_bak=user_id_;

select d.user_id_,d.user_id_bak from act_hi_identitylink d ;

--user_id_
CREATE OR REPLACE PROCEDURE replate_data_hi_identitylink
IS
	CURSOR emp_cur IS
         select t.c_id,t.c_old_oid from cos_dd_organizations t where t.c_tenant_id=:tenant order by t.c_create_time asc; 
BEGIN
    
	for v_item  IN emp_cur loop 
	    UPDATE act_hi_identitylink SET user_id_ = regexp_replace(user_id_, '-'|| v_item.c_old_oid, '-'||v_item.c_id, 'g');
	END LOOP;
END replate_data_hi_identitylink;

--执行
exec replate_data_hi_identitylink();

内部资料,请勿外传