docs: 补全 README(4张表/业务日期机制/businessdate.py四函数/最先加载顺序)
This commit is contained in:
parent
21b4f0c3d8
commit
382fb3fd5a
88
README.md
88
README.md
@ -1,10 +1,84 @@
|
||||
# appbase
|
||||
基本应用包,主要是提供代码管理和系统参数管理能力
|
||||
# appbase — 基础应用包(代码管理 + 系统参数/业务日期)
|
||||
|
||||
## 参数管理
|
||||
应用系统的参数集中管理,为系统提供可动态维护的参数
|
||||
业务日期,应用的业务日期存储在参数表中,并提供函数用于获得系统日期和设置心业务日期
|
||||
产线平台/Sage 系应用最底层的基础模块,提供两项全平台共用的能力:
|
||||
|
||||
## 代码管理
|
||||
提供系统键值对管理和维护能力
|
||||
1. **代码管理(编码/键值对)**:appcodes + appcodes_kv 两级编码表,全平台下拉框、状态字典、机构类型(org_type)等键值数据统一存放于此,rbac/dapi 及所有业务模块的 models `codes` 关联都指向它。
|
||||
2. **系统参数与业务日期**:params 表集中管理可动态维护的参数;其中 `business_date`(业务日期)是记账/计费等业务的时间基准——**账单日期取业务日期而非自然日期**,由本模块提供读取/推进函数,另含 svgicon 图标表。
|
||||
|
||||
## 模块定位
|
||||
|
||||
- 加载顺序上位于所有模块**之前**(rbac 的注册开关读 params 表、dapi/业务模块用编码表),宿主入口第一个调用 `load_appbase()`。
|
||||
- 无独立认证逻辑,页面/dspy 端点经 rbac 按 logined 权限保护。
|
||||
- 数据库名解析:`ServerEnv().get_module_dbname('appbase')`。
|
||||
|
||||
## 表清单(models/*.json)
|
||||
|
||||
| 表 | 标题 | 字段 | 说明 |
|
||||
|---|---|---|---|
|
||||
| `appcodes` | 应用编码表 | id, name(编码名称), hierarchy_flg(多级标志) | 编码组,如 `user_status`、`org_type` |
|
||||
| `appcodes_kv` | 编码键值表 | id, parentid(父id→appcodes), k(键), v(值) | 组内键值对;rbac 的 orgtypes/role 的 orgtypeid 下拉即取 `parentid='org_type'` |
|
||||
| `params` | 参数表 | id, params_name(参数名称), params_value(参数值) | 已知参数:`business_date`(业务日期)、`register_open`(rbac 注册开关,1=开放 0=关闭,superuser 可在参数管理界面修改) |
|
||||
| `svgicon` | 图标 | id, icon(svg内容) | 平台内嵌 SVG 图标库 |
|
||||
|
||||
`json/` 为同名 bricks CRUD 页面定义。
|
||||
|
||||
## 业务日期参数机制(重点)
|
||||
|
||||
业务日期存储在 `params` 表的 `business_date` 行,代表"系统当前处于哪一业务日",与自然日期解耦(支持补账、日切前处理跨天业务)。
|
||||
|
||||
`appbase/businessdate.py` 提供(均为 async,可传入已有 sor 复用事务,不传则自行开连接):
|
||||
|
||||
| 函数 | 作用 |
|
||||
|---|---|
|
||||
| `get_business_date(sor=None)` | 读当前业务日期;params 无 `business_date` 行时抛 `BusinessDateParamsError` |
|
||||
| `new_business_date(sor=None)` | **日切**:业务日期 +1 天并写回 params |
|
||||
| `previous_business_date(sor=None)` | 当前业务日期 -1 天(只读计算) |
|
||||
| `next_business_date(sor=None)` | 当前业务日期 +1 天(只读计算) |
|
||||
|
||||
`appbase/params.py` 提供通用参数读取 `_get_params(sor, name)`(按 params_name 查 params_value)。
|
||||
|
||||
**消费方示例**:accounting 记账链路 `bill.bill_date = await get_business_date(sor)`(账单落业务日期);rbac 注册开关读 `register_open`。定时日切走 `wwwroot/cron/switch_bizdate.dspy`:把 `business_date` 重置为当天自然日期,**只允许本机(127.0.0.1/::1/localhost)调用**,其他 IP 一律返回中性拒绝信息(不回显探测结果)。
|
||||
|
||||
## 对外 API / dspy 端点(wwwroot/)
|
||||
|
||||
- 编码查询:`get_code.dspy`(通用代码下拉查询:传 table/valueField/textField/cond,自动注入 userid/userorgid 变量)、`get_appcodes_kv.dspy`(专查 appcodes_kv)
|
||||
- 图标:`show_icon.dspy`(按 id 返回 svgicon.icon 内容)
|
||||
- 编码 CRUD:`api/appcodes_create.dspy`、`api/appcodes_update.dspy`、`api/appcodes_delete.dspy`、`api/appcodes_kv_create.dspy`、`api/appcodes_kv_update.dspy`、`api/appcodes_kv_delete.dspy`
|
||||
- 图标 CRUD:`api/svgicon_create.dspy`、`api/svgicon_update.dspy`、`api/svgicon_delete.dspy`
|
||||
- 日切:`cron/switch_bizdate.dspy`(配套 `cron/index.ui` 管理页)
|
||||
- UI:`menu.ui`
|
||||
|
||||
## load 注册函数
|
||||
|
||||
入口 `appbase/init.py` 的 **`load_appbase()`**:
|
||||
|
||||
```python
|
||||
g = ServerEnv()
|
||||
g.get_business_date = get_business_date # 来自 appbase.businessdate
|
||||
g.new_business_date = new_business_date
|
||||
```
|
||||
|
||||
业务模块通过 `get_serverenv('get_business_date')` 或 `ServerEnv().get_business_date(sor)` 获取业务日期,不直接 import 本模块,保证跨宿主可移植。
|
||||
|
||||
## 宿主集成
|
||||
|
||||
宿主启动入口(sage.py、pipeline_app.py、cpcc.py、fileMGR.py 等)中**最先**加载:
|
||||
|
||||
```python
|
||||
from appbase.init import load_appbase
|
||||
...
|
||||
load_appbase() # 第一个:rbac/dapi/业务模块都依赖 params 与编码表
|
||||
load_rbac()
|
||||
load_dapi()
|
||||
```
|
||||
|
||||
依赖:ahserver(ServerEnv)、sqlor(DBPools)、appPublic(timeUtils.strdate_add/jsonConfig)。被依赖方:rbac(register_open、org_type 编码)、dapi、accounting(bill_date/consume 取业务日期)、以及一切使用 appcodes_kv 下拉的业务模块。
|
||||
|
||||
## 部署注意
|
||||
|
||||
1. **初始化种子**:params 表必须预置 `business_date` 行(当天日期),否则 `get_business_date` 直接抛异常、记账链路全断;`register_open` 决定是否开放用户注册。
|
||||
2. **权限注册**:运行 `scripts/load_path.py`(`cd 宿主目录 && ./py3/bin/python ../appbase/scripts/load_path.py`)登记 /appbase 各端点为 logined 权限;它 import `rbac.rbac.set_path_perm`,因此须在 rbac 建表完成后执行。
|
||||
3. **switch_bizdate 定时任务**:仅供本机 cron 调用;若经 nginx 反代转发,注意 client_ip 取值不是回环地址会被拒。日切语义是"重置为当天自然日期",手工推进用 `new_business_date()`(+1 天)。
|
||||
4. **编码表是全局字典**:新增下拉字典在 appcodes 建组、appcodes_kv 建键值,业务模块 models 的 `codes` 用 `cond: parentid='xxx'` 关联即可,勿在业务库重复造字典表。
|
||||
5. svgicon 的 icon 字段存原始 SVG 文本,`show_icon.dspy` 直接回显;图标内容属可信管理端录入,勿开放任意用户写入。
|
||||
6. 版本号见 `appbase/version.py`(当前 0.0.1)。
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user