交付说明书
操作手册
居小易 / 交付说明书

居小易 · 交付说明书

环境 · 功能 · 数据 · 运维 · 验收 · 已知限制

2026-11-02构建 20261103c生产环境实测含验收记录
本文件用于系统交接与验收。所有环境信息、数据量、验收结果均取自交付当日的真实服务器状态;功能说明与操作步骤请配合《操作手册》一起阅读(/manual/)。

一、交付概览

交付物与版本#

本文件是「居小易 · 公寓租赁管理系统」的交付说明书,用于交接、验收与后续运维。所有环境信息均取自交付当日的真实服务器状态,不是模板文字。

项目名称居小易 · 公寓租赁管理系统
交付日期2026-11-02
交付构建号20261103c(前端缓存戳 / 后端同步)
交付形态私有化部署(独立服务器 + 独立数据库)
生产域名https://www.juxiaoyi.cn
本次上线批次批次 97(供方合同状态一致性)、批次 98(付呗 / 乐刷聚合收单)、UI 排版修复

交付清单

#交付物形态位置
1网页版(PC 管理端)静态站点/admin/(源:D:\ZUWEB\dashboard)
2房东版 APP安卓 APK + 网页版/download/juxiaoyi-landlord.apk · /app/
3租客版 APP安卓 APK + 网页版/download/juxiaoyi-tenant.apk · /t/
4后端 API 服务Node.js 20 + ExpressD:\juxiaoyi.ezagent.work\api
5数据库SQLite(better-sqlite3)api\data\yuxiaoer.db
6操作手册HTML(GitHub 文档风格)/manual/
7交付说明书HTML/handover/(本页)
i
说明操作手册是给业务人员看的(每个按钮点下去会发生什么),本说明书是给技术与管理方看的(环境、数据、运维、验收)。两者互相引用。

访问入口#

用途地址说明
官网 / 下载页https://www.juxiaoyi.cn/品牌页、APP 下载、二维码
PC 登录页https://www.juxiaoyi.cn/login.html账号密码登录
PC 管理端https://www.juxiaoyi.cn/admin/需登录;建议 Chrome / Edge
房东版(网页)https://www.juxiaoyi.cn/app/手机浏览器可用,功能同 APP
租客版(网页)https://www.juxiaoyi.cn/t/租客端网页版
后端接口https://www.juxiaoyi.cn/api/经 IIS 反代到 127.0.0.1:18890
健康检查https://www.juxiaoyi.cn/api/health返回 {"ok":true,...} 即正常
操作手册https://www.juxiaoyi.cn/manual/三端全功能说明
交付说明https://www.juxiaoyi.cn/handover/本页
安卓 APK(房东)/download/juxiaoyi-landlord.apk
安卓 APK(租客)/download/juxiaoyi-tenant.apk
旧域名(同站点)https://juxiaoyi.ezagent.work与 www 同一站点,可继续使用
!
注意顶级域 juxiaoyi.cn(不带 www)当前无法访问:域名没有 A 记录,且证书只签发了 www.juxiaoyi.cn。要启用顶级域,需在域名服务商添加 A 记录指向 206.187.208.148,并为顶级域补签证书(详见「七、已知限制」)。

账号与权限#

角色登录方式权限范围
超级管理员PC 管理端,账号 admin全部菜单 + 全部动作
店长 / 管家子账号(PC + 房东版 APP)按角色配置,默认无「退款 / 作废账单」权限
财务子账号账单、流水、报表;建议不开退款权限
法务 / 只读子账号仅合同与模板
租客租客版 APP,手机号验证码只看自己的房、账单、合同、报修
业主暂未开放独立端通过房东侧代为操作
×
禁止超级管理员初始口令不在本页展示(本页在公网可访问)。口令单独通过安全渠道提供。首次登录后请立即在「设置 → 企业设置 → 账号与安全」修改,并开启子账号体系 —— 不要多人共用一个 admin。

