diff --git a/modules/core/db/core.erm b/modules/core/db/core.erm index 64e3b7a5..306608eb 100644 --- a/modules/core/db/core.erm +++ b/modules/core/db/core.erm @@ -11,8 +11,8 @@ 0 1.0 - 1232 - 988 + 2677 + 1945 128 128 @@ -3144,7 +3144,7 @@ clob - a70dd4133cc6302307f8a0ac828a6049c401db58 + 0fa4e2d76aa9a87670cb1345202c5fbc44183cfe 1 null false @@ -3154,8 +3154,8 @@ false false - 接受者类型(1用户 2部门 3角色 4岗位) - 接受者类型(1用户 2部门 3角色 4岗位) + 接受者类型(0全部 1用户 2部门 3角色 4岗位) + 接受者类型(0全部 1用户 2部门 3角色 4岗位) receive_type character(n) @@ -4153,8 +4153,8 @@ - ba99318947626ff9e4c0d0b58ec3bf4e7a260f75 - 7ef4520149693e59bda4b4f9a5d096b6e67a7097 + 8ea7ed753c560f6973c842ad64a3b10501a27877 + e7ba93bf87a67cd2a90abc01ef2d6c856405dc11 f285b2e9350856442d3f491d08a9f2f79f706a2b -1 -1 @@ -4241,7 +4241,7 @@ ffde396c7b349d700fe1b7891694ac538d00bf6d 22d38cfee95536d3e3af5fdd444b027a85d95432 - ba99318947626ff9e4c0d0b58ec3bf4e7a260f75 + 8ea7ed753c560f6973c842ad64a3b10501a27877 @@ -5729,13 +5729,13 @@ - 7ef4520149693e59bda4b4f9a5d096b6e67a7097 - 359 - 452 + e7ba93bf87a67cd2a90abc01ef2d6c856405dc11 + 438 + 548Segoe UI9 - 1610 - 468 + 1622 + 492 128 128 @@ -6059,7 +6059,7 @@ - cadeedfda6891fa00cbe3578c497d9cb94402772 + dedcc43c72ee436685481fa079d465594380905e 519d64ec10e7c0df51e0b14489d6666c04b93e34 a66af690ade469b3b4b472b1680bdc1923d5c972 -1 @@ -6124,7 +6124,7 @@ f385f23b1163beb8b239a67f5a262c83fb46cae6 5eecd1e4e1dc132da52de1bd1f59b13dd13a3587 - cadeedfda6891fa00cbe3578c497d9cb94402772 + dedcc43c72ee436685481fa079d465594380905e 所属消息 所属消息 @@ -12850,8 +12850,8 @@ - 034713cef6fc23366672cb01ceb39788739f3ada - 7ef4520149693e59bda4b4f9a5d096b6e67a7097 + 611309bafbfe0264d77a6bc7de24b53acfe213d6 + e7ba93bf87a67cd2a90abc01ef2d6c856405dc11 58be1ca8c00baf293ef16f69d782da2b79da6ec2 -1 -1 @@ -12882,7 +12882,7 @@ 7e2f59707205419c8556876dc854aeff0fbf7b57 22d38cfee95536d3e3af5fdd444b027a85d95432 - 034713cef6fc23366672cb01ceb39788739f3ada + 611309bafbfe0264d77a6bc7de24b53acfe213d6 控制角色编码 @@ -13231,565 +13231,6 @@
- - 519d64ec10e7c0df51e0b14489d6666c04b93e34 - 443 - 484 - Segoe UI - 9 - 2682 - 1950 - - 128 - 128 - 192 - - - - js_sys_msg_inner - 内部消息 - - - - - - - 869fc70cf3a4e92e8056b40814df8e03f9f9efde - 5eecd1e4e1dc132da52de1bd1f59b13dd13a3587 - - - - - varchar(n) - - - false - false - true - true - false - - - - - - - - - - - false - false - false - - - 0 - - - - a304841afc9968e7c8768979fe2ba3f2f315db78 - cbbb279fbb0f0ea5d67536332ce7d9a8b3d70e36 - - - - - varchar(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - a654ac8de54e8c19cfdba4bcf6d636ab760799b9 - 04c3905ff7bf6c16dbe32569f226a3cbaf2674fe - - - - - character(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 31410c3d884588423ca2a5803e78d0934412f458 - 10a8ef0d67bd3c9a90e9c67dc86953fefb8f8755 - - - - - character(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 98eb079aebd2f56c461cb92d97ab4d56f603b840 - 48bf7c9cb90d62b9cba0283d51bf94980e9fea92 - - - - - clob - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - a70dd4133cc6302307f8a0ac828a6049c401db58 - 5b256d59f963bf2a76cf35c847634b1188154874 - - - - - character(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 5797ae3ca5da40a8a45dfd0071f3589585c2517f - fe9b7e3236d284db50cb1d4cda9a77d1d8de40d2 - - - - - clob - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 86b915810d6436eb5c60062abbe4f8910c86f89c - b21a2db1cf685edc44c2bf252785aabc4cfb0794 - - - - - clob - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - c5364fcf3327275d038d229e22f80ce97c28d402 - b0959f0c2f737aa49188e57cc71afb3242e9e97b - - - - - varchar(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 949f48cec7229094875af06d5c3ee4e7efbba1e0 - 8d09d0b4b174964fb858b7ccb77ed9e14767de65 - - - - - varchar(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 5e197b7f106763a6952e72203fcc902cea793853 - d492c41633035ed8c33c89c5c704ef2dd5d7d32c - - - - - datetime - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - da74a37a1025119cd79a05644781c76b606352d3 - 0390e069a393fa7b2f2de0531b12470c299317f8 - - - - - character(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 81e89a36c985a9f69710177677cd7be6ed6ea089 - fd262e1d867fb854931a86728233eec74fc0099b - - - - - varchar(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 20092a8f08bbf1304383014693172e4fc863277d - 6d885df5f4956aeb6b228e769b8d037459d7a7d7 - - - - - character(n) - - - false - false - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - 85024a2953cf3e3c9c1cce49b2351853ab0d125b - - - - false - true - idx_sys_msg_inner_cb - - - - - e5355faba5ec3c9128507dd4c48ea9230631cf83 - false - - - - - false - true - idx_sys_msg_inner_status - - - - - 6d885df5f4956aeb6b228e769b8d037459d7a7d7 - false - - - - - false - true - idx_sys_msg_inner_cl - - - - - 04c3905ff7bf6c16dbe32569f226a3cbaf2674fe - false - - - - - false - true - idx_sys_msg_inner_sc - - - - - b0959f0c2f737aa49188e57cc71afb3242e9e97b - false - - - - - false - true - idx_sys_msg_inner_sd - - - - - d492c41633035ed8c33c89c5c704ef2dd5d7d32c - false - - - - - - - - - -
9ab9e19921654f64fedac3e4a117a6109afc4e41506 @@ -15848,13 +15289,13 @@
- 18ad211a33ec95af9104d9e6b843d74227b914ce + 2692f98d54cb6b15c3c537e3fda8eedf24bc9e19100321Segoe UI9 - 2076 - 1320 + 2064 + 1296 128 128 @@ -15862,9 +15303,9 @@ - 6a79d6669a1b4809994f42c602cb55c6f0651136 + cbde37ca64bc9ba898ee5f83f212c7f3163cdf5a f10bd927f4651e79dbe30cb0fecaeaeb8ec18ac4 - 18ad211a33ec95af9104d9e6b843d74227b914ce + 2692f98d54cb6b15c3c537e3fda8eedf24bc9e19 -1 -1 -1 @@ -15884,9 +15325,9 @@ null - 15ed391c4abb14bb54345a177fd0c39682f87e48 - 7ef4520149693e59bda4b4f9a5d096b6e67a7097 - 18ad211a33ec95af9104d9e6b843d74227b914ce + 61454f5c66b50fe69ecab419245b6c0011698f4b + e7ba93bf87a67cd2a90abc01ef2d6c856405dc11 + 2692f98d54cb6b15c3c537e3fda8eedf24bc9e19 -1 -1 -1 @@ -15916,7 +15357,7 @@ 136c2841a88ba120cd1f0bb13f7ba446474de69e 22d38cfee95536d3e3af5fdd444b027a85d95432 - 15ed391c4abb14bb54345a177fd0c39682f87e48 + 61454f5c66b50fe69ecab419245b6c0011698f4b @@ -15950,7 +15391,7 @@ 1882f53a36409270c8622486740876fcb2af9842 e84c40cdf5ffdb2ba4d59630d98abb5972d74795 - 6a79d6669a1b4809994f42c602cb55c6f0651136 + cbde37ca64bc9ba898ee5f83f212c7f3163cdf5a @@ -16332,6 +15773,565 @@
+ + 519d64ec10e7c0df51e0b14489d6666c04b93e34 + 443 + 484 + Segoe UI + 9 + 2682 + 1950 + + 128 + 128 + 192 + + + + js_sys_msg_inner + 内部消息 + + + + + + + 869fc70cf3a4e92e8056b40814df8e03f9f9efde + 5eecd1e4e1dc132da52de1bd1f59b13dd13a3587 + + + + + varchar(n) + + + false + false + true + true + false + + + + + + + + + + + false + false + false + + + 0 + + + + a304841afc9968e7c8768979fe2ba3f2f315db78 + cbbb279fbb0f0ea5d67536332ce7d9a8b3d70e36 + + + + + varchar(n) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + a654ac8de54e8c19cfdba4bcf6d636ab760799b9 + 04c3905ff7bf6c16dbe32569f226a3cbaf2674fe + + + + + character(n) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 31410c3d884588423ca2a5803e78d0934412f458 + 10a8ef0d67bd3c9a90e9c67dc86953fefb8f8755 + + + + + character(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 98eb079aebd2f56c461cb92d97ab4d56f603b840 + 48bf7c9cb90d62b9cba0283d51bf94980e9fea92 + + + + + clob + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 0fa4e2d76aa9a87670cb1345202c5fbc44183cfe + 5b256d59f963bf2a76cf35c847634b1188154874 + + + + + character(n) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 5797ae3ca5da40a8a45dfd0071f3589585c2517f + fe9b7e3236d284db50cb1d4cda9a77d1d8de40d2 + + + + + clob + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 86b915810d6436eb5c60062abbe4f8910c86f89c + b21a2db1cf685edc44c2bf252785aabc4cfb0794 + + + + + clob + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + c5364fcf3327275d038d229e22f80ce97c28d402 + b0959f0c2f737aa49188e57cc71afb3242e9e97b + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 949f48cec7229094875af06d5c3ee4e7efbba1e0 + 8d09d0b4b174964fb858b7ccb77ed9e14767de65 + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 5e197b7f106763a6952e72203fcc902cea793853 + d492c41633035ed8c33c89c5c704ef2dd5d7d32c + + + + + datetime + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + da74a37a1025119cd79a05644781c76b606352d3 + 0390e069a393fa7b2f2de0531b12470c299317f8 + + + + + character(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 81e89a36c985a9f69710177677cd7be6ed6ea089 + fd262e1d867fb854931a86728233eec74fc0099b + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 20092a8f08bbf1304383014693172e4fc863277d + 6d885df5f4956aeb6b228e769b8d037459d7a7d7 + + + + + character(n) + + + false + false + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + 85024a2953cf3e3c9c1cce49b2351853ab0d125b + + + + false + true + idx_sys_msg_inner_cb + + + + + e5355faba5ec3c9128507dd4c48ea9230631cf83 + false + + + + + false + true + idx_sys_msg_inner_status + + + + + 6d885df5f4956aeb6b228e769b8d037459d7a7d7 + false + + + + + false + true + idx_sys_msg_inner_cl + + + + + 04c3905ff7bf6c16dbe32569f226a3cbaf2674fe + false + + + + + false + true + idx_sys_msg_inner_sc + + + + + b0959f0c2f737aa49188e57cc71afb3242e9e97b + false + + + + + false + true + idx_sys_msg_inner_sd + + + + + d492c41633035ed8c33c89c5c704ef2dd5d7d32c + false + + + + + + + + + +
diff --git a/modules/core/db/db2/core.sql b/modules/core/db/db2/core.sql index 935a20ed..0a9c0737 100644 --- a/modules/core/db/db2/core.sql +++ b/modules/core/db/db2/core.sql @@ -481,13 +481,13 @@ CREATE TABLE js_sys_msg_inner content_type char(1), msg_content clob NOT NULL, receive_type char(1) NOT NULL, - receive_codes clob NOT NULL, - receive_names clob NOT NULL, - send_user_code varchar(64) NOT NULL, - send_user_name varchar(100) NOT NULL, - send_date timestamp NOT NULL, + receive_codes clob, + receive_names clob, + send_user_code varchar(64), + send_user_name varchar(100), + send_date timestamp, is_attac char(1), - notify_types varchar(100) NOT NULL, + notify_types varchar(100), status char(1) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, diff --git a/modules/core/db/mssql/core.sql b/modules/core/db/mssql/core.sql index 0cf1045d..593862fd 100644 --- a/modules/core/db/mssql/core.sql +++ b/modules/core/db/mssql/core.sql @@ -481,13 +481,13 @@ CREATE TABLE [js_sys_msg_inner] [content_type] char(1), [msg_content] text NOT NULL, [receive_type] char(1) NOT NULL, - [receive_codes] text NOT NULL, - [receive_names] text NOT NULL, - [send_user_code] varchar(64) NOT NULL, - [send_user_name] varchar(100) NOT NULL, - [send_date] datetime NOT NULL, + [receive_codes] text, + [receive_names] text, + [send_user_code] varchar(64), + [send_user_name] varchar(100), + [send_date] datetime, [is_attac] char(1), - [notify_types] varchar(100) NOT NULL, + [notify_types] varchar(100), [status] char(1) NOT NULL, [create_by] varchar(64) NOT NULL, [create_date] datetime NOT NULL, diff --git a/modules/core/db/mysql/core.sql b/modules/core/db/mysql/core.sql index 8725c462..cf0b337a 100644 --- a/modules/core/db/mysql/core.sql +++ b/modules/core/db/mysql/core.sql @@ -481,14 +481,14 @@ CREATE TABLE js_sys_msg_inner content_level char(1) NOT NULL COMMENT '内容级别(1普通 2一般 3紧急)', content_type char(1) COMMENT '内容类型(1公告 2新闻 3会议 4其它)', msg_content text NOT NULL COMMENT '消息内容', - receive_type char(1) NOT NULL COMMENT '接受者类型(1用户 2部门 3角色 4岗位)', - receive_codes text NOT NULL COMMENT '接受者字符串', - receive_names text NOT NULL COMMENT '接受者名称字符串', - send_user_code varchar(64) NOT NULL COMMENT '发送者用户编码', - send_user_name varchar(100) NOT NULL COMMENT '发送者用户姓名', - send_date datetime NOT NULL COMMENT '发送时间', + receive_type char(1) NOT NULL COMMENT '接受者类型(0全部 1用户 2部门 3角色 4岗位)', + receive_codes text COMMENT '接受者字符串', + receive_names text COMMENT '接受者名称字符串', + send_user_code varchar(64) COMMENT '发送者用户编码', + send_user_name varchar(100) COMMENT '发送者用户姓名', + send_date datetime COMMENT '发送时间', is_attac char(1) COMMENT '是否有附件', - notify_types varchar(100) NOT NULL COMMENT '通知类型(PC APP 短信 邮件 微信)多选', + notify_types varchar(100) COMMENT '通知类型(PC APP 短信 邮件 微信)多选', status char(1) NOT NULL COMMENT '状态(0正常 1删除 4审核 5驳回 9草稿)', create_by varchar(64) NOT NULL COMMENT '创建者', create_date datetime NOT NULL COMMENT '创建时间', diff --git a/modules/core/db/oracle/core.sql b/modules/core/db/oracle/core.sql index b29424e7..9943b4e1 100644 --- a/modules/core/db/oracle/core.sql +++ b/modules/core/db/oracle/core.sql @@ -481,13 +481,13 @@ CREATE TABLE js_sys_msg_inner content_type char(1), msg_content clob NOT NULL, receive_type char(1) NOT NULL, - receive_codes clob NOT NULL, - receive_names clob NOT NULL, - send_user_code varchar2(64) NOT NULL, - send_user_name varchar2(100) NOT NULL, - send_date timestamp NOT NULL, + receive_codes clob, + receive_names clob, + send_user_code varchar2(64), + send_user_name varchar2(100), + send_date timestamp, is_attac char(1), - notify_types varchar2(100) NOT NULL, + notify_types varchar2(100), status char(1) NOT NULL, create_by varchar2(64) NOT NULL, create_date timestamp NOT NULL, @@ -1252,7 +1252,7 @@ COMMENT ON COLUMN js_sys_msg_inner.msg_title IS '消息标题'; COMMENT ON COLUMN js_sys_msg_inner.content_level IS '内容级别(1普通 2一般 3紧急)'; COMMENT ON COLUMN js_sys_msg_inner.content_type IS '内容类型(1公告 2新闻 3会议 4其它)'; COMMENT ON COLUMN js_sys_msg_inner.msg_content IS '消息内容'; -COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(1用户 2部门 3角色 4岗位)'; +COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(0全部 1用户 2部门 3角色 4岗位)'; COMMENT ON COLUMN js_sys_msg_inner.receive_codes IS '接受者字符串'; COMMENT ON COLUMN js_sys_msg_inner.receive_names IS '接受者名称字符串'; COMMENT ON COLUMN js_sys_msg_inner.send_user_code IS '发送者用户编码'; diff --git a/modules/core/db/postgresql/core.sql b/modules/core/db/postgresql/core.sql index f7a01cf4..0a0403c5 100644 --- a/modules/core/db/postgresql/core.sql +++ b/modules/core/db/postgresql/core.sql @@ -481,13 +481,13 @@ CREATE TABLE js_sys_msg_inner content_type char(1), msg_content text NOT NULL, receive_type char(1) NOT NULL, - receive_codes text NOT NULL, - receive_names text NOT NULL, - send_user_code varchar(64) NOT NULL, - send_user_name varchar(100) NOT NULL, - send_date timestamp NOT NULL, + receive_codes text, + receive_names text, + send_user_code varchar(64), + send_user_name varchar(100), + send_date timestamp, is_attac char(1), - notify_types varchar(100) NOT NULL, + notify_types varchar(100), status char(1) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, @@ -1252,7 +1252,7 @@ COMMENT ON COLUMN js_sys_msg_inner.msg_title IS '消息标题'; COMMENT ON COLUMN js_sys_msg_inner.content_level IS '内容级别(1普通 2一般 3紧急)'; COMMENT ON COLUMN js_sys_msg_inner.content_type IS '内容类型(1公告 2新闻 3会议 4其它)'; COMMENT ON COLUMN js_sys_msg_inner.msg_content IS '消息内容'; -COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(1用户 2部门 3角色 4岗位)'; +COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(0全部 1用户 2部门 3角色 4岗位)'; COMMENT ON COLUMN js_sys_msg_inner.receive_codes IS '接受者字符串'; COMMENT ON COLUMN js_sys_msg_inner.receive_names IS '接受者名称字符串'; COMMENT ON COLUMN js_sys_msg_inner.send_user_code IS '发送者用户编码'; diff --git a/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerDao.java b/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerDao.java new file mode 100644 index 00000000..8c010032 --- /dev/null +++ b/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerDao.java @@ -0,0 +1,18 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ +package com.jeesite.modules.msg.dao; + +import com.jeesite.common.dao.CrudDao; +import com.jeesite.common.mybatis.annotation.MyBatisDao; +import com.jeesite.modules.msg.entity.MsgInner; + +/** + * 内部消息DAO接口 + * @author ThinkGem + * @version 2019-03-12 + */ +@MyBatisDao +public interface MsgInnerDao extends CrudDao { + +} \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerRecordDao.java b/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerRecordDao.java new file mode 100644 index 00000000..5a1e9c8a --- /dev/null +++ b/modules/core/src/main/java/com/jeesite/modules/msg/dao/MsgInnerRecordDao.java @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ +package com.jeesite.modules.msg.dao; + +import com.jeesite.common.dao.CrudDao; +import com.jeesite.common.mybatis.annotation.MyBatisDao; +import com.jeesite.modules.msg.entity.MsgInnerRecord; + +/** + * 内部消息发送记录表DAO接口 + * @author ThinkGem + * @version 2019-03-12 + */ +@MyBatisDao +public interface MsgInnerRecordDao extends CrudDao { + + /** + * 根据消息编号和接受者用户名更新读取状态 + */ + public void updateReadStatus(MsgInnerRecord msgInnerRecord); + +} \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/msg/entity/MsgInner.java b/modules/core/src/main/java/com/jeesite/modules/msg/entity/MsgInner.java new file mode 100644 index 00000000..faed61fb --- /dev/null +++ b/modules/core/src/main/java/com/jeesite/modules/msg/entity/MsgInner.java @@ -0,0 +1,214 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ +package com.jeesite.modules.msg.entity; + +import java.util.Date; + +import javax.validation.constraints.NotBlank; + +import org.hibernate.validator.constraints.Length; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jeesite.common.entity.DataEntity; +import com.jeesite.common.lang.DateUtils; +import com.jeesite.common.mybatis.annotation.Column; +import com.jeesite.common.mybatis.annotation.Table; +import com.jeesite.common.mybatis.mapper.query.QueryType; + +/** + * 内部消息Entity + * @author ThinkGem + * @version 2019-03-12 + */ +@Table(name="${_prefix}sys_msg_inner", alias="a", columns={ + @Column(name="id", attrName="id", label="编号", isPK=true), + @Column(name="msg_title", attrName="msgTitle", label="消息标题", queryType=QueryType.LIKE), + @Column(name="content_level", attrName="contentLevel", label="内容等级", comment="内容等级(1普通 2一般 3紧急)"), + @Column(name="content_type", attrName="contentType", label="内容类型", comment="内容类型(1公告 2新闻 3会议 4其它)"), + @Column(name="msg_content", attrName="msgContent", label="消息内容"), + @Column(name="receive_type", attrName="receiveType", label="接受者类型", comment="接受者类型(1用户 2部门 3角色 4岗位)"), + @Column(name="receive_codes", attrName="receiveCodes", label="接受者字符串"), + @Column(name="receive_names", attrName="receiveNames", label="接受者名称字符串", queryType=QueryType.LIKE), + @Column(name="send_user_code", attrName="sendUserCode", label="发送者用户编码"), + @Column(name="send_user_name", attrName="sendUserName", label="发送者用户姓名", queryType=QueryType.LIKE), + @Column(name="send_date", attrName="sendDate", label="发送时间"), + @Column(name="is_attac", attrName="isAttac", label="是否有附件"), + @Column(name="notify_types", attrName="notifyTypes", label="通知类型", comment="通知类型(PC APP 短信 邮件 微信)多选"), + @Column(includeEntity=DataEntity.class, comment="状态(0正常 1删除 4审核 5驳回 9草稿)"), + }, orderBy="a.update_date DESC" +) +public class MsgInner extends DataEntity { + + // 接受者类型(0所有 1用户 2部门 3角色 4岗位) + public static final String RECEIVE_TYPE_ALL = "0"; + public static final String RECEIVE_TYPE_USER = "1"; + public static final String RECEIVE_TYPE_OFFICE = "2"; + public static final String RECEIVE_TYPE_ROLE = "3"; + public static final String RECEIVE_TYPE_POST = "4"; + + // 内容级别(1普通 2一般 3紧急) + public static final String CONTENT_LEVEL_1 = "1"; + public static final String CONTENT_LEVEL_2 = "2"; + public static final String CONTENT_LEVEL_3 = "3"; + + private static final long serialVersionUID = 1L; + private String msgTitle; // 消息标题 + private String contentLevel; // 内容等级(1普通 2一般 3紧急) + private String contentType; // 内容类型(1公告 2新闻 3会议 4其它) + private String msgContent; // 消息内容 + private String receiveType; // 接受者类型(1用户 2部门 3角色 4岗位) + private String receiveCodes; // 接受者字符串 + private String receiveNames; // 接受者名称字符串 + private String sendUserCode; // 发送者用户编码 + private String sendUserName; // 发送者用户姓名 + private Date sendDate; // 发送时间 + private String isAttac; // 是否有附件 + private String notifyTypes; // 通知类型(PC APP 短信 邮件 微信)多选 + + private MsgInnerRecord record; // 消息记录状态 + + public MsgInner() { + this(null); + } + + public MsgInner(String id){ + super(id); + } + + @NotBlank(message="消息标题不能为空") + @Length(min=0, max=200, message="消息标题长度不能超过 200 个字符") + public String getMsgTitle() { + return msgTitle; + } + + public void setMsgTitle(String msgTitle) { + this.msgTitle = msgTitle; + } + + @NotBlank(message="内容级别不能为空") + @Length(min=0, max=1, message="内容级别长度不能超过 1 个字符") + public String getContentLevel() { + return contentLevel; + } + + public void setContentLevel(String contentLevel) { + this.contentLevel = contentLevel; + } + + @Length(min=0, max=1, message="内容类型长度不能超过 1 个字符") + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + @NotBlank(message="消息内容不能为空") + public String getMsgContent() { + return msgContent; + } + + public void setMsgContent(String msgContent) { + this.msgContent = msgContent; + } + + @NotBlank(message="接受者类型不能为空") + @Length(min=0, max=1, message="接受者类型长度不能超过 1 个字符") + public String getReceiveType() { + return receiveType; + } + + public void setReceiveType(String receiveType) { + this.receiveType = receiveType; + } + + public String getReceiveCodes() { + return receiveCodes; + } + + public void setReceiveCodes(String receiveCodes) { + this.receiveCodes = receiveCodes; + } + + public String getReceiveNames() { + return receiveNames; + } + + public void setReceiveNames(String receiveNames) { + this.receiveNames = receiveNames; + } + + @Length(min=0, max=64, message="发送者用户编码长度不能超过 64 个字符") + public String getSendUserCode() { + return sendUserCode; + } + + public void setSendUserCode(String sendUserCode) { + this.sendUserCode = sendUserCode; + } + + @Length(min=0, max=100, message="发送者用户姓名长度不能超过 100 个字符") + public String getSendUserName() { + return sendUserName; + } + + public void setSendUserName(String sendUserName) { + this.sendUserName = sendUserName; + } + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + public Date getSendDate() { + return sendDate; + } + + public void setSendDate(Date sendDate) { + this.sendDate = sendDate; + } + + public Date getSendDate_gte() { + return sqlMap.getWhere().getValue("send_date", QueryType.GTE); + } + + public void setSendDate_gte(Date sendDate) { + sendDate = DateUtils.getOfDayFirst(sendDate); + sqlMap.getWhere().and("send_date", QueryType.GTE, sendDate); + } + + public Date getSendDate_lte() { + return sqlMap.getWhere().getValue("send_date", QueryType.LTE); + } + + public void setSendDate_lte(Date sendDate) { + sendDate = DateUtils.getOfDayLast(sendDate); + sqlMap.getWhere().and("send_date", QueryType.LTE, sendDate); + } + + @Length(min=0, max=1, message="是否有附件长度不能超过 1 个字符") + public String getIsAttac() { + return isAttac; + } + + public void setIsAttac(String isAttac) { + this.isAttac = isAttac; + } + + @Length(min=0, max=100, message="通知类型长度不能超过 100 个字符") + public String getNotifyTypes() { + return notifyTypes; + } + + public void setNotifyTypes(String notifyTypes) { + this.notifyTypes = notifyTypes; + } + + public MsgInnerRecord getRecord() { + return record; + } + + public void setRecord(MsgInnerRecord record) { + this.record = record; + } + +} \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/msg/entity/MsgInnerRecord.java b/modules/core/src/main/java/com/jeesite/modules/msg/entity/MsgInnerRecord.java new file mode 100644 index 00000000..c4adf6f3 --- /dev/null +++ b/modules/core/src/main/java/com/jeesite/modules/msg/entity/MsgInnerRecord.java @@ -0,0 +1,112 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ +package com.jeesite.modules.msg.entity; + +import java.util.Date; + +import javax.validation.constraints.NotBlank; + +import org.hibernate.validator.constraints.Length; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jeesite.common.entity.DataEntity; +import com.jeesite.common.mybatis.annotation.Column; +import com.jeesite.common.mybatis.annotation.Table; +import com.jeesite.common.mybatis.mapper.query.QueryType; + +/** + * 内部消息发送记录表Entity + * @author ThinkGem + * @version 2019-03-12 + */ +@Table(name="${_prefix}sys_msg_inner_record", alias="a", columns={ + @Column(name="id", attrName="id", label="编号", isPK=true), + @Column(name="msg_inner_id", attrName="msgInnerId", label="所属消息"), + @Column(name="receive_user_code", attrName="receiveUserCode", label="接受者用户编码"), + @Column(name="receive_user_name", attrName="receiveUserName", label="接受者用户姓名", queryType=QueryType.LIKE), + @Column(name="read_status", attrName="readStatus", label="读取状态", comment="读取状态(0未送达 1已读 2未读)"), + @Column(name="read_date", attrName="readDate", label="阅读时间"), + @Column(name="is_star", attrName="isStar", label="是否标星"), + }, orderBy="a.read_date ASC, a.id ASC" +) +public class MsgInnerRecord extends DataEntity { + + // 读取状态(0未送达 1已读 2未读) + public static final String READ_STATUS_READ = "1"; + public static final String READ_STATUS_UNREAD = "2"; + + private static final long serialVersionUID = 1L; + private String msgInnerId; // 所属消息 + private String receiveUserCode; // 接受者用户编码 + private String receiveUserName; // 接受者用户姓名 + private String readStatus; // 读取状态(0未送达 1已读 2未读) + private Date readDate; // 阅读时间 + private String isStar; // 是否标星 + + public MsgInnerRecord() { + this(null); + } + + public MsgInnerRecord(String id){ + super(id); + } + + @NotBlank(message="所属消息不能为空") + @Length(min=0, max=64, message="所属消息长度不能超过 64 个字符") + public String getMsgInnerId() { + return msgInnerId; + } + + public void setMsgInnerId(String msgInnerId) { + this.msgInnerId = msgInnerId; + } + + @Length(min=0, max=64, message="接受者用户编码长度不能超过 64 个字符") + public String getReceiveUserCode() { + return receiveUserCode; + } + + public void setReceiveUserCode(String receiveUserCode) { + this.receiveUserCode = receiveUserCode; + } + + @NotBlank(message="接受者用户姓名不能为空") + @Length(min=0, max=100, message="接受者用户姓名长度不能超过 100 个字符") + public String getReceiveUserName() { + return receiveUserName; + } + + public void setReceiveUserName(String receiveUserName) { + this.receiveUserName = receiveUserName; + } + + @NotBlank(message="读取状态不能为空") + @Length(min=0, max=1, message="读取状态长度不能超过 1 个字符") + public String getReadStatus() { + return readStatus; + } + + public void setReadStatus(String readStatus) { + this.readStatus = readStatus; + } + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + public Date getReadDate() { + return readDate; + } + + public void setReadDate(Date readDate) { + this.readDate = readDate; + } + + @Length(min=0, max=1, message="是否标星长度不能超过 1 个字符") + public String getIsStar() { + return isStar; + } + + public void setIsStar(String isStar) { + this.isStar = isStar; + } + +} \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/msg/service/MsgInnerService.java b/modules/core/src/main/java/com/jeesite/modules/msg/service/MsgInnerService.java new file mode 100644 index 00000000..9d19ec28 --- /dev/null +++ b/modules/core/src/main/java/com/jeesite/modules/msg/service/MsgInnerService.java @@ -0,0 +1,243 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ +package com.jeesite.modules.msg.service; + +import java.util.Date; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.jeesite.common.callback.MethodCallback; +import com.jeesite.common.collect.ListUtils; +import com.jeesite.common.config.Global; +import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.StringUtils; +import com.jeesite.common.service.CrudService; +import com.jeesite.common.web.http.ServletUtils; +import com.jeesite.modules.file.utils.FileUploadUtils; +import com.jeesite.modules.msg.dao.MsgInnerDao; +import com.jeesite.modules.msg.dao.MsgInnerRecordDao; +import com.jeesite.modules.msg.entity.MsgInner; +import com.jeesite.modules.msg.entity.MsgInnerRecord; +import com.jeesite.modules.msg.entity.MsgPush; +import com.jeesite.modules.msg.entity.content.AppMsgContent; +import com.jeesite.modules.msg.entity.content.BaseMsgContent; +import com.jeesite.modules.msg.entity.content.EmailMsgContent; +import com.jeesite.modules.msg.entity.content.PcMsgContent; +import com.jeesite.modules.msg.entity.content.SmsMsgContent; +import com.jeesite.modules.msg.utils.MsgPushUtils; +import com.jeesite.modules.sys.entity.EmpUser; +import com.jeesite.modules.sys.entity.User; +import com.jeesite.modules.sys.service.EmpUserService; + +/** + * 内部消息Service + * @author ThinkGem + * @version 2019-03-12 + */ +@Service +@Transactional(readOnly=true) +public class MsgInnerService extends CrudService { + + @Autowired + private EmpUserService empUserService; + @Autowired + private MsgInnerRecordDao msgInnerRecordDao; + + /** + * 获取单条数据 + * @param msgInner + * @return + */ + @Override + public MsgInner get(MsgInner msgInner) { + return super.get(msgInner); + } + + /** + * 查询分页数据 + * @param msgInner 查询条件 + * @param msgInner.page 分页对象 + * @return + */ + @Override + public Page findPage(MsgInner msgInner) { + return super.findPage(msgInner); + } + + /** + * 查询消息记录数据 + */ + public List findRecordList(MsgInnerRecord msgInnerRecord){ + return msgInnerRecordDao.findList(msgInnerRecord); + } + + /** + * 保存数据(插入或更新) + * @param msgInner + */ + @Override + @Transactional(readOnly=false) + public void save(MsgInner msgInner) { + if (msgInner.getIsNewRecord()){ + User user = msgInner.getCurrentUser(); + msgInner.setSendUserCode(user.getUserCode()); + msgInner.setSendUserName(user.getUserName()); + // 没有设置状态,则默认新增后是草稿状态 + if (StringUtils.isBlank(msgInner.getStatus())){ + msgInner.setStatus(MsgInner.STATUS_DRAFT); + } + } + msgInner.setSendDate(new Date()); + msgInner.setIsAttac(StringUtils.isNotBlank(ServletUtils.getParameter("msgInner_file"))?Global.YES:Global.NO); + super.save(msgInner); + // 保存上传附件 + FileUploadUtils.saveFileUpload(msgInner.getId(), "msgInner_file"); + // 发送内部消息 + if (MsgInner.STATUS_NORMAL.equals(msgInner.getStatus())){ + this.updateStatus(msgInner); // 更新状态 + List empUserList = null; + if (MsgInner.RECEIVE_TYPE_ALL.equals(msgInner.getReceiveType())){ + EmpUser empUser = new EmpUser(); + empUser.setCodes(new String[]{}); + empUserList = empUserService.findUserList(empUser); + }else{ + String[] codes = StringUtils.split(msgInner.getReceiveCodes(), ","); + String[] names = StringUtils.split(msgInner.getReceiveNames(), ","); + if (codes != null && names != null && codes.length > 0 && codes.length == names.length){ + EmpUser empUser = new EmpUser(); + empUser.setCodes(codes); + switch(msgInner.getReceiveType()){ + case MsgInner.RECEIVE_TYPE_USER: + empUserList = ListUtils.newArrayList(); + for (int i=0; i empUserList){ + if (empUserList == null || empUserList.size() <= 0){ + return; + } + String[] notifyTypes = StringUtils.split(msgInner.getNotifyTypes(), ","); + List recordList = ListUtils.newArrayList(); + empUserList.forEach(user -> { + MsgInnerRecord r = new MsgInnerRecord(); + r.setMsgInnerId(msgInner.getId()); + r.setReceiveUserCode(user.getUserCode()); + r.setReceiveUserName(user.getUserName()); + r.setReadStatus(MsgInnerRecord.READ_STATUS_UNREAD); + recordList.add(r); + // 发送消息通知(消息推送) + if (notifyTypes != null){ + for (String type : notifyTypes){ + BaseMsgContent msgContent = null; + if (MsgPush.TYPE_PC.equals(type)){ + msgContent = new PcMsgContent(); + msgContent.setContent("你有一条内部消息,请点击“详情”进行查阅。"); + ((PcMsgContent)msgContent).addButton(new String[]{ + "详情", "/a/msg/msgInner/view?id="+msgInner.getId()}); + }else if (MsgPush.TYPE_APP.equals(type)){ + msgContent = new AppMsgContent(); + }else if (MsgPush.TYPE_SMS.equals(type)){ + msgContent = new SmsMsgContent(); + }else if (MsgPush.TYPE_EMAIL.equals(type)){ + msgContent = new EmailMsgContent(); + } + if (msgContent != null){ + msgContent.setTitle(msgInner.getMsgTitle()); + if (msgContent.getContent() != null){ + msgContent.setContent("你有一条内部消息请查阅:" + + StringUtils.abbr(msgInner.getMsgTitle(), 30)); + } + msgContent.setMsgPush(new MsgPush()); + msgContent.getMsgPush().setIsRealtimePush(false); // 关闭实时推送,改为手动推送 + MsgPushUtils.push(msgContent, msgInner.getId(), + MsgInner.class.getSimpleName(), user.getUserCode()); + } + } + } + }); + ListUtils.pageList(recordList, 100, new MethodCallback() { + @Override + @SuppressWarnings("unchecked") + public Object execute(Object... objs) { + msgInnerRecordDao.insertBatch((List)objs[0]); + return null; + } + }); + // 手动触发消息推送任务 + if (Global.TRUE.equals(Global.getProperty("msg.realtime.enabled"))){ + new Thread(){ + public void run() { + try{ + MsgPushUtils.getMsgPushTask().execute(); + }catch(Exception ex){ + logger.error("实时消息发送失败,推送服务配置不正确。", ex); + } + } + }.start(); + } + } + + /** + * 根据消息编号和接受者用户名读取内部消息 + */ + @Transactional(readOnly=false) + public void readMsgInnerRecord(MsgInner msgInner){ + MsgInnerRecord msgInnerRecord = new MsgInnerRecord(); + msgInnerRecord.setMsgInnerId(msgInner.getId()); + msgInnerRecord.setReceiveUserCode(msgInner.getCurrentUser().getUserCode()); + msgInnerRecord.setReadStatus(MsgInnerRecord.READ_STATUS_READ); + msgInnerRecord.setReadDate(new Date()); + msgInnerRecordDao.updateReadStatus(msgInnerRecord); + // 将关联的内部消息通知更新为已读(消息推送) + MsgPushUtils.readMsgByBiz(msgInner.getId(), MsgInner.class.getSimpleName(), + msgInnerRecord.getReceiveUserCode()); + } + + /** + * 更新状态 + * @param msgInner + */ + @Override + @Transactional(readOnly=false) + public void updateStatus(MsgInner msgInner) { + super.updateStatus(msgInner); + } + + /** + * 删除数据 + * @param msgInner + */ + @Override + @Transactional(readOnly=false) + public void delete(MsgInner msgInner) { + super.delete(msgInner); + } + +} \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/msg/web/MsgInnerController.java b/modules/core/src/main/java/com/jeesite/modules/msg/web/MsgInnerController.java new file mode 100644 index 00000000..44c2d648 --- /dev/null +++ b/modules/core/src/main/java/com/jeesite/modules/msg/web/MsgInnerController.java @@ -0,0 +1,140 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ +package com.jeesite.modules.msg.web; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.jeesite.common.config.Global; +import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.StringUtils; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.msg.entity.MsgInner; +import com.jeesite.modules.msg.entity.MsgInnerRecord; +import com.jeesite.modules.msg.entity.MsgPush; +import com.jeesite.modules.msg.service.MsgInnerService; + +/** + * 内部消息Controller + * @author ThinkGem + * @version 2019-03-12 + */ +@Controller +@RequestMapping(value = "${adminPath}/msg/msgInner") +public class MsgInnerController extends BaseController { + + @Autowired + private MsgInnerService msgInnerService; + + /** + * 获取数据 + */ + @ModelAttribute + public MsgInner get(String id, boolean isNewRecord) { + return msgInnerService.get(id, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("msg:msgInner:view") + @RequestMapping(value = {"list", ""}) + public String list(MsgInner msgInner, Model model) { + model.addAttribute("msgInner", msgInner); + return "modules/msg/msgInnerList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("msg:msgInner:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(MsgInner msgInner, HttpServletRequest request, HttpServletResponse response) { + msgInner.setPage(new Page<>(request, response)); + msgInner.setRecord(new MsgInnerRecord()); + msgInner.getRecord().setReceiveUserCode(msgInner.getCurrentUser().getUserCode()); + Page page = msgInnerService.findPage(msgInner); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("msg:msgInner:view") + @RequestMapping(value = "form") + public String form(MsgInner msgInner, Model model) { + if (StringUtils.isBlank(msgInner.getNotifyTypes())){ + msgInner.setNotifyTypes(MsgPush.TYPE_PC); + } + if (StringUtils.isBlank(msgInner.getContentLevel())){ + msgInner.setContentLevel(MsgInner.CONTENT_LEVEL_1); + } + if (StringUtils.isBlank(msgInner.getReceiveType())){ + msgInner.setReceiveType(MsgInner.RECEIVE_TYPE_USER); + } + model.addAttribute("msgInner", msgInner); + return "modules/msg/msgInnerForm"; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("msg:msgInner:view") + @RequestMapping(value = "view") + public String view(MsgInner msgInner, Model model) { + model.addAttribute("msgInner", msgInner); + // 根据消息编号和接受者用户名读取内部消息 + msgInnerService.readMsgInnerRecord(msgInner); + // 查询已读和未读用户列表数据 + MsgInnerRecord msgInnerRecord = new MsgInnerRecord(); + msgInnerRecord.setMsgInnerId(msgInner.getId()); + msgInnerRecord.setReadStatus(MsgInnerRecord.READ_STATUS_READ); + model.addAttribute("readList", msgInnerService.findRecordList(msgInnerRecord)); + msgInnerRecord.setReadStatus(MsgInnerRecord.READ_STATUS_UNREAD); + model.addAttribute("unReadList", msgInnerService.findRecordList(msgInnerRecord)); + return "modules/msg/msgInnerView"; + } + + /** + * 保存消息 + */ + @RequiresPermissions("msg:msgInner:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated MsgInner msgInner, HttpServletRequest request) { + MsgInner old = super.getWebDataBinderSource(request); + if (old != null && MsgInner.STATUS_NORMAL.equals(old.getStatus())){ + return renderResult(Global.FALSE, "数据已发布,不允许修改!"); + } + msgInnerService.save(msgInner); + return renderResult(Global.TRUE, text("保存消息成功!")); + } + + /** + * 删除消息 + */ + @RequiresPermissions("msg:msgInner:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(MsgInner msgInner, HttpServletRequest request) { + MsgInner old = super.getWebDataBinderSource(request); + if (old != null && MsgInner.STATUS_NORMAL.equals(old.getStatus())){ + return renderResult(Global.FALSE, "数据已发布,不允许删除!"); + } + msgInnerService.delete(msgInner); + return renderResult(Global.TRUE, text("删除消息成功!")); + } + +} \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx b/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx index 4628dc8c..1cb5495a 100644 Binary files a/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx and b/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx differ diff --git a/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql index 80f8f640..af304f40 100644 --- a/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/mssql/mssql_4.1.4.sql @@ -1,9 +1,27 @@ -- 删除sys_file_entity表的file_md5唯一索引 --- ALTER TABLE [${_prefix}sys_file_entity] DROP CONSTRAINT [UQ__js_sys_f__3BD63C9E32E0915F]; +-- ALTER TABLE [${_prefix}sys_file_entity] DROP CONSTRAINT [UQ__${_prefix}sys_f__3BD63C9E32E0915F]; -- 增加文件信息字段(可存储图片大小) -ALTER TABLE [${_prefix}js_sys_file_entity] ADD [file_meta] varchar(64) NULL; +ALTER TABLE [${_prefix}sys_file_entity] ADD [file_meta] varchar(64) NULL; -- 集群的实例名字 -ALTER TABLE [${_prefix}sys_job] ADD [instance_name] varchar(64) DEFAULT JeeSiteScheduler NOT NULL; +ALTER TABLE [${_prefix}sys_job] ADD [instance_name] varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL; + +-- 内部消息菜单 +INSERT INTO ${_prefix}sys_menu(menu_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, menu_name, menu_type, menu_href, menu_target, menu_icon, menu_color, permission, weight, is_show, sys_code, module_codes, status, create_by, create_date, update_by, update_date, remarks, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4) +VALUES ('1105443204287991808', '0', '0,', 9030, '0000009030,', '1', 0, '站内消息', '站内消息', '1', '/msg/msgInner/list', '', 'icon-speech', '', 'msg:msgInner', 40, '1', 'default', 'core', '0', 'system', getdate(), 'system', getdate(), '', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- 内部消息新增字典数据 +INSERT INTO ${_prefix}sys_dict_type(id, dict_name, dict_type, is_sys, status, create_by, create_date, update_by, update_date, remarks) +VALUES ('1105440848414543872', '消息状态', 'msg_inner_msg_status', '0', '0', 'system', getdate(), 'system', getdate(), ''); +INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4) +VALUES ('1106135527342673920', '0', '0,', 20, '0000000020,', '1', 0, '全部', '全部', '0', 'msg_inner_receiver_type', '1', '', '', '', '0', 'system', getdate(), 'system', getdate(), '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- 取消内部消息部分字段必填选项 +ALTER TABLE [${_prefix}sys_msg_inner] ALTER COLUMN [receive_codes] text NULL; +ALTER TABLE [${_prefix}sys_msg_inner] ALTER COLUMN [receive_names] text NULL; +ALTER TABLE [${_prefix}sys_msg_inner] ALTER COLUMN [send_user_code] varchar(64) NULL; +ALTER TABLE [${_prefix}sys_msg_inner] ALTER COLUMN [send_user_name] varchar(100) NULL; +ALTER TABLE [${_prefix}sys_msg_inner] ALTER COLUMN [send_date] datetime NULL; +ALTER TABLE [${_prefix}sys_msg_inner] ALTER COLUMN [notify_types] varchar(100) NULL; diff --git a/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql index 2efffd57..e8b82c99 100644 --- a/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/mysql/mysql_4.1.4.sql @@ -5,9 +5,28 @@ DROP INDEX `file_md5`, ADD INDEX `file_md5`(`file_md5`); -- 增加文件信息字段(可存储图片大小) -ALTER TABLE `${_prefix}js_sys_file_entity` +ALTER TABLE `${_prefix}sys_file_entity` ADD COLUMN `file_meta` varchar(255) NULL COMMENT '文件信息(JSON格式)' AFTER `file_size`; -- 集群的实例名字 ALTER TABLE `${_prefix}sys_job` -ADD COLUMN `instance_name` varchar(64) NOT NULL DEFAULT JeeSiteScheduler COMMENT '集群的实例名字' AFTER `concurrent`; \ No newline at end of file +ADD COLUMN `instance_name` varchar(64) NOT NULL DEFAULT 'JeeSiteScheduler' COMMENT '集群的实例名字' AFTER `concurrent`; + +-- 内部消息菜单 +INSERT INTO `${_prefix}sys_menu`(`menu_code`, `parent_code`, `parent_codes`, `tree_sort`, `tree_sorts`, `tree_leaf`, `tree_level`, `tree_names`, `menu_name`, `menu_type`, `menu_href`, `menu_target`, `menu_icon`, `menu_color`, `permission`, `weight`, `is_show`, `sys_code`, `module_codes`, `status`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `extend_s1`, `extend_s2`, `extend_s3`, `extend_s4`, `extend_s5`, `extend_s6`, `extend_s7`, `extend_s8`, `extend_i1`, `extend_i2`, `extend_i3`, `extend_i4`, `extend_f1`, `extend_f2`, `extend_f3`, `extend_f4`, `extend_d1`, `extend_d2`, `extend_d3`, `extend_d4`) +VALUES ('1105443204287991808', '0', '0,', 9030, '0000009030,', '1', 0, '站内消息', '站内消息', '1', '/msg/msgInner/list', '', 'icon-speech', '', 'msg:msgInner', 40, '1', 'default', 'core', '0', 'system', now(), 'system', now(), '', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- 内部消息新增字典数据 +INSERT INTO `${_prefix}sys_dict_type`(`id`, `dict_name`, `dict_type`, `is_sys`, `status`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`) +VALUES ('1105440848414543872', '消息状态', 'msg_inner_msg_status', '0', '0', 'system', now(), 'system', now(), ''); +INSERT INTO `${_prefix}sys_dict_data`(`dict_code`, `parent_code`, `parent_codes`, `tree_sort`, `tree_sorts`, `tree_leaf`, `tree_level`, `tree_names`, `dict_label`, `dict_value`, `dict_type`, `is_sys`, `description`, `css_style`, `css_class`, `status`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `corp_code`, `corp_name`, `extend_s1`, `extend_s2`, `extend_s3`, `extend_s4`, `extend_s5`, `extend_s6`, `extend_s7`, `extend_s8`, `extend_i1`, `extend_i2`, `extend_i3`, `extend_i4`, `extend_f1`, `extend_f2`, `extend_f3`, `extend_f4`, `extend_d1`, `extend_d2`, `extend_d3`, `extend_d4`) +VALUES ('1106135527342673920', '0', '0,', 20, '0000000020,', '1', 0, '全部', '全部', '0', 'msg_inner_receiver_type', '1', '', '', '', '0', 'system', now(), 'system', now(), '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- 取消内部消息部分字段必填选项 +ALTER TABLE `${_prefix}sys_msg_inner` +MODIFY COLUMN `receive_codes` text NULL COMMENT '接受者字符串' AFTER `receive_type`, +MODIFY COLUMN `receive_names` text NULL COMMENT '接受者名称字符串' AFTER `receive_codes`, +MODIFY COLUMN `send_user_code` varchar(64) NULL COMMENT '发送者用户编码' AFTER `receive_names`, +MODIFY COLUMN `send_user_name` varchar(100) NULL COMMENT '发送者用户姓名' AFTER `send_user_code`, +MODIFY COLUMN `send_date` datetime(0) NULL COMMENT '发送时间' AFTER `send_user_name`, +MODIFY COLUMN `notify_types` varchar(100) NULL COMMENT '通知类型(PC APP 短信 邮件 微信)多选' AFTER `is_attac`; diff --git a/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql index a275f4b4..9db5c09d 100644 --- a/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/oracle/oracle_4.1.4.sql @@ -5,9 +5,28 @@ -- 增加文件信息字段(可存储图片大小) ALTER TABLE ${_prefix}SYS_FILE_ENTITY ADD (file_meta VARCHAR2(64) NULL ); -COMMENT ON COLUMN ${_prefix}SYS_FILE_ENTITY.file_meta IS '文件信息(JSON格式)' +COMMENT ON COLUMN ${_prefix}SYS_FILE_ENTITY.file_meta IS '文件信息(JSON格式)'; -- 集群的实例名字 ALTER TABLE ${_prefix}SYS_JOB -ADD (instance_name VARCHAR2(64) DEFAULT JeeSiteScheduler NOT NULL ); -COMMENT ON COLUMN ${_prefix}SYS_JOB.instance_name IS '集群的实例名字' \ No newline at end of file +ADD (instance_name VARCHAR2(64) DEFAULT 'JeeSiteScheduler' NOT NULL ); +COMMENT ON COLUMN ${_prefix}SYS_JOB.instance_name IS '集群的实例名字'; + +-- 内部消息菜单 +INSERT INTO ${_prefix}sys_menu(menu_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, menu_name, menu_type, menu_href, menu_target, menu_icon, menu_color, permission, weight, is_show, sys_code, module_codes, status, create_by, create_date, update_by, update_date, remarks, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4) +VALUES ('1105443204287991808', '0', '0,', 9030, '0000009030,', '1', 0, '站内消息', '站内消息', '1', '/msg/msgInner/list', '', 'icon-speech', '', 'msg:msgInner', 40, '1', 'default', 'core', '0', 'system', sysdate, 'system', sysdate, '', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- 内部消息新增字典数据 +INSERT INTO ${_prefix}sys_dict_type(id, dict_name, dict_type, is_sys, status, create_by, create_date, update_by, update_date, remarks) +VALUES ('1105440848414543872', '消息状态', 'msg_inner_msg_status', '0', '0', 'system', sysdate, 'system', sysdate, ''); +INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4) +VALUES ('1106135527342673920', '0', '0,', 20, '0000000020,', '1', 0, '全部', '全部', '0', 'msg_inner_receiver_type', '1', '', '', '', '0', 'system', sysdate, 'system', sysdate, '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- 取消内部消息部分字段必填选项 +ALTER TABLE ${_prefix}SYS_MSG_INNER MODIFY (RECEIVE_CODES NULL ); +ALTER TABLE ${_prefix}SYS_MSG_INNER MODIFY (RECEIVE_NAMES NULL ); +ALTER TABLE ${_prefix}SYS_MSG_INNER MODIFY (SEND_USER_CODE NULL ); +ALTER TABLE ${_prefix}SYS_MSG_INNER MODIFY (SEND_USER_NAME NULL ); +ALTER TABLE ${_prefix}SYS_MSG_INNER MODIFY (SEND_DATE NULL ); +ALTER TABLE ${_prefix}SYS_MSG_INNER MODIFY (NOTIFY_TYPES NULL ); + diff --git a/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql index 95fecce7..9d33d6b8 100644 --- a/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql +++ b/modules/core/src/main/resources/db/upgrade/core/postgresql/postgresql_4.1.4.sql @@ -10,5 +10,25 @@ COMMENT ON COLUMN ${_prefix}sys_file_entity.file_meta IS '文件信息(JSON格 -- 集群的实例名字 ALTER TABLE ${_prefix}sys_job -ADD COLUMN instance_name varchar(255) NOT NULL DEFAULT JeeSiteScheduler; -COMMENT ON COLUMN ${_prefix}sys_job.instance_name IS '集群的实例名字'; \ No newline at end of file +ADD COLUMN instance_name varchar(255) NOT NULL DEFAULT 'JeeSiteScheduler'; +COMMENT ON COLUMN ${_prefix}sys_job.instance_name IS '集群的实例名字'; + +-- 内部消息菜单 +INSERT INTO ${_prefix}sys_menu(menu_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, menu_name, menu_type, menu_href, menu_target, menu_icon, menu_color, permission, weight, is_show, sys_code, module_codes, status, create_by, create_date, update_by, update_date, remarks, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4) +VALUES ('1105443204287991808', '0', '0,', 9030, '0000009030,', '1', 0, '站内消息', '站内消息', '1', '/msg/msgInner/list', '', 'icon-speech', '', 'msg:msgInner', 40, '1', 'default', 'core', '0', 'system', now(), 'system', now(), '', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- 内部消息新增字典数据 +INSERT INTO ${_prefix}sys_dict_type(id, dict_name, dict_type, is_sys, status, create_by, create_date, update_by, update_date, remarks) +VALUES ('1105440848414543872', '消息状态', 'msg_inner_msg_status', '0', '0', 'system', now(), 'system', now(), ''); +INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4) +VALUES ('1106135527342673920', '0', '0,', 20, '0000000020,', '1', 0, '全部', '全部', '0', 'msg_inner_receiver_type', '1', '', '', '', '0', 'system', now(), 'system', now(), '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- 取消内部消息部分字段必填选项 +ALTER TABLE ${_prefix}sys_msg_inner + ALTER COLUMN receive_codes DROP NOT NULL, + ALTER COLUMN receive_names DROP NOT NULL, + ALTER COLUMN send_user_code DROP NOT NULL, + ALTER COLUMN send_user_name DROP NOT NULL, + ALTER COLUMN send_date DROP NOT NULL, + ALTER COLUMN notify_types DROP NOT NULL; + \ No newline at end of file diff --git a/modules/core/src/main/resources/mappings/modules/msg/MsgInnerDao.xml b/modules/core/src/main/resources/mappings/modules/msg/MsgInnerDao.xml new file mode 100644 index 00000000..0caee9b0 --- /dev/null +++ b/modules/core/src/main/resources/mappings/modules/msg/MsgInnerDao.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/core/src/main/resources/mappings/modules/msg/MsgInnerRecordDao.xml b/modules/core/src/main/resources/mappings/modules/msg/MsgInnerRecordDao.xml new file mode 100644 index 00000000..dc56159e --- /dev/null +++ b/modules/core/src/main/resources/mappings/modules/msg/MsgInnerRecordDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/modules/core/src/main/resources/views/modules/msg/msgInnerForm.html b/modules/core/src/main/resources/views/modules/msg/msgInnerForm.html new file mode 100644 index 00000000..97f3ce02 --- /dev/null +++ b/modules/core/src/main/resources/views/modules/msg/msgInnerForm.html @@ -0,0 +1,176 @@ +<% layout('/layouts/default.html', {title: '站内消息', libs: ['validate','fileupload','ueditor']}){ %> +
+
+
+
+ ${text(msgInner.isNewRecord ? '发送消息' : '编辑消息')} +
+
+ +
+
+ <#form:form id="inputForm" model="${msgInner}" action="${ctx}/msg/msgInner/save" method="post" class="form-horizontal"> +
+
${text('基本信息')}
+ <#form:hidden path="id"/> + <#form:hidden path="status"/> +
+
+
+ +
+ <#form:input path="msgTitle" maxlength="200" class="form-control required text-ruler"/> +
+
+
+
+
+
+
+ +
+ <#form:radio path="contentLevel" dictType="msg_inner_content_level" class="form-control required" /> +
+
+
+
+
+ +
+ <#form:radio path="contentType" dictType="msg_inner_content_type" blankOption="true" class="form-control" /> +
+
+
+
+
+
+
+ +
+ <#form:ueditor path="msgContent" rows="4" class="form-control required" simpleToolbars="true"/> +
+
+
+
+
+
+
+ +
+ <#form:fileupload id="uploadFile" bizKey="${msgInner.id}" bizType="msgInner_file" + uploadType="all" class="" readonly="false"/> +
+
+
+
+
${text('接受者信息')}
+
+
+
+ +
+ <#form:radio path="receiveType" dictType="msg_inner_receiver_type" class="form-control required" /> + <#form:treeselect id="receive" title="${text('接受者选择')}" + path="receiveCodes" labelPath="receiveNames" + url="${ctx}/sys/office/treeData?isLoadUser=true" + class=" required" allowClear="true" checkbox="true"/> +
+
+
+
+
+
+
+ +
+ <#form:checkbox path="notifyTypes" dictType="sys_msg_type" class="form-control required" /> +
+
+
+
+ <% if(!msgInner.isNewRecord){ %> +
${text('发送者信息')}
+
+
+
+ +
+ <#form:input path="sendUserName" readonly="true" maxlength="100" class="form-control required"/> +
+
+
+
+
+ +
+ <#form:input path="sendDate" dataFormat="datetime" readonly="true" maxlength="20" class="form-control required"/> +
+
+
+
+ <% } %> +
+ + +
+
+<% } %> + \ No newline at end of file diff --git a/modules/core/src/main/resources/views/modules/msg/msgInnerList.html b/modules/core/src/main/resources/views/modules/msg/msgInnerList.html new file mode 100644 index 00000000..b7dc2a1f --- /dev/null +++ b/modules/core/src/main/resources/views/modules/msg/msgInnerList.html @@ -0,0 +1,107 @@ +<% layout('/layouts/default.html', {title: '站内消息', libs: ['dataGrid']}){ %> +
+
+
+
+ ${text('站内消息')} +
+
+ ${text('查询')} + <% if(hasPermi('msg:msgInner:edit')){ %> + ${text('新增')} + <% } %> +
+
+
+ <#form:form id="searchForm" model="${msgInner}" action="${ctx}/msg/msgInner/listData" method="post" class="form-inline hide" + data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}"> +
+ +
+ <#form:input path="msgTitle" maxlength="200" class="form-control width-120"/> +
+
+
+ +
+ <#form:select path="contentLevel" dictType="msg_inner_content_level" blankOption="true" class="form-control"/> +
+
+
+ +
+ <#form:select path="contentType" dictType="msg_inner_content_type" blankOption="true" class="form-control"/> +
+
+
+ +
+ <#form:input path="sendDate_gte" readonly="true" maxlength="20" class="form-control Wdate-date" + dataFormat="date" onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false,onpicked:function(){sendDate_lte.click()}});"/> +  --  + <#form:input path="sendDate_lte" readonly="true" maxlength="20" class="form-control Wdate-date" + dataFormat="date" onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/> +
+
+
+ +
+ <#form:select path="status" dictType="msg_inner_msg_status" blankOption="true" class="form-control"/> +
+
+
+ + +
+ +
+
+
+
+
+<% } %> + \ No newline at end of file diff --git a/modules/core/src/main/resources/views/modules/msg/msgInnerView.html b/modules/core/src/main/resources/views/modules/msg/msgInnerView.html new file mode 100644 index 00000000..96573a0a --- /dev/null +++ b/modules/core/src/main/resources/views/modules/msg/msgInnerView.html @@ -0,0 +1,50 @@ +<%/* Copyright (c) 2013-Now http://jeesite.com All rights reserved. */ %> +<% layout('/layouts/default.html', {title: '查看消息', libs: ['validate','fileupload']}){ %> +
+
+
+
+ ${text('查看消息')} +
+
+ +
+
+
+

${msgInner.msgTitle}

+
+ + ${msgInner.msgContent} + <% if(msgInner.isAttac == @Global.YES){ %> +
+ <#form:fileupload id="uploadFile" bizKey="${msgInner.id}" bizType="msgInner_file" + uploadType="all" class="" readonly="true" preview="weboffice"/> +
+ <% } %> +
+ + <% if (readList! != null && readList.~size > 0){ %> + <% } %> + <% if (unReadList! != null && unReadList.~size > 0){ %> + <% } %> +
+ +
+
+<% } %> \ No newline at end of file diff --git a/web/db/db2/core.sql b/web/db/db2/core.sql new file mode 100644 index 00000000..0a9c0737 --- /dev/null +++ b/web/db/db2/core.sql @@ -0,0 +1,920 @@ + +/* Drop Tables */ + +DROP TABLE js_gen_table_column; +DROP TABLE js_gen_table; +DROP TABLE js_sys_company_office; +DROP TABLE js_sys_employee_post; +DROP TABLE js_sys_user_data_scope; +DROP TABLE js_sys_user_role; +DROP TABLE js_sys_user; +DROP TABLE js_sys_employee; +DROP TABLE js_sys_company; +DROP TABLE js_sys_area; +DROP TABLE js_sys_config; +DROP TABLE js_sys_dict_data; +DROP TABLE js_sys_dict_type; +DROP TABLE js_sys_file_upload; +DROP TABLE js_sys_file_entity; +DROP TABLE js_sys_job_log; +DROP TABLE js_sys_job; +DROP TABLE js_sys_lang; +DROP TABLE js_sys_log; +DROP TABLE js_sys_role_menu; +DROP TABLE js_sys_menu; +DROP TABLE js_sys_module; +DROP TABLE js_sys_msg_inner_record; +DROP TABLE js_sys_msg_inner; +DROP TABLE js_sys_msg_push; +DROP TABLE js_sys_msg_pushed; +DROP TABLE js_sys_msg_template; +DROP TABLE js_sys_office; +DROP TABLE js_sys_post; +DROP TABLE js_sys_role_data_scope; +DROP TABLE js_sys_role; + + + + +/* Create Tables */ + +-- 代码生成表 +CREATE TABLE js_gen_table +( + table_name varchar(64) NOT NULL, + class_name varchar(100) NOT NULL, + comments vargraphic(500) NOT NULL, + parent_table_name varchar(64), + parent_table_fk_name varchar(64), + data_source_name varchar(64), + tpl_category varchar(200), + package_name varchar(500), + module_name varchar(30), + sub_module_name varchar(30), + function_name vargraphic(200), + function_name_simple vargraphic(50), + function_author vargraphic(50), + gen_base_dir vargraphic(1000), + options vargraphic(1000), + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (table_name) +); + + +-- 代码生成表列 +CREATE TABLE js_gen_table_column +( + id varchar(64) NOT NULL, + table_name varchar(64) NOT NULL, + column_name varchar(64) NOT NULL, + column_sort decimal(10), + column_type varchar(100) NOT NULL, + column_label vargraphic(50), + comments vargraphic(500) NOT NULL, + attr_name varchar(200) NOT NULL, + attr_type varchar(200) NOT NULL, + is_pk char(1), + is_null char(1), + is_insert char(1), + is_update char(1), + is_list char(1), + is_query char(1), + query_type varchar(200), + is_edit char(1), + show_type varchar(200), + options vargraphic(1000), + PRIMARY KEY (id) +); + + +-- 行政区划 +CREATE TABLE js_sys_area +( + area_code varchar(100) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + area_name vargraphic(100) NOT NULL, + area_type char(1), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (area_code) +); + + +-- 公司表 +CREATE TABLE js_sys_company +( + company_code varchar(64) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + view_code varchar(100) NOT NULL, + company_name vargraphic(200) NOT NULL, + full_name vargraphic(200) NOT NULL, + area_code varchar(100), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (company_code) +); + + +-- 公司部门关联表 +CREATE TABLE js_sys_company_office +( + company_code varchar(64) NOT NULL, + office_code varchar(64) NOT NULL, + PRIMARY KEY (company_code, office_code) +); + + +-- 参数配置表 +CREATE TABLE js_sys_config +( + id varchar(64) NOT NULL, + config_name vargraphic(100) NOT NULL, + config_key varchar(100) NOT NULL, + config_value vargraphic(1000), + is_sys char(1) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 字典数据表 +CREATE TABLE js_sys_dict_data +( + dict_code varchar(64) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + dict_label vargraphic(100) NOT NULL, + dict_value varchar(100) NOT NULL, + dict_type varchar(100) NOT NULL, + is_sys char(1) NOT NULL, + description vargraphic(500), + css_style vargraphic(500), + css_class vargraphic(500), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (dict_code) +); + + +-- 字典类型表 +CREATE TABLE js_sys_dict_type +( + id varchar(64) NOT NULL, + dict_name vargraphic(100) NOT NULL, + dict_type varchar(100) NOT NULL, + is_sys char(1) NOT NULL, + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 员工表 +CREATE TABLE js_sys_employee +( + emp_code varchar(64) NOT NULL, + emp_name vargraphic(100) NOT NULL, + emp_name_en varchar(100), + office_code varchar(64) NOT NULL, + office_name vargraphic(100) NOT NULL, + company_code varchar(64), + company_name vargraphic(200), + status char(1) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + PRIMARY KEY (emp_code) +); + + +-- 员工与岗位关联表 +CREATE TABLE js_sys_employee_post +( + emp_code varchar(64) NOT NULL, + post_code varchar(64) NOT NULL, + PRIMARY KEY (emp_code, post_code) +); + + +-- 文件实体表 +CREATE TABLE js_sys_file_entity +( + file_id varchar(64) NOT NULL, + file_md5 varchar(64) NOT NULL, + file_path vargraphic(1000) NOT NULL, + file_content_type varchar(200) NOT NULL, + file_extension varchar(100) NOT NULL, + file_size decimal(31) NOT NULL, + file_meta varchar(255), + PRIMARY KEY (file_id) +); + + +-- 文件上传表 +CREATE TABLE js_sys_file_upload +( + id varchar(64) NOT NULL, + file_id varchar(64) NOT NULL, + file_name vargraphic(500) NOT NULL, + file_type varchar(20) NOT NULL, + biz_key varchar(64), + biz_type varchar(64), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 作业调度表 +CREATE TABLE js_sys_job +( + job_name varchar(64) NOT NULL, + job_group varchar(64) NOT NULL, + description vargraphic(100) NOT NULL, + invoke_target vargraphic(1000) NOT NULL, + cron_expression varchar(255) NOT NULL, + misfire_instruction decimal(1) NOT NULL, + concurrent char(1) NOT NULL, + instance_name varchar(64) DEFAULT 'JeeSiteScheduler' NOT NULL, + status char(1) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (job_name, job_group) +); + + +-- 作业调度日志表 +CREATE TABLE js_sys_job_log +( + id varchar(64) NOT NULL, + job_name varchar(64) NOT NULL, + job_group varchar(64) NOT NULL, + job_type varchar(50), + job_event varchar(200), + job_message varchar(500), + is_exception char(1), + exception_info clob, + create_date timestamp, + PRIMARY KEY (id) +); + + +-- 国际化语言 +CREATE TABLE js_sys_lang +( + id varchar(64) NOT NULL, + module_code varchar(64) NOT NULL, + lang_code vargraphic(500) NOT NULL, + lang_text vargraphic(500) NOT NULL, + lang_type varchar(50) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 操作日志表 +CREATE TABLE js_sys_log +( + id varchar(64) NOT NULL, + log_type varchar(50) NOT NULL, + log_title vargraphic(500) NOT NULL, + create_by varchar(64) NOT NULL, + create_by_name vargraphic(100) NOT NULL, + create_date timestamp NOT NULL, + request_uri vargraphic(500), + request_method varchar(10), + request_params clob, + diff_modify_data clob, + biz_key varchar(64), + biz_type varchar(64), + remote_addr varchar(255) NOT NULL, + server_addr varchar(255) NOT NULL, + is_exception char(1), + exception_info clob, + user_agent vargraphic(500), + device_name varchar(100), + browser_name varchar(100), + execute_time decimal(19), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + PRIMARY KEY (id) +); + + +-- 菜单表 +CREATE TABLE js_sys_menu +( + menu_code varchar(64) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + menu_name varchar(100) NOT NULL, + menu_type char(1) NOT NULL, + menu_href varchar(1000), + menu_target varchar(20), + menu_icon varchar(100), + menu_color varchar(50), + permission varchar(1000), + weight decimal(4), + is_show char(1) NOT NULL, + sys_code varchar(64) NOT NULL, + module_codes varchar(500) NOT NULL, + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (menu_code) +); + + +-- 模块表 +CREATE TABLE js_sys_module +( + module_code varchar(64) NOT NULL, + module_name varchar(100) NOT NULL, + description vargraphic(500), + main_class_name varchar(500), + current_version varchar(50), + upgrade_info varchar(300), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (module_code) +); + + +-- 内部消息 +CREATE TABLE js_sys_msg_inner +( + id varchar(64) NOT NULL, + msg_title varchar(200) NOT NULL, + content_level char(1) NOT NULL, + content_type char(1), + msg_content clob NOT NULL, + receive_type char(1) NOT NULL, + receive_codes clob, + receive_names clob, + send_user_code varchar(64), + send_user_name varchar(100), + send_date timestamp, + is_attac char(1), + notify_types varchar(100), + status char(1) NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 内部消息发送记录表 +CREATE TABLE js_sys_msg_inner_record +( + id varchar(64) NOT NULL, + msg_inner_id varchar(64) NOT NULL, + receive_user_code varchar(64), + receive_user_name varchar(100) NOT NULL, + read_status char(1) NOT NULL, + read_date timestamp, + is_star char(1), + PRIMARY KEY (id) +); + + +-- 消息推送表 +CREATE TABLE js_sys_msg_push +( + id varchar(64) NOT NULL, + msg_type varchar(16) NOT NULL, + msg_title varchar(200) NOT NULL, + msg_content clob NOT NULL, + biz_key varchar(64), + biz_type varchar(64), + receive_code varchar(64) NOT NULL, + receive_user_code varchar(64) NOT NULL, + receive_user_name varchar(100) NOT NULL, + send_user_code varchar(64) NOT NULL, + send_user_name varchar(100) NOT NULL, + send_date timestamp NOT NULL, + is_merge_push char(1), + plan_push_date timestamp, + push_number int, + push_return_code varchar(200), + push_return_msg_id varchar(200), + push_return_content clob, + push_status char(1), + push_date timestamp, + read_status char(1), + read_date timestamp, + PRIMARY KEY (id) +); + + +-- 消息已推送表 +CREATE TABLE js_sys_msg_pushed +( + id varchar(64) NOT NULL, + msg_type varchar(16) NOT NULL, + msg_title varchar(200) NOT NULL, + msg_content clob NOT NULL, + biz_key varchar(64), + biz_type varchar(64), + receive_code varchar(64) NOT NULL, + receive_user_code varchar(64) NOT NULL, + receive_user_name varchar(100) NOT NULL, + send_user_code varchar(64) NOT NULL, + send_user_name varchar(100) NOT NULL, + send_date timestamp NOT NULL, + is_merge_push char(1), + plan_push_date timestamp, + push_number int, + push_return_content clob, + push_return_code varchar(200), + push_return_msg_id varchar(200), + push_status char(1), + push_date timestamp, + read_status char(1), + read_date timestamp, + PRIMARY KEY (id) +); + + +-- 消息模板 +CREATE TABLE js_sys_msg_template +( + id varchar(64) NOT NULL, + module_code varchar(64), + tpl_key varchar(100) NOT NULL, + tpl_name vargraphic(100) NOT NULL, + tpl_type varchar(16) NOT NULL, + tpl_content clob NOT NULL, + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + PRIMARY KEY (id) +); + + +-- 组织机构表 +CREATE TABLE js_sys_office +( + office_code varchar(64) NOT NULL, + parent_code varchar(64) NOT NULL, + parent_codes varchar(1000) NOT NULL, + tree_sort decimal(10) NOT NULL, + tree_sorts varchar(1000) NOT NULL, + tree_leaf char(1) NOT NULL, + tree_level decimal(4) NOT NULL, + tree_names varchar(1000) NOT NULL, + view_code varchar(100) NOT NULL, + office_name vargraphic(100) NOT NULL, + full_name varchar(200) NOT NULL, + office_type char(1) NOT NULL, + leader varchar(100), + phone varchar(100), + address varchar(255), + zip_code varchar(100), + email varchar(300), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (office_code) +); + + +-- 员工岗位表 +CREATE TABLE js_sys_post +( + post_code varchar(64) NOT NULL, + post_name varchar(100) NOT NULL, + post_type varchar(100), + post_sort decimal(10), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + PRIMARY KEY (post_code) +); + + +-- 角色表 +CREATE TABLE js_sys_role +( + role_code varchar(64) NOT NULL, + role_name varchar(100) NOT NULL, + role_type varchar(100), + role_sort decimal(10), + is_sys char(1), + user_type varchar(16), + data_scope char(1), + status char(1) DEFAULT '0' NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + PRIMARY KEY (role_code) +); + + +-- 角色数据权限表 +CREATE TABLE js_sys_role_data_scope +( + role_code varchar(64) NOT NULL, + ctrl_type varchar(20) NOT NULL, + ctrl_data varchar(64) NOT NULL, + ctrl_permi varchar(64) NOT NULL, + PRIMARY KEY (role_code, ctrl_type, ctrl_data, ctrl_permi) +); + + +-- 角色与菜单关联表 +CREATE TABLE js_sys_role_menu +( + role_code varchar(64) NOT NULL, + menu_code varchar(64) NOT NULL, + PRIMARY KEY (role_code, menu_code) +); + + +-- 用户表 +CREATE TABLE js_sys_user +( + user_code varchar(100) NOT NULL, + login_code varchar(100) NOT NULL, + user_name varchar(100) NOT NULL, + password varchar(100) NOT NULL, + email varchar(300), + mobile varchar(100), + phone varchar(100), + sex char(1), + avatar varchar(1000), + sign vargraphic(200), + wx_openid varchar(100), + mobile_imei varchar(100), + user_type varchar(16) NOT NULL, + ref_code varchar(64), + ref_name varchar(100), + mgr_type char(1) NOT NULL, + pwd_security_level decimal(1), + pwd_update_date timestamp, + pwd_update_record varchar(1000), + pwd_question varchar(200), + pwd_question_answer varchar(200), + pwd_question_2 varchar(200), + pwd_question_answer_2 varchar(200), + pwd_question_3 varchar(200), + pwd_question_answer_3 varchar(200), + pwd_quest_update_date timestamp, + last_login_ip varchar(100), + last_login_date timestamp, + freeze_date timestamp, + freeze_cause varchar(200), + user_weight decimal(8) DEFAULT 0, + status char NOT NULL, + create_by varchar(64) NOT NULL, + create_date timestamp NOT NULL, + update_by varchar(64) NOT NULL, + update_date timestamp NOT NULL, + remarks vargraphic(500), + corp_code varchar(64) DEFAULT '0' NOT NULL, + corp_name vargraphic(100) DEFAULT 'JeeSite' NOT NULL, + extend_s1 vargraphic(500), + extend_s2 vargraphic(500), + extend_s3 vargraphic(500), + extend_s4 vargraphic(500), + extend_s5 vargraphic(500), + extend_s6 vargraphic(500), + extend_s7 vargraphic(500), + extend_s8 vargraphic(500), + extend_i1 decimal(19), + extend_i2 decimal(19), + extend_i3 decimal(19), + extend_i4 decimal(19), + extend_f1 decimal(19,4), + extend_f2 decimal(19,4), + extend_f3 decimal(19,4), + extend_f4 decimal(19,4), + extend_d1 timestamp, + extend_d2 timestamp, + extend_d3 timestamp, + extend_d4 timestamp, + PRIMARY KEY (user_code) +); + + +-- 用户数据权限表 +CREATE TABLE js_sys_user_data_scope +( + user_code varchar(100) NOT NULL, + ctrl_type varchar(20) NOT NULL, + ctrl_data varchar(64) NOT NULL, + ctrl_permi varchar(64) NOT NULL, + PRIMARY KEY (user_code, ctrl_type, ctrl_data, ctrl_permi) +); + + +-- 用户与角色关联表 +CREATE TABLE js_sys_user_role +( + user_code varchar(100) NOT NULL, + role_code varchar(64) NOT NULL, + PRIMARY KEY (user_code, role_code) +); + + + +/* Create Indexes */ + +CREATE INDEX idx_gen_table_ptn ON js_gen_table (parent_table_name); +CREATE INDEX idx_gen_table_column_tn ON js_gen_table_column (table_name); +CREATE INDEX idx_sys_area_pc ON js_sys_area (parent_code); +CREATE INDEX idx_sys_area_ts ON js_sys_area (tree_sort); +CREATE INDEX idx_sys_area_status ON js_sys_area (status); +CREATE INDEX idx_sys_area_pcs ON js_sys_area (parent_codes); +CREATE INDEX idx_sys_area_tss ON js_sys_area (tree_sorts); +CREATE INDEX idx_sys_company_cc ON js_sys_company (corp_code); +CREATE INDEX idx_sys_company_pc ON js_sys_company (parent_code); +CREATE INDEX idx_sys_company_ts ON js_sys_company (tree_sort); +CREATE INDEX idx_sys_company_status ON js_sys_company (status); +CREATE INDEX idx_sys_company_vc ON js_sys_company (view_code); +CREATE INDEX idx_sys_company_pcs ON js_sys_company (parent_codes); +CREATE INDEX idx_sys_company_tss ON js_sys_company (tree_sorts); +CREATE UNIQUE INDEX idx_sys_config_key ON js_sys_config (config_key); +CREATE INDEX idx_sys_dict_data_cc ON js_sys_dict_data (corp_code); +CREATE INDEX idx_sys_dict_data_dt ON js_sys_dict_data (dict_type); +CREATE INDEX idx_sys_dict_data_pc ON js_sys_dict_data (parent_code); +CREATE INDEX idx_sys_dict_data_status ON js_sys_dict_data (status); +CREATE INDEX idx_sys_dict_data_pcs ON js_sys_dict_data (parent_codes); +CREATE INDEX idx_sys_dict_data_ts ON js_sys_dict_data (tree_sort); +CREATE INDEX idx_sys_dict_data_tss ON js_sys_dict_data (tree_sorts); +CREATE INDEX idx_sys_dict_data_dv ON js_sys_dict_data (dict_value); +CREATE INDEX idx_sys_dict_type_is ON js_sys_dict_type (is_sys); +CREATE INDEX idx_sys_dict_type_status ON js_sys_dict_type (status); +CREATE INDEX idx_sys_employee_cco ON js_sys_employee (company_code); +CREATE INDEX idx_sys_employee_cc ON js_sys_employee (corp_code); +CREATE INDEX idx_sys_employee_ud ON js_sys_employee (update_date); +CREATE INDEX idx_sys_employee_oc ON js_sys_employee (office_code); +CREATE INDEX idx_sys_employee_status ON js_sys_employee (status); +CREATE INDEX idx_sys_file_entity_md5 ON js_sys_file_entity (file_md5); +CREATE INDEX idx_sys_file_entity_size ON js_sys_file_entity (file_size); +CREATE INDEX idx_sys_file_biz_ft ON js_sys_file_upload (file_type); +CREATE INDEX idx_sys_file_biz_fi ON js_sys_file_upload (file_id); +CREATE INDEX idx_sys_file_biz_status ON js_sys_file_upload (status); +CREATE INDEX idx_sys_file_biz_cb ON js_sys_file_upload (create_by); +CREATE INDEX idx_sys_file_biz_ud ON js_sys_file_upload (update_date); +CREATE INDEX idx_sys_file_biz_bt ON js_sys_file_upload (biz_type); +CREATE INDEX idx_sys_file_biz_bk ON js_sys_file_upload (biz_key); +CREATE INDEX idx_sys_job_status ON js_sys_job (status); +CREATE INDEX idx_sys_job_log_jn ON js_sys_job_log (job_name); +CREATE INDEX idx_sys_job_log_jg ON js_sys_job_log (job_group); +CREATE INDEX idx_sys_job_log_t ON js_sys_job_log (job_type); +CREATE INDEX idx_sys_job_log_e ON js_sys_job_log (job_event); +CREATE INDEX idx_sys_job_log_ie ON js_sys_job_log (is_exception); +CREATE INDEX idx_sys_lang_code ON js_sys_lang (lang_code); +CREATE INDEX idx_sys_lang_type ON js_sys_lang (lang_type); +CREATE INDEX idx_sys_log_cb ON js_sys_log (create_by); +CREATE INDEX idx_sys_log_cc ON js_sys_log (corp_code); +CREATE INDEX idx_sys_log_lt ON js_sys_log (log_type); +CREATE INDEX idx_sys_log_bk ON js_sys_log (biz_key); +CREATE INDEX idx_sys_log_bt ON js_sys_log (biz_type); +CREATE INDEX idx_sys_log_ie ON js_sys_log (is_exception); +CREATE INDEX idx_sys_log_cd ON js_sys_log (create_date); +CREATE INDEX idx_sys_menu_pc ON js_sys_menu (parent_code); +CREATE INDEX idx_sys_menu_ts ON js_sys_menu (tree_sort); +CREATE INDEX idx_sys_menu_status ON js_sys_menu (status); +CREATE INDEX idx_sys_menu_mt ON js_sys_menu (menu_type); +CREATE INDEX idx_sys_menu_pss ON js_sys_menu (parent_codes); +CREATE INDEX idx_sys_menu_tss ON js_sys_menu (tree_sorts); +CREATE INDEX idx_sys_menu_sc ON js_sys_menu (sys_code); +CREATE INDEX idx_sys_menu_is ON js_sys_menu (is_show); +CREATE INDEX idx_sys_menu_mcs ON js_sys_menu (module_codes); +CREATE INDEX idx_sys_menu_wt ON js_sys_menu (weight); +CREATE INDEX idx_sys_module_status ON js_sys_module (status); +CREATE INDEX idx_sys_msg_inner_cb ON js_sys_msg_inner (create_by); +CREATE INDEX idx_sys_msg_inner_status ON js_sys_msg_inner (status); +CREATE INDEX idx_sys_msg_inner_cl ON js_sys_msg_inner (content_level); +CREATE INDEX idx_sys_msg_inner_sc ON js_sys_msg_inner (send_user_code); +CREATE INDEX idx_sys_msg_inner_sd ON js_sys_msg_inner (send_date); +CREATE INDEX idx_sys_msg_inner_r_mi ON js_sys_msg_inner_record (msg_inner_id); +CREATE INDEX idx_sys_msg_inner_r_ruc ON js_sys_msg_inner_record (receive_user_code); +CREATE INDEX idx_sys_msg_inner_r_status ON js_sys_msg_inner_record (read_status); +CREATE INDEX idx_sys_msg_inner_r_star ON js_sys_msg_inner_record (is_star); +CREATE INDEX idx_sys_msg_push_type ON js_sys_msg_push (msg_type); +CREATE INDEX idx_sys_msg_push_rc ON js_sys_msg_push (receive_code); +CREATE INDEX idx_sys_msg_push_uc ON js_sys_msg_push (receive_user_code); +CREATE INDEX idx_sys_msg_push_suc ON js_sys_msg_push (send_user_code); +CREATE INDEX idx_sys_msg_push_pd ON js_sys_msg_push (plan_push_date); +CREATE INDEX idx_sys_msg_push_ps ON js_sys_msg_push (push_status); +CREATE INDEX idx_sys_msg_push_rs ON js_sys_msg_push (read_status); +CREATE INDEX idx_sys_msg_push_bk ON js_sys_msg_push (biz_key); +CREATE INDEX idx_sys_msg_push_bt ON js_sys_msg_push (biz_type); +CREATE INDEX idx_sys_msg_push_imp ON js_sys_msg_push (is_merge_push); +CREATE INDEX idx_sys_msg_pushed_type ON js_sys_msg_pushed (msg_type); +CREATE INDEX idx_sys_msg_pushed_rc ON js_sys_msg_pushed (receive_code); +CREATE INDEX idx_sys_msg_pushed_uc ON js_sys_msg_pushed (receive_user_code); +CREATE INDEX idx_sys_msg_pushed_suc ON js_sys_msg_pushed (send_user_code); +CREATE INDEX idx_sys_msg_pushed_pd ON js_sys_msg_pushed (plan_push_date); +CREATE INDEX idx_sys_msg_pushed_ps ON js_sys_msg_pushed (push_status); +CREATE INDEX idx_sys_msg_pushed_rs ON js_sys_msg_pushed (read_status); +CREATE INDEX idx_sys_msg_pushed_bk ON js_sys_msg_pushed (biz_key); +CREATE INDEX idx_sys_msg_pushed_bt ON js_sys_msg_pushed (biz_type); +CREATE INDEX idx_sys_msg_pushed_imp ON js_sys_msg_pushed (is_merge_push); +CREATE INDEX idx_sys_msg_tpl_key ON js_sys_msg_template (tpl_key); +CREATE INDEX idx_sys_msg_tpl_type ON js_sys_msg_template (tpl_type); +CREATE INDEX idx_sys_msg_tpl_status ON js_sys_msg_template (status); +CREATE INDEX idx_sys_office_cc ON js_sys_office (corp_code); +CREATE INDEX idx_sys_office_pc ON js_sys_office (parent_code); +CREATE INDEX idx_sys_office_pcs ON js_sys_office (parent_codes); +CREATE INDEX idx_sys_office_status ON js_sys_office (status); +CREATE INDEX idx_sys_office_ot ON js_sys_office (office_type); +CREATE INDEX idx_sys_office_vc ON js_sys_office (view_code); +CREATE INDEX idx_sys_office_ts ON js_sys_office (tree_sort); +CREATE INDEX idx_sys_office_tss ON js_sys_office (tree_sorts); +CREATE INDEX idx_sys_post_cc ON js_sys_post (corp_code); +CREATE INDEX idx_sys_post_status ON js_sys_post (status); +CREATE INDEX idx_sys_post_ps ON js_sys_post (post_sort); +CREATE INDEX idx_sys_role_cc ON js_sys_role (corp_code); +CREATE INDEX idx_sys_role_is ON js_sys_role (is_sys); +CREATE INDEX idx_sys_role_status ON js_sys_role (status); +CREATE INDEX idx_sys_role_rs ON js_sys_role (role_sort); +CREATE INDEX idx_sys_user_lc ON js_sys_user (login_code); +CREATE INDEX idx_sys_user_email ON js_sys_user (email); +CREATE INDEX idx_sys_user_mobile ON js_sys_user (mobile); +CREATE INDEX idx_sys_user_wo ON js_sys_user (wx_openid); +CREATE INDEX idx_sys_user_imei ON js_sys_user (mobile_imei); +CREATE INDEX idx_sys_user_rt ON js_sys_user (user_type); +CREATE INDEX idx_sys_user_rc ON js_sys_user (ref_code); +CREATE INDEX idx_sys_user_mt ON js_sys_user (mgr_type); +CREATE INDEX idx_sys_user_us ON js_sys_user (user_weight); +CREATE INDEX idx_sys_user_ud ON js_sys_user (update_date); +CREATE INDEX idx_sys_user_status ON js_sys_user (status); +CREATE INDEX idx_sys_user_cc ON js_sys_user (corp_code); + + + diff --git a/web/db/mssql/core.sql b/web/db/mssql/core.sql index 0cf1045d..593862fd 100644 --- a/web/db/mssql/core.sql +++ b/web/db/mssql/core.sql @@ -481,13 +481,13 @@ CREATE TABLE [js_sys_msg_inner] [content_type] char(1), [msg_content] text NOT NULL, [receive_type] char(1) NOT NULL, - [receive_codes] text NOT NULL, - [receive_names] text NOT NULL, - [send_user_code] varchar(64) NOT NULL, - [send_user_name] varchar(100) NOT NULL, - [send_date] datetime NOT NULL, + [receive_codes] text, + [receive_names] text, + [send_user_code] varchar(64), + [send_user_name] varchar(100), + [send_date] datetime, [is_attac] char(1), - [notify_types] varchar(100) NOT NULL, + [notify_types] varchar(100), [status] char(1) NOT NULL, [create_by] varchar(64) NOT NULL, [create_date] datetime NOT NULL, diff --git a/web/db/mysql/core.sql b/web/db/mysql/core.sql index 8725c462..cf0b337a 100644 --- a/web/db/mysql/core.sql +++ b/web/db/mysql/core.sql @@ -481,14 +481,14 @@ CREATE TABLE js_sys_msg_inner content_level char(1) NOT NULL COMMENT '内容级别(1普通 2一般 3紧急)', content_type char(1) COMMENT '内容类型(1公告 2新闻 3会议 4其它)', msg_content text NOT NULL COMMENT '消息内容', - receive_type char(1) NOT NULL COMMENT '接受者类型(1用户 2部门 3角色 4岗位)', - receive_codes text NOT NULL COMMENT '接受者字符串', - receive_names text NOT NULL COMMENT '接受者名称字符串', - send_user_code varchar(64) NOT NULL COMMENT '发送者用户编码', - send_user_name varchar(100) NOT NULL COMMENT '发送者用户姓名', - send_date datetime NOT NULL COMMENT '发送时间', + receive_type char(1) NOT NULL COMMENT '接受者类型(0全部 1用户 2部门 3角色 4岗位)', + receive_codes text COMMENT '接受者字符串', + receive_names text COMMENT '接受者名称字符串', + send_user_code varchar(64) COMMENT '发送者用户编码', + send_user_name varchar(100) COMMENT '发送者用户姓名', + send_date datetime COMMENT '发送时间', is_attac char(1) COMMENT '是否有附件', - notify_types varchar(100) NOT NULL COMMENT '通知类型(PC APP 短信 邮件 微信)多选', + notify_types varchar(100) COMMENT '通知类型(PC APP 短信 邮件 微信)多选', status char(1) NOT NULL COMMENT '状态(0正常 1删除 4审核 5驳回 9草稿)', create_by varchar(64) NOT NULL COMMENT '创建者', create_date datetime NOT NULL COMMENT '创建时间', diff --git a/web/db/oracle/core.sql b/web/db/oracle/core.sql index b29424e7..9943b4e1 100644 --- a/web/db/oracle/core.sql +++ b/web/db/oracle/core.sql @@ -481,13 +481,13 @@ CREATE TABLE js_sys_msg_inner content_type char(1), msg_content clob NOT NULL, receive_type char(1) NOT NULL, - receive_codes clob NOT NULL, - receive_names clob NOT NULL, - send_user_code varchar2(64) NOT NULL, - send_user_name varchar2(100) NOT NULL, - send_date timestamp NOT NULL, + receive_codes clob, + receive_names clob, + send_user_code varchar2(64), + send_user_name varchar2(100), + send_date timestamp, is_attac char(1), - notify_types varchar2(100) NOT NULL, + notify_types varchar2(100), status char(1) NOT NULL, create_by varchar2(64) NOT NULL, create_date timestamp NOT NULL, @@ -1252,7 +1252,7 @@ COMMENT ON COLUMN js_sys_msg_inner.msg_title IS '消息标题'; COMMENT ON COLUMN js_sys_msg_inner.content_level IS '内容级别(1普通 2一般 3紧急)'; COMMENT ON COLUMN js_sys_msg_inner.content_type IS '内容类型(1公告 2新闻 3会议 4其它)'; COMMENT ON COLUMN js_sys_msg_inner.msg_content IS '消息内容'; -COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(1用户 2部门 3角色 4岗位)'; +COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(0全部 1用户 2部门 3角色 4岗位)'; COMMENT ON COLUMN js_sys_msg_inner.receive_codes IS '接受者字符串'; COMMENT ON COLUMN js_sys_msg_inner.receive_names IS '接受者名称字符串'; COMMENT ON COLUMN js_sys_msg_inner.send_user_code IS '发送者用户编码'; diff --git a/web/db/postgresql/core.sql b/web/db/postgresql/core.sql index f7a01cf4..0a0403c5 100644 --- a/web/db/postgresql/core.sql +++ b/web/db/postgresql/core.sql @@ -481,13 +481,13 @@ CREATE TABLE js_sys_msg_inner content_type char(1), msg_content text NOT NULL, receive_type char(1) NOT NULL, - receive_codes text NOT NULL, - receive_names text NOT NULL, - send_user_code varchar(64) NOT NULL, - send_user_name varchar(100) NOT NULL, - send_date timestamp NOT NULL, + receive_codes text, + receive_names text, + send_user_code varchar(64), + send_user_name varchar(100), + send_date timestamp, is_attac char(1), - notify_types varchar(100) NOT NULL, + notify_types varchar(100), status char(1) NOT NULL, create_by varchar(64) NOT NULL, create_date timestamp NOT NULL, @@ -1252,7 +1252,7 @@ COMMENT ON COLUMN js_sys_msg_inner.msg_title IS '消息标题'; COMMENT ON COLUMN js_sys_msg_inner.content_level IS '内容级别(1普通 2一般 3紧急)'; COMMENT ON COLUMN js_sys_msg_inner.content_type IS '内容类型(1公告 2新闻 3会议 4其它)'; COMMENT ON COLUMN js_sys_msg_inner.msg_content IS '消息内容'; -COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(1用户 2部门 3角色 4岗位)'; +COMMENT ON COLUMN js_sys_msg_inner.receive_type IS '接受者类型(0全部 1用户 2部门 3角色 4岗位)'; COMMENT ON COLUMN js_sys_msg_inner.receive_codes IS '接受者字符串'; COMMENT ON COLUMN js_sys_msg_inner.receive_names IS '接受者名称字符串'; COMMENT ON COLUMN js_sys_msg_inner.send_user_code IS '发送者用户编码';