初始化询价智能体新仓:同步本地工程并排除密钥与 .env。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
# 询价后台 SQL 导入顺序(inquiry_robot)
|
||||
|
||||
只对 **`inquiry_robot`** 执行,禁止对现网 `jeecg-boot`。
|
||||
|
||||
1. Jeecg 系统表(若库为空):`jeecg-boot/db/jeecgboot-mysql-5.7.sql`
|
||||
- **不要**再跑 `slim_rbac_columns.sql`(会砍掉 `avatar`/`component` 等,正式 Jeecg 登录会失败)
|
||||
- 若库已被精简:先跑 `restore_jeecg_rbac_columns_v1.sql`(或本机隧道脚本补列)
|
||||
- 若登录报缺 `sys_user_tenant`:再跑 `restore_jeecg_tenant_tables_v1.sql`
|
||||
- 若继续缺 `sys_depart` 等系统表:从 `jeecg-boot/db/jeecgboot-mysql-5.7.sql` 批量 `CREATE TABLE IF NOT EXISTS` 补齐(本机已用脚本做过)
|
||||
2. 业务表:`inquiry_admin_v1.sql`
|
||||
3. 菜单权限 + 演示数据:优先 `inquiry_admin_menu_seed_v1.sql`(含 `url`/`component`)
|
||||
|
||||
本机验收账号:`admin` / `123456`(验证码按页面填写)。
|
||||
|
||||
验收:Jeecg 登录 → 侧栏「询价运营」→ 看板/工单/员工/报价模板/回复语可调 `/inquiry/*`;账号/角色在「询价系统配置」进系统页。报价模板可先 mock。
|
||||
@@ -0,0 +1,11 @@
|
||||
-- =============================================================================
|
||||
-- 统一 inquiry_robot 字符集/排序规则为 utf8mb4_general_ci
|
||||
-- 背景:精简表用 utf8mb4_0900_ai_ci,官方建表用 utf8/utf8mb4_general_ci,
|
||||
-- 登录后 SysPermissionMapper.queryByUser JOIN 会报 Illegal mix of collations。
|
||||
-- 禁止对现网 jeecg-boot 库执行。
|
||||
-- =============================================================================
|
||||
|
||||
ALTER DATABASE `inquiry_robot` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||
|
||||
-- 对库内每张表执行(示例;本机已用脚本批量 CONVERT):
|
||||
-- ALTER TABLE `表名` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||
@@ -0,0 +1,61 @@
|
||||
-- 适配精简 sys_permission(仅 id/parent_id/name/path/menu_type/perms/icon/sort_no/status)
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
INSERT IGNORE INTO `sys_permission`
|
||||
(`id`,`parent_id`,`name`,`path`,`menu_type`,`perms`,`icon`,`sort_no`,`status`)
|
||||
VALUES
|
||||
('b1000000000000000000000000000001',NULL,'询价运营','/inquiry',0,NULL,'ant-design:robot-outlined',15,1),
|
||||
('b1000000000000000000000000000002','b1000000000000000000000000000001','分析看板','/inquiry/dashboard',1,'inquiry:dashboard:view','ant-design:dashboard-outlined',1,1),
|
||||
('b1000000000000000000000000000003','b1000000000000000000000000000001','询价工单','/inquiry/work-order',1,'inquiry:workorder:list','ant-design:file-search-outlined',2,1),
|
||||
('b1000000000000000000000000000004','b1000000000000000000000000000001','员工管理','/inquiry/staff-role',1,'inquiry:staff:list','ant-design:team-outlined',3,1),
|
||||
('b1000000000000000000000000000005','b1000000000000000000000000000001','机器人回复语','/inquiry/bot-reply',1,'inquiry:reply:list','ant-design:message-outlined',4,1),
|
||||
('b1000000000000000000000000000010',NULL,'询价系统配置','/inquiry-sys',0,NULL,'ant-design:setting-outlined',16,1),
|
||||
('b1000000000000000000000000000011','b1000000000000000000000000000010','账号管理','/inquiry-sys/user',1,NULL,'ant-design:user-outlined',1,1),
|
||||
('b1000000000000000000000000000012','b1000000000000000000000000000010','角色管理','/inquiry-sys/role',1,NULL,'ant-design:safety-certificate-outlined',2,1),
|
||||
('b1000000000000000000000000000021','b1000000000000000000000000000002','看板查看',NULL,2,'inquiry:dashboard:view',NULL,1,1),
|
||||
('b1000000000000000000000000000031','b1000000000000000000000000000003','工单查询',NULL,2,'inquiry:workorder:list',NULL,1,1),
|
||||
('b1000000000000000000000000000032','b1000000000000000000000000000003','状态流转',NULL,2,'inquiry:workorder:transition',NULL,2,1),
|
||||
('b1000000000000000000000000000041','b1000000000000000000000000000004','人员查询',NULL,2,'inquiry:staff:list',NULL,1,1),
|
||||
('b1000000000000000000000000000042','b1000000000000000000000000000004','人员新增',NULL,2,'inquiry:staff:add',NULL,2,1),
|
||||
('b1000000000000000000000000000043','b1000000000000000000000000000004','人员编辑',NULL,2,'inquiry:staff:edit',NULL,3,1),
|
||||
('b1000000000000000000000000000044','b1000000000000000000000000000004','人员停用',NULL,2,'inquiry:staff:disable',NULL,4,1),
|
||||
('b1000000000000000000000000000051','b1000000000000000000000000000005','话术查询',NULL,2,'inquiry:reply:list',NULL,1,1),
|
||||
('b1000000000000000000000000000052','b1000000000000000000000000000005','话术新增',NULL,2,'inquiry:reply:add',NULL,2,1),
|
||||
('b1000000000000000000000000000053','b1000000000000000000000000000005','话术编辑',NULL,2,'inquiry:reply:edit',NULL,3,1),
|
||||
('b1000000000000000000000000000054','b1000000000000000000000000000005','话术停用',NULL,2,'inquiry:reply:disable',NULL,4,1);
|
||||
|
||||
-- 注意:精简库若无 component 字段,Jeecg Vue 菜单需靠 path 约定或后续补列。
|
||||
-- 授权 admin
|
||||
INSERT IGNORE INTO `sys_role_permission` (`id`,`role_id`,`permission_id`)
|
||||
SELECT MD5(CONCAT('ytd-inq:',r.`id`,':',p.`id`)),r.`id`,p.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_permission` p ON p.`id` LIKE 'b100%'
|
||||
WHERE r.`role_code`='admin';
|
||||
|
||||
-- 演示数据
|
||||
INSERT IGNORE INTO `inq_staff_role`
|
||||
(`id`,`name`,`wecom_id`,`mobile`,`depart_name`,`role_code`,`role_label`,`routes`,`notify_event_exception`,`status`,`create_by`,`create_time`)
|
||||
VALUES
|
||||
('s1000000000000000000000000000001','张敏','zhangmin@yt','136****1234','华东销售一部','sales','销售',NULL,1,'active','admin',NOW()),
|
||||
('s1000000000000000000000000000002','李华','lihua@yt','135****5678','华南销售二部','sales','销售',NULL,0,'active','admin',NOW()),
|
||||
('s1000000000000000000000000000003','航线张三','air_zhang@yt','138****9001','空运航线组','air','航线·空运','CGO-KUL / HKG-KUL',1,'active','admin',NOW());
|
||||
|
||||
INSERT IGNORE INTO `inq_bot_reply`
|
||||
(`id`,`category_code`,`category_title`,`trigger_scene`,`reply_text`,`enabled`,`sort_no`,`create_by`,`create_time`)
|
||||
VALUES
|
||||
('r1000000000000000000000000000001','inquiring','询价中','销售首次单聊机器人','你好,我是询价机器人。请直接描述客户需求。',1,1,'admin',NOW()),
|
||||
('r1000000000000000000000000000002','quoted','已报价','报价方案整理完成','工单 {{ticket_no}} 状态已更新为「已报价」。请确认是否采用。',1,1,'admin',NOW()),
|
||||
('r1000000000000000000000000000003','deal','已成交','销售选择成交','已记录为「已成交」。工单 {{ticket_no}} 已关闭智能体跟进。',1,1,'admin',NOW());
|
||||
|
||||
INSERT IGNORE INTO `inq_ticket`
|
||||
(`id`,`work_order_no`,`sales_wecom_id`,`sales_name`,`customer_name`,`business_line`,`biz_type_label`,`origin`,`destination`,`demand_title`,`demand_detail`,`goods_name`,`pieces`,`weight_kg`,`volume_cbm`,`status`,`cost_price`,`sale_price`,`profit_rate`,`tms_hit`,`manual_quote`,`event_exception`,`system_exception`,`system_exception_reason`,`version`,`create_by`,`create_time`)
|
||||
VALUES
|
||||
('t1000000000000000000000000000001','WO202606160001','zhangmin@yt','张敏','客户A','AIR','空运','上海','洛杉矶','空运 · 上海 → 洛杉矶','件数 3 · 毛重 180kg · 体积 2.5CBM','普货',3,180.000,2.5000,'已报价','-','USD 1,500','16%',1,1,NULL,NULL,NULL,1,'admin',NOW()),
|
||||
('t1000000000000000000000000000002','WO202606180002','lihua@yt','李华','客户B','SEA','海运','深圳','洛杉矶','海运 · 深圳 → 洛杉矶','40HQ × 2 · 品名 电子配件','电子配件',NULL,NULL,NULL,'协商中','USD 4,200','USD 5,100','18%',1,0,'产品响应超时',NULL,NULL,1,'admin',NOW()),
|
||||
('t1000000000000000000000000000003','WO202606180003','zhangmin@yt','张敏','客户C','LAND','陆运','义乌','阿拉木图','陆运 · 义乌 → 阿拉木图','整车 · 普货','普货',NULL,NULL,NULL,'询价中','-','-','-',0,0,'航线响应超时',NULL,NULL,1,'admin',NOW());
|
||||
|
||||
INSERT IGNORE INTO `inq_quote`
|
||||
(`id`,`ticket_id`,`work_order_no`,`quote_version`,`source`,`source_label`,`price_text`,`highlighted`,`create_time`)
|
||||
VALUES
|
||||
('q1000000000000000000000000000001','t1000000000000000000000000000001','WO202606160001',1,'TMS','TMS 标准报价','USD 1,360',0,NOW()),
|
||||
('q1000000000000000000000000000002','t1000000000000000000000000000001','WO202606160001',1,'MANUAL','航线张三手工报价','USD 1,260',1,NOW());
|
||||
@@ -0,0 +1,99 @@
|
||||
-- =============================================================================
|
||||
-- 询价后台菜单 / 权限种子 + 演示数据(inquiry_robot)
|
||||
-- 报价模板菜单保留(页面 mock,接口后接)。账号/角色页走 Jeecg 系统管理既有菜单。
|
||||
-- =============================================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 一级:询价运营
|
||||
INSERT IGNORE INTO `sys_permission`
|
||||
(`id`,`parent_id`,`name`,`url`,`component`,`is_route`,`menu_type`,`perms_type`,`sort_no`,`always_show`,`icon`,`is_leaf`,`keep_alive`,`hidden`,`hide_tab`,`create_by`,`create_time`,`del_flag`,`rule_flag`,`status`,`internal_or_external`)
|
||||
VALUES
|
||||
('b1000000000000000000000000000001',NULL,'询价运营','/inquiry','layouts/default/index',1,0,'1',15,0,'ant-design:robot-outlined',0,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000002','b1000000000000000000000000000001','分析看板','/inquiry/dashboard','inquiry/dashboard/index',1,1,'1',1,0,'ant-design:dashboard-outlined',1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000003','b1000000000000000000000000000001','询价工单','/inquiry/work-order','inquiry/workOrder/index',1,1,'1',2,0,'ant-design:file-search-outlined',1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000004','b1000000000000000000000000000001','员工管理','/inquiry/staff-role','inquiry/staffRole/index',1,1,'1',3,0,'ant-design:team-outlined',1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000006','b1000000000000000000000000000001','报价模板','/inquiry/template','inquiry/template/index',1,1,'1',4,0,'ant-design:file-excel-outlined',1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000005','b1000000000000000000000000000001','机器人回复语','/inquiry/bot-reply','inquiry/botReply/index',1,1,'1',5,0,'ant-design:message-outlined',1,0,0,0,'admin',NOW(),0,0,'1',0);
|
||||
|
||||
-- 系统配置入口:指向 Jeecg 自带账号/角色页(不新建业务表)
|
||||
INSERT IGNORE INTO `sys_permission`
|
||||
(`id`,`parent_id`,`name`,`url`,`component`,`is_route`,`menu_type`,`perms_type`,`sort_no`,`always_show`,`icon`,`is_leaf`,`keep_alive`,`hidden`,`hide_tab`,`create_by`,`create_time`,`del_flag`,`rule_flag`,`status`,`internal_or_external`)
|
||||
VALUES
|
||||
('b1000000000000000000000000000010',NULL,'询价系统配置','/inquiry-sys','layouts/default/index',1,0,'1',16,0,'ant-design:setting-outlined',0,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000011','b1000000000000000000000000000010','账号管理','/inquiry-sys/user','inquiry/account/index',1,1,'1',1,0,'ant-design:user-outlined',1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000012','b1000000000000000000000000000010','角色管理','/inquiry-sys/role','inquiry/role/index',1,1,'1',2,0,'ant-design:safety-certificate-outlined',1,0,0,0,'admin',NOW(),0,0,'1',0);
|
||||
|
||||
-- 按钮权限
|
||||
INSERT IGNORE INTO `sys_permission`
|
||||
(`id`,`parent_id`,`name`,`is_route`,`menu_type`,`perms`,`perms_type`,`sort_no`,`always_show`,`is_leaf`,`keep_alive`,`hidden`,`hide_tab`,`create_by`,`create_time`,`del_flag`,`rule_flag`,`status`,`internal_or_external`)
|
||||
VALUES
|
||||
('b1000000000000000000000000000021','b1000000000000000000000000000002','看板查看',0,2,'inquiry:dashboard:view','1',1,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000031','b1000000000000000000000000000003','工单查询',0,2,'inquiry:workorder:list','1',1,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000032','b1000000000000000000000000000003','状态流转',0,2,'inquiry:workorder:transition','1',2,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000041','b1000000000000000000000000000004','人员查询',0,2,'inquiry:staff:list','1',1,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000042','b1000000000000000000000000000004','人员新增',0,2,'inquiry:staff:add','1',2,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000043','b1000000000000000000000000000004','人员编辑',0,2,'inquiry:staff:edit','1',3,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000044','b1000000000000000000000000000004','人员停用',0,2,'inquiry:staff:disable','1',4,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000051','b1000000000000000000000000000005','话术查询',0,2,'inquiry:reply:list','1',1,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000052','b1000000000000000000000000000005','话术新增',0,2,'inquiry:reply:add','1',2,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000053','b1000000000000000000000000000005','话术编辑',0,2,'inquiry:reply:edit','1',3,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000054','b1000000000000000000000000000005','话术停用',0,2,'inquiry:reply:disable','1',4,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000061','b1000000000000000000000000000006','模板查看',0,2,'inquiry:template:view','1',1,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000062','b1000000000000000000000000000006','模板上传',0,2,'inquiry:template:upload','1',2,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000063','b1000000000000000000000000000006','模板编辑',0,2,'inquiry:template:edit','1',3,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000064','b1000000000000000000000000000006','模板启停',0,2,'inquiry:template:toggle','1',4,0,1,0,0,0,'admin',NOW(),0,0,'1',0);
|
||||
|
||||
-- 授权给 admin 角色
|
||||
INSERT IGNORE INTO `sys_role_permission` (`id`,`role_id`,`permission_id`)
|
||||
SELECT MD5(CONCAT('ytd-inq:',r.`id`,':',p.`id`)),r.`id`,p.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_permission` p ON p.`id` LIKE 'b100%'
|
||||
WHERE r.`role_code`='admin';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 演示数据(空库验收用)
|
||||
-- ---------------------------------------------------------------------------
|
||||
INSERT IGNORE INTO `inq_staff_role`
|
||||
(`id`,`name`,`wecom_id`,`mobile`,`depart_name`,`role_code`,`role_label`,`routes`,`notify_event_exception`,`status`,`create_by`,`create_time`)
|
||||
VALUES
|
||||
('s1000000000000000000000000000001','张敏','zhangmin@yt','136****1234','华东销售一部','sales','销售',NULL,1,'active','admin',NOW()),
|
||||
('s1000000000000000000000000000002','李华','lihua@yt','135****5678','华南销售二部','sales','销售',NULL,0,'active','admin',NOW()),
|
||||
('s1000000000000000000000000000003','航线张三','air_zhang@yt','138****9001','空运航线组','air','航线·空运','CGO-KUL / HKG-KUL',1,'active','admin',NOW());
|
||||
|
||||
INSERT IGNORE INTO `inq_bot_reply`
|
||||
(`id`,`category_code`,`category_title`,`trigger_scene`,`reply_text`,`enabled`,`sort_no`,`create_by`,`create_time`)
|
||||
VALUES
|
||||
('r1000000000000000000000000000001','inquiring','询价中','销售首次单聊机器人','你好,我是询价机器人。请直接描述客户需求。',1,1,'admin',NOW()),
|
||||
('r1000000000000000000000000000002','quoted','已报价','报价方案整理完成','工单 {{ticket_no}} 状态已更新为「已报价」。请确认是否采用。',1,1,'admin',NOW()),
|
||||
('r1000000000000000000000000000003','deal','已成交','销售选择成交','已记录为「已成交」。工单 {{ticket_no}} 已关闭智能体跟进。',1,1,'admin',NOW());
|
||||
|
||||
INSERT IGNORE INTO `inq_ticket`
|
||||
(`id`,`work_order_no`,`sales_wecom_id`,`sales_name`,`customer_name`,`business_line`,`biz_type_label`,`origin`,`destination`,`demand_title`,`demand_detail`,`goods_name`,`pieces`,`weight_kg`,`volume_cbm`,`status`,`cost_price`,`sale_price`,`profit_rate`,`tms_hit`,`manual_quote`,`event_exception`,`system_exception`,`system_exception_reason`,`version`,`create_by`,`create_time`)
|
||||
VALUES
|
||||
('t1000000000000000000000000000001','WO202606160001','zhangmin@yt','张敏','客户A','AIR','空运','上海','洛杉矶','空运 · 上海 → 洛杉矶','件数 3 · 毛重 180kg · 体积 2.5CBM\n品名 普货 · 客户 A','普货',3,180.000,2.5000,'已报价','-','USD 1,500','16%',1,1,NULL,NULL,NULL,1,'admin',NOW()),
|
||||
('t1000000000000000000000000000002','WO202606180002','lihua@yt','李华','客户B','SEA','海运','深圳','洛杉矶','海运 · 深圳 → 洛杉矶','40HQ × 2 · 品名 电子配件 · 客户 B','电子配件',NULL,NULL,NULL,'协商中','USD 4,200','USD 5,100','18%',1,0,'产品响应超时',NULL,NULL,1,'admin',NOW()),
|
||||
('t1000000000000000000000000000003','WO202606180003','zhangmin@yt','张敏','客户C','LAND','陆运','义乌','阿拉木图','陆运 · 义乌 → 阿拉木图','整车 · 普货 · 时效 12 天内','普货',NULL,NULL,NULL,'询价中','-','-','-',0,0,'航线响应超时',NULL,NULL,1,'admin',NOW());
|
||||
|
||||
INSERT IGNORE INTO `inq_quote`
|
||||
(`id`,`ticket_id`,`work_order_no`,`quote_version`,`source`,`source_label`,`price_text`,`highlighted`,`create_time`)
|
||||
VALUES
|
||||
('q1000000000000000000000000000001','t1000000000000000000000000000001','WO202606160001',1,'TMS','TMS 标准报价','USD 1,360',0,NOW()),
|
||||
('q1000000000000000000000000000002','t1000000000000000000000000000001','WO202606160001',1,'MANUAL','航线张三手工报价','USD 1,260',1,NOW()),
|
||||
('q1000000000000000000000000000003','t1000000000000000000000000000002','WO202606180002',1,'TMS','TMS 标准报价','USD 4,800',0,NOW());
|
||||
|
||||
INSERT IGNORE INTO `inq_attachment`
|
||||
(`id`,`ticket_id`,`work_order_no`,`file_name`,`object_key`,`create_time`)
|
||||
VALUES
|
||||
('a1000000000000000000000000000001','t1000000000000000000000000000001','WO202606160001','空运报价单_WO202606160001.xlsx','demo/wo1.xlsx',NOW());
|
||||
|
||||
INSERT IGNORE INTO `inq_ticket_status_log`
|
||||
(`id`,`ticket_id`,`work_order_no`,`from_status`,`to_status`,`action`,`operator`,`remark`,`create_time`)
|
||||
VALUES
|
||||
('l1000000000000000000000000000001','t1000000000000000000000000000001','WO202606160001',NULL,'询价中','create','system','建单',NOW()),
|
||||
('l1000000000000000000000000000002','t1000000000000000000000000000001','WO202606160001','询价中','已报价','transition','system','TMS+手工报价就绪',NOW());
|
||||
|
||||
INSERT IGNORE INTO `inq_exception_case`
|
||||
(`id`,`ticket_id`,`work_order_no`,`case_type`,`title`,`reason`,`status`,`retry_count`,`create_time`,`update_time`)
|
||||
VALUES
|
||||
('e1000000000000000000000000000001','t1000000000000000000000000000002','WO202606180002','EVENT','产品响应超时','产品侧超时未回复','OPEN',0,NOW(),NOW());
|
||||
@@ -0,0 +1,199 @@
|
||||
-- =============================================================================
|
||||
-- 友通达新系统 · 询价后台业务表(inquiry_robot)
|
||||
-- 用途:分析看板 / 询价工单 / 员工岗位 / 机器人回复语
|
||||
-- 排除:报价模板、识别任务、报价生成、存档死信
|
||||
-- 说明:只对 inquiry_robot 执行;禁止对现网 jeecg-boot 执行。
|
||||
-- =============================================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 询价工单(六态 Owner)
|
||||
-- 状态约定:询价中 / 已报价 / 协商中 / 已成交 / 未成交 / 已关闭
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `inq_ticket` (
|
||||
`id` varchar(32) NOT NULL COMMENT '主键',
|
||||
`work_order_no` varchar(40) NOT NULL COMMENT '工单号',
|
||||
`sales_wecom_id` varchar(128) DEFAULT NULL COMMENT '发起销售企微 userid(入站 sender_id)',
|
||||
`sales_name` varchar(100) DEFAULT NULL COMMENT '销售展示名',
|
||||
`customer_name` varchar(200) DEFAULT NULL COMMENT '客户名称',
|
||||
`business_line` varchar(16) NOT NULL COMMENT '业务线 SEA/AIR/LAND',
|
||||
`biz_type_label` varchar(32) DEFAULT NULL COMMENT '展示用业务类型:海运/空运/陆运',
|
||||
`origin` varchar(200) DEFAULT NULL COMMENT '起运地',
|
||||
`destination` varchar(200) DEFAULT NULL COMMENT '目的地',
|
||||
`demand_title` varchar(500) DEFAULT NULL COMMENT '需求标题(路线摘要)',
|
||||
`demand_detail` text COMMENT '需求详情文本',
|
||||
`goods_name` varchar(200) DEFAULT NULL COMMENT '品名',
|
||||
`pieces` int DEFAULT NULL COMMENT '件数',
|
||||
`weight_kg` decimal(18,3) DEFAULT NULL COMMENT '重量KG',
|
||||
`volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积CBM',
|
||||
`status` varchar(32) NOT NULL DEFAULT '询价中' COMMENT '六态',
|
||||
`cost_price` varchar(64) DEFAULT NULL COMMENT '成本价展示串',
|
||||
`sale_price` varchar(64) DEFAULT NULL COMMENT '售价展示串',
|
||||
`profit_rate` varchar(32) DEFAULT NULL COMMENT '毛利率展示串',
|
||||
`tms_hit` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否命中 TMS 标准价',
|
||||
`manual_quote` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否含手工报价',
|
||||
`event_exception` varchar(200) DEFAULT NULL COMMENT '事件异常摘要,无则空',
|
||||
`system_exception` varchar(200) DEFAULT NULL COMMENT '系统异常摘要,无则空',
|
||||
`system_exception_reason` varchar(500) DEFAULT NULL COMMENT '系统异常原因',
|
||||
`close_reason` varchar(500) DEFAULT NULL COMMENT '关单原因',
|
||||
`version` int NOT NULL DEFAULT 1 COMMENT '乐观锁/业务版本',
|
||||
`create_by` varchar(50) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_by` varchar(50) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_inq_ticket_no` (`work_order_no`),
|
||||
KEY `idx_inq_ticket_status_time` (`status`,`create_time`),
|
||||
KEY `idx_inq_ticket_sales` (`sales_wecom_id`,`create_time`),
|
||||
KEY `idx_inq_ticket_line` (`business_line`,`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='询价工单';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 运输段(多段预留;本期列表可不展示)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `inq_ticket_segment` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`ticket_id` varchar(32) NOT NULL COMMENT '工单 id',
|
||||
`work_order_no` varchar(40) NOT NULL,
|
||||
`seg_index` int NOT NULL DEFAULT 1 COMMENT '段序号从 1 起',
|
||||
`origin` varchar(200) DEFAULT NULL,
|
||||
`destination` varchar(200) DEFAULT NULL,
|
||||
`business_line` varchar(16) DEFAULT NULL,
|
||||
`payload_json` longtext COMMENT '段级字段快照 JSON',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_inq_seg_ticket` (`ticket_id`),
|
||||
KEY `idx_inq_seg_wo` (`work_order_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='询价工单运输段';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 六态流转日志(时间线)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `inq_ticket_status_log` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`ticket_id` varchar(32) NOT NULL,
|
||||
`work_order_no` varchar(40) NOT NULL,
|
||||
`from_status` varchar(32) DEFAULT NULL,
|
||||
`to_status` varchar(32) NOT NULL,
|
||||
`action` varchar(64) NOT NULL COMMENT 'transition / close / retry / abnormal_handle',
|
||||
`operator` varchar(100) DEFAULT NULL COMMENT '操作人登录名或系统',
|
||||
`remark` varchar(1000) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_inq_status_log_wo` (`work_order_no`,`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工单状态流转日志';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 报价快照(只读展示;不做模板管理)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `inq_quote` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`ticket_id` varchar(32) NOT NULL,
|
||||
`work_order_no` varchar(40) NOT NULL,
|
||||
`quote_version` int NOT NULL DEFAULT 1 COMMENT '报价版本号',
|
||||
`source` varchar(64) NOT NULL COMMENT 'TMS / MANUAL / CUSTOMER',
|
||||
`source_label` varchar(200) DEFAULT NULL COMMENT '展示来源名',
|
||||
`price_text` varchar(128) DEFAULT NULL COMMENT '价格展示串',
|
||||
`highlighted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否高亮(采用候选)',
|
||||
`payload_json` longtext COMMENT '费用明细等 JSON',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_inq_quote_wo` (`work_order_no`,`quote_version`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工单报价快照(只读)';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 附件元数据(只存指针,不存文件字节)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `inq_attachment` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`ticket_id` varchar(32) NOT NULL,
|
||||
`work_order_no` varchar(40) NOT NULL,
|
||||
`file_name` varchar(255) NOT NULL,
|
||||
`object_key` varchar(500) DEFAULT NULL COMMENT '对象存储键',
|
||||
`content_type` varchar(128) DEFAULT NULL,
|
||||
`file_size` bigint DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_inq_attach_wo` (`work_order_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工单附件元数据';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 异常单(系统异常 handle / retry)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `inq_exception_case` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`ticket_id` varchar(32) NOT NULL,
|
||||
`work_order_no` varchar(40) NOT NULL,
|
||||
`case_type` varchar(32) NOT NULL COMMENT 'EVENT / SYSTEM',
|
||||
`title` varchar(200) NOT NULL,
|
||||
`reason` varchar(1000) DEFAULT NULL,
|
||||
`status` varchar(32) NOT NULL DEFAULT 'OPEN' COMMENT 'OPEN / HANDLED / RETRYING / CLOSED',
|
||||
`retry_count` int NOT NULL DEFAULT 0,
|
||||
`last_retry_at` datetime DEFAULT NULL,
|
||||
`handled_by` varchar(100) DEFAULT NULL,
|
||||
`handled_at` datetime DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_inq_exc_wo` (`work_order_no`,`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='询价异常单';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 员工岗位(业务角色,非 Jeecg 登录账号)
|
||||
-- role: sales / air / sea / land
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `inq_staff_role` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`name` varchar(100) NOT NULL COMMENT '姓名',
|
||||
`wecom_id` varchar(128) NOT NULL COMMENT '企微 userid',
|
||||
`mobile` varchar(32) DEFAULT NULL COMMENT '手机(可脱敏展示)',
|
||||
`depart_name` varchar(128) DEFAULT NULL COMMENT '部门',
|
||||
`role_code` varchar(32) NOT NULL COMMENT 'sales/air/sea/land',
|
||||
`role_label` varchar(64) DEFAULT NULL COMMENT '展示角色名',
|
||||
`routes` varchar(500) DEFAULT NULL COMMENT '负责线路,销售可为空',
|
||||
`notify_event_exception` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否接收事件异常提醒',
|
||||
`status` varchar(16) NOT NULL DEFAULT 'active' COMMENT 'active/disabled',
|
||||
`create_by` varchar(50) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_by` varchar(50) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_inq_staff_wecom` (`wecom_id`),
|
||||
KEY `idx_inq_staff_role` (`role_code`,`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='询价业务员工岗位';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 机器人回复语
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `inq_bot_reply` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`category_code` varchar(64) NOT NULL COMMENT '分类:inquiring/quoted/deal/...',
|
||||
`category_title` varchar(100) DEFAULT NULL COMMENT '分类中文名',
|
||||
`trigger_scene` varchar(255) NOT NULL COMMENT '触发场景说明',
|
||||
`reply_text` text NOT NULL COMMENT '回复正文,可含 {{变量}}',
|
||||
`enabled` tinyint(1) NOT NULL DEFAULT 1,
|
||||
`sort_no` int NOT NULL DEFAULT 0,
|
||||
`remark` varchar(500) DEFAULT NULL,
|
||||
`create_by` varchar(50) DEFAULT NULL,
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_by` varchar(50) DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_inq_reply_cat` (`category_code`,`enabled`,`sort_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='机器人回复语';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 看板日快照(可选;无行时 metrics 实时聚合 inq_ticket)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `inq_dashboard_snapshot` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`snap_date` date NOT NULL COMMENT '统计日',
|
||||
`metrics_json` longtext NOT NULL COMMENT '指标 JSON',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_inq_dash_date` (`snap_date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分析看板日快照';
|
||||
@@ -0,0 +1,87 @@
|
||||
-- =============================================================================
|
||||
-- 恢复 JeecgBoot 兼容的 RBAC 列(仅 inquiry_robot)
|
||||
-- 背景:slim_rbac_columns.sql 砍掉了 avatar/del_flag/component/url 等,导致登录失败。
|
||||
-- 保留精简期额外列:sys_user.wecom_id / last_login_time、sys_permission.path、sys_role.status
|
||||
-- 禁止对现网 jeecg-boot 库执行。
|
||||
-- =============================================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ---------- sys_user:补齐 Jeecg SysUser 实体列 ----------
|
||||
ALTER TABLE `sys_user`
|
||||
ADD COLUMN `avatar` varchar(255) NULL DEFAULT NULL COMMENT '头像' AFTER `salt`,
|
||||
ADD COLUMN `birthday` datetime NULL DEFAULT NULL COMMENT '生日' AFTER `avatar`,
|
||||
ADD COLUMN `sex` tinyint(1) NULL DEFAULT NULL COMMENT '性别' AFTER `birthday`,
|
||||
ADD COLUMN `email` varchar(45) NULL DEFAULT NULL COMMENT '电子邮件' AFTER `sex`,
|
||||
ADD COLUMN `org_code` varchar(64) NULL DEFAULT NULL COMMENT '机构编码' AFTER `phone`,
|
||||
ADD COLUMN `del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除状态0正常1已删除' AFTER `status`,
|
||||
ADD COLUMN `third_id` varchar(100) NULL DEFAULT NULL COMMENT '第三方唯一标识' AFTER `del_flag`,
|
||||
ADD COLUMN `third_type` varchar(100) NULL DEFAULT NULL COMMENT '第三方类型' AFTER `third_id`,
|
||||
ADD COLUMN `activiti_sync` tinyint(1) NULL DEFAULT 0 COMMENT '同步工作流' AFTER `third_type`,
|
||||
ADD COLUMN `work_no` varchar(100) NULL DEFAULT NULL COMMENT '工号' AFTER `activiti_sync`,
|
||||
ADD COLUMN `post` varchar(100) NULL DEFAULT NULL COMMENT '职务' AFTER `work_no`,
|
||||
ADD COLUMN `telephone` varchar(45) NULL DEFAULT NULL COMMENT '座机' AFTER `post`,
|
||||
ADD COLUMN `create_by` varchar(32) NULL DEFAULT NULL COMMENT '创建人' AFTER `telephone`,
|
||||
ADD COLUMN `update_by` varchar(32) NULL DEFAULT NULL COMMENT '更新人' AFTER `create_time`,
|
||||
ADD COLUMN `user_identity` tinyint(1) NULL DEFAULT NULL COMMENT '身份' AFTER `update_time`,
|
||||
ADD COLUMN `depart_ids` varchar(1000) NULL DEFAULT NULL COMMENT '负责部门' AFTER `user_identity`,
|
||||
ADD COLUMN `client_id` varchar(64) NULL DEFAULT NULL COMMENT '设备ID' AFTER `depart_ids`,
|
||||
ADD COLUMN `login_tenant_id` int NULL DEFAULT NULL COMMENT '上次登录租户' AFTER `client_id`,
|
||||
ADD COLUMN `bpm_status` varchar(2) NULL DEFAULT NULL COMMENT '流程状态' AFTER `login_tenant_id`;
|
||||
|
||||
-- 存量账号必须可被 del_flag=0 查到;企微 id 回写 third_id 便于对照
|
||||
UPDATE `sys_user` SET `del_flag` = 0 WHERE `del_flag` IS NULL;
|
||||
UPDATE `sys_user` SET `third_id` = `wecom_id` WHERE (`third_id` IS NULL OR `third_id` = '') AND `wecom_id` IS NOT NULL AND `wecom_id` <> '';
|
||||
|
||||
-- ---------- sys_role:补齐 Jeecg 列(保留 status) ----------
|
||||
ALTER TABLE `sys_role`
|
||||
ADD COLUMN `create_by` varchar(32) NULL DEFAULT NULL COMMENT '创建人' AFTER `description`,
|
||||
ADD COLUMN `update_by` varchar(32) NULL DEFAULT NULL COMMENT '更新人' AFTER `create_time`,
|
||||
ADD COLUMN `tenant_id` int NULL DEFAULT 0 COMMENT '租户ID' AFTER `update_time`;
|
||||
|
||||
-- ---------- sys_permission:补齐 Jeecg 菜单列(保留 path) ----------
|
||||
ALTER TABLE `sys_permission`
|
||||
ADD COLUMN `url` varchar(255) NULL DEFAULT NULL COMMENT '路径' AFTER `name`,
|
||||
ADD COLUMN `component` varchar(255) NULL DEFAULT NULL COMMENT '组件' AFTER `url`,
|
||||
ADD COLUMN `is_route` tinyint(1) NULL DEFAULT 1 COMMENT '是否路由菜单' AFTER `component`,
|
||||
ADD COLUMN `component_name` varchar(255) NULL DEFAULT NULL COMMENT '组件名' AFTER `is_route`,
|
||||
ADD COLUMN `redirect` varchar(255) NULL DEFAULT NULL COMMENT '一级跳转' AFTER `component_name`,
|
||||
ADD COLUMN `perms_type` varchar(10) NULL DEFAULT '0' COMMENT '权限策略' AFTER `perms`,
|
||||
ADD COLUMN `always_show` tinyint(1) NULL DEFAULT 0 COMMENT '聚合子路由' AFTER `sort_no`,
|
||||
ADD COLUMN `is_leaf` tinyint(1) NULL DEFAULT 0 COMMENT '是否叶子' AFTER `icon`,
|
||||
ADD COLUMN `keep_alive` tinyint(1) NULL DEFAULT 0 COMMENT '是否缓存' AFTER `is_leaf`,
|
||||
ADD COLUMN `hidden` int NULL DEFAULT 0 COMMENT '是否隐藏路由' AFTER `keep_alive`,
|
||||
ADD COLUMN `hide_tab` int NULL DEFAULT 0 COMMENT '是否隐藏tab' AFTER `hidden`,
|
||||
ADD COLUMN `description` varchar(255) NULL DEFAULT NULL COMMENT '描述' AFTER `hide_tab`,
|
||||
ADD COLUMN `create_by` varchar(255) NULL DEFAULT NULL COMMENT '创建人' AFTER `description`,
|
||||
ADD COLUMN `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间' AFTER `create_by`,
|
||||
ADD COLUMN `update_by` varchar(255) NULL DEFAULT NULL COMMENT '更新人' AFTER `create_time`,
|
||||
ADD COLUMN `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间' AFTER `update_by`,
|
||||
ADD COLUMN `del_flag` int NULL DEFAULT 0 COMMENT '删除状态' AFTER `update_time`,
|
||||
ADD COLUMN `rule_flag` int NULL DEFAULT 0 COMMENT '数据权限标记' AFTER `del_flag`,
|
||||
ADD COLUMN `internal_or_external` tinyint(1) NULL DEFAULT 0 COMMENT '外链打开方式' AFTER `status`;
|
||||
|
||||
-- status 从 tinyint 改为 Jeecg 期望的 varchar(2)
|
||||
ALTER TABLE `sys_permission`
|
||||
MODIFY COLUMN `status` varchar(2) NULL DEFAULT '1' COMMENT '按钮权限状态0无效1有效';
|
||||
|
||||
ALTER TABLE `sys_permission`
|
||||
MODIFY COLUMN `sort_no` double(8,2) NULL DEFAULT 0 COMMENT '菜单排序';
|
||||
|
||||
-- path -> url;按钮叶子等默认值
|
||||
UPDATE `sys_permission` SET `url` = `path` WHERE (`url` IS NULL OR `url` = '') AND `path` IS NOT NULL;
|
||||
UPDATE `sys_permission` SET `del_flag` = 0 WHERE `del_flag` IS NULL;
|
||||
UPDATE `sys_permission` SET `status` = '1' WHERE `status` IS NULL OR `status` = '' OR `status` = '1';
|
||||
UPDATE `sys_permission` SET `is_route` = CASE WHEN `menu_type` = 2 THEN 0 ELSE 1 END WHERE `is_route` IS NULL;
|
||||
UPDATE `sys_permission` SET `is_leaf` = CASE WHEN `menu_type` = 0 THEN 0 ELSE 1 END;
|
||||
UPDATE `sys_permission` SET `perms_type` = '1' WHERE `perms_type` IS NULL OR `perms_type` = '' OR `perms_type` = '0';
|
||||
|
||||
-- 询价菜单补 component(对齐 inquiry_admin_menu_seed_v1)
|
||||
UPDATE `sys_permission` SET `url`='/inquiry', `component`='layouts/default/index', `is_leaf`=0, `is_route`=1 WHERE `id`='b1000000000000000000000000000001';
|
||||
UPDATE `sys_permission` SET `url`='/inquiry/dashboard', `component`='inquiry/dashboard/index', `is_leaf`=1, `is_route`=1 WHERE `id`='b1000000000000000000000000000002';
|
||||
UPDATE `sys_permission` SET `url`='/inquiry/work-order', `component`='inquiry/workOrder/index', `is_leaf`=1, `is_route`=1 WHERE `id`='b1000000000000000000000000000003';
|
||||
UPDATE `sys_permission` SET `url`='/inquiry/staff-role', `component`='inquiry/staffRole/index', `is_leaf`=1, `is_route`=1 WHERE `id`='b1000000000000000000000000000004';
|
||||
UPDATE `sys_permission` SET `url`='/inquiry/bot-reply', `component`='inquiry/botReply/index', `is_leaf`=1, `is_route`=1 WHERE `id`='b1000000000000000000000000000005';
|
||||
UPDATE `sys_permission` SET `url`='/inquiry-sys', `component`='layouts/default/index', `is_leaf`=0, `is_route`=1 WHERE `id`='b1000000000000000000000000000010';
|
||||
UPDATE `sys_permission` SET `url`='/inquiry-sys/user', `component`='system/user/index', `is_leaf`=1, `is_route`=1 WHERE `id`='b1000000000000000000000000000011';
|
||||
UPDATE `sys_permission` SET `url`='/inquiry-sys/role', `component`='system/role/index', `is_leaf`=1, `is_route`=1 WHERE `id`='b1000000000000000000000000000012';
|
||||
@@ -0,0 +1,67 @@
|
||||
-- =============================================================================
|
||||
-- 补齐 Jeecg 多租户表(仅 inquiry_robot)
|
||||
-- 登录会查 SELECT tenant_id FROM sys_user_tenant WHERE user_id = ?
|
||||
-- 禁止对现网 jeecg-boot 库执行。
|
||||
-- =============================================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `sys_tenant` (
|
||||
`id` int NOT NULL COMMENT '租户编码',
|
||||
`name` varchar(100) NULL DEFAULT NULL COMMENT '租户名称',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(100) NULL DEFAULT NULL COMMENT '创建人',
|
||||
`begin_date` datetime NULL DEFAULT NULL COMMENT '开始时间',
|
||||
`end_date` datetime NULL DEFAULT NULL COMMENT '结束时间',
|
||||
`status` int NULL DEFAULT 1 COMMENT '状态 1正常 0冻结',
|
||||
`trade` varchar(10) NULL DEFAULT NULL COMMENT '所属行业',
|
||||
`company_size` varchar(10) NULL DEFAULT NULL COMMENT '公司规模',
|
||||
`company_address` varchar(100) NULL DEFAULT NULL COMMENT '公司地址',
|
||||
`company_logo` varchar(200) NULL DEFAULT NULL COMMENT '公司logo',
|
||||
`house_number` varchar(10) NULL DEFAULT NULL COMMENT '门牌号',
|
||||
`work_place` varchar(100) NULL DEFAULT NULL COMMENT '工作地点',
|
||||
`secondary_domain` varchar(50) NULL DEFAULT NULL COMMENT '二级域名',
|
||||
`login_bkgd_img` varchar(200) NULL DEFAULT NULL COMMENT '登录背景图片',
|
||||
`position` varchar(10) NULL DEFAULT NULL COMMENT '职级',
|
||||
`department` varchar(10) NULL DEFAULT NULL COMMENT '部门',
|
||||
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除状态(0-正常,1-已删除)',
|
||||
`update_by` varchar(32) NULL DEFAULT NULL COMMENT '更新人',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`apply_status` int NULL DEFAULT NULL COMMENT '允许申请管理员 1允许 0不允许',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='多租户信息表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `sys_user_tenant` (
|
||||
`id` varchar(32) NOT NULL COMMENT '主键id',
|
||||
`user_id` varchar(32) NULL DEFAULT NULL COMMENT '用户id',
|
||||
`tenant_id` int NULL DEFAULT NULL COMMENT '租户id',
|
||||
`status` varchar(1) NULL DEFAULT '1' COMMENT '状态(1 正常 2 离职 3 待审核 4 审核未通过)',
|
||||
`create_by` varchar(32) NULL DEFAULT NULL COMMENT '创建人登录名称',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
`update_by` varchar(32) NULL DEFAULT NULL COMMENT '更新人登录名称',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新日期',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_sut_user_id` (`user_id`),
|
||||
KEY `idx_sut_tenant_id` (`tenant_id`),
|
||||
KEY `uniq_sut_user_rel_tenant` (`user_id`,`tenant_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户租户关系表';
|
||||
|
||||
-- 默认租户(对齐 Jeecg 演示:1000)
|
||||
INSERT IGNORE INTO `sys_tenant`
|
||||
(`id`,`name`,`create_time`,`create_by`,`status`,`house_number`,`del_flag`,`update_by`,`update_time`)
|
||||
VALUES
|
||||
(1000,'友通达询价','2026-09-13 00:00:00','admin',1,'YTD001',0,'admin',NOW());
|
||||
|
||||
-- 给全部未删除用户挂上默认租户(幂等:同 user+tenant 已有则跳过)
|
||||
INSERT INTO `sys_user_tenant` (`id`,`user_id`,`tenant_id`,`status`,`create_by`,`create_time`)
|
||||
SELECT MD5(CONCAT('ytd-tenant:',u.`id`,':1000')), u.`id`, 1000, '1', 'admin', NOW()
|
||||
FROM `sys_user` u
|
||||
WHERE IFNULL(u.`del_flag`,0)=0
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `sys_user_tenant` t
|
||||
WHERE t.`user_id`=u.`id` AND t.`tenant_id`=1000
|
||||
);
|
||||
|
||||
-- 登录租户回写
|
||||
UPDATE `sys_user` SET `login_tenant_id`=1000
|
||||
WHERE IFNULL(`del_flag`,0)=0 AND (`login_tenant_id` IS NULL OR `login_tenant_id`=0);
|
||||
@@ -0,0 +1,37 @@
|
||||
-- 补回「报价模板」菜单(页面 mock,暂不接主账接口)
|
||||
-- 库:inquiry_robot
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
INSERT IGNORE INTO `sys_permission`
|
||||
(`id`,`parent_id`,`name`,`url`,`component`,`is_route`,`menu_type`,`perms_type`,`sort_no`,`always_show`,`icon`,`is_leaf`,`keep_alive`,`hidden`,`hide_tab`,`create_by`,`create_time`,`del_flag`,`rule_flag`,`status`,`internal_or_external`)
|
||||
VALUES
|
||||
('b1000000000000000000000000000006','b1000000000000000000000000000001','报价模板','/inquiry/template','inquiry/template/index',1,1,'1',4,0,'ant-design:file-excel-outlined',1,0,0,0,'admin',NOW(),0,0,'1',0);
|
||||
|
||||
UPDATE `sys_permission`
|
||||
SET `sort_no`=5, `del_flag`=0
|
||||
WHERE `id`='b1000000000000000000000000000005';
|
||||
|
||||
UPDATE `sys_permission`
|
||||
SET `del_flag`=0, `url`='/inquiry/template', `component`='inquiry/template/index', `is_route`=1, `is_leaf`=1, `menu_type`=1, `status`='1'
|
||||
WHERE `id`='b1000000000000000000000000000006';
|
||||
|
||||
INSERT IGNORE INTO `sys_permission`
|
||||
(`id`,`parent_id`,`name`,`is_route`,`menu_type`,`perms`,`perms_type`,`sort_no`,`always_show`,`is_leaf`,`keep_alive`,`hidden`,`hide_tab`,`create_by`,`create_time`,`del_flag`,`rule_flag`,`status`,`internal_or_external`)
|
||||
VALUES
|
||||
('b1000000000000000000000000000061','b1000000000000000000000000000006','模板查看',0,2,'inquiry:template:view','1',1,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000062','b1000000000000000000000000000006','模板上传',0,2,'inquiry:template:upload','1',2,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000063','b1000000000000000000000000000006','模板编辑',0,2,'inquiry:template:edit','1',3,0,1,0,0,0,'admin',NOW(),0,0,'1',0),
|
||||
('b1000000000000000000000000000064','b1000000000000000000000000000006','模板启停',0,2,'inquiry:template:toggle','1',4,0,1,0,0,0,'admin',NOW(),0,0,'1',0);
|
||||
|
||||
INSERT IGNORE INTO `sys_role_permission` (`id`,`role_id`,`permission_id`)
|
||||
SELECT MD5(CONCAT('ytd-inq:',r.`id`,':',p.`id`)),r.`id`,p.`id`
|
||||
FROM `sys_role` r
|
||||
JOIN `sys_permission` p ON p.`id` IN (
|
||||
'b1000000000000000000000000000006',
|
||||
'b1000000000000000000000000000061',
|
||||
'b1000000000000000000000000000062',
|
||||
'b1000000000000000000000000000063',
|
||||
'b1000000000000000000000000000064'
|
||||
)
|
||||
WHERE r.`role_code`='admin';
|
||||
@@ -0,0 +1,120 @@
|
||||
-- inquiry_robot:账号/角色/菜单/权限 精简字段(对齐后台「账号管理」「角色管理」)
|
||||
-- 只保留页面用到的列;破坏 Jeecg 官方实体兼容属预期(当前只要这套管理能力)。
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ---------- 账号 ----------
|
||||
DROP TABLE IF EXISTS `sys_user_new`;
|
||||
CREATE TABLE `sys_user_new` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`username` varchar(100) NOT NULL COMMENT '账号',
|
||||
`realname` varchar(100) DEFAULT NULL COMMENT '姓名',
|
||||
`password` varchar(255) DEFAULT NULL COMMENT '密码哈希',
|
||||
`salt` varchar(45) DEFAULT NULL COMMENT '盐',
|
||||
`wecom_id` varchar(64) DEFAULT NULL COMMENT '企微 userid',
|
||||
`phone` varchar(45) DEFAULT NULL COMMENT '手机号',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
|
||||
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_username` (`username`),
|
||||
KEY `idx_wecom_id` (`wecom_id`),
|
||||
KEY `idx_phone` (`phone`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账号';
|
||||
|
||||
INSERT INTO `sys_user_new` (`id`,`username`,`realname`,`password`,`salt`,`wecom_id`,`phone`,`status`,`last_login_time`,`create_time`,`update_time`)
|
||||
SELECT `id`,`username`,`realname`,`password`,`salt`,
|
||||
NULLIF(`third_id`,''),
|
||||
`phone`,
|
||||
IFNULL(`status`,1),
|
||||
NULL,
|
||||
`create_time`,`update_time`
|
||||
FROM `sys_user`;
|
||||
|
||||
DROP TABLE `sys_user`;
|
||||
RENAME TABLE `sys_user_new` TO `sys_user`;
|
||||
|
||||
-- ---------- 角色 ----------
|
||||
DROP TABLE IF EXISTS `sys_role_new`;
|
||||
CREATE TABLE `sys_role_new` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`role_name` varchar(100) NOT NULL COMMENT '角色名称',
|
||||
`role_code` varchar(100) NOT NULL COMMENT '角色编码',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
|
||||
`description` varchar(255) DEFAULT NULL COMMENT '说明',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_role_code` (`role_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色';
|
||||
|
||||
INSERT INTO `sys_role_new` (`id`,`role_name`,`role_code`,`status`,`description`,`create_time`,`update_time`)
|
||||
SELECT `id`,`role_name`,`role_code`,1,`description`,`create_time`,`update_time`
|
||||
FROM `sys_role`;
|
||||
|
||||
DROP TABLE `sys_role`;
|
||||
RENAME TABLE `sys_role_new` TO `sys_role`;
|
||||
|
||||
-- ---------- 账号-角色 ----------
|
||||
DROP TABLE IF EXISTS `sys_user_role_new`;
|
||||
CREATE TABLE `sys_user_role_new` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`user_id` varchar(32) NOT NULL,
|
||||
`role_id` varchar(32) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_user_role` (`user_id`,`role_id`),
|
||||
KEY `idx_role_id` (`role_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账号角色关联';
|
||||
|
||||
INSERT INTO `sys_user_role_new` (`id`,`user_id`,`role_id`)
|
||||
SELECT `id`,`user_id`,`role_id` FROM `sys_user_role`;
|
||||
|
||||
DROP TABLE `sys_user_role`;
|
||||
RENAME TABLE `sys_user_role_new` TO `sys_user_role`;
|
||||
|
||||
-- ---------- 菜单+权限 ----------
|
||||
DROP TABLE IF EXISTS `sys_permission_new`;
|
||||
CREATE TABLE `sys_permission_new` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`parent_id` varchar(32) DEFAULT NULL COMMENT '父菜单',
|
||||
`name` varchar(100) NOT NULL COMMENT '菜单/权限名称',
|
||||
`path` varchar(255) DEFAULT NULL COMMENT '路由或URL',
|
||||
`menu_type` tinyint NOT NULL DEFAULT 0 COMMENT '0目录 1菜单 2按钮',
|
||||
`perms` varchar(100) DEFAULT NULL COMMENT '权限码',
|
||||
`icon` varchar(64) DEFAULT NULL COMMENT '图标',
|
||||
`sort_no` int NOT NULL DEFAULT 0 COMMENT '排序',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_parent` (`parent_id`),
|
||||
KEY `idx_perms` (`perms`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单与权限';
|
||||
|
||||
INSERT INTO `sys_permission_new` (`id`,`parent_id`,`name`,`path`,`menu_type`,`perms`,`icon`,`sort_no`,`status`)
|
||||
SELECT `id`,`parent_id`,`name`,`url`,IFNULL(`menu_type`,0),`perms`,`icon`,
|
||||
IFNULL(CAST(`sort_no` AS SIGNED),0),
|
||||
CASE WHEN `status` IN ('1','0') THEN CAST(`status` AS SIGNED) ELSE 1 END
|
||||
FROM `sys_permission`;
|
||||
|
||||
DROP TABLE `sys_permission`;
|
||||
RENAME TABLE `sys_permission_new` TO `sys_permission`;
|
||||
|
||||
-- ---------- 角色-权限 ----------
|
||||
DROP TABLE IF EXISTS `sys_role_permission_new`;
|
||||
CREATE TABLE `sys_role_permission_new` (
|
||||
`id` varchar(32) NOT NULL,
|
||||
`role_id` varchar(32) NOT NULL,
|
||||
`permission_id` varchar(32) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_role_perm` (`role_id`,`permission_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联';
|
||||
|
||||
INSERT INTO `sys_role_permission_new` (`id`,`role_id`,`permission_id`)
|
||||
SELECT MIN(`id`),`role_id`,`permission_id` FROM `sys_role_permission`
|
||||
GROUP BY `role_id`,`permission_id`;
|
||||
|
||||
DROP TABLE `sys_role_permission`;
|
||||
RENAME TABLE `sys_role_permission_new` TO `sys_role_permission`;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
Reference in New Issue
Block a user