权限模型(两层)

  • 菜单级:能不能看到这个页面。
  • 动作级:能不能点这个按钮(如退款、作废、导出)。
  • 前端隐藏只是体验层,后端有硬拦截(requirePerm),手工构造请求同样会被拒。
  • 租客账号访问管理端路由会被强制跳回租客首页,不存在越权浏览。

二、运行环境

服务器与站点#

公网 IP206.187.208.148(香港)
主机名ser813482604558
操作系统Windows Server(IIS 10.0 + ARR 反向代理)
登录方式SSH 22 端口,密钥登录(密码登录已关闭)
站点根目录D:\juxiaoyi.ezagent.work
后端进程Node.js v20.18.0,监听 127.0.0.1:18890
磁盘D 盘 已用 50.3 GB / 剩余 19.6 GB

IIS 站点与绑定

站点物理路径绑定
juxiaoyi.ezagent.workD:\juxiaoyi.ezagent.workjuxiaoyi.ezagent.work(80/443)· www.juxiaoyi.cn(80/443)
web.ezagent.workD:\web.ezagent.workweb.ezagent.work · www.juxiaoyi.net(另一个项目,勿混)
i
说明www.juxiaoyi.cn 是同一站点的第二个绑定,不是独立站点 —— 所以两个域名访问的是同一份文件,改一处两边同时生效。

站点目录结构

D:\juxiaoyi.ezagent.work\
├─ index.html          官网 / 下载页
├─ login.html          PC 登录页
├─ admin\              PC 管理端(index.html / script.js / style.css / jxy-api.js / assets)
├─ app\                房东版网页
├─ t\                  租客版网页
├─ web\                旧 Web 后台
├─ manual\             操作手册(本次新增)
├─ handover\           交付说明书(本次新增)
├─ download\           安卓 APK
├─ qr\                 下载二维码
├─ img\  house-pics\   站点图片、房源图
├─ api\                后端代码 + node_modules + data\yuxiaoer.db
├─ logs\               运行日志
├─ backups\            数据库备份
├─ _b99bak-*\          本次部署前的自动备份
└─ web.config           IIS 规则(HTTPS 强制 + 反代)

web.config 关键规则

规则作用
jxy-force-https全站 HTTP 301 → HTTPS(/.well-known/ 除外,供证书续期)
jxy-api-proxy/api /uploads /downloads → http://127.0.0.1:18890
customHeadersX-Proxied-By: juxiaoyi-iis、HSTS 180 天
!
注意这台机器上不要在 web.config 里加 <handlers> / <modules> 的 remove 节点 —— 会触发 500.19 整站不可用。

守护进程与计划任务#

任务名作用触发
JuxiaoyiApi启动 run-api.ps1(内部 while 循环:node 退出 5 秒后自动重启)开机 / 手动
JuxiaoyiApiWatchdog每分钟探活,异常自动拉起每 1 分钟
JuxiaoyiWeb静态站点守护(IIS 侧)常驻
JuxiaoyiWebWatchdog静态站点探活每 1 分钟
JuxiaoyiDbBackup本次新增:每日备份居小易数据库,保留 14 份每日 03:30 + 开机
i
说明原来的 JuxiaoyiBackup 任务实际指向 D:\backup-web.ps1,备份的是另一个项目。居小易的库自 2026-10-13 起就没有新备份,本次已新建独立任务修复(详见「五、数据与备份」)。

HTTPS 证书#

证书主体CN=www.juxiaoyi.cn
覆盖域名(SAN)仅 www.juxiaoyi.cn
有效期2026-10-23 → 2027-01-21
存储位置IIS 站点绑定的 WebHosting 存储
!
注意证书不覆盖 juxiaoyi.cn(顶级域)和 juxiaoyi.ezagent.work。2027-01-21 前必须续期,否则全站 HTTPS 报错。续期用 win-acme(/.well-known/ 已在 web.config 里放行,正是为自动续期准备的)。

三、功能交付

功能清单与交付状态#

下表按业务模块列出交付状态。「已交付」=代码上线且可操作;「需配置」=功能在,但要填凭据或参数才能用。

