feat(报价管理): 增加存量报价录入与历史签署资料归档 #346

Merged
limeng merged 4 commits from feature/limeng-stock-quote-entry into main 2026-10-16 14:56:45 +08:00
Collaborator

当前发布状态:已正式上线(2026-10-16)

  • 分支已推送:feature/limeng-stock-quote-entry;本 PR 已 Squash merge。
  • 正式 main / 部署 SHA:9a25db91cc5195a988c9fc69032d8c39d8c41484。
  • 镜像:caiwu_akaunting:9a25db91cc51;服务器 .deployed-sha、镜像 revision 和公网业务脚本 SHA256 均已核对一致。
  • 生产 caiwu_app、caiwu_db、caiwu_config_db、caiwu_clickhouse 均 healthy;正式 HTTPS 证书验证通过。
  • 已在服务器私有持久卷备份、逐条重读并校验报价版本和迁移记录;负责人明确授权后,仅应用本任务 2026_10_16_000000_create_courier_stock_quote_entries(batch 112),全部待执行迁移为 0。
  • 新表、两个可空字段及唯一索引核验通过。发布前后原有报价逐行一致,新增字段均为空;未导入真实报价,存量录入记录为 0。
  • 生产合成文件存储验证:两张工作表各一张图片,经过本功能提取后写入私有七牛,读回逐字节一致;临时图片和本机临时工作簿均已删除,未创建任何报价。
  • 正式入口: https://caiwu.jiansuntuzhi.cn:8442/1/workspace/courier-payables/quote-management/stock-entries 。匿名访问正确跳转登录;生产登录后的真实 Excel 导入未执行,真实报价一致性核对仍待用户提供资料。
  • 本地回归:33 tests / 336 assertions;前轮浏览器已验证批量上传、原图查看下载、不同执行日期、草稿保存和移动布局。
  • 增量新增镜像层 77.64 MiB,上传用时 9.5 秒;发布包已清理。生产保留当前镜像和上一镜像 6c76a373a35f;数据库为增量建表/加可空字段,应用回滚不自动删除结构或覆盖数据。
  • 发布过程私有业务存储探测通过,旧文件复制 0、复用 0,本机原件保留。看板同步因本任务安全凭据上下文不可用而未写入,不影响上线。

以下为开发阶段记录;其中“待授权、未部署”等描述均属于上线前历史状态,以本节为准。


已有合作快递可以在「报价管理 → 录入存量报价」补录历史报价,关联快递资料的唯一编号,保留原 Excel、确认单及历史签署附件。保存草稿后逐项预览,按真实执行日期提交审核,审核后进入现有正式报价版本与后续变价流程。

  • 同名不同编号分别管理;同编号同类型拒绝重复录入。草稿替换报价仍保留历次原件及 SHA256 审计记录。
  • 保留原公式及缓存值,不执行上传工作簿中的公式。计费规则随版本留存并写入签署文件。
  • 历史签署资料由审核人明确核验后标记「历史签署资料已归档」,没有依据则为「待确认/待补签」;不伪造电子签署记录,不自动推送。
  • 存量首版补录保留历史日期,不按追溯变价处理;后续真实调价复用现有审核、版本、签署路径。

验证:4 个相关测试文件 37 项、312 断言通过;最终存量专项 10 项、79 断言通过;入驻后变价及临时价到期恢复回归 2 项、91 断言通过。浏览器验证桌面与手机布局、真实 Excel 上传、原文预览和重复录入错误。预览服务的 ServiceWorker 提示属于本地验收路由,业务流程检查通过。完整 diff 自审及 git diff --check 通过。

涉及金额及权限:复用报价审核和页面访问权限,隔离公司资料;仅登记报价版本,不修改既有运���或生产业务数据,不声称已完成自动运费核算。未改连接配置。

数据库:新增 business_courier_stock_quote_entries;为 business_courier_quote_versions 添加可空 courier_expcode(含索引)和 billing_rules。迁移已在独立 SQLite 验证。该迁移属于业务数据表变更,按 AGENTS.md 第6/8节,生产执行尚待用户明确授权;本 PR 暂不部署。

