fix: qm task 计算时rate_pass 单独处理
This commit is contained in:
parent
79de49ed23
commit
9c83e9719e
|
@ -15,9 +15,15 @@ def cal_quastat_type(qs, params_o: dict, type: str):
|
|||
avg_val_total=Sum(F('val_avg')*F('num_test')),
|
||||
num_test_1=Sum('num_test'),
|
||||
num_ok_1=Sum('num_ok')).annotate(
|
||||
avg_val_1=ExpressionWrapper(F('avg_val_total')/F('num_test_1'), output_field=FloatField()),
|
||||
rate_pass_1=ExpressionWrapper(F('num_ok_1')/F('num_test_1'), output_field=FloatField())
|
||||
avg_val_1=ExpressionWrapper(F('avg_val_total')/F('num_test_1'), output_field=FloatField())
|
||||
# ,rate_pass_1=ExpressionWrapper(F('num_ok_1')/F('num_test_1'), output_field=FloatField()) 不知道为什么算出来是0
|
||||
)
|
||||
query = """
|
||||
SELECT SUM(num_test * val_avg)/SUM(num_test) AS avg_val_1, SUM(num_test) AS num_test_1, SUM(num_ok) AS num_ok_1, SUM(num_ok)/SUM(num_test) as rate_pass_1
|
||||
FROM qm_quastat
|
||||
where year_s = 2023 and month_s = 7 and day_s = 7 and type = 'sflog'
|
||||
GROUP BY belong_dept_id, material_id, testitem_id
|
||||
"""
|
||||
params['type'] = type
|
||||
if type == 'month_s':
|
||||
params.pop('day_s')
|
||||
|
@ -29,7 +35,7 @@ def cal_quastat_type(qs, params_o: dict, type: str):
|
|||
'val_avg': r1['avg_val_1'],
|
||||
'num_test': r1['num_test_1'],
|
||||
'num_ok': r1['num_ok_1'],
|
||||
'rate_pass': r1['rate_pass_1']
|
||||
'rate_pass': r1['num_ok_1']/r1['num_test_1']
|
||||
}
|
||||
qua, is_created = QuaStat.objects.get_or_create(
|
||||
**params, defaults={**params, **stat_params}
|
||||
|
@ -40,13 +46,6 @@ def cal_quastat_type(qs, params_o: dict, type: str):
|
|||
|
||||
@shared_task(base=CustomTask)
|
||||
def cal_quastat(quastatId: str):
|
||||
# 可以直接使用sql语言
|
||||
# query = """
|
||||
# SELECT field1, SUM(field2 * field3) AS field2_field3_sum, SUM(field1) AS field1_sum,
|
||||
# SUM(field2 * field3) / SUM(field1) AS result
|
||||
# FROM your_table_name
|
||||
# GROUP BY field1
|
||||
# """
|
||||
ins = QuaStat.objects.get(id=quastatId)
|
||||
qs = QuaStat.objects.exclude(Q(val_avg__isnull=True)|Q(num_test__isnull=True)|Q(num_ok__isnull=True))
|
||||
params = {
|
||||
|
|
|
@ -6,6 +6,7 @@ from apps.qm.serializers import QuaStatSerializer, TestItemSerializer, QuaStatUp
|
|||
from apps.qm.tasks import cal_quastat
|
||||
from rest_framework.response import Response
|
||||
from apps.utils.mixins import BulkCreateModelMixin, BulkUpdateModelMixin
|
||||
import datetime
|
||||
|
||||
from apps.utils.viewsets import CustomGenericViewSet
|
||||
|
||||
|
@ -38,5 +39,8 @@ class QuaStatViewSet(ListModelMixin, BulkUpdateModelMixin, CustomGenericViewSet)
|
|||
|
||||
def perform_update(self, serializer):
|
||||
ins = serializer.save()
|
||||
if ins.sflog: # 更新值班记录的质检时间
|
||||
ins.sflog.last_test_time = datetime.datetime.now()
|
||||
ins.sflog.save()
|
||||
# 计算其他方面的统计
|
||||
cal_quastat.delay(ins.id)
|
Loading…
Reference in New Issue