feat(pl): 实现合同产品用证与额度结转以支持购买证和运输证全流程管理。

This commit is contained in:
wuzilong committed 2026-11-01 18:56:05 +08:00
1 parent cb0344498a
commit fb866c7fa7
104 files changed
+10187 -3833

No files matched your search

@@ -1,8 +1,8 @@
-- 购买证、运输证与用量核算模型(2026-10-30修订设计草案)
-- 购买证、运输证与用量核算模型(2026-11-01修订设计草案)
-- 仅供评审,不是上线迁移;本次不执行DDL,不更改既有业务表。
-- 取代本文件2026-10-25版:证面仅保留用户分别确认的9项;删除自动换算系数。
-- 建档补充设计与开发步骤:docs/superpowers/specs/2026-10-30-pl-cert-entry-modes-design.md
-- 原2026-10-26设计及开发文档当前工作区未找到,此补充不代表完整业务实现。
-- 完整方案与实施清单:openspec/changes/pl-contract-cert-quota-control/;取消证书齐备人工/附件放行。
-- MySQL 5.7.8+ / InnoDB / utf8mb4 / UUID varchar(64) / 公共字段尾置。
-- JSON仅用于车牌列表与业务快照;支持图片解析预填既有证面字段,不增加二维码、印章、核发机关字段。
-- manual手工录入可无图片;image_parse为图片解析后人工确认建档,两者共用档案及用量规则。
@@ -14,7 +14,8 @@
-- total_qty、reserved_qty、used_qty全部使用本证quantity_unit;剩余量不单独存储。
-- 异单位只接受用户填写的证件数量;即便吨和千克不同也不自动乘除,不复用历史系数。
-- 合同产品与购买证多对多;同一产品可选择多张购买证并分配本次来源量,每张证仅扣其分配量。
-- 本次运输证仍每个业务产品项选择一张,按完整来源量计量;购买证分配不得使运输证重复扣量。
-- 购买证、运输证均可跨多张分配;各证种分别覆盖来源需求,运输证多车共享同一额度。
-- 预览不占用;安排事务自动预占;同单位归档按原分配顺序结转,未用部分释放。
-- 同一实际运输的同一张证不能装送两侧重复扣;item指定计量来源,另一侧只追溯。
-- 相同证件/关联/usage的唯一键不含del_flag;停用后恢复原记录,不重建额度。
-- 首次启用必须写opening流水并核实历史已用量,不能默认为剩余全额。
@@ -214,17 +215,18 @@ CREATE TABLE `pl_plan_cert_usage_item` (
`source_stop_id` varchar(64) NOT NULL COMMENT '计量来源装货或送货段ID',
`source_stop_product_id` varchar(64) NOT NULL COMMENT '计量来源段次产品行ID',
`related_stop_products` json DEFAULT NULL COMMENT '关联另一侧段产品ID列表,仅用于追溯,不另行扣量',
`allocation_seq` int NOT NULL COMMENT '同计划同合同来源同证种的分配顺序,正数且不重复;归档按此顺序结转',
`source_unit` varchar(32) NOT NULL COMMENT '来源段产品单位',
`planned_source_qty` decimal(18,6) NOT NULL COMMENT '安排时来源段产品完整计划数量快照,来源单位;跨证重复快照不得求和',
`allocated_source_qty` decimal(18,6) DEFAULT NULL COMMENT '本证分配的来源计划数量,来源单位;同产品各购买证合计须等于完整计划量',
`allocated_source_qty` decimal(18,6) DEFAULT NULL COMMENT '本证分配的来源计划数量,来源单位;同产品同证种各证合计须等于完整计划量',
`actual_source_qty` decimal(18,6) DEFAULT NULL COMMENT '归档时来源段产品完整实际数量快照,来源单位;未知为NULL',
`actual_allocated_source_qty` decimal(18,6) DEFAULT NULL COMMENT '归档时本证分配的来源实际数量;各购买证合计须等于完整实际量,重新确认',
`planned_cert_qty` decimal(18,6) DEFAULT NULL COMMENT '用户确认的安排用证量,证件单位;草稿可空,预占前必填',
`actual_allocated_source_qty` decimal(18,6) DEFAULT NULL COMMENT '归档时本证分配的来源实际数量;同产品同证种各证合计须等于完整实际量;异单位重新确认',
`planned_cert_qty` decimal(18,6) DEFAULT NULL COMMENT '自动分配或人工确认的安排用证量,证件单位;草稿可空,预占前必填',
`reserve_input_mode` varchar(16) DEFAULT NULL COMMENT 'same_unit同单位带入/manual异单位人工填写',
`reserve_conversion_note` varchar(1000) DEFAULT NULL COMMENT '异单位安排折算说明,manual时必填;不存自动换算系数',
`reserve_confirmed_by` varchar(64) DEFAULT NULL COMMENT '安排折算量确认人,服务端取当前用户',
`reserve_confirmed_time` datetime DEFAULT NULL COMMENT '安排折算量确认时间',
`actual_cert_qty` decimal(18,6) DEFAULT NULL COMMENT '用户确认的实际用证量,证件单位;不可用预占量替代',
`actual_cert_qty` decimal(18,6) DEFAULT NULL COMMENT '按实际来源量自动分配或人工确认的实际用证量,证件单位;不可用预占量替代',
`settle_input_mode` varchar(16) DEFAULT NULL COMMENT 'same_unit同单位带入/manual异单位重新人工填写',
`settle_conversion_note` varchar(1000) DEFAULT NULL COMMENT '异单位归档折算说明,manual时必填',
`settle_confirmed_by` varchar(64) DEFAULT NULL COMMENT '归档实际用证量确认人,服务端取当前用户',