chore: 基础设施 — 阿里云源、北京时间、HEX计数器、打印机配置

This commit is contained in:
2026-08-05 14:00:13 +08:00
parent 8458b99782
commit 82f474f71f
6 changed files with 91 additions and 2 deletions

View File

@ -0,0 +1,26 @@
"""16进制自增计数器 — 基于 PostgreSQL Sequence,生成 16 位 HEX 唯一 ID"""
from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession
SEQUENCE_NAME = "product_hex_counter"
async def ensure_sequence(db: AsyncSession) -> None:
"""确保 counter sequence 存在(幂等)"""
await db.execute(
text(f"CREATE SEQUENCE IF NOT EXISTS {SEQUENCE_NAME} START 1;")
)
async def next_hex_id(db: AsyncSession, length: int = 16) -> str:
"""
生成下一个 hex ID。
示例: 1 → "0000000000000001"
15 → "000000000000000F"
16 → "0000000000000010"
255 → "00000000000000FF"
"""
result = await db.execute(text(f"SELECT nextval('{SEQUENCE_NAME}');"))
counter: int = result.scalar_one()
return format(counter, f"0{length}X")

View File

@ -0,0 +1,44 @@
"""打印机配置管理 — JSON 文件持久化"""
import json
import os
from pathlib import Path
CONFIG_DIR = Path(__file__).resolve().parent.parent.parent / "data"
CONFIG_FILE = CONFIG_DIR / "printer_config.json"
DEFAULT_CONFIG = {
"label_printer": {
"ip": "192.168.9.221",
"port": 9100,
"enabled": False,
},
}
class PrintConfigManager:
"""打印机 IP/端口 配置读写"""
@staticmethod
def _ensure_file() -> None:
if not CONFIG_DIR.exists():
CONFIG_DIR.mkdir(parents=True)
if not CONFIG_FILE.exists():
PrintConfigManager.save_config(DEFAULT_CONFIG)
@staticmethod
def get_config() -> dict:
PrintConfigManager._ensure_file()
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
return json.load(f)
@staticmethod
def save_config(config: dict) -> None:
if not CONFIG_DIR.exists():
CONFIG_DIR.mkdir(parents=True)
with open(CONFIG_FILE, "w", encoding="utf-8") as f:
json.dump(config, f, indent=2, ensure_ascii=False)
@staticmethod
def get_printer(name: str = "label_printer") -> dict:
config = PrintConfigManager.get_config()
return config.get(name, DEFAULT_CONFIG.get("label_printer", {}))