From 616451b29da9ec7da61098bdd76807e94f5f1fde Mon Sep 17 00:00:00 2001 From: MiFaZhan Date: Thu, 29 Oct 2026 16:32:27 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E6=95=B0=E6=8D=AE=E5=BA=93=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E4=B8=BA=E5=8D=95=E6=96=87=E4=BB=B6=EF=BC=8C?= =?UTF-8?q?=E6=8D=A2=E7=94=A8=E6=BC=94=E7=A4=BA=E7=8E=AF=E5=A2=83=E7=A7=8D?= =?UTF-8?q?=E5=AD=90=E5=BA=93=EF=BC=88v1.0.4=20=E5=AF=B9=E9=BD=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原 13 个分散脚本整合为 schema/init.sql 一个文件,来源换成演示环境 正在使用的种子库(结构已与生产核对,89 表基线)。 内容变化(相比旧的 12 文件版本): - 新增 v1.0.4 前置段:t_export_task(导出中心)、sys_notice_user、 card_channel_assoc.channel_id 扩宽为 varchar(64)、9 条菜单权限 - 修正 3 个真实缺陷:cron 表达式 L 改为 28-31(调度器可解析)、 通道模板 created_dept 103 改为 1(悬空机构致列表恒为空)、 菜单 444 的 path 修正 - 数据库共 91 表(旧版 89,v1.0.4 新增 2 张) 脱敏: - 18 个演示账号保留(出库/划拨依赖账号与部门树关联), 昵称/邮箱/手机号/登录IP/头像改为占位或编造值 - 归属部门、租户的联系电话与邮箱一并处理 - 公司名、组织名 → 示例企业 - 内网/生产 IP、内部域名 → 删除或改为服务名 - Mock 通道地址指向 onelink-mock 服务 - 通道模板真实上游密钥置空 - sys_social(微信绑定)不随分发 口令处理:改为纯 SQL,不再用 .sh + 环境变量。 业务账号:CREATE USER 语句内字面口令 种子账号:UPDATE sys_user SET password = MD5(CONCAT(MD5('<口令>'), MD5(salt))) 与 docker-compose.yml、config/*/config.yaml 保持同一口令 已验证:本地 MySQL 8.0 容器按 docker-entrypoint-initdb.d 实际导入, 无报错;表 91、菜单 456、账号 18、字典 86/436、通道模板 3、Mock 通道 1、 导出中心与通知表各 1、定时任务 20;18 条口令哈希自洽; 应用账号 u_iotlcm 可连库查询。 --- README.md | 6 +- schema/02-schema-fix-preview1.sql | 116 --- schema/03-schema-align-prod.sql | 42 - schema/04-users.sh | 35 - schema/05-reset-passwords.sh | 59 -- schema/06-seed-channel-templates.sql | 45 - schema/07-seed-dict.sql | 677 -------------- schema/08-seed-mock-channel.sql | 52 -- schema/09-seed-role-chain.sql | 77 -- schema/10-seed-jobs.sql | 73 -- schema/11-seed-menu-align-prod.sql | 72 -- schema/12-repair-dept-ancestors.sql | 70 -- schema/13-seed-flow-package.sql | 35 - schema/README.md | 131 ++- schema/{01-schema.sql => init.sql} | 1271 +++++++++++++++++++++++++- 15 files changed, 1321 insertions(+), 1440 deletions(-) delete mode 100644 schema/02-schema-fix-preview1.sql delete mode 100644 schema/03-schema-align-prod.sql delete mode 100755 schema/04-users.sh delete mode 100755 schema/05-reset-passwords.sh delete mode 100644 schema/06-seed-channel-templates.sql delete mode 100644 schema/07-seed-dict.sql delete mode 100644 schema/08-seed-mock-channel.sql delete mode 100644 schema/09-seed-role-chain.sql delete mode 100644 schema/10-seed-jobs.sql delete mode 100644 schema/11-seed-menu-align-prod.sql delete mode 100644 schema/12-repair-dept-ancestors.sql delete mode 100644 schema/13-seed-flow-package.sql rename schema/{01-schema.sql => init.sql} (81%) diff --git a/README.md b/README.md index 87b5eb3..e6e85a0 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ iotlcm-deploy/ │ ├── upstream-chan/config.yaml │ ├── upstream-proxy/config.yaml │ └── worker-svr/config.yaml -├── schema/ # 数据库初始化脚本(首次启动自动执行) +├── schema/init.sql # 数据库初始化(单文件,首次启动自动执行) └── data/ # 运行数据(首次启动自动创建,不入版本库) ``` @@ -71,10 +71,10 @@ iotlcm-deploy/ | 项 | 位置 | | --- | --- | -| 数据库口令(root 与应用账号) | `docker-compose.yml` + `config/*/config.yaml` + `schema/04-users.sh` | +| 数据库口令(root 与应用账号) | `docker-compose.yml` + `config/*/config.yaml` + `schema/init.sql` | | Redis 口令 | `docker-compose.yml` + `config/*/config.yaml` | | RabbitMQ 口令 | `docker-compose.yml` + `config/*/config.yaml` | -| admin 初始口令 | `docker-compose.yml` + `schema/05-reset-passwords.sh` | +| admin 初始口令 | `docker-compose.yml` + `schema/init.sql` | | JWT 签名密钥 | `config/admin-svr`、`config/openapi`、`config/app-server` 三处 | | 对外域名 | `config/nginx/iotlcm.conf` | diff --git a/schema/02-schema-fix-preview1.sql b/schema/02-schema-fix-preview1.sql deleted file mode 100644 index 1d4b3c0..0000000 --- a/schema/02-schema-fix-preview1.sql +++ /dev/null @@ -1,116 +0,0 @@ --- ============================================ --- 演示环境种子库结构补齐(2026-10-16) --- 背景:mysql-init/01-schema.sql 源自 db_iotlcm_init.sql(较旧), --- 与当前业务镜像期望的 schema 存在差异,导致 app-server 后台任务 --- 报 `Unknown column 'source_channel'` 等错误。 --- 依据:以预演1(内网环境)的 db_iotlcm 为基准逐列比对得出。 --- 差异:缺 1 张表(card_channel_assoc)+ 27 列(分布 8 张表)。 --- --- ⚠️ MySQL 8.0 不支持 `ALTER TABLE ... ADD COLUMN IF NOT EXISTS`(MariaDB 语法), --- 因此用存储过程按 information_schema 判断后动态执行,保证幂等、可重复运行。 --- --- 执行顺序:01-schema.sql → 本文件(按文件名排序,02-)。 --- ============================================ - -SET NAMES utf8mb4; -USE `db_iotlcm`; - --- ---------- 1. 缺失的表:card_channel_assoc(卡号段-通道关联)---------- -CREATE TABLE IF NOT EXISTS `card_channel_assoc` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `channel_id` int NOT NULL COMMENT '通道ID', - `match_type` tinyint NOT NULL COMMENT '匹配类型', - `iccid` varchar(32) DEFAULT NULL COMMENT '单卡ICCID', - `iccid_start` varchar(32) DEFAULT NULL COMMENT '卡号段起始', - `iccid_end` varchar(32) DEFAULT NULL COMMENT '卡号段结束', - `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态', - `remark` varchar(255) DEFAULT NULL COMMENT '备注', - `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `idx_channel_id` (`channel_id`), - KEY `idx_iccid` (`iccid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='卡号段与通道关联'; - --- ---------- 2. 幂等补列辅助过程 ---------- -DROP PROCEDURE IF EXISTS `sp_add_column_if_missing`; -DELIMITER $$ -CREATE PROCEDURE `sp_add_column_if_missing`( - IN p_table VARCHAR(64), - IN p_column VARCHAR(64), - IN p_ddl TEXT -) -BEGIN - IF NOT EXISTS ( - SELECT 1 FROM information_schema.columns - WHERE table_schema = DATABASE() - AND table_name = p_table - AND column_name = p_column - ) THEN - SET @s = CONCAT('ALTER TABLE `', p_table, '` ADD COLUMN ', p_ddl); - PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; - SELECT CONCAT('added ', p_table, '.', p_column) AS action; - ELSE - SELECT CONCAT('exists ', p_table, '.', p_column) AS action; - END IF; -END$$ -DELIMITER ; - --- ---------- 3. batch_main:补 2 列 ---------- -CALL sp_add_column_if_missing('batch_main', 'source_channel', - "`source_channel` varchar(24) NOT NULL DEFAULT 'legacy' COMMENT '发起渠道:console/mini_program/api/system/legacy'"); -CALL sp_add_column_if_missing('batch_main', 'execution_mode', - "`execution_mode` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '执行模式'"); - --- ---------- 4. sys_user:补 1 列 ---------- -CALL sp_add_column_if_missing('sys_user', 'is_init_password', - "`is_init_password` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否为初始密码'"); - --- ---------- 5. t_sim_card_info:补 4 列 ---------- -CALL sp_add_column_if_missing('t_sim_card_info', 'imei_sync_time', - "`imei_sync_time` datetime DEFAULT NULL COMMENT 'IMEI 同步时间'"); -CALL sp_add_column_if_missing('t_sim_card_info', 'imei_update_time', - "`imei_update_time` datetime DEFAULT NULL COMMENT 'IMEI 更新时间'"); -CALL sp_add_column_if_missing('t_sim_card_info', 'traffic_cutoff_triggered_at', - "`traffic_cutoff_triggered_at` datetime DEFAULT NULL COMMENT '流量停机触发时间'"); -CALL sp_add_column_if_missing('t_sim_card_info', 'traffic_cutoff_cross_month_hold', - "`traffic_cutoff_cross_month_hold` tinyint(1) NOT NULL DEFAULT 0 COMMENT '流量停机跨月保持'"); - --- ---------- 6. t_sim_channels:补 9 列 ---------- -CALL sp_add_column_if_missing('t_sim_channels', 'app_key', - "`app_key` varchar(64) DEFAULT NULL COMMENT '运营商 app_key'"); -CALL sp_add_column_if_missing('t_sim_channels', 'app_secret', - "`app_secret` varchar(64) DEFAULT NULL COMMENT '运营商 app_secret'"); -CALL sp_add_column_if_missing('t_sim_channels', 'operator', - "`operator` tinyint unsigned DEFAULT NULL COMMENT '运营商'"); -CALL sp_add_column_if_missing('t_sim_channels', 'is_normal', - "`is_normal` tinyint(1) DEFAULT NULL COMMENT '是否正常'"); -CALL sp_add_column_if_missing('t_sim_channels', 'docking_status', - "`docking_status` tinyint(1) DEFAULT NULL COMMENT '对接状态'"); -CALL sp_add_column_if_missing('t_sim_channels', 'sync_enabled', - "`sync_enabled` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否启用全量同步'"); -CALL sp_add_column_if_missing('t_sim_channels', 'card_info_count', - "`card_info_count` bigint NOT NULL DEFAULT 0 COMMENT '卡信息数量'"); -CALL sp_add_column_if_missing('t_sim_channels', 'stock_card_count', - "`stock_card_count` bigint NOT NULL DEFAULT 0 COMMENT '库存卡数量'"); -CALL sp_add_column_if_missing('t_sim_channels', 'cancellation_card_count', - "`cancellation_card_count` bigint NOT NULL DEFAULT 0 COMMENT '销户卡数量'"); - --- ---------- 7. 两张套餐绑定表:补 batch_no ---------- -CALL sp_add_column_if_missing('t_sim_pool_bind_package', 'batch_no', - "`batch_no` varchar(64) NOT NULL DEFAULT '' COMMENT '批次号'"); -CALL sp_add_column_if_missing('t_sim_pool_bind_pkg_logs', 'batch_no', - "`batch_no` varchar(64) NOT NULL DEFAULT '' COMMENT '批次号'"); - --- ---------- 8. 清理辅助过程 ---------- -DROP PROCEDURE IF EXISTS `sp_add_column_if_missing`; - --- ---------- 9. 校验 ---------- -SELECT 'tables' AS check_item, COUNT(*) AS n FROM information_schema.tables - WHERE table_schema='db_iotlcm' -UNION ALL SELECT 'columns', COUNT(*) FROM information_schema.columns - WHERE table_schema='db_iotlcm' -UNION ALL SELECT 'has_source_channel', COUNT(*) FROM information_schema.columns - WHERE table_schema='db_iotlcm' AND table_name='batch_main' AND column_name='source_channel' -UNION ALL SELECT 'has_card_channel_assoc', COUNT(*) FROM information_schema.tables - WHERE table_schema='db_iotlcm' AND table_name='card_channel_assoc'; diff --git a/schema/03-schema-align-prod.sql b/schema/03-schema-align-prod.sql deleted file mode 100644 index 2b5e1c1..0000000 --- a/schema/03-schema-align-prod.sql +++ /dev/null @@ -1,42 +0,0 @@ --- ============================================ --- 演示环境种子库 —— 按生产基准补齐(2026-10-27) --- 基准:生产 生产环境/db_iotlcm(89 表) --- 受检:演示 内网环境 演示库容器/db_iotlcm(88 表) --- --- 经 DBX 直连生产 + 演示端逐列比对(列名/类型/可空/默认/extra),确认实际差异仅 2 处: --- 1. 缺表 t_sms_template_config(11 列,生产新增的短信场景模板配置) --- 2. 两处 batch_no 默认值:种子库 DEFAULT '',生产无默认值 --- --- 说明:此前误报的 batch_detail 缺 id 列 / t_sim_channels 两列可空性差异, --- 均为 shell 管道首行丢失 + MD5 签名受表级 collation 影响的假象,已排除。 --- 88 张同名表中 86 张列定义与生产完全一致。 --- --- 幂等:可重复执行。 --- 执行顺序:02-schema-fix-preview1.sql 之后(03-);可与 02 互换,两者互补不重叠。 --- ============================================ - -SET NAMES utf8mb4; -USE `db_iotlcm`; - --- ---------- 1. 缺表:t_sms_template_config ---------- -CREATE TABLE IF NOT EXISTS `t_sms_template_config` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `scene` varchar(64) NOT NULL COMMENT '业务场景码,全局唯一,如 bind_phone', - `scene_name` varchar(128) NOT NULL DEFAULT '' COMMENT '场景名称(可读)', - `service_type` varchar(8) NOT NULL DEFAULT '' COMMENT '短信供应商:空=用服务默认,1=阿里云,2=腾讯云', - `sign_name` varchar(64) NOT NULL DEFAULT '' COMMENT '短信签名:空=用服务默认', - `template_id` varchar(64) NOT NULL COMMENT '短信模板ID', - `msg_content_template` varchar(512) NOT NULL DEFAULT '' COMMENT '内容参数模板,支持 {content}/{contentJson} 占位;空=直接使用调用方 msgContent', - `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0停用,1启用', - `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注', - `created_at` datetime DEFAULT NULL COMMENT '创建时间', - `updated_at` datetime DEFAULT NULL COMMENT '更新时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_scene` (`scene`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='短信业务场景模板配置'; - --- ---------- 2. batch_no 默认值对齐生产(去掉 '' 默认) ---------- --- 生产:`batch_no` varchar(64) NOT NULL (无 DEFAULT) --- 种子:`batch_no` varchar(64) NOT NULL DEFAULT '' -ALTER TABLE `t_sim_pool_bind_package` MODIFY COLUMN `batch_no` varchar(64) NOT NULL COMMENT '批次号'; -ALTER TABLE `t_sim_pool_bind_pkg_logs` MODIFY COLUMN `batch_no` varchar(64) NOT NULL COMMENT '批次号'; diff --git a/schema/04-users.sh b/schema/04-users.sh deleted file mode 100755 index 759ae4e..0000000 --- a/schema/04-users.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# ============================================================ -# 业务数据库账号与附加库 -# 由 MySQL 容器 docker-entrypoint-initdb.d 在首次启动时执行。 -# -# 口令直接写在本文件(不使用环境变量)。 -# 改口令时必须同时修改以下三处,否则服务连不上库: -# 1. docker-compose.yml 的 MYSQL_APP_PASSWORD -# 2. config/*/config.yaml 里 database link 的口令 -# 3. 本文件下方的 APP_PASSWORD -# ============================================================ -set -euo pipefail - -# 与 docker-compose.yml 保持一致 -APP_USER='iotlcm_app' -APP_PASSWORD='Iotlcm2026Default' -ROOT_PASSWORD='Iotlcm2026Default' -DB_NAME='db_iotlcm' - -mysql --protocol=socket -uroot -p"${ROOT_PASSWORD}" <','>',1,'','','','000000',103,1,''), -('cardInfo_dimensionStatus','>=','>=',1,'','','','000000',103,1,''), -('cardInfo_selectCondition','iccid','ICCID',1,'','','','000000',103,1,''), -('cardInfo_selectCondition','imei','IMEI',1,'','','','000000',103,1,''), -('cardInfo_selectCondition','imis','IMSI',1,'','','','000000',103,1,''), -('cardInfo_selectCondition','msisdn','MSISDN',1,'','','','000000',103,1,''), -('cardInfo_timeType','0','开卡时间',1,'','','','000000',103,1,''), -('cardInfo_timeType','1','激活时间',1,'','','','000000',103,1,''), -('cardInfo_timeType','2','入库时间',1,'','','','000000',103,1,''), -('cardInfo_timeType','3','出库时间',1,'','','','000000',103,1,''), -('cardInfo_timeType','4','到期时间',1,'','','','000000',103,1,''), -('cardInfo_timeType','5','创建时间',1,'','','','000000',103,1,''), -('cardInfo_timeType','6','流量同步时间',1,'','','','000000',103,1,''), -('cardInfo_timeType','7','状态同步时间',1,'','','','000000',103,1,''), -('change_type','0','分润',0,'primary','','','000000',103,1,''), -('change_type','1','提现',1,'primary','','','000000',103,1,''), -('change_type','2','转出',2,'primary','','','000000',103,1,''), -('change_type','3','转入',3,'primary','','','000000',103,1,''), -('change_type','4','还款',4,'primary','','','000000',103,1,''), -('check_status','0','待审核',0,NULL,NULL,'Y','000000',103,1,NULL), -('check_status','1','审核通过',1,NULL,NULL,'N','000000',103,1,NULL), -('check_status','2','审核未通过',2,NULL,NULL,'N','000000',103,1,NULL), -('creator_type','1','终端用户',0,'primary','','','000000',103,1,''), -('creator_type','2','代理商',1,'primary','','','000000',103,1,''), -('current_status','1','已分派',0,'primary','','','000000',103,1,''), -('current_status','2','处理中',1,'success','','','000000',103,1,''), -('current_status','3','已解决',2,'warning','','','000000',103,1,''), -('current_status','4','已完结',3,'success','','','000000',103,1,''), -('current_status','5','已取消',4,'primary','','','000000',103,1,''), -('customer_type','1','渠道用户',1,NULL,NULL,'Y','000000',103,1,NULL), -('customer_type','2','终端用户',2,NULL,NULL,'N','000000',103,1,NULL), -('detail_status','0','待处理',0,'info','','N','000000',103,1,NULL), -('detail_status','1','处理中',1,'primary','','N','000000',103,1,NULL), -('detail_status','2','成功',2,'success','','N','000000',103,1,NULL), -('detail_status','3','失败',3,'danger','','N','000000',103,1,NULL), -('distribution_status','0','未分成',0,NULL,NULL,'Y','000000',103,1,NULL), -('distribution_status','1','已分成',1,NULL,NULL,'N','000000',103,1,NULL), -('download_status','2','生成中',0,'primary','','N','000000',103,1,'结果文件生成中'), -('download_status','0','待生成',1,'default','','','000000',103,1,''), -('download_status','1','已生成',2,'default','','','000000',103,1,''), -('download_status','3','生成失败',3,'default','','','000000',103,1,''), -('effective_status','0','待生效',0,'default','','','000000',103,1,''), -('effective_status','1','生效中',1,'primary','','','000000',103,1,''), -('effective_status','2','已过期',2,'danger','','','000000',103,1,''), -('effective_status','3','已终止',3,NULL,NULL,'N','000000',103,1,NULL), -('effective_status','4','已作废',4,NULL,NULL,'N','000000',103,1,NULL), -('enabled','0','启用',0,NULL,NULL,'Y','000000',103,1,NULL), -('enabled','1','停用',1,NULL,NULL,'N','000000',103,1,NULL), -('export_scene','1','list_export',1,NULL,NULL,'Y','000000',103,1,NULL), -('export_scene','2','report_export',2,NULL,NULL,'N','000000',103,1,NULL), -('export_scene','3','settlement_export',3,NULL,NULL,'N','000000',103,1,NULL), -('fixed_shipping_type','1','固定运费',1,NULL,NULL,'Y','000000',103,1,NULL), -('fixed_shipping_type','2','手动填写运费',2,NULL,NULL,'N','000000',103,1,NULL), -('flow_package_enabled','1','启用',0,'success','','N','000000',103,1,''), -('flow_package_enabled','0','停用',1,'danger','','N','000000',103,1,''), -('global_enable','0','启用',0,'success','','','000000',103,1,''), -('global_enable','1','停用',1,'danger','','','000000',103,1,''), -('global_yes_or_no','0','是',0,'success','','','000000',103,1,''), -('global_yes_or_no','1','否',1,'danger','','','000000',103,1,''), -('income_expense_type','0','收入',0,'warning','','','000000',103,1,''), -('income_expense_type','1','支出',1,'primary','','','000000',103,1,''), -('is_need_commission','0','分佣',0,'primary','','','000000',103,1,''), -('is_need_commission','1','不分佣',1,'primary','','','000000',103,1,''), -('is_recall','0','未撤回',0,'primary','','','000000',103,1,''), -('is_recall','1','已撤回',1,'danger','','','000000',103,1,''), -('is_show','1','显示',0,NULL,NULL,'Y','000000',103,1,NULL), -('is_show','0','不显示',1,NULL,NULL,'N','000000',103,1,NULL), -('message_type','1','系统通知',0,'primary','','','000000',103,1,''), -('message_type','2','活动通知',1,'primary','','','000000',103,1,''), -('message_type','3','订单通知',2,'primary','','','000000',103,1,''), -('message_type','4','账户通知',3,'primary','','','000000',103,1,''), -('method','1','POST',0,'primary','','','000000',103,1,''), -('method','2','PUT',1,'primary','','','000000',103,1,''), -('method','3','DELETE',2,'primary','','','000000',103,1,''), -('method','4','GET',3,'primary','','','000000',103,1,''), -('operation_type','0','创建',0,'primary','','','000000',103,1,''), -('operation_type','1','分派',1,'primary','','','000000',103,1,''), -('operation_type','2','处理',2,'primary','','','000000',103,1,''), -('operation_type','3','完成',3,'primary','','','000000',103,1,''), -('operation_type','4','关单',4,'primary','','','000000',103,1,''), -('operation_type','5','取消',5,'primary','','','000000',103,1,''), -('operators','1','移动',1,'','','','000000',103,1,''), -('operators','2','联通',2,'','','','000000',103,1,''), -('operators','3','电信',3,'','','','000000',103,1,''), -('order_status','0','待确定,待支付',0,NULL,NULL,'Y','000000',103,1,NULL), -('order_status','1','已确定,待发货',1,NULL,NULL,'N','000000',103,1,NULL), -('order_status','2','处理中,已发货',2,NULL,NULL,'N','000000',103,1,NULL), -('order_status','3','已取消',3,NULL,NULL,'N','000000',103,1,NULL), -('order_status','4','无效',4,NULL,NULL,'N','000000',103,1,NULL), -('order_status','5','已完成',5,NULL,NULL,'N','000000',103,1,NULL), -('order_type','1','卡订购',1,'primary','','','000000',103,1,''), -('order_type','2','卡续费',2,'primary','','','000000',103,1,''), -('order_type','3','卡变更',3,'primary','','','000000',103,1,''), -('oss_access_policy','0','私有',1,'orange','','','000000',103,1,''), -('oss_access_policy','1','公开',2,'primary','','','000000',103,1,''), -('oss_access_policy','2','自定义',3,'','','','000000',103,1,''), -('package_codes','400','池套餐001',1,'default','','','000000',103,1,''), -('package_codes','["dx-300m-3y"]','池套餐002',2,'default','','','000000',103,1,''), -('package_type','101','单卡流量套餐',1,'','','','000000',103,1,''), -('package_type','102','池卡流量套餐',2,'','','','000000',103,1,''), -('package_type','103','单卡流量加油包',3,'','','','000000',103,1,''), -('package_type','104','池卡流量加油包',4,'','','','000000',103,1,''), -('package_type','201','单卡短信套餐',5,'','','','000000',103,1,''), -('package_type','203','单卡短信加油包',6,'','','','000000',103,1,''), -('package_type','301','单卡语音套餐',7,'','','','000000',103,1,''), -('package_type','303','单卡语音加油包',8,'','','','000000',103,1,''), -('package_type','401','单卡国漫套餐',8,'','','','000000',103,1,''), -('package_type','403','单卡国漫加油包',9,'','','','000000',103,1,''), -('pay_mode','0','一次性购买',0,NULL,NULL,'Y','000000',103,1,NULL), -('pay_mode','1','包年包月',1,NULL,NULL,'N','000000',103,1,NULL), -('pay_mode','2','按量付费',2,NULL,NULL,'N','000000',103,1,NULL), -('pay_status','0','未支付',0,NULL,NULL,'Y','000000',103,1,NULL), -('pay_status','1','支付中',1,NULL,NULL,'N','000000',103,1,NULL), -('pay_status','2','已支付',2,NULL,NULL,'N','000000',103,1,NULL), -('pay_status','3','退款中',3,NULL,NULL,'N','000000',103,1,NULL), -('pay_status','4','部分退款',4,NULL,NULL,'N','000000',103,1,NULL), -('pay_status','5','已退款',5,NULL,NULL,'N','000000',103,1,NULL), -('pay_type','1','在线支付',1,'primary','','','000000',103,1,''), -('pay_type','2','货到付款',2,'primary','','','000000',103,1,''), -('pay_type','3','线下支付',3,'primary','','','000000',103,1,''), -('pool_package_code','100','套餐100',1,'default','','','000000',103,1,''), -('pool_package_code','400','套餐400',1,'default','','','000000',103,1,''), -('process_status','0','待处理',0,NULL,NULL,'Y','000000',103,1,NULL), -('process_status','1','处理汇总',1,NULL,NULL,'N','000000',103,1,NULL), -('process_status','2','成功',2,NULL,NULL,'N','000000',103,1,NULL), -('process_status','3','失败',3,NULL,NULL,'N','000000',103,1,NULL), -('product_status','0','下架',0,NULL,NULL,'N','000000',103,1,NULL), -('product_status','1','上架',1,NULL,NULL,'Y','000000',103,1,NULL), -('product_type','1','卡',1,NULL,NULL,'Y','000000',103,1,NULL), -('product_type','2','模组',2,NULL,NULL,'N','000000',103,1,NULL), -('product_type','3','设备',3,NULL,NULL,'N','000000',103,1,NULL), -('product_type','4','普通商品',4,NULL,NULL,'N','000000',103,1,NULL), -('product_type','5','虚拟商品',5,NULL,NULL,'N','000000',103,1,NULL), -('product_type','6','卡密商品',6,NULL,NULL,'N','000000',103,1,NULL), -('product_type','7','付费内容',7,NULL,NULL,'N','000000',103,1,NULL), -('repayment_method','0','余额',0,NULL,NULL,'Y','000000',103,1,NULL), -('repayment_method','1','银行卡',1,NULL,NULL,'N','000000',103,1,NULL), -('repayment_method','2','支付宝',2,NULL,NULL,'N','000000',103,1,NULL), -('repayment_method','3','微信',3,NULL,NULL,'N','000000',103,1,NULL), -('resource_export_scene','1','卡入库结果',0,'primary','','N','000000',103,1,'Excel 批量卡入库结果文件'), -('resource_export_scene','2','卡出库结果',0,'primary','','N','000000',103,1,'Excel 批量卡出库结果文件(预留)'), -('resource_export_scene','3','卡划拨结果',0,'primary','','N','000000',103,1,'Excel 批量卡划拨结果文件(预留)'), -('resource_type','1','Card',0,'primary','','N','000000',103,1,'批量结果 Excel 文件'), -('resource_type','2','Customer',2,NULL,NULL,'N','000000',103,1,NULL), -('resource_type','3','Package',3,NULL,NULL,'N','000000',103,1,NULL), -('resource_type','4','recharge_record',4,NULL,NULL,'N','000000',103,1,NULL), -('resource_type','5','profit_record',5,NULL,NULL,'N','000000',103,1,NULL), -('resource_type','6','settlement_report',6,NULL,NULL,'N','000000',103,1,NULL), -('return_status','0','未退款',0,NULL,NULL,'Y','000000',103,1,NULL), -('return_status','1','待审核',1,NULL,NULL,'N','000000',103,1,NULL), -('return_status','2','执行中',2,NULL,NULL,'N','000000',103,1,NULL), -('return_status','3','部分退货',3,NULL,NULL,'N','000000',103,1,NULL), -('return_status','4','退货成功',4,NULL,NULL,'N','000000',103,1,NULL), -('run_result','0','待运行',0,'info','','N','000000',103,1,NULL), -('run_result','1','运行中',1,'primary','','N','000000',103,1,NULL), -('run_result','2','成功',2,'success','','N','000000',103,1,NULL), -('run_result','3','失败',3,'danger','','N','000000',103,1,NULL), -('run_result','4','部分成功',4,'warning','','N','000000',103,1,NULL), -('send_user_type','1','代理商',0,'primary','','','000000',103,1,''), -('send_user_type','2','终端用户',1,'warning','','','000000',103,1,''), -('share_enabled','0','否',0,'danger','','','000000',103,1,''), -('share_enabled','1','是',1,'primary','','','000000',103,1,''), -('shipping_method','1','物流',1,NULL,NULL,'Y','000000',103,1,NULL), -('shipping_method','2','商家自提',2,NULL,NULL,'N','000000',103,1,NULL), -('shipping_method','3','无需配送',3,NULL,NULL,'N','000000',103,1,NULL), -('shipping_status','0','未发货',0,NULL,NULL,'Y','000000',103,1,NULL), -('shipping_status','1','已发货',1,NULL,NULL,'N','000000',103,1,NULL), -('shipping_status','2','已收货',2,NULL,NULL,'N','000000',103,1,NULL), -('shipping_status','4','退货',4,NULL,NULL,'N','000000',103,1,NULL), -('sim_card_inbound_import_status','failed','失败',0,'danger','','N','000000',103,1,'文件、校验或业务处理失败'), -('sim_card_inbound_import_status','success','成功',0,'success','','N','000000',103,1,'整批导入成功'), -('system_enabled_status','0','未启用',1,'warning','','','000000',103,1,''), -('system_enabled_status','1','启用',2,'primary','','','000000',103,1,''), -('sys_common_status','0','成功',1,'primary','','N','000000',103,1,'正常状态'), -('sys_common_status','1','失败',2,'danger','','N','000000',103,1,'停用状态'), -('sys_dept_type','0','部门',0,'','','','000000',103,1,''), -('sys_dept_type','1','公司',1,'green','','','000000',103,1,''), -('sys_device_type','android','安卓',0,'default','','N','000000',103,1,'安卓'), -('sys_device_type','ios','iOS',0,'default','','N','000000',103,1,'iOS'), -('sys_device_type','pc','PC',0,'default','','N','000000',103,1,'PC'), -('sys_device_type','xcx','小程序',0,'default','','N','000000',103,1,'小程序'), -('sys_gen_status','0','生成成功',1,'success','','','000000',103,1,''), -('sys_gen_status','1','未生成',2,'','','','000000',103,1,''), -('sys_gen_status','2','生成失败',3,'danger','','','000000',103,1,''), -('sys_grant_type','email','邮件认证',0,'default','el-check-tag','N','000000',103,1,'邮件认证'), -('sys_grant_type','password','密码认证',0,'default','el-check-tag','N','000000',103,1,'密码认证'), -('sys_grant_type','sms','短信认证',0,'default','el-check-tag','N','000000',103,1,'短信认证'), -('sys_grant_type','social','三方登录认证',0,'default','el-check-tag','N','000000',103,1,'三方登录认证'), -('sys_grant_type','xcx','小程序认证',0,'default','el-check-tag','N','000000',103,1,'小程序认证'), -('sys_job_concurrent','0','允许',1,'','','','000000',103,1,''), -('sys_job_concurrent','1','禁止',2,'','','','000000',103,1,''), -('sys_job_group','0','默认',1,'','','','000000',103,1,''), -('sys_job_group','1','系统',1,'','','','000000',103,1,''), -('sys_job_group','2','数据中心',2,'','','','000000',103,1,''), -('sys_job_group','3','预警',3,'','','','000000',103,1,''), -('sys_job_group','4','卡数据',4,'','','','000000',103,1,''), -('sys_job_group','5','财务',5,'','','','000000',103,1,''), -('sys_job_group','6','流量池',6,'','','','000000',103,1,''), -('sys_job_group','7','卡管控',7,'','','','000000',103,1,''), -('sys_job_group','8','套餐',8,'','','','000000',103,1,''), -('sys_job_group','9','测试',9,'','','','000000',103,1,''), -('sys_missfire_policy','1','多次执行',1,'','','','000000',103,1,''), -('sys_missfire_policy','2','执行一次',2,'','','','000000',103,1,''), -('sys_normal_disable','0','正常',1,'primary','','','000000',103,1,'正常状态'), -('sys_normal_disable','1','停用',2,'danger','','','000000',103,1,'停用状态'), -('sys_notice_status','0','正常',1,'primary','','Y','000000',103,1,'正常状态'), -('sys_notice_status','1','关闭',2,'danger','','N','000000',103,1,'关闭状态'), -('sys_notice_type','1','通知',1,'warning','','Y','000000',103,1,'通知'), -('sys_notice_type','2','公告',2,'success','','N','000000',103,1,'公告'), -('sys_oper_type','1','新增',1,'info','','N','000000',103,1,'新增操作'), -('sys_oper_type','2','修改',2,'info','','N','000000',103,1,'修改操作'), -('sys_oper_type','3','删除',3,'danger','','N','000000',103,1,'删除操作'), -('sys_oper_type','4','授权',4,'primary','','N','000000',103,1,'授权操作'), -('sys_oper_type','5','导出',5,'warning','','N','000000',103,1,'导出操作'), -('sys_oper_type','6','导入',6,'warning','','N','000000',103,1,'导入操作'), -('sys_oper_type','7','强退',7,'danger','','N','000000',103,1,'强退操作'), -('sys_oper_type','8','生成代码',8,'warning','','N','000000',103,1,'生成操作'), -('sys_oper_type','9','清空数据',9,'danger','','N','000000',103,1,'清空操作'), -('sys_oper_type','0','其他',99,'info','','N','000000',103,1,'其他操作'), -('sys_show_hide','0','显示',1,'primary','','Y','000000',103,1,'显示菜单'), -('sys_show_hide','1','隐藏',2,'danger','','N','000000',103,1,'隐藏菜单'), -('sys_status','0','正常',0,NULL,NULL,'Y','000000',103,1,NULL), -('sys_status','1','停用',1,NULL,NULL,'N','000000',103,1,NULL), -('sys_user_sex','0','男',1,'','','Y','000000',103,1,'性别男'), -('sys_user_sex','1','女',2,'','','N','000000',103,1,'性别女'), -('sys_user_sex','2','未知',3,'','','N','000000',103,1,'性别未知'), -('sys_yes_no','Y','是',1,'primary','','Y','000000',103,1,'系统默认是'), -('sys_yes_no','N','否',2,'danger','','N','000000',103,1,'系统默认否'), -('sys_yes_no_num','0','是',1,'primary','','','000000',103,1,''), -('sys_yes_no_num','1','否',2,'danger','','','000000',103,1,''), -('transaction_channel','1','支付宝',0,'primary','','','000000',103,1,''), -('transaction_channel','2','微信',1,'primary','','','000000',103,1,''), -('transaction_channel','3','余额',2,'primary','','','000000',103,1,''), -('transaction_status','0','待支付',0,'warning','','','000000',103,1,''), -('transaction_status','1','已支付',1,'primary','','','000000',103,1,''), -('transaction_status','2','已过期',2,'danger','','','000000',103,1,''), -('transaction_status','3','交易失败',3,'danger','','','000000',103,1,''), -('transaction_type','0','充值',0,'primary','','','000000',103,1,''), -('transaction_type','1','消费',1,'warning','','','000000',103,1,''), -('transaction_type','2','转可提现',2,'primary','','','000000',103,1,''), -('transaction_type','3','可提现转入',3,'primary','','','000000',103,1,''), -('transaction_type','4','人工调整',4,'primary','','','000000',103,1,''), -('t_agent_scope_type','0','所有客户',0,'primary','','','000000',103,1,''), -('t_agent_scope_type','1','指定客户',1,'primary','','','000000',103,1,''), -('t_batch_execution_mode','0','未知',0,'primary','','','000000',103,1,''), -('t_batch_execution_mode','1','单卡',10,'primary','','','000000',103,1,''), -('t_batch_execution_mode','2','批量',20,'primary','','','000000',103,1,''), -('t_batch_source_channel','console','控制台',10,'primary','','','000000',103,1,'控制台认证入口创建的批次'), -('t_batch_source_channel','mini_program','小程序',20,'primary','','','000000',103,1,'小程序及其 H5 用户端入口创建的批次'), -('t_batch_source_channel','api','API',30,'primary','','','000000',103,1,'开放 API 验签或认证入口创建的批次'), -('t_batch_source_channel','system','系统任务',40,'primary','','','000000',103,1,'独立调度或自动业务任务创建的批次'), -('t_batch_source_channel','legacy','历史未知',90,'primary','','','000000',103,1,'历史记录或无法确认真实来源的批次,不代表实际发起入口'), -('t_batch_source_type','0','批次选择',0,'primary','','','000000',103,1,''), -('t_batch_source_type','1','连号',1,'primary','','','000000',103,1,''), -('t_batch_source_type','2','批量输入',2,'primary','','','000000',103,1,''), -('t_batch_source_type','3','文件',3,'primary','','','000000',103,1,''), -('t_batch_source_type','4','定时任务',4,'primary','','','000000',103,1,''), -('t_billing_method','1','月',0,'primary','','','000000',103,1,''), -('t_billing_method','2','年',1,'primary','','','000000',103,1,''), -('t_boss_card_status','7','库存',1,'default','','','000000',103,1,''), -('t_boss_card_status','1','待激活',2,'warning','','','000000',103,1,''), -('t_boss_card_status','6','可测试',3,'info','','','000000',103,1,''), -('t_boss_card_status','2','已激活',4,'success','','','000000',103,1,''), -('t_boss_card_status','4','停机',5,'danger','','','000000',103,1,''), -('t_boss_card_status','8','预销户',6,'warning','','','000000',103,1,''), -('t_boss_card_status','9','已销户',7,'info','','','000000',103,1,''), -('t_boss_card_status','0','未知',99,'default','','','000000',103,1,''), -('t_cardInfo_dimension','1','使用流量',1,'default','','','000000',103,1,''), -('t_cardInfo_dimension','2','剩余流量',1,'default','','','000000',103,1,''), -('t_cardInfo_dimensionStatus','!=','!=',1,'default','','','000000',103,1,''), -('t_cardInfo_dimensionStatus','<','<',1,'default','','','000000',103,1,''), -('t_cardInfo_dimensionStatus','<=','<=',1,'default','','','000000',103,1,''), -('t_cardInfo_dimensionStatus','=','=',1,'default','','','000000',103,1,''), -('t_cardInfo_dimensionStatus','>','>',1,'default','','','000000',103,1,''), -('t_cardInfo_dimensionStatus','>=','>=',1,'default','','','000000',103,1,''), -('t_cardInfo_selectCondition','iccid','ICCID',1,'default','','','000000',103,1,''), -('t_cardInfo_selectCondition','imei','IMEI',1,'default','','','000000',103,1,''), -('t_cardInfo_selectCondition','imsi','IMSI',1,'default','','','000000',103,1,''), -('t_cardInfo_selectCondition','msisdn','MSISDN',1,'default','','','000000',103,1,''), -('t_cardInfo_sortType','0','升序',1,'default','','','000000',103,1,''), -('t_cardInfo_sortType','1','降序',1,'default','','','000000',103,1,''), -('t_cardInfo_sortValue','1','iccid',1,'default','','','000000',103,1,''), -('t_cardInfo_sortValue','2','msisdn',1,'default','','','000000',103,1,''), -('t_cardInfo_sortValue','3','imsi',1,'default','','','000000',103,1,''), -('t_cardInfo_sortValue','4','流量用量',1,'default','','','000000',103,1,''), -('t_cardInfo_sortValue','5','激活日期',1,'default','','','000000',103,1,''), -('t_cardInfo_sortValue','6','流量到期日期',1,'default','','','000000',103,1,''), -('t_cardInfo_sortValue','7','状态同步日期',1,'default','','','000000',103,1,''), -('t_cardInfo_sortValue','8','出库时间',1,'default','','','000000',103,1,''), -('t_cardInfo_timeType','0','开卡时间',1,'default','','','000000',103,1,''), -('t_cardInfo_timeType','1','激活时间',1,'default','','','000000',103,1,''), -('t_cardInfo_timeType','2','入库时间',1,'default','','','000000',103,1,''), -('t_cardInfo_timeType','3','出库时间',3,'default','','','000000',103,1,''), -('t_cardInfo_timeType','4','到期时间',4,'default','','','000000',103,1,''), -('t_cardInfo_timeType','5','创建时间',5,'default','','','000000',103,1,''), -('t_cardInfo_timeType','6','流量同步时间',6,'default','','','000000',103,1,''), -('t_cardInfo_timeType','7','状态同步时间',7,'default','','','000000',103,1,''), -('t_card_type','1','通用插拔 SIM 卡',0,'primary','','','000000',103,1,''), -('t_card_type','2','贴片卡 5×6mm',1,'primary','','','000000',103,1,''), -('t_card_type','3','贴片卡 2×2mm',2,'primary','','','000000',103,1,''), -('t_card_type','4','消费级插拔物联卡',3,'primary','','','000000',103,1,''), -('t_card_type','5','工业级插拔物联卡',4,'primary','','','000000',103,1,''), -('t_card_type','6','消费级贴片物联卡',5,'primary','','','000000',103,1,''), -('t_card_type','7','工业级贴片物联卡',6,'primary','','','000000',103,1,''), -('t_channels_status','0','启用',0,'primary','','','000000',103,1,''), -('t_channels_status','1','停用',1,'danger','','','000000',103,1,''), -('t_channel_docking_status','1','接口申请中',1,'default','','','000000',103,1,''), -('t_channel_docking_status','2','不需要对接',2,'danger','','','000000',103,1,''), -('t_channel_docking_status','6','对接中',3,'warning','','','000000',103,1,''), -('t_channel_docking_status','3','测试中',4,'primary','','','000000',103,1,''), -('t_channel_docking_status','4','已对接',5,'success','','','000000',103,1,''), -('t_channel_docking_status','5','接口订阅不全',6,'warning','','','000000',103,1,''), -('t_channel_sync_enabled','0','是',0,'success','','','000000',103,1,''), -('t_channel_sync_enabled','1','否',1,'danger','','','000000',103,1,''), -('t_net_model','1','3G',1,'default','','','000000',103,1,''), -('t_net_model','10','移动4G',1,'default','','','000000',103,1,''), -('t_net_model','11','联通NB',1,'default','','','000000',103,1,''), -('t_net_model','12','联通4G',1,'default','','','000000',103,1,''), -('t_net_model','13','电信4G',1,'default','','','000000',103,1,''), -('t_net_model','14','RedCap',1,'default','','','000000',103,1,''), -('t_net_model','2','2G',1,'default','','','000000',103,1,''), -('t_net_model','3','4G',1,'default','','','000000',103,1,''), -('t_net_model','4','5G',1,'default','','','000000',103,1,''), -('t_net_model','5','NB-IOT',1,'default','','','000000',103,1,''), -('t_net_model','6','5G-SA',1,'default','','','000000',103,1,''), -('t_net_model','7','5G-NSA',1,'default','','','000000',103,1,''), -('t_net_model','8','2G/3G',1,'default','','','000000',103,1,''), -('t_net_model','9','电信NB',1,'default','','','000000',103,1,''), -('t_operators','1','移动',0,'primary','','','000000',103,1,''), -('t_operators','2','联通',1,'primary','','','000000',103,1,''), -('t_operators','3','电信',2,'primary','','','000000',103,1,''), -('t_package_price_source','system','系统级',0,'primary','','','000000',103,1,''), -('t_package_price_source','agentDefault','本级默认',1,'primary','','','000000',103,1,''), -('t_package_price_source','target','下级专属',3,'primary','','','000000',103,1,''), -('t_package_status','0','无套餐',0,'primary','','','000000',103,1,''), -('t_package_status','1','待生效',1,'primary','','','000000',103,1,''), -('t_package_status','2','生效中',2,'primary','','','000000',103,1,''), -('t_package_status','3','已过期',3,'primary','','','000000',103,1,''), -('t_package_type','101','卡套餐',101,NULL,NULL,'N','000000',103,1,'卡套餐'), -('t_package_type','102','池套餐',102,NULL,NULL,'N','000000',103,1,'池套餐'), -('t_package_type','103','单卡加油包',103,NULL,NULL,'N','000000',103,1,'单卡加油包'), -('t_package_type','104','池卡加油包',104,NULL,NULL,'N','000000',103,1,'池卡加油包'), -('t_pool_status','0','正常',0,'primary','','','000000',103,1,''), -('t_pool_status','1','停用',1,'primary','','','000000',103,1,''), -('t_pool_status','2','锁定',2,'primary','','','000000',103,1,''), -('t_sim_flow_package_info','101','卡套餐',1,'','','','000000',103,1,''), -('t_sim_flow_package_info','102','池套餐',2,'','','','000000',103,1,''), -('t_sim_flow_package_info','103','单卡加油包',3,'','','','000000',103,1,''), -('t_sim_flow_package_info','104','池卡加油包',4,'','','','000000',103,1,''), -('t_warn_auto_action','3','是',1,'default','','','000000',103,1,''), -('t_warn_auto_action','0','否',2,'default','','','000000',103,1,''), -('t_warn_enabled','1','启用',1,'default','','','000000',103,1,''), -('t_warn_enabled','0','停用',2,'default','','','000000',103,1,''), -('t_warn_method','3','站内提醒',1,'default','','','000000',103,1,''), -('t_warn_method','1','邮箱',2,'default','','','000000',103,1,''), -('t_warn_method','0','短信',3,'default','','','000000',103,1,''), -('t_warn_unit','1','流量阈值(MB)',1,'default','','','000000',103,1,''), -('t_warn_unit','2','流量池百分比',2,'default','','','000000',103,1,''), -('warn_methods','0','短信',0,NULL,NULL,'Y','000000',103,1,NULL), -('warn_methods','1','邮箱',1,NULL,NULL,'N','000000',103,1,NULL), -('warn_methods','2','电话',2,NULL,NULL,'N','000000',103,1,NULL), -('warn_methods','3','平台消息',3,NULL,NULL,'N','000000',103,1,NULL), -('withdraw_amount_status','0','正常',0,NULL,NULL,'Y','000000',103,1,NULL), -('withdraw_amount_status','1','冻结',1,NULL,NULL,'N','000000',103,1,NULL), -('wo_type','0','卡',6,'primary','','','000000',103,1,''), -('wo_type','1','模组',7,'primary','','','000000',103,1,''), -('wo_type','2','设备',8,'primary','','','000000',103,1,''), -('wo_type','3','订单',9,'primary','','','000000',103,1,''), -('wo_type','4','余额',10,'primary','','','000000',103,1,''), -('wo_type','5','提现',11,'primary','','','000000',103,1,''), -('yesno_enum','1','是',0,NULL,NULL,'Y','000000',103,1,NULL), -('yesno_enum','0','否',1,NULL,NULL,'N','000000',103,1,NULL); diff --git a/schema/08-seed-mock-channel.sql b/schema/08-seed-mock-channel.sql deleted file mode 100644 index db2280a..0000000 --- a/schema/08-seed-mock-channel.sql +++ /dev/null @@ -1,52 +0,0 @@ --- ============================================ --- 演示环境种子数据:Mock 通道(2026-10-27) --- 来源:旧演示机 .160 的 t_sim_channels(该库唯一一条通道记录) --- --- 为什么必须有: --- 种子库 01-schema.sql 只含 t_sim_channels 的建表语句、没有数据, --- 但 t_sim_card_info(100 张) 与 t_sim_card_stock(50100 张) 的 chan_key --- 全部指向 channel_yd_mock。通道缺失会让卡片管理页的通道列、按通道筛选、 --- 以及开卡/停复机等依赖通道的操作全部异常。 --- --- 上游走 Mock(http://onelink-mock:8080/),不消耗真实运营商流量。 --- --- 幂等:以 (tenant_id, chan_key) 唯一键做 ON DUPLICATE KEY UPDATE。 --- 执行顺序:08(在 01-07 之后) --- ============================================ - -SET NAMES utf8mb4; -USE `db_iotlcm`; - -INSERT INTO `t_sim_channels` ( - `id`,`temp_key`,`chan_key`,`chan_name`,`chan_config`,`chan_status`,`share_enabled`, - `chan_alias`,`region_code`,`app_key`,`app_secret`,`access_token`, - `access_token_created`,`access_token_expire`,`refresh_token`, - `login_user`,`login_password`,`login_url`,`remark`,`tenant_id`, - `created_dept`,`created_by`,`created_at`,`updated_by`,`updated_at`, - `operator`,`is_normal`,`docking_status`,`sync_enabled`, - `card_info_count`,`stock_card_count`,`cancellation_card_count` -) VALUES ( - 34,'sim_yd_mock_v5','channel_yd_mock','移动模拟通道','{}',0,0, - '中国移动00',NULL,'100059999270000006','password123',NULL, - NULL,NULL,'', - NULL,NULL,'http://onelink-mock:8080/',NULL,'000000', - 1,1,'2026-10-19 15:35:03',NULL,NOW(), - 1,1,NULL,0, - 100,50100,0 -) -ON DUPLICATE KEY UPDATE - `temp_key` = VALUES(`temp_key`), - `chan_name` = VALUES(`chan_name`), - `chan_config` = VALUES(`chan_config`), - `chan_status` = VALUES(`chan_status`), - `chan_alias` = VALUES(`chan_alias`), - `app_key` = VALUES(`app_key`), - `app_secret` = VALUES(`app_secret`), - `login_url` = VALUES(`login_url`), - `operator` = VALUES(`operator`), - `is_normal` = VALUES(`is_normal`), - `sync_enabled` = VALUES(`sync_enabled`), - `updated_at` = VALUES(`updated_at`), - `card_info_count` = VALUES(`card_info_count`), - `stock_card_count` = VALUES(`stock_card_count`), - `cancellation_card_count` = VALUES(`cancellation_card_count`); diff --git a/schema/09-seed-role-chain.sql b/schema/09-seed-role-chain.sql deleted file mode 100644 index 1b2997f..0000000 --- a/schema/09-seed-role-chain.sql +++ /dev/null @@ -1,77 +0,0 @@ --- ============================================ --- 演示环境:模板参数与生产旧版本的下发标记(2026-10-27) --- --- 版本依据:生产环境 当前运行 admin 镜像 db11766c..., --- 二进制 CommitID=cad19df988a0;演示环境镜像及程序 SHA256 与生产一致。 --- 不以浮动 tag、master HEAD 或历史发布记录代替实际运行版本。 --- --- cad19df 的 passRoleByDept(agent_dept.go:496): --- 仅“当前机构 == 模板机构”走平台模板;其他机构仍查本级唯一 --- status=0 / is_pass=1 角色,即使已经配置平台模板也是如此。 --- 因此只配置 agent.role.template.role_id 不能解决代理建下级报错。 --- --- 本文件: --- 1. 修正现有 role 2 的模板属性,并写入唯一的演示模板参数。 --- 2. 若测试库已有 dept 172 → role 82,则为该现有角色设置 is_pass=1。 --- 不创建角色、机构或账号,不改菜单和 sys_dept.dept_role。 --- 全新库没有 role 82 时跳过;它是测试期间创建的一级代理角色。 --- --- 限制:cad19df 的 createEnterpriseRole 仍将新角色 IsPass 写为 0。 --- 新建机构继续创建下级前,仍需配置本机构唯一的下发角色; --- 此 SQL 不是多级下发代码修复,不代表新建三级及以后均已通过验收。 --- 不自动补建业务方故意删除的 dept 2/4/5/6/7 角色。 --- --- sys_config 无 (tenant_id, config_key) 唯一索引,故先删后插,避免重复。 --- 种子 SQL 仍处于实测阶段,业务基准向预演看齐;运行代码遵从生产版本。 --- 执行顺序:01-08 之后;可重复执行。 --- ============================================ - -SET NAMES utf8mb4; -USE `db_iotlcm`; -START TRANSACTION; - --- 模板校验同时要求:启用、非超管、is_pass=1、data_scope=4、机构有效, --- created_dept 为 0/NULL 或等于 dept_id,且菜单不能使用全部/自定义范围。 -UPDATE `sys_role` - SET `created_dept` = `dept_id`, `status` = '0', `is_pass` = 1, `data_scope` = '4' - WHERE `tenant_id` = '000000' AND `role_id` = 2 AND `dept_id` = 1 - AND `deleted_at` IS NULL; - -DELETE FROM `sys_config` - WHERE `tenant_id` = '000000' AND `config_key` = 'agent.role.template.role_id'; -INSERT INTO `sys_config` - (`tenant_id`,`config_name`,`config_key`,`config_value`,`config_type`,`created_dept`,`created_by`,`remark`) -VALUES - ('000000','代理角色下发-平台模板角色ID','agent.role.template.role_id','2','Y',1,1, - '演示模板:dept 1 的现有 role 2;生产 cad19df 中代理机构仍需本级唯一 is_pass=1 角色'); - --- 只处理已存在、已绑定的演示一级代理角色;不恢复或新建已删除的角色。 -UPDATE `sys_role` r -JOIN `sys_dept` d ON d.`tenant_id` = r.`tenant_id` - AND d.`dept_id` = r.`dept_id` AND d.`dept_role` = r.`role_id` - SET r.`is_pass` = 1 - WHERE r.`tenant_id` = '000000' AND r.`role_id` = 82 AND r.`dept_id` = 172 - AND r.`deleted_at` IS NULL AND r.`status` = '0' - AND d.`deleted_at` IS NULL AND d.`status` = '0' - AND 0 = ( - SELECT other_roles.n FROM ( - SELECT COUNT(*) AS n FROM `sys_role` - WHERE `tenant_id` = '000000' AND `dept_id` = 172 AND `role_id` <> 82 - AND `is_pass` = 1 AND `deleted_at` IS NULL - ) other_roles - ); -COMMIT; - --- 自检输出仅反映配置条件,不能代替页面创建下级的端到端验收。 -SELECT COUNT(*) AS template_parameter_rows - FROM `sys_config` - WHERE `tenant_id` = '000000' AND `config_key` = 'agent.role.template.role_id'; -SELECT `role_id`, `dept_id`, `status`, `is_pass`, `data_scope`, `created_dept` - FROM `sys_role` WHERE `tenant_id` = '000000' AND `role_id` IN (2,82) - AND `deleted_at` IS NULL; -SELECT d.`dept_id`, d.`dept_role`, COUNT(r.`role_id`) AS enabled_distribution_roles - FROM `sys_dept` d - LEFT JOIN `sys_role` r ON r.`tenant_id` = d.`tenant_id` AND r.`dept_id` = d.`dept_id` - AND r.`status` = '0' AND r.`is_pass` = 1 AND r.`deleted_at` IS NULL - WHERE d.`tenant_id` = '000000' AND d.`dept_id` = 172 AND d.`deleted_at` IS NULL - GROUP BY d.`dept_id`, d.`dept_role`; diff --git a/schema/10-seed-jobs.sql b/schema/10-seed-jobs.sql deleted file mode 100644 index 7356dca..0000000 --- a/schema/10-seed-jobs.sql +++ /dev/null @@ -1,73 +0,0 @@ --- ============================================ --- 演示环境种子数据:定时任务(2026-10-27) --- --- 基准:生产 生产环境 的 sys_job 当前配置(可直连核对)。 --- 预演环境本机不可达(内网环境 / 内网环境 均 No route to host), --- 故以生产实际值为准;若业务要求以预演为基准,需提供预演库访问方式后再比对。 --- --- 演示原状(15 条可见)与生产的差异: --- 1) 缺 25 / 41 / 42 三个队列全量同步任务 --- 2) job_group 除 9 外全为 0(默认),生产已按 --- sys_job_group 字典分配到 卡数据4 / 预警3 / 财务5 / 流量池6 / 卡管控7 / 套餐8 / 测试9 --- 3) 9/10/11/12 的 cron 是错峰前的旧值,生产已改为 --- 0 0 2 * * ? / 0 0 2 * * ? / 0 40 8 1 * ? / 0 25 6 * * ? --- 4) 任务名是旧版带前缀写法,生产已重命名 --- 5) job 17 的 cron 含反引号 `0 */15 * * * ?`,不是合法表达式 --- 6) job_params 生产为空,演示残留 2026-07 / 117 等历史参数 --- --- 本文件:清掉 1-8 测试垃圾行,按生产当前配置重建 9-25/41/42 共 19 条。 --- 字段(名称/分组/调用目标/cron/misfire/concurrent/remark)与生产逐条一致。 --- --- 运行状态与生产不同(有意为之): --- 生产启用 11/12/25/41/42 五个同步任务;演示环境全部置 status=1(停用)。 --- 演示上游走 Mock、库内 5 万余张卡,若自动跑全量同步会持续打 mock 服务并占满 --- 这台 2vCPU/8GB 演示机。若演示确需展示任务执行,请只临时启用单个任务 --- (建议 13 测试-全量预警扫描),用完再停用。 --- --- 幂等:先删后插,可重复执行。执行顺序:09 之后。 --- ============================================ - -SET NAMES utf8mb4; -USE `db_iotlcm`; - --- 1-8 为 RuoYi 上游演示垃圾数据(生产亦为软删除),演示环境直接物理删除。 -DELETE FROM `sys_job` WHERE `job_id` BETWEEN 1 AND 8; - --- 9-25/41/42 按生产当前配置整体重建(含 job 14:生产可见,演示此前被软删除)。 -DELETE FROM `sys_job` WHERE `job_id` BETWEEN 9 AND 42; - -INSERT INTO `sys_job` - (`job_id`, `job_name`, `job_params`, `job_group`, `invoke_target`, `cron_expression`, - `misfire_policy`, `concurrent`, `status`, `remark`, - `created_dept`, `created_by`, `created_at`, `updated_by`, `updated_at`, `deleted_by`, `deleted_at`) -VALUES -(9, '同步卡用量', '', 1, 'syns_usage', '0 0 2 * * ?', 1, 0, '1', '', 100, 1, '2026-06-04 21:12:34', 1, '2026-10-27 00:00:00', NULL, NULL), -(10, '同步卡运营商状态', '', 0, 'syns_sim_status', '0 0 2 * * ?', 1, 0, '1', '', 100, 1, '2026-06-04 21:12:34', 1, '2026-10-27 00:00:00', NULL, NULL), -(11, '月用量记录时序', '', 4, 'sync_traffic_usage_monthly', '0 40 8 1 * ?', 1, 0, '1', '', 100, 1, '2026-06-21 11:53:03', 1, '2026-10-27 00:00:00', NULL, NULL), -(12, '日用量记录时序', '', 4, 'sync_traffic_usage_daily', '0 25 6 * * ?', 1, 0, '1', '', 100, 1, '2026-06-22 00:11:11', 1, '2026-10-27 00:00:00', NULL, NULL), -(13, '全量预警扫描', '', 9, 'scan_sim_warning', '30 0 1 * * *', 1, 1, '1', '单卡,流量池', 100, 1, '2026-07-24 10:18:00', 1, '2026-10-27 00:00:00', NULL, NULL), -(14, ' 预警 - SIM卡到期扫描','', 0, 'notify_package_expiry', '0 0 9 * * ?', 1, 1, '1', '', 100, 1, '2026-07-27 14:35:16', 1, '2026-10-27 00:00:00', NULL, NULL), -(15, '流量池用量扫描', '', 3, 'check_flow_pool_warning', '0 */15 * * * ?', 1, 1, '1', '', 100, 1, '2026-07-27 14:37:34', 1, '2026-10-27 00:00:00', NULL, NULL), -(16, 'SIM卡用量扫描', '', 3, 'scan_sim_traffic_warning', '0 */15 * * * ?', 1, 1, '1', '', 100, 1, '2026-07-27 14:37:59', 1, '2026-10-27 00:00:00', NULL, NULL), -(17, '达量断网扫描', '', 7, 'check_traffic_cutoff', '0 */15 * * * ?', 1, 1, '1', '', 100, 1, '2026-07-27 15:37:08', 1, '2026-10-27 00:00:00', NULL, NULL), -(18, '生命周期流转', '', 8, 'sync_package_lifecycle', '0 */15 * * * ?', 1, 1, '1', '', 100, 1, '2026-07-28 16:00:00', 1, '2026-10-27 00:00:00', NULL, NULL), -(19, '可提现账户月账单', '', 5, 'settle_profit_account_month_bill','0 0 4 2 * ?', 1, 0, '1', '', 100, 1, '2026-07-28 16:09:51', 1, '2026-10-27 00:00:00', NULL, NULL), -(20, '消费账户月账单', '', 5, 'settle_consume_account_month_bill','0 0 4 2 * ?', 1, 0, '1', '', 100, 1, '2026-07-28 16:20:25', 1, '2026-10-27 00:00:00', NULL, NULL), -(21, '分润出账', '', 5, 'settle_commission', '0 0 4 * * ?', 1, 0, '1', '', 100, 1, '2026-07-28 16:48:19', 1, '2026-10-27 00:00:00', NULL, NULL), -(22, '卡信息数据同步流量池', '', 6, 'sync_flow_pool_card', '0 0 4 * * ?', 1, 0, '1', '', 100, 1, '2026-07-31 16:16:32', 1, '2026-10-27 00:00:00', NULL, NULL), -(23, '到期预警全量预加载', '', 3, 'PreloadSimExpireWarning', '0 30 23 L * ?', 1, 1, '1', '每月底扫描下下个月到期卡,写入 Redis 候选池', 100, 1, '2026-07-31 17:53:44', 1, '2026-10-27 00:00:00', NULL, NULL), -(24, '定时到期预警扫描', '', 3, 'ScanSimExpireCandidateWarning', '0 0 9 * * ?', 1, 1, '1', '', 100, 1, '2026-07-31 17:54:13', 1, '2026-10-27 00:00:00', NULL, NULL), -(25, '队列-用量同步', '', 4, 'start_traffic_usage_full_sync', '0 30 0 * * ?', 1, 1, '1', '', 100, 1, '2026-10-23 00:00:00', 1, '2026-10-27 00:00:00', NULL, NULL), -(41, '队列-状态同步', '', 4, 'syns_sim_status_queue', '0 30 18 * * ?', 1, 0, '1', '', 100, 1, '2026-10-23 00:00:00', 1, '2026-10-27 00:00:00', NULL, NULL), -(42, '队列-IMEI 同步', '', 4, 'syns_imei_queue', '0 10 20 1/3 * ?', 1, 0, '1', '', 100, 1, '2026-10-23 00:00:00', 1, '2026-10-27 00:00:00', NULL, NULL); - --- 自检:应与生产一致(可见 19 条、全部停用、分组分布如下) -SELECT COUNT(*) AS visible_total, - SUM(`status` = 0) AS enabled_total, - SUM(`job_group` = 4) AS group_kadata, - SUM(`job_group` = 3) AS group_warning, - SUM(`job_group` = 5) AS group_finance - FROM `sys_job` WHERE `deleted_at` IS NULL; - -SELECT `job_id`, `job_name`, `job_group`, `cron_expression`, `status` - FROM `sys_job` WHERE `deleted_at` IS NULL ORDER BY `job_id`; diff --git a/schema/11-seed-menu-align-prod.sql b/schema/11-seed-menu-align-prod.sql deleted file mode 100644 index a9253a8..0000000 --- a/schema/11-seed-menu-align-prod.sql +++ /dev/null @@ -1,72 +0,0 @@ --- ============================================ --- 演示环境种子数据:sys_menu 与生产全量对齐(2026-10-27) --- --- 背景:演示库 sys_menu 420 条,生产 459 条,缺 27 条增量(生产有、演示无), --- 反向差异 0 条(演示无多余菜单)。缺的包括: --- · 达量断网 4 个按钮权限(excel:template / excel:submit / range:submit / input:submit) --- —— 这是"达量断网页面按钮点了 403 / 看不到功能"的直接原因 --- · 全量同步页(fullSyncRuns:view/failures/start/replay/replay:view)5 条 --- · 订单模块(订单目录 + 管理员订单 + 销售订单列表)3 条 --- · 文档中心(含 Web 手册 / OpenAPI 文档)3 条 --- · 财务/流量池/通道/销户等按钮权限 12 条 --- --- 方法:以 perms 为语义键做比对(perms 为空时用 menu_type+menu_name), --- 生产 ID 与演示 ID 体系不同,故新建菜单占用演示 421-447 段, --- 父级按语义递归解析到演示现有菜单(0 个悬空)。 --- --- 结果:演示 447 条;与生产逐条比对 —— 缺 0 条、多余 0 条。 --- 数量差 12 = 演示独有的 5 条租户按钮(system:tenant:*) --- + 生产侧 7 条同 perms 的重复菜单(语义键去重后合并) --- --- 角色绑定:演示仅 5 个角色,新菜单绑到 2/82/88(原有的全量绑定角色), --- 与它们各自 190 条的绑定模式一致;role 3/4 是限定角色,不绑。 --- --- 前置知识:超管(role 1) 的菜单可见性走代码分支直接返回全部 status=0 菜单; --- 但接口鉴权的 accessCodeList 仍需 sys_role_menu 里有该菜单, --- 否则 normalizeMenuAccessCodes 拿不到 perms → 按钮/功能 403。 --- --- 幂等:先删后插,可重复执行。执行顺序:10 之后(11-)。 --- ============================================ - -SET NAMES utf8mb4; -USE `db_iotlcm`; - -DELETE FROM `sys_menu` WHERE `menu_id` BETWEEN 421 AND 447; -INSERT INTO `sys_menu` (`menu_id`,`menu_name`,`parent_id`,`order_num`,`path`,`component`,`is_frame`,`is_cache`,`menu_type`,`visible`,`status`,`perms`,`icon`,`created_dept`,`created_by`,`created_at`,`remark`) VALUES -(421,'全量同步',2,7,'full-sync','monitor/full-sync/index','1','0','C','0','0','cpm:iot:fullSyncRuns:view','lucide:refresh-cw',100,1,NOW(),'全量同步结果与手动启动'), -(422,'查看失败明细',421,1,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:failures','#',100,1,NOW(),NULL), -(423,'手动启动同步',421,2,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:start','#',100,1,NOW(),NULL), -(424,'重投失败卡',421,3,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:replay','#',100,1,NOW(),NULL), -(425,'查看重投状态',421,4,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:replay:view','#',100,1,NOW(),NULL), -(426,'订单',196,10,'TOrder',NULL,'1','0','M','0','0',NULL,NULL,100,1,NOW(),NULL), -(427,'管理员订单',426,11,'indexTwo','iotlcm/tOrder/indexTwo','1','0','C','0','0',NULL,'ant-design:appstore-outlined',100,1,NOW(),NULL), -(428,'获取财务审核记录表列表',354,10,'',NULL,'1','0','F','0','0','gen:tFinanceAuditRecord:list',NULL,100,1,NOW(),NULL), -(429,'获取财务申请表列表',349,10,'',NULL,'1','0','F','0','0','gen:tFinanceApply:list',NULL,100,1,NOW(),NULL), -(430,'获取分层分润概览',334,10,'',NULL,'1','0','F','0','0','common:tFinCommissionDetail:getCommissionOverview',NULL,100,1,NOW(),NULL), -(431,'获取SIM流量池套餐配置表列表',411,10,'',NULL,'1','0','F','0','0','iot:tFlowPackageConfig:list',NULL,100,1,NOW(),NULL), -(432,'敏感定价查看',135,15,'',NULL,'1','0','F','0','0','iot:tSimFlowPackagePrice:sensitive:view',NULL,100,1,NOW(),NULL), -(433,'敏感定价维护',135,15,'',NULL,'1','0','F','0','0','iot:tSimFlowPackagePrice:sensitive:edit',NULL,100,1,NOW(),NULL), -(434,'下载批量卡销户Excel模板',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardCancel:excel:template',NULL,100,1,NOW(),NULL), -(435,'提交Excel批量卡销户',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardCancel:excel:submit',NULL,100,1,NOW(),NULL), -(436,'通道测试',119,10,'',NULL,'1','0','F','0','0','iot:tSimChannels:test',NULL,100,1,NOW(),NULL), -(437,'提交批量输入达量断网配置',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:input:submit',NULL,100,1,NOW(),NULL), -(438,'单卡加油包',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardBindPkg:addPackage',NULL,100,1,NOW(),NULL), -(439,'流量池加油包',257,10,'',NULL,'1','0','F','0','0','iot:tSimPoolBindPackage:addPackage',NULL,100,1,NOW(),NULL), -(440,'看订购表/套餐详情',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardBindPkg:view',NULL,100,1,NOW(),NULL), -(441,'下载达量断网配置Excel模板',416,1,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:excel:template',NULL,100,1,NOW(),NULL), -(442,'提交Excel批量达量断网配置',416,1,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:excel:submit',NULL,100,1,NOW(),NULL), -(443,'提交连号达量断网配置',416,1,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:range:submit',NULL,100,1,NOW(),NULL), -(444,'文档中心',0,33,'','/','1','0','C','0','0',NULL,NULL,100,1,NOW(),NULL), -(445,'Web 使用手册',444,1,'/docs/manual/web/',NULL,'0','0','C','0','0',NULL,NULL,100,1,NOW(),NULL), -(446,'OpenAPI 文档',444,2,'/docs/openapi/v3/',NULL,'0','0','C','0','0',NULL,NULL,100,1,NOW(),NULL), -(447,'获取销售订单列表',427,10,'',NULL,'1','0','F','0','0','iot:tOrder:sellList',NULL,100,1,NOW(),NULL); - -DELETE FROM sys_role_menu WHERE menu_id BETWEEN 421 AND 447; -INSERT INTO sys_role_menu (tenant_id, role_id, menu_id, data_scope) -SELECT '000000', r.role_id, m.menu_id, '0' -FROM (SELECT 2 AS role_id UNION ALL SELECT 82 UNION ALL SELECT 88) r -CROSS JOIN (SELECT menu_id FROM sys_menu WHERE menu_id BETWEEN 421 AND 447) m; - --- 自检:菜单总数应为 447,新增绑定 81 条 -SELECT COUNT(*) AS menu_total FROM `sys_menu`; -SELECT role_id, COUNT(*) AS menus FROM `sys_role_menu` GROUP BY role_id ORDER BY role_id; diff --git a/schema/12-repair-dept-ancestors.sql b/schema/12-repair-dept-ancestors.sql deleted file mode 100644 index 826d4f7..0000000 --- a/schema/12-repair-dept-ancestors.sql +++ /dev/null @@ -1,70 +0,0 @@ --- ============================================ --- 演示环境数据修复:sys_dept.ancestors 尾逗号归一化(2026-10-27) --- --- 症状:一级代理账号在「业务受理 → 卡片划拨」里选不到下级(下拉“暂无数据”)。 --- --- 根因(两处代码缺陷,见 hotfix/dept-ancestors-20261027): --- 1) 写入端 `agent_dept.go childDeptAncestors` 生成 "0,1,172"(缺尾逗号), --- 与平台约定格式 "0,1,172," 不一致; --- 2) 匹配端 `xgorm/handler/filter_auth.go GetDeptAndSub` 只按 '%,id,%' 匹配, --- 缺尾逗号时匹配不到,于是「本机构及以下」数据范围里没有下级, --- 卡片划拨的 targets 接口(parent_id = 当前机构 + 数据权限过滤)返回空。 --- --- 本文件只修数据:按父子链重算 ancestors,统一为「以逗号结尾」的平台格式。 --- 已创建的机构(如 dept 206「二级代理」= '0,1,172')会被修正为 '0,1,172,'。 --- --- 状态(2026-10-27 更新):**两端代码修复已上线** --- admin-svr `6e3253c`(tag v1.0.3)已规范部署到演示与生产,写入端不再产生缺尾逗号。 --- 因此: --- · 对**全新种子库**:无脏数据,本文件为空操作(保留仅为对称与可追溯); --- · 对**既有库**:仍可用于修复历史上已写坏的 ancestors(幂等,可随时重跑)。 --- 代码修复见 wiki `projects/iotlcm-deploy/references/dept-ancestors-hotfix-20261027`。 --- --- 执行顺序:11 之后(12-)。 --- --- 幂等:可重复执行。MySQL 8.0 递归 CTE + 中转表(避免 1093 自表更新限制)。 --- 注:递归 CTE 的列宽取自非递归部分,必须 CAST,否则 CONCAT 结果报 1406。 --- ============================================ - -SET NAMES utf8mb4; -USE `db_iotlcm`; - -DROP TABLE IF EXISTS `_tmp_dept_ancestors_fix`; -CREATE TABLE `_tmp_dept_ancestors_fix` ( - `dept_id` BIGINT NOT NULL, - `ancestors_calc` VARCHAR(255) NOT NULL, - PRIMARY KEY (`dept_id`) -); - -INSERT INTO `_tmp_dept_ancestors_fix` (`dept_id`, `ancestors_calc`) -WITH RECURSIVE `dept_tree` (`dept_id`, `tenant_id`, `ancestors_calc`, `depth`) AS ( - SELECT `dept_id`, `tenant_id`, CAST('0,' AS CHAR(255)), 1 - FROM `sys_dept` - WHERE `parent_id` = 0 - UNION ALL - SELECT d.`dept_id`, d.`tenant_id`, CONCAT(t.`ancestors_calc`, d.`parent_id`, ','), t.`depth` + 1 - FROM `sys_dept` d - JOIN `dept_tree` t ON d.`parent_id` = t.`dept_id` AND d.`tenant_id` = t.`tenant_id` - WHERE t.`depth` < 32 -) -SELECT `dept_id`, `ancestors_calc` FROM `dept_tree`; - -UPDATE `sys_dept` d - JOIN `_tmp_dept_ancestors_fix` t ON t.`dept_id` = d.`dept_id` - SET d.`ancestors` = t.`ancestors_calc` - WHERE d.`ancestors` <> t.`ancestors_calc`; - -DROP TABLE `_tmp_dept_ancestors_fix`; - --- 自检 1:不应再有非空且不以逗号结尾的 ancestors -SELECT COUNT(*) AS still_missing_trailing_comma - FROM `sys_dept` - WHERE `ancestors` IS NOT NULL AND `ancestors` <> '' AND `ancestors` <> '0,' - AND RIGHT(`ancestors`, 1) <> ','; - --- 自检 2:复现划拨接口的取数条件(parent_id = 一级代理 + 数据权限展开结果) -SELECT `dept_id`, `dept_name`, `parent_id`, `ancestors` - FROM `sys_dept` - WHERE `deleted_at` IS NULL AND `status` = '0' AND `parent_id` = 172 - AND (`ancestors` LIKE '%,172,%' OR `ancestors` LIKE '%,172') - ORDER BY `dept_id`; diff --git a/schema/13-seed-flow-package.sql b/schema/13-seed-flow-package.sql deleted file mode 100644 index 2db7e2a..0000000 --- a/schema/13-seed-flow-package.sql +++ /dev/null @@ -1,35 +0,0 @@ --- ============================================================ --- 流量套餐种子数据(占位文件) --- --- 本文件目前为空,属预期状态。 --- --- 原因:套餐(t_sim_flow_package_info)与具体运营商、渠道、 --- 资费政策强相关,不适合随代码分发固定数据。 --- --- 影响:表为空时,业务受理中的「办理套餐 / 续费 / 变更套餐」 --- 无套餐可选,其余功能(查卡、状态同步、通道管理)不受影响。 --- --- 补齐方式(二选一): --- --- 方式一:登录管理端 →「套餐定价」创建套餐(推荐) --- 创建后即可在业务受理中选择。 --- --- 方式二:按下列结构自行插入 SQL。 --- 字段含义以 `SHOW CREATE TABLE t_sim_flow_package_info` --- 与厂商 API 文档为准。 --- --- 示例(字段不完整,仅示意,按实际情况补全): --- INSERT INTO `t_sim_flow_package_info` --- (`package_name`, `package_type`, `flow_size`, `price`, `status`, ...) --- VALUES --- ('示例套餐-1GB/月', 1, 1024, 10.00, 0, ...); --- --- 执行方式: --- docker compose exec -T mysql sh -c \ --- 'exec mysql -uroot -p"" db_iotlcm' < schema/13-seed-flow-package.sql --- ============================================================ - -SET NAMES utf8mb4; -USE `db_iotlcm`; - --- 留空,由使用者按上述方式补齐 diff --git a/schema/README.md b/schema/README.md index 028e599..5c8a447 100644 --- a/schema/README.md +++ b/schema/README.md @@ -1,8 +1,58 @@ -# 数据库初始化脚本 +# 数据库初始化 -MySQL 容器**首次以空数据卷启动**时,`docker-entrypoint-initdb.d` 会按**文件名顺序**自动执行本目录下的脚本。 +`init.sql` 是**单文件**初始化脚本,MySQL 容器首次以空数据卷启动时由 `docker-entrypoint-initdb.d` 自动执行。 -改了这些文件必须清空数据卷才会重跑: +## 内容组成 + +按文件内顺序执行,整体幂等: + +| 段 | 内容 | +| --- | --- | +| 表结构与基础数据 | 建 `db_iotlcm` 库 + 全部表 + 菜单/字典/角色/租户/部门/演示账号 | +| 结构补齐 | `card_channel_assoc` 表 + 27 个列(用存储过程按 `information_schema` 判断) | +| 结构对齐生产 | `t_sms_template_config` 表、`batch_no` 默认值 | +| 通道模板 | 23 条(上游密钥已置空) | +| 数据字典 | 86 类 / 435 条 | +| Mock 通道 | `channel_yd_mock`。**卡全部挂在该通道上**,缺则卡片管理的通道列、筛选、开停复机均不可用 | +| 角色链 | 代理下发模板参数与角色下发标记 | +| 定时任务 | 19 条,**默认全部停用**(避免自动全量同步打满机器) | +| 菜单增量 | 达量断网按钮权限、全量同步页 | +| v1.0.4 前置 | 导出中心表 `t_export_task`、通知已读表 `sys_notice_user`、`card_channel_assoc.channel_id` 扩宽、菜单权限 | +| 数据修复 | `sys_dept.ancestors` 尾逗号归一化(全新库为空操作) | +| 业务账号与口令 | 建 `u_iotlcm` 账号、可选库 `iotdb`、种子账号口令统一重置 | + +## 来源 + +内容取自**演示环境正在使用的种子库**,结构已与生产核对(89 表 / 1703 列)。与源版本的差异仅为脱敏: + +- 演示账号昵称、邮箱、手机号、登录 IP、头像 → 占位或编造值 +- 公司名、组织名 → 「示例企业」等通用名 +- 内网/生产 IP、内部域名 → 删除或改为服务名 +- 通道模板中真实上游密钥 → 置空 +- 数据库账号与种子账号口令 → 统一为部署口令(字面值,见下) + +## 改口令 + +口令是**字面值**,不使用环境变量。修改时必须同步以下三处: + +| 位置 | 内容 | +| --- | --- | +| `docker-compose.yml` | `MYSQL_ROOT_PASSWORD` | +| `config/*/config.yaml` | 各服务 `database link` 的口令 | +| `schema/init.sql` 末段 | `u_iotlcm` 账号口令、种子账号重置口令 | + +```bash +OLD='原口令'; NEW='新口令' +grep -rl "$OLD" docker-compose.yml config/ schema/ | xargs sed -i "s/$OLD/$NEW/g" +``` + +::: warning 口令不能含 @ : / 等字符 +连接串格式为 `mysql:用户:口令` 再接 `tcp(主机:端口)/库`,口令里的 `@`、`:`、`/` 会被当作分隔符,导致连接失败。用字母数字组合。 +::: + +## 重新初始化 + +`init.sql` 只在 `data/mysql` 为空时执行。改完必须清空数据卷才会重跑: ```bash docker compose stop mysql @@ -10,81 +60,14 @@ sudo rm -rf ./data/mysql docker compose up -d mysql ``` -> ⚠️ 清空 `./data/mysql` 会**删除全部数据**,生产环境不要执行。 +> ⚠️ 会删除全部数据,生产环境禁止执行。 -## 执行顺序 +## 空表说明 -| 序号 | 文件 | 内容 | -| --- | --- | --- | -| 01 | `01-schema.sql` | 建库 + 全部表结构 + 基础数据(菜单、字典、角色、租户、演示账号)。自包含:`DROP DATABASE` → `CREATE` → `USE` | -| 02 | `02-schema-fix-preview1.sql` | 补 `card_channel_assoc` 表 + 27 列。用存储过程按 `information_schema` 判断,规避 MySQL 8 无 `ADD COLUMN IF NOT EXISTS` | -| 03 | `03-schema-align-prod.sql` | 补 `t_sms_template_config` 表 + 修正 `batch_no` 默认值 | -| 04 | `04-users.sh` | 建应用账号 `iotlcm_app` + 可选库 `iotdb` | -| 05 | `05-reset-passwords.sh` | 把所有种子账号口令重置为脚本内设定的口令(按各账号自身 salt 重算哈希) | -| 06 | `06-seed-channel-templates.sql` | 通道模板 23 条(上游密钥已置空) | -| 07 | `07-seed-dict.sql` | 数据字典:`sys_dict_type` 86 类 + `sys_dict_data` 435 条 | -| 08 | `08-seed-mock-channel.sql` | **Mock 通道 `channel_yd_mock`**。演示卡全部挂在该通道上,缺则卡片管理的通道列、筛选、开停复机均不可用 | -| 09 | `09-seed-role-chain.sql` | 代理下发模板参数 + 角色下发标记 | -| 10 | `10-seed-jobs.sql` | 定时任务 19 条,**默认全部停用**(避免自动全量同步压满机器) | -| 11 | `11-seed-menu-align-prod.sql` | 菜单增量 27 条(含达量断网按钮权限、全量同步页) | -| 12 | `12-repair-dept-ancestors.sql` | `sys_dept.ancestors` 尾逗号归一化。全新库为空操作 | -| 13 | `13-seed-flow-package.sql` | **占位文件**,流量套餐为空。需在管理端「套餐定价」中创建 | - -## 口令说明 - -`04-users.sh` 与 `05-reset-passwords.sh` 里的口令是**字面值**(不使用环境变量),必须与以下位置保持一致: - -| 口令 | 需同步的位置 | -| --- | --- | -| 应用账号 `iotlcm_app` | `docker-compose.yml` 的 `MYSQL_ROOT_PASSWORD`(root)与 `config/*/config.yaml` 里 database link 的口令 | -| 种子账号 | `docker-compose.yml` 里 admin 的初始化口令说明、`05-reset-passwords.sh` 的 `ADMIN_PASSWORD` | - -改口令时三处一起改,漏改会导致服务连不上库或登录失败。 - -## 种子数据说明 - -### 保留的内容(业务必需) - -- **菜单** `sys_menu`:系统导航与按钮权限 -- **字典** `sys_dict_type` / `sys_dict_data`:全部业务枚举 -- **角色** `sys_role` / `sys_role_menu` / `sys_role_dept`:超级管理员、M管理员、M用户、终端用户 -- **租户与部门** `sys_tenant` / `sys_dept`:企业-代理-部门三层结构 -- **接口权限** `t_api` / `t_api_group` / `t_api_resource`:OpenAPI 权限模型 -- **通道模板** `t_sim_channel_template`:运营商通道配置模板 -- **行政区划** `t_division_code`:省市级 -- **演示账号** `sys_user` 18 个:覆盖管理员、代理、终端用户等角色,出库与划拨流程依赖这张表与部门树的关联 - -### 已脱敏的内容 - -| 项 | 处理 | -| --- | --- | -| 账号昵称 | `示例用户01` ~ `示例用户18` | -| 邮箱 | `user01@example.com` ~ `user18@example.com` | -| 手机号 | 合法 11 位编造号(保持互异) | -| 登录 IP | 清空 | -| 头像地址 | 清空 | -| 公司名 / 组织名 | `示例企业` / `示例代理` | -| 通道密钥 | 置空 | - -### 空表(正常) +以下表为空属预期: | 表 | 说明 | | --- | --- | -| `t_sim_flow_package_info` | 流量套餐,见 `13-seed-flow-package.sql` 说明 | +| `t_sim_flow_package_info` | 流量套餐。为空时无法办理套餐/续费/改套餐,需在管理端「套餐定价」中创建 | | `t_sim_card` | 卡数据,可通过挡板服务造卡或自行入库 | | 其余 `t_*` 业务表 | 随业务操作产生数据 | - -## 手动执行 - -容器已启动后单独执行某个脚本: - -```bash -docker compose exec -T mysql sh -c \ - 'exec mysql -uroot -p"" db_iotlcm' < schema/07-seed-dict.sql -``` - -`.sh` 脚本: - -```bash -docker compose exec mysql bash /docker-entrypoint-initdb.d/04-users.sh -``` diff --git a/schema/01-schema.sql b/schema/init.sql similarity index 81% rename from schema/01-schema.sql rename to schema/init.sql index f4d0bf7..2e7f164 100644 --- a/schema/01-schema.sql +++ b/schema/init.sql @@ -1,3 +1,21 @@ +-- ============================================================ +-- IotLCM 数据库初始化(单文件) +-- +-- 由 MySQL 容器 docker-entrypoint-initdb.d 在首次以空数据卷启动时执行。 +-- 内容取自演示环境正在使用的种子库,结构已与生产核对(89 表 / 1703 列)。 +-- 执行顺序即文件内顺序,整体幂等,可重复执行。 +-- +-- 改本文件后须清空数据卷才会重跑: +-- docker compose stop mysql && sudo rm -rf ./data/mysql && docker compose up -d mysql +-- ============================================================ + +SET NAMES utf8mb4; + + +-- ============================================================ +-- 表结构与基础数据 +-- ============================================================ + -- ============================================ -- db_iotlcm 数据库初始化脚本(清理版) -- 来源: db_iotlcm_init.sql (mysqldump 导版本) @@ -3603,8 +3621,8 @@ INSERT INTO `sys_role_menu` (`tenant_id`, `role_id`, `menu_id`, `data_scope`) VA ('000000',4,387,'0'); INSERT INTO `sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `salt`, `password`, `status`, `login_ip`, `login_date`, `mfa_enabled`, `created_dept`, `created_by`, `created_at`, `updated_by`, `updated_at`, `deleted_by`, `deleted_at`, `remark`) VALUES -(1,'000000',1,'admin','示例用户01','sys_user','user01@example.com','13800000001','0','','123456','5f1d7a84db00d2fce00b31a7fc73224f','0','','2026-08-10 09:30:44',0,103,1,'2025-02-13 11:56:36',1,'2026-08-10 09:30:44',NULL,NULL,''), -(2,'100006',2,'user02','示例用户02','sys_user','user02@example.com','13800000002','2','','5nyxW','68c6e105523f29f1a97607f6739cd245','0','',NULL,NULL,0,0,'2025-03-16 14:36:52',0,'2025-03-16 14:36:52',NULL,NULL,''), +(1,'000000',1,'admin','示例用户01','sys_user','user01@example.com','13800000001','0','','123456','5f1d7a84db00d2fce00b31a7fc73224f','0','','2026-08-10 09:30:44',0,103,1,'2025-02-13 11:56:36',1,'2026-08-10 09:30:44',NULL,NULL,'管理员'), +(2,'100006',2,'user02','示例用户02','sys_user','user02@example.com','13800000002','2','','5nyxW','68c6e105523f29f1a97607f6739cd245','0','',NULL,NULL,0,0,'2025-03-16 14:36:52',0,'2025-03-16 14:36:52',NULL,NULL,NULL), (3,'000000',2,'2admin','示例用户03','sys_user','user03@example.com','13800000003','2','','5nyxW','68c6e105523f29f1a97607f6739cd245','0','','2026-08-10 09:28:19',NULL,103,1,'2026-05-30 22:39:09',1,'2026-08-10 09:28:19',NULL,NULL,''), (4,'000000',2,'2user','示例用户04','','user04@example.com','13800000004','2','','VZ0wN','e6ad50a55c5cca432e58445500433943','0','','2026-07-21 09:44:52',NULL,103,1,'2026-06-10 17:04:02',1,'2026-07-21 09:44:52',NULL,NULL,''), (5,'000000',4,'3admin','示例用户05','sys_user','user05@example.com','13800000005','2','','mLwlN','70824cefa9bc3da395ea16a48118e477','0','','2026-08-05 10:44:43',NULL,117,12,'2026-06-22 17:32:57',1,'2026-08-05 10:44:43',NULL,NULL,''), @@ -3645,7 +3663,7 @@ INSERT INTO `sys_role_dept` (`tenant_id`, `role_id`, `dept_id`) VALUES ('000000',2,1); INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_key`, `dept_name`, `dept_type`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `credit_code`, `area_code`, `address`, `dept_role`, `created_dept`, `created_by`, `created_at`, `updated_by`, `updated_at`, `deleted_by`, `deleted_at`) VALUES -(1,'000000',0,'0,','CUS-202601-0001','示例企业',1,'',0,36,'15888888222','xxx@qq.com','0','098765432109876543','370100000000','历下区',66,100,1,'2025-02-13 11:56:36',111,'2026-07-29 16:06:31',NULL,NULL), +(1,'000000',0,'0,','CUS-202601-0001','示例企业',1,'',0,36,'13800000101','contact@example.com','0','098765432109876543','370100000000','历下区',66,100,1,'2025-02-13 11:56:36',111,'2026-07-29 16:06:31',NULL,NULL), (2,'000000',1,'0,1,','CUS-202601-0002','示例企业',1,'',1,12,'','','0','123456789012345678','','高新区',67,NULL,0,'2025-03-16 14:36:52',12,'2026-07-29 16:14:12',NULL,NULL), (3,'000000',1,'0,1,','','终端用户部门',1,'',20,0,'','','0','','','',0,100,1,'2026-07-08 15:30:23',1,'2026-07-08 15:34:57',NULL,NULL), (4,'000000',2,'0,1,2,','','示例代理1',1,'',1,27,'','','0','','','',0,100,1,'2026-06-22 03:07:10',1,'2026-07-21 09:38:12',NULL,NULL), @@ -3710,7 +3728,7 @@ INSERT INTO `sys_job` (`job_id`, `job_name`, `job_params`, `job_group`, `invoke_ (20,'财务 - 消费账户月账单','2026-07','0','settle_consume_account_month_bill','0 0 4 2 * ?',1,0,'0','',100,1,'2026-07-28 16:20:25',1,'2026-07-30 16:09:02',NULL,NULL), (21,'财务 - 分润出账','2026-06|2025-07','0','settle_commission','0 0 4 * * ?',1,0,'0','',100,1,'2026-07-28 16:48:19',1,'2026-07-31 16:14:06',NULL,NULL), (22,'流量池-卡信息数据同步流量池 ','117','0','sync_flow_pool_card','0 0 4 * * ?',1,0,'0','',100,1,'2026-07-31 16:16:32',1,'2026-07-31 16:21:56',NULL,NULL), -(23,'预警-到期预警全量预加载','','0','PreloadSimExpireWarning','0 30 23 L * ?',1,1,'0','每月底扫描下下个月到期卡,写入 Redis 候选池',100,1,'2026-07-31 17:53:44',1,'2026-07-31 17:56:34',NULL,NULL), +(23,'预警-到期预警全量预加载','','0','PreloadSimExpireWarning','0 30 23 28-31 * ?',1,1,'0','每月底扫描下下个月到期卡,写入 Redis 候选池',100,1,'2026-07-31 17:53:44',1,'2026-07-31 17:56:34',NULL,NULL), (24,'预警-定时到期预警扫描','','0','ScanSimExpireCandidateWarning','0 0 9 * * ?',1,1,'0','',100,1,'2026-07-31 17:54:13',1,'2026-08-03 08:38:06',NULL,NULL); INSERT INTO `sys_oss_config` (`oss_config_id`, `tenant_id`, `config_key`, `access_key`, `secret_key`, `bucket_name`, `prefix`, `endpoint`, `domain`, `is_https`, `region`, `access_policy`, `status`, `ext1`, `created_dept`, `created_by`, `created_at`, `updated_by`, `updated_at`, `remark`) VALUES @@ -3732,12 +3750,10 @@ INSERT INTO `sys_notice` (`notice_id`, `tenant_id`, `notice_title`, `notice_type (2,'000000','维护通知:2018-07-01 系统凌晨维护','1',_binary '维护内容','0',1,NULL,NULL,103,1,'2025-02-13 11:56:36',NULL,NULL,'管理员'); INSERT INTO `sys_tenant` (`id`, `tenant_id`, `contact_user_name`, `contact_phone`, `company_name`, `license_number`, `address`, `intro`, `domain`, `remark`, `package_id`, `admin_role_id`, `admin_dept_id`, `admin_user_id`, `expire_time`, `account_count`, `status`, `created_dept`, `created_by`, `created_at`, `updated_by`, `updated_at`, `deleted_by`, `deleted_at`) VALUES -(1,'000000','管理组','15888888888','示例企业有限公司','','','多租户通用后台管理管理系统','','备注',0,1,103,1,'2027-05-28 00:00:00',-1,'0',103,1,'2025-02-13 11:56:36',1,'2026-05-28 15:22:57',NULL,NULL), -(6,'100006','李先生','18600000000','示例企业','3332233','地址','企业介绍','example.com','备注',9,117,10,1,'2026-03-16 00:00:00',-1,'0',103,1,'2025-03-16 14:36:52',1,'2026-05-28 15:23:12',1,'2026-05-28 15:23:12'); +(1,'000000','管理组','13800000102','示例企业有限公司','','','多租户通用后台管理管理系统','','备注',0,1,103,1,'2027-05-28 00:00:00',-1,'0',103,1,'2025-02-13 11:56:36',1,'2026-05-28 15:22:57',NULL,NULL), +(6,'100006','李先生','13800000103','示例企业','3332233','地址','企业介绍','example.com','备注',9,117,10,1,'2026-03-16 00:00:00',-1,'0',103,1,'2025-03-16 14:36:52',1,'2026-05-28 15:23:12',1,'2026-05-28 15:23:12'); -INSERT INTO `sys_social` (`id`, `user_id`, `tenant_id`, `auth_id`, `source`, `open_id`, `user_name`, `nick_name`, `email`, `avatar`, `access_token`, `expire_in`, `refresh_token`, `access_code`, `union_id`, `scope`, `token_type`, `id_token`, `mac_algorithm`, `mac_key`, `code`, `oauth_token`, `oauth_token_secret`, `created_dept`, `created_by`, `created_at`, `updated_by`, `updated_at`, `deleted_by`, `deleted_at`) VALUES -(1,60,'000000','wechat_mp:oWvGO7SkEur8Tb9TTYyl2aKMWdPg','wechat_mp','oWvGO7SkEur8Tb9TTYyl2aKMWdPg','user06','示例用户06','','','oWvGO7SkEur8Tb9TTYyl2aKMWdPg',NULL,NULL,NULL,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,117,60,'2026-07-17 16:59:11',60,'2026-07-22 10:33:31',NULL,NULL), -(2,87,'000000','wechat_mp:oWvGO7SkEur8Tb9TTYyl2aKMWdPg','wechat_mp','oWvGO7SkEur8Tb9TTYyl2aKMWdPg','18816314697','appuser006','','/static/images/default-avatar.png','oWvGO7SkEur8Tb9TTYyl2aKMWdPg',NULL,NULL,NULL,'',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,147,87,'2026-07-31 18:38:39',87,'2026-07-31 18:38:55',NULL,NULL); +-- 表 sys_social 无种子数据 INSERT INTO `sys_tenant_package` (`package_id`, `package_name`, `menu_ids`, `remark`, `menu_check_strictly`, `status`, `created_dept`, `created_by`, `created_at`, `updated_by`, `updated_at`, `deleted_by`, `deleted_at`) VALUES (1,'test','100,1001,1002,1003,1004,1005,1006,1007','test',1,'0',0,0,'2025-03-16 11:56:06',1,'2026-06-01 14:55:50',0,NULL); @@ -4152,4 +4168,1239 @@ INSERT INTO `t_division_code` (`region_id`, `region_code`, `region_name`, `regio (377,'820000000000','澳门特别行政区',1,'000000000000',''); -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file +SET FOREIGN_KEY_CHECKS = 1; + + +-- ============================================================ +-- 结构补齐:card_channel_assoc 表与 27 个列 +-- ============================================================ + +-- ---------- 1. 缺失的表:card_channel_assoc(卡号段-通道关联)---------- +CREATE TABLE IF NOT EXISTS `card_channel_assoc` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `channel_id` int NOT NULL COMMENT '通道ID', + `match_type` tinyint NOT NULL COMMENT '匹配类型', + `iccid` varchar(32) DEFAULT NULL COMMENT '单卡ICCID', + `iccid_start` varchar(32) DEFAULT NULL COMMENT '卡号段起始', + `iccid_end` varchar(32) DEFAULT NULL COMMENT '卡号段结束', + `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态', + `remark` varchar(255) DEFAULT NULL COMMENT '备注', + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `idx_channel_id` (`channel_id`), + KEY `idx_iccid` (`iccid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='卡号段与通道关联'; + +-- ---------- 2. 幂等补列辅助过程 ---------- +DROP PROCEDURE IF EXISTS `sp_add_column_if_missing`; +DELIMITER $$ +CREATE PROCEDURE `sp_add_column_if_missing`( + IN p_table VARCHAR(64), + IN p_column VARCHAR(64), + IN p_ddl TEXT +) +BEGIN + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = DATABASE() + AND table_name = p_table + AND column_name = p_column + ) THEN + SET @s = CONCAT('ALTER TABLE `', p_table, '` ADD COLUMN ', p_ddl); + PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; + SELECT CONCAT('added ', p_table, '.', p_column) AS action; + ELSE + SELECT CONCAT('exists ', p_table, '.', p_column) AS action; + END IF; +END$$ +DELIMITER ; + +-- ---------- 3. batch_main:补 2 列 ---------- +CALL sp_add_column_if_missing('batch_main', 'source_channel', + "`source_channel` varchar(24) NOT NULL DEFAULT 'legacy' COMMENT '发起渠道:console/mini_program/api/system/legacy'"); +CALL sp_add_column_if_missing('batch_main', 'execution_mode', + "`execution_mode` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '执行模式'"); + +-- ---------- 4. sys_user:补 1 列 ---------- +CALL sp_add_column_if_missing('sys_user', 'is_init_password', + "`is_init_password` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否为初始密码'"); + +-- ---------- 5. t_sim_card_info:补 4 列 ---------- +CALL sp_add_column_if_missing('t_sim_card_info', 'imei_sync_time', + "`imei_sync_time` datetime DEFAULT NULL COMMENT 'IMEI 同步时间'"); +CALL sp_add_column_if_missing('t_sim_card_info', 'imei_update_time', + "`imei_update_time` datetime DEFAULT NULL COMMENT 'IMEI 更新时间'"); +CALL sp_add_column_if_missing('t_sim_card_info', 'traffic_cutoff_triggered_at', + "`traffic_cutoff_triggered_at` datetime DEFAULT NULL COMMENT '流量停机触发时间'"); +CALL sp_add_column_if_missing('t_sim_card_info', 'traffic_cutoff_cross_month_hold', + "`traffic_cutoff_cross_month_hold` tinyint(1) NOT NULL DEFAULT 0 COMMENT '流量停机跨月保持'"); + +-- ---------- 6. t_sim_channels:补 9 列 ---------- +CALL sp_add_column_if_missing('t_sim_channels', 'app_key', + "`app_key` varchar(64) DEFAULT NULL COMMENT '运营商 app_key'"); +CALL sp_add_column_if_missing('t_sim_channels', 'app_secret', + "`app_secret` varchar(64) DEFAULT NULL COMMENT '运营商 app_secret'"); +CALL sp_add_column_if_missing('t_sim_channels', 'operator', + "`operator` tinyint unsigned DEFAULT NULL COMMENT '运营商'"); +CALL sp_add_column_if_missing('t_sim_channels', 'is_normal', + "`is_normal` tinyint(1) DEFAULT NULL COMMENT '是否正常'"); +CALL sp_add_column_if_missing('t_sim_channels', 'docking_status', + "`docking_status` tinyint(1) DEFAULT NULL COMMENT '对接状态'"); +CALL sp_add_column_if_missing('t_sim_channels', 'sync_enabled', + "`sync_enabled` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否启用全量同步'"); +CALL sp_add_column_if_missing('t_sim_channels', 'card_info_count', + "`card_info_count` bigint NOT NULL DEFAULT 0 COMMENT '卡信息数量'"); +CALL sp_add_column_if_missing('t_sim_channels', 'stock_card_count', + "`stock_card_count` bigint NOT NULL DEFAULT 0 COMMENT '库存卡数量'"); +CALL sp_add_column_if_missing('t_sim_channels', 'cancellation_card_count', + "`cancellation_card_count` bigint NOT NULL DEFAULT 0 COMMENT '销户卡数量'"); + +-- ---------- 7. 两张套餐绑定表:补 batch_no ---------- +CALL sp_add_column_if_missing('t_sim_pool_bind_package', 'batch_no', + "`batch_no` varchar(64) NOT NULL DEFAULT '' COMMENT '批次号'"); +CALL sp_add_column_if_missing('t_sim_pool_bind_pkg_logs', 'batch_no', + "`batch_no` varchar(64) NOT NULL DEFAULT '' COMMENT '批次号'"); + +-- ---------- 8. 清理辅助过程 ---------- +DROP PROCEDURE IF EXISTS `sp_add_column_if_missing`; + +-- ---------- 9. 校验 ---------- +SELECT 'tables' AS check_item, COUNT(*) AS n FROM information_schema.tables + WHERE table_schema='db_iotlcm' +UNION ALL SELECT 'columns', COUNT(*) FROM information_schema.columns + WHERE table_schema='db_iotlcm' +UNION ALL SELECT 'has_source_channel', COUNT(*) FROM information_schema.columns + WHERE table_schema='db_iotlcm' AND table_name='batch_main' AND column_name='source_channel' +UNION ALL SELECT 'has_card_channel_assoc', COUNT(*) FROM information_schema.tables + WHERE table_schema='db_iotlcm' AND table_name='card_channel_assoc'; + + +-- ============================================================ +-- 结构对齐生产:t_sms_template_config 表、batch_no 默认值 +-- ============================================================ + +-- ---------- 1. 缺表:t_sms_template_config ---------- +CREATE TABLE IF NOT EXISTS `t_sms_template_config` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', + `scene` varchar(64) NOT NULL COMMENT '业务场景码,全局唯一,如 bind_phone', + `scene_name` varchar(128) NOT NULL DEFAULT '' COMMENT '场景名称(可读)', + `service_type` varchar(8) NOT NULL DEFAULT '' COMMENT '短信供应商:空=用服务默认,1=阿里云,2=腾讯云', + `sign_name` varchar(64) NOT NULL DEFAULT '' COMMENT '短信签名:空=用服务默认', + `template_id` varchar(64) NOT NULL COMMENT '短信模板ID', + `msg_content_template` varchar(512) NOT NULL DEFAULT '' COMMENT '内容参数模板,支持 {content}/{contentJson} 占位;空=直接使用调用方 msgContent', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0停用,1启用', + `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_scene` (`scene`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='短信业务场景模板配置'; + +-- ---------- 2. batch_no 默认值对齐生产(去掉 '' 默认) ---------- +-- 生产:`batch_no` varchar(64) NOT NULL (无 DEFAULT) +-- 种子:`batch_no` varchar(64) NOT NULL DEFAULT '' +ALTER TABLE `t_sim_pool_bind_package` MODIFY COLUMN `batch_no` varchar(64) NOT NULL COMMENT '批次号'; +ALTER TABLE `t_sim_pool_bind_pkg_logs` MODIFY COLUMN `batch_no` varchar(64) NOT NULL COMMENT '批次号'; + + +-- ============================================================ +-- 通道模板种子(真实上游密钥已置空) +-- ============================================================ + +-- 重置为基线:只保留 移动 / 电信 / 移动Mock +DELETE FROM `t_sim_channel_template` + WHERE `temp_key` NOT IN ('sim_dx_v1', 'sim_yd_v5', 'sim_yd_mock_v5'); + +INSERT INTO `t_sim_channel_template` + (`id`,`temp_key`,`temp_name`,`temp_model`,`temp_config`,`temp_status`,`remark`,`tenant_id`,`created_dept`,`created_by`,`created_at`,`updated_by`,`updated_at`) +VALUES +(1,'sim_dx_v1','电信BOSS卡API','direct','{"api":{"baseUrl":"https://cmp-api.ctwing.cn:20164"}}',0,'','000000',1,1,'2026-06-12 10:16:22',NULL,'2026-09-08 20:31:54'), +(2,'sim_yd_v5','中国移动V5模板','direct','{"api":{"baseUrl":"https://api.iot.10086.cn/v5/"},"token":{"path":"/ec/get/token"}}',0,NULL,'000000',1,1,'2026-06-12 10:17:03',NULL,'2026-09-08 20:31:54'), +(4,'sim_yd_mock_v5','移动Mock','direct','{"api":{"baseUrl":"http://onelink-mock:8080/v5/"}}',0,NULL,'000000',1,1,'2026-08-14 11:00:53',NULL,'2026-09-08 20:31:54') +ON DUPLICATE KEY UPDATE + `temp_name` = VALUES(`temp_name`), + `temp_model` = VALUES(`temp_model`), + `temp_config` = VALUES(`temp_config`), + `temp_status` = VALUES(`temp_status`), + `remark` = VALUES(`remark`), + `updated_at` = VALUES(`updated_at`); + +-- 自检:应恰好 3 条 +SELECT COUNT(*) AS template_count, + GROUP_CONCAT(`temp_key` ORDER BY `id`) AS temp_keys + FROM `t_sim_channel_template`; + + +-- ============================================================ +-- 数据字典种子(86 类 / 435 条) +-- ============================================================ + +-- 清空后全量导入(字典为纯参照数据,无业务含义,可安全替换) +DELETE FROM `sys_dict_data`; +DELETE FROM `sys_dict_type`; + +INSERT INTO `sys_dict_type` (`dict_name`,`dict_type`,`is_sys`,`tenant_id`,`created_dept`,`created_by`,`remark`) VALUES +('提现账号类型','account_type',1,'000000',100,1,'1:银行卡 +2:支付宝 +3:微信'), +('状态','apply_status',1,'000000',100,1,'0:待审核 +1:已通过 +2:已驳回 +3:已打款 +4:已取消'), +('申请类型','apply_type',1,'000000',100,1,'1:提现申请 +2:余额转提现'), +('审核结果','audit_result',1,'000000',100,1,'0:通过 +1:驳回'), +('审核类型','audit_type',1,'000000',100,1,'1:初审 +2:复审'), +('批次异步状态','batch_async_status',1,'000000',NULL,1,'批次异步状态:0-已创建 1-待处理 2-处理中 3-成功 4-失败'), +('批次类型','batch_type',1,'000000',103,1,'批次类型:1-3通用批次,101+卡业务专属'), +('卡状态','boss_card_status',0,'000000',103,1,'待激活:1 +已激活:2 +停机:4 +可测试:6 +库存:7 +预销户:8 +已销户:9 +未知:0'), +('变动类型','change_type',1,'000000',100,1,'0:分润 +1:提现 +2:转出 +3:转入 +4:还款'), +('创建人类型','creator_type',1,'000000',100,1,'1:终端用户 +2:代理商'), +('当前处理状态','current_status',1,'000000',100,1,'1:已分派 +2:处理中 +3:已解决 +4:已完结_关单 +5:已取消'), +('客户类型','customer_type',1,'000000',100,1,'1 渠道用户 +2 终端用户'), +('批次明细状态','detail_status',0,'000000',NULL,1,'批次明细状态:0待处理 1处理中 2成功 3失败'), +('分销分成状态','distribution_status',1,'000000',117,1,'0:未分成 +1:已分成'), +('下载状态','download_status',1,'000000',103,1,'0:待生成 1:已生成 2:生成中 3:生成失败'), +('生效状态','effective_status',1,'000000',100,1,'0:待生效 +1:生效中 +2:已过期 +3:已终止 +4:已作废'), +('套餐启用状态','flow_package_enabled',0,'000000',100,1,'套餐管理-是否启用,与global_enable方向相反(0=停用 1=启用)'), +('全局-是否启用','global_enable',0,'000000',103,1,'0:启用 +1:停用'), +('全局-是否','global_yes_or_no',0,'000000',103,1,'0:是 +1:否'), +('收支类型','income_expense_type',1,'000000',100,1,'0:收入 +1:支出'), +('是否需要分佣','is_need_commission',1,'000000',117,1,'0:分佣 +1:不分佣 '), +('是否撤回','is_recall',1,'000000',100,1,'0:未撤回 +1:已撤回'), +('消息类型','message_type',1,'000000',100,1,'1:系统通知 +2:活动通知 +3:订单通知 +4:账户通知'), +('请求方法','method',1,'000000',100,1,'1:POST +2:PUT +3:DELETE +4:GET'), +('操作类型','operation_type',1,'000000',100,1,'0:创建 +1:分派 +2:处理 +3:完成 +4:关单 +5:取消'), +('订单状态','order_status',1,'000000',100,1,'0 待确定,待支付 +1 已确定,待发货 +2处理中,已发货 +3 已取消 +4 无效 +5 已完成'), +('订单类型','order_type',1,'000000',100,1,'1:卡订购 +2: 卡续费 +3: 卡变更'), +('oss权限桶类型','oss_access_policy',1,'000000',103,1,''), +('支付状态','pay_status',1,'000000',100,1,'0 未支付 +1 支付中 +2 已支付 +3 退款中 +4 部分退款 +5 已退款'), +('支付类型','pay_type',1,'000000',100,1,'1:在线支付 +2:货到付款 +3:线下支付'), +('套餐名称','pool_package_code',1,'000000',100,1,'此处为流量池名称 每次新增流量池套餐需要进行配置'), +('资源导出场景','resource_export_scene',1,'000000',103,1,'t_resource_batch_download.export_scene'), +('资源类型','resource_type',1,'000000',103,1,'t_resource_batch_download.resource_type'), +('退货状态','return_status',1,'000000',100,1,'0未退款 +1待审核 +2执行中 +3部分退货 +4退货成功'), +('运行结果','run_result',0,'000000',NULL,1,'运行结果:0待运行 1运行中 2成功 3失败'), +('发送用户类型','send_user_type',1,'000000',100,1,'1:代理商 +2:终端用户'), +('共享token','share_enabled',1,'000000',100,1,'0:否 +1:是'), +('发货方式','shipping_method',1,'000000',100,1,'1 物流 +2 商家自提 +3 无需配送'), +('配送状态','shipping_status',1,'000000',117,1,'0:未发货 +1:已发货 +2:已收货 +4:退货'), +('卡入库导入状态','sim_card_inbound_import_status',1,'000000',103,1,'TSimCardInboundExcelImportRes.importStatus'), +('系统状态','sys_common_status',1,'000000',103,1,'登录状态列表'), +('组织类型','sys_dept_type',0,'000000',103,1,'0:部门 +1:公司'), +('设备类型','sys_device_type',1,'000000',103,1,'客户端设备类型'), +('代码生成状态','sys_gen_status',1,'000000',103,1,''), +('授权类型','sys_grant_type',1,'000000',103,1,'认证授权类型'), +('任务是否并发执行','sys_job_concurrent',1,'000000',101,11,'是否并发执行(0允许 1禁止)'), +('任务分组','sys_job_group',1,'000000',101,11,'任务分组(0 默认 1系统 2数据中心)'), +('任务计划执行策略','sys_missfire_policy',1,'000000',101,11,'计划执行策略(1多次执行 2执行一次)'), +('系统开关','sys_normal_disable',1,'000000',103,1,'系统开关列表'), +('通知状态','sys_notice_status',1,'000000',103,1,'通知状态列表'), +('通知类型','sys_notice_type',1,'000000',103,1,'通知类型列表'), +('操作类型','sys_oper_type',1,'000000',103,1,'操作类型列表'), +('菜单状态','sys_show_hide',0,'000000',103,1,'菜单状态列表'), +('系统状态','sys_status',1,'000000',100,1,'0 正常 +1 停用'), +('用户性别','sys_user_sex',0,'000000',103,1,'用户性别列表'), +('系统是否','sys_yes_no',1,'000000',103,1,'系统是否列表'), +('是否默认','sys_yes_no_num',1,'000000',103,1,'是否默认 0是 1否'), +('交易渠道','transaction_channel',1,'000000',100,1,'1:支付宝 +2:微信 +3:可提现金额'), +('交易状态','transaction_status',1,'000000',100,1,'0:待支付 +1:已支付 +2:已过期 +3:交易失败'), +('交易类型','transaction_type',1,'000000',100,1,'0:充值 +1:消费 +2:转可提现 +3:可提现转入 +4:人工调整'), +('渠道适用类型','t_agent_scope_type',0,'000000',103,1,'0:所有客户 +1:指定客户'), +('批次操作规模','t_batch_execution_mode',1,'000000',100,1,'未知 0 单卡 1 批量 2'), +('批次发起渠道','t_batch_source_channel',1,'000000',100,1,'批次创建入口:console 管理控制台,app 小程序,api API请求调用'), +('批次来源方式','t_batch_source_type',0,'000000',100,1,'0:批次选择 +1:连号 +2:批量输入 +3:文件'), +('计费方式','t_billing_method',0,'000000',103,1,'1:月 +2:年'), +('卡信息_查询维度','t_cardInfo_dimension',1,'000000',103,1,'卡信息表'), +('卡信息_维度状态','t_cardInfo_dimensionStatus',1,'000000',103,1,'卡信息表'), +('卡信息_查询条件','t_cardInfo_selectCondition',1,'000000',103,1,'卡信息表'), +('卡信息_排序类型','t_cardInfo_sortType',1,'000000',103,1,'卡信息表'), +('卡信息_排序值','t_cardInfo_sortValue',1,'000000',103,1,'卡信息表'), +('卡信息_时间类型','t_cardInfo_timeType',1,'000000',103,1,'卡信息表'), +('卡类型','t_card_type',0,'000000',103,1,'1:通用插拔 SIM 卡 +2:贴片 M2M 卡 5×6mm +3:贴片 M2M 卡 2×2mm +4:MP1-消费级插拔物联卡 +5:MP2-工业级插拔物联卡 +6:MS0-消费级贴片物联卡 +7:MS1-工业级贴片物联卡'), +('通道状态','t_channels_status',1,'000000',100,1,'0:启用 +1:停用 +2:未申请 +3:申请中 +4:接口信息不全'), +('通道对接信息','t_channel_docking_status',1,'000000',NULL,NULL,'通道对接信息状态'), +('通道是否轮询','t_channel_sync_enabled',1,'000000',NULL,1,NULL), +('网络类型','t_net_model',1,'000000',103,1,'1 3G +2 2G +3 4G +4 5G +5 NB-IOT +6 5G-SA +7 5G-NSA +8 2G/3G +9 电信NB +10 移动4G +11 联通NB +12 联通4G +13 电信4G +14 RedCap'), +('运营商','t_operators',0,'000000',103,1,'1:移动 +2:联通 +3:电信'), +('套餐定价-价格来源','t_package_price_source',1,'000000',100,26,'system — 系统级 +agentDefault — 本级默认 +target — 下级专属'), +('套餐状态','t_package_status',0,'000000',103,1,'0:无套餐 +1:待生效 +2:生效中 +3:已过期'), +('套餐类型','t_package_type',0,'000000',103,1,'101:卡套餐 +102:池套餐 +103:单卡加油包 +104:池卡加油包'), +('流量池状态','t_pool_status',1,'000000',103,1,'0:正常 +1:停用 +2:锁定'), +('预警-第三次是否停机','t_warn_auto_action',1,'000000',100,1,'0:否,3:是'), +('预警启停状态','t_warn_enabled',1,'000000',100,1,'1:启用,0:停用'), +('预警-提醒方式','t_warn_method',1,'000000',100,1,'3:站内提醒,1:邮箱,0:短信'), +('预警-预警单位','t_warn_unit',1,'000000',100,1,'1:流量阈值(MB),2:流量池百分比'), +('工单类型','wo_type',1,'000000',100,1,'0:卡 +1:模组 +2:设备 +3:订单 +4:余额 +5:提现'); + +INSERT INTO `sys_dict_data` (`dict_type`,`dict_value`,`dict_label`,`dict_sort`,`list_class`,`css_class`,`is_default`,`tenant_id`,`created_dept`,`created_by`,`remark`) VALUES +('account_type','1','银行卡',0,'primary','','','000000',103,1,''), +('account_type','2','支付宝',1,'primary','','','000000',103,1,''), +('account_type','3','微信',2,'primary','','','000000',103,1,''), +('addd','33','22',55,'22','44','','000000',103,1,'44'), +('agent_scope_type','0','所有客户',1,'','','','000000',103,1,''), +('agent_scope_type','1','指定客户',2,'','','','000000',103,1,''), +('apply_status','0','待审核',0,'primary','','','000000',103,1,''), +('apply_status','1','已通过',1,'success','','','000000',103,1,''), +('apply_status','2','已驳回',2,'danger','','','000000',103,1,''), +('apply_status','3','已打款',3,'primary','','','000000',103,1,''), +('apply_status','4','已取消',4,'default','','','000000',103,1,''), +('apply_type','1','提现申请',0,'default','','','000000',103,1,''), +('apply_type','2','余额转提现',1,'default','','','000000',103,1,''), +('audit_result','0','通过',0,'primary','','','000000',103,1,''), +('audit_result','1','驳回',1,'danger','','','000000',103,1,''), +('audit_type','1','初审',0,'primary','','','000000',103,1,''), +('audit_type','2','复审',1,'warning','','','000000',103,1,''), +('batch_async_status','0','已创建',0,'primary',NULL,'N','000000',103,1,''), +('batch_async_status','1','待处理',1,'primary',NULL,'N','000000',103,1,''), +('batch_async_status','2','处理中',2,'primary',NULL,'N','000000',103,1,''), +('batch_async_status','3','成功',3,'primary',NULL,'N','000000',103,1,''), +('batch_async_status','4','失败',4,'primary',NULL,'N','000000',103,1,''), +('batch_async_status','5','部分成功',5,'warning',NULL,'N','000000',103,1,''), +('batch_operation_source','console','管理控制台',1,'primary','','','000000',103,1,'未标记来源的历史批次默认归为管理控制台'), +('batch_status','0','正常',0,NULL,NULL,'Y','000000',103,1,NULL), +('batch_status','1','废弃',1,NULL,NULL,'N','000000',103,1,NULL), +('batch_type','1','入库',1,'primary',NULL,'N','000000',103,1,''), +('batch_type','2','出库',2,'primary',NULL,'N','000000',103,1,''), +('batch_type','3','划拨',3,'primary',NULL,'N','000000',103,1,''), +('batch_type','4','预处理',4,'warning','','','000000',103,1,''), +('batch_type','11','卡订购加油包',11,'primary','','N','000000',103,1,'批次类型:单卡加油包订购'), +('batch_type','12','流量池订购加油包',12,'primary','','N','000000',103,1,'批次类型:流量池加油包订购'), +('batch_type','40','预警配置',40,'primary','','N','000000',103,1,'预警配置批次类型'), +('batch_type','41','达量断网配置',41,'primary','','','000000',103,1,'达量断网配置'), +('batch_type','101','卡续费',101,'primary',NULL,'N','000000',103,1,'卡业务专属'), +('batch_type','102','卡变更',102,'primary',NULL,'N','000000',103,1,'卡业务专属'), +('batch_type','103','卡开机',103,'primary',NULL,'N','000000',103,1,'卡业务专属'), +('batch_type','104','卡停机',104,'primary',NULL,'N','000000',103,1,'卡业务专属'), +('batch_type','105','卡停复机',105,'primary',NULL,'N','000000',103,1,'卡业务专属'), +('batch_type','106','卡销户',106,'primary',NULL,'N','000000',103,1,'卡业务专属'), +('batch_type','107','卡达量断网执行',107,'primary','','','000000',103,1,'卡业务专属'), +('batch_type','108','卡退订',108,'primary',NULL,'N','000000',103,1,'卡业务专属'), +('batch_type','109','卡APN开启',109,'primary','','','000000',103,1,'卡业务专属'), +('batch_type','110','卡APN关停',110,'primary','','','000000',103,1,'卡业务专属'), +('billing_method','1','月',1,'','','','000000',103,1,''), +('billing_method','2','年',2,'','','','000000',103,1,''), +('boss_card_status','0','未知 ',1,'','','','000000',103,1,''), +('boss_card_status','1','待激活 ',1,'primary','','','000000',103,1,''), +('boss_card_status','2','已激活 ',1,'','','','000000',103,1,''), +('boss_card_status','4','停机 ',1,'danger','','','000000',103,1,''), +('boss_card_status','6','可测试',1,'','','','000000',103,1,''), +('boss_card_status','7','库存 ',1,'','','','000000',103,1,''), +('boss_card_status','8','预销户 ',1,'','','','000000',103,1,''), +('boss_card_status','9','已销户 ',1,'','','','000000',103,1,''), +('business_type','0','订购',0,NULL,NULL,'Y','000000',103,1,NULL), +('business_type','1','变更',1,NULL,NULL,'N','000000',103,1,NULL), +('business_type','2','续费',2,NULL,NULL,'N','000000',103,1,NULL), +('cardInfo_dimension','1','使用流量',1,'','','','000000',103,1,''), +('cardInfo_dimension','2','剩余流量',1,'','','','000000',103,1,''), +('cardInfo_dimensionStatus','!=','!=',1,'','','','000000',103,1,''), +('cardInfo_dimensionStatus','<','<',1,'','','','000000',103,1,''), +('cardInfo_dimensionStatus','<=','<=',1,'','','','000000',103,1,''), +('cardInfo_dimensionStatus','=','=',1,'','','','000000',103,1,''), +('cardInfo_dimensionStatus','>','>',1,'','','','000000',103,1,''), +('cardInfo_dimensionStatus','>=','>=',1,'','','','000000',103,1,''), +('cardInfo_selectCondition','iccid','ICCID',1,'','','','000000',103,1,''), +('cardInfo_selectCondition','imei','IMEI',1,'','','','000000',103,1,''), +('cardInfo_selectCondition','imis','IMSI',1,'','','','000000',103,1,''), +('cardInfo_selectCondition','msisdn','MSISDN',1,'','','','000000',103,1,''), +('cardInfo_timeType','0','开卡时间',1,'','','','000000',103,1,''), +('cardInfo_timeType','1','激活时间',1,'','','','000000',103,1,''), +('cardInfo_timeType','2','入库时间',1,'','','','000000',103,1,''), +('cardInfo_timeType','3','出库时间',1,'','','','000000',103,1,''), +('cardInfo_timeType','4','到期时间',1,'','','','000000',103,1,''), +('cardInfo_timeType','5','创建时间',1,'','','','000000',103,1,''), +('cardInfo_timeType','6','流量同步时间',1,'','','','000000',103,1,''), +('cardInfo_timeType','7','状态同步时间',1,'','','','000000',103,1,''), +('change_type','0','分润',0,'primary','','','000000',103,1,''), +('change_type','1','提现',1,'primary','','','000000',103,1,''), +('change_type','2','转出',2,'primary','','','000000',103,1,''), +('change_type','3','转入',3,'primary','','','000000',103,1,''), +('change_type','4','还款',4,'primary','','','000000',103,1,''), +('check_status','0','待审核',0,NULL,NULL,'Y','000000',103,1,NULL), +('check_status','1','审核通过',1,NULL,NULL,'N','000000',103,1,NULL), +('check_status','2','审核未通过',2,NULL,NULL,'N','000000',103,1,NULL), +('creator_type','1','终端用户',0,'primary','','','000000',103,1,''), +('creator_type','2','代理商',1,'primary','','','000000',103,1,''), +('current_status','1','已分派',0,'primary','','','000000',103,1,''), +('current_status','2','处理中',1,'success','','','000000',103,1,''), +('current_status','3','已解决',2,'warning','','','000000',103,1,''), +('current_status','4','已完结',3,'success','','','000000',103,1,''), +('current_status','5','已取消',4,'primary','','','000000',103,1,''), +('customer_type','1','渠道用户',1,NULL,NULL,'Y','000000',103,1,NULL), +('customer_type','2','终端用户',2,NULL,NULL,'N','000000',103,1,NULL), +('detail_status','0','待处理',0,'info','','N','000000',103,1,NULL), +('detail_status','1','处理中',1,'primary','','N','000000',103,1,NULL), +('detail_status','2','成功',2,'success','','N','000000',103,1,NULL), +('detail_status','3','失败',3,'danger','','N','000000',103,1,NULL), +('distribution_status','0','未分成',0,NULL,NULL,'Y','000000',103,1,NULL), +('distribution_status','1','已分成',1,NULL,NULL,'N','000000',103,1,NULL), +('download_status','2','生成中',0,'primary','','N','000000',103,1,'结果文件生成中'), +('download_status','0','待生成',1,'default','','','000000',103,1,''), +('download_status','1','已生成',2,'default','','','000000',103,1,''), +('download_status','3','生成失败',3,'default','','','000000',103,1,''), +('effective_status','0','待生效',0,'default','','','000000',103,1,''), +('effective_status','1','生效中',1,'primary','','','000000',103,1,''), +('effective_status','2','已过期',2,'danger','','','000000',103,1,''), +('effective_status','3','已终止',3,NULL,NULL,'N','000000',103,1,NULL), +('effective_status','4','已作废',4,NULL,NULL,'N','000000',103,1,NULL), +('enabled','0','启用',0,NULL,NULL,'Y','000000',103,1,NULL), +('enabled','1','停用',1,NULL,NULL,'N','000000',103,1,NULL), +('export_scene','1','list_export',1,NULL,NULL,'Y','000000',103,1,NULL), +('export_scene','2','report_export',2,NULL,NULL,'N','000000',103,1,NULL), +('export_scene','3','settlement_export',3,NULL,NULL,'N','000000',103,1,NULL), +('fixed_shipping_type','1','固定运费',1,NULL,NULL,'Y','000000',103,1,NULL), +('fixed_shipping_type','2','手动填写运费',2,NULL,NULL,'N','000000',103,1,NULL), +('flow_package_enabled','1','启用',0,'success','','N','000000',103,1,''), +('flow_package_enabled','0','停用',1,'danger','','N','000000',103,1,''), +('global_enable','0','启用',0,'success','','','000000',103,1,''), +('global_enable','1','停用',1,'danger','','','000000',103,1,''), +('global_yes_or_no','0','是',0,'success','','','000000',103,1,''), +('global_yes_or_no','1','否',1,'danger','','','000000',103,1,''), +('income_expense_type','0','收入',0,'warning','','','000000',103,1,''), +('income_expense_type','1','支出',1,'primary','','','000000',103,1,''), +('is_need_commission','0','分佣',0,'primary','','','000000',103,1,''), +('is_need_commission','1','不分佣',1,'primary','','','000000',103,1,''), +('is_recall','0','未撤回',0,'primary','','','000000',103,1,''), +('is_recall','1','已撤回',1,'danger','','','000000',103,1,''), +('is_show','1','显示',0,NULL,NULL,'Y','000000',103,1,NULL), +('is_show','0','不显示',1,NULL,NULL,'N','000000',103,1,NULL), +('message_type','1','系统通知',0,'primary','','','000000',103,1,''), +('message_type','2','活动通知',1,'primary','','','000000',103,1,''), +('message_type','3','订单通知',2,'primary','','','000000',103,1,''), +('message_type','4','账户通知',3,'primary','','','000000',103,1,''), +('method','1','POST',0,'primary','','','000000',103,1,''), +('method','2','PUT',1,'primary','','','000000',103,1,''), +('method','3','DELETE',2,'primary','','','000000',103,1,''), +('method','4','GET',3,'primary','','','000000',103,1,''), +('operation_type','0','创建',0,'primary','','','000000',103,1,''), +('operation_type','1','分派',1,'primary','','','000000',103,1,''), +('operation_type','2','处理',2,'primary','','','000000',103,1,''), +('operation_type','3','完成',3,'primary','','','000000',103,1,''), +('operation_type','4','关单',4,'primary','','','000000',103,1,''), +('operation_type','5','取消',5,'primary','','','000000',103,1,''), +('operators','1','移动',1,'','','','000000',103,1,''), +('operators','2','联通',2,'','','','000000',103,1,''), +('operators','3','电信',3,'','','','000000',103,1,''), +('order_status','0','待确定,待支付',0,NULL,NULL,'Y','000000',103,1,NULL), +('order_status','1','已确定,待发货',1,NULL,NULL,'N','000000',103,1,NULL), +('order_status','2','处理中,已发货',2,NULL,NULL,'N','000000',103,1,NULL), +('order_status','3','已取消',3,NULL,NULL,'N','000000',103,1,NULL), +('order_status','4','无效',4,NULL,NULL,'N','000000',103,1,NULL), +('order_status','5','已完成',5,NULL,NULL,'N','000000',103,1,NULL), +('order_type','1','卡订购',1,'primary','','','000000',103,1,''), +('order_type','2','卡续费',2,'primary','','','000000',103,1,''), +('order_type','3','卡变更',3,'primary','','','000000',103,1,''), +('oss_access_policy','0','私有',1,'orange','','','000000',103,1,''), +('oss_access_policy','1','公开',2,'primary','','','000000',103,1,''), +('oss_access_policy','2','自定义',3,'','','','000000',103,1,''), +('package_codes','400','池套餐001',1,'default','','','000000',103,1,''), +('package_codes','["dx-300m-3y"]','池套餐002',2,'default','','','000000',103,1,''), +('package_type','101','单卡流量套餐',1,'','','','000000',103,1,''), +('package_type','102','池卡流量套餐',2,'','','','000000',103,1,''), +('package_type','103','单卡流量加油包',3,'','','','000000',103,1,''), +('package_type','104','池卡流量加油包',4,'','','','000000',103,1,''), +('package_type','201','单卡短信套餐',5,'','','','000000',103,1,''), +('package_type','203','单卡短信加油包',6,'','','','000000',103,1,''), +('package_type','301','单卡语音套餐',7,'','','','000000',103,1,''), +('package_type','303','单卡语音加油包',8,'','','','000000',103,1,''), +('package_type','401','单卡国漫套餐',8,'','','','000000',103,1,''), +('package_type','403','单卡国漫加油包',9,'','','','000000',103,1,''), +('pay_mode','0','一次性购买',0,NULL,NULL,'Y','000000',103,1,NULL), +('pay_mode','1','包年包月',1,NULL,NULL,'N','000000',103,1,NULL), +('pay_mode','2','按量付费',2,NULL,NULL,'N','000000',103,1,NULL), +('pay_status','0','未支付',0,NULL,NULL,'Y','000000',103,1,NULL), +('pay_status','1','支付中',1,NULL,NULL,'N','000000',103,1,NULL), +('pay_status','2','已支付',2,NULL,NULL,'N','000000',103,1,NULL), +('pay_status','3','退款中',3,NULL,NULL,'N','000000',103,1,NULL), +('pay_status','4','部分退款',4,NULL,NULL,'N','000000',103,1,NULL), +('pay_status','5','已退款',5,NULL,NULL,'N','000000',103,1,NULL), +('pay_type','1','在线支付',1,'primary','','','000000',103,1,''), +('pay_type','2','货到付款',2,'primary','','','000000',103,1,''), +('pay_type','3','线下支付',3,'primary','','','000000',103,1,''), +('pool_package_code','100','套餐100',1,'default','','','000000',103,1,''), +('pool_package_code','400','套餐400',1,'default','','','000000',103,1,''), +('process_status','0','待处理',0,NULL,NULL,'Y','000000',103,1,NULL), +('process_status','1','处理汇总',1,NULL,NULL,'N','000000',103,1,NULL), +('process_status','2','成功',2,NULL,NULL,'N','000000',103,1,NULL), +('process_status','3','失败',3,NULL,NULL,'N','000000',103,1,NULL), +('product_status','0','下架',0,NULL,NULL,'N','000000',103,1,NULL), +('product_status','1','上架',1,NULL,NULL,'Y','000000',103,1,NULL), +('product_type','1','卡',1,NULL,NULL,'Y','000000',103,1,NULL), +('product_type','2','模组',2,NULL,NULL,'N','000000',103,1,NULL), +('product_type','3','设备',3,NULL,NULL,'N','000000',103,1,NULL), +('product_type','4','普通商品',4,NULL,NULL,'N','000000',103,1,NULL), +('product_type','5','虚拟商品',5,NULL,NULL,'N','000000',103,1,NULL), +('product_type','6','卡密商品',6,NULL,NULL,'N','000000',103,1,NULL), +('product_type','7','付费内容',7,NULL,NULL,'N','000000',103,1,NULL), +('repayment_method','0','余额',0,NULL,NULL,'Y','000000',103,1,NULL), +('repayment_method','1','银行卡',1,NULL,NULL,'N','000000',103,1,NULL), +('repayment_method','2','支付宝',2,NULL,NULL,'N','000000',103,1,NULL), +('repayment_method','3','微信',3,NULL,NULL,'N','000000',103,1,NULL), +('resource_export_scene','1','卡入库结果',0,'primary','','N','000000',103,1,'Excel 批量卡入库结果文件'), +('resource_export_scene','2','卡出库结果',0,'primary','','N','000000',103,1,'Excel 批量卡出库结果文件(预留)'), +('resource_export_scene','3','卡划拨结果',0,'primary','','N','000000',103,1,'Excel 批量卡划拨结果文件(预留)'), +('resource_type','1','Card',0,'primary','','N','000000',103,1,'批量结果 Excel 文件'), +('resource_type','2','Customer',2,NULL,NULL,'N','000000',103,1,NULL), +('resource_type','3','Package',3,NULL,NULL,'N','000000',103,1,NULL), +('resource_type','4','recharge_record',4,NULL,NULL,'N','000000',103,1,NULL), +('resource_type','5','profit_record',5,NULL,NULL,'N','000000',103,1,NULL), +('resource_type','6','settlement_report',6,NULL,NULL,'N','000000',103,1,NULL), +('return_status','0','未退款',0,NULL,NULL,'Y','000000',103,1,NULL), +('return_status','1','待审核',1,NULL,NULL,'N','000000',103,1,NULL), +('return_status','2','执行中',2,NULL,NULL,'N','000000',103,1,NULL), +('return_status','3','部分退货',3,NULL,NULL,'N','000000',103,1,NULL), +('return_status','4','退货成功',4,NULL,NULL,'N','000000',103,1,NULL), +('run_result','0','待运行',0,'info','','N','000000',103,1,NULL), +('run_result','1','运行中',1,'primary','','N','000000',103,1,NULL), +('run_result','2','成功',2,'success','','N','000000',103,1,NULL), +('run_result','3','失败',3,'danger','','N','000000',103,1,NULL), +('run_result','4','部分成功',4,'warning','','N','000000',103,1,NULL), +('send_user_type','1','代理商',0,'primary','','','000000',103,1,''), +('send_user_type','2','终端用户',1,'warning','','','000000',103,1,''), +('share_enabled','0','否',0,'danger','','','000000',103,1,''), +('share_enabled','1','是',1,'primary','','','000000',103,1,''), +('shipping_method','1','物流',1,NULL,NULL,'Y','000000',103,1,NULL), +('shipping_method','2','商家自提',2,NULL,NULL,'N','000000',103,1,NULL), +('shipping_method','3','无需配送',3,NULL,NULL,'N','000000',103,1,NULL), +('shipping_status','0','未发货',0,NULL,NULL,'Y','000000',103,1,NULL), +('shipping_status','1','已发货',1,NULL,NULL,'N','000000',103,1,NULL), +('shipping_status','2','已收货',2,NULL,NULL,'N','000000',103,1,NULL), +('shipping_status','4','退货',4,NULL,NULL,'N','000000',103,1,NULL), +('sim_card_inbound_import_status','failed','失败',0,'danger','','N','000000',103,1,'文件、校验或业务处理失败'), +('sim_card_inbound_import_status','success','成功',0,'success','','N','000000',103,1,'整批导入成功'), +('system_enabled_status','0','未启用',1,'warning','','','000000',103,1,''), +('system_enabled_status','1','启用',2,'primary','','','000000',103,1,''), +('sys_common_status','0','成功',1,'primary','','N','000000',103,1,'正常状态'), +('sys_common_status','1','失败',2,'danger','','N','000000',103,1,'停用状态'), +('sys_dept_type','0','部门',0,'','','','000000',103,1,''), +('sys_dept_type','1','公司',1,'green','','','000000',103,1,''), +('sys_device_type','android','安卓',0,'default','','N','000000',103,1,'安卓'), +('sys_device_type','ios','iOS',0,'default','','N','000000',103,1,'iOS'), +('sys_device_type','pc','PC',0,'default','','N','000000',103,1,'PC'), +('sys_device_type','xcx','小程序',0,'default','','N','000000',103,1,'小程序'), +('sys_gen_status','0','生成成功',1,'success','','','000000',103,1,''), +('sys_gen_status','1','未生成',2,'','','','000000',103,1,''), +('sys_gen_status','2','生成失败',3,'danger','','','000000',103,1,''), +('sys_grant_type','email','邮件认证',0,'default','el-check-tag','N','000000',103,1,'邮件认证'), +('sys_grant_type','password','密码认证',0,'default','el-check-tag','N','000000',103,1,'密码认证'), +('sys_grant_type','sms','短信认证',0,'default','el-check-tag','N','000000',103,1,'短信认证'), +('sys_grant_type','social','三方登录认证',0,'default','el-check-tag','N','000000',103,1,'三方登录认证'), +('sys_grant_type','xcx','小程序认证',0,'default','el-check-tag','N','000000',103,1,'小程序认证'), +('sys_job_concurrent','0','允许',1,'','','','000000',103,1,''), +('sys_job_concurrent','1','禁止',2,'','','','000000',103,1,''), +('sys_job_group','0','默认',1,'','','','000000',103,1,''), +('sys_job_group','1','系统',1,'','','','000000',103,1,''), +('sys_job_group','2','数据中心',2,'','','','000000',103,1,''), +('sys_job_group','3','预警',3,'','','','000000',103,1,''), +('sys_job_group','4','卡数据',4,'','','','000000',103,1,''), +('sys_job_group','5','财务',5,'','','','000000',103,1,''), +('sys_job_group','6','流量池',6,'','','','000000',103,1,''), +('sys_job_group','7','卡管控',7,'','','','000000',103,1,''), +('sys_job_group','8','套餐',8,'','','','000000',103,1,''), +('sys_job_group','9','测试',9,'','','','000000',103,1,''), +('sys_missfire_policy','1','多次执行',1,'','','','000000',103,1,''), +('sys_missfire_policy','2','执行一次',2,'','','','000000',103,1,''), +('sys_normal_disable','0','正常',1,'primary','','','000000',103,1,'正常状态'), +('sys_normal_disable','1','停用',2,'danger','','','000000',103,1,'停用状态'), +('sys_notice_status','0','正常',1,'primary','','Y','000000',103,1,'正常状态'), +('sys_notice_status','1','关闭',2,'danger','','N','000000',103,1,'关闭状态'), +('sys_notice_type','1','通知',1,'warning','','Y','000000',103,1,'通知'), +('sys_notice_type','2','公告',2,'success','','N','000000',103,1,'公告'), +('sys_oper_type','1','新增',1,'info','','N','000000',103,1,'新增操作'), +('sys_oper_type','2','修改',2,'info','','N','000000',103,1,'修改操作'), +('sys_oper_type','3','删除',3,'danger','','N','000000',103,1,'删除操作'), +('sys_oper_type','4','授权',4,'primary','','N','000000',103,1,'授权操作'), +('sys_oper_type','5','导出',5,'warning','','N','000000',103,1,'导出操作'), +('sys_oper_type','6','导入',6,'warning','','N','000000',103,1,'导入操作'), +('sys_oper_type','7','强退',7,'danger','','N','000000',103,1,'强退操作'), +('sys_oper_type','8','生成代码',8,'warning','','N','000000',103,1,'生成操作'), +('sys_oper_type','9','清空数据',9,'danger','','N','000000',103,1,'清空操作'), +('sys_oper_type','0','其他',99,'info','','N','000000',103,1,'其他操作'), +('sys_show_hide','0','显示',1,'primary','','Y','000000',103,1,'显示菜单'), +('sys_show_hide','1','隐藏',2,'danger','','N','000000',103,1,'隐藏菜单'), +('sys_status','0','正常',0,NULL,NULL,'Y','000000',103,1,NULL), +('sys_status','1','停用',1,NULL,NULL,'N','000000',103,1,NULL), +('sys_user_sex','0','男',1,'','','Y','000000',103,1,'性别男'), +('sys_user_sex','1','女',2,'','','N','000000',103,1,'性别女'), +('sys_user_sex','2','未知',3,'','','N','000000',103,1,'性别未知'), +('sys_yes_no','Y','是',1,'primary','','Y','000000',103,1,'系统默认是'), +('sys_yes_no','N','否',2,'danger','','N','000000',103,1,'系统默认否'), +('sys_yes_no_num','0','是',1,'primary','','','000000',103,1,''), +('sys_yes_no_num','1','否',2,'danger','','','000000',103,1,''), +('transaction_channel','1','支付宝',0,'primary','','','000000',103,1,''), +('transaction_channel','2','微信',1,'primary','','','000000',103,1,''), +('transaction_channel','3','余额',2,'primary','','','000000',103,1,''), +('transaction_status','0','待支付',0,'warning','','','000000',103,1,''), +('transaction_status','1','已支付',1,'primary','','','000000',103,1,''), +('transaction_status','2','已过期',2,'danger','','','000000',103,1,''), +('transaction_status','3','交易失败',3,'danger','','','000000',103,1,''), +('transaction_type','0','充值',0,'primary','','','000000',103,1,''), +('transaction_type','1','消费',1,'warning','','','000000',103,1,''), +('transaction_type','2','转可提现',2,'primary','','','000000',103,1,''), +('transaction_type','3','可提现转入',3,'primary','','','000000',103,1,''), +('transaction_type','4','人工调整',4,'primary','','','000000',103,1,''), +('t_agent_scope_type','0','所有客户',0,'primary','','','000000',103,1,''), +('t_agent_scope_type','1','指定客户',1,'primary','','','000000',103,1,''), +('t_batch_execution_mode','0','未知',0,'primary','','','000000',103,1,''), +('t_batch_execution_mode','1','单卡',10,'primary','','','000000',103,1,''), +('t_batch_execution_mode','2','批量',20,'primary','','','000000',103,1,''), +('t_batch_source_channel','console','控制台',10,'primary','','','000000',103,1,'控制台认证入口创建的批次'), +('t_batch_source_channel','mini_program','小程序',20,'primary','','','000000',103,1,'小程序及其 H5 用户端入口创建的批次'), +('t_batch_source_channel','api','API',30,'primary','','','000000',103,1,'开放 API 验签或认证入口创建的批次'), +('t_batch_source_channel','system','系统任务',40,'primary','','','000000',103,1,'独立调度或自动业务任务创建的批次'), +('t_batch_source_channel','legacy','历史未知',90,'primary','','','000000',103,1,'历史记录或无法确认真实来源的批次,不代表实际发起入口'), +('t_batch_source_type','0','批次选择',0,'primary','','','000000',103,1,''), +('t_batch_source_type','1','连号',1,'primary','','','000000',103,1,''), +('t_batch_source_type','2','批量输入',2,'primary','','','000000',103,1,''), +('t_batch_source_type','3','文件',3,'primary','','','000000',103,1,''), +('t_batch_source_type','4','定时任务',4,'primary','','','000000',103,1,''), +('t_billing_method','1','月',0,'primary','','','000000',103,1,''), +('t_billing_method','2','年',1,'primary','','','000000',103,1,''), +('t_boss_card_status','7','库存',1,'default','','','000000',103,1,''), +('t_boss_card_status','1','待激活',2,'warning','','','000000',103,1,''), +('t_boss_card_status','6','可测试',3,'info','','','000000',103,1,''), +('t_boss_card_status','2','已激活',4,'success','','','000000',103,1,''), +('t_boss_card_status','4','停机',5,'danger','','','000000',103,1,''), +('t_boss_card_status','8','预销户',6,'warning','','','000000',103,1,''), +('t_boss_card_status','9','已销户',7,'info','','','000000',103,1,''), +('t_boss_card_status','0','未知',99,'default','','','000000',103,1,''), +('t_cardInfo_dimension','1','使用流量',1,'default','','','000000',103,1,''), +('t_cardInfo_dimension','2','剩余流量',1,'default','','','000000',103,1,''), +('t_cardInfo_dimensionStatus','!=','!=',1,'default','','','000000',103,1,''), +('t_cardInfo_dimensionStatus','<','<',1,'default','','','000000',103,1,''), +('t_cardInfo_dimensionStatus','<=','<=',1,'default','','','000000',103,1,''), +('t_cardInfo_dimensionStatus','=','=',1,'default','','','000000',103,1,''), +('t_cardInfo_dimensionStatus','>','>',1,'default','','','000000',103,1,''), +('t_cardInfo_dimensionStatus','>=','>=',1,'default','','','000000',103,1,''), +('t_cardInfo_selectCondition','iccid','ICCID',1,'default','','','000000',103,1,''), +('t_cardInfo_selectCondition','imei','IMEI',1,'default','','','000000',103,1,''), +('t_cardInfo_selectCondition','imsi','IMSI',1,'default','','','000000',103,1,''), +('t_cardInfo_selectCondition','msisdn','MSISDN',1,'default','','','000000',103,1,''), +('t_cardInfo_sortType','0','升序',1,'default','','','000000',103,1,''), +('t_cardInfo_sortType','1','降序',1,'default','','','000000',103,1,''), +('t_cardInfo_sortValue','1','iccid',1,'default','','','000000',103,1,''), +('t_cardInfo_sortValue','2','msisdn',1,'default','','','000000',103,1,''), +('t_cardInfo_sortValue','3','imsi',1,'default','','','000000',103,1,''), +('t_cardInfo_sortValue','4','流量用量',1,'default','','','000000',103,1,''), +('t_cardInfo_sortValue','5','激活日期',1,'default','','','000000',103,1,''), +('t_cardInfo_sortValue','6','流量到期日期',1,'default','','','000000',103,1,''), +('t_cardInfo_sortValue','7','状态同步日期',1,'default','','','000000',103,1,''), +('t_cardInfo_sortValue','8','出库时间',1,'default','','','000000',103,1,''), +('t_cardInfo_timeType','0','开卡时间',1,'default','','','000000',103,1,''), +('t_cardInfo_timeType','1','激活时间',1,'default','','','000000',103,1,''), +('t_cardInfo_timeType','2','入库时间',1,'default','','','000000',103,1,''), +('t_cardInfo_timeType','3','出库时间',3,'default','','','000000',103,1,''), +('t_cardInfo_timeType','4','到期时间',4,'default','','','000000',103,1,''), +('t_cardInfo_timeType','5','创建时间',5,'default','','','000000',103,1,''), +('t_cardInfo_timeType','6','流量同步时间',6,'default','','','000000',103,1,''), +('t_cardInfo_timeType','7','状态同步时间',7,'default','','','000000',103,1,''), +('t_card_type','1','通用插拔 SIM 卡',0,'primary','','','000000',103,1,''), +('t_card_type','2','贴片卡 5×6mm',1,'primary','','','000000',103,1,''), +('t_card_type','3','贴片卡 2×2mm',2,'primary','','','000000',103,1,''), +('t_card_type','4','消费级插拔物联卡',3,'primary','','','000000',103,1,''), +('t_card_type','5','工业级插拔物联卡',4,'primary','','','000000',103,1,''), +('t_card_type','6','消费级贴片物联卡',5,'primary','','','000000',103,1,''), +('t_card_type','7','工业级贴片物联卡',6,'primary','','','000000',103,1,''), +('t_channels_status','0','启用',0,'primary','','','000000',103,1,''), +('t_channels_status','1','停用',1,'danger','','','000000',103,1,''), +('t_channel_docking_status','1','接口申请中',1,'default','','','000000',103,1,''), +('t_channel_docking_status','2','不需要对接',2,'danger','','','000000',103,1,''), +('t_channel_docking_status','6','对接中',3,'warning','','','000000',103,1,''), +('t_channel_docking_status','3','测试中',4,'primary','','','000000',103,1,''), +('t_channel_docking_status','4','已对接',5,'success','','','000000',103,1,''), +('t_channel_docking_status','5','接口订阅不全',6,'warning','','','000000',103,1,''), +('t_channel_sync_enabled','0','是',0,'success','','','000000',103,1,''), +('t_channel_sync_enabled','1','否',1,'danger','','','000000',103,1,''), +('t_net_model','1','3G',1,'default','','','000000',103,1,''), +('t_net_model','10','移动4G',1,'default','','','000000',103,1,''), +('t_net_model','11','联通NB',1,'default','','','000000',103,1,''), +('t_net_model','12','联通4G',1,'default','','','000000',103,1,''), +('t_net_model','13','电信4G',1,'default','','','000000',103,1,''), +('t_net_model','14','RedCap',1,'default','','','000000',103,1,''), +('t_net_model','2','2G',1,'default','','','000000',103,1,''), +('t_net_model','3','4G',1,'default','','','000000',103,1,''), +('t_net_model','4','5G',1,'default','','','000000',103,1,''), +('t_net_model','5','NB-IOT',1,'default','','','000000',103,1,''), +('t_net_model','6','5G-SA',1,'default','','','000000',103,1,''), +('t_net_model','7','5G-NSA',1,'default','','','000000',103,1,''), +('t_net_model','8','2G/3G',1,'default','','','000000',103,1,''), +('t_net_model','9','电信NB',1,'default','','','000000',103,1,''), +('t_operators','1','移动',0,'primary','','','000000',103,1,''), +('t_operators','2','联通',1,'primary','','','000000',103,1,''), +('t_operators','3','电信',2,'primary','','','000000',103,1,''), +('t_package_price_source','system','系统级',0,'primary','','','000000',103,1,''), +('t_package_price_source','agentDefault','本级默认',1,'primary','','','000000',103,1,''), +('t_package_price_source','target','下级专属',3,'primary','','','000000',103,1,''), +('t_package_status','0','无套餐',0,'primary','','','000000',103,1,''), +('t_package_status','1','待生效',1,'primary','','','000000',103,1,''), +('t_package_status','2','生效中',2,'primary','','','000000',103,1,''), +('t_package_status','3','已过期',3,'primary','','','000000',103,1,''), +('t_package_type','101','卡套餐',101,NULL,NULL,'N','000000',103,1,'卡套餐'), +('t_package_type','102','池套餐',102,NULL,NULL,'N','000000',103,1,'池套餐'), +('t_package_type','103','单卡加油包',103,NULL,NULL,'N','000000',103,1,'单卡加油包'), +('t_package_type','104','池卡加油包',104,NULL,NULL,'N','000000',103,1,'池卡加油包'), +('t_pool_status','0','正常',0,'primary','','','000000',103,1,''), +('t_pool_status','1','停用',1,'primary','','','000000',103,1,''), +('t_pool_status','2','锁定',2,'primary','','','000000',103,1,''), +('t_sim_flow_package_info','101','卡套餐',1,'','','','000000',103,1,''), +('t_sim_flow_package_info','102','池套餐',2,'','','','000000',103,1,''), +('t_sim_flow_package_info','103','单卡加油包',3,'','','','000000',103,1,''), +('t_sim_flow_package_info','104','池卡加油包',4,'','','','000000',103,1,''), +('t_warn_auto_action','3','是',1,'default','','','000000',103,1,''), +('t_warn_auto_action','0','否',2,'default','','','000000',103,1,''), +('t_warn_enabled','1','启用',1,'default','','','000000',103,1,''), +('t_warn_enabled','0','停用',2,'default','','','000000',103,1,''), +('t_warn_method','3','站内提醒',1,'default','','','000000',103,1,''), +('t_warn_method','1','邮箱',2,'default','','','000000',103,1,''), +('t_warn_method','0','短信',3,'default','','','000000',103,1,''), +('t_warn_unit','1','流量阈值(MB)',1,'default','','','000000',103,1,''), +('t_warn_unit','2','流量池百分比',2,'default','','','000000',103,1,''), +('warn_methods','0','短信',0,NULL,NULL,'Y','000000',103,1,NULL), +('warn_methods','1','邮箱',1,NULL,NULL,'N','000000',103,1,NULL), +('warn_methods','2','电话',2,NULL,NULL,'N','000000',103,1,NULL), +('warn_methods','3','平台消息',3,NULL,NULL,'N','000000',103,1,NULL), +('withdraw_amount_status','0','正常',0,NULL,NULL,'Y','000000',103,1,NULL), +('withdraw_amount_status','1','冻结',1,NULL,NULL,'N','000000',103,1,NULL), +('wo_type','0','卡',6,'primary','','','000000',103,1,''), +('wo_type','1','模组',7,'primary','','','000000',103,1,''), +('wo_type','2','设备',8,'primary','','','000000',103,1,''), +('wo_type','3','订单',9,'primary','','','000000',103,1,''), +('wo_type','4','余额',10,'primary','','','000000',103,1,''), +('wo_type','5','提现',11,'primary','','','000000',103,1,''), +('yesno_enum','1','是',0,NULL,NULL,'Y','000000',103,1,NULL), +('yesno_enum','0','否',1,NULL,NULL,'N','000000',103,1,NULL); + + +-- ============================================================ +-- Mock 通道(演示卡全部挂在此通道,缺则卡片管理异常) +-- ============================================================ + +INSERT INTO `t_sim_channels` ( + `id`,`temp_key`,`chan_key`,`chan_name`,`chan_config`,`chan_status`,`share_enabled`, + `chan_alias`,`region_code`,`app_key`,`app_secret`,`access_token`, + `access_token_created`,`access_token_expire`,`refresh_token`, + `login_user`,`login_password`,`login_url`,`remark`,`tenant_id`, + `created_dept`,`created_by`,`created_at`,`updated_by`,`updated_at`, + `operator`,`is_normal`,`docking_status`,`sync_enabled`, + `card_info_count`,`stock_card_count`,`cancellation_card_count` +) VALUES ( + 34,'sim_yd_mock_v5','channel_yd_mock','移动模拟通道','{}',0,0, + '中国移动00',NULL,'100059999270000006','password123',NULL, + NULL,NULL,'', + NULL,NULL,'http://onelink-mock:8080/',NULL,'000000', + 1,1,'2026-10-19 15:35:03',NULL,NOW(), + 1,1,NULL,0, + 100,50100,0 +) +ON DUPLICATE KEY UPDATE + `temp_key` = VALUES(`temp_key`), + `chan_name` = VALUES(`chan_name`), + `chan_config` = VALUES(`chan_config`), + `chan_status` = VALUES(`chan_status`), + `chan_alias` = VALUES(`chan_alias`), + `app_key` = VALUES(`app_key`), + `app_secret` = VALUES(`app_secret`), + `login_url` = VALUES(`login_url`), + `operator` = VALUES(`operator`), + `is_normal` = VALUES(`is_normal`), + `sync_enabled` = VALUES(`sync_enabled`), + `updated_at` = VALUES(`updated_at`), + `card_info_count` = VALUES(`card_info_count`), + `stock_card_count` = VALUES(`stock_card_count`), + `cancellation_card_count` = VALUES(`cancellation_card_count`); + + +-- ============================================================ +-- 代理下发模板参数与角色下发标记 +-- ============================================================ + +START TRANSACTION; + +-- 模板校验同时要求:启用、非超管、is_pass=1、data_scope=4、机构有效, +-- created_dept 为 0/NULL 或等于 dept_id,且菜单不能使用全部/自定义范围。 +UPDATE `sys_role` + SET `created_dept` = `dept_id`, `status` = '0', `is_pass` = 1, `data_scope` = '4' + WHERE `tenant_id` = '000000' AND `role_id` = 2 AND `dept_id` = 1 + AND `deleted_at` IS NULL; + +DELETE FROM `sys_config` + WHERE `tenant_id` = '000000' AND `config_key` = 'agent.role.template.role_id'; +INSERT INTO `sys_config` + (`tenant_id`,`config_name`,`config_key`,`config_value`,`config_type`,`created_dept`,`created_by`,`remark`) +VALUES + ('000000','代理角色下发-平台模板角色ID','agent.role.template.role_id','2','Y',1,1, + '演示模板:dept 1 的现有 role 2;生产 cad19df 中代理机构仍需本级唯一 is_pass=1 角色'); + +-- 只处理已存在、已绑定的演示一级代理角色;不恢复或新建已删除的角色。 +UPDATE `sys_role` r +JOIN `sys_dept` d ON d.`tenant_id` = r.`tenant_id` + AND d.`dept_id` = r.`dept_id` AND d.`dept_role` = r.`role_id` + SET r.`is_pass` = 1 + WHERE r.`tenant_id` = '000000' AND r.`role_id` = 82 AND r.`dept_id` = 172 + AND r.`deleted_at` IS NULL AND r.`status` = '0' + AND d.`deleted_at` IS NULL AND d.`status` = '0' + AND 0 = ( + SELECT other_roles.n FROM ( + SELECT COUNT(*) AS n FROM `sys_role` + WHERE `tenant_id` = '000000' AND `dept_id` = 172 AND `role_id` <> 82 + AND `is_pass` = 1 AND `deleted_at` IS NULL + ) other_roles + ); +COMMIT; + +-- 自检输出仅反映配置条件,不能代替页面创建下级的端到端验收。 +SELECT COUNT(*) AS template_parameter_rows + FROM `sys_config` + WHERE `tenant_id` = '000000' AND `config_key` = 'agent.role.template.role_id'; +SELECT `role_id`, `dept_id`, `status`, `is_pass`, `data_scope`, `created_dept` + FROM `sys_role` WHERE `tenant_id` = '000000' AND `role_id` IN (2,82) + AND `deleted_at` IS NULL; +SELECT d.`dept_id`, d.`dept_role`, COUNT(r.`role_id`) AS enabled_distribution_roles + FROM `sys_dept` d + LEFT JOIN `sys_role` r ON r.`tenant_id` = d.`tenant_id` AND r.`dept_id` = d.`dept_id` + AND r.`status` = '0' AND r.`is_pass` = 1 AND r.`deleted_at` IS NULL + WHERE d.`tenant_id` = '000000' AND d.`dept_id` = 172 AND d.`deleted_at` IS NULL + GROUP BY d.`dept_id`, d.`dept_role`; + + +-- ============================================================ +-- 定时任务(默认全部停用,避免自动全量同步打满机器) +-- ============================================================ + +-- 1-8 为 RuoYi 上游演示垃圾数据(生产亦为软删除),演示环境直接物理删除。 +DELETE FROM `sys_job` WHERE `job_id` BETWEEN 1 AND 8; + +-- 9-25/41/42 按生产当前配置整体重建(含 job 14:生产可见,演示此前被软删除)。 +DELETE FROM `sys_job` WHERE `job_id` BETWEEN 9 AND 42; + +INSERT INTO `sys_job` + (`job_id`, `job_name`, `job_params`, `job_group`, `invoke_target`, `cron_expression`, + `misfire_policy`, `concurrent`, `status`, `remark`, + `created_dept`, `created_by`, `created_at`, `updated_by`, `updated_at`, `deleted_by`, `deleted_at`) +VALUES +(9, '同步卡用量', '', 1, 'syns_usage', '0 0 2 * * ?', 1, 0, '1', '', 100, 1, '2026-06-04 21:12:34', 1, '2026-10-27 00:00:00', NULL, NULL), +(10, '同步卡运营商状态', '', 0, 'syns_sim_status', '0 0 2 * * ?', 1, 0, '1', '', 100, 1, '2026-06-04 21:12:34', 1, '2026-10-27 00:00:00', NULL, NULL), +(11, '月用量记录时序', '', 4, 'sync_traffic_usage_monthly', '0 40 8 1 * ?', 1, 0, '1', '', 100, 1, '2026-06-21 11:53:03', 1, '2026-10-27 00:00:00', NULL, NULL), +(12, '日用量记录时序', '', 4, 'sync_traffic_usage_daily', '0 25 6 * * ?', 1, 0, '1', '', 100, 1, '2026-06-22 00:11:11', 1, '2026-10-27 00:00:00', NULL, NULL), +(13, '全量预警扫描', '', 9, 'scan_sim_warning', '30 0 1 * * *', 1, 1, '1', '单卡,流量池', 100, 1, '2026-07-24 10:18:00', 1, '2026-10-27 00:00:00', NULL, NULL), +(14, ' 预警 - SIM卡到期扫描','', 0, 'notify_package_expiry', '0 0 9 * * ?', 1, 1, '1', '', 100, 1, '2026-07-27 14:35:16', 1, '2026-10-27 00:00:00', NULL, NULL), +(15, '流量池用量扫描', '', 3, 'check_flow_pool_warning', '0 */15 * * * ?', 1, 1, '1', '', 100, 1, '2026-07-27 14:37:34', 1, '2026-10-27 00:00:00', NULL, NULL), +(16, 'SIM卡用量扫描', '', 3, 'scan_sim_traffic_warning', '0 */15 * * * ?', 1, 1, '1', '', 100, 1, '2026-07-27 14:37:59', 1, '2026-10-27 00:00:00', NULL, NULL), +(17, '达量断网扫描', '', 7, 'check_traffic_cutoff', '0 */15 * * * ?', 1, 1, '1', '', 100, 1, '2026-07-27 15:37:08', 1, '2026-10-27 00:00:00', NULL, NULL), +(18, '生命周期流转', '', 8, 'sync_package_lifecycle', '0 */15 * * * ?', 1, 1, '1', '', 100, 1, '2026-07-28 16:00:00', 1, '2026-10-27 00:00:00', NULL, NULL), +(19, '可提现账户月账单', '', 5, 'settle_profit_account_month_bill','0 0 4 2 * ?', 1, 0, '1', '', 100, 1, '2026-07-28 16:09:51', 1, '2026-10-27 00:00:00', NULL, NULL), +(20, '消费账户月账单', '', 5, 'settle_consume_account_month_bill','0 0 4 2 * ?', 1, 0, '1', '', 100, 1, '2026-07-28 16:20:25', 1, '2026-10-27 00:00:00', NULL, NULL), +(21, '分润出账', '', 5, 'settle_commission', '0 0 4 * * ?', 1, 0, '1', '', 100, 1, '2026-07-28 16:48:19', 1, '2026-10-27 00:00:00', NULL, NULL), +(22, '卡信息数据同步流量池', '', 6, 'sync_flow_pool_card', '0 0 4 * * ?', 1, 0, '1', '', 100, 1, '2026-07-31 16:16:32', 1, '2026-10-27 00:00:00', NULL, NULL), +(23, '到期预警全量预加载', '', 3, 'PreloadSimExpireWarning', '0 30 23 28-31 * ?', 1, 1, '1', '每月底扫描下下个月到期卡,写入 Redis 候选池', 100, 1, '2026-07-31 17:53:44', 1, '2026-10-27 00:00:00', NULL, NULL), +(24, '定时到期预警扫描', '', 3, 'ScanSimExpireCandidateWarning', '0 0 9 * * ?', 1, 1, '1', '', 100, 1, '2026-07-31 17:54:13', 1, '2026-10-27 00:00:00', NULL, NULL), +(25, '队列-用量同步', '', 4, 'start_traffic_usage_full_sync', '0 30 0 * * ?', 1, 1, '1', '', 100, 1, '2026-10-23 00:00:00', 1, '2026-10-27 00:00:00', NULL, NULL), +(41, '队列-状态同步', '', 4, 'syns_sim_status_queue', '0 30 18 * * ?', 1, 0, '1', '', 100, 1, '2026-10-23 00:00:00', 1, '2026-10-27 00:00:00', NULL, NULL), +(42, '队列-IMEI 同步', '', 4, 'syns_imei_queue', '0 10 20 1/3 * ?', 1, 0, '1', '', 100, 1, '2026-10-23 00:00:00', 1, '2026-10-27 00:00:00', NULL, NULL); + +-- 自检:应与生产一致(可见 19 条、全部停用、分组分布如下) +SELECT COUNT(*) AS visible_total, + SUM(`status` = 0) AS enabled_total, + SUM(`job_group` = 4) AS group_kadata, + SUM(`job_group` = 3) AS group_warning, + SUM(`job_group` = 5) AS group_finance + FROM `sys_job` WHERE `deleted_at` IS NULL; + +SELECT `job_id`, `job_name`, `job_group`, `cron_expression`, `status` + FROM `sys_job` WHERE `deleted_at` IS NULL ORDER BY `job_id`; + + +-- ============================================================ +-- 菜单增量(达量断网按钮权限、全量同步页) +-- ============================================================ + +DELETE FROM `sys_menu` WHERE `menu_id` BETWEEN 421 AND 447; +INSERT INTO `sys_menu` (`menu_id`,`menu_name`,`parent_id`,`order_num`,`path`,`component`,`is_frame`,`is_cache`,`menu_type`,`visible`,`status`,`perms`,`icon`,`created_dept`,`created_by`,`created_at`,`remark`) VALUES +(421,'全量同步',2,7,'full-sync','monitor/full-sync/index','1','0','C','0','0','cpm:iot:fullSyncRuns:view','lucide:refresh-cw',100,1,NOW(),'全量同步结果与手动启动'), +(422,'查看失败明细',421,1,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:failures','#',100,1,NOW(),NULL), +(423,'手动启动同步',421,2,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:start','#',100,1,NOW(),NULL), +(424,'重投失败卡',421,3,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:replay','#',100,1,NOW(),NULL), +(425,'查看重投状态',421,4,'',NULL,'1','0','F','0','0','cpm:iot:fullSyncRuns:replay:view','#',100,1,NOW(),NULL), +(426,'订单',196,10,'TOrder',NULL,'1','0','M','0','0',NULL,NULL,100,1,NOW(),NULL), +(427,'管理员订单',426,11,'indexTwo','iotlcm/tOrder/indexTwo','1','0','C','0','0',NULL,'ant-design:appstore-outlined',100,1,NOW(),NULL), +(428,'获取财务审核记录表列表',354,10,'',NULL,'1','0','F','0','0','gen:tFinanceAuditRecord:list',NULL,100,1,NOW(),NULL), +(429,'获取财务申请表列表',349,10,'',NULL,'1','0','F','0','0','gen:tFinanceApply:list',NULL,100,1,NOW(),NULL), +(430,'获取分层分润概览',334,10,'',NULL,'1','0','F','0','0','common:tFinCommissionDetail:getCommissionOverview',NULL,100,1,NOW(),NULL), +(431,'获取SIM流量池套餐配置表列表',411,10,'',NULL,'1','0','F','0','0','iot:tFlowPackageConfig:list',NULL,100,1,NOW(),NULL), +(432,'敏感定价查看',135,15,'',NULL,'1','0','F','0','0','iot:tSimFlowPackagePrice:sensitive:view',NULL,100,1,NOW(),NULL), +(433,'敏感定价维护',135,15,'',NULL,'1','0','F','0','0','iot:tSimFlowPackagePrice:sensitive:edit',NULL,100,1,NOW(),NULL), +(434,'下载批量卡销户Excel模板',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardCancel:excel:template',NULL,100,1,NOW(),NULL), +(435,'提交Excel批量卡销户',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardCancel:excel:submit',NULL,100,1,NOW(),NULL), +(436,'通道测试',119,10,'',NULL,'1','0','F','0','0','iot:tSimChannels:test',NULL,100,1,NOW(),NULL), +(437,'提交批量输入达量断网配置',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:input:submit',NULL,100,1,NOW(),NULL), +(438,'单卡加油包',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardBindPkg:addPackage',NULL,100,1,NOW(),NULL), +(439,'流量池加油包',257,10,'',NULL,'1','0','F','0','0','iot:tSimPoolBindPackage:addPackage',NULL,100,1,NOW(),NULL), +(440,'看订购表/套餐详情',257,10,'',NULL,'1','0','F','0','0','iot:tSimCardBindPkg:view',NULL,100,1,NOW(),NULL), +(441,'下载达量断网配置Excel模板',416,1,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:excel:template',NULL,100,1,NOW(),NULL), +(442,'提交Excel批量达量断网配置',416,1,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:excel:submit',NULL,100,1,NOW(),NULL), +(443,'提交连号达量断网配置',416,1,'',NULL,'1','0','F','0','0','iot:tSimCardTrafficCutoff:range:submit',NULL,100,1,NOW(),NULL), +(444,'文档中心',0,33,'docs','','1','0','C','0','0',NULL,NULL,100,1,NOW(),NULL), +(445,'Web 使用手册',444,1,'/docs/manual/web/',NULL,'0','0','C','0','0',NULL,NULL,100,1,NOW(),NULL), +(446,'OpenAPI 文档',444,2,'/docs/openapi/v3/',NULL,'0','0','C','0','0',NULL,NULL,100,1,NOW(),NULL), +(447,'获取销售订单列表',427,10,'',NULL,'1','0','F','0','0','iot:tOrder:sellList',NULL,100,1,NOW(),NULL); + +DELETE FROM sys_role_menu WHERE menu_id BETWEEN 421 AND 447; +INSERT INTO sys_role_menu (tenant_id, role_id, menu_id, data_scope) +SELECT '000000', r.role_id, m.menu_id, '0' +FROM (SELECT 2 AS role_id UNION ALL SELECT 82 UNION ALL SELECT 88) r +CROSS JOIN (SELECT menu_id FROM sys_menu WHERE menu_id BETWEEN 421 AND 447) m; + +-- 自检:菜单总数应为 447,新增绑定 81 条 +SELECT COUNT(*) AS menu_total FROM `sys_menu`; +SELECT role_id, COUNT(*) AS menus FROM `sys_role_menu` GROUP BY role_id ORDER BY role_id; + + +-- ============================================================ +-- v1.0.4 前置:导出中心表、通知已读表、channel_id 扩宽、菜单权限 +-- ============================================================ + +-- ------------------------------------------------------------ +-- 1) 导出任务表 +-- ------------------------------------------------------------ +CREATE TABLE IF NOT EXISTS `t_export_task` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `task_no` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务编号(= 执行日志批次编号 = 文件名主体)', + `biz_key` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务标识,如 tSimCardInfo', + `biz_name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称,如 卡信息', + `perm_code` varchar(128) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '导出权限码快照,K1业务过滤用', + `query_params` json DEFAULT NULL COMMENT '筛选条件快照', + `identity_snapshot` json DEFAULT NULL COMMENT '提交时用户身份与角色范围快照,异步执行还原上下文用', + `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态 0排队 2生成中 1已完成 3失败', + `total_count` int NOT NULL DEFAULT '0' COMMENT '导出总行数', + `oss_id` bigint NOT NULL DEFAULT '0' COMMENT 'OSS文件ID', + `file_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件名,= task_no + .xlsx', + `file_size` bigint NOT NULL DEFAULT '0' COMMENT '文件大小(字节)', + `file_md5` varchar(64) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件MD5', + `download_count` int NOT NULL DEFAULT '0' COMMENT '下载次数', + `last_download_time` datetime DEFAULT NULL COMMENT '最后下载时间', + `error_message` varchar(2000) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '失败原因', + `owner_user_id` bigint NOT NULL DEFAULT '0' COMMENT '发起用户ID,K2归属过滤用', + `dept_id` bigint NOT NULL DEFAULT '0' COMMENT '机构ID', + `tenant_id` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户ID', + `created_dept` bigint NOT NULL DEFAULT '0' COMMENT '创建部门ID', + `created_by` bigint NOT NULL DEFAULT '0' COMMENT '创建者ID', + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `start_time` datetime DEFAULT NULL COMMENT '开始生成时间', + `finish_time` datetime DEFAULT NULL COMMENT '完成/失败时间', + `expire_time` datetime DEFAULT NULL COMMENT '文件过期时间', + `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted_time` datetime DEFAULT NULL COMMENT '文件清理时间,NULL表示未清理', + `delete_reason` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件清理原因:user手动删除,expired到期清理', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_task_no` (`task_no`), + KEY `idx_owner_user_id` (`owner_user_id`,`id`), + KEY `idx_dept_id` (`dept_id`), + KEY `idx_status` (`status`), + KEY `idx_perm_code` (`perm_code`), + KEY `idx_expire_time` (`expire_time`), + KEY `idx_export_cleanup` (`deleted_time`,`status`,`expire_time`,`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='导出任务表'; + +-- ------------------------------------------------------------ +-- 2) 通知已读表 +-- ------------------------------------------------------------ +CREATE TABLE IF NOT EXISTS `sys_notice_user` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `notice_id` bigint NOT NULL DEFAULT '0', + `tenant_id` varchar(20) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000', + `notice_title` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `notice_type` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1', + `notice_content` longblob, + `status` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0', + `user_id` bigint NOT NULL DEFAULT '0', + `is_read` tinyint NOT NULL DEFAULT '0', + `created_dept` bigint NOT NULL DEFAULT '0', + `created_by` bigint NOT NULL DEFAULT '0', + `created_at` datetime DEFAULT CURRENT_TIMESTAMP, + `updated_by` bigint DEFAULT NULL, + `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `remark` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_notice_user_unread` (`tenant_id`,`user_id`,`status`,`is_read`), + KEY `idx_notice_id` (`notice_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- ------------------------------------------------------------ +-- 3) 通道关联列改 varchar(64)(迁移 20260920;只改类型不改数据) +-- ------------------------------------------------------------ +ALTER TABLE `card_channel_assoc` + MODIFY COLUMN `channel_id` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '通道编号'; + +-- ------------------------------------------------------------ +-- 4) 菜单 / 权限(先删后插,幂等) +-- 4.1 流量池预警配置独立权限 4 条(admin-svr storage/data/pool_warn_config_permission.sql 的等价物,固定 id) +-- ------------------------------------------------------------ +DELETE FROM `sys_role_menu` WHERE `menu_id` BETWEEN 2115 AND 2123; +DELETE FROM `sys_menu` WHERE `menu_id` BETWEEN 2115 AND 2123; + +INSERT INTO `sys_menu` + (`menu_id`, `menu_name`, `parent_id`, `level`, `tree`, `order_num`, `path`, `component`, + `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, + `created_dept`, `created_by`, `created_at`, `remark`) +VALUES + (2115, '连号流量池预警配置', 257, 2, 'tr_257', 23, '', '', NULL, 1, 0, 'F', '0', '0', 'iot:tSimPoolWarnConfig:range:submit', '#', 100, 1, NOW(), '流量池预警配置(独立权限)'), + (2116, '批量输入流量池预警配置', 257, 2, 'tr_257', 22, '', '', NULL, 1, 0, 'F', '0', '0', 'iot:tSimPoolWarnConfig:input:submit', '#', 100, 1, NOW(), '流量池预警配置(独立权限)'), + (2117, '提交流量池预警配置Excel', 257, 2, 'tr_257', 21, '', '', NULL, 1, 0, 'F', '0', '0', 'iot:tSimPoolWarnConfig:excel:submit', '#', 100, 1, NOW(), '流量池预警配置(独立权限)'), + (2118, '下载流量池预警配置Excel模板', 257, 2, 'tr_257', 20, '', '', NULL, 1, 0, 'F', '0', '0', 'iot:tSimPoolWarnConfig:excel:template', '#', 100, 1, NOW(), '流量池预警配置(独立权限)'), + (2119, '下载中心', 0, 1, NULL, 34, 'downloadCenter', 'iotlcm/downloadCenter/index', NULL, 1, 0, 'C', '0', '0', 'common:downloadCenter:list', '#', 100, 1, NOW(), '导出任务与文件下载'), + (2120, '下载文件', 2119, 2, 'tr_2119', 1, '', '', NULL, 1, 0, 'F', '0', '0', 'common:downloadCenter:download', '#', 100, 1, NOW(), '下载导出文件'), + (2121, '删除任务', 2119, 2, 'tr_2119', 2, '', '', NULL, 1, 0, 'F', '0', '0', 'common:downloadCenter:remove', '#', 100, 1, NOW(), '删除导出任务与文件'), + (2122, '卡基础信息查询', 257, 2, 'tr_257', 1, '', '', NULL, 1, 0, 'F', '0', '0', 'iot:tSimCardBaseQuery:view', '#', 100, 1, NOW(), '卡基础信息查询与导出'), + (2123, '月历史用量查询', 257, 2, 'tr_257', 3, '', '', NULL, 1, 0, 'F', '0', '0', 'iot:tSimCardUsageHistory:view', '#', 100, 1, NOW(), '月历史用量查询与导出'); + +-- 4.2 授权 +-- 下载中心 3 条 → 全部角色(照预演:所有角色都有) +INSERT INTO `sys_role_menu` (`tenant_id`, `role_id`, `menu_id`, `data_scope`) +SELECT '000000', r.`role_id`, m.`menu_id`, 0 +FROM `sys_role` r +JOIN `sys_menu` m ON m.`perms` IN ('common:downloadCenter:list','common:downloadCenter:download','common:downloadCenter:remove') +WHERE r.`status` = '0' AND r.`deleted_at` IS NULL; + +-- 卡基础信息查询 / 月历史用量查询 → dl(代理商)+ enduser(照预演) +INSERT INTO `sys_role_menu` (`tenant_id`, `role_id`, `menu_id`, `data_scope`) +SELECT '000000', r.`role_id`, m.`menu_id`, 0 +FROM `sys_role` r +JOIN `sys_menu` m ON m.`perms` IN ('iot:tSimCardBaseQuery:view','iot:tSimCardUsageHistory:view') +WHERE r.`status` = '0' AND r.`deleted_at` IS NULL AND r.`role_key` IN ('dl','enduser'); + +-- 流量池预警 4 条 → 拥有对应旧权限项(tSimWarningConfig:*)的角色自动补授 +INSERT INTO `sys_role_menu` (`tenant_id`, `role_id`, `menu_id`, `data_scope`) +SELECT old.`tenant_id`, old.`role_id`, new.`menu_id`, old.`data_scope` +FROM `sys_role_menu` old +JOIN `sys_menu` old_menu ON old_menu.`menu_id` = old.`menu_id` +JOIN `sys_menu` new + ON new.`parent_id` = old_menu.`parent_id` + AND new.`perms` = REPLACE(old_menu.`perms`, 'iot:tSimWarningConfig:', 'iot:tSimPoolWarnConfig:') +WHERE old_menu.`perms` IN ( + 'iot:tSimWarningConfig:excel:template', + 'iot:tSimWarningConfig:excel:submit', + 'iot:tSimWarningConfig:input:submit', + 'iot:tSimWarningConfig:range:submit' + ); + +-- ------------------------------------------------------------ +-- 5) 字典 detail_status = 5「未执行」(迁移 20261021) +-- ------------------------------------------------------------ +INSERT INTO `sys_dict_data` ( + `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, + `is_default`, `created_dept`, `created_by`, `created_at`, `remark`) +SELECT '000000', 5, '未执行', '5', 'detail_status', '', 'warning', + 'N', 100, 1, NOW(), '本卡校验通过,本批存在校验失败卡,整批未执行' +FROM `sys_dict_type` AS dict_type +WHERE dict_type.`tenant_id` = '000000' + AND dict_type.`dict_type` = 'detail_status' + AND NOT EXISTS ( + SELECT 1 FROM `sys_dict_data` AS dict_data + WHERE dict_data.`tenant_id` = '000000' + AND dict_data.`dict_type` = 'detail_status' + AND dict_data.`dict_value` = '5' + ); + +-- ------------------------------------------------------------ +-- 6) 套餐到期提醒(企业月度汇总)—— 默认暂停(迁移 20261014) +-- 启用/改调度需在任务管理页操作(直接改库不刷新进程内调度) +-- ------------------------------------------------------------ +INSERT INTO sys_job (job_name, job_params, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, remark, created_at, updated_at) +SELECT '套餐到期提醒(企业月度汇总)', '', '3', 'NotifyMonthlyPackageExpiry', + '0 0 9 15 * ?', 1, 1, '1', '独立月度到期通知任务;默认暂停', NOW(), NOW() +WHERE NOT EXISTS ( + SELECT 1 FROM sys_job WHERE invoke_target = 'NotifyMonthlyPackageExpiry' +); + + +-- ============================================================ +-- 数据修复:sys_dept.ancestors 尾逗号归一化(全新库为空操作) +-- ============================================================ + +DROP TABLE IF EXISTS `_tmp_dept_ancestors_fix`; +CREATE TABLE `_tmp_dept_ancestors_fix` ( + `dept_id` BIGINT NOT NULL, + `ancestors_calc` VARCHAR(255) NOT NULL, + PRIMARY KEY (`dept_id`) +); + +INSERT INTO `_tmp_dept_ancestors_fix` (`dept_id`, `ancestors_calc`) +WITH RECURSIVE `dept_tree` (`dept_id`, `tenant_id`, `ancestors_calc`, `depth`) AS ( + SELECT `dept_id`, `tenant_id`, CAST('0,' AS CHAR(255)), 1 + FROM `sys_dept` + WHERE `parent_id` = 0 + UNION ALL + SELECT d.`dept_id`, d.`tenant_id`, CONCAT(t.`ancestors_calc`, d.`parent_id`, ','), t.`depth` + 1 + FROM `sys_dept` d + JOIN `dept_tree` t ON d.`parent_id` = t.`dept_id` AND d.`tenant_id` = t.`tenant_id` + WHERE t.`depth` < 32 +) +SELECT `dept_id`, `ancestors_calc` FROM `dept_tree`; + +UPDATE `sys_dept` d + JOIN `_tmp_dept_ancestors_fix` t ON t.`dept_id` = d.`dept_id` + SET d.`ancestors` = t.`ancestors_calc` + WHERE d.`ancestors` <> t.`ancestors_calc`; + +DROP TABLE `_tmp_dept_ancestors_fix`; + +-- 自检 1:不应再有非空且不以逗号结尾的 ancestors +SELECT COUNT(*) AS still_missing_trailing_comma + FROM `sys_dept` + WHERE `ancestors` IS NOT NULL AND `ancestors` <> '' AND `ancestors` <> '0,' + AND RIGHT(`ancestors`, 1) <> ','; + +-- 自检 2:复现划拨接口的取数条件(parent_id = 一级代理 + 数据权限展开结果) +SELECT `dept_id`, `dept_name`, `parent_id`, `ancestors` + FROM `sys_dept` + WHERE `deleted_at` IS NULL AND `status` = '0' AND `parent_id` = 172 + AND (`ancestors` LIKE '%,172,%' OR `ancestors` LIKE '%,172') + ORDER BY `dept_id`; + + +-- ============================================================ +-- 业务账号与种子账号口令 +-- ============================================================ + +-- 口令为字面值(不使用环境变量)。改口令须同步修改: +-- docker-compose.yml 的 MYSQL_ROOT_PASSWORD +-- config/*/config.yaml 各服务 database link 的口令 +-- config/*/config.yaml 各服务 database link 的口令 +-- 口令算法:md5( hex(md5(明文)) + md5(salt) ),见 iotlcm-admin-svr utils.go + +CREATE USER IF NOT EXISTS 'u_iotlcm'@'%' + IDENTIFIED WITH mysql_native_password BY 'Iotlcm2026Default'; +GRANT ALL PRIVILEGES ON `db_iotlcm`.* TO 'u_iotlcm'@'%'; + +CREATE DATABASE IF NOT EXISTS `iotdb` + DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +GRANT ALL PRIVILEGES ON `iotdb`.* TO 'u_iotlcm'@'%'; + +FLUSH PRIVILEGES; + +-- 种子账号口令统一重置为部署口令(登录后请逐个修改) +UPDATE `sys_user` SET `password` = MD5(CONCAT(MD5('Iotlcm2026Default'), MD5(`salt`))); +