1
0
forked from erp-dev/erp

feat: red flush

This commit is contained in:
2026-06-12 13:57:21 +08:00
parent 80db7867f4
commit 0bcaa2db44
33 changed files with 2997 additions and 17 deletions

View File

@@ -428,6 +428,7 @@ class StockFlowService:
items: List[Dict[str, Any]] | None = None,
request_id: str | None = None,
extra_meta: Dict[str, Any] | None = None,
red_flush_id=None,
) -> Tuple[models.StockChangeRecord, List[models.StockChangeDetail], int]:
"""
创建针对既有库存变动记录的红冲(对冲)占位接口。
@@ -438,6 +439,7 @@ class StockFlowService:
items: 可选的部分红冲明细(支持宽进/严进等结构);为空时表示全量对冲。
request_id: 幂等键;同一 request_id 的请求应视为一次操作。
extra_meta: 额外的上下文信息(触发来源、操作者备注等)。
red_flush_id: 业务红冲批次 ID用于跨模块审计追踪。
Returns:
新生成的反向 `StockChangeRecord`、其明细列表以及明细数量。
@@ -452,6 +454,7 @@ class StockFlowService:
reason=reason.strip(),
request_id=request_id,
extra_meta=extra_meta or {},
red_flush_id=red_flush_id,
)
return offset_record, created_details, len(created_details)
@@ -462,6 +465,7 @@ class StockFlowService:
reason: str,
request_id: str | None,
extra_meta: Dict[str, Any],
red_flush_id,
) -> Tuple[models.StockChangeRecord, List[models.StockChangeDetail]]:
with transaction.atomic():
source_record = (
@@ -503,9 +507,14 @@ class StockFlowService:
source_type=models.StockChangeSourceEnum.OFFSET,
source_id=source_record.id,
created_by=self.created_by,
red_flush_id=red_flush_id,
remarks=remarks[:500],
)
if red_flush_id and source_record.red_flush_id is None:
source_record.red_flush_id = red_flush_id
source_record.save(update_fields=['red_flush_id', 'updated_at'])
created_details: List[models.StockChangeDetail] = []
for detail in source_details:
new_detail = models.StockChangeDetail.objects.create(