1
0
forked from erp-dev/erp

feat: external_order refetch api

This commit is contained in:
2026-04-16 17:34:16 +08:00
parent 4f3109546d
commit e109c00837
9 changed files with 1547 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('basic_info', '0026_transportvehicle_and_capacity'),
('printing', '0037_printingjob_is_production_completed'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='PrintingOrderExternalSnapshotSyncAudit',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
('external_order_id', models.CharField(db_index=True, max_length=100, verbose_name='外部订单编号')),
('before_snapshot', models.JSONField(blank=True, default=dict, verbose_name='同步前快照')),
('allow_reset_stateflow', models.BooleanField(default=False, verbose_name='允许撤销工序')),
('is_success', models.BooleanField(default=False, verbose_name='是否成功')),
('failure_reason', models.TextField(blank=True, default='', verbose_name='失败原因')),
('operator_employee', models.ForeignKey(blank=True, null=True, on_delete=models.SET_NULL, related_name='printing_order_external_snapshot_sync_audits', to='basic_info.employee', verbose_name='操作员工')),
('operator_user', models.ForeignKey(blank=True, null=True, on_delete=models.SET_NULL, related_name='printing_order_external_snapshot_sync_audits', to=settings.AUTH_USER_MODEL, verbose_name='操作者')),
('printing_order', models.ForeignKey(blank=True, null=True, on_delete=models.SET_NULL, related_name='external_snapshot_sync_audits', to='printing.printingorder', verbose_name='印染订单')),
],
options={
'verbose_name': '外部订单快照同步审计记录',
'verbose_name_plural': '外部订单快照同步审计记录',
'ordering': ['-created_at', '-id'],
},
),
]

View File

@@ -657,3 +657,71 @@ class PrintingJobBatchAdvanceRecord(ModelBase):
class Meta:
verbose_name = '印染任务批量操作记录'
verbose_name_plural = '印染任务批量操作记录'
class PrintingOrderExternalSnapshotSyncAudit(ModelBase):
"""
外部订单快照同步审计记录。
记录一次“按 external_order_id 触发外部快照覆盖同步”的执行结果:
- before_snapshot: 同步前本地 PrintingOrder / PrintingJob 快照
- operator_user / operator_employee: 触发人
- is_success / failure_reason: 成功或失败及失败原因
- allow_reset_stateflow: 本次是否允许撤销已有工序
"""
printing_order = models.ForeignKey(
PrintingOrder,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='external_snapshot_sync_audits',
verbose_name='印染订单',
)
external_order_id = models.CharField(
max_length=100,
db_index=True,
verbose_name='外部订单编号',
)
operator_user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='printing_order_external_snapshot_sync_audits',
verbose_name='操作者',
)
operator_employee = models.ForeignKey(
basic_models.Employee,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='printing_order_external_snapshot_sync_audits',
verbose_name='操作员工',
)
before_snapshot = models.JSONField(
default=dict,
blank=True,
verbose_name='同步前快照',
)
allow_reset_stateflow = models.BooleanField(
default=False,
verbose_name='允许撤销工序',
)
is_success = models.BooleanField(
default=False,
verbose_name='是否成功',
)
failure_reason = models.TextField(
blank=True,
default='',
verbose_name='失败原因',
)
class Meta:
verbose_name = '外部订单快照同步审计记录'
verbose_name_plural = '外部订单快照同步审计记录'
ordering = ['-created_at', '-id']
def __str__(self) -> str:
return f'{self.external_order_id} #{self.id}'