Exemplo n.º 1
0
def list_team(subjg,
              keyword,
              judger_keyword,
              rows,
              page,
              subjudge_team_id_list=None):
    rule = SubJudgeRule.objects.filter(subjudge=subjg, ).first()
    if not rule:
        raise BusinessException(ERR_RULE_NOT_EXIST)
    max = rule.parse_rule().expert_count()
    qs = SubJudgeTeam.objects.filter(subjudge=subjg).order_by('-create_time')
    if subjudge_team_id_list:
        qs = qs.filter(id__in=subjudge_team_id_list)
    if keyword:
        qs = qs.filter(name__contains=keyword)
    if judger_keyword:
        with_judger_team = SubJudgeTeamExpert.objects.filter(
            expert__account__name__contains=judger_keyword,
            subjudge=subjg).values_list('subjudge_team__id', flat=True)
        qs = qs.filter(id__in=with_judger_team)
    paged_data, result = paging_by_page(list(qs), rows, page)
    for each in paged_data:
        # work_count = SubJudgeWorkTeam.objects.filter(subjudge_team=each).count()
        # qs_expert_in_team = SubJudgeTeamExpert.objects.filter(subjudge_team=each)
        # expert_list = [{'expert_name': e.expert.name, 'expert_position': e.expert.position} for e in qs_expert_in_team]
        result['items'].append(detail_team(each))
    result['judger_max'] = str(max)
    result['id_all'] = ','.join([str(each.id) for each in qs])
    return result
Exemplo n.º 2
0
def list_work_for_expert(account, subjudge, subjg_expert, sub_activity, phase,
                         project, subject, keyword, subjg_team, is_unfinish,
                         page, rows):
    rule = SubJudgeRule.objects.filter(subjudge=subjudge).first()

    qs = works_4_expert(subjudge,
                        subjg_expert,
                        sub_activity=sub_activity,
                        phase=phase,
                        project=project,
                        subject=subject,
                        keyword=keyword,
                        subjg_team=subjg_team)

    filter_list = list()
    for each in qs:
        work_info = _work_subjudge_info(subjudge, subjg_expert, each)
        if not work_info['is_unfinish'] and is_1(is_unfinish):
            continue
        filter_list.append({
            'work': work_info['work'],
            'judge_status': work_info['judge_status'],
            'score': work_info['score'],
            'team': work_info['team']
        })
    paged_data, result = paging_by_page(filter_list, rows, page)
    for d in paged_data:
        result['items'].append(
            struct_work_subjudge(d['work'], d['judge_status'], d['score'],
                                 d['team'], rule))
    return result
Exemplo n.º 3
0
def list_team_by_super(account,
                       activity,
                       keyword,
                       judger,
                       page,
                       rows,
                       id_list=None):
    rule = Rule.objects.filter(activity=activity).first()
    if not rule:
        raise BusinessException(ERR_RULE_NOT_EXIST)
    if not is_activity_owner(activity, account):
        raise BusinessException(ERR_USER_AUTH)
    raw = list_team(activity, keyword=keyword, judger=judger, id_list=id_list)

    paged_data, result = paging_by_page(raw, rows, page)
    rule = Rule.objects.filter(activity=activity).first()
    if not rule:
        raise BusinessException(ERR_RULE_NOT_EXIST)
    max = str(rule.parse_rule().expert_count())
    for each in paged_data:
        d = detail_team(each, max)
        result['items'].append(d)
    result['id_all'] = ','.join([str(each.id) for each in raw])
    result['judger_max'] = str(max)
    return result
Exemplo n.º 4
0
def list_team_by_judger(account,
                        activity,
                        as_leader,
                        page,
                        rows,
                        id_list=None):
    e_a = ExpertActivity.objects.filter(expert__del_flag=FALSE_INT,
                                        activity=activity,
                                        expert__account=account).first()
    if not e_a:
        raise BusinessException(ERR_USER_AUTH)
    expert = e_a.expert
    qs = list_team(activity, expert=expert)
    if as_leader and str(as_leader) == TRUE_STR:
        teams_as_leader = TeamExpert.objects.filter(
            expert=expert, team__activity=activity,
            is_leader=TRUE_INT).values_list('team__id', flat=True)
        qs = qs.filter(id__in=teams_as_leader)
    else:
        teams_as_member = TeamExpert.objects.filter(
            expert=expert, team__activity=activity).values_list('team__id',
                                                                flat=True)
        qs = qs.filter(id__in=teams_as_member)

    paged_data, result = paging_by_page(qs, rows, page)
    for each in paged_data:
        result['items'].append({
            'team_id': str(each.id),
            'team_name': each.name,
        })
    return result
