书店进销存管理系统

面向实体书店的 B/S 进销存系统:采购入库、前台收银、库存盘点、日清月结与经营分析。 采购按移动加权平均结转成本,收银开单当场算出毛利,库存与账目始终对得上。 一套后端,网页、手机、小程序三端共用。

演示账号 001 / 123456(店长),另有 002 收银员、003 库管员、004 采购员

已部署上云 · HTTPS 17 表 4 视图 53 条接口 22 个页面
lllll.cloud/app/ · 经营看板
云笺书店进销存系统经营看板
01 / 功能

一条完整的业务链,而不是几个孤立页面

采购、销售、库存、结算、统计共用同一套库存流水,任何一步都能向前追溯。

采购进货

多行明细、折让与采购退货;草稿可改,过账后按移动加权平均重算成本,作废走反向流水。

前台收银

书名/ISBN 检索加购,会员折扣自动计算,五种支付方式;收款即扣库存、结转成本,小票可打印、可整单退货。

库存与盘点

库存变动全部落在流水上,可查每一笔的来源单据与结存;盘点按分类建单,差异自动生成盘盈/盘亏。

日清月结

日结自动汇总期初、入库、出库、期末与当日盈亏;月结在上月期末基础上汇总,账实可核对。

经营统计

进货按供应商/图书/分类/月份,出货按图书/分类/收银员/月份/支付,另有品类毛利与畅销榜。

权限与留痕

四个角色、12 个权限码,菜单由后端下发、接口二次校验;登录、开单、过账、结账、备份全部写日志。

02 / 三端

一套后端,三种终端

网页、手机、小程序调的是同一批接口——权限、校验、事务都在服务端,前端只负责展示。

WEB

Web 管理端

22 个页面

店长与库管的完整工作台:图书档案、进货、收银、库存盘点、日清月结、报表、权限。

static/index.html
MOBILE

手机 H5

22 个模块

同一套接口复刻,浏览器打开即用,扫码就能开单,不需要安装 App、也不用审核。

/mp/
MINI PROGRAM

微信小程序

7 个原生页

原生 WXML:登录、看板、收银、库存、单据、进货、我的;登录换 Token,接口一行没改。

miniprogram/
小程序经营看板
经营看板
小程序收银台
收银台
小程序单据明细
单据明细

手机端不是"能用",而是能干活

  • 页面底部五个 tab:经营、收银、库存、单据、更多
  • 档案类支持增删改,表格在小屏转卡片
  • 单据可看明细、可作废、可整单退货
  • 结算条避让 tabBar,不会挡住退不出去
  • 模块页一律带返回键,有栈弹栈、无栈回首页
03 / 界面

看得见的库存与账目

以下为系统实际运行截图,数据来自 2026 年 7 月至今的连续演示经营。

库存查询 · 62 个品种的库存数量、加权成本、库存金额与预警
库存查询
库存查询按关键字、分类与库存状态筛选,一行看清进价、成本、结存与货位
收银台
收银台:检索加购、会员折扣、五种支付
日结
日结:期初 / 入库 / 出库 / 期末与盈亏
毛利分析
毛利分析:按品类看销售额、成本与毛利率
员工与权限
员工与权限:角色、权限码、口令重置
04 / 流程

一天的业务,五个动作走完

补货、入库、开单、盘点、日结——每一步都在同一套库存流水上留下记录。

01补货新建进货单,选书自动带出现有库存与进价
02入库过账写流水,按加权平均更新成本
03开单收银台加购、识别会员、收款扣库存
04盘点按分类盘,差异生成盘盈或盘亏
05日结汇总当日进销存,录实盘算盈亏
25.6万累计销售额(元)
1,619张销售单
41.9%累计毛利率
0库存与流水差异
数据区间 2026-07-01 至 2026-10-31,共 121 天日结、3 个完整月结,可在「日结 / 出货统计」页面自行核对。
05 / 架构

轻量、可讲清楚的一套栈

前端零依赖,后端按业务域拆分,数据库把库存流水当作唯一事实表。

接入端浏览器 / 微信 / 手机
PC 浏览器手机浏览器微信小程序接口调试
表现层原生 H5,零依赖
Web SPA 22 页手机 H5 22 模块小程序 7 页
应用层9 个 Blueprint
base 登录catalog 档案partners 伙伴purchase 进货sale 销售stock 库存settle 结算stats 统计system 系统
唯一写入口services/inventory.py
入库出库盘点调整退货冲销行锁 FOR UPDATE
数据层MySQL 8 / InnoDB
17 张表4 个视图stock_flows 事实表联合索引

库存写入只有一条路:不管从进货单、收银单还是盘点单进来,写流水、改 books.stock、重算加权成本都在同一个函数里完成,并用行锁保证不超卖。

17 + 4表 + 视图
53接口路径(71 方法)
22Web 页面
2,879条库存流水
1.1 万行手写代码
前端原生 H5 + CSS + JS 后端Python 3.13 + Flask 3.1 数据库MySQL 8(InnoDB) 数据访问PyMySQL,手写 SQL 鉴权Session + Bearer Token 部署Nginx + Gunicorn + systemd 质量pytest + 五项守恒校验
06 / 质量

账要对得上,错了要查得到

关键数字不是靠人盯,而是靠校验脚本和测试守住:每次改完数据,五项守恒全部重跑一遍。

✓库存 = 流水汇总books.stock 与 stock_flows 逐品种比对,差异即报。
✓已确认单据必有流水防止有单无账、有账无单。
✓无负库存任何品种不得小于 0,出库前已行锁校验。
✓日结期末 = 当前库存账实核对,最近一次差异 0。
✓单据成本 = 明细合计成本金额不得凭空产生。
✓接口与业务测试pytest 18 项:鉴权、403、开单扣库存、退货回补、日结勾稽。
线上 lllll.cloud Let's Encrypt 证书至 2027-01 HTTP 301 跳 HTTPS 数据库仅监听 127.0.0.1 每日 02:30 自动备份 systemd 守护 + 健康检查
07 / 试用

四个角色,权限各不相同

用不同工号登录,能看到菜单的差别;直接拼接口也会被服务端拦下。

工号角色可用范围口令
001店长全部功能123456
002收银员收银、销售单据、会员123456
003库管员图书、进货、库存、盘点123456
004采购员供应商、进货单、进货统计123456
08 / 入口

从哪里进

四个入口都在同一台服务器上,走同一张证书。

入口地址内容
Web 系统/app/22 页管理端
手机 H5/mp/22 个模块
展示页/doc作业要求与实现说明
介绍页/就是当前这页

现在就进去开一单