feat: 修改qm 增加rate_pass 目标值

This commit is contained in:
zty 2025-02-05 09:20:47 +08:00
parent 1d22dd983a
commit 2f46f9e31a
3 changed files with 36 additions and 10 deletions

View File

@ -98,6 +98,17 @@ class QuaStatSerializer(CustomModelSerializer):
return attrs
class UpdateRatePassTSerializer(serializers.Serializer):
material_id = serializers.IntegerField(required=True)
testitem_id = serializers.IntegerField(required=True)
rate_pass_t = serializers.FloatField(required=True)
month_s = serializers.IntegerField(required=True)
def validate_rate_pass_t(self, value):
if value < 0 or value > 100:
raise serializers.ValidationError("Rate pass must be between 0 and 100.")
return value
class QuaStatUpdateSerializer(CustomModelSerializer):
belong_dept_name = serializers.CharField(
source='belong_dept.name', read_only=True)

View File

@ -157,7 +157,6 @@ ORDER BY mgroup.sort, mtma.sort, qmt.sort
sql_q4 = f"""SELECT
mtma."id" AS material,
mtma."name" AS material_name,
qmq."rate_pass_t" as rate_g,
qmt."id" AS testitem,
qmt."name" AS testitem_name,
CAST(SUM(num_test * val_avg) AS FLOAT)/NULLIF(SUM(num_test), 0) AS val_avg,
@ -175,7 +174,7 @@ and mgroup.id = '{mgroup.id}'
and qmq.val_avg is not NULL
and qmq.num_test is not NULL
and qmq.num_ok is not NULL
GROUP BY mgroup."id", mtma."id", qmt."id", qmq."rate_pass_t", mgroup.sort, mtma.sort, qmt.sort
GROUP BY mgroup."id", mtma."id", qmt."id", mgroup.sort, mtma.sort, qmt.sort
ORDER BY mgroup.sort, mtma.sort, qmt.sort
"""
res4 = query_all_dict(sql_q4)

View File

@ -7,7 +7,7 @@ from apps.qm.models import QuaStat, NotOkOption, Ftest, Ptest, FtestWork
from apps.qm.models import TestItem, Defect, Qct, QctTestItem, QctMat, QctDefect
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer, \
FtestWorkCreateUpdateSerializer, FtestWorkSerializer, DefectSerializer, QctSerializer, QctTestItemSerializer, QctDefectSerializer, QctMatSerializer, \
QctDetailSerializer
QctDetailSerializer, UpdateRatePassTSerializer
from apps.qm.tasks import cal_quastat_sflog
from rest_framework.response import Response
from apps.utils.mixins import BulkUpdateModelMixin
@ -146,18 +146,34 @@ class QuaStatViewSet(ListModelMixin, BulkUpdateModelMixin, CustomGenericViewSet)
# 根据物料ID和检测项目ID rate_pass_t
@action(detail=False, methods=['post'], url_path='update_rate_pass_t', perms_map={'post': 'quastat.submit'})
def update_rate_pass_t(self, request, *args, **kwargs):
material_id = request.data.get("material_id")
testitem_id = request.data.get("testitem_id")
new_rate_pass_t = request.data.get("rate_pass_t")
# material_id = request.data.get("material_id")
# testitem_id = request.data.get("testitem_id")
# new_rate_pass_t = request.data.get("rate_pass_t")
# # update_start = datetime.datetime.strptime(request.data.get("update_start_time"), "%Y-%m-%d")
# # update_end = datetime.datetime.strptime(request.data.get("update_end_time"), "%Y-%m-%d")
# month_s = request.data.get("month_s")
serializer = UpdateRatePassTSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
material_id = serializer.validated_data.get("material_id")
testitem_id = serializer.validated_data.get("testitem_id")
new_rate_pass_t = serializer.validated_data.get("rate_pass_t")
month_s = serializer.validated_data.get("month_s")
if not (material_id and testitem_id and new_rate_pass_t is not None):
return Response(
{"detail": "Missing required fields: material_id, testitem_id, rate_pass_t"},
status=400
)
update_count = QuaStat.objects.filter(material_id=material_id, testitem_id=testitem_id).update(rate_pass_t=new_rate_pass_t)
sfLogIds= QuaStat.objects.filter(material_id=material_id, testitem_id=testitem_id).values_list('sflog', flat=True)
for sflogId in sfLogIds:
cal_quastat_sflog.delay(sflogId)
# 先根据查询物料查询 sflogids 然后再过滤 work_data ,返回在时间段内的sflogids,再更新quaStat
qua_data = QuaStat.objects.filter(
material_id=material_id,
testitem_id=testitem_id,
sflog__work_date__month=month_s,
)
sflog_ids = qua_data.values_list('sflog', flat=True).distinct()
update_count = qua_data.update(rate_pass_t=new_rate_pass_t)
for i in sflog_ids:
cal_quastat_sflog.delay(i)
return Response({"rate_pass_t": new_rate_pass_t}, status=200)