feat: 交接记录添加审批工单

This commit is contained in:
caoqianming 2025-07-23 09:20:38 +08:00
parent 3cacea1b06
commit 66a1d6df7f
4 changed files with 60 additions and 3 deletions

View File

@ -0,0 +1,25 @@
# Generated by Django 3.2.12 on 2025-07-23 01:12
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('wf', '0002_alter_state_filter_dept'),
('wpm', '0120_alter_batchst_data'),
]
operations = [
migrations.AddField(
model_name='handover',
name='oinfo_json',
field=models.JSONField(blank=True, default=dict, verbose_name='其他信息'),
),
migrations.AddField(
model_name='handover',
name='ticket',
field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='handover_ticket', to='wf.ticket', verbose_name='关联工单'),
),
]

View File

@ -577,6 +577,9 @@ class Handover(CommonADModel):
submit_user = models.ForeignKey( submit_user = models.ForeignKey(
User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='handover_submit_user') User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='handover_submit_user')
note = models.TextField('备注', null=True, blank=True) note = models.TextField('备注', null=True, blank=True)
oinfo_json = models.JSONField('其他信息', default=dict, blank=True)
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单',
on_delete=models.SET_NULL, related_name='handover_ticket', null=True, blank=True, db_constraint=False)
@property @property
def handoverb(self): def handoverb(self):

View File

@ -1015,6 +1015,20 @@ def bind_mlog(ticket: Ticket, transition, new_ticket_data: dict):
ins.ticket = ticket ins.ticket = ticket
ins.save() ins.save()
def bind_handover(ticket: Ticket, transition, new_ticket_data: dict):
ins = Handover.objects.get(id=new_ticket_data['t_id'])
ticket_data = ticket.ticket_data
ticket_data.update({
't_model': 'handover',
't_id': ins.id,
})
ticket.ticket_data = ticket_data
ticket.create_by = ins.create_by
ticket.save()
if ins.ticket is None:
ins.ticket = ticket
ins.save()
def mlog_audit_end(ticket: Ticket): def mlog_audit_end(ticket: Ticket):
now = timezone.now() now = timezone.now()
ins = Mlog.objects.get(id=ticket.ticket_data['t_id']) ins = Mlog.objects.get(id=ticket.ticket_data['t_id'])

View File

@ -29,7 +29,7 @@ from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer,
MlogbSerializer, MlogUserSerializer, BatchLogSerializer) MlogbSerializer, MlogUserSerializer, BatchLogSerializer)
from .services import mlog_submit, handover_submit, mlog_revert, get_batch_dag, handover_revert from .services import mlog_submit, handover_submit, mlog_revert, get_batch_dag, handover_revert
from apps.wpm.services import mlog_submit_validate, generate_new_batch from apps.wpm.services import mlog_submit_validate, generate_new_batch
from apps.wf.models import State from apps.wf.models import State, Ticket
from apps.wpmw.models import Wpr from apps.wpmw.models import Wpr
from apps.qm.models import Qct, Ftest, TestItem from apps.qm.models import Qct, Ftest, TestItem
from apps.enm.models import EnStat from apps.enm.models import EnStat
@ -387,13 +387,25 @@ class HandoverViewSet(CustomModelViewSet):
'material__number', 'material__specification', 'batch', 'material__model', 'b_handover__batch', "new_batch", "wm__batch"] 'material__number', 'material__specification', 'batch', 'material__model', 'b_handover__batch', "new_batch", "wm__batch"]
prefetch_related_fields = ["b_handover"] prefetch_related_fields = ["b_handover"]
def perform_destroy(self, instance): @transaction.atomic
def perform_destroy(self, instance:Handover):
user = self.request.user user = self.request.user
if instance.submit_time is not None: if instance.submit_time is not None:
raise ParseError('日志已提交不可变动') raise ParseError('日志已提交不可变动')
if instance.send_user != user and instance.recive_user != user and instance.create_by != user: if instance.send_user != user and instance.recive_user != user and instance.create_by != user:
raise ParseError('非交送人和接收人不可删除该记录') raise ParseError('非交送人和接收人不可删除该记录')
return super().perform_destroy(instance) ticket:Ticket = instance.ticket
if ticket:
ticket.delete()
instance.delete()
@transaction.atomic
def perform_update(self, serializer):
ins:Handover = self.get_object()
ticket:Ticket = ins.ticket
if ticket and ticket.state.type != State.STATE_TYPE_START:
raise ParseError("该交接记录存在审批,不可修改")
serializer.save()
@action(methods=['post'], detail=False, perms_map={'post': 'handover.create'}, serializer_class=HandoverSerializer) @action(methods=['post'], detail=False, perms_map={'post': 'handover.create'}, serializer_class=HandoverSerializer)
@transaction.atomic @transaction.atomic
@ -425,6 +437,9 @@ class HandoverViewSet(CustomModelViewSet):
pass pass
else: else:
raise ParseError('非接收人不可提交') raise ParseError('非接收人不可提交')
ticket:Ticket = ins.ticket
if ticket and ticket.state.type != State.STATE_TYPE_END:
raise ParseError('该交接记录审批未完成,不可提交')
if ins.submit_time is None: if ins.submit_time is None:
handover_submit(ins, user, None) handover_submit(ins, user, None)
return Response() return Response()