feat: 去除mlogbdefect

This commit is contained in:
caoqianming 2025-01-09 10:07:51 +08:00
parent f209d1767d
commit 3751b2f2e2
6 changed files with 57 additions and 87 deletions

View File

@ -235,6 +235,20 @@ class FtestWork(CommonBDModel):
ftestwork_count_fields.append(f.name)
return ftestwork_count_fields
# def cal_count(self):
# self.count_notok = FtestworkDefect.objects.filter(
# mlogb=self, defect__okcate=30).aggregate(total=Sum("count"))["total"] or 0
# self.count_ok = self.count_real - self.count_notok
# if self.count_ok < 0:
# raise ParseError('合格数量不能小于0')
# self.save(update_fields=['count_ok', 'count_notok'])
# class FtestworkDefect(BaseModel):
# ftestwork = models.ForeignKey(FtestWork, verbose_name='关联检验工作', on_delete=models.CASCADE,
# related_name='ftestwork_defect')
# defect = models.ForeignKey(Defect, verbose_name='缺陷', on_delete=models.CASCADE)
# count = models.PositiveIntegerField('数量', default=0)
class Ftest(CommonBDModel):
"""
检验记录

View File

@ -1,36 +0,0 @@
# Generated by Django 3.2.12 on 2025-01-08 07:01
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('qm', '0034_auto_20250108_1016'),
('wpm', '0083_mlogbw_ftest'),
]
operations = [
migrations.CreateModel(
name='MlogbDefect',
fields=[
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('count', models.PositiveIntegerField(default=0, verbose_name='数量')),
('defect', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='qm.defect', verbose_name='缺陷')),
('mlogb', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wpm.mlogb', verbose_name='关联记录')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='mlogb',
name='defects',
field=models.ManyToManyField(blank=True, through='wpm.MlogbDefect', to='qm.Defect', verbose_name='不合格缺陷'),
),
]

View File

@ -352,25 +352,18 @@ class Mlogb(BaseModel):
elif self.material_out:
return "out", self.material_out.tracking
def cal_count(self):
self.count_notok = MlogbDefect.objects.filter(
mlogb=self, defect__okcate=30).aggregate(total=Sum("count"))["total"] or 0
self.count_ok = self.count_real - self.count_notok
if self.count_ok < 0:
raise ParseError('合格数量不能小于0')
self.save(update_fields=['count_ok', 'count_notok'])
class MlogbDefect(BaseModel):
mlogb = models.ForeignKey(Mlogb, verbose_name='关联记录', on_delete=models.CASCADE)
defect = models.ForeignKey("qm.defect", verbose_name='缺陷', on_delete=models.CASCADE)
count = models.PositiveIntegerField('数量', default=0)
# class MlogbDefect(BaseModel):
# mlogb = models.ForeignKey(Mlogb, verbose_name='关联记录', on_delete=models.CASCADE)
# defect = models.ForeignKey("qm.defect", verbose_name='缺陷', on_delete=models.CASCADE)
# count = models.PositiveIntegerField('数量', default=0)
class Mlogbw(BaseModel):
number = models.TextField('单个编号')
mlogb = models.ForeignKey(Mlogb, verbose_name='生产记录', on_delete=models.CASCADE)
wpr = models.ForeignKey("wpmw.wpr", verbose_name='关联产品', on_delete=models.SET_NULL
, related_name='wpr_mlogbw', null=True, blank=True)
ftest = models.OneToOneField("qm.ftest", verbose_name='关联检验', on_delete=models.PROTECT, null=True, blank=True)
ftest = models.OneToOneField("qm.ftest", verbose_name='关联检验',
on_delete=models.PROTECT, null=True, blank=True, related_name="mlogbw_ftest")
note = models.TextField('备注', null=True, blank=True)

View File

@ -908,16 +908,16 @@ class BatchStSerializer(CustomModelSerializer):
model = BatchSt
fields = "__all__"
class MlogbDefectSerializer(CustomModelSerializer):
defect_name = serializers.CharField(source='defect.name', read_only=True)
class Meta:
model = MlogbDefect
fields = "__all__"
read_only_fields = EXCLUDE_FIELDS_BASE
def create(self, validated_data):
defect = validated_data["defect"]
mlogb = validated_data["mlogb"]
if MlogbDefect.objects.filter(mlogb=mlogb, defect=defect).exists():
raise ParseError('该缺陷已填写')
return super().create(validated_data)
# class MlogbDefectSerializer(CustomModelSerializer):
# defect_name = serializers.CharField(source='defect.name', read_only=True)
# class Meta:
# model = MlogbDefect
# fields = "__all__"
# read_only_fields = EXCLUDE_FIELDS_BASE
#
# def create(self, validated_data):
# defect = validated_data["defect"]
# mlogb = validated_data["mlogb"]
# if MlogbDefect.objects.filter(mlogb=mlogb, defect=defect).exists():
# raise ParseError('该缺陷已填写')
# return super().create(validated_data)

View File

@ -5,7 +5,7 @@ from apps.wpm.views import (SfLogViewSet, StLogViewSet, SfLogExpViewSet,
WMaterialViewSet, MlogViewSet, HandoverViewSet,
AttlogViewSet, OtherLogViewSet, MlogbViewSet, MlogbInViewSet,
MlogbOutViewSet, FmlogViewSet, BatchStViewSet,
MlogbwViewSet, MlogbDefectViewSet)
MlogbwViewSet)
from apps.wpm.datax import AnaViewSet
@ -28,7 +28,6 @@ router.register('otherlog', OtherLogViewSet, basename='otherlog')
router.register('ana', AnaViewSet, basename='ana')
router.register('batchst', BatchStViewSet, basename='batchst')
router.register('mlogbw', MlogbwViewSet, basename='mlogbw')
router.register("mlogbdefect", MlogbDefectViewSet, basename='mlogbdefect')
urlpatterns = [
path(API_BASE_URL, include(router.urls)),
]

View File

@ -25,7 +25,7 @@ from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer,
AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer,
MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer,
MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer, BatchStSerializer,
MlogbwCreateUpdateSerializer, MlogbDefectSerializer)
MlogbwCreateUpdateSerializer)
from .services import mlog_submit, handover_submit, mlog_revert
from apps.wpm.services import mlog_submit_validate, generate_new_batch
from apps.wf.models import State
@ -649,26 +649,26 @@ class MlogbwViewSet(CustomModelViewSet):
self.cal_mlogb_count(mlogb_to)
class MlogbDefectViewSet(CustomListModelMixin, BulkCreateModelMixin,
BulkDestroyModelMixin, CustomGenericViewSet):
perms_map = {"get": "*", "post": "mlog.update", "delete": "mlog.update"}
queryset = MlogbDefect.objects.all()
serializer_class = MlogbDefectSerializer
filterset_fields = ["mlogb", "defect"]
ordering = ["create_time"]
def filter_queryset(self, queryset):
if not self.detail and not self.request.query_params.get('mlogb', None):
raise ParseError('请指定所属日志明细')
return super().filter_queryset(queryset)
@transaction.atomic
def perform_create(self, serializer):
ins:MlogbDefect = serializer.save()
ins.mlogb.cal_count()
@transaction.atomic
def perform_destroy(self, instance):
mlogb = instance.mlogb
instance.delete()
# class MlogbDefectViewSet(CustomListModelMixin, BulkCreateModelMixin,
# BulkDestroyModelMixin, CustomGenericViewSet):
# perms_map = {"get": "*", "post": "mlog.update", "delete": "mlog.update"}
# queryset = MlogbDefect.objects.all()
# serializer_class = MlogbDefectSerializer
# filterset_fields = ["mlogb", "defect"]
# ordering = ["create_time"]
#
# def filter_queryset(self, queryset):
# if not self.detail and not self.request.query_params.get('mlogb', None):
# raise ParseError('请指定所属日志明细')
# return super().filter_queryset(queryset)
#
# @transaction.atomic
# def perform_create(self, serializer):
# ins:MlogbDefect = serializer.save()
# ins.mlogb.cal_count()
#
# @transaction.atomic
# def perform_destroy(self, instance):
# mlogb = instance.mlogb
# instance.delete()
mlogb.cal_count()