chore: 初始开源发布

iotlcm-admin-svr:管理后台服务。

- Go module:iotlcm → git.5iot.com/iotlcm-public/iotlcm-admin-svr(729 文件)
- 凭据与地址脱敏:JWT signingKey(含代码里的 MustGet 默认值)、
  MySQL DSN、Redis 口令、告警邮件发件人邮箱全部改为占位;
  私网 IP → 文档地址段;库名 xiujie_admin → iotlcm
- 真实手机号/邮箱 → 合法 11 位编造号 / example.com
- 移除内部资产:CI 触发器、过时 DDL(sql/db_iotlcm.sql)、
  私有依赖 go get 行、明文 registry 登录口令
- 启动 banner 统一 IOTLCM 方块字 + 社区惯例署名
- Dockerfile 改用公共基础镜像
- 拼错的 RADEME.md → README.md,README 重写
- 需要真实数据库的用例改为可用 IOTLCM_TEST_WITH_DB=1 显式启用
- 补 Apache-2.0 LICENSE,LF 行尾 + .gitattributes

数据库 schema 不随本仓发布(生产 DDL 已过时),README 已说明。
This commit is contained in:
MiFaZhan
2026-10-23 14:46:05 +08:00
commit 59eb34976a
1132 changed files with 138197 additions and 0 deletions
@@ -0,0 +1,4 @@
-- card_channel_assoc.channel_id historically mixed primary IDs and numeric channel keys.
-- Store the actual t_sim_channels.chan_key so every environment resolves associations identically.
ALTER TABLE `card_channel_assoc`
MODIFY COLUMN `channel_id` VARCHAR(64) NOT NULL COMMENT '通道编号';
@@ -0,0 +1,4 @@
-- Keep cards offline across billing cycles only after a successful traffic-cutoff action.
ALTER TABLE `t_sim_card_info`
ADD COLUMN `traffic_cutoff_cross_month_hold` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '达量断网跨月保持:0否,1是' AFTER `traffic_cutoff_threshold`,
ADD COLUMN `traffic_cutoff_triggered_at` DATETIME NULL DEFAULT NULL COMMENT '最近一次达量断网成功时间' AFTER `traffic_cutoff_cross_month_hold`;
@@ -0,0 +1,5 @@
ALTER TABLE `sys_role`
ADD COLUMN `source_role_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '下发角色来源角色ID' AFTER `is_pass`,
ADD COLUMN `source_dept_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '下发角色来源组织ID' AFTER `source_role_id`;
CREATE INDEX `idx_sys_role_source_role_id` ON `sys_role` (`source_role_id`);
@@ -0,0 +1,26 @@
CREATE TEMPORARY TABLE `tmp_agent_role_source_map` AS
SELECT `tenant_id`, `dept_id`, MIN(`role_id`) AS `source_role_id`
FROM `sys_role`
WHERE `is_pass` = 1 AND `deleted_at` IS NULL
GROUP BY `tenant_id`, `dept_id`
HAVING COUNT(*) = 1;
UPDATE `sys_role` AS `child_role`
JOIN `sys_dept` AS `child_dept`
ON `child_dept`.`dept_id` = `child_role`.`dept_id`
AND `child_dept`.`tenant_id` = `child_role`.`tenant_id`
AND `child_dept`.`dept_role` = `child_role`.`role_id`
AND `child_dept`.`dept_type` = 1
JOIN `tmp_agent_role_source_map` AS `source_map`
ON `source_map`.`tenant_id` = `child_dept`.`tenant_id`
AND `source_map`.`dept_id` = `child_dept`.`parent_id`
JOIN `sys_role` AS `source_role` ON `source_role`.`role_id` = `source_map`.`source_role_id`
SET
`child_role`.`source_role_id` = `source_role`.`role_id`,
`child_role`.`source_dept_id` = `source_role`.`dept_id`
WHERE `child_role`.`source_role_id` = 0
AND `child_role`.`created_dept` = `source_role`.`dept_id`
AND `child_role`.`role_key` = `source_role`.`role_key`
AND `child_role`.`deleted_at` IS NULL;
DROP TEMPORARY TABLE `tmp_agent_role_source_map`;
@@ -0,0 +1,6 @@
-- Support the 15-minute traffic-cutoff threshold scan and cross-month reapply scan.
ALTER TABLE `t_sim_card_info`
ADD INDEX `idx_card_traffic_cutoff_threshold_scan`
(`traffic_cutoff_status`, `data_service_status`, `package_status`, `boss_card_status`, `is_flow_pool`, `id`),
ADD INDEX `idx_card_traffic_cutoff_hold_scan`
(`traffic_cutoff_status`, `traffic_cutoff_cross_month_hold`, `traffic_cutoff_triggered_at`, `data_service_status`, `id`);
@@ -0,0 +1,40 @@
-- 批次来源方式:4=定时任务。
-- 自动达量断网批次由 check_traffic_cutoff 定时任务创建,历史批次通过稳定的批次号前缀和备注识别。
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', 4, '定时任务', '4', 't_batch_source_type', '', 'warning', 'N', 100, 1, NOW(),
'由系统定时任务自动创建的批次'
WHERE NOT EXISTS (
SELECT 1
FROM `sys_dict_data`
WHERE `tenant_id` = '000000'
AND `dict_type` = 't_batch_source_type'
AND `dict_value` = '4'
);
UPDATE `sys_dict_data`
SET `dict_sort` = 4,
`dict_label` = '定时任务',
`list_class` = 'warning',
`remark` = '由系统定时任务自动创建的批次',
`updated_at` = NOW(),
`updated_by` = 1
WHERE `tenant_id` = '000000'
AND `dict_type` = 't_batch_source_type'
AND `dict_value` = '4';
UPDATE `sys_dict_type`
SET `remark` = '0:批次选择\n1:连号\n2:批量输入\n3:文件\n4:定时任务',
`updated_at` = NOW(),
`updated_by` = 1
WHERE `tenant_id` = '000000'
AND `dict_type` = 't_batch_source_type';
UPDATE `batch_main`
SET `source_type` = 4
WHERE `source_type` = 0
AND `batch_type` = 107
AND `batch_no` LIKE 'DCT%'
AND JSON_UNQUOTE(JSON_EXTRACT(`batch_info`, '$.remark')) LIKE '达量断网自动触发%';
@@ -0,0 +1,12 @@
-- 执行日志元数据:仅新增两列,不回填、不重建表。
-- 部署前确认库、备份、同名字段和DDL维护窗口。
-- 旧写入端兼容legacy/0;应用新版本依赖此结构,先迁移再部署。
-- 此脚本尚未在开发、预演或生产数据库执行。
ALTER TABLE batch_main
ADD COLUMN source_channel VARCHAR(24) NOT NULL DEFAULT 'legacy'
COMMENT '发起渠道:console/mini_program/api/system/legacy',
ADD COLUMN execution_mode TINYINT UNSIGNED NOT NULL DEFAULT 0
COMMENT '操作规模:0未知1单卡2批量';
-- 不自动创建索引:按目标表已有索引和查询EXPLAIN确认。
-- 不自动回填:历史来源必须有可验证证据,不能按数量推断单卡。