模块主要功能状态
总览公告、新手引导、待办提醒、数据卡已交付
线索租客线索(公客/私客池)、业主线索、跟进、转签约已交付
审批审批中心(待我审批/我发起/抄送/已审批)、流程配置已交付(流程需配)
房源出房管理、空房快查、收房管理、批量编辑、批量定价、包房、巡房已交付
合同租客合同、预定、业主合同、供方合同、退租结算、续租向导已交付
财务账单、出账中心、流水、催收、发票、业主结算、付款授权、供应商、应付已交付
报表营业总表、利润报表、房态报表、水电报表已交付
设备智能电表/水表/门锁/网关、远程控制、临时密码、绑定账号已交付(需厂商账号)
抄表后付费抄表、仪表设置、批量抄表、自动生成水电账单已交付
工单报修工单全流程(受理/派单/挂起/完成)已交付
推广流量、营销活动、试住结算、分销已交付
会员人才轮候申请与分配已交付
网签网签登记与备案状态已交付(需签约主体)
社群租客评价、社群活动已交付
内容商城商品、硬件采购单、课程已交付
设置6 大类 33 个菜单(含支付、第三方接入、子账号、合同模板)已交付
在线支付微信直连、支付宝直连、付呗聚合、乐刷聚合(本次新增)已交付(需填凭据)
短信短信通道(阿里云/腾讯云)+ 模板报备需配置
电子签电子签平台对接需配置
地图腾讯地图找房需配置

本次上线内容(批次 97 / 98)#

新增:付呗 / 乐刷聚合收单

按付呗官方开放平台文档(yuque.com/51fubei/openapi)与乐刷开放平台文档(kancloud.cn/leshuadocs/saas)实现,不是占位。

能力付呗乐刷
统一下单fbpay.order.createget_tdcode
查单fbpay.order.queryquery_status
关单fbpay.order.closeclose_order
退款fbpay.order.refundunified_refund
退款查询fbpay.order.refund.queryunified_query_refund
回调form + data(JSON 字符串),应答 successform / XML,应答 000000
签名公共参数升序 → 无缝追加密钥 → MD5 → 大写&key= 拼接;报文大写 / 通知小写
金额单位元分(整数)

同时修复的两个真实缺陷

缺陷影响修法
退款按「租客付款方式」选通道聚合单退款会退到错误通道,钱退不回来或对不上账改为按原收款单的收单机构路由
退款流水沿用原收款单号payments.out_trade_no 唯一约束冲突 → 钱退了、账没记、接口报失败退款流水写退款单号,原单关系用 refund_of

本次实际改动的文件

文件类型变更
admin/index.html script.js style.css jxy-api.js前端付呗/乐刷配置卡片、通道状态、缓存戳 20261103c
api/src/services/fubei.js新增付呗客户端(签名、下单、查单、关单、退款、回调)
api/src/services/leshua.js新增乐刷客户端(签名、XML 解析、下单、条码、退款、回调)
api/src/services/payment.js改acquirer 统一层:acquirerSupports / CreateOrder / Query / Close / QueryRefund
api/src/services/credentials.js改providerStatus('pay') 增加 fubei / leshua 就绪判断
api/src/routes/payments.js改下单/查单/退款/4 个回调路由按 acquirer 分流
api/src/routes/bills.js改退款路由与流水记账修复
api/src/routes/settings.js改付呗 10 项 + 乐刷 7 项配置项、签名算法自检
api/src/routes/houses.js ops.js be-derived.js改批次 97 供方合同状态一致性等
api/src/index.js改回调中间件顺序(form/text 必须在 json 之前)
api/src/schema-extra.js改附加表结构(幂等)
i
说明部署前已在服务器建立完整备份:_b99bak-20261102-0629(278 个文件,含 admin 4 个静态文件 + 整个 api/src)。回滚只需把备份覆盖回去并重启 API。

四、验收记录

验收执行记录#

以下检查均在交付当日真实执行,不是勾选表。

