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