feat: v0.9 样板数据完整性验证/解析加固/报表统计
- 双源确认样板库完整性: search接口与画图编辑器for_ht目录均为254条, 0遗漏 - 全量体检: 6套样板含7个畸形段(缺ps/pe)导致解析报错 前后端重放/算料统一加固过滤, 254样板0异常/1046窗格 - 报表统计模块(/chart): 近N天订单数金额按日柱图+8项总量+状态分布 - 样板库官方/我的样板双Tab(is_default过滤) - 使用指南接入帮助文章接口(种子8篇), seed分类树幂等修复 - 全接口回归18/18通过
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
"""种子文章(帮助中心内容,自撰)。"""
|
||||
|
||||
ARTICLES = [
|
||||
("常见问题解答", "如何更改标线尺寸?", "在画布编辑模式中,直接修改顶部 W/H 输入框,或拖拽外框右缘/下缘/右下角手柄;所有尺寸标注会自动跟随几何更新。"),
|
||||
("常见问题解答", "如何绘制横竖中梃?", "进入编辑模式后点击「+竖梃」或「+横梃」,再点击目标玻璃区域即可完成分割;点击已有中梃可选中并拖动调整位置,「删除梃」可移除。"),
|
||||
("常见问题解答", "如何把样板改成自己的?", "样板库 → 点击样板 → 编辑分格/尺寸 → 「另存为我的样板」,原图板不受影响。"),
|
||||
("常见问题解答", "报价是如何计算的?", "报价 = 外框 + 中梃(按实际跨度)+ 扇框 + 玻璃面积 + 五金(按扇数),价格取自产品管理中的价格本。"),
|
||||
("功能教程", "订单全流程", "合同管理创建意向单 → 转正式单 → 下订单 → 订单详情中推进生产进度(下料/组装/玻璃/打胶/五金/质检/完工)→ 打印中心输出生产单。"),
|
||||
("功能教程", "优化下料使用", "录入订单的型材需求与仓库原料,系统按首递减算法输出切割组合、余料与利用率;也可在「下料方案」按合同一键汇总。"),
|
||||
("功能教程", "3D 展示与效果图", "「效果图渲染」可在场景中预览窗型并调整墙面/玻璃颜色;「3D 展示」提供可旋转的立体视图。"),
|
||||
("功能教程", "分享订单给客户", "订单管理 → 「分享」→ 复制链接发给客户,客户免登录即可查看订单摘要与图纸。"),
|
||||
]
|
||||
@@ -27,9 +27,9 @@ async def seed() -> None:
|
||||
# 2) 分类树(来自 default_windoor_catelog.json,取目标站原始 id 便于对照)
|
||||
cat_file = DATA / "api-samples" / "default_windoor_catelog.json"
|
||||
if cat_file.exists():
|
||||
from sqlalchemy import select as _sel
|
||||
cats = json.load(open(cat_file, encoding="utf-8"))["data"]
|
||||
existing = {c.id for c in (await db.execute(
|
||||
__import__("sqlalchemy").select(WindoorCatelog.id))).scalars()}
|
||||
existing = set((await db.execute(_sel(WindoorCatelog.id))).scalars())
|
||||
for top in cats:
|
||||
if top["id"] not in existing:
|
||||
db.add(WindoorCatelog(id=top["id"], name=top["name"], fid=0, company_id=1))
|
||||
@@ -71,6 +71,17 @@ async def seed() -> None:
|
||||
await db.commit()
|
||||
print("种子数据完成")
|
||||
|
||||
# 4) 帮助文章(幂等:按标题去重)
|
||||
async with SessionLocal() as db:
|
||||
from huamenchuang.models.extend import Article
|
||||
from huamenchuang.scripts.article_seed_data import ARTICLES
|
||||
existing = {t for (t,) in (await db.execute(select(Article.title))).all()}
|
||||
for i, (cat, title, content) in enumerate(ARTICLES):
|
||||
if title not in existing:
|
||||
db.add(Article(title=title, category=cat, content=content, sort=i))
|
||||
await db.commit()
|
||||
print("帮助文章就绪")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(seed())
|
||||
|
||||
Reference in New Issue
Block a user