feat:拆批/报工改号提交时纯继承zt_batch归属

仅来源料子集式流转(拆批交接/报工改号)继承, 合批不继承以免
不良集中批等共享池被错误归属; 冲突不覆盖记日志

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
caoqianming 2026-07-13 22:30:15 +08:00
parent 8d5a34cf15
commit c4e0fdd265
2 changed files with 18 additions and 0 deletions

View File

@ -228,6 +228,7 @@ FtestWork where type2 = TYPE2_SOME
- 无任何拆合批上游 → 自身即大批(未拆批直接检验、外购直检)。
2. 归属写入 `zt_batch`(锁定,已锁定的直接复用);随后重算大批(`cal_zt_big`)。
3. 大批自身重算时(有子批 `zt_batch` 指向它)也会触发重算。
4. **提交时纯继承**`services.inherit_zt_batch`):拆批交接、报工改号提交时,目标批直接继承来源批已有的 `zt_batch`(来源料子集式流转,永远安全);**合批不继承**——不良集中批(如 `黑检片-00`)等共享池会汇入多个大批的料,继承会造成错误归属,合批复检批(`-A-1`)的归属仍由统计侧"所有来源同大批"判定。已有归属冲突时不覆盖并记日志。
### 分子

View File

@ -26,6 +26,20 @@ from django.db.models import F
myLogger = logging.getLogger('log')
def inherit_zt_batch(source: BatchSt, target: BatchSt):
"""拆批/报工改号时目标批继承来源批的直通统计大批归属(纯继承, 不做判定)
仅用于来源料子集式的流转(拆批/改号); 合批不继承不良集中批等共享池
会汇入多个大批的料, 继承会造成错误归属归属的判定与合批复检批( 大批-A-1)
的归属由批次统计脚本( batch_gxerp)负责
"""
if source.zt_batch and target.zt_batch != source.zt_batch:
if target.zt_batch:
myLogger.error(f"直通统计-{target.batch}已归属{target.zt_batch}, 与来源{source.batch}{source.zt_batch}冲突, 不覆盖")
return
target.zt_batch = source.zt_batch
target.save(update_fields=["zt_batch"])
def check_wpr_number(number: str):
return (len(number) >= 5 and
(number[-4:].isdigit() or number[-2] == "-" or number[-3] == "-") and
@ -196,11 +210,13 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
target, _ = BatchSt.g_create(batch=item.batch, mlog=mlog, material_start=item.material_out)
exclude_batchst_ids.append(target.id)
BatchLog.g_create(source= source, target=target, mlog=mlog)
inherit_zt_batch(source, target)
if item.mlogbw_from and item.batch != item.mlogbw_from.mlogb.batch:
source, _ = BatchSt.g_create(batch=item.mlogbw_from.mlogb.batch, exclude_batchst_ids=exclude_batchst_ids)
target, _ = BatchSt.g_create(batch=item.batch, mlog=mlog, material_start=item.material_out)
exclude_batchst_ids.append(target.id)
BatchLog.g_create(source=source, target=target, mlog=mlog)
inherit_zt_batch(source, target)
# 消耗物料处理
m_ins_list = []
@ -821,6 +837,7 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime,
exclude_batchst_ids.append(target.id)
# 这里暂时忽略check_batch_exist因为拆批一般不会重复
BatchLog.g_create(source=source_b, target=target, handover=handover, relation_type="split")
inherit_zt_batch(source_b, target)
else:
batch = wm_from.batch
batches.append(batch)