def get(self, request): getParams = request.GET filter_date = getParams.get('filter_date', '') employee_name = getParams.get('employee_name', '') if not employee_name: employee_name = u'空姓名' #error department_name = request.user.department.department_name # 创建查询条件 plain_sql = filter_dev_event_sql(filter_date=filter_date, employee_name=employee_name, project_id='', project_name='', department_name='', user_id='') #统计分析 group_sql = u'select event_date,event_type_name,ROUND(sum(duration_time/3600)::numeric,2) as date_diff from ({0}) as child group by event_date,event_type_name order by event_date,event_type_name '.format( plain_sql) row = fetch_data(group_sql) #转换数据为echarts能接受的格式 event_date_list = list( {i['event_date'].strftime("%Y-%m-%d") for i in row}) #取不重复的日期 event_type_name_list = list({i['event_type_name'] for i in row}) #取不重复的类型名称 event_date_list.sort() result = {} for event_date in event_date_list: result[event_date] = {} for type_name in event_type_name_list: result[event_date][type_name] = 0 for value in row: if value.get('event_date').strftime( "%Y-%m-%d") == event_date and value.get( 'event_type_name') == type_name: result[event_date][type_name] = value.get( 'date_diff', 0) date_list = [] time_count_list = {} for event_date in event_date_list: date_list.append(event_date) for type_name in event_type_name_list: if time_count_list.get(type_name): time_count_list[type_name].append( result[event_date].get(type_name)) else: time_count_list[type_name] = [ result[event_date].get(type_name) ] content = dict_to_json({ 'date_list': date_list, 'time_count_list': time_count_list }) response = my_response(code=0, msg=u"查询成功", content=content) return response
def get(self, request): getParams = request.GET natural_week = getParams.get('natural_week', '') employee_name = getParams.get('employee_name', '') # project_name = getParams.get('project_name', '') department_name = request.user.department.department_name user_id = chinesename_to_userid(employee_name) # 创建查询条件 plain_sql = filter_sale_event_sql(natural_week=natural_week, user_id=user_id, department_name='') #统计分析 # group_sql = u'select event_type_name,ROUND(sum(extract(EPOCH from child.end_time - child.start_time)/3600)::numeric,2) as date_diff from ({0}) as child group by event_type_name '.format(plain_sql) data = fetch_data(plain_sql) result_list = [] for row in data: result_dict = {} for key, value in row.items(): result_dict[key] = value result_dict['which_day'] = day_of_week(str(row['visit_date'])) result_list.append(result_dict) content = dict_to_json(result_list) response = my_response(code=0, msg=u"查询成功", content=content) return response
def get(self, request): user_id = get_user_id(request) getParams = request.GET filter_date = getParams.get('filter_date', '') customer_id = getParams.get('customer_id', '') natural_week = getParams.get('natural_week', '') #如果传入了周数,则转成日期段 # if filter_date: # filter_date='-'.join(getfirstday(filter_date)) plain_sql = filter_sale_event_sql(filter_date=filter_date, natural_week=natural_week, user_id=user_id, customer_id=customer_id, department_name='') data = fetch_data(plain_sql) result_list = [] for row in data: result_dict = {} for key, value in row.items(): result_dict[key] = value result_dict['which_day'] = day_of_week(str(row['visit_date'])) result_list.append(result_dict) content = dict_to_json(result_list) response = my_response(code=0, msg=u"查询成功", content=content) return response
def get(self, request): getParams = request.GET filter_date = getParams.get('filter_date', '') project_name = getParams.get('project_name', '') department_name = request.user.department.department_name if not project_name: project_name = -1 # 创建查询条件 plain_sql = filter_dev_event_sql(filter_date=filter_date, project_name=project_name, project_id='', department_name=department_name) #统计分析select dev_event_project_id, count((end_time-start_time)) as time_diff from api_devevent group by dev_event_project_id group_sql = u'select chinese_name,ROUND(sum(extract(EPOCH from child.end_time - child.start_time)/3600)::numeric,2) as date_diff from ({0}) as child group by chinese_name order by date_diff desc '.format( plain_sql) row = fetch_data(group_sql) #转换数据为echarts能接受的格式 x_data = [i['chinese_name'] for i in row] y_data = [i['date_diff'] for i in row] content = dict_to_json({'x_data': x_data, 'y_data': y_data}) response = my_response(code=0, msg=u"查询成功", content=content) return response
def get(self, request): getParams = request.GET filter_date = getParams.get('filter_date', '') department_name = request.user.department.department_name if not department_name: department_name = u"空部门" # 创建查询条件 plain_sql = filter_dev_event_sql(filter_date=filter_date, project_id='', project_name='', department_name=department_name, employee_name='', user_id='') #统计分析 group_sql = u'select event_type_name,ROUND(sum(duration_time/3600)::numeric,2) as date_diff from ({0}) as child group by event_type_name '.format( plain_sql) row = fetch_data(group_sql) #转换数据为echarts能接受的格式 type_list = [i['event_type_name'] for i in row] type_count = [{ 'name': i['event_type_name'], 'value': i['date_diff'] } for i in row] content = dict_to_json({ 'type_list': type_list, 'type_count': type_count }) response = my_response(code=0, msg=u"查询成功", content=content) return response
def get(self, request): user_id = get_user_id(request) getParams = request.GET project_id = getParams.get('project_id', '') filter_date = getParams.get('filter_date', '') natural_week = getParams.get('natural_week', '') plain_sql = filter_dev_event_sql(filter_date=filter_date, natural_week=natural_week, project_id=project_id, user_id=user_id) query_result = fetch_data(plain_sql) #限定返回给前端的字段 result_field = [ "dev_event_id", "event_date", "project_name", "event_type_name", "description", "fin_percentage", "dev_event_remark" ] result_list = [] for row in query_result: row_dict = {} #由id转换成对应具体的人名 row_dict['down_reporter_name'] = userid_to_chinesename( row.get('down_reporter_ids')) row_dict['up_reporter_name'] = userid_to_chinesename( row.get('up_reporter_id')) row_dict['duration_time'] = round( row.get('duration_time') / 3600, 1) for key in result_field: row_dict[key] = row.get(key, '') result_list.append(row_dict) # Create a Pandas dataframe from the data. df = pd.DataFrame.from_dict(result_list) #create an output stream output = StringIO.StringIO() writer = pd.ExcelWriter(output, engine='xlsxwriter') #taken from the original question df.to_excel(writer, startrow=0, merge_cells=False, sheet_name="Sheet_1") # workbook = writer.book # worksheet = writer.sheets["Sheet_1"] # format = workbook.add_format() # format.set_bg_color('#eeeeee') # worksheet.set_column(0,9,28) #the writer has done its job writer.close() #go back to the beginning of the stream output.seek(0) response = FileResponse(output.read()) response['Content-Type'] = 'application/octet-stream' response['Content-Disposition'] = 'attachment;filename="{0}"'.format( u'导出.xlsx') return response
def get(self, request): getParams = request.GET filter_date = getParams.get('filter_date', '') project_name = getParams.get('project_name', '') if not project_name: employee_name = u'空项目' #error department_name = request.user.department.department_name # 创建查询条件 plain_sql = filter_dev_event_sql(filter_date=filter_date, project_name=project_name, project_id='', employee_name='', department_name=department_name, user_id='') #统计分析 group_sql = u'select position_id, ROUND(sum(extract(EPOCH from child.end_time - child.start_time)/3600)::numeric,3) as date_diff from ({0}) as child group by position_id order by date_diff desc'.format( plain_sql) #加上职位的中文名称 position_sql = u'select * from ({0}) as group_sql left join accounts_position as pos on pos.id=group_sql.position_id'.format( group_sql) row = fetch_data(position_sql) #转换数据为echarts能接受的格式 x_data = [i['position_name'] for i in row] y_data = [i['date_diff'] for i in row] sum_y = sum(y_data) #做累加后减去总值然后 def change(param, tempSum=0, result=[]): ''' 累加器 ''' for i in param: tempSum = i + tempSum result.append(tempSum) return result y_change = change(y_data) y_change_data = [abs(i - sum_y) for i in y_change] y_change_data.insert(0, 0) y_data.insert(0, sum_y) x_data.insert(0, u'总时间') content = dict_to_json({ 'x_data': x_data, 'y_data': y_data, 'y_change_data': y_change_data }) response = my_response(code=0, msg=u"查询成功", content=content) return response
def get(self, request): getParams = request.GET natural_week = getParams.get('natural_week', '') employee_name = getParams.get('employee_name', '') department_name = request.user.department.department_name # 创建查询条件 if employee_name: plain_sql = filter_dev_event_sql(natural_week=natural_week, project_id='', department_name=department_name, employee_name=employee_name) else: return my_response(code=1, msg=u"缺少雇员姓名条件") #统计分析 group_sql = u'select event_type_name,ROUND(sum(duration_time/3600)::numeric,2) as date_diff from ({0}) as child group by event_type_name '.format( plain_sql) data = fetch_data(plain_sql) #先变换数据 alternation_list = [] event_date_list = [] #保存所有不重复的日期 for key, value in enumerate(data): ''' 获取所有日期字段保存为list,并将需要的字段放入alternation_list备用 ''' event_date = value.get('event_date').strftime("%Y-%m-%d") event_date_list.append(event_date) data_list = [ 'project_name', 'event_type_name', 'description', 'up_reporter_id', 'down_reporter_ids', 'fin_percentage', 'dev_event_remark' ] field_data = {key: value.get(key) for key in data_list} field_data['duration_time'] = round( value.get('duration_time') / 3600, 1) field_data['event_date'] = event_date field_data['which_day'] = day_of_week(field_data['event_date']) field_data['up_reporter_name'] = userid_to_chinesename( value.get('up_reporter_id')) field_data['down_reporter_name'] = userid_to_chinesename( value.get('down_reporter_ids')) alternation_list.append(field_data) content = dict_to_json(alternation_list) response = my_response(code=0, msg=u"查询成功", content=content) return response
def post(self, request): uf = UserForm(request.POST) if uf.is_valid(): # 获取表单用户密码 username = uf.cleaned_data['username'] password = uf.cleaned_data['password'] # 获取的表单数据与数据库进行比较 user = authenticate(username=username, password=password) if user is not None and user.is_active: # login(request, user) sid = get_random() auth.login(request, user) user_object = User.objects.get(username=username) try: chinese_name = user_object.chinese_name position_id = user_object.position.id department_id = user_object.department.id except: chinese_name = '' position_id = '' department_id = '' user_id = user_object.id userGroup_sql = "select * from accounts_user_groups as ug join auth_group as auth on auth.id=ug.group_id where ug.user_id={0}".format( user_id) row = fetch_data(userGroup_sql) group_list = [v.get("name") for v in row] content = {"username": username, "chinese_name": chinese_name,\ "position_id": position_id, "user_id": user_id,\ "department_id":department_id,"group_list":group_list} response = my_response(code=0, msg="登录成功!", content=content) # login(request, user) cache.set(sid, content, timeout=self.cookie_timeout) response.set_cookie("sid", sid) # , max_age=self.cookie_timeout) return response else: return my_response(code=1, msg="账号密码错误!") return my_response(code=1, msg="输入内容不合法")
def get(self, request): getParams = request.GET natural_week = getParams.get('natural_week', '') department_name = request.user.department.department_name try: natural_week = natural_week[:7] except: natural_week = '2017-1' filter_sql = filter_sale_event_sql(natural_week=natural_week, department_name=department_name) # 联合目标和实际记录 pivot_sql = pivot_target_actual_sql(natural_week=natural_week, filter_sql=filter_sql, department_name=department_name) data = fetch_data(pivot_sql) content = dict_to_json(data) response = my_response(code=0, msg=u"查询成功", content=content) return response
def get(self, request): user_id = get_user_id(request) getParams = request.GET project_id = getParams.get('project_id', '') filter_date = getParams.get('filter_date', '') natural_week = getParams.get('natural_week', '') plain_sql = filter_dev_event_sql(filter_date=filter_date, natural_week=natural_week, project_id=project_id, user_id=user_id) query_result = fetch_data(plain_sql) alternation_list = [] event_date_list = [] #保存所有不重复的日期 for key, value in enumerate(query_result): ''' 获取所有日期字段保存为list,并将需要的字段放入alternation_list备用 ''' event_date = value.get('event_date').strftime("%Y-%m-%d") event_date_list.append(event_date) #限定返回给前端的字段 data_list = [ "dev_event_id", 'project_name', "start_time", "end_time", 'duration_time', 'event_type_name', 'description', 'up_reporter_id', 'down_reporter_ids', 'fin_percentage', 'dev_event_remark' ] field_data = {key: value.get(key) for key in data_list} field_data['duration_time'] = round( field_data.get('duration_time') / 3600, 1) #把秒数转成取一位小数的小时数 field_data['event_date'] = event_date field_data['which_day'] = day_of_week(field_data.get('event_date')) field_data['up_reporter_name'] = userid_to_chinesename( value.get('up_reporter_id')) field_data['down_reporter_name'] = userid_to_chinesename( value.get('down_reporter_ids')) alternation_list.append(field_data) content = dict_to_json(alternation_list) response = my_response(code=0, msg=u"查询成功", content=content) return response
def get(self, request): getParams = request.GET filter_date = getParams.get('filter_date', '') department_name = request.user.department.department_name # 创建查询条件 plain_sql = filter_dev_event_sql(filter_date=filter_date, project_id='', project_name='', department_name=department_name, employee_name='', user_id='') group_sql = u'select t1.chinese_name,(sum(t1.sum_time)/count(t1.event_date)) as avg_time from \ (select t.chinese_name,sum(t.duration_time/3600) as sum_time,t.event_date from ({0}) as t group by chinese_name,event_date) as t1 \ group by t1.chinese_name order by avg_time desc'.format(plain_sql) row = fetch_data(group_sql) print(row) #转换数据为echarts能接受的格式 x_data = [i['chinese_name'] for i in row] y_data = [round(i['avg_time'], 2) for i in row] content = dict_to_json({'x_data': x_data, 'y_data': y_data}) response = my_response(code=0, msg=u"查询成功", content=content) return response