Exemplo n.º 5
0
def list_work_for_leader(account, subjudge, subjg_expert, sub_activity, phase,
                         project, subject, keyword, subjg_team, is_unfinish,
                         page, rows):
    rule = SubJudgeRule.objects.filter(subjudge=subjudge).first()
    judger_max = rule.parse_rule().expert_count()

    qs = works_4_expert(subjudge,
                        subjg_expert,
                        sub_activity=sub_activity,
                        phase=phase,
                        project=project,
                        subject=subject,
                        keyword=keyword,
                        subjg_team=subjg_team,
                        as_leader=True)

    qualified_id_list = list()
    filter_list = list()

    for each in qs:
        work_info = _work_subjudge_info(subjudge, subjg_expert, each)
        if not work_info['is_unfinish'] and is_1(is_unfinish):
            continue
        # 获取其它专家的评分
        expert_score = dict()
        score_qs = SubJudgeScore.objects.filter(
            subjudge_team_work__work=each,
            subjudge_team_expert__in=SubJudgeTeamExpert.objects.filter(
                subjudge_team=work_info['team']))
        for s in score_qs:
            expert_score[int(s.subjudge_team_expert.sn) - 1] = s
        expert_in_team_count = SubJudgeTeamExpert.objects.filter(
            subjudge_team=work_info['team']).count()
        filter_list.append({
            'work': work_info['work'],
            'judge_status': work_info['judge_status'],
            'score': work_info['score'],
            'team': work_info['team'],
            'expert_in_team_count': expert_in_team_count,
            'expert_score': expert_score
        })
        qualified_id_list.append(str(each.id))
    paged_data, result = paging_by_page(filter_list, rows, page)
    for d in paged_data:
        result['items'].append(
            struct_work_subjudge_leader(rule, d['work'], d['judge_status'],
                                        d['score'], d['team'],
                                        d['expert_in_team_count'],
                                        d['expert_score']))

    result['id_all'] = ','.join(qualified_id_list).strip(',')
    result['judger_max'] = str(judger_max)
    return result
Exemplo n.º 6
0
def available_add_expert(account, subjg, keyword, rows, page):
    expert_in_subjudge = list_expert(account, subjg, keyword, BIG, 1)['items']
    expert_id_list_in_subjudge = [
        int(each['expert_id']) for each in expert_in_subjudge
    ]
    all = Expert.objects.filter(del_flag=FALSE_INT)
    if keyword:
        all = all.filter(
            Q(account__username__contains=keyword)
            | Q(account__name__contains=keyword))
    all = all.exclude(id__in=expert_id_list_in_subjudge)
    paged_data, result = paging_by_page(list(all), rows, page)
    for each in paged_data:
        result['items'].append(struct_subjudge_expert(subjg, each))
    return result
Exemplo n.º 7
0
def work_availale_add_team(account, subjudge, subjudge_team, sub_activity,
                           phase, project, area, direct_area, subject, keyword,
                           ignore_area_list, page, rows):
    my_user, role = get_user(subjudge.activity, account)
    # 该级别管理员可见的作品
    all, non_approved = works_manager_can_see(my_user, subjudge.activity,
                                              sub_activity, phase, project,
                                              area, direct_area, subject,
                                              keyword)

    # 哪些作品可以加入分组(两种可能的规则:所有可见作品均可,仅未审核的可加入)
    handle = all

    subjg_t_w_work = [each.work for each in SubJudgeTeamWork.objects.all()]
    final_handle = filter(lambda x: x['work'] not in subjg_t_w_work, handle)
    paged_data, result = paging_by_page(final_handle, rows, page)
    for each in paged_data:
        result['items'].append(struct_work(each['work'], my_user.area))
    return result
Exemplo n.º 8
0
def list_expert(account, subjg, keyword, rows, page):
    qualified_id_list = list()
    qs = SubJudgeExpert.objects.filter(subjudge=subjg).order_by('-create_time')

    if keyword:
        qs = qs.filter(
            Q(expert__account__username__contains=keyword)
            | Q(expert__account__name__contains=keyword)
            | Q(expert__position__contains=keyword))

    filtered_list = list(qs)
    for each in filtered_list:
        qualified_id_list.append(str(each.expert.id))

    paged_data, result = paging_by_page(filtered_list, rows, page)
    for each in paged_data:
        result['items'].append(
            struct_subjudge_expert(each.subjudge, each.expert))
    result['id_all'] = ','.join(qualified_id_list).strip(',')
    return result
