235 lines
5.3 KiB
Markdown
235 lines
5.3 KiB
Markdown
# OneLink 挡板服务
|
||
|
||
基于《中移物联网物联卡能力开放调用参考文档 V26.01.1》实现的本地挡板服务。
|
||
|
||
## 功能
|
||
|
||
- Go 后端,兼容 `/v5/ec/...` 和 `/ec/...` 两种路径。
|
||
- Vue3 管理台,管理多个 `appid/password`、SIM 卡基础信息、状态和固定流量参数。
|
||
- Token 有效期 3600 秒,支持 `refresh=0/1`。
|
||
- 不再连接 MySQL,也不再查询 `t_sim_card_info`。
|
||
- SIM 卡数据由后端一键生成,持久化到本地 SQLite 表 `mock_t_sim_card`。
|
||
- 月流量固定为 `18432 KB`,不再按时间自动增长。
|
||
- 支持按入库模板导出 Excel。
|
||
|
||
## 数据源
|
||
|
||
服务使用 SQLite 数据库作为唯一持久化数据源。默认数据库路径:
|
||
|
||
```text
|
||
data/onelink_mock.db
|
||
```
|
||
|
||
可以通过环境变量覆盖:
|
||
|
||
```text
|
||
BAFFLE_SQLITE_PATH=C:\sqlite\onelink_mock.db
|
||
```
|
||
|
||
后端通过 GoFrame SQLite 驱动直接访问数据库,不依赖本机安装 `sqlite3` 命令行工具。
|
||
|
||
Docker 镜像内会安装 `sqlite` 命令行工具。
|
||
|
||
## 一键生成
|
||
|
||
管理台顶部可输入生成数量,点击“一键生成”后追加新卡数据。
|
||
|
||
生成逻辑:
|
||
|
||
- 不删除旧卡。
|
||
- 不查询旧卡做重复对比。
|
||
- ICCID/MSISDN/IMSI/IMEI 与生成时间戳和序号相关,降低重复概率。
|
||
- 删除卡只在管理台删卡或业务删除逻辑触发时发生。
|
||
|
||
固定生成值:
|
||
|
||
```text
|
||
chanKey=channel_yd_mock
|
||
cardType=1
|
||
upPkgCode=CMIOT-SD-500M-24M-D01
|
||
suppliersCode=SUP_CMCC
|
||
insertToPlugEnabled=true
|
||
carrierTrafficCutoffEnabled=false
|
||
hasTestPeriod=true
|
||
testPeriodDays=30
|
||
hasSilentPeriod=false
|
||
silentPeriodDays=
|
||
silentPeriodLatestExpiryDate=
|
||
```
|
||
|
||
流量固定值:
|
||
|
||
```text
|
||
current_month_usage_kb=18432
|
||
monthly_usage_kb=18432
|
||
daily_usage_kb=614.4
|
||
pool_usage_bytes=18874368
|
||
growth_per_minute_kb=0
|
||
auto_growth_enabled=false
|
||
```
|
||
|
||
## Excel 导出
|
||
|
||
管理台点击“导出 Excel”会下载当前卡数据,表头顺序为:
|
||
|
||
```text
|
||
ICCID
|
||
MSISDN
|
||
IMSI
|
||
IMEI
|
||
通道编号
|
||
卡类型
|
||
上游套餐编码
|
||
供应商编码
|
||
上游激活时间
|
||
是否贴片转插拔
|
||
是否运营商达量断网
|
||
协议到期时间
|
||
是否有测试期
|
||
测试期天数
|
||
测试期最晚过期日期
|
||
是否有沉默期
|
||
沉默期天数
|
||
沉默期最晚过期日期
|
||
```
|
||
|
||
其中:
|
||
|
||
- `协议到期时间` 为激活日期后 1 年。
|
||
- `测试期最晚过期日期` 为激活日期后 30 天。
|
||
- `是否有沉默期=false` 时,沉默期天数和截止日期导出为空。
|
||
|
||
## 已实现接口
|
||
|
||
- `ec/get/token`
|
||
- `ec/query/sim-basic-info`
|
||
- `ec/query/sim-session`
|
||
- `ec/query/sim-status`
|
||
- `ec/query/sim-stop-reason`
|
||
- `ec/query/sim-frozen-state-info`
|
||
- `ec/query/sim-apn-session-info`
|
||
- `ec/query/sim-activated-features-info`
|
||
- `ec/query/sim-operating-status`
|
||
- `ec/query/sim-data-diagnosis`
|
||
- `ec/query/sim-imei`
|
||
- `ec/query/sim-data-usage-inpool`
|
||
- `ec/query/sim-data-usage`
|
||
- `ec/query/sim-data-usage-monthly/batch`
|
||
- `ec/query/sim-data-usage-daily/batch`
|
||
- `ec/query/apn-info`
|
||
- `ec/query/card-bind-status`
|
||
- `ec/query/on-off-status`
|
||
- `ec/query/region-limit-status`
|
||
- `ec/change/sim-status`
|
||
- `ec/operate/sim-apn-function`
|
||
|
||
Chan-compatible unified APIs (GET and POST):
|
||
- `GET|POST /sim/query/sim-basic-info`
|
||
- `GET|POST /sim/query/sim-session`
|
||
- `GET|POST /sim/query/sim-status`
|
||
- `GET|POST /sim/query/sim-status-batch`
|
||
- `GET|POST /sim/query/sim-card-bind-status`
|
||
- `GET|POST /sim/query/sim-device-status`
|
||
- `GET|POST /sim/query/sim-region-limit-status`
|
||
- `GET|POST /sim/query/sim-imei`
|
||
- `GET|POST /sim/query/sim-datausage`
|
||
- `GET|POST /sim/query/sim-datausage-monthly`
|
||
- `GET|POST /sim/query/sim-datausage-monthly-batch`
|
||
- `GET|POST /sim/query/sim-datausage-daily`
|
||
- `GET|POST /sim/query/sim-datausage-daily-batch`
|
||
- `GET|POST /sim/query/sim-apn-info`
|
||
- `GET|POST /sim/change/sim-status`
|
||
- `GET|POST /sim/change/sim-apn`
|
||
|
||
Chan requests use `simKeys` and `reqData`; responses are per-SIM arrays with
|
||
`code`, `message`, `simKey`, and `resData`. The chan endpoints reuse the same
|
||
SQLite SIM cards as the OneLink endpoints.
|
||
|
||
管理接口:
|
||
|
||
- `GET /api/state`
|
||
- `POST /api/generate`
|
||
- `GET /api/cards/export`
|
||
- `POST /api/appids`
|
||
- `POST /api/cards`
|
||
- `DELETE /api/cards`
|
||
|
||
## 环境变量
|
||
|
||
| 变量 | 必填 | 说明 |
|
||
| --- | --- | --- |
|
||
| `BAFFLE_ADDR` | 否 | 监听地址,默认 `:8080` |
|
||
| `BAFFLE_SQLITE_PATH` | 否 | SQLite 数据库路径,默认 `data/onelink_mock.db` |
|
||
|
||
## 本地启动
|
||
|
||
### 1. 启动后端
|
||
|
||
PowerShell:
|
||
|
||
```powershell
|
||
$env:BAFFLE_ADDR=":8080"
|
||
$env:BAFFLE_SQLITE_PATH="C:\sqlite\onelink_mock.db"
|
||
go run .
|
||
```
|
||
|
||
后端默认监听:
|
||
|
||
```text
|
||
http://127.0.0.1:8080
|
||
```
|
||
|
||
### 2. 启动前端
|
||
|
||
```powershell
|
||
cd frontend
|
||
pnpm install --frozen-lockfile
|
||
pnpm run dev
|
||
```
|
||
|
||
前端 dev server 默认监听:
|
||
|
||
```text
|
||
http://127.0.0.1:5173/
|
||
```
|
||
|
||
## Docker 启动
|
||
|
||
```powershell
|
||
docker compose up -d --build
|
||
```
|
||
|
||
访问地址:
|
||
|
||
```text
|
||
http://127.0.0.1:18080/onelink-mock/
|
||
```
|
||
|
||
停止:
|
||
|
||
```powershell
|
||
docker compose down
|
||
```
|
||
|
||
## 默认测试认证
|
||
|
||
```text
|
||
appid=demo_appid
|
||
password=demo_password
|
||
```
|
||
|
||
获取 Token:
|
||
|
||
```text
|
||
http://localhost:8080/v5/ec/get/token?appid=demo_appid&password=demo_password&transid=demo_appid2026070209300000000001
|
||
```
|
||
|
||
## Admin query APIs
|
||
|
||
```text
|
||
GET /api/cards?keyword=<msisdn-or-iccid-or-imsi>&page=1&pageSize=20
|
||
GET /api/orders?page=1&pageSize=20
|
||
```
|
||
|
||
Orders are persisted in the SQLite `mock_order` table and retain all nine fields after a service restart. Existing `mock_t_sim_card` data is preserved.
|