#验收项方法结果
1服务健康GET /api/healthok=true
2管理员登录POST /auth/login成功,token 264 字符
3房源接口GET /houses?pageSize=1total=121
4账单接口GET /bills?pageSize=1total=242
5合同接口GET /contracts?pageSize=1total=59(列表口径)
6聚合通道状态GET /payments/gateway/status返回 fubei / leshua,acquirers 两项
7设置菜单网关GET /settings/menus → pay.gateway含 fubei / leshua 字段
8前端新功能admin/script.js 检索含 FUBEI_VENDOR_SN / LESHUA_MCH_ID
9缓存戳一致index.html + jxy-api.js全部 20261103c
10公网入口HEAD 6 个入口官网/登录页/admin/app/t/api-health 全 200
11数据库完整性PRAGMA integrity_checkok
12错误日志logs/api-err-*.log当日 0 字节(无错误)
13备份可用读取最新备份文件integrity ok,houses=121 / bills=242 / users=44

开发阶段的自动化验收(本地)

探针覆盖结果
_b98-acquirers.mjs付呗 19 项 + 乐刷 12 项 + 统一分发 6 项 + 回调链路 13 项 + 退款路由 11 项61 / 61
_b98-ui.mjs后台配置卡片、密钥掩码、通道状态、JS 报错8 / 8
_b52-admin-smoke.mjsPC 全 70 条路由冒烟70 / 70
i
说明支付类探针会启动本地假网关,按官方文档规则重新计算签名并校验,同时验证伪造签名被拒(401)、金额不一致被拒(400)、重复回调幂等。这些用例不依赖真实商户号。

数据现状#

指标数值说明
数据库文件api\data\yuxiaoer.dbSQLite,WAL 模式
数据库大小约 1.46 MB
数据表71 张业务表 + 设置表 + 日志表
房源121 套
合同64 条(列表口径 59)差额为已撤销/已删记录
账单242 条
流水74 条
用户44 个含管理员、员工、租客
!
注意库内现有数据包含演示与历史数据(如 45 条已退租合同、演示房源)。正式运营前建议:① 清理演示数据;② 或直接在空库上重新初始化。清理前务必先备份。

五、数据与备份

备份策略(本次已修复)#

发现的问题

交付核查时发现:计划任务 JuxiaoyiBackup 每天 03:00 执行的是 D:\backup-web.ps1(另一个项目),不是居小易的数据库备份脚本。

证据内容
备份日志最后一条2026-10-13 03:30:03 OK ... (912 KB)
最新备份文件yuxiaoer_20261013_033003.db(912 KB)
当前实际库yuxiaoer.db(1.46 MB)
结论自 10-13 起约 3 周没有可用备份

修复方式

  • 新建独立计划任务 JuxiaoyiDbBackup,指向 D:\juxiaoyi.ezagent.work\backup-db.ps1。
  • 触发:每日 03:30 + 开机时。以 SYSTEM 运行,最高权限。
  • 脚本先做 wal_checkpoint(TRUNCATE) 合并 WAL,再复制成 yuxiaoer_YYYYMMDD_HHmmss.db,保留最近 14 份,滚动删除最旧的。
  • 已立即手动执行一次:生成 yuxiaoer_20261102_063230.db(1496 KB),校验 integrity ok。
  • 原来的 JuxiaoyiBackup 任务保留不动(它还在为另一个项目服务)。

恢复步骤

  1. 1停 API
    结束监听 18890 的 node 进程(run-api.ps1 的循环会在 5 秒后自动拉起,所以要先停任务,或停完立刻换库)。更稳妥:Stop-ScheduledTask -TaskName JuxiaoyiApi 后再结束进程。
  2. 2备份当前库
    把现在的 yuxiaoer.db 改名留档(如 yuxiaoer.db.before-restore),不要直接覆盖。
  3. 3拷回备份
    把 backups\yuxiaoer_<时间戳>.db 复制为 api\data\yuxiaoer.db。
  4. 4清理残留 WAL
    删除同目录下的 yuxiaoer.db-wal / yuxiaoer.db-shm,否则会回放旧事务。
  5. 5起服务并验证
    启动 JuxiaoyiApi,访问 /api/health,再登录抽查房源数与账单数是否与备份时一致。