Exemplo n.º 9
0
def work_in_team(account, subjudge, subjudge_team, sub_activity, phase,
                 project, area, direct_area, subject, keyword, page, rows):
    my_user, role = get_user(subjudge.activity, account)
    logger.info('user %s area %s wanna check works in subjudge_team %s' %
                (my_user.id, my_user.area.id, subjudge_team.id))
    qs = works(subjudge.activity,
               sub_activity=sub_activity,
               paragraph=phase,
               paragraph_project=project,
               subject=subject,
               keyword=keyword,
               area=area,
               direct_area=direct_area)
    work_id_list = [
        w.work.id
        for w in SubJudgeTeamWork.objects.filter(subjudge_team=subjudge_team)
    ]
    qs = qs.filter(id__in=work_id_list)
    paged_data, result = paging_by_page(qs, rows, page)
    for each in paged_data:
        result['items'].append(struct_work(each, my_user.area))
    return result
Exemplo n.º 10
0
def available_add_team_expert(subjg_team, expert_in_same_team, keyword, page,
                              rows):
    expert_in_subjg = SubJudgeExpert.objects.filter(
        subjudge=subjg_team.subjudge, expert__del_flag=FALSE_INT)
    if keyword:
        expert_in_subjg = expert_in_subjg.filter(
            Q(expert__account__username__contains=keyword)
            | Q(expert__account__name__contains=keyword))
    expert_in_subjg = expert_in_subjg.values_list('expert__id', flat=True)
    expert_exist_in_other_team = SubJudgeTeamExpert.objects.filter(subjudge=subjg_team.subjudge)\
                        .exclude(subjudge_team=subjg_team).values_list('expert__id', flat=True)
    in_team_page = [int(each) for each in seq2list(expert_in_same_team)
                    ] if expert_in_same_team else list()

    result_id_list = set(expert_in_subjg) - set(
        expert_exist_in_other_team) - set(in_team_page)
    qs = Expert.objects.filter(id__in=result_id_list, del_flag=FALSE_INT)
    paged_data, result = paging_by_page(qs, rows, page)
    for each in qs:
        result['items'].append({
            'subjudge_id':
            str(subjg_team.subjudge.id),
            'expert_id':
            str(each.id),
            'expert_name':
            each.account.name,
            'expert_mobile':
            each.account.username,
            'expert_position':
            each.position,
            'expert_area_id':
            str(each.area.id) if each.area else '',
            'expert_area_name_full':
            area_name(each.area.id) if each.area else '',
        })
    return result
Exemplo n.º 11
0
def available_add_expert_in_team(account, team, expert_in_same_team, keyword,
                                 page, rows):
    # # load expert from expert_lib
    # from applications.expert.services import list_expert_user
    # expert_in_lib = [each['id'] for each in list_expert_user(account, user.id, None, None, None)]

    expert_in_acti = ExpertActivity.objects.filter(activity=team.activity,
                                                   expert__del_flag=FALSE_INT)
    if keyword:
        expert_in_acti = expert_in_acti.filter(
            Q(expert__account__username__contains=keyword)
            | Q(expert__account__name__contains=keyword))
    expert_in_acti = expert_in_acti.values_list('expert__id', flat=True)
    expert_exist_in_team = TeamExpert.objects.filter(
        team__activity=team.activity).exclude(team=team).values_list(
            'expert__id', flat=True)
    result_id_list = set(expert_in_acti) - set(expert_exist_in_team) - set(
        expert_in_same_team)
    qs = Expert.objects.filter(id__in=result_id_list, del_flag=FALSE_INT)
    paged_data, result = paging_by_page(qs, rows, page)
    for each in qs:
        result['items'].append({
            'expert_id':
            str(each.id),
            'expert_name':
            each.account.name,
            'expert_mobile':
            each.account.username,
            'expert_position':
            each.position,
            'expert_area_id':
            str(each.area.id) if each.area else '',
            'expert_area_name_full':
            area_name(each.area.id) if each.area else '',
        })
    return result