feat: 返回数据自动约成2位小数
This commit is contained in:
parent
b31d3937f8
commit
a8160867ae
|
@ -171,9 +171,14 @@ class CorrectViewSet(CustomGenericViewSet):
|
||||||
|
|
||||||
矫正质检统计数据
|
矫正质检统计数据
|
||||||
"""
|
"""
|
||||||
from apps.qm.models import QuaStat
|
from apps.enm.models import EnStat
|
||||||
for item in QuaStat.objects.exclude(sflog=None):
|
enstats = EnStat.objects.exclude(type='hour_s')
|
||||||
item.shift = item.sflog.shift
|
for item in enstats:
|
||||||
|
qua_data = item.qua_data
|
||||||
|
if qua_data:
|
||||||
|
for x in qua_data:
|
||||||
|
x['rate_pass'] = x['rate_pass']*100
|
||||||
|
item.qua_data = qua_data
|
||||||
item.save()
|
item.save()
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,26 @@ class EnStatSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EnStat
|
model = EnStat
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
def to_representation(self, instance):
|
||||||
|
ret = super().to_representation(instance)
|
||||||
|
my_dic_keys = list(ret.keys())
|
||||||
|
for key in my_dic_keys:
|
||||||
|
ret_one_val = ret[key]
|
||||||
|
if isinstance(ret_one_val, float):
|
||||||
|
ret[key] = "{:.2f}".format(round(ret_one_val, 2))
|
||||||
|
qua_data = ret['qua_data']
|
||||||
|
equip_elec_data = ret['equip_elec_data']
|
||||||
|
if qua_data:
|
||||||
|
for item in qua_data:
|
||||||
|
ret[f'{item["material_name"]}_{item["testitem_name"]}_rate_pass'] = "{:.2f}".format(round(item['rate_pass'], 4))
|
||||||
|
if equip_elec_data:
|
||||||
|
for item in equip_elec_data:
|
||||||
|
val = item.get('consume_unit', None)
|
||||||
|
if val:
|
||||||
|
val = "{:.2f}".format(round(val, 2))
|
||||||
|
ret[f'{item["equipment_name"]}_consume_unit'] = val
|
||||||
|
return ret
|
||||||
|
|
||||||
class EnStat2Serializer(CustomModelSerializer):
|
class EnStat2Serializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -69,32 +69,6 @@ class EnStatViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
filterset_class = EnStatFilter
|
filterset_class = EnStatFilter
|
||||||
ordering = ['mgroup__sort', 'year_s', 'month_s', 'day_s', 'hour']
|
ordering = ['mgroup__sort', 'year_s', 'month_s', 'day_s', 'hour']
|
||||||
|
|
||||||
def handle_data(self, data):
|
|
||||||
for ind, val in enumerate(data):
|
|
||||||
# imaterial_data = i['imaterial_data']
|
|
||||||
# other_cost_data = i['other_cost_data']
|
|
||||||
qua_data = val['qua_data']
|
|
||||||
equip_elec_data = val['equip_elec_data']
|
|
||||||
if qua_data:
|
|
||||||
for item in qua_data:
|
|
||||||
val[f'{item["material_name"]}_{item["testitem_name"]}_rate_pass'] = item['rate_pass']
|
|
||||||
if equip_elec_data:
|
|
||||||
for item in equip_elec_data:
|
|
||||||
val[f'{item["equipment_name"]}_consume_unit'] = item.get('consume_unit', None)
|
|
||||||
return data
|
|
||||||
|
|
||||||
def list(self, request, *args, **kwargs):
|
|
||||||
queryset = self.filter_queryset(self.get_queryset())
|
|
||||||
|
|
||||||
page = self.paginate_queryset(queryset)
|
|
||||||
if page is not None:
|
|
||||||
serializer = self.get_serializer(page, many=True)
|
|
||||||
data = self.handle_data(serializer.data)
|
|
||||||
return self.get_paginated_response(data)
|
|
||||||
|
|
||||||
serializer = self.get_serializer(queryset, many=True)
|
|
||||||
data = self.handle_data(serializer.data)
|
|
||||||
return Response(data)
|
|
||||||
|
|
||||||
class EnStat2ViewSet(ListModelMixin, CustomGenericViewSet):
|
class EnStat2ViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -99,7 +99,7 @@ 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,
|
||||||
SUM(num_test) AS num_test,
|
SUM(num_test) AS num_test,
|
||||||
SUM(num_ok) AS num_ok,
|
SUM(num_ok) AS num_ok,
|
||||||
CAST(SUM(num_ok) AS FLOAT)/NULLIF(SUM(num_test),0) AS rate_pass
|
100 * CAST(SUM(num_ok) AS FLOAT)/NULLIF(SUM(num_test),0) AS rate_pass
|
||||||
FROM qm_quastat qmq
|
FROM qm_quastat qmq
|
||||||
LEFT JOIN wpm_sflog sflog on sflog.id = qmq.sflog_id
|
LEFT JOIN wpm_sflog sflog on sflog.id = qmq.sflog_id
|
||||||
LEFT JOIN mtm_mgroup mgroup on mgroup.id = sflog.mgroup_id
|
LEFT JOIN mtm_mgroup mgroup on mgroup.id = sflog.mgroup_id
|
||||||
|
@ -130,7 +130,7 @@ ORDER BY mgroup.sort, mtma.sort, qmt.sort
|
||||||
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,
|
||||||
SUM(num_test) AS num_test,
|
SUM(num_test) AS num_test,
|
||||||
SUM(num_ok) AS num_ok,
|
SUM(num_ok) AS num_ok,
|
||||||
CAST(SUM(num_ok) AS FLOAT)/NULLIF(SUM(num_test),0) AS rate_pass
|
100 * CAST(SUM(num_ok) AS FLOAT)/NULLIF(SUM(num_test),0) AS rate_pass
|
||||||
FROM qm_quastat qmq
|
FROM qm_quastat qmq
|
||||||
LEFT JOIN wpm_sflog sflog on sflog.id = qmq.sflog_id
|
LEFT JOIN wpm_sflog sflog on sflog.id = qmq.sflog_id
|
||||||
LEFT JOIN mtm_team team on team.id = sflog.team_id
|
LEFT JOIN mtm_team team on team.id = sflog.team_id
|
||||||
|
@ -160,7 +160,7 @@ 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,
|
||||||
SUM(num_test) AS num_test,
|
SUM(num_test) AS num_test,
|
||||||
SUM(num_ok) AS num_ok,
|
SUM(num_ok) AS num_ok,
|
||||||
CAST(SUM(num_ok) AS FLOAT)/NULLIF(SUM(num_test),0) AS rate_pass
|
100 * CAST(SUM(num_ok) AS FLOAT)/NULLIF(SUM(num_test),0) AS rate_pass
|
||||||
FROM qm_quastat qmq
|
FROM qm_quastat qmq
|
||||||
LEFT JOIN wpm_sflog sflog on sflog.id = qmq.sflog_id
|
LEFT JOIN wpm_sflog sflog on sflog.id = qmq.sflog_id
|
||||||
LEFT JOIN mtm_mgroup mgroup on mgroup.id = sflog.mgroup_id
|
LEFT JOIN mtm_mgroup mgroup on mgroup.id = sflog.mgroup_id
|
||||||
|
@ -190,7 +190,7 @@ 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,
|
||||||
SUM(num_test) AS num_test,
|
SUM(num_test) AS num_test,
|
||||||
SUM(num_ok) AS num_ok,
|
SUM(num_ok) AS num_ok,
|
||||||
CAST(SUM(num_ok) AS FLOAT)/NULLIF(SUM(num_test),0) AS rate_pass
|
100 * CAST(SUM(num_ok) AS FLOAT)/NULLIF(SUM(num_test),0) AS rate_pass
|
||||||
FROM qm_quastat qmq
|
FROM qm_quastat qmq
|
||||||
LEFT JOIN wpm_sflog sflog on sflog.id = qmq.sflog_id
|
LEFT JOIN wpm_sflog sflog on sflog.id = qmq.sflog_id
|
||||||
LEFT JOIN mtm_mgroup mgroup on mgroup.id = sflog.mgroup_id
|
LEFT JOIN mtm_mgroup mgroup on mgroup.id = sflog.mgroup_id
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
# 能管项目开发周报
|
||||||
|
|
||||||
|
## 项目开始至2023-07-14
|
||||||
|
|
||||||
|
### 工作内容
|
||||||
|
整体及后端
|
||||||
|
|
||||||
|
- 完成需求整理与确认
|
||||||
|
- 完成基础模块的搭建,包括用户、部门、角色、权限、运维、工作流等一系列模块
|
||||||
|
- 完成报表模块基础功能,支持自定义查询并录入相应报表语句
|
||||||
|
- 完成生产管理模块功能,定义物料、班次、班组、工段、目标并实现相应接口
|
||||||
|
- 开发设备管理模块,完成设备列表等接口
|
||||||
|
- 完成质检模块,定义检验项目,录入检验结果,质检报表数据计算
|
||||||
|
- 开发生产执行模块,完成值班记录生成及初始化质检录入等
|
||||||
|
- 开发能源管理模块(核心模块),完成定义采集点位,创建点位原始记录表和相应统计表, 编写相应的计算和定时业务逻辑
|
||||||
|
- 开发财务成本模块,完成定义费用类型以及相应的费用数据和物料成本数据接口
|
||||||
|
|
||||||
|
前端页面
|
||||||
|
|
||||||
|
|
||||||
|
三维建模
|
||||||
|
|
||||||
|
|
||||||
|
### 下一步工作内容
|
||||||
|
- 继续开发相应模块
|
||||||
|
- 模拟电表/水表等数据回传,验证程序可靠性
|
||||||
|
- 梳理DCS点位的处理逻辑
|
||||||
|
- 继续三维模型的建模工作
|
Loading…
Reference in New Issue