feat: 车间库存检验支持撤回

This commit is contained in:
caoqianming 2025-12-30 14:28:20 +08:00
parent c37e71d60f
commit e385a558e9
2 changed files with 52 additions and 1 deletions

View File

@ -157,6 +157,43 @@ def ftestwork_submit(ins:FtestWork, user: User):
# 触发批次统计分析 # 触发批次统计分析
ana_batch_thread(xbatchs=[ins.batch]) ana_batch_thread(xbatchs=[ins.batch])
def ftestwork_revert(ins: FtestWork):
wm:WMaterial = ins.wm
if wm and ins.need_update_wm:
fwd_qs = FtestworkDefect.objects.filter(ftestwork=ins)
for item in fwd_qs:
item:FtestworkDefect = item
if item.count > 0:
wm.count = wm.count + item.count
wm.save()
wmstate = WMaterial.WM_OK
if item.defect.okcate == Defect.DEFECT_NOTOK:
wmstate = WMaterial.WM_NOTOK
try:
wmx = WMaterial.objects.get(
material=wm.material,
batch=wm.batch,
mgroup=wm.mgroup,
belong_dept=wm.belong_dept,
state=wmstate,
notok_sign=None,
defect=item.defect,
)
except Exception as e:
raise ParseError(f'找不到{item.defect.name}的车间库存: {str(e)}')
wmx.count = wmx.count - item.count
if wmx.count < 0:
raise ParseError("数量不足,撤销失败")
wmx.save()
else:
raise ParseError("该检验工作不支持撤销")
ins.submit_user = None
ins.submit_time = None
ins.save()
# 触发批次统计分析
ana_batch_thread(xbatchs=[ins.batch])
def bind_ftestwork(ticket: Ticket, transition, new_ticket_data: dict): def bind_ftestwork(ticket: Ticket, transition, new_ticket_data: dict):
ins = FtestWork.objects.get(id=new_ticket_data['t_id']) ins = FtestWork.objects.get(id=new_ticket_data['t_id'])
if ins.submit_time is not None: if ins.submit_time is not None:

View File

@ -17,7 +17,7 @@ from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.wpm.models import SfLog from apps.wpm.models import SfLog
from apps.qm.filters import QuaStatFilter, TestItemFilter, FtestWorkFilter, QctFilter, FtestFilter from apps.qm.filters import QuaStatFilter, TestItemFilter, FtestWorkFilter, QctFilter, FtestFilter
from django.db import transaction from django.db import transaction
from apps.qm.services import ftestwork_submit from apps.qm.services import ftestwork_submit, ftestwork_revert
from apps.wpm.services_2 import ana_batch_thread from apps.wpm.services_2 import ana_batch_thread
from apps.wf.models import State from apps.wf.models import State
# Create your views here. # Create your views here.
@ -327,4 +327,18 @@ class FtestWorkViewSet(CustomModelViewSet):
ftestwork_submit(ins, request.user) ftestwork_submit(ins, request.user)
else: else:
raise ParseError('该检验工作已提交') raise ParseError('该检验工作已提交')
return Response()
@action(methods=['post'], detail=True, perms_map={'post': 'ftestwork.submit'}, serializer_class=Serializer)
@transaction.atomic
def revert(self, request, *args, **kwargs):
"""撤销检验工作
撤销检验工作
"""
ins:FtestWork = self.get_object()
if ins.submit_time:
ftestwork_revert(ins)
else:
raise ParseError('该检验工作未提交')
return Response() return Response()