×
禁止恢复前务必先把当前库留档。恢复是覆盖操作,一旦覆盖且新库有问题,就没有回头路。

建议补充(当前未做)

项现状建议
异地备份备份与库在同一台机器每天把 backups\*.db 同步到对象存储或另一台机器
备份校验只写文件不校验在脚本末尾加一次 PRAGMA integrity_check,失败告警
备份告警无连续 2 天无新备份时发通知
保留策略14 份(约 2 周)按合规要求可延长到 90 天

数据结构概览#

共 71 张表,按用途分组:

分组主要表
房源houses buildings be_compartment house_meta house_promotions house_views favorites
合同contracts contract_content_versions contract_template_versions checkouts
财务bills payments bill_runs owner_settlements vendor_payments late_fee_rules pay_reconcile_log
客户customer_leads house_leads appointments visit_records trip_applications
服务workorders workorder_logs inspections inspect_templates repairs
设备devices device_logs meter_readings meter_prices
组织与权限users roles user_orgs organizations user_buildings
设置settings setting_items setting_logs integrations integration_credentials
内容与运营announcements messages chat_threads notifications be_product be_course
审计audit_logs approval_logs approvals reach_logs
i
说明敏感凭据存在 integration_credentials 表,按 provider 分组(pay / sms / esign / map),接口返回时一律掩码,密钥不回显。

六、运维手册

启停与重启#

重启后端(最常用)

run-api.ps1 内部是 while(true) 循环:node 退出后 5 秒自动重启。所以结束 node 进程就等于重启。

# 方式一:结束进程,等 5~10 秒自动拉起
$c = Get-NetTCPConnection -LocalPort 18890 -State Listen | Select-Object -First 1
Stop-Process -Id $c.OwningProcess -Force
Start-Sleep -Seconds 10
Invoke-RestMethod http://127.0.0.1:18890/api/health

# 方式二:走计划任务(会停掉守护循环,需要手动再起)
Stop-ScheduledTask  -TaskName JuxiaoyiApi
Start-ScheduledTask -TaskName JuxiaoyiApi
!
注意不要从 SSH 会话直接 node src/index.js 前台启动 —— 会话断开进程就被回收。常驻服务必须走计划任务。

静态文件更新

PC 管理端 / APP 网页版都是纯静态,覆盖文件后刷新即可(必要时 Ctrl+F5)。改完务必同步改缓存戳:index.html 的 style.css?v=、jxy-api.js?v=,以及 jxy-api.js 里的 BUILD,三处必须一致。

日志与排障#

日志位置看什么
API 输出logs\api-out-YYYYMMDD.log正常请求日志
API 错误logs\api-err-YYYYMMDD.log报错先看这里;0 字节表示无错误
进程重启logs\api-restarts.log每次 node 退出与重启都会记一条
探活logs\watchdog.log看门狗拉起记录
备份backups\backup.log每次备份 OK / SKIP / ROTATE
IIS%SystemDrive%\inetpub\logs\LogFilesHTTP 状态码、反代 502 排查

常见故障对照表

现象可能原因处理
全站 502后端没起来 / 端口不通查 api-err 日志;Get-NetTCPConnection -LocalPort 18890 确认监听;重启 API
页面能开但数据空接口 401(登录态失效)或反代规则被改看浏览器 Network;确认 web.config 的 api 反代规则在
改了文件没生效缓存Ctrl+F5;确认三处缓存戳已改
500.19 整站不可用web.config 里有 <handlers>/<modules> remove 节点删掉那些节点(这台机器上不能加)
HTTPS 证书告警证书过期或域名不匹配续期;注意证书只覆盖 www.juxiaoyi.cn
支付回调 400/401回调中间件顺序错 / 验签失败确认 index.js 里 form/text 解析器在 express.json 之前;核对密钥
备份没有新文件任务指向错脚本查 JuxiaoyiDbBackup 任务与 backup.log

