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():

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 下拉的业务模块。

部署注意

  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)。
Description
No description provided
Readme 116 KiB
Languages
Python 98%
Shell 2%