feat: ftestwork的submit支持defect

This commit is contained in:
caoqianming 2025-01-13 11:23:42 +08:00
parent 942e54a7e4
commit 69daa63ea6
2 changed files with 94 additions and 67 deletions

View File

@ -181,7 +181,7 @@ class FtestWorkCreateUpdateSerializer(CustomModelSerializer):
with transaction.atomic(): with transaction.atomic():
ins: FtestWork = super().create(validated_data) ins: FtestWork = super().create(validated_data)
for ftestworkdefect in ftestworkdefect: for ftestworkdefect in ftestworkdefect:
FtestworkDefect.objects.create(ftest=ins, **ftestworkdefect) FtestworkDefect.objects.create(ftestwork=ins, **ftestworkdefect)
if ftestworkdefect: if ftestworkdefect:
ins.cal_count() ins.cal_count()

View File

@ -1,10 +1,10 @@
from apps.qm.models import FtestWork from apps.qm.models import FtestWork, FtestworkDefect
from apps.wpm.models import WMaterial from apps.wpm.models import WMaterial
from apps.system.models import User from apps.system.models import User
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
from django.utils import timezone from django.utils import timezone
from apps.wf.models import Ticket from apps.wf.models import Ticket
from apps.qm.models import NotOkOption from apps.qm.models import NotOkOption, Defect
from apps.utils.thread import MyThread from apps.utils.thread import MyThread
from apps.wpm.services_2 import get_alldata_with_batch_and_store from apps.wpm.services_2 import get_alldata_with_batch_and_store
@ -24,6 +24,7 @@ def ftestwork_submit_validate(ins: FtestWork):
def ftestwork_submit(ins:FtestWork, user: User): def ftestwork_submit(ins:FtestWork, user: User):
wm:WMaterial = ins.wm wm:WMaterial = ins.wm
if ins.need_update_wm: if ins.need_update_wm:
if ins.qct is None:
if wm.state == WMaterial.WM_TEST: if wm.state == WMaterial.WM_TEST:
# 更新对应的车间库存 # 更新对应的车间库存
wm.count = wm.count - ins.count wm.count = wm.count - ins.count
@ -33,6 +34,7 @@ def ftestwork_submit(ins:FtestWork, user: User):
wm.save() wm.save()
else: else:
raise ParseError("超过待检数量") raise ParseError("超过待检数量")
# 寻找count_notok_json中的b类不合格不进行处理 # 寻找count_notok_json中的b类不合格不进行处理
count_notok_json = ins.count_notok_json count_notok_json = ins.count_notok_json
need_move_count = 0 need_move_count = 0
@ -92,6 +94,31 @@ def ftestwork_submit(ins:FtestWork, user: User):
if not new_create: if not new_create:
wm_n.count = wm_n.count + v wm_n.count = wm_n.count + v
wm_n.save() wm_n.save()
else:
wm:WMaterial = ins.wm
# 此时调用了qct表
for item in FtestworkDefect.objects.filter(ftestwork=ins):
item:FtestworkDefect = item
if item.count > 0 and item.defect.okcate == Defect.DEFECT_NOTOK:
ins.count = ins.count - item.count
if ins.count < 0:
raise ParseError("数量不足,扣减失败")
wm, new_create = WMaterial.objects.get_or_create(
material=wm.material,
batch=wm.batch,
mgroup=wm.mgroup,
belong_dept=wm.belong_dept,
state=WMaterial.WM_NOTOK,
notok_sign=None,
defect=item.defect,
defaults={
'count': item.count,
}
)
if not new_create:
wm.count = wm.count + item.count
wm.save()
ins.save()
ins.submit_user = user ins.submit_user = user
ins.submit_time = timezone.now() ins.submit_time = timezone.now()
ins.save() ins.save()