看板:当前任务的既有安全读取脚本上下文不可用,本次未调用看板写接口。

2026-10-16 业务反馈调整:整本 Excel 批量补录

  • 默认入口改为整本 Excel,一家一张工作表,单次最多200张、20MB;原件只保留一份,各家原文/公式/缓存金额分别保存,不执行上传文件公式。
  • 根据工作表名称精确匹配快递编号或唯一名称;重名、未匹配、本批重复编号和已有同类报价明确反馈,不猜测归属、不覆盖。
  • 共用计费规则及实际执行日期只填一次,可套用已有正式报价规则;少数差异建立规则分组、按家选择,执行日期可逐家覆盖。
  • 集中匹配预览、按工作表/名称/编号搜索、仅看待处理、只选已匹配、批量保存草稿和集中提交审核;审核/历史签署核验仍按家独立,不伪造通过或签章。
  • 预览及错误修正保留上传原件和配置;全批校验后同进同退,结果留存失败回滚;重发返回原结果。预览按公司及上传人隔离。
  • 保留“只补录一家”及原有单家编辑、附件、审核与签署路径。本轮不新增数据库迁移,仍依赖本PR已有业务表迁移,生产迁移未获授权,未合并/部署。

本轮验证

  • 相关功能回归:27项、234断言通过(批量/单家/报价变更),批量最终追加存储失败和空表边界后8项、77断言通过。
  • 实际浏览器:120家+1张说明工作表,识别预览约4.1秒、搜索约37毫秒、批量保存并提交审核约5.3秒;差异分组、单独日期、重复错误保留配置、390px手机布局通过。
  • 本机演示仅使用合成数据及独立SQLite;预览的serviceworker路由缺失导致注册报错,不影响业务操作,未据此宣称生产验收。
  • 增量看板同步:既有私密配置不可用,未调用写接口;不影响本PR。

2026-10-16 签署原件图片独立存档(5cb8e3e3)

已有合作快递可在「报价管理 → 录入存量报价」上传整本 Excel(一家一张工作表)或单家补录,关联已有快递资料的唯一编号,保留报价原文、公式及缓存值,并按真实执���日期走草稿、审核和正式报价版本流程。存量首版不重算历史运费,后续调价复用现有变价流程。

  • 整本导入最多 200 张工作表、20 MB。精确匹配编号或唯一名称,重名不猜;重复工作表及已有同类报价明确提示,拒绝覆盖。执行日期可逐家填写,共用日期和规则分组是可选的录入辅助,各家金额独立保留。
  • xlsx 工作表里的多张内嵌图片逐张按原始字节私有存档,不裁剪、不压缩、不重新编码。图片记录 SHA256、来源工作表、锚点和顺序,随对应报价保存,可在预览和报价详情中查看、下载。
  • 预览按公司及上传人隔离,报价附件按公司和现有页面权限访问。只允许常见位图内联预览,其他格式下载查看,不抓取外链图片。旧版 xls 无法无损提取的图片明确提示补充原图,整本原文件仍留存。
  • 图片留存不等同于核对通过。历史签署资料须明确核验后才标记「历史签署资料已归档」;没有核验则保持「待确认/待补签」,不伪造本系统电子签署记录。缺图明确提示,已经提取但存档丢失时阻止整批保存。存档失败不产生可用预览或报价。
  • 批量保存同进同退,重发返回既有结果,错误时保留选择以便修正。单家草稿替换保留历次原件,后续变价保留存量版本的全部图片。

���要改动:CourierStockQuoteEntryService / BatchService / ImageArchive、存量录入控制器和路由、批量及审核页面;并接入现有报价版本、签署状态和审计路径。

