feat: mlog经审批后提交

This commit is contained in:
caoqianming 2024-09-03 09:10:28 +08:00
parent 2a8254b581
commit 6a573dd4dd
5 changed files with 77 additions and 17 deletions

View File

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

View File

@ -193,8 +193,6 @@ class Mlog(CommonADModel):
count_n_yd = models.PositiveIntegerField('圆度', default=0)
count_n_txd = models.PositiveIntegerField('同心度', default=0)
count_n_hd = models.PositiveIntegerField('厚度', default=0)
count_n_qt = models.PositiveIntegerField('其他', default=0)
handle_date = models.DateField('操作日期', null=True, blank=True)
@ -214,6 +212,10 @@ class Mlog(CommonADModel):
submit_user = models.ForeignKey(
User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='mlog_submit_user')
oinfo_json = models.JSONField('其他信息', default=dict, blank=True)
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单',
on_delete=models.SET_NULL, related_name='mlog_ticket', null=True, blank=True, db_constraint=False)
@property
def mlogb(self):
return Mlogb.objects.filter(mlog=self).exclude(material_out=None)

View File

@ -368,7 +368,7 @@ class MlogInitSerializer(CustomModelSerializer):
class MlogChangeSerializer(CustomModelSerializer):
class Meta:
model = Mlog
fields = ['id', 'work_end_time', 'handle_user', 'note']
fields = ['id', 'work_end_time', 'handle_user', 'note', 'oinfo_json']
def validate(self, attrs):
if attrs.get('work_end_time', None):

View File

@ -4,7 +4,6 @@ from django.core.cache import cache
from django.db.models import Sum
from django.utils import timezone
from typing import Union
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from rest_framework.exceptions import ParseError
@ -13,9 +12,11 @@ from apps.inm.models import MIO, MIOItem, MIOItemA
from apps.pm.models import Mtask
from apps.mtm.models import Mgroup, Shift, Material, Route, RoutePack
from .models import SfLog, SfLogExp, WMaterial, Mlog, Mlogb, Handover
from apps.mtm.models import Process
from .models import SfLog, WMaterial, Mlog, Mlogb, Handover
from apps.mtm.services import cal_material_count
from apps.wf.models import Ticket
from django.db import transaction
from apps.utils.thread import MyThread
def find_material_can_change(material: Material, mgroup_to: Mgroup):
"""
@ -633,3 +634,38 @@ def handover_submit(handover: Handover, user: User, now: Union[datetime.datetime
handover.submit_user = user
handover.submit_time = now
handover.save()
def mlog_submit_validate(ins: Mlog):
if ins.submit_time:
raise ParseError('该日志已提交!')
if ins.mtask and ins.mtask.state == Mtask.MTASK_STOP:
raise ParseError('该任务已停止!')
if ins.fill_way == Mlog.MLOG_STEP:
if not Mlogb.objects.filter(material_out__isnull=False, mlog=ins).exists():
raise ParseError('该日志未指定产出!')
if not Mlogb.objects.filter(material_in__isnull=False, mlog=ins).exists():
raise ParseError('该日志未指定消耗!')
if Mlogb.objects.filter(material_out__isnull=False, count_real=0, mlog=ins).exists():
raise ParseError('产出数量不能为0!')
def bind_mlog(ticket: Ticket, transition, new_ticket_data: dict):
ins = Mlog.objects.get(id=new_ticket_data['t_id'])
mlog_submit_validate(ins) # 校验是否可submit
ticket_data = ticket.ticket_data
ticket_data.update({
't_model': 'mlog',
'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):
now = timezone.now()
ins = Mlog.objects.get(id=ticket.ticket_data['t_id'])
mlog_submit(ins, ticket.create_by, now)
MyThread(target=cal_mtask_progress_from_mlog,args=(ins,)).start()
MyThread(target=cal_material_count_from_mlog,args=(ins,)).start()

View File

@ -25,6 +25,7 @@ from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer,
from .services import mlog_submit, update_mtask, handover_submit, mlog_revert, cal_material_count_from_mlog, cal_mtask_progress_from_mlog
from apps.utils.thread import MyThread
from apps.monitor.services import create_auditlog, delete_auditlog
from apps.wpm.services import mlog_submit_validate
# Create your views here.
@ -204,17 +205,13 @@ class MlogViewSet(CustomModelViewSet):
ins: Mlog = self.get_object()
vdata_old = MlogSerializer(ins).data
now = timezone.now()
if ins.submit_time:
raise ParseError('该日志已提交!')
if ins.mtask and ins.mtask.state == Mtask.MTASK_STOP:
raise ParseError('该任务已停止!')
if ins.fill_way == Mlog.MLOG_STEP:
if not Mlogb.objects.filter(material_out__isnull=False, mlog=ins).exists():
raise ParseError('该日志未指定产出!')
if not Mlogb.objects.filter(material_in__isnull=False, mlog=ins).exists():
raise ParseError('该日志未指定消耗!')
if Mlogb.objects.filter(material_out__isnull=False, count_real=0, mlog=ins).exists():
raise ParseError('产出数量不能为0!')
if ins.ticket:
raise ParseError('该日志存在审批!')
else:
p: Process = ins.mgroup.process
if p.mlog_need_ticket:
raise ParseError('该日志需要审批!')
mlog_submit_validate(ins)
with transaction.atomic():
mlog_submit(ins, self.request.user, now)
vdata_new = MlogSerializer(ins).data