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
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
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
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
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
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
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
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
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
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
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