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 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): class QuaStatUpdateSerializer(CustomModelSerializer):
belong_dept_name = serializers.CharField( belong_dept_name = serializers.CharField(
source='belong_dept.name', read_only=True) 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 sql_q4 = f"""SELECT
mtma."id" AS material, mtma."id" AS material,
mtma."name" AS material_name, mtma."name" AS material_name,
qmq."rate_pass_t" as rate_g,
qmt."id" AS testitem, qmt."id" AS testitem,
qmt."name" AS testitem_name, qmt."name" AS testitem_name,
CAST(SUM(num_test * val_avg) AS FLOAT)/NULLIF(SUM(num_test), 0) AS val_avg, 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.val_avg is not NULL
and qmq.num_test is not NULL and qmq.num_test is not NULL
and qmq.num_ok 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 ORDER BY mgroup.sort, mtma.sort, qmt.sort
""" """
res4 = query_all_dict(sql_q4) 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.models import TestItem, Defect, Qct, QctTestItem, QctMat, QctDefect
from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer, \ from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUpdateSerializer, FtestSerializer, PtestSerializer, \
FtestWorkCreateUpdateSerializer, FtestWorkSerializer, DefectSerializer, QctSerializer, QctTestItemSerializer, QctDefectSerializer, QctMatSerializer, \ FtestWorkCreateUpdateSerializer, FtestWorkSerializer, DefectSerializer, QctSerializer, QctTestItemSerializer, QctDefectSerializer, QctMatSerializer, \
QctDetailSerializer QctDetailSerializer, UpdateRatePassTSerializer
from apps.qm.tasks import cal_quastat_sflog from apps.qm.tasks import cal_quastat_sflog
from rest_framework.response import Response from rest_framework.response import Response
from apps.utils.mixins import BulkUpdateModelMixin from apps.utils.mixins import BulkUpdateModelMixin
@ -146,18 +146,34 @@ class QuaStatViewSet(ListModelMixin, BulkUpdateModelMixin, CustomGenericViewSet)
# 根据物料ID和检测项目ID rate_pass_t # 根据物料ID和检测项目ID rate_pass_t
@action(detail=False, methods=['post'], url_path='update_rate_pass_t', perms_map={'post': 'quastat.submit'}) @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): def update_rate_pass_t(self, request, *args, **kwargs):
material_id = request.data.get("material_id") # material_id = request.data.get("material_id")
testitem_id = request.data.get("testitem_id") # testitem_id = request.data.get("testitem_id")
new_rate_pass_t = request.data.get("rate_pass_t") # 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): if not (material_id and testitem_id and new_rate_pass_t is not None):
return Response( return Response(
{"detail": "Missing required fields: material_id, testitem_id, rate_pass_t"}, {"detail": "Missing required fields: material_id, testitem_id, rate_pass_t"},
status=400 status=400
) )
update_count = QuaStat.objects.filter(material_id=material_id, testitem_id=testitem_id).update(rate_pass_t=new_rate_pass_t) # 先根据查询物料查询 sflogids 然后再过滤 work_data ,返回在时间段内的sflogids,再更新quaStat
sfLogIds= QuaStat.objects.filter(material_id=material_id, testitem_id=testitem_id).values_list('sflog', flat=True) qua_data = QuaStat.objects.filter(
for sflogId in sfLogIds: material_id=material_id,
cal_quastat_sflog.delay(sflogId) 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) return Response({"rate_pass_t": new_rate_pass_t}, status=200)