diff --git a/db/pig.sql b/db/pig.sql index bedfb6a6d9e14109edf11e462fed85dbbaf514ab..055fd82d42fd7079f16da4f96933cc2fd3514380 100644 --- a/db/pig.sql +++ b/db/pig.sql @@ -1,6 +1,6 @@ DROP DATABASE IF EXISTS `pig`; -CREATE DATABASE `pig` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; +CREATE DATABASE `pig` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -14,16 +14,16 @@ USE `pig`; DROP TABLE IF EXISTS `sys_dept`; CREATE TABLE `sys_dept` ( `dept_id` bigint NOT NULL COMMENT '部门ID', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '部门名称', + `name` varchar(50) DEFAULT NULL COMMENT '部门名称', `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '修改时间', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标志', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `parent_id` bigint DEFAULT NULL COMMENT '父级部门ID', PRIMARY KEY (`dept_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='部门管理'; +) ENGINE=InnoDB COMMENT='部门管理'; -- ---------------------------- -- Records of sys_dept @@ -51,18 +51,18 @@ COMMIT; DROP TABLE IF EXISTS `sys_dict`; CREATE TABLE `sys_dict` ( `id` bigint NOT NULL COMMENT '编号', - `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型', - `description` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `dict_type` varchar(100) DEFAULT NULL COMMENT '字典类型', + `description` varchar(100) DEFAULT NULL COMMENT '描述', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注信息', - `system_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '系统标志', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标志', + `remarks` varchar(255) DEFAULT NULL COMMENT '备注信息', + `system_flag` char(1) DEFAULT '0' COMMENT '系统标志', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', PRIMARY KEY (`id`) USING BTREE, KEY `sys_dict_del_flag` (`del_flag`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典表'; +) ENGINE=InnoDB COMMENT='字典表'; -- ---------------------------- -- Records of sys_dict @@ -104,22 +104,22 @@ DROP TABLE IF EXISTS `sys_dict_item`; CREATE TABLE `sys_dict_item` ( `id` bigint NOT NULL COMMENT '编号', `dict_id` bigint NOT NULL COMMENT '字典ID', - `item_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典项值', - `label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典项名称', - `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型', - `description` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典项描述', + `item_value` varchar(100) DEFAULT NULL COMMENT '字典项值', + `label` varchar(100) DEFAULT NULL COMMENT '字典项名称', + `dict_type` varchar(100) DEFAULT NULL COMMENT '字典类型', + `description` varchar(100) DEFAULT NULL COMMENT '字典项描述', `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序(升序)', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注信息', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标志', + `remarks` varchar(255) DEFAULT NULL COMMENT '备注信息', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', PRIMARY KEY (`id`) USING BTREE, KEY `sys_dict_value` (`item_value`) USING BTREE, KEY `sys_dict_label` (`label`) USING BTREE, KEY `sys_dict_item_del_flag` (`del_flag`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典项'; +) ENGINE=InnoDB COMMENT='字典项'; -- ---------------------------- -- Records of sys_dict_item @@ -218,18 +218,18 @@ COMMIT; DROP TABLE IF EXISTS `sys_file`; CREATE TABLE `sys_file` ( `id` bigint NOT NULL COMMENT '编号', - `file_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文件名', - `bucket_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文件存储桶名称', - `original` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '原始文件名', - `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文件类型', + `file_name` varchar(100) DEFAULT NULL COMMENT '文件名', + `bucket_name` varchar(200) DEFAULT NULL COMMENT '文件存储桶名称', + `original` varchar(100) DEFAULT NULL COMMENT '原始文件名', + `type` varchar(50) DEFAULT NULL COMMENT '文件类型', `file_size` bigint DEFAULT NULL COMMENT '文件大小', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `create_time` datetime DEFAULT NULL COMMENT '上传时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标志', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文件管理表'; +) ENGINE=InnoDB COMMENT='文件管理表'; -- ---------------------------- -- Records of sys_file @@ -243,26 +243,26 @@ COMMIT; DROP TABLE IF EXISTS `sys_log`; CREATE TABLE `sys_log` ( `id` bigint NOT NULL COMMENT '编号', - `log_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '日志类型', - `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '日志标题', - `service_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '服务ID', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT ' ' COMMENT '修改人', + `log_type` char(1) DEFAULT '0' COMMENT '日志类型', + `title` varchar(255) DEFAULT NULL COMMENT '日志标题', + `service_id` varchar(32) DEFAULT NULL COMMENT '服务ID', + `create_by` varchar(64) DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) DEFAULT ' ' COMMENT '修改人', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remote_addr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '远程地址', - `user_agent` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户代理', - `request_uri` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请求URI', - `method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请求方法', - `params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '请求参数', + `remote_addr` varchar(255) DEFAULT NULL COMMENT '远程地址', + `user_agent` varchar(1000) DEFAULT NULL COMMENT '用户代理', + `request_uri` varchar(255) DEFAULT NULL COMMENT '请求URI', + `method` varchar(10) DEFAULT NULL COMMENT '请求方法', + `params` text COMMENT '请求参数', `time` bigint DEFAULT NULL COMMENT '执行时间', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标志', - `exception` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '异常信息', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', + `exception` text COMMENT '异常信息', PRIMARY KEY (`id`) USING BTREE, KEY `sys_log_request_uri` (`request_uri`) USING BTREE, KEY `sys_log_type` (`log_type`) USING BTREE, KEY `sys_log_create_date` (`create_time`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='日志表'; +) ENGINE=InnoDB COMMENT='日志表'; -- ---------------------------- @@ -271,24 +271,24 @@ CREATE TABLE `sys_log` ( DROP TABLE IF EXISTS `sys_menu`; CREATE TABLE `sys_menu` ( `menu_id` bigint NOT NULL COMMENT '菜单ID', - `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '菜单名称', - `en_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '英文名称', - `permission` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '权限标识', - `path` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '路由路径', + `name` varchar(32) DEFAULT NULL COMMENT '菜单名称', + `en_name` varchar(128) DEFAULT NULL COMMENT '英文名称', + `permission` varchar(32) DEFAULT NULL COMMENT '权限标识', + `path` varchar(128) DEFAULT NULL COMMENT '路由路径', `parent_id` bigint DEFAULT NULL COMMENT '父菜单ID', - `icon` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '菜单图标', - `visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '是否可见,0隐藏,1显示', + `icon` varchar(64) DEFAULT NULL COMMENT '菜单图标', + `visible` char(1) DEFAULT '1' COMMENT '是否可见,0隐藏,1显示', `sort_order` int DEFAULT '1' COMMENT '排序值,越小越靠前', - `keep_alive` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '是否缓存,0否,1是', - `embedded` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否内嵌,0否,1是', - `menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '菜单类型,0目录,1菜单,2按钮', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', + `keep_alive` char(1) DEFAULT '0' COMMENT '是否缓存,0否,1是', + `embedded` char(1) DEFAULT NULL COMMENT '是否内嵌,0否,1是', + `menu_type` char(1) DEFAULT '0' COMMENT '菜单类型,0目录,1菜单,2按钮', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标志,0未删除,1已删除', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标志,0未删除,1已删除', PRIMARY KEY (`menu_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='菜单权限表'; +) ENGINE=InnoDB COMMENT='菜单权限表'; -- ---------------------------- -- Records of sys_menu @@ -381,24 +381,24 @@ COMMIT; DROP TABLE IF EXISTS `sys_oauth_client_details`; CREATE TABLE `sys_oauth_client_details` ( `id` bigint NOT NULL COMMENT 'ID', - `client_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '客户端ID', - `resource_ids` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '资源ID集合', - `client_secret` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '客户端秘钥', - `scope` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '授权范围', - `authorized_grant_types` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '授权类型', - `web_server_redirect_uri` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '回调地址', - `authorities` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '权限集合', + `client_id` varchar(32) NOT NULL COMMENT '客户端ID', + `resource_ids` varchar(256) DEFAULT NULL COMMENT '资源ID集合', + `client_secret` varchar(256) DEFAULT NULL COMMENT '客户端秘钥', + `scope` varchar(256) DEFAULT NULL COMMENT '授权范围', + `authorized_grant_types` varchar(256) DEFAULT NULL COMMENT '授权类型', + `web_server_redirect_uri` varchar(256) DEFAULT NULL COMMENT '回调地址', + `authorities` varchar(256) DEFAULT NULL COMMENT '权限集合', `access_token_validity` int DEFAULT NULL COMMENT '访问令牌有效期(秒)', `refresh_token_validity` int DEFAULT NULL COMMENT '刷新令牌有效期(秒)', - `additional_information` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '附加信息', - `autoapprove` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '自动授权', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记,0未删除,1已删除', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `additional_information` varchar(4096) DEFAULT NULL COMMENT '附加信息', + `autoapprove` varchar(256) DEFAULT NULL COMMENT '自动授权', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标记,0未删除,1已删除', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='终端信息表'; +) ENGINE=InnoDB COMMENT='终端信息表'; -- ---------------------------- -- Records of sys_oauth_client_details @@ -419,17 +419,17 @@ COMMIT; DROP TABLE IF EXISTS `sys_post`; CREATE TABLE `sys_post` ( `post_id` bigint NOT NULL COMMENT '岗位ID', - `post_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位编码', - `post_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位名称', + `post_code` varchar(64) NOT NULL COMMENT '岗位编码', + `post_name` varchar(50) NOT NULL COMMENT '岗位名称', `post_sort` int NOT NULL COMMENT '岗位排序', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '岗位描述', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '是否删除 -1:已删除 0:正常', + `remark` varchar(500) DEFAULT NULL COMMENT '岗位描述', + `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '是否删除 -1:已删除 0:正常', `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_by` varchar(64) NOT NULL DEFAULT '' COMMENT '更新人', PRIMARY KEY (`post_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='岗位信息表'; +) ENGINE=InnoDB COMMENT='岗位信息表'; -- ---------------------------- -- Records of sys_post @@ -444,20 +444,20 @@ COMMIT; DROP TABLE IF EXISTS `sys_public_param`; CREATE TABLE `sys_public_param` ( `public_id` bigint NOT NULL COMMENT '编号', - `public_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名称', - `public_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '键', - `public_value` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '值', - `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '状态,0禁用,1启用', - `validate_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '校验码', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `public_name` varchar(128) DEFAULT NULL COMMENT '名称', + `public_key` varchar(128) DEFAULT NULL COMMENT '键', + `public_value` varchar(128) DEFAULT NULL COMMENT '值', + `status` char(1) DEFAULT '0' COMMENT '状态,0禁用,1启用', + `validate_code` varchar(64) DEFAULT NULL COMMENT '校验码', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `public_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '类型,0未知,1系统,2业务', - `system_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '系统标识,0非系统,1系统', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记,0未删除,1已删除', + `public_type` char(1) DEFAULT '0' COMMENT '类型,0未知,1系统,2业务', + `system_flag` char(1) DEFAULT '0' COMMENT '系统标识,0非系统,1系统', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标记,0未删除,1已删除', PRIMARY KEY (`public_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='公共参数配置表'; +) ENGINE=InnoDB COMMENT='公共参数配置表'; -- ---------------------------- -- Records of sys_public_param @@ -480,17 +480,17 @@ COMMIT; DROP TABLE IF EXISTS `sys_role`; CREATE TABLE `sys_role` ( `role_id` bigint NOT NULL COMMENT '角色ID', - `role_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '角色名称', - `role_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '角色编码', - `role_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '角色描述', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `role_name` varchar(64) DEFAULT NULL COMMENT '角色名称', + `role_code` varchar(64) DEFAULT NULL COMMENT '角色编码', + `role_desc` varchar(255) DEFAULT NULL COMMENT '角色描述', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记,0未删除,1已删除', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标记,0未删除,1已删除', PRIMARY KEY (`role_id`) USING BTREE, KEY `role_idx1_role_code` (`role_code`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统角色表'; +) ENGINE=InnoDB COMMENT='系统角色表'; -- ---------------------------- -- Records of sys_role @@ -508,7 +508,7 @@ CREATE TABLE `sys_role_menu` ( `role_id` bigint NOT NULL COMMENT '角色ID', `menu_id` bigint NOT NULL COMMENT '菜单ID', PRIMARY KEY (`role_id`,`menu_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色菜单表'; +) ENGINE=InnoDB COMMENT='角色菜单表'; -- ---------------------------- -- Records of sys_role_menu @@ -604,31 +604,31 @@ COMMIT; DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `user_id` bigint NOT NULL COMMENT '用户ID', - `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户名', - `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '密码', - `salt` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '盐值', - `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '电话号码', - `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '头像', - `nickname` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '昵称', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '姓名', - `email` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '邮箱地址', + `username` varchar(64) DEFAULT NULL COMMENT '用户名', + `password` varchar(255) DEFAULT NULL COMMENT '密码', + `salt` varchar(255) DEFAULT NULL COMMENT '盐值', + `phone` varchar(20) DEFAULT NULL COMMENT '电话号码', + `avatar` varchar(255) DEFAULT NULL COMMENT '头像', + `nickname` varchar(64) DEFAULT NULL COMMENT '昵称', + `name` varchar(64) DEFAULT NULL COMMENT '姓名', + `email` varchar(128) DEFAULT NULL COMMENT '邮箱地址', `dept_id` bigint DEFAULT NULL COMMENT '所属部门ID', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - `lock_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '锁定标记,0未锁定,9已锁定', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记,0未删除,1已删除', - `wx_openid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '微信登录openId', - `mini_openid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '小程序openId', - `qq_openid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'QQ openId', - `gitee_login` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '码云标识', - `osc_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '开源中国标识', + `lock_flag` char(1) DEFAULT '0' COMMENT '锁定标记,0未锁定,9已锁定', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标记,0未删除,1已删除', + `wx_openid` varchar(32) DEFAULT NULL COMMENT '微信登录openId', + `mini_openid` varchar(32) DEFAULT NULL COMMENT '小程序openId', + `qq_openid` varchar(32) DEFAULT NULL COMMENT 'QQ openId', + `gitee_login` varchar(100) DEFAULT NULL COMMENT '码云标识', + `osc_id` varchar(100) DEFAULT NULL COMMENT '开源中国标识', PRIMARY KEY (`user_id`) USING BTREE, KEY `user_wx_openid` (`wx_openid`) USING BTREE, KEY `user_qq_openid` (`qq_openid`) USING BTREE, KEY `user_idx1_username` (`username`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户表'; +) ENGINE=InnoDB COMMENT='用户表'; -- ---------------------------- -- Records of sys_user @@ -645,7 +645,7 @@ CREATE TABLE `sys_user_post` ( `user_id` bigint NOT NULL COMMENT '用户ID', `post_id` bigint NOT NULL COMMENT '岗位ID', PRIMARY KEY (`user_id`,`post_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户与岗位关联表'; +) ENGINE=InnoDB ROW_FORMAT=DYNAMIC COMMENT='用户与岗位关联表'; -- ---------------------------- -- Records of sys_user_post @@ -662,7 +662,7 @@ CREATE TABLE `sys_user_role` ( `user_id` bigint NOT NULL COMMENT '用户ID', `role_id` bigint NOT NULL COMMENT '角色ID', PRIMARY KEY (`user_id`,`role_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户角色表'; +) ENGINE=InnoDB COMMENT='用户角色表'; -- ---------------------------- -- Records of sys_user_role @@ -678,52 +678,52 @@ COMMIT; DROP TABLE IF EXISTS `sys_job`; CREATE TABLE `sys_job` ( `job_id` bigint NOT NULL COMMENT '任务id', - `job_name` varchar(64) CHARACTER SET utf8mb4 NOT NULL COMMENT '任务名称', - `job_group` varchar(64) CHARACTER SET utf8mb4 NOT NULL COMMENT '任务组名', - `job_order` char(1) CHARACTER SET utf8mb4 DEFAULT '1' COMMENT '组内执行顺利,值越大执行优先级越高,最大值9,最小值1', - `job_type` char(1) CHARACTER SET utf8mb4 NOT NULL DEFAULT '1' COMMENT '1、java类;2、spring bean名称;3、rest调用;4、jar调用;9其他', - `execute_path` varchar(500) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT 'job_type=3时,rest调用地址,仅支持rest get协议,需要增加String返回值,0成功,1失败;job_type=4时,jar路径;其它值为空', - `class_name` varchar(500) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT 'job_type=1时,类完整路径;job_type=2时,spring bean名称;其它值为空', - `method_name` varchar(500) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '任务方法', - `method_params_value` varchar(2000) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '参数值', - `cron_expression` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT 'cron执行表达式', - `misfire_policy` varchar(20) CHARACTER SET utf8mb4 DEFAULT '3' COMMENT '错失执行策略(1错失周期立即执行 2错失周期执行一次 3下周期执行)', - `job_tenant_type` char(1) CHARACTER SET utf8mb4 DEFAULT '1' COMMENT '1、多租户任务;2、非多租户任务', - `job_status` char(1) CHARACTER SET utf8mb4 DEFAULT '0' COMMENT '状态(1、未发布;2、运行中;3、暂停;4、删除;)', - `job_execute_status` char(1) CHARACTER SET utf8mb4 DEFAULT '0' COMMENT '状态(0正常 1异常)', - `create_by` varchar(64) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '创建者', + `job_name` varchar(64) NOT NULL COMMENT '任务名称', + `job_group` varchar(64) NOT NULL COMMENT '任务组名', + `job_order` char(1) DEFAULT '1' COMMENT '组内执行顺利,值越大执行优先级越高,最大值9,最小值1', + `job_type` char(1) NOT NULL DEFAULT '1' COMMENT '1、java类;2、spring bean名称;3、rest调用;4、jar调用;9其他', + `execute_path` varchar(500) DEFAULT NULL COMMENT 'job_type=3时,rest调用地址,仅支持rest get协议,需要增加String返回值,0成功,1失败;job_type=4时,jar路径;其它值为空', + `class_name` varchar(500) DEFAULT NULL COMMENT 'job_type=1时,类完整路径;job_type=2时,spring bean名称;其它值为空', + `method_name` varchar(500) DEFAULT NULL COMMENT '任务方法', + `method_params_value` varchar(2000) DEFAULT NULL COMMENT '参数值', + `cron_expression` varchar(255) DEFAULT NULL COMMENT 'cron执行表达式', + `misfire_policy` varchar(20) DEFAULT '3' COMMENT '错失执行策略(1错失周期立即执行 2错失周期执行一次 3下周期执行)', + `job_tenant_type` char(1) DEFAULT '1' COMMENT '1、多租户任务;2、非多租户任务', + `job_status` char(1) DEFAULT '0' COMMENT '状态(1、未发布;2、运行中;3、暂停;4、删除;)', + `job_execute_status` char(1) DEFAULT '0' COMMENT '状态(0正常 1异常)', + `create_by` varchar(64) DEFAULT NULL COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 DEFAULT '' COMMENT '更新者', + `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `start_time` timestamp NULL DEFAULT NULL COMMENT '初次执行时间', `previous_time` timestamp NULL DEFAULT NULL COMMENT '上次执行时间', `next_time` timestamp NULL DEFAULT NULL COMMENT '下次执行时间', - `remark` varchar(500) CHARACTER SET utf8mb4 DEFAULT '' COMMENT '备注信息', + `remark` varchar(500) DEFAULT '' COMMENT '备注信息', PRIMARY KEY (`job_id`) USING BTREE, UNIQUE KEY `job_name_group_idx` (`job_name`,`job_group`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='定时任务调度表'; +) ENGINE=InnoDB COMMENT='定时任务调度表'; -- ---------------------------- DROP TABLE IF EXISTS `sys_job_log`; CREATE TABLE `sys_job_log` ( `job_log_id` bigint NOT NULL COMMENT '任务日志ID', `job_id` bigint NOT NULL COMMENT '任务id', - `job_name` varchar(64) CHARACTER SET utf8 DEFAULT NULL COMMENT '任务名称', - `job_group` varchar(64) CHARACTER SET utf8 DEFAULT NULL COMMENT '任务组名', - `job_order` char(1) CHARACTER SET utf8 DEFAULT NULL COMMENT '组内执行顺利,值越大执行优先级越高,最大值9,最小值1', - `job_type` char(1) CHARACTER SET utf8 NOT NULL DEFAULT '1' COMMENT '1、java类;2、spring bean名称;3、rest调用;4、jar调用;9其他', - `execute_path` varchar(500) CHARACTER SET utf8 DEFAULT NULL COMMENT 'job_type=3时,rest调用地址,仅支持post协议;job_type=4时,jar路径;其它值为空', - `class_name` varchar(500) CHARACTER SET utf8 DEFAULT NULL COMMENT 'job_type=1时,类完整路径;job_type=2时,spring bean名称;其它值为空', - `method_name` varchar(500) CHARACTER SET utf8 DEFAULT NULL COMMENT '任务方法', - `method_params_value` varchar(2000) CHARACTER SET utf8 DEFAULT NULL COMMENT '参数值', - `cron_expression` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT 'cron执行表达式', - `job_message` varchar(500) CHARACTER SET utf8 DEFAULT NULL COMMENT '日志信息', - `job_log_status` char(1) CHARACTER SET utf8 DEFAULT '0' COMMENT '执行状态(0正常 1失败)', - `execute_time` varchar(30) CHARACTER SET utf8 DEFAULT NULL COMMENT '执行时间', - `exception_info` varchar(2000) CHARACTER SET utf8 DEFAULT '' COMMENT '异常信息', + `job_name` varchar(64) DEFAULT NULL COMMENT '任务名称', + `job_group` varchar(64) DEFAULT NULL COMMENT '任务组名', + `job_order` char(1) DEFAULT NULL COMMENT '组内执行顺利,值越大执行优先级越高,最大值9,最小值1', + `job_type` char(1) NOT NULL DEFAULT '1' COMMENT '1、java类;2、spring bean名称;3、rest调用;4、jar调用;9其他', + `execute_path` varchar(500) DEFAULT NULL COMMENT 'job_type=3时,rest调用地址,仅支持post协议;job_type=4时,jar路径;其它值为空', + `class_name` varchar(500) DEFAULT NULL COMMENT 'job_type=1时,类完整路径;job_type=2时,spring bean名称;其它值为空', + `method_name` varchar(500) DEFAULT NULL COMMENT '任务方法', + `method_params_value` varchar(2000) DEFAULT NULL COMMENT '参数值', + `cron_expression` varchar(255) DEFAULT NULL COMMENT 'cron执行表达式', + `job_message` varchar(500) DEFAULT NULL COMMENT '日志信息', + `job_log_status` char(1) DEFAULT '0' COMMENT '执行状态(0正常 1失败)', + `execute_time` varchar(30) DEFAULT NULL COMMENT '执行时间', + `exception_info` varchar(2000) DEFAULT '' COMMENT '异常信息', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`job_log_id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='定时任务执行日志表'; +) ENGINE=InnoDB COMMENT='定时任务执行日志表'; # @@ -898,21 +898,21 @@ CREATE TABLE QRTZ_LOCKS DROP TABLE IF EXISTS `gen_datasource_conf`; CREATE TABLE `gen_datasource_conf` ( `id` bigint NOT NULL COMMENT '主键', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '别名', - `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'jdbcurl', - `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户名', - `password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '密码', + `name` varchar(64) DEFAULT NULL COMMENT '别名', + `url` varchar(255) DEFAULT NULL COMMENT 'jdbcurl', + `username` varchar(64) DEFAULT NULL COMMENT '用户名', + `password` varchar(64) DEFAULT NULL COMMENT '密码', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记', - `ds_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据库类型', - `conf_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '配置类型', - `ds_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据库名称', - `instance` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '实例', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标记', + `ds_type` varchar(64) DEFAULT NULL COMMENT '数据库类型', + `conf_type` char(1) DEFAULT NULL COMMENT '配置类型', + `ds_name` varchar(64) DEFAULT NULL COMMENT '数据库名称', + `instance` varchar(64) DEFAULT NULL COMMENT '实例', `port` int DEFAULT NULL COMMENT '端口', - `host` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '主机', + `host` varchar(128) DEFAULT NULL COMMENT '主机', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='数据源表'; +) ENGINE=InnoDB COMMENT='数据源表'; -- ---------------------------- -- Records of gen_datasource_conf @@ -926,17 +926,17 @@ COMMIT; DROP TABLE IF EXISTS `gen_field_type`; CREATE TABLE `gen_field_type` ( `id` bigint NOT NULL COMMENT '主键', - `column_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字段类型', - `attr_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '属性类型', - `package_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '属性包名', + `column_type` varchar(200) DEFAULT NULL COMMENT '字段类型', + `attr_type` varchar(200) DEFAULT NULL COMMENT '属性类型', + `package_name` varchar(200) DEFAULT NULL COMMENT '属性包名', `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', + `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '修改时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记', + `update_by` varchar(64) DEFAULT NULL COMMENT '修改人', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标记', PRIMARY KEY (`id`), UNIQUE KEY `column_type` (`column_type`) -) ENGINE=InnoDB AUTO_INCREMENT=1634915190321451010 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字段类型管理'; +) ENGINE=InnoDB AUTO_INCREMENT=1634915190321451010 COMMENT='字段类型管理'; -- ---------------------------- -- Records of gen_field_type @@ -982,15 +982,15 @@ COMMIT; DROP TABLE IF EXISTS `gen_group`; CREATE TABLE `gen_group` ( `id` bigint NOT NULL, - `group_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分组名称', - `group_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分组描述', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `group_name` varchar(255) DEFAULT NULL COMMENT '分组名称', + `group_desc` varchar(255) DEFAULT NULL COMMENT '分组描述', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', `create_time` datetime DEFAULT NULL COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '修改人', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记', + `del_flag` char(1) DEFAULT '0' COMMENT '删除标记', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模板分组'; +) ENGINE=InnoDB COMMENT='模板分组'; -- ---------------------------- @@ -999,31 +999,31 @@ CREATE TABLE `gen_group` ( DROP TABLE IF EXISTS `gen_table`; CREATE TABLE `gen_table` ( `id` bigint NOT NULL, - `table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '表名', - `class_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类名', - `db_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据库类型', - `table_comment` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '说明', - `author` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '作者', - `email` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '邮箱', - `package_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '项目包名', - `version` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '项目版本号', - `i18n` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '是否生成带有i18n 0 不带有 1带有', + `table_name` varchar(200) DEFAULT NULL COMMENT '表名', + `class_name` varchar(200) DEFAULT NULL COMMENT '类名', + `db_type` varchar(200) DEFAULT NULL COMMENT '数据库类型', + `table_comment` varchar(200) DEFAULT NULL COMMENT '说明', + `author` varchar(200) DEFAULT NULL COMMENT '作者', + `email` varchar(200) DEFAULT NULL COMMENT '邮箱', + `package_name` varchar(200) DEFAULT NULL COMMENT '项目包名', + `version` varchar(200) DEFAULT NULL COMMENT '项目版本号', + `i18n` char(1) DEFAULT '0' COMMENT '是否生成带有i18n 0 不带有 1带有', `style` bigint DEFAULT NULL COMMENT '代码风格', - `child_table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '子表名称', - `main_field` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '主表关联键', - `child_field` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '子表关联键', - `generator_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '生成方式 0:zip压缩包 1:自定义目录', - `backend_path` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '后端生成路径', - `frontend_path` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '前端生成路径', - `module_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '模块名', - `function_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '功能名', + `child_table_name` varchar(200) DEFAULT NULL COMMENT '子表名称', + `main_field` varchar(200) DEFAULT NULL COMMENT '主表关联键', + `child_field` varchar(200) DEFAULT NULL COMMENT '子表关联键', + `generator_type` char(1) DEFAULT '0' COMMENT '生成方式 0:zip压缩包 1:自定义目录', + `backend_path` varchar(500) DEFAULT NULL COMMENT '后端生成路径', + `frontend_path` varchar(500) DEFAULT NULL COMMENT '前端生成路径', + `module_name` varchar(200) DEFAULT NULL COMMENT '模块名', + `function_name` varchar(200) DEFAULT NULL COMMENT '功能名', `form_layout` tinyint DEFAULT NULL COMMENT '表单布局 1:一列 2:两列', - `ds_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据源ID', + `ds_name` varchar(200) DEFAULT NULL COMMENT '数据源ID', `baseclass_id` bigint DEFAULT NULL COMMENT '基类ID', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `table_name` (`table_name`,`ds_name`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='代码生成表'; +) ENGINE=InnoDB COMMENT='代码生成表'; -- ---------------------------- -- Records of gen_table @@ -1037,30 +1037,30 @@ COMMIT; DROP TABLE IF EXISTS `gen_table_column`; CREATE TABLE `gen_table_column` ( `id` bigint NOT NULL, - `ds_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据源名称', - `table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '表名称', - `field_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字段名称', - `field_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字段类型', - `field_comment` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字段说明', - `attr_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '属性名', - `attr_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '属性类型', - `package_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '属性包名', + `ds_name` varchar(200) DEFAULT NULL COMMENT '数据源名称', + `table_name` varchar(200) DEFAULT NULL COMMENT '表名称', + `field_name` varchar(200) DEFAULT NULL COMMENT '字段名称', + `field_type` varchar(200) DEFAULT NULL COMMENT '字段类型', + `field_comment` varchar(200) DEFAULT NULL COMMENT '字段说明', + `attr_name` varchar(200) DEFAULT NULL COMMENT '属性名', + `attr_type` varchar(200) DEFAULT NULL COMMENT '属性类型', + `package_name` varchar(200) DEFAULT NULL COMMENT '属性包名', `sort` int DEFAULT NULL COMMENT '排序', - `auto_fill` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '自动填充 DEFAULT、INSERT、UPDATE、INSERT_UPDATE', - `primary_pk` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '主键 0:否 1:是', - `base_field` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '基类字段 0:否 1:是', - `form_item` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '表单项 0:否 1:是', - `form_required` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '表单必填 0:否 1:是', - `form_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '表单类型', - `form_validator` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '表单效验', - `grid_item` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '列表项 0:否 1:是', - `grid_sort` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '列表排序 0:否 1:是', - `query_item` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '查询项 0:否 1:是', - `query_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '查询方式', - `query_form_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '查询表单类型', - `field_dict` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型', + `auto_fill` varchar(20) DEFAULT NULL COMMENT '自动填充 DEFAULT、INSERT、UPDATE、INSERT_UPDATE', + `primary_pk` char(1) DEFAULT '0' COMMENT '主键 0:否 1:是', + `base_field` char(1) DEFAULT '0' COMMENT '基类字段 0:否 1:是', + `form_item` char(1) DEFAULT '0' COMMENT '表单项 0:否 1:是', + `form_required` char(1) DEFAULT '0' COMMENT '表单必填 0:否 1:是', + `form_type` varchar(200) DEFAULT NULL COMMENT '表单类型', + `form_validator` varchar(200) DEFAULT NULL COMMENT '表单效验', + `grid_item` char(1) DEFAULT '0' COMMENT '列表项 0:否 1:是', + `grid_sort` char(1) DEFAULT '0' COMMENT '列表排序 0:否 1:是', + `query_item` char(1) DEFAULT '0' COMMENT '查询项 0:否 1:是', + `query_type` varchar(200) DEFAULT NULL COMMENT '查询方式', + `query_form_type` varchar(200) DEFAULT NULL COMMENT '查询表单类型', + `field_dict` varchar(200) DEFAULT NULL COMMENT '字典类型', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='代码生成表字段'; +) ENGINE=InnoDB COMMENT='代码生成表字段'; -- ---------------------------- -- Records of gen_table_column @@ -1074,17 +1074,17 @@ COMMIT; DROP TABLE IF EXISTS `gen_template`; CREATE TABLE `gen_template` ( `id` bigint NOT NULL COMMENT '主键', - `template_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板名称', - `generator_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板路径', - `template_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板描述', - `template_code` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板代码', + `template_name` varchar(255) NOT NULL COMMENT '模板名称', + `generator_path` varchar(255) NOT NULL COMMENT '模板路径', + `template_desc` varchar(255) NOT NULL COMMENT '模板描述', + `template_code` text NOT NULL COMMENT '模板代码', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新', - `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标记', - `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人', - `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人', + `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标记', + `create_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '创建人', + `update_by` varchar(64) NOT NULL DEFAULT ' ' COMMENT '修改人', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模板'; +) ENGINE=InnoDB COMMENT='模板'; -- ---------------------------- @@ -1095,6 +1095,6 @@ CREATE TABLE `gen_template_group` ( `group_id` bigint NOT NULL COMMENT '分组id', `template_id` bigint NOT NULL COMMENT '模板id', PRIMARY KEY (`group_id`,`template_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模板分组关联表'; +) ENGINE=InnoDB COMMENT='模板分组关联表'; SET FOREIGN_KEY_CHECKS = 1; diff --git a/img-folder/image-20250228144443846.png b/img-folder/image-20250228144443846.png new file mode 100644 index 0000000000000000000000000000000000000000..e983d66d37f22d0c9e4a4e76056773239643ca5c Binary files /dev/null and b/img-folder/image-20250228144443846.png differ diff --git a/img-folder/image-20250303192309.png b/img-folder/image-20250303192309.png new file mode 100644 index 0000000000000000000000000000000000000000..f654ac9a4bc15e39471921760f526fefc397293f Binary files /dev/null and b/img-folder/image-20250303192309.png differ diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/PigNestedExceptionUtils.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/PigNestedExceptionUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..72cd4cf42957401fc4c8bc2e500921abde263fe6 --- /dev/null +++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/PigNestedExceptionUtils.java @@ -0,0 +1,61 @@ +package com.pig4cloud.pig.common.core.util; + +import org.springframework.lang.Nullable; + +/** + * Helper class for implementing exception classes which are capable of + * holding nested exceptions. Necessary because we can't share a base + * class among different exception types. + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/3/2 12:50 + * @updateUser: MI + * @updateTime: 2025/3/2 12:50 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +public class PigNestedExceptionUtils { + + /** + * 手动构建异常消息 + * + * @param message 基础消息 + * @param cause 异常原因 + * @return 完整的异常消息 + */ + public static String buildCustomMessage(String message, Throwable cause) { + StringBuilder sb = new StringBuilder(); + if (message != null && !message.isEmpty()) { + sb.append(message); + } + if (cause != null) { + if (sb.length() > 0) { + sb.append("; "); + } + sb.append("nested exception is ").append(cause.getClass().getName()).append(": ").append(cause.getMessage()); + } + return sb.toString(); + } + + /** + * Retrieve the innermost cause of the given exception, if any. + * + * @param original the original exception to introspect + * @return the innermost exception, or {@code null} if none + * @since 1.6 + */ + @Nullable + public static Throwable getRootCause(@Nullable Throwable original) { + if (original == null) { + return null; + } + Throwable rootCause = null; + Throwable cause = original.getCause(); + while (cause != null && cause != rootCause) { + rootCause = cause; + cause = cause.getCause(); + } + return rootCause; + } +} diff --git a/pig-common/pig-common-exception/README.md b/pig-common/pig-common-exception/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7ccc2deb09d3f279f130ae042daca0c9fd75b09d --- /dev/null +++ b/pig-common/pig-common-exception/README.md @@ -0,0 +1,846 @@ +## 异常设计 + +pig-ommon-exception 组件的封装设计思想。这个组件通常用于统一处理微服务架构中的异常,提供全局异常处理、自定义异常、错误码管理等功能。以下是其核心设计思想和实现思路: + +1. 设计目标 +pig-common-exception 的主要设计目标包括: +- 统一异常处理:避免每个微服务重复实现异常处理逻辑。 +- 标准化错误响应:定义统一的错误响应格式,方便前端或调用方处理。 +- 自定义异常支持:支持业务自定义异常,区分系统异常和业务异常。 +- 错误码管理:集中管理错误码,避免散落在代码中。 +- 于集成:通过 Spring Boot Starter 的方式,快速集成到微服务中。 + +2. 核心设计思想 +(1) 统一异常处理 +- 通过 Spring 的 @ControllerAdvice 和 @ExceptionHandler 实现全局异常处理,捕获所有未处理的异常,并返回统一的错误响应。 + +3.设计思想: +- 使用枚举定义错误码,确保唯一性和可读性。 +- 提供 code 获取.properties 配置文件中错误提示信息。 +- 支持扩展,新增错误码只需在枚举中添加新值。 + +[如何优雅的设计接口状态码和异常本文介绍了HTTP状态码及业务状态码的区别和作用,提出并实现一种统一维护业务状态码和HTT - 掘金](https://juejin.cn/post/7345071242825924623#heading-28) + +## Java异常分类 + +| 异常类型 | 描述 | 是否必须捕获 | 例子 | +| ---------------------- | ------------------------------------------------------- | ------------------------ | --------------------------------------------- | +| NestedCheckedException | 继承自Execption(但不是RuntimeException),编译时强制处理 | 是(try-catch 或throws) | SQLException | +| UncheckedException | 继承自RuntimeException,运行时异常,不强制处理 | 否 | IllegalArgumentException,NullPointerException | + + + +## throws和throw的区别 + +有throws的时候可以没有throw,有throw的时候,如果throw抛的异常是Exception体系,那么必须有throws在方法上声明。 + +throws用于方法的声明上,其后跟的是异常类名,后面可以跟多个异常类,之间用逗号隔开throw用于方法体中,其后跟的是一个异常对象名 + +## 自定义异常体系 + +![image-20250228144443846.png](..%2F..%2Fimg-folder%2Fimage-20250228144443846.png) + +## 组件结构 +```text +pig-common-exception +├── src/main/java +│ ├── com/pig4cloud/pig/common/exception +│ │ └── config +│ │ │ └── AbstractMessageSourceConfig.java +│ │ │ └── ExceptionAutoConfiguration.java +│ │ │ └── MessageSourceConfigurer.java +│ │ │ └── PropertyConfig.java +│ │ ├── exception +│ │ │ └── BusinessException.java +│ │ │ └── GlobalExceptionHandler.java +│ │ ├── constant +│ │ │ └── BaseExceptionCodeEnum.java +│ │ │ └── BaseExceptionMassageEnum.java +│ │ └── response +│ │ │ └── BaseResponseCode.java +│ │ │ └── CommonResponseCode.java +└── src/main/resources + └── META-INF + ├── spring + └── org.springframework.boot.autoconfigure.AutoConfiguration.imports + └── spring.factories +``` +## 全局异常处理 + +```java +package com.pig4cloud.pig.common.exception; + +import cn.hutool.core.collection.CollUtil; +import com.pig4cloud.pig.common.config.PropertyConfig; +import com.pig4cloud.pig.common.response.BaseResponseCode; +import com.pig4cloud.pig.common.response.CommonResponseCode; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.validation.BindException; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.validation.ObjectError; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.yaml.snakeyaml.constructor.DuplicateKeyException; +import org.apache.commons.lang.exception.ExceptionUtils; +import java.io.FileNotFoundException; +import java.util.List; + +import static com.pig4cloud.pig.common.response.CommonResponseCode.validateFailed; + + +/** + * 全局异常处理 + * https://www.howardliu.cn/springboot-action-gracefully-response-exception/ + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/15 11:45 + * @updateUser: MI + * @updateTime: 2025/2/15 11:45 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +@Slf4j +@RestControllerAdvice +@Order(Ordered.HIGHEST_PRECEDENCE) +public class GlobalExceptionHandler { + + + /** + * 处理 json 请求体调用接口校验失败抛出的异常 + * + * @param ex + * @param request + * @return + */ + @ResponseStatus(HttpStatus.OK) + @ExceptionHandler(value = Exception.class) + public BaseResponseCode handleException(Exception ex, HttpServletRequest request) { + log.error("-------------------------{}", ex.getMessage(), ex); + if (ex instanceof BusinessRuntimeException) { + log.error("处理业务运行时异常->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + BusinessRuntimeException businessRuntimeException = (BusinessRuntimeException) ex; + // 获取异常信息 + String exceptionMessage = getLocaleMessage(businessRuntimeException.getCode(), businessRuntimeException.getMessage()); + // 获取异常消息的参数 + String[] parameters = businessRuntimeException.getParameters(); + + + businessRuntimeException.setErrorMessage(exceptionMessage); + log.error(businessRuntimeException.getCode() + "#####detailMessage=:{},errorMessage:{}", businessRuntimeException.getMessage(), businessRuntimeException.getErrorMessage()); + return new BaseResponseCode(businessRuntimeException.getCode(), exceptionMessage).replacePlaceholder(parameters); + } else if (ex instanceof DuplicateKeyException) { + log.error("请求地址,数据重复异常->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + return new BaseResponseCode(CommonResponseCode.DUPLICATE_CODE.getCode(), CommonResponseCode.DUPLICATE_CODE.getMessage()); + } else if (ex instanceof IllegalArgumentException) { + log.error("请求地址->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + return new BaseResponseCode(CommonResponseCode.INTERNAL_SERVER_ERROR.getCode(), ex.getMessage()); + } else if (ex instanceof HttpRequestMethodNotSupportedException) { + log.error("请求地址->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + return new BaseResponseCode(CommonResponseCode.SC_METHOD_NOT_ALLOWED.getCode(), CommonResponseCode.SC_METHOD_NOT_ALLOWED.getMessage()); + } else if (ex instanceof BindException) { + log.error("BindException 参数异常->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + // 处理 form data方式调用接口校验失败抛出的异常 + BindingResult bindingResult = ((BindException) ex).getBindingResult(); + String message = null; + if (bindingResult.hasErrors()) { + FieldError fieldError = bindingResult.getFieldError(); + if (fieldError != null) { + message = fieldError.getField() + fieldError.getDefaultMessage(); + } + } + return validateFailed(message); + } else if (ex instanceof MethodArgumentNotValidException) { + log.error("MethodArgumentNotValidException 处理参数校验的异常->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + BindingResult bindingResult = getBindingResult((MethodArgumentNotValidException) ex); + if (validatedErrors(bindingResult)) { + + List errors = bindingResult.getAllErrors(); + if (CollUtil.isNotEmpty(errors)) { + log.info("-----------errors--------------{}", errors); + // 这里列出了全部错误参数,按正常逻辑,只需要第一条错误即可 + FieldError fieldError = (FieldError) errors.get(0); + + return new BaseResponseCode(CommonResponseCode.MISSING_PARAMETER.getCode(), fieldError.getDefaultMessage()); + } + } + } else if (ex instanceof RuntimeException) { + log.error("请求地址->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + return new BaseResponseCode(CommonResponseCode.INTERNAL_SERVER_ERROR.getCode(), ex.getMessage()); + } else { + log.error("【系统异常】{}", ex); + return new BaseResponseCode(ServiceConfig.ERR_KICKED, ex.getMessage()); + } + + return new BaseResponseCode(ServiceConfig.ERR_KICKED, ex.getMessage()); + } + + private String getRequestURI(HttpServletRequest request) { + return request.getRequestURI().substring(request.getContextPath().length()); + } + + /** + * @param bindingResult + * @return + */ + public boolean validatedErrors(BindingResult bindingResult) { + return bindingResult.hasErrors() || CollUtil.isNotEmpty(bindingResult.getAllErrors()) || bindingResult.getAllErrors().isEmpty(); + } + + private BindingResult getBindingResult(MethodArgumentNotValidException e) { + return e.getBindingResult(); + } + + /** + * FileNotFoundException 异常捕获处理 + * + * @param exception 自定义FileNotFoundException异常类型 + * @return Result + */ + @ExceptionHandler({FileNotFoundException.class}) + public BaseResponseCode noFoundException(Exception exception) { + log.error("程序异常==>errorCode:{}, exception:{}", HttpStatus.NOT_FOUND.value(), exception.getMessage()); + return new BaseResponseCode(HttpStatus.NOT_FOUND.value() + "", exception.getMessage()); + } + + /** + * NullPointerException 空指针异常捕获处理 + * + * @param ex 自定义NullPointerException异常类型 + * @return Result + */ + @ExceptionHandler + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public BaseResponseCode handleException(NullPointerException ex) { + log.error("程序异常:{}" + ex.toString()); + return new BaseResponseCode(HttpStatus.INTERNAL_SERVER_ERROR.value() + "", ex.getMessage()); + } + + /* *//** + * ValidationException + *//* + @ExceptionHandler(ValidationException.class) + public BaseResponseCode handleValidationException(ValidationException e) { + log.error(e.getMessage(), e); + return new BaseResponseCode(CommonResponseCode.VALIDATION_CODE.getCode(), e.getCause().getMessage()); + } + + */ + + /** + * ConstraintViolationException + *//* + @ExceptionHandler(ConstraintViolationException.class) + public BaseResponseCode handleConstraintViolationException(ConstraintViolationException e) { + log.error(e.getMessage(), e); + return new BaseResponseCode(CommonResponseCode.PARAMETER_FORMAT_ERROR.getCode(), e.getMessage()); + }*/ + private String getLocaleMessage(String code, String defaultMsg) { + return PropertyConfig.getProperty(code, defaultMsg); + } + + + class ServiceConfig { + public static final String ERR_KICKED = "1000"; + } +} + +``` + +## 属性资源配置获取工具类 + +```java +package com.mate.cloud.common.config; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; + +/** + * 属性资源配置获取工具类 + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/5 11:55 + * @updateUser: MI + * @updateTime: 2025/2/5 11:55 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +@Slf4j +public class PropertyConfig { + + private static MessageSource messageSource; + + public PropertyConfig(MessageSource messageSource) { + PropertyConfig.messageSource = messageSource; + } + + /** + * 获取配置属性的值 + * + * @param code 配置键 + * @return 配置值 + */ + public static String getProperty(String code) { + + log.info("Fetching property for code: {}", code); + + String message = messageSource.getMessage(code, null, LocaleContextHolder.getLocale()); + if (StringUtils.isBlank(message)) { + return messageSource.getMessage(code, new Object[0], LocaleContextHolder.getLocale()); + } + log.info("getProperty message: {}", message); + return message; + } + + /** + * 获取配置属性的值,带默认信息 + * + * @param code 配置键 + * @param defaultMessage 默认信息 + * @return 配置值 + */ + public static String getProperty(String code, String defaultMessage) { + if (StringUtils.isEmpty(code)) { + return defaultMessage; + } else { + return messageSource.getMessage(code, null, defaultMessage, LocaleContextHolder.getLocale()); + } + } + + /** + * 获取配置属性的值,带参数 + * + * @param code 配置键 + * @param args 参数 + * @param defaultMessage 默认信息 + * @return 配置值 + */ + public static String getProperty(String code, Object[] args, String defaultMessage) { + if (StringUtils.isEmpty(code)) { + return defaultMessage; + } else { + return messageSource.getMessage(code, args, defaultMessage, LocaleContextHolder.getLocale()); + } + } + + /** + * 获取配置属性的值,支持 Integer 类型键 + * + * @param code 配置键 + * @return 配置值 + */ + public static String getProperty(Integer code) { + return getProperty(String.valueOf(code)); + } + + /** + * 获取配置属性的值,支持 Integer 类型键,带默认信息 + * + * @param code 配置键 + * @param defaultMessage 默认信息 + * @return 配置值 + */ + public static String getProperty(Integer code, String defaultMessage) { + return getProperty(String.valueOf(code), defaultMessage); + } + + /** + * 获取配置属性的值,支持 Integer 类型键,带参数 + * + * @param code 配置键 + * @param args 参数 + * @param defaultMessage 默认信息 + * @return 配置值 + */ + public static String getProperty(Integer code, Object[] args, String defaultMessage) { + return getProperty(String.valueOf(code), args, defaultMessage); + } +} +``` + + + +## 使用示例 + +### 微服务模块添加 Maven 依赖 + +```xml + + ${project.groupId} + pig-common-exception + +``` + +### 业务工程继承AbstractMessageSourceConfig 重写 getBaseNames() 方法提供异常配置文件路径 + +```java + +/** + * 异常信息配置 + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/1/26 15:58 + * @updateUser: MI + * @updateTime: 2025/1/26 15:58 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +@Configuration +public class ExceptionMessageSourceConfig extends AbstractMessageSourceConfig { + + + @Override + protected String[] getBaseNames() { + return new String[]{"classpath:messages/messages"}; + } +} +``` + + +### 业务异常 +```java +/** + * 系统异常 + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/7 12:49 + * @updateUser: MI + * @updateTime: 2025/2/7 12:49 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +public abstract class SystemException extends BusinessRuntimeException { + + public SystemException() { + super(); + } + + public SystemException(String code) { + super(code); + } + + public SystemException(String code, String message) { + super(code, message); + } + + public SystemException(Throwable cause) { + super(cause); + } + +} + +/** + * 系统业务异常 + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/7 13:15 + * @updateUser: MI + * @updateTime: 2025/2/7 13:15 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +public class SystemBusinessException extends SystemException { + + + public SystemBusinessException() { + super(); + } + + public SystemBusinessException(String code) { + super(code); + } + public SystemBusinessException(String code, String message) { + super(code, message); + } + + + + public SystemBusinessException(Throwable cause) { + super(cause); + } +} +``` +### 模块异常信息配置文件命名规则:模块名+异常信息配置文件后缀(.properties) + +```properties +100=参数错误 +102=该邮箱已被注册,{0}直接登录吧 +103=注册失败,请重试 + +#用户登录 +104=登录用户无任何管理区域 +105=没有操作权限 +106=此操作需要登录后进行 +107=欢迎{0}登录系统! +108=登录用户不属于任何角色 +109=登录用户无任何操作权限z +110=请输入用户账号 +111=用户不存在 +112=请输入验证码 +113=验证码输入错误 +114=用户名或密码输入错误 +115=菜单包含子菜单不允许删除 +116=系统内置字典不能删除 +117=系统内置字典项目不能删除 +118=字典类型已存在 +119=该字典已存在这个字典项的值,请重新配置 +120=系统内置不可修改 + +#密码修改 +130=修改密码 +131=请输入旧密码 +132=请输入新密码 +133=新密码和确认密码两次密码不一致 +134=原始密码不正确! + + + +#系统管理 +#201=医院名称不允许重复 +202=系统内置参数无法删除 +203=删除失败 +204=配置參數不存在,请先到后台配置参数 +205=医院名称不能为空 +206=医院名称重复 +207=医院信息不存在 +208=您输入的用户账号已存在,不允许添加 +209=根据名称获取监督单位信息不存在! +210=根据名称获取医院单位信息不存在! + +212=您删除的用户 信息不存在 +213=您输入的账号与别人的账号重复! +214=输入的用户状态不正确 +215=更新的用户信息在系统中不存在 +216=用户类型为卫生局、卫生院、卫生室、供货商必须输入单位名称 +217=输入的单位名称不存在! +218=您输入的账号与别人的账号重复! +219=您输入的账号与别人的账号重复! +220=您输入的账号与别人的账号重复! + +200=成功 +201=邮箱或密码不能为空 +211=当前邮箱还未注册 +222=密码不正确 +223=密码修改失败,请稍后再试 + + +301=保存教育经历失败 +302=没有找到该用户的教育经历 +303=用户id不能为空 +311=主键id不能为空 +401=保存工作经历失败 + + + + + +#药品目录 +#301=药品中标信息中流水号、通用名、剂型、规格、单位、转换系数、生产企业名称、中标价格、商品名称为必填项 + +304=服务熔断 +305=药品信息信息唯一性冲突,通用名:{0}、剂型:{1}、规格:{2}、转换系数:{3}、生产企业:{4}、商品名称:{5} +306=药品信息删除失败,已存在药品信息相关的采购单等信息 +307=药品信息中中标价格请填写整数或小数 + +308=药品信息中批准文号有效期格式错误,填写如:2015-5-1 +309=药品信息中是否进口药请填写1或0 +310=药品信息中最新零售价请填写整数或小数 +#311=药品信息中有无药品检验报告请填写1或0 +312=药品信息中药品检验报告有效期格式错误,填写如:2015-5-1 + +313=药品信息成功导出{0},点击下载 +314=药品信息导入成功{0},导入失败{1} +315=药品信息导入成功{0},失败{1},点击下载失败记录 + +316=药品信息不存在 +317=流水号:{0},通用名:{1},该药品信息不存在 +318=药品信息导出成功,点击下载 +#供货商药品目录 +#401=药品已在供货目录存在 +#402=药品在供货目录不存在 +403=流水号:{0},通用名:{1},该药品信息暂停交易不允许添加 +404=流水号:{0},通用名:{1},在供货目录已存在不允许重复添加 +405=流水号:{0},通用名:{1},在供货目录不存在,删除失败 +406=供货状态只允许选择正常或供货状态暂停 +#采购单 +501=采购单在系统中不存在 +502=采购单未提交或审核不通过方可执行提交操作 +503=只允许操作自己创建的采购单 +504=没有添加采购药品不允许提交采购单 +505=存在没有设置交易价、采购量等信息的记录,不允许提交采购单 + +506=采购单只在未提交或审核不通过时可以修改(添加药品,删除药品,修改采购量) +507=只允许删除自己创建的采购单 +508=相同的采购药品在采购单中不允许重复添加 +509=采购药品信息在系统中不存在 + +510=流水号【{0}】的药品已暂停交易不允许采购 +511=流水号【{0}】的药品无法供货不允许采购 + +512=采购药品交易价格不允许大于药品中标价 + +513=请选择采购单的审核结果(审核通过或审核不通过) +514=只允许对采购单状态为审核中的记录进行审核操作 + +515=药品采购截止日期之前不可执行“到期未送货”操作 +516=采购药品不允许重复执行发货操作 +517=药品流水号{0},药品通用名{1}所在的采购单{2}当前状态不是审核通过,不允许受理 +518=采购药品不允许重复执行入库操作 +519=入库量不能大于采购量 +520=只允许对已发货的药品执行入库操作 +521=请选择审核结果 +522=流水号:{0},通用名:{1},该药品信息交易暂停不允许添加至采购单 +523=流水号:{0},通用名:{1},该药品信息暂停供货不允许添加至采购单 +524=流水号:{0},通用名:{1},该药品信息已存在采购单不允许重复添加 +525=流水号:{0},通用名:{1},该药品信息在采购单中不存在 +526=流水号:{0},通用名:{1},交易价格不允许大于药品中标价 + +550=流水号:{0},通用名:{1}所在的采购单{2},采购状态不是未确认送货所以不能发货 +551=只允许处理自己待发货的药品 +552=采购单状态审核通过方可发货 +553=采购单状态审核通过方可入库 +554=流水号:{0},通用名:{1}所在的采购单{2},采购状态不是已发货所以不能入库 +555=流水号:{0},通用名:{1}所在的采购单{2},已入库,不允许重复提交 +556=流水号:{0},通用名:{1}所在的采购单{2},入库量大于采购量,不允许提交 +557=请输入大于0的合法数值 +560=存在药品交易状态暂停或供货状态暂停的记录不允许提交 + + +601=没有查询到用户信息 + +#601=退货单在系统中不存在 +602=退货单已提交不允许重复提交 +603=只允许提交自己创建的退货单 +604=没有添加退货药品不允许提交退货单 +605=存在没有设置退货量不允许提交退货单 +607=只允许删除自己创建的退货单 +609=退货药品在退货单中不存在 +610=退货单已提交不允许进行修改删除等操作 +611=药品已结算不允许退货 +612=没有查询到项目信息 +613=相同的药品不允许重复退货 +614=退货量不能为空 +615=退货量不能大于采购量 +616=不允许重复执行退货操作 + +710=结算单已提交不允许进行修改删除等操作 + +9001=指定抽奖活动不存在! +9002=活动已结束! +9003=当前奖品库存不足! +9004=奖项数据未初始化! +9005=上一次抽奖还未结束! +9006=请求参数不正确! +9999=系统繁忙,请稍后重试! +``` + + +### 异常码枚举+ code 对应配置文件 key=value (.properties) +```java +package com.mate.cloud.admin.constant; + + +import lombok.Getter; + +/** + * 异常码枚举 + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/1/26 16:01 + * @updateUser: MI + * @updateTime: 2025/1/26 16:01 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +@Getter +public enum SystemExceptionCodeEnum { + /** + * 用户不存在 + */ + USER_NOT_EXIST("111"), + /** + * 菜单删除失败 + */ + MENU_DEL_WARN("115"), + /** + * 系统内置字典不能删除 + */ + DICT_NOT_DEL_WARN("116"), + /** + * 系统内置字典项不能删除 + */ + DICT_ITEM_NOT_DEL_WARN("117"), + /** + * 字典类型已存在 + */ + DICT_EXIST_WARN("118"), + /** + * 系统内置不可修改 + */ + DICT_ITEM_VALUE_WARN("119"), + /** + * 系统内置不可修改 + */ + SYSTEM_MODIFY_WARN("120"), + /** + * 新密码和确认密码两次密码不一致 + */ + PWD_CONFIRM_ERROR("123"), + + ORIGINAL_PWD_ERROR("124"), + + /** + * 系统内置参数无法删除 + */ + PARAM_NOT_DEL("202"), + + /** + * 删除失败 + */ + PARAM_DEL_FAIL("203"), + /** + * 配置參數不存在 + */ + CONFIG_PARAM_NOT_EXITS("203"), + /** + * 密码错误 + */ + PASSWORD_ERROR("222"), + /** + * 用户信息为空 + */ + USER_USERINFO_EMPTY("222"); + + + private final String code; + + + SystemExceptionCodeEnum(String code) { + this.code = code; + } + +} + +``` + +### 异常抛出示例 + +```java +@AllArgsConstructor +@Service("sysMenuService") +public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService { + @Override + public boolean removeByIdMenu(Integer id) { + // 菜单是否包含子菜单 + if (this.checkChild(id)) { + throw new SystemBusinessException(SystemExceptionCodeEnum.MENU_DEL_WARN.getCode()); + } + // 同时删除角色菜单关系 + sysRoleMenuMapper.delete(Wrappers.query() + .lambda().eq(SysRoleMenu::getMenuId, id)); + // 删除当前菜单及其子菜单 + return super.removeById(id); + } + // 省略..... +} +``` + +## 案例:异常捕获重建 +```java + public static String saveFileToNasUnderNewPath(BusinessTypeEnum businessType, String fileName, byte[] bytes, boolean isReName) { + String name = (isReName ? reName(fileName) : FilenameUtils.getName(fileName)); + String relativePath = new StringBuilder(Constants.NEW_NAS_DIRECTORY_PREFIX) + .append(businessType.getType()) + .append(File.separator) + .append(new DateTime().toString("yyyy")) + .append(File.separator) + .append(new DateTime().toString("MM")) + .append(File.separator) + .append(new DateTime().toString("dd")) + .append(File.separator) + .append(UUID.getID()) + .append(File.separator) + .append(name) + .toString(); + + // 创建目录 + String absolutePath = new StringBuilder(Configuration.getNewNasUrl()) + .append(relativePath) + .toString(); + File file = new File(absolutePath); + + try { + Files.createParentDirs(file); + Files.write(bytes, file); + } catch (Exception e) { + // 异常重建 + throw new BusinessRuntimeExceptionBuilder(e.getCause()) + .setCode(Integer.valueOf(BaseExceptionCode.FILE_SAVE_ERROR.getAppCode())) + .setMessage("Failed to save file: " + fileName) + .setExceptionClass(GeneratorBusinessException.class) + .createBusinessRuntimeException(); + } + return relativePath; + } +``` + +## 微服务使用示例 + +![20250303192309.png](../../img-folder/image-20250303192309.png) + +## 返回异常响应 +```json +{ + "code": 114, + "message": "用户名或密码错误" +} + +``` + +## 重构说明: + +1. **接口设计(MessageSourceConfigurer)**: + - 定义默认的区域设置方法 `getDefaultLocale()` + - 定义核心配置方法 `configureBaseNames()` 替代原有抽象方法 + - 提供消息源创建的默认实现 `createMessageSource()` +2. **抽象类改造(AbstractMessageSourceConfig)**: + - 实现 `MessageSourceConfigurer` 接口 + - 使用接口默认方法替代原有硬编码逻辑 + - 新增适配方法连接新旧方法体系 +3. **保持兼容性的关键点**: + - 保留原有 `getBaseNames()` 抽象方法 + - 通过 `configureBaseNames()` 方法桥接新旧方法 + +## 设计优势 +- 解耦:将异常处理逻辑从业务代码中剥离,提高代码可读性。 +- 复用:通过 Starter 方式,多个微服务可以共享同一套异常处理逻辑。 +- 标准化:统一的错误响应格式,便于前端或调用方处理。 +- 扩展性:支持自定义异常和错误码,满足不同业务场景需求。 + +## 总结 : + +- 捕获:受检异常必须捕获,运行异常可选。 +- 抛出 + - 需要:无法处理时抛出,运行异常无需throws,受检异常需声明 + - 不需要:内部可消化或无需通知通用者时。 +- 推荐:结合全局异常处理,抛出语义化异常。 \ No newline at end of file diff --git a/pig-common/pig-common-exception/pom.xml b/pig-common/pig-common-exception/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..f4124e8055e1445812801df1a3c204907ddeb1d3 --- /dev/null +++ b/pig-common/pig-common-exception/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + com.pig4cloud + pig-common + ${revision} + + + com.mate.cloud + pig-common-exception + ${project.artifactId} + 公共包全局异常处理 + + + + + org.springframework + spring-webmvc + + + com.pig4cloud + pig-common-core + provided + + + + cn.hutool + hutool-core + provided + + + commons-lang + commons-lang + 2.6 + provided + + + diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/AbstractMessageSourceConfig.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/AbstractMessageSourceConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..f22cc75ff72673cdba6c3c47478a4e9578aa5be8 --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/AbstractMessageSourceConfig.java @@ -0,0 +1,76 @@ +package com.pig4cloud.pig.common.config; + + +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.support.ReloadableResourceBundleMessageSource; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.i18n.SessionLocaleResolver; +import java.nio.charset.StandardCharsets; + +/** + * 抽象国际化配置类 + *

在具体的微服务模块中继承 AbstractMessageConfig 并提供具体的消息文件路径

+ * Spring Boot已经对i18n国际化做了自动配置,自动配置类为:org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration + * Spring在启动的时候装备的实现类是: org.springframework.context.support.ResourceBundleMessageSource + *

https://blog.csdn.net/weixin_43801418/article/details/142241610

+ * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/28 12:00 + * @updateUser: MI + * @updateTime: 2025/2/28 12:00 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +public abstract class AbstractMessageSourceConfig implements MessageSourceConfigurer { + + /** + * 自定义语言解析器,覆盖默认的AcceptHeaderLocaleResolver + * tips:返回类型必须声明为LocaleResolver 接口类型,不然不会替换掉默认的AcceptHeaderLocaleResolver + * + * @return + */ + @Bean + public LocaleResolver localeResolver() { + SessionLocaleResolver localeResolver = new SessionLocaleResolver(); + // 使用接口的默认方法获取默认语言环境 + localeResolver.setDefaultLocale(getDefaultLocale()); + return localeResolver; + } + + @Override + public MessageSource createMessageSource() { + ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); + // 刷新资源文件的周期,以秒为单位 + messageSource.setCacheSeconds(5); + messageSource.setBasenames(configureBaseNames()); + messageSource.setUseCodeAsDefaultMessage(true); + messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name()); + return messageSource; + } + + @Bean + public PropertyConfig propertyConfig() { + return new PropertyConfig(createMessageSource()); + } + + /** + * 获取消息资源文件的基础名称 + * 子类需要实现这个方法来提供具体的消息文件路径 + * + * @return 消息资源文件的基础名称 + */ + @Override + public String[] configureBaseNames() { + // 调用原有抽象方法保持向后兼容 + return getBaseNames(); + } + + /** + * 保留原有抽象方法(保持子类不需要修改) + * + * @deprecated 建议改用 {@link #configureBaseNames()} + */ + protected abstract String[] getBaseNames(); +} \ No newline at end of file diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/ExceptionAutoConfiguration.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/ExceptionAutoConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..c894a08f99414cedd08e4d70e9fd35aac5a3f0c4 --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/ExceptionAutoConfiguration.java @@ -0,0 +1,31 @@ +package com.pig4cloud.pig.common.config; + + +import com.pig4cloud.pig.common.handler.GlobalExceptionHandler; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; + +/** + * 异常处理配置 + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/3/3 12:24 + * @updateUser: MI + * @updateTime: 2025/3/3 12:24 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +@Configuration +@ConditionalOnWebApplication +public class ExceptionAutoConfiguration { + + @Bean + @Order(Ordered.HIGHEST_PRECEDENCE) + public GlobalExceptionHandler globalExceptionHandler() { + return new GlobalExceptionHandler(); + } +} diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/MessageSourceConfigurer.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/MessageSourceConfigurer.java new file mode 100644 index 0000000000000000000000000000000000000000..8bb9190955708be2402b76cad8ee5d312ca222bf --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/MessageSourceConfigurer.java @@ -0,0 +1,55 @@ +package com.pig4cloud.pig.common.config; + +import org.springframework.context.MessageSource; +import java.util.Locale; + +/** + * 国际化配置接口 + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/28 11:31 + * @updateUser: MI + * @updateTime: 2025/2/28 11:31 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +public interface MessageSourceConfigurer { + + /** + * 获取默认的区域设置 + * + * @return 默认Locale,默认返回中文环境 + */ + default Locale getDefaultLocale() { + return Locale.CHINA; + } + + /** + * 配置消息源的基础名称 + * + * @return 资源文件基础名称数组 + */ + String[] configureBaseNames(); + + /** + * 创建消息源的默认实现 + *

定义业务系统消息配置文件的基本名称(basename)。 + * 消息配置文件的命名格式为“[基本名称]_[语言种类].properties + * 例如message-error.properties和message-error_zh_CN.properties + * 的basename都为"message-error"。 + * 系统首先查找和指定语言种类对应的消息配置文件,如果没有找到, + * 就查找父一级的消息文件. + * 例如message-error_zh_CN.properties为简体中文的消息文件, + * 如果在CLASSPATH中没有找到该文件,系统将查找名为 + * message-error.properties的文件 + * 可以在这里定义多个消息配置文件的basename。 + * 请参考java.util.ResourceBundle的说明文档.

+ *

+ * (1)若找不到带对应语言的后缀的properties文件,默认使用xx.properties中的映射关系 + * (2)若映射关系不存在,会抛出一个异常 + * + * @return messageSource 消息源对象 + */ + MessageSource createMessageSource(); +} \ No newline at end of file diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/PropertyConfig.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/PropertyConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..cdfdc4fe7ef05032b5575a7086253247106fe4ec --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/config/PropertyConfig.java @@ -0,0 +1,110 @@ +package com.pig4cloud.pig.common.config; + +import io.micrometer.common.util.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; + +/** + * 属性资源配置获取工具类 + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/28 11:55 + * @updateUser: MI + * @updateTime: 2025/2/28 11:55 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +@Slf4j +public class PropertyConfig { + + private static MessageSource messageSource; + + public PropertyConfig(MessageSource messageSource) { + log.info("PropertyConfig init:{}", messageSource); + this.messageSource = messageSource; + } + + /** + * 获取配置属性的值 + * + * @param code 配置键 + * @return 配置值 + */ + public static String getProperty(String code) { + + log.info("Fetching property for code: {}", code); + + String message = messageSource.getMessage(code, null, LocaleContextHolder.getLocale()); + if (StringUtils.isBlank(message)) { + return messageSource.getMessage(code, new Object[0], LocaleContextHolder.getLocale()); + } + log.info("getProperty message: {}", message); + return message; + } + + /** + * 获取配置属性的值,带默认信息 + * + * @param code 配置键 + * @param defaultMessage 默认信息 + * @return 配置值 + */ + public static String getProperty(String code, String defaultMessage) { + if (StringUtils.isEmpty(code)) { + return defaultMessage; + } else { + return messageSource.getMessage(code, null, defaultMessage, LocaleContextHolder.getLocale()); + } + } + + /** + * 获取配置属性的值,带参数 + * + * @param code 配置键 + * @param args 参数 + * @param defaultMessage 默认信息 + * @return 配置值 + */ + public static String getProperty(String code, Object[] args, String defaultMessage) { + if (StringUtils.isEmpty(code)) { + return defaultMessage; + } else { + return messageSource.getMessage(code, args, defaultMessage, LocaleContextHolder.getLocale()); + } + } + + /** + * 获取配置属性的值,支持 Integer 类型键 + * + * @param code 配置键 + * @return 配置值 + */ + public static String getProperty(Integer code) { + return getProperty(String.valueOf(code)); + } + + /** + * 获取配置属性的值,支持 Integer 类型键,带默认信息 + * + * @param code 配置键 + * @param defaultMessage 默认信息 + * @return 配置值 + */ + public static String getProperty(Integer code, String defaultMessage) { + return getProperty(String.valueOf(code), defaultMessage); + } + + /** + * 获取配置属性的值,支持 Integer 类型键,带参数 + * + * @param code 配置键 + * @param args 参数 + * @param defaultMessage 默认信息 + * @return 配置值 + */ + public static String getProperty(Integer code, Object[] args, String defaultMessage) { + return getProperty(String.valueOf(code), args, defaultMessage); + } +} \ No newline at end of file diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/constant/BaseExceptionCodeEnum.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/constant/BaseExceptionCodeEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..2552a91f713ed50d49f282d4854be0b0f670fa19 --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/constant/BaseExceptionCodeEnum.java @@ -0,0 +1,23 @@ +package com.pig4cloud.pig.common.constant; + + +/** + * 异常码 (枚举类可选实现该该接口) + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/28 21:47 + * @updateUser: MI + * @updateTime: 2025/2/28 21:47 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +public interface BaseExceptionCodeEnum { + /** + * get message code + * + * @return Integer + */ + Integer getCode(); + +} diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/constant/BaseExceptionMassageEnum.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/constant/BaseExceptionMassageEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..8afbcfc4adb43e55289e8a34a268e5cb983f3f19 --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/constant/BaseExceptionMassageEnum.java @@ -0,0 +1,35 @@ +package com.pig4cloud.pig.common.constant; + +import java.io.Serializable; + +/** + * 异常消息 (枚举类可选实现该该接口) + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/28 21:47 + * @updateUser: MI + * @updateTime: 2025/2/28 21:47 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +public interface BaseExceptionMassageEnum extends Serializable { + + default String getName() { + return name(); + } + + /** + * name + * + * @return String + */ + String name(); + + /** + * message + * + * @return String + */ + String getMassage(); +} diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/exception/BusinessRuntimeException.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/exception/BusinessRuntimeException.java new file mode 100644 index 0000000000000000000000000000000000000000..4dce0f9ba2075d4ee831bec97f6dcafdaf8fbc44 --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/exception/BusinessRuntimeException.java @@ -0,0 +1,165 @@ +package com.pig4cloud.pig.common.exception; + +import cn.hutool.core.util.StrUtil; +import com.pig4cloud.pig.common.core.util.PigNestedExceptionUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.lang.Nullable; + +import java.text.MessageFormat; + + +/** + * 业务运行期异常 + *

借鉴Spring 异常体系设计

+ * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/28 11:50 + * @updateUser: MI + * @updateTime: 2025/2/28 11:50 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +@Slf4j +public abstract class BusinessRuntimeException extends RuntimeException { + + /** + * 异常代码 + */ + protected String code; + + protected String errorMessage; + /** + * 消息参数 + */ + private String[] parameters; + + @Nullable + public Throwable getRootCause() { + return PigNestedExceptionUtils.getRootCause(this); + } + + public Throwable getMostSpecificCause() { + Throwable rootCause = getRootCause(); + return (rootCause != null ? rootCause : this); + } + + /** + * 构建异常 + * + * @return + */ + + + public BusinessRuntimeException() { + super(); + } + + public BusinessRuntimeException(String code) { + super(); + this.code = code; + } + + /** + * 格式化错误消息 + */ + public BusinessRuntimeException formatMessage(Object... args) { + if (this.errorMessage != null && args != null && args.length > 0) { + this.errorMessage = MessageFormat.format(this.errorMessage, args); + } + return this; + } + + public BusinessRuntimeException(final String code, final String message) { + this(code, message, StrUtil.EMPTY); + } + + public BusinessRuntimeException(final String code, final String message, final String parameters) { + this.code = code; + this.parameters = new String[]{message, parameters != null ? parameters : StrUtil.EMPTY}; + } + + public BusinessRuntimeException(final String code, final String... parameters) { + this(code, StrUtil.EMPTY, parameters); + } + + public BusinessRuntimeException(final String code, final String message, final String... parameters) { + this(code, message, null, parameters); + } + + public BusinessRuntimeException(final String code, final Throwable cause, final String... parameters) { + this(code, null, cause, parameters); + } + + public BusinessRuntimeException(final String code, final String errorMessage, final Throwable cause, final String... parameters) { + super(errorMessage, cause); + this.code = code; + this.parameters = parameters; + this.errorMessage = errorMessage; + } + + /** + * Create a new BusinessRuntimeException with the specified root cause + * + * @param cause + */ + public BusinessRuntimeException(@Nullable Throwable cause) { + super(cause); + this.code = getCode(); + } + + public BusinessRuntimeException(@Nullable String msg, @Nullable Throwable cause) { + super(msg, cause); + } + + /** + * 创建完整的异常实例 + */ + public BusinessRuntimeException build() { + log.error("Business exception occurred. Code: {}, Message: {}", code, errorMessage); +// if (this.data != null) { +// log.debug("Additional data: {}", data); +// } + return this; + } + + public void setCode(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public String[] getParameters() { + return parameters; + } + + public void setParameters(String[] parameters) { + this.parameters = parameters; + } + + + @Override + public String getMessage() { + return super.getMessage(); + } + + @Override + public String getLocalizedMessage() { + return this.getMessage(); + } + + @Override + public String toString() { + return "BusinessRuntimeException:" + getCode() + ", errorMessage:" + getErrorMessage(); + } +} diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/exception/BusinessRuntimeExceptionBuilder.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/exception/BusinessRuntimeExceptionBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..4f1a94f9ce111435c50f20c39bfc6b26d1be97ed --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/exception/BusinessRuntimeExceptionBuilder.java @@ -0,0 +1,131 @@ +package com.pig4cloud.pig.common.exception; + + +import com.pig4cloud.pig.common.core.util.PigNestedExceptionUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; + +/** + * BusinessRuntimeExceptionBuilder is a utility class for building a BusinessRuntimeException with a customizable message, + * error code, and cause. It allows for fluent chaining of methods to set these properties. + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/1/25 15:19 + * @updateUser: MI + * @updateTime: 2025/1/25 15:19 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +@Slf4j +public class BusinessRuntimeExceptionBuilder extends BusinessRuntimeException { + + private String errorCode; + + private Throwable cause; + + + + public BusinessRuntimeExceptionBuilder(String message) { + super(message); + this.cause = PigNestedExceptionUtils.getRootCause(null); + } + + public BusinessRuntimeExceptionBuilder(String message, Throwable cause) { + super(message, cause); + this.cause = cause; + } + + public BusinessRuntimeExceptionBuilder(Throwable cause) { + super(); + this.cause = cause; + } + public BusinessRuntimeExceptionBuilder(String msg, Throwable cause, Throwable cause1) { + super(msg, cause); + this.cause = cause1; + } + + + @Override + public Throwable getCause() { + return cause; + } + + /** + * 设置新的cause,支持链式调用 + * + * @param newCause 新的异常原因 + * @return BusinessRuntimeException + */ + public BusinessRuntimeExceptionBuilder setCause(Throwable newCause) { + if (newCause != null) { + log.info("Setting new cause: {}", newCause.getMessage()); + cause = newCause; + } + return this; + } + + + + /** + * 设置异常消息 + * + * @param message 异常消息 + * @return BusinessRuntimeException + */ + public BusinessRuntimeExceptionBuilder setMessage(String message) { + if (StringUtils.hasText(message)) { + log.info("Setting message: {}", message); + setDetailMessage(message); + } + return this; + } + + /** + * 创建最终的BusinessRuntimeException实例 + * + * @return BusinessRuntimeException + */ + public BusinessRuntimeException createBusinessRuntimeException() { + StringBuilder fullMessage = new StringBuilder(); + if (StringUtils.hasText(errorMessage)) { + fullMessage.append(errorMessage); + } +// if (!additionalInfoList.isEmpty()) { +// fullMessage.append(" ["); +// for (int i = 0; i < additionalInfoList.size(); i++) { +// if (i > 0) { +// fullMessage.append(", "); +// } +// fullMessage.append(additionalInfoList.get(i)); +// } +// fullMessage.append("]"); +// } + if (StringUtils.hasText(errorCode)) { + fullMessage.append(" [Error Code: ").append(errorCode).append("]"); + } + + BusinessRuntimeException exception = new BusinessRuntimeExceptionBuilder(this.getMessage()); + if (StringUtils.hasText(errorCode)) { + try { + exception.setCode(errorCode); + } catch (NumberFormatException e) { + log.error("Invalid error code format: {}", errorCode, e); + } + } + return exception; + } + + // 添加一个内置的信息写入方法来允许自定义的错误代码 + private void setDetailMessage(String message) { + if (cause != null) { + if (!message.equals(cause.getMessage())) { + log.info("Updating cause message: {}", message); + initCause(new Throwable(message, cause)); + } + } else { + log.info("Creating new cause with message: {}", message); + initCause(new Throwable(message)); + } + } +} diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/handler/GlobalExceptionHandler.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..0349eb6a240be30c194b587924fd376afa46b0bd --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/handler/GlobalExceptionHandler.java @@ -0,0 +1,187 @@ +package com.pig4cloud.pig.common.handler; + +import cn.hutool.core.collection.CollUtil; +import com.pig4cloud.pig.common.config.PropertyConfig; +import com.pig4cloud.pig.common.exception.BusinessRuntimeException; +import com.pig4cloud.pig.common.response.BaseResponseCode; +import com.pig4cloud.pig.common.response.CommonResponseCode; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.exception.ExceptionUtils; +import org.springframework.http.HttpStatus; +import org.springframework.validation.BindException; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.validation.ObjectError; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.yaml.snakeyaml.constructor.DuplicateKeyException; +import java.io.FileNotFoundException; +import java.util.List; + +import static com.pig4cloud.pig.common.response.CommonResponseCode.validateFailed; + + +/** + * 全局异常处理 + * https://www.howardliu.cn/springboot-action-gracefully-response-exception/ + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/15 11:45 + * @updateUser: MI + * @updateTime: 2025/2/15 11:45 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + + /** + * 处理 json 请求体调用接口校验失败抛出的异常 + * + * @param ex + * @param request + * @return + */ + @ResponseStatus(HttpStatus.OK) + @ExceptionHandler(value = Exception.class) + public BaseResponseCode handleException(Exception ex, HttpServletRequest request) { + log.error("-------------------------{}", ex.getMessage(), ex); + if (ex instanceof BusinessRuntimeException) { + log.error("处理业务运行时异常->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + BusinessRuntimeException businessRuntimeException = (BusinessRuntimeException) ex; + // 获取异常信息 + String exceptionMessage = getLocaleMessage(businessRuntimeException.getCode(), businessRuntimeException.getMessage()); + // 获取异常消息的参数 + String[] parameters = businessRuntimeException.getParameters(); + + + businessRuntimeException.setErrorMessage(exceptionMessage); + log.error(businessRuntimeException.getCode() + "#####detailMessage=:{},errorMessage:{}", businessRuntimeException.getMessage(), businessRuntimeException.getErrorMessage()); + return new BaseResponseCode(businessRuntimeException.getCode(), exceptionMessage).replacePlaceholder(parameters); + } else if (ex instanceof DuplicateKeyException) { + log.error("请求地址,数据重复异常->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + return new BaseResponseCode(CommonResponseCode.DUPLICATE_CODE.getCode(), CommonResponseCode.DUPLICATE_CODE.getMessage()); + } else if (ex instanceof IllegalArgumentException) { + log.error("请求地址->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + return new BaseResponseCode(CommonResponseCode.INTERNAL_SERVER_ERROR.getCode(), ex.getMessage()); + } else if (ex instanceof HttpRequestMethodNotSupportedException) { + log.error("请求地址->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + return new BaseResponseCode(CommonResponseCode.SC_METHOD_NOT_ALLOWED.getCode(), CommonResponseCode.SC_METHOD_NOT_ALLOWED.getMessage()); + } else if (ex instanceof BindException) { + log.error("BindException 参数异常->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + // 处理 form data方式调用接口校验失败抛出的异常 + BindingResult bindingResult = ((BindException) ex).getBindingResult(); + String message = null; + if (bindingResult.hasErrors()) { + FieldError fieldError = bindingResult.getFieldError(); + if (fieldError != null) { + message = fieldError.getField() + fieldError.getDefaultMessage(); + } + } + return validateFailed(message); + } else if (ex instanceof MethodArgumentNotValidException) { + log.error("MethodArgumentNotValidException 处理参数校验的异常->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + BindingResult bindingResult = getBindingResult((MethodArgumentNotValidException) ex); + if (validatedErrors(bindingResult)) { + + List errors = bindingResult.getAllErrors(); + if (CollUtil.isNotEmpty(errors)) { + log.info("-----------errors--------------{}", errors); + // 这里列出了全部错误参数,按正常逻辑,只需要第一条错误即可 + FieldError fieldError = (FieldError) errors.get(0); + + return new BaseResponseCode(CommonResponseCode.MISSING_PARAMETER.getCode(), fieldError.getDefaultMessage()); + } + } + } else if (ex instanceof RuntimeException) { + log.error("请求地址->{}, {}", getRequestURI(request), ExceptionUtils.getStackTrace(ex)); + + return new BaseResponseCode(CommonResponseCode.INTERNAL_SERVER_ERROR.getCode(), ex.getMessage()); + } else { + log.error("【系统异常】{}", ex); + return new BaseResponseCode(ServiceConfig.ERR_KICKED, ex.getMessage()); + } + + return new BaseResponseCode(ServiceConfig.ERR_KICKED, ex.getMessage()); + } + + private String getRequestURI(HttpServletRequest request) { + return request.getRequestURI().substring(request.getContextPath().length()); + } + + /** + * @param bindingResult + * @return + */ + public boolean validatedErrors(BindingResult bindingResult) { + return bindingResult.hasErrors() || CollUtil.isNotEmpty(bindingResult.getAllErrors()) || bindingResult.getAllErrors().isEmpty(); + } + + private BindingResult getBindingResult(MethodArgumentNotValidException e) { + return e.getBindingResult(); + } + + /** + * FileNotFoundException 异常捕获处理 + * + * @param exception 自定义FileNotFoundException异常类型 + * @return Result + */ + @ExceptionHandler({FileNotFoundException.class}) + public BaseResponseCode noFoundException(Exception exception) { + log.error("程序异常==>errorCode:{}, exception:{}", HttpStatus.NOT_FOUND.value(), exception.getMessage()); + return new BaseResponseCode(HttpStatus.NOT_FOUND.value() + "", exception.getMessage()); + } + + /** + * NullPointerException 空指针异常捕获处理 + * + * @param ex 自定义NullPointerException异常类型 + * @return Result + */ + @ExceptionHandler + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public BaseResponseCode handleException(NullPointerException ex) { + log.error("程序异常:{}" + ex.toString()); + return new BaseResponseCode(HttpStatus.INTERNAL_SERVER_ERROR.value() + "", ex.getMessage()); + } + + /* *//** + * ValidationException + *//* + @ExceptionHandler(ValidationException.class) + public BaseResponseCode handleValidationException(ValidationException e) { + log.error(e.getMessage(), e); + return new BaseResponseCode(CommonResponseCode.VALIDATION_CODE.getCode(), e.getCause().getMessage()); + } + + */ + + /** + * ConstraintViolationException + *//* + @ExceptionHandler(ConstraintViolationException.class) + public BaseResponseCode handleConstraintViolationException(ConstraintViolationException e) { + log.error(e.getMessage(), e); + return new BaseResponseCode(CommonResponseCode.PARAMETER_FORMAT_ERROR.getCode(), e.getMessage()); + }*/ + private String getLocaleMessage(String code, String defaultMsg) { + return PropertyConfig.getProperty(code, defaultMsg); + } + + + class ServiceConfig { + public static final String ERR_KICKED = "1000"; + } +} diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/package-info.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..089422ffaeeeccc64fd2c2814c09c17b0312b213 --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/package-info.java @@ -0,0 +1 @@ +package com.mate.cloud.common; \ No newline at end of file diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/response/BaseResponseCode.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/response/BaseResponseCode.java new file mode 100644 index 0000000000000000000000000000000000000000..273dfc01eac882e71f2d7548a41852612e5b19d8 --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/response/BaseResponseCode.java @@ -0,0 +1,47 @@ +package com.pig4cloud.pig.common.response; + +import java.io.Serializable; +import java.text.MessageFormat; + +/** + * 异常ResponseCode基类 + */ +public class BaseResponseCode implements Serializable { + + private static final long serialVersionUID = 7535672854970676563L; + private String code; + + private String message; + + public BaseResponseCode(final String code, final String message) { + this.code = code; + this.message = message; + } + + /** + * 用真实的值替换消息中的占位符 + * + * @param values 对应占位符 + * @return 替换了占位符的消息 + */ + public BaseResponseCode replacePlaceholder(final String... values) { + BaseResponseCode responseCode = new BaseResponseCode(this.getCode(), MessageFormat.format(this.getMessage(), values)); + return responseCode; + } + + public String getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public void setCode(String code) { + this.code = code; + } +} \ No newline at end of file diff --git a/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/response/CommonResponseCode.java b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/response/CommonResponseCode.java new file mode 100644 index 0000000000000000000000000000000000000000..ec00e32c6c48461d248d0e64981669a960315b1f --- /dev/null +++ b/pig-common/pig-common-exception/src/main/java/com/pig4cloud.pig.common/response/CommonResponseCode.java @@ -0,0 +1,45 @@ +package com.pig4cloud.pig.common.response; + +import jakarta.servlet.http.HttpServletResponse; + +/** + * 异常code + * + * @author: MI + * @email: 448341911@qq.com + * @createTime: 2025/2/28 13:04 + * @updateUser: MI + * @updateTime: 2025/2/28 13:04 + * @updateRemark: 修改内容 + * @version: v1.0 + */ +public class CommonResponseCode extends BaseResponseCode { + + public CommonResponseCode(String code, String message) { + super(code, message); + } + + /** + * ----------------------------公共业务级 1000-1099----------------------------- + */ + public static final BaseResponseCode MISSING_PARAMETER = new CommonResponseCode("1000", "缺少参数"); + + public static final BaseResponseCode DUPLICATE_CODE = new CommonResponseCode("1005", "数据重复,请检查后提交"); + /** + * 405 + */ + public static final BaseResponseCode SC_METHOD_NOT_ALLOWED = new CommonResponseCode(HttpServletResponse.SC_METHOD_NOT_ALLOWED + "", "HTTP请求方法不支持!"); + /** + * 500 + */ + public static final BaseResponseCode INTERNAL_SERVER_ERROR = new CommonResponseCode(HttpServletResponse.SC_INTERNAL_SERVER_ERROR + "", "内部服务错误"); + + /** + * 参数验证失败返回结果 + * + * @param message 提示信息 + */ + public static BaseResponseCode validateFailed(String message) { + return new CommonResponseCode(CommonResponseCode.MISSING_PARAMETER.getCode(), message); + } +} diff --git a/pig-common/pig-common-exception/src/main/resources/META-INF/spring.factories b/pig-common/pig-common-exception/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000000000000000000000000000000000000..ee6d958f9da8439fb787e992c88a4901bbae1601 --- /dev/null +++ b/pig-common/pig-common-exception/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.pig4cloud.pig.common.config.ExceptionAutoConfiguration \ No newline at end of file diff --git a/pig-common/pig-common-exception/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/pig-common/pig-common-exception/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000000000000000000000000000000000000..375795463ea4e0e1440585478d66cc8dc5317933 --- /dev/null +++ b/pig-common/pig-common-exception/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.pig4cloud.pig.common.config.ExceptionAutoConfiguration \ No newline at end of file diff --git a/pig-common/pom.xml b/pig-common/pom.xml index b664552b2308929212858b558c8252e568ec5da0..788b04f15f3331dfc554133838d42d9a6b372484 100755 --- a/pig-common/pom.xml +++ b/pig-common/pom.xml @@ -33,14 +33,15 @@ pig-common-bom pig-common-core pig-common-datasource - pig-common-log - pig-common-mybatis - pig-common-oss - pig-common-seata - pig-common-security - pig-common-feign - pig-common-swagger - pig-common-xss - pig-common-excel + pig-common-excel + pig-common-exception + pig-common-log + pig-common-mybatis + pig-common-oss + pig-common-seata + pig-common-security + pig-common-feign + pig-common-swagger + pig-common-xss