Files
airz-uniapp/docs/产品表还原与选填核对-20261013.md
hujun c95482a0f3 feat: 实现协议全文与同意记录功能
新增协议全文后台管理、版本化发布及本人同意记录功能,支持可撤销授权;完善资料与授权相关边界提示,调整评估提交时的资料与授权校验逻辑,同步更新相关页面文案与路由。
2026-10-14 14:53:13 +08:00

84 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 产品原字段还原与选填实施记录
## 正式发布:2026-10-14 原16字段已生效
用户已授权正式服务器一起处理并部署,版本20261014-product-original-r1。产品表实际29列,其中bank_logo31条均为空;现恢复为原16字段,15个扩展列移除,仍使用的匹配配置保留在原文本字段,expectation/quota恢复说明。31产品及状态保持,6旧日期边界解除并递增版本;其余28业务表和历史报告保持。17配套文件已上线,入口与worker恢复,小程序由用户发行。
本地613项迁移/产品回归与14项发布工具边界通过,正式131项源码/依赖摘要、产品内容/版本和其他业务表一致性、HTTPS与回退预检通过;没有真实模型调用、合成业务导入或提交。完整旧表、源码和私密备份留存于/root/airz-product-original-20261014及D:/AAdesk/202609/airz-backups/production-release/airz-product-original-20261014。恢复必须保护后续数据并使用本轮回执,不能整库覆盖。下方未部署、未转换、仅编辑解除日期为历史记录。
## 后续调整:移除管理端生效与失效日期
2026-10-13:按用户要求删除新增/编辑页的生效日期、失效日期输入,产品开放状态通过上架/下架控制。保存及发布预检由控制器统一显式设置两日期为NULL,防止旧日期隐藏后继续生效,也不接受客户端补传日期恢复自动到期。旧产品下一次编辑保存时解除限制;本轮不批量改写旧数据,不删除内部兼容字段,不重算历史冻结报告。旧规则保护、版本冲突与16/28字段兼容保持。
622项本地检查通过:565项纯内存编辑/发布/存储/匹配回归,新16/旧28字段实际事务保存各12项,Chrome桌面与窄屏交互33项;覆盖旧过期/未来日期解除、预检与保存一致、手动上下架、补传日期覆盖及旧窗口拒绝。截图:[移除日期后的基本信息](D:/AAdesk/202609/airz-backups/product-remove-dates-20261013/admin-no-dates-desktop.png)。修改前备份、测试日志、源码摘要及清理回执保存在D:/AAdesk/202609/airz-backups/product-remove-dates-20261013。未部署、正式库访问、模型调用或提交;下方日期选填描述为历史记录。
## 后续调整:地区、用途统一到条件列表
2026-10-13:按用户最新要求移除独立“地区与用途”,经“添加条件”选择或手输入名称;已有地区/用途在条件列表回显,删除后更新对应配置。已知名称仍使用固定规则;自定义名称、比较方式、文字要求、对象及说明保存到原other内的可选manualConditions,不增加表列或融资项。自定义条件按对象提示待核实、不自动满足、不计软评分、不进入推荐排名;原硬条件不符仍不推荐。旧冻结报告不重算。
本轮1013项检查通过:管理端实际选择/手输/多选回显/保存/删除/重复及空行拦截/旧规则保护与重建42项,纯自定义29项、实际假模型任务和已保存报告12项,现有编辑/发布/匹配/评分/规则/选填/存储及16/28字段兼容715项,历史报告/PDF215项。桌面1280×900、窄屏390×844页面及交互通过,无应用控制台错误/警告。PHP/JS语法和差异空白检查单独记录;失败或重复运行不累计,不与下方前轮2120项相加。
源码及页面证据:D:/AAdesk/202609/airz-backups/product-condition-input-20261013;[空条件界面](D:/AAdesk/202609/airz-backups/product-condition-input-20261013/admin-empty-desktop.png)、[已添加条件](D:/AAdesk/202609/airz-backups/product-condition-input-20261013/admin-conditions-desktop.png)。仅本地修改后端/管理端,未部署、迁移正式库、提交或调用真实模型。两仓既有改动保留;资源清理见cleanup.json。
2026-10-13,用户明确选择“表字段尽量恢复原版,匹配配置存入原有文本字段”。本节取代前轮范围待选状态,下方保留日期选填阶段历史。
用户已选择恢复16个原字段名,匹配参数、可选日期和内部版本收纳到原other文本配置;expectation/quota恢复为额度/期限说明。管理端仅产品名称、适用对象为基本必填(新建默认企业),机构/类型/来源/额度/期限/利率/日期等可空,填写后仍校验;资料不足显示待核实,不进入推荐排名。保留InnoDB事务、varchar(100)产品名与状态默认草稿,旧冻结报告不重算。
本轮只在专用本机合成MySQL/Redis/HTTP/H5环境验证,不读取正式.env、不访问正式库、不调用真实模型、未部署/提交/推送。正式产品表仍未迁移;发布应配套后端与管理端,不能只覆盖原三个文件。小程序仍由用户发行,真机、正式数据预检和用户验收尚未完成。
## 存储和管理端
新库产品表使用全部16个原字段名;ProductStorage包装额外参数到other的product-storage-v1 JSON,同时保留other原文或原型评分配置,condition/grade/information/recommendation/deprecated原文保持。旧28字段表兼容读取/保存;切换前独立列优先,切换后读配置。金额仍为元十进制字符串,管理端数值以万元录入;原额度/期限说明不推算数值。未提供的上下限不生成规则,单边值显示最低/最高。
生效空值不限制开始日期,失效空值不自动到期;明确填写的格式、顺序、未来/过期逻辑保持。地区/来源待核实时允许保存上架展示,但结果为unknown、rank为空;仅原准入说明不能当作结构化条件已满足。基础分80可配置、满足软条件加减分且限制0—100、硬条件不符不推荐保持。融资28项不扩展,产品原文AI分析不恢复。
模型保存统一事务/行锁、合并局部更新、递增内部版本和表单冲突检测。迁移工具默认只读,显式目标/私密配置;超长、损坏、未知列、目标不符均拒绝,stage逐字段核对后双表切换并保留原表,不直接DROP列。仅合成2条产品完成真实转换和回撤演练,正式库全量预检未执行。完整指令见[迁移说明](D:/AAdesk/202609/airz/database/product-original-migration.md)。
## 验证
本轮2120项检查通过:纯转换/发布/编辑/规则/评分、16与28字段实际模型及目录、评估提交/重评/助手/匹配接口、历史报告/PDF、迁移拒绝与回撤、UTS及实际页面;管理端15项、小程序受控H5 8项,1280×900和390×844无应用控制台错误。微信29页编译成功。失败和重复运行不累计,前轮582/980项不另加。
证据根:D:/AAdesk/202609/airz-backups/product-original-storage-20261013,verification.json绑定源码摘要,migration-qa.json记录11项演练,admin-qa.json/mobile-qa.json与截图记录页面验证。合成迁移保留before原表与精确回撤SQL;工具不能自动暂停写入,生产转换须另按目标、备份和维护窗口授权。
- 纯逻辑:40存储、122发布、232编辑、151旧匹配、20展示、7选填、64硬规则。
- 真实存储:新16/旧28字段各31,目录46,发布模型22,匹配接口238(101 HTTP)、提交514(158 HTTP/5假调用)、重评58、助手165、报告持久化75、历史/PDF215、任务19、展示持久化17。
- 其他:UTS19、迁移11、管理端15、受控H5 8;PHP/JS语法、差异空白检查及微信编译单独记录,不计入2120。
浏览器技能不在当前工具目录,使用已有Playwright/Chrome,不安装依赖。管理端实测最少录入→保存→上架→恢复说明→回显→旧窗口拒绝→下架/再上架;H5业务API全部拦截,用真实规则输出的合成DTO,验证未提供/待核实、空日期、文字说明和单边范围。截图证据:[管理端额度与期限](D:/AAdesk/202609/airz-backups/product-original-storage-20261013/admin-quota-desktop.png)、[小程序选填展示](D:/AAdesk/202609/airz-backups/product-original-storage-20261013/product-original-mobile.png)。
源码修改前备份及SHA保存在before目录,两仓既有未提交改动保留。测试库及回撤表/证据保留,所属服务清理情况以cleanup.json为准;不得重跑setup.py/prepare-qa.py创建或覆盖环境,不得把默认.env用于测试。
---
## 前轮历史:原字段核对与日期选填
2026-10-13:用户提供原始 `fa_product`,要求尽可能恢复原字段,并减少生效、失效日期等录入要求。本轮先核对两种表结构,完成日期选填的共同改动;物理表还原范围已通过异步问题征询,尚未收到选择。没有执行DDL、生产写入或部署。
## 表结构核对与建议
原表有16个字段;当前有28个字段。原 `expectation`(额度)与 `quota`(期限)被结构化额度和期限取代,额外存在金额上限、期限上限、年化利率、年龄、经营月数、地区、准入规则、生效/失效日期及资料版本字段。这些字段涉及 Product 模型保存、发布编译、公共目录SQL、冻结匹配快照和当前可用性查询,不能仅删除列或覆盖CREATE TABLE。
若选择尽量恢复物理字段,建议恢复全部16个原字段名,把机器匹配参数、地区、准入规则、可选日期和内部版本收纳到原 `other` 的版本化JSON配置,由服务端适配器解码为原有内部接口。额度/期限的原文使用 `expectation`/`quota` 保存,明确数值参数保留在配置中;不从任意说明文字猜测金额。评分、资料和理由模板沿用现有配置,并保留原说明。对TEXT容量、旧JSON格式、金额精度和模板引用分别校验,不截断数据。
建议保留两处与原DDL不同的技术设置:InnoDB继续提供事务、行锁和批量失败回滚;产品名称保留varchar(100),避免已经允许保存的长名称被截断。名称收缩到20字必须先核对已有数据。内部版本移入配置以后仍要保留并发保存检测,不让运营手工维护。
另一种选择是只简化管理端而保留28个物理字段。它无需数据迁移、读写适配或切换产品表,功能验证范围更小;数据库字段多并不意味着每个字段都必须由运营填写。
完整物理还原的必要步骤是:显式配置只读预检 → 产品完整备份 → 在新表转换每条产品并核对额度、条件、说明和版本 → 验证新旧保存/匹配与旧报告一致 → 在停止写入的窗口切换并保留旧表以供定向回撤。历史评估快照不重算,不运行早期要求空业务表的 `database/migrate.py`,不直接DROP新增列。此路径尚未实现或执行,不能当作可直接上线的迁移脚本。
## 本轮已实施:有效期选填
- 生效日期空值:不限制开始日期;失效日期空值:不设自动到期。
- 保存时空字符串转为SQL NULL;发布预检与编译接受缺失、NULL或空字符串。
- 填写的日期仍须有效,两日期均存在时仍检查先后顺序;已到期产品仍不能发布,未来生效产品仍不进入当前目录。
- 公共目录、评估冻结目录和匹配记录可用性同步接受可空边界;下架产品仍不可用。
- 管理端说明选填语义;小程序分别显示“未设置有效期”“有效至…”“…起生效”或完整起止日期,不显示空的“至”。
其他字段的必填规则尚未放宽:保存草稿要求产品名称及表单对象/配置格式有效;上架仍要求产品类型、机构、数值额度/期限/利率、已确认地区及规则来源。日期选填不代表这些字段已全部改为选填。下一步应根据表结构选择统一简化,保留真实条件和来源状态,不编造日期、利率或核验记录。
## 验证与证据
发布155项、编辑234项、旧匹配151项、UTS显示18项、实际隔离MySQL模型/目录/匹配24项,共582项通过;7个PHP文件语法与差异空白检查通过。实际SQL覆盖四种空/非空日期组合、未来生效、过期、下架和事务回滚,原有合成产品逐行保持。微信29页编译结果见仓库外 `mp-dates.log`。
本轮修改前源码备份、SHA256与测试日志存于 `D:/AAdesk/202609/airz-backups/product-original-20261013`。测试使用前轮专用合成MySQL目录和新的本机端口、独立ROOT/ENV_PREFIX,不读取正式.env、不调用模型。测试进程已停止,端口释放;不改变正式或其他本机服务。本轮没有提交、推送、生产数据迁移或小程序发行。