feat(存量报价): 支持按发货名称手填录入及无编号报价 #348
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feature/limeng-stock-quote-manual-names"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
存量报价不再强制选择快递编号。批量预览保留原工作表名称,允许选择或手填与发货数据一致的完整快递名称;单家录入同样支持手填,草稿可更正。资料没有名称或缺少编号也能保存,且不会创建、修改快递资料或原始发货数据。只有完整名称唯一匹配时才附带已有真实编号,重名不猜。
沿用现有草稿、审核、签署资料核验及报价版本流程。无编号报价按确认名称和报价类型防止重复;原 Excel、公式、金额、图片和原工作表名保持原样。后续变价保留名称及历史原件,不修改旧版本价格。不同报价类型不会相互替代。
发货名称候选复用 ShippingOrderRepository,只读取最近 10000 条明细并缓存 5 分钟,最多返回 20 个匹配名称;明确标注为近期候选,未覆盖的名称可手填,不把候选当成完整发货历史。生产只读测量:全表原有候选查询约 9400ms,本次有界读取 10000 条产生 124 个名称约 109ms;不修改原有发货页面接口。
主要文件:存量控制器/Service/模型、批量/单家/核对页面、名称联想片段、报价版本分组、ShippingOrderRepository、对应测试及一项迁移。沿用公司隔离、报价管理页面权限、CSRF和安全检查;不存在的候选不阻止手填,不泄露数据库错误。
验证:43项相关测试、407个断言全部通过,覆盖批量、单家、报价变更和真实XSS防护;新增无编号、多家手填、重名不猜、重复拒绝、名称更正审计、原件保留、后续变价、同名不同报价类型和近期候选有界读取/缓存测试。实际浏览器验证三家无编号保存并提交审核、近期名称候选、重复错误修正、原图查看、单家录入及390px布局;120家批量预览约4.7秒、筛选35ms、提交审核约6.9秒。所有金额和图片验证使用合成资料,不声称用户真实报价已核对或导入。
数据库迁移:仅调整 business_courier_stock_quote_entries,将 courier_expcode 由必填改为可空,新增可空 courier_name_key(64位名称摘要)及 company_id + courier_name_key + quote_type 唯一索引。保留原编号唯一索引及既有业务数据,不回填或修改报价金额、发货数据、签署状态。回滚存在无编号记录时拒绝收紧字段,以保留业务记录。
已获用户明确授权,完成受影响表结构、数据及迁移状态的私有备份和完整性校验,按最新 main 发布 2399d42d6d7249ab20a18233dbf0a17b9ec88850。本项迁移已执行,无遗留待执行迁移;编号字段可空、名称唯一索引及原编号唯一索引均已核验。应用健康、当前和上一版镜像均保留。生产只读核验手填名称解析、页面服务端渲染及名称候选接口(HTTP 200);未使用生产浏览器会话提交真实报价,未修改真实报价、金额、发货数据或签署状态。保存时被XSS误拦截的独立修复已在 #347 合并并发布。
项目推进看板:本任务既有私密凭据不可用,已停止同步写入,不影响代码验证与推送。
WIP: feat(存量报价): 允许手填发货快递名称(待迁移授权)to feat(存量报价): 支持按发货名称手填录入及无编号报价