验证:批量、单家和报价变更相关测试共 33 项、336 断言通过,覆盖 120 家各带图片、多表多图逐字节保真、存档失败回滚、附件缺失、公司/上传人隔离、未核验不生效、后续变价原件留存和 xls 限制。实际浏览器验证上传、图片查看及下载、保存草稿后原图保真、不同执行日期和 390px 手机布局;3 表含 3 张图的预览约 3.9 秒。完整 diff 自审和 git diff --check 通过。本地预览仍有已知 serviceworker 注册提示,未修改此无关配置。

涉及金额及权限:复用现有报价审核和访问权限,不执行上传工作簿公式,不修改既有运费、生产业务数据或连接配置。没有实现签署图片 OCR 自动比价或自动识别执行日期;用户真实原始 Excel 尚未提供,以上验证均使用合成数据,未声称真实报价已核对、导入或生效。

数据库:本 PR 新增 business_courier_stock_quote_entries,并为 business_courier_quote_versions 添加可空 courier_expcode(含索引)及 billing_rules;图片归档本轮未新增迁移。已有业务表迁移已在独立 SQLite 验证,生产执行尚待明确授权,本 PR 保持未合并、未部署。

项目推进同步:本任务既有私密凭据上下文不可用,已停止同步写入;不影响本地验证与代码提交。未到其他任务查找凭据,未输出或保存 API Key。

2026-10-16 发布准备

  • 已合入最新 main(6c76a373),任务分支无冲突、工作区干净,完整差异已自审。
  • 合并后重新验证:33 tests / 336 assertions 通过(存量报价批量录入、签署原图归档、报价变价回归)。
  • 已只读检查生产:当前 6c76a373、应用 healthy;本次唯一新增待迁移为 2026_10_16_000000_create_courier_stock_quote_entries。
  • 负责人已���确授权:备份后创建存量报价表、增加快递编号及计费规则两个可空字段并继续上线;不改写原报价金额、不导入真实报价。
  • 当前阶段:准备备份及正式 main 发布,尚未完成生产切换。完成后补充实际 SHA、迁移、存储与页面验收结果。