发布流程(后续升级用)#

  1. 1备份
    把要覆盖的文件复制到 _bNNbak-时间戳\,文件数异常则中止。
  2. 2上传到临时目录
    打包成 zip 传到 C:\Windows\Temp\,不要直接传到站点目录 —— 先落文件再执行,避免半截文件被访问。
  3. 3解包并覆盖
    覆盖 admin\ 与 api\src\。
  4. 4重启 API
    结束 18890 进程,等自动拉起。
  5. 5探活 + 业务抽查
    /api/health → 登录 → 抽查房源/账单/合同接口 → 关键页面截图。
  6. 6改缓存戳
    三处一致(style.css?v= / jxy-api.js?v= / BUILD)。
  7. 7回滚预案
    任何一步失败:把备份目录覆盖回去 + 重启 API,5 分钟内可恢复。
!
注意上传 .ps1 前必须加 UTF-8 BOM(否则中文乱码/语法错);.bat 相反要去掉 BOM。ssh 命令里的双引号会被吞,复杂脚本一律「本地写文件 → scp → ssh -File 执行」。

七、已知限制

已知限制与待办#

#限制影响建议
1顶级域 juxiaoyi.cn 无 A 记录,证书不含顶级域用户输 juxiaoyi.cn 打不开域名商加 A 记录 → 206.187.208.148;给顶级域补签证书;再在 IIS 加绑定
2在线支付凭据未配置当前租客端只能线下转账按手册「场景九」填微信/支付宝/付呗/乐刷凭据,并做 1 分钱真单验证
3短信通道未开通(console 模拟)短信只打印不真发;验证码走其它路径配阿里云/腾讯云短信 + 报备 5 个场景模板
4微信/短信提醒未开通租客只能靠打开 APP 看消息开通公众号模板消息或短信
5电子签 / 网签未配签约主体网签提交会被平台退回在「设置 → 签约设置」填主体与电子签章
6库内为演示/历史数据报表数字不代表真实经营正式运营前清理演示数据
7备份与库同机、无异地副本机器故障会同时丢库和备份加异地同步
8证书 2027-01-21 到期到期后 HTTPS 报错设置续期提醒,确认 win-acme 自动续期可用
9无 CI / 自动化测试流水线每次升级靠人工探针把 _b98-* 这类探针纳入发布前必跑清单
10业主端未开放独立入口业主只能由房东代为操作按需排期

后续建议(按优先级)#

  1. 1P0 · 上线前必做
    配置支付凭据并做真单验证;清理演示数据;修改超管口令并建立子账号;给顶级域补 DNS 与证书。
  2. 2P0 · 备份加固
    异地备份 + 备份校验 + 连续失败告警。现在只有本机 14 份滚动备份。
  3. 3P1 · 提醒通道
    开通短信与微信提醒,让账单到期、催缴、报修进度能主动触达租客 —— 这直接影响回款速度。
  4. 4P1 · 数据初始化
    楼栋、仪表单价、账单生成规则、审批流程这四项配齐,系统才算真正「能用」。
  5. 5P2 · 合同与网签
    上传合同模板、配置电子签章与签约主体,启用「批量生成正文」与网签。
  6. 6P2 · 设备接入
    接智能门锁与水电表,启用自动抄表、远程开门、临时密码 —— 这是省人力最明显的一块。

交付确认#

本说明书所列环境、功能、数据与验收结果,均已在交付当日核对。接收方确认后,运维责任移交。

项目内容
交付方____________
接收方____________
交付日期2026-11-02
交付构建号20261103c
交付物网页版 / 房东版 APP / 租客版 APP / 后端 API / 数据库 / 操作手册 / 本说明书
遗留问题见「七、已知限制」,共 10 项,其中 P0 四项
签字交付方:_____ 接收方:_____
i
说明操作手册:https://www.juxiaoyi.cn/manual/ —— 面向业务人员,含每个按钮的说明与 10 个场景的分步操作。