2026-10-09 06:46:36 -04:00
|
|
|
|
"""全局常量。
|
|
|
|
|
|
|
|
|
|
|
|
集中定义 Redis 键模板、响应码、角色编码等跨模块共享的字面量,
|
|
|
|
|
|
避免各处硬编码字符串导致拼写漂移。
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
# ===== 响应码(与 HTTP 状态码保持一致,见 PROJECT_STANDARDS 第 9 节)=====
|
|
|
|
|
|
CODE_SUCCESS = 200
|
|
|
|
|
|
CODE_BAD_REQUEST = 400
|
|
|
|
|
|
CODE_UNAUTHORIZED = 401
|
|
|
|
|
|
CODE_FORBIDDEN = 403
|
|
|
|
|
|
CODE_NOT_FOUND = 404
|
|
|
|
|
|
CODE_SERVER_ERROR = 500
|
|
|
|
|
|
|
|
|
|
|
|
# ===== Redis 键模板 =====
|
|
|
|
|
|
# 规范第 6 节:键格式 {项目缩写}:{业务}:{标识},项目缩写为 ys
|
|
|
|
|
|
REDIS_KEY_CAPTCHA = "ys:captcha:{captcha_id}"
|
|
|
|
|
|
REDIS_KEY_LOGIN_FAIL = "ys:login:fail:{username}"
|
|
|
|
|
|
REDIS_KEY_TOKEN_BLACKLIST = "ys:token:blacklist:{jti}"
|
|
|
|
|
|
|
|
|
|
|
|
# ===== JWT =====
|
|
|
|
|
|
JWT_ALGORITHM = "HS256"
|
|
|
|
|
|
TOKEN_TYPE_BEARER = "Bearer"
|
|
|
|
|
|
|
|
|
|
|
|
# ===== 角色编码(与 db/migration 初始化数据保持一致)=====
|
|
|
|
|
|
ROLE_ADMIN = "admin"
|
|
|
|
|
|
ROLE_USER = "user"
|
2026-10-15 05:25:23 -04:00
|
|
|
|
# 2026-10-15 复核审批补充需求新增职能登录角色:营销后勤(提交+录入)、
|
|
|
|
|
|
# 财务(复核)、领导(审核)。roles 表无 is_builtin 列,内置保护用代码
|
|
|
|
|
|
# 白名单判定(role_service 两处内置校验改查此集合);
|
|
|
|
|
|
# permissions/role_permissions 细粒度激活待业务权限清单(待澄清 #6)。
|
|
|
|
|
|
ROLE_MARKETING_OPS = "marketing_ops"
|
|
|
|
|
|
ROLE_FINANCE = "finance"
|
|
|
|
|
|
ROLE_LEADER = "leader"
|
|
|
|
|
|
BUILTIN_ROLE_CODES = {
|
|
|
|
|
|
ROLE_ADMIN,
|
|
|
|
|
|
ROLE_MARKETING_OPS,
|
|
|
|
|
|
ROLE_FINANCE,
|
|
|
|
|
|
ROLE_LEADER,
|
|
|
|
|
|
}
|
2026-10-09 06:46:36 -04:00
|
|
|
|
|
|
|
|
|
|
# ===== 密码策略 =====
|
|
|
|
|
|
# bcrypt 5.0 起对超过 72 字节的密码由「静默截断」改为「抛 ValueError」,
|
|
|
|
|
|
# 而中文一个字符占 3 字节,因此必须按字节数校验,按字符数校验是错的。
|
|
|
|
|
|
PASSWORD_MIN_BYTES = 8
|
|
|
|
|
|
PASSWORD_MAX_BYTES = 72
|
|
|
|
|
|
|
|
|
|
|
|
# ===== 验证码 =====
|
|
|
|
|
|
# 剔除易混淆字符 0/O/1/I/l,降低人工识别错误率
|
|
|
|
|
|
CAPTCHA_CHARSET = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
|
|
|
|
|
|
CAPTCHA_LENGTH = 4
|
2026-10-10 04:28:04 -04:00
|
|
|
|
|
2026-10-12 04:22:32 -04:00
|
|
|
|
# ===== 业务岗位编码(与 db/migration 种子一致,business_roles.role_code)=====
|
|
|
|
|
|
BUSINESS_ROLE_SALESPERSON = "salesperson"
|
|
|
|
|
|
BUSINESS_ROLE_SALES_MANAGER = "sales_manager"
|
|
|
|
|
|
BUSINESS_ROLE_INFO_OFFICER = "info_officer"
|
|
|
|
|
|
|
|
|
|
|
|
# ===== 产品类别码(与 param_values.dimension_value 口径一致)=====
|
|
|
|
|
|
PRODUCT_CATEGORY_MUNICIPAL_WATER = "municipal_water"
|
|
|
|
|
|
PRODUCT_CATEGORY_RAIL_TRANSIT = "rail_transit"
|
2026-10-12 14:28:20 -04:00
|
|
|
|
PRODUCT_CATEGORIES = {PRODUCT_CATEGORY_MUNICIPAL_WATER, PRODUCT_CATEGORY_RAIL_TRANSIT}
|
2026-10-12 04:22:32 -04:00
|
|
|
|
|
2026-10-12 21:49:05 -04:00
|
|
|
|
# ===== 客户分类码(customers.customer_type,计提规则匹配锚点)=====
|
|
|
|
|
|
CUSTOMER_TYPE_PERSONAL = "personal"
|
|
|
|
|
|
CUSTOMER_TYPE_MANAGER_PERSONAL = "manager_personal"
|
|
|
|
|
|
CUSTOMER_TYPE_ENTERPRISE = "enterprise"
|
|
|
|
|
|
CUSTOMER_TYPES = {
|
|
|
|
|
|
CUSTOMER_TYPE_PERSONAL,
|
|
|
|
|
|
CUSTOMER_TYPE_MANAGER_PERSONAL,
|
|
|
|
|
|
CUSTOMER_TYPE_ENTERPRISE,
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-10-10 04:28:04 -04:00
|
|
|
|
# ===== 操作日志词表(operation_logs 的 module / action 取值)=====
|
|
|
|
|
|
# 集中定义避免各处硬编码导致日志值漂移;前端筛选下拉项与此保持一致
|
|
|
|
|
|
MODULE_USER = "用户管理"
|
|
|
|
|
|
MODULE_ROLE = "角色管理"
|
2026-10-12 04:39:08 -04:00
|
|
|
|
MODULE_BUSINESS_ROLE = "岗位角色"
|
2026-10-12 08:24:17 -04:00
|
|
|
|
MODULE_PARAM = "计提参数"
|
2026-10-12 21:49:05 -04:00
|
|
|
|
MODULE_PERSONNEL = "人员管理"
|
|
|
|
|
|
MODULE_PRODUCT = "产品管理"
|
|
|
|
|
|
MODULE_CUSTOMER = "客户管理"
|
2026-10-12 23:22:34 -04:00
|
|
|
|
MODULE_BUSINESS = "业务管理"
|
|
|
|
|
|
MODULE_SHIPMENT = "发货管理"
|
|
|
|
|
|
MODULE_RECEIPT = "回款管理"
|
|
|
|
|
|
MODULE_RATING = "客户评级"
|
2026-10-15 05:25:23 -04:00
|
|
|
|
MODULE_SYSTEM_SETTINGS = "系统设置"
|
|
|
|
|
|
MODULE_APPROVAL = "审批管理"
|
2026-10-16 04:31:25 -04:00
|
|
|
|
MODULE_CALC = "绩效核算"
|
|
|
|
|
|
MODULE_SETTLEMENT = "月度结算"
|
2026-10-12 23:22:34 -04:00
|
|
|
|
|
|
|
|
|
|
# ===== 单据编号前缀({前缀}{YYYYMMDD}-{当日4位序号},序号按自然日重置)=====
|
|
|
|
|
|
# 一期为代码常量(业务未提出配置诉求);如需可配置,走 M1 参数体系新增参数组
|
|
|
|
|
|
NO_PREFIX_BUSINESS = "YW"
|
|
|
|
|
|
NO_PREFIX_SHIPMENT = "SH"
|
|
|
|
|
|
NO_PREFIX_RECEIPT = "HK"
|
2026-10-14 02:20:05 -04:00
|
|
|
|
NO_PREFIX_PARAM = "P"
|
2026-10-15 05:25:23 -04:00
|
|
|
|
NO_PREFIX_APPROVAL = "AP"
|
2026-10-16 04:31:25 -04:00
|
|
|
|
NO_PREFIX_ADJUSTMENT = "TZ"
|
2026-10-10 04:28:04 -04:00
|
|
|
|
|
|
|
|
|
|
ACTION_CREATE = "新增"
|
|
|
|
|
|
ACTION_UPDATE = "修改"
|
|
|
|
|
|
ACTION_DELETE = "删除"
|
|
|
|
|
|
ACTION_RESET_PASSWORD = "重置密码"
|
|
|
|
|
|
ACTION_ENABLE = "启用"
|
|
|
|
|
|
ACTION_DISABLE = "禁用"
|
2026-10-15 06:50:38 -04:00
|
|
|
|
ACTION_APPROVE = "审批通过"
|
|
|
|
|
|
ACTION_REJECT = "审批驳回"
|