Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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
Example #9
0
    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="输入内容不合法")
Example #10
0
    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
Example #11
0
    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
Example #12
0
    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