## 当前发布状态:已正式上线(2026-10-16) - 分支已推送:`feature/limeng-stock-quote-entry`;本 PR 已 Squash merge。 - 正式 main / 部署 SHA:`9a25db91cc5195a988c9fc69032d8c39d8c41484`。 - 镜像:`caiwu_akaunting:9a25db91cc51`;服务器 `.deployed-sha`、镜像 revision 和公网业务脚本 SHA256 均已核对一致。 - 生产 `caiwu_app`、`caiwu_db`、`caiwu_config_db`、`caiwu_clickhouse` 均 healthy;正式 HTTPS 证书验证通过。 - 已在服务器私有持久卷备份、逐条重读并校验报价版本和迁移记录;负责人明确授权后,仅应用本任务 `2026_10_16_000000_create_courier_stock_quote_entries`(batch 112),全部待执行迁移为 0。 - 新表、两个可空字段及唯一索引核验通过。发布前后原有报价逐行一致,新增字段均为空;未导入真实报价,存量录入记录为 0。 - 生产合成文件存储验证:两张工作表各一张图片,经过本功能提取后写入私有七牛,读回逐字节一致;临时图片和本机临时工作簿均已删除,未创建任何报价。 - 正式入口: https://caiwu.jiansuntuzhi.cn:8442/1/workspace/courier-payables/quote-management/stock-entries 。匿名访问正确跳转登录;生产登录后的真实 Excel 导入未执行,真实报价一致性核对仍待用户提供资料。 - 本地回归:33 tests / 336 assertions;前轮浏览器已验证批量上传、原图查看下载、不同执行日期、草稿保存和移动布局。 - 增量新增镜像层 77.64 MiB,上传用时 9.5 秒;发布包已清理。生产保留当前镜像和上一镜像 `6c76a373a35f`;数据库为增量建表/加可空字段,应用回滚不自动删除结构或覆盖数据。 - 发布过程私有业务存储探测通过,旧文件复制 0、复用 0,本机原件保留。看板同步因本任务安全凭据上下文不可用而未写入,不影响上线。 以下为开发阶段记录;其中“待授权、未部署”等描述均属于上线前历史状态,以本节为准。 --- 已有合作快递可以在「报价管理 → 录入存量报价」补录历史报价,关联快递资料的唯一编号,保留原 Excel、确认单及历史签署附件。保存草稿后逐项预览,按真实执行日期提交审核,审核后进入现有正式报价版本与后续变价流程。 - 同名不同编号分别管理;同编号同类型拒绝重复录入。草稿替换报价仍保留历次原件及 SHA256 审计记录。 - 保留原公式及缓存值,不执行上传工作簿中的公式。计费规则随版本留存并写入签署文件。 - 历史签署资料由审核人明确核验后标记「历史签署资料已归档」,没有依据则为「待确认/待补签」;不伪造电子签署记录,不自动推送。 - 存量首版补录保留历史日期,不按追溯变价处理;后续真实调价复用现有审核、版本、签署路径。 验证:4 个相关测试文件 37 项、312 断言通过;最终存量专项 10 项、79 断言通过;入驻后变价及临时价到期恢复回归 2 项、91 断言通过。浏览器验证桌面与手机布局、真实 Excel 上传、原文预览和重复录入错误。预览服务的 ServiceWorker 提示属于本地验收路由,业务流程检查通过。完整 diff 自审及 git diff --check 通过。 涉及金额及权限:复用报价审核和页面访问权限,隔离公司资料;仅登记报价版本,不修改既有运���或生产业务数据,不声称已完成自动运费核算。未改连接配置。 数据库:新增 business_courier_stock_quote_entries;为 business_courier_quote_versions 添加可空 courier_expcode(含索引)和 billing_rules。迁移已在独立 SQLite 验证。该迁移属于业务数据表变更,按 AGENTS.md 第6/8节,生产执行尚待用户明确授权;本 PR 暂不部署。 看板:当前任务的既有安全读取脚本上下文不可用,本次未调用看板写接口。 ## 2026-10-16 业务反馈调整:整本 Excel 批量补录 - 默认入口改为整本 Excel,一家一张工作表,单次最多200张、20MB;原件只保留一份,各家原文/公式/缓存金额分别保存,不执行上传文件公式。 - 根据工作表名称精确匹配快递编号或唯一名称;重名、未匹配、本批重复编号和已有同类报价明确反馈,不猜测归属、不覆盖。 - 共用计费规则及实际执行日期只填一次,可套用已有正式报价规则;少数差异建立规则分组、按家选择,执行日期可逐家覆盖。 - 集中匹配预览、按工作表/名称/编号搜索、仅看待处理、只选已匹配、批量保存草稿和集中提交审核;审核/历史签署核验仍按家独立,不伪造通过或签章。 - 预览及错误修正保留上传原件和配置;全批校验后同进同退,结果留存失败回滚;重发返回原结果。预览按公司及上传人隔离。 - 保留“只补录一家”及原有单家编辑、附件、审核与签署路径。本轮不新增数据库迁移,仍依赖本PR已有业务表迁移,生产迁移未获授权,未合并/部署。 ### 本轮验证 - 相关功能回归:27项、234断言通过(批量/单家/报价变更),批量最终追加存储失败和空表边界后8项、77断言通过。 - 实际浏览器:120家+1张说明工作表,识别预览约4.1秒、搜索约37毫秒、批量保存并提交审核约5.3秒;差异分组、单独日期、重复错误保留配置、390px手机布局通过。 - 本机演示仅使用合成数据及独立SQLite;预览的serviceworker路由缺失导致注册报错,不影响业务操作,未据此宣称生产验收。 - 增量看板同步:既有私密配置不可用,未调用写接口;不影响本PR。 ## 2026-10-16 签署原件图片独立存档(5cb8e3e3) 已有合作快递可在「报价管理 → 录入存量报价」上传整本 Excel(一家一张工作表)或单家补录,关联已有快递资料的唯一编号,保留报价原文、公式及缓存值,并按真实执���日期走草稿、审核和正式报价版本流程。存量首版不重算历史运费,后续调价复用现有变价流程。 - 整本导入最多 200 张工作表、20 MB。精确匹配编号或唯一名称,重名不猜;重复工作表及已有同类报价明确提示,拒绝覆盖。执行日期可逐家填写,共用日期和规则分组是可选的录入辅助,各家金额独立保留。 - xlsx 工作表里的多张内嵌图片逐张按原始字节私有存档,不裁剪、不压缩、不重新编码。图片记录 SHA256、来源工作表、锚点和顺序,随对应报价保存,可在预览和报价详情中查看、下载。 - 预览按公司及上传人隔离,报价附件按公司和现有页面权限访问。只允许常见位图内联预览,其他格式下载查看,不抓取外链图片。旧版 xls 无法无损提取的图片明确提示补充原图,整本原文件仍留存。 - 图片留存不等同于核对通过。历史签署资料须明确核验后才标记「历史签署资料已归档」;没有核验则保持「待确认/待补签」,不伪造本系统电子签署记录。缺图明确提示,已经提取但存档丢失时阻止整批保存。存档失败不产生可用预览或报价。 - 批量保存同进同退,重发返回既有结果,错误时保留选择以便修正。单家草稿替换保留历次原件,后续变价保留存量版本的全部图片。 ���要改动:CourierStockQuoteEntryService / BatchService / ImageArchive、存量录入控制器和路由、批量及审核页面;并接入现有报价版本、签署状态和审计路径。 验证:批量、单家和报价变更相关测试共 33 项、336 断言通过,覆盖 120 家各带图片、多表多图逐字节保真、存档失败回滚、附件缺失、公司/上传人隔离、未核验不生效、后续变价原件留存和 xls 限制。实际浏览器验证上传、图片查看及下载、保存草稿后原图保真、不同执行日期和 390px 手机布局;3 表含 3 张图的预览约 3.9 秒。完整 diff 自审和 git diff --check 通过。本地预览仍有已知 serviceworker 注册提示,未修改此无关配置。 涉及金额及权限:复用现有报价审核和访问权限,不执行上传工作簿公式,不修改既有运费、生产业务数据或连接配置。没有实现签署图片 OCR 自动比价或自动识别执行日期;用户真实原始 Excel 尚未提供,以上验证均使用合成数据,未声称真实报价已核对、导入或生效。 数据库:本 PR 新增 business_courier_stock_quote_entries,并为 business_courier_quote_versions 添加可空 courier_expcode(含索引)及 billing_rules;图片归档本轮未新增迁移。已有业务表迁移已在独立 SQLite 验证,生产执行尚待明确授权,本 PR 保持未合并、未部署。 项目推进同步:本任务既有私密凭据上下文不可用,已停止同步写入;不影响本地验证与代码提交。未到其他任务查找凭据,未输出或保存 API Key。 ## 2026-10-16 发布准备 - 已合入最新 main(6c76a373),任务分支无冲突、工作区干净,完整差异已自审。 - 合并后重新验证:33 tests / 336 assertions 通过(存量报价批量录入、签署原图归档、报价变价回归)。 - 已只读检查生产:当前 6c76a373、应用 healthy;本次唯一新增待迁移为 2026_10_16_000000_create_courier_stock_quote_entries。 - 负责人已���确授权:备份后创建存量报价表、增加快递编号及计费规则两个可空字段并继续上线;不改写原报价金额、不导入真实报价。 - 当前阶段:准备备份及正式 main 发布,尚未完成生产切换。完成后补充实际 SHA、迁移、存储与页面验收结果。
limeng added 1 commit 2026-10-16 11:02:01 +08:00
limeng added 1 commit 2026-10-16 13:33:12 +08:00
limeng added 1 commit 2026-10-16 14:27:19 +08:00
limeng added 1 commit 2026-10-16 14:55:59 +08:00
limeng merged commit 9a25db91cc into main 2026-10-16 14:56:45 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WuYongJie/CaiWuXiTong#346
No description provided.