feat: 修改qm 增加rate_pass 目标值
This commit is contained in:
parent
1d22dd983a
commit
2f46f9e31a
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue