forked from erp-dev/erp
feat: red flush
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user