近期在公司实现在线实时监控特性报表系统,还没有完成,中间有部分知识点记录
先看看效果,发现数据还是有些问题,后期准备用pandas进行数据清洗:
views核心代码:
from django.shortcuts import render,redirect,HttpResponse
from datetime import datetime,timedelta
from pereport import PEModels,models
from functools import reduce
from pereport.conf.report_settings import CHART
#随机产生线条颜色
import random
def randomcolor():
colorArr = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
color = ""
for i in range(6):
color += colorArr[random.randint(0,14)]
return "#"+color
def big_chart(request):
return render(request, "report/pe/big_line_chart.html")
def bigcd_chart(request):
param = request.GET.get("param",None)
print(param)
end = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
start = (datetime.now() + timedelta(hours=-24)).strftime("%Y-%m-%d %H:%M:%S")
ret_ls=[]
temp = None
for item in CHART[param]:
sub_equip_id_pds = item["sub_equip_id_pds"]
step_id_insp = item["step_id_insp"]
param_name = item["param_name"]
float_point = item["float_point"]
temp = big_cd(sub_equip_id_pds,start,end,step_id_insp,param_name,float_point)
ret_ls.append(temp)
ret_dict = {"chart1":ret_ls[0],"chart2":ret_ls[1],"line":param}
return render(request,"report/pe/big_line_chart.html",ret_dict)
def small_chart(request):
return render(request, "report/pe/small_line_chart.html")
def big_cd(sub_equip_id_pds,start,end,step_id_insp,param_name,float_point):
#定义捞取数据时间段
#获取当前inline Run货产品名
prod, prod_ls, prod_name = PEModels.prod_id(
sub_equip_id_pds=sub_equip_id_pds,
start=start,
end=end, )
prod_ls = (prod_name, "")
obj=""
if prod:
#获取产品信息
obj = models.PEProdInfo.objects.filter(
product_id=prod_name,step_id_insp=step_id_insp,sub_equip_id_pds=sub_equip_id_pds,
param_name=param_name
).first()
if obj:
#print(obj,obj.OOS_H,"xxxxxxxxxxxx")
#获取量测当侧EXP/COT经过TPM的Glass ID
sampling_cnt, glasses = PEModels.glass_info_byINSPEQ(
step_id_pds=obj.step_id_pds,
sub_equip_id_pds=obj.sub_equip_id_pds,
prod_ls=prod_ls,
start=start,
end=end,
step_id_insp=obj.step_id_insp
)
#print(sampling_cnt,glasses)
#获取这些glass id的量测数据,time_asc=0表示先以时间排序然后以site_no排序
ret=PEModels.insp_rawdata(
step_id_insp=obj.step_id_insp,
step_id_pds = obj.step_id_pds,
prod=prod,
param_name=obj.param_name,
glasses=tuple(glasses),
start=start, end=end,time_asc=0
)
html_str = """ {
data: %s,
type: 'line',
itemStyle : {
normal : {
lineStyle:{
color:'#FFFFFF'
}
}
},
},"""
#平均值,并设置可以显示数值
html_str1="""{
data: %s,
type: 'line',
itemStyle : { normal:
{label :
{show: true,color: 'red',textStyle:
{
fontWeight: 'bolder' //字体加粗
}
}
}
},
markLine : {
symbol:'none',
lineStyle: {
normal: {
type: 'solid'
}
},
data : [
{ yAxis: %s ,name:'min'},
{ yAxis: %s ,name:'target'},
{ yAxis: %s ,name:'max'},
]
},
},"""
#by时间画CD图
html_ret=""
x_data = []
x_data_time = []
data = set()
data_temp=[]
data_ret = []
if ret:
for item in ret:
#x轴坐标系标签
if item[0] not in x_data:
x_data_time.append(item[1].strftime("%m-%d %H:%M"))
x_data.append(item[0])
#y轴对应的数据
if item[2] not in data:
data_ret.append(data_temp)
data_temp=[]
data.add(item[2])
data_temp.append(item[3])
else:
data_temp.append(item[3])
print("data_temp",data_temp)
data_ret.append(data_temp)
#print(data_ret,len(data_ret))
average_data=[]
sum