5.7 KiB
appbase — 基础应用包(代码管理 + 系统参数/业务日期)
产线平台/Sage 系应用最底层的基础模块,提供两项全平台共用的能力:
- 代码管理(编码/键值对):appcodes + appcodes_kv 两级编码表,全平台下拉框、状态字典、机构类型(org_type)等键值数据统一存放于此,rbac/dapi 及所有业务模块的 models
codes关联都指向它。 - 系统参数与业务日期: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():
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 等)中最先加载:
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 下拉的业务模块。
部署注意
- 初始化种子:params 表必须预置
business_date行(当天日期),否则get_business_date直接抛异常、记账链路全断;register_open决定是否开放用户注册。 - 权限注册:运行
scripts/load_path.py(cd 宿主目录 && ./py3/bin/python ../appbase/scripts/load_path.py)登记 /appbase 各端点为 logined 权限;它 importrbac.rbac.set_path_perm,因此须在 rbac 建表完成后执行。 - switch_bizdate 定时任务:仅供本机 cron 调用;若经 nginx 反代转发,注意 client_ip 取值不是回环地址会被拒。日切语义是"重置为当天自然日期",手工推进用
new_business_date()(+1 天)。 - 编码表是全局字典:新增下拉字典在 appcodes 建组、appcodes_kv 建键值,业务模块 models 的
codes用cond: parentid='xxx'关联即可,勿在业务库重复造字典表。 - svgicon 的 icon 字段存原始 SVG 文本,
show_icon.dspy直接回显;图标内容属可信管理端录入,勿开放任意用户写入。 - 版本号见
appbase/version.py(当前 0.0.1)。