Search in sources :

Example 81 with Page

use of com.baomidou.mybatisplus.extension.plugins.pagination.Page in project HOJ by HimitZH.

the class ContestRecordServiceImpl method getACInfo.

@Override
public IPage<ContestRecord> getACInfo(Integer currentPage, Integer limit, Integer status, Long cid, String contestCreatorId) {
    List<ContestRecord> acInfo = contestRecordMapper.getACInfo(status, cid);
    HashMap<Long, String> pidMapUidAndPid = new HashMap<>(12);
    HashMap<String, Long> UidAndPidMapTime = new HashMap<>(12);
    List<UserInfo> superAdminList = getSuperAdminList();
    List<String> superAdminUidList = superAdminList.stream().map(UserInfo::getUuid).collect(Collectors.toList());
    List<ContestRecord> userACInfo = new LinkedList<>();
    for (ContestRecord contestRecord : acInfo) {
        if (contestRecord.getUid().equals(contestCreatorId) || superAdminUidList.contains(contestRecord.getUid())) {
            // 超级管理员和比赛创建者的提交跳过
            continue;
        }
        contestRecord.setFirstBlood(false);
        String uidAndPid = pidMapUidAndPid.get(contestRecord.getPid());
        if (uidAndPid == null) {
            pidMapUidAndPid.put(contestRecord.getPid(), contestRecord.getUid() + contestRecord.getPid());
            UidAndPidMapTime.put(contestRecord.getUid() + contestRecord.getPid(), contestRecord.getTime());
        } else {
            Long firstTime = UidAndPidMapTime.get(uidAndPid);
            Long tmpTime = contestRecord.getTime();
            if (tmpTime < firstTime) {
                pidMapUidAndPid.put(contestRecord.getPid(), contestRecord.getUid() + contestRecord.getPid());
                UidAndPidMapTime.put(contestRecord.getUid() + contestRecord.getPid(), tmpTime);
            }
        }
        userACInfo.add(contestRecord);
    }
    List<ContestRecord> pageList = new ArrayList<>();
    int count = userACInfo.size();
    // 计算当前页第一条数据的下标
    int currId = currentPage > 1 ? (currentPage - 1) * limit : 0;
    for (int i = 0; i < limit && i < count - currId; i++) {
        ContestRecord contestRecord = userACInfo.get(currId + i);
        if (pidMapUidAndPid.get(contestRecord.getPid()).equals(contestRecord.getUid() + contestRecord.getPid())) {
            contestRecord.setFirstBlood(true);
        }
        pageList.add(contestRecord);
    }
    Page<ContestRecord> page = new Page<>(currentPage, limit);
    page.setSize(limit);
    page.setCurrent(currentPage);
    page.setTotal(count);
    page.setRecords(pageList);
    return page;
}
Also used : ContestRecord(top.hcode.hoj.pojo.entity.contest.ContestRecord) UserInfo(top.hcode.hoj.pojo.entity.user.UserInfo) Page(com.baomidou.mybatisplus.extension.plugins.pagination.Page) IPage(com.baomidou.mybatisplus.core.metadata.IPage)

Example 82 with Page

use of com.baomidou.mybatisplus.extension.plugins.pagination.Page in project HOJ by HimitZH.

the class TrainingRecordServiceImpl method getTrainingRank.

@Override
public IPage<TrainingRankVo> getTrainingRank(Long tid, String username, int currentPage, int limit) {
    Map<Long, String> tpIdMapDisplayId = getTPIdMapDisplayId(tid);
    List<TrainingRecordVo> trainingRecordVoList = trainingRecordMapper.getTrainingRecord(tid);
    List<UserInfo> superAdminList = userInfoMapper.getSuperAdminList();
    List<String> superAdminUidList = superAdminList.stream().map(UserInfo::getUuid).collect(Collectors.toList());
    List<TrainingRankVo> result = new ArrayList<>();
    HashMap<String, Integer> uidMapIndex = new HashMap<>();
    int pos = 0;
    for (TrainingRecordVo trainingRecordVo : trainingRecordVoList) {
        // 超级管理员和训练创建者的提交不入排行榜
        if (username.equals(trainingRecordVo.getUsername()) || superAdminUidList.contains(trainingRecordVo.getUid())) {
            continue;
        }
        TrainingRankVo trainingRankVo;
        Integer index = uidMapIndex.get(trainingRecordVo.getUid());
        if (index == null) {
            trainingRankVo = new TrainingRankVo();
            trainingRankVo.setRealname(trainingRecordVo.getRealname()).setAvatar(trainingRecordVo.getAvatar()).setSchool(trainingRecordVo.getSchool()).setGender(trainingRecordVo.getGender()).setUid(trainingRecordVo.getUid()).setUsername(trainingRecordVo.getUsername()).setNickname(trainingRecordVo.getNickname()).setAc(0).setTotalRunTime(0);
            HashMap<String, HashMap<String, Object>> submissionInfo = new HashMap<>();
            trainingRankVo.setSubmissionInfo(submissionInfo);
            result.add(trainingRankVo);
            uidMapIndex.put(trainingRecordVo.getUid(), pos);
            pos++;
        } else {
            trainingRankVo = result.get(index);
        }
        String displayId = tpIdMapDisplayId.get(trainingRecordVo.getTpid());
        HashMap<String, Object> problemSubmissionInfo = trainingRankVo.getSubmissionInfo().getOrDefault(displayId, new HashMap<>());
        // 如果该题目已经AC过了,只比较运行时间取最小
        if ((Boolean) problemSubmissionInfo.getOrDefault("isAC", false)) {
            if (trainingRecordVo.getStatus().intValue() == Constants.Judge.STATUS_ACCEPTED.getStatus()) {
                int runTime = (int) problemSubmissionInfo.getOrDefault("runTime", 0);
                if (runTime > trainingRecordVo.getUseTime()) {
                    trainingRankVo.setTotalRunTime(trainingRankVo.getTotalRunTime() - runTime + trainingRecordVo.getUseTime());
                    problemSubmissionInfo.put("runTime", trainingRecordVo.getUseTime());
                }
            }
            continue;
        }
        problemSubmissionInfo.put("status", trainingRecordVo.getStatus());
        problemSubmissionInfo.put("score", trainingRecordVo.getScore());
        // 通过的话
        if (trainingRecordVo.getStatus().intValue() == Constants.Judge.STATUS_ACCEPTED.getStatus()) {
            // 总解决题目次数ac+1
            trainingRankVo.setAc(trainingRankVo.getAc() + 1);
            problemSubmissionInfo.put("isAC", true);
            problemSubmissionInfo.put("runTime", trainingRecordVo.getUseTime());
            trainingRankVo.setTotalRunTime(trainingRankVo.getTotalRunTime() + trainingRecordVo.getUseTime());
        }
        trainingRankVo.getSubmissionInfo().put(displayId, problemSubmissionInfo);
    }
    List<TrainingRankVo> orderResultList = result.stream().sorted(// 先以总ac数降序
    Comparator.comparing(TrainingRankVo::getAc, Comparator.reverseOrder()).thenComparing(// 再以总耗时升序
    TrainingRankVo::getTotalRunTime)).collect(Collectors.toList());
    // 计算好排行榜,然后进行分页
    Page<TrainingRankVo> page = new Page<>(currentPage, limit);
    int count = orderResultList.size();
    List<TrainingRankVo> pageList = new ArrayList<>();
    // 计算当前页第一条数据的下标
    int currId = currentPage > 1 ? (currentPage - 1) * limit : 0;
    for (int i = 0; i < limit && i < count - currId; i++) {
        pageList.add(orderResultList.get(currId + i));
    }
    page.setSize(limit);
    page.setCurrent(currentPage);
    page.setTotal(count);
    page.setRecords(pageList);
    return page;
}
Also used : TrainingRankVo(top.hcode.hoj.pojo.vo.TrainingRankVo) UserInfo(top.hcode.hoj.pojo.entity.user.UserInfo) Page(com.baomidou.mybatisplus.extension.plugins.pagination.Page) IPage(com.baomidou.mybatisplus.core.metadata.IPage) TrainingRecordVo(top.hcode.hoj.pojo.vo.TrainingRecordVo)

Example 83 with Page

use of com.baomidou.mybatisplus.extension.plugins.pagination.Page in project dolphinscheduler by apache.

the class TaskInstanceServiceTest method queryTaskListPaging.

@Test
public void queryTaskListPaging() {
    String projectName = "project_test1";
    User loginUser = getAdminUser();
    Map<String, Object> result = new HashMap<>(5);
    putMsg(result, Status.PROJECT_NOT_FOUNT, projectName);
    // project auth fail
    when(projectMapper.queryByName(projectName)).thenReturn(null);
    when(projectService.checkProjectAndAuth(loginUser, null, projectName)).thenReturn(result);
    Map<String, Object> proejctAuthFailRes = taskInstanceService.queryTaskListPaging(loginUser, "project_test1", 0, "", "test_user", "2019-02-26 19:48:00", "2019-02-26 19:48:22", "", null, "", 1, 20);
    Assert.assertEquals(Status.PROJECT_NOT_FOUNT, proejctAuthFailRes.get(Constants.STATUS));
    // project
    putMsg(result, Status.SUCCESS, projectName);
    Project project = getProject(projectName);
    Date start = DateUtils.getScheduleDate("2020-01-01 00:00:00");
    Date end = DateUtils.getScheduleDate("2020-01-02 00:00:00");
    ProcessInstance processInstance = getProcessInstance();
    TaskInstance taskInstance = getTaskInstance();
    List<TaskInstance> taskInstanceList = new ArrayList<>();
    Page<TaskInstance> pageReturn = new Page<>(1, 10);
    taskInstanceList.add(taskInstance);
    pageReturn.setRecords(taskInstanceList);
    when(projectMapper.queryByName(Mockito.anyString())).thenReturn(project);
    when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result);
    when(usersService.queryUser(loginUser.getId())).thenReturn(loginUser);
    when(usersService.getUserIdByName(loginUser.getUserName())).thenReturn(loginUser.getId());
    when(taskInstanceMapper.queryTaskInstanceListPaging(Mockito.any(Page.class), eq(project.getId()), eq(1), eq(""), eq(""), eq(0), Mockito.any(), eq("192.168.xx.xx"), eq(start), eq(end))).thenReturn(pageReturn);
    when(usersService.queryUser(processInstance.getExecutorId())).thenReturn(loginUser);
    when(processService.findProcessInstanceDetailById(taskInstance.getProcessInstanceId())).thenReturn(processInstance);
    Map<String, Object> successRes = taskInstanceService.queryTaskListPaging(loginUser, projectName, 1, "", "test_user", "2020-01-01 00:00:00", "2020-01-02 00:00:00", "", ExecutionStatus.SUCCESS, "192.168.xx.xx", 1, 20);
    Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS));
    // executor name empty
    when(taskInstanceMapper.queryTaskInstanceListPaging(Mockito.any(Page.class), eq(project.getId()), eq(1), eq(""), eq(""), eq(0), Mockito.any(), eq("192.168.xx.xx"), eq(start), eq(end))).thenReturn(pageReturn);
    Map<String, Object> executorEmptyRes = taskInstanceService.queryTaskListPaging(loginUser, projectName, 1, "", "", "2020-01-01 00:00:00", "2020-01-02 00:00:00", "", ExecutionStatus.SUCCESS, "192.168.xx.xx", 1, 20);
    Assert.assertEquals(Status.SUCCESS, executorEmptyRes.get(Constants.STATUS));
    // executor null
    when(usersService.queryUser(loginUser.getId())).thenReturn(null);
    when(usersService.getUserIdByName(loginUser.getUserName())).thenReturn(-1);
    Map<String, Object> executorNullRes = taskInstanceService.queryTaskListPaging(loginUser, projectName, 1, "", "test_user", "2020-01-01 00:00:00", "2020-01-02 00:00:00", "", ExecutionStatus.SUCCESS, "192.168.xx.xx", 1, 20);
    Assert.assertEquals(Status.SUCCESS, executorNullRes.get(Constants.STATUS));
}
Also used : TaskInstance(org.apache.dolphinscheduler.dao.entity.TaskInstance) User(org.apache.dolphinscheduler.dao.entity.User) Page(com.baomidou.mybatisplus.extension.plugins.pagination.Page) Project(org.apache.dolphinscheduler.dao.entity.Project) ProcessInstance(org.apache.dolphinscheduler.dao.entity.ProcessInstance) Test(org.junit.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Example 84 with Page

use of com.baomidou.mybatisplus.extension.plugins.pagination.Page in project dolphinscheduler by apache.

the class ScheduleMapperTest method testQueryByProcessDefineIdPaging.

/**
 * test page
 */
@Test
public void testQueryByProcessDefineIdPaging() {
    User user = new User();
    user.setUserName("ut name");
    userMapper.insert(user);
    Project project = new Project();
    project.setName("ut project");
    project.setUserId(user.getId());
    projectMapper.insert(project);
    ProcessDefinition processDefinition = new ProcessDefinition();
    processDefinition.setProjectId(project.getId());
    processDefinition.setUserId(user.getId());
    processDefinition.setLocations("");
    processDefinitionMapper.insert(processDefinition);
    Schedule schedule = insertOne();
    schedule.setUserId(user.getId());
    schedule.setProcessDefinitionId(processDefinition.getId());
    scheduleMapper.insert(schedule);
    Page<Schedule> page = new Page(1, 3);
    IPage<Schedule> scheduleIPage = scheduleMapper.queryByProcessDefineIdPaging(page, processDefinition.getId(), "");
    Assert.assertNotEquals(scheduleIPage.getSize(), 0);
}
Also used : Project(org.apache.dolphinscheduler.dao.entity.Project) User(org.apache.dolphinscheduler.dao.entity.User) Schedule(org.apache.dolphinscheduler.dao.entity.Schedule) ProcessDefinition(org.apache.dolphinscheduler.dao.entity.ProcessDefinition) Page(com.baomidou.mybatisplus.extension.plugins.pagination.Page) IPage(com.baomidou.mybatisplus.core.metadata.IPage) Test(org.junit.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Example 85 with Page

use of com.baomidou.mybatisplus.extension.plugins.pagination.Page in project dolphinscheduler by apache.

the class TaskInstanceMapperTest method testQueryTaskInstanceListPaging.

/**
 * test page
 */
@Test
public void testQueryTaskInstanceListPaging() {
    TaskInstance task = insertOne();
    ProcessDefinition definition = new ProcessDefinition();
    definition.setProjectId(1111);
    processDefinitionMapper.insert(definition);
    ProcessInstance processInstance = new ProcessInstance();
    processInstance.setProcessDefinitionId(definition.getId());
    processInstance.setState(ExecutionStatus.RUNNING_EXEUTION);
    processInstance.setName("ut process");
    processInstance.setStartTime(new Date());
    processInstance.setEndTime(new Date());
    processInstance.setCommandType(CommandType.START_PROCESS);
    processInstanceMapper.insert(processInstance);
    task.setProcessDefinitionId(definition.getId());
    task.setProcessInstanceId(processInstance.getId());
    taskInstanceMapper.updateById(task);
    Page<TaskInstance> page = new Page(1, 3);
    IPage<TaskInstance> taskInstanceIPage = taskInstanceMapper.queryTaskInstanceListPaging(page, definition.getProjectId(), task.getProcessInstanceId(), "", "", 0, new int[0], "", null, null);
    processInstanceMapper.deleteById(processInstance.getId());
    taskInstanceMapper.deleteById(task.getId());
    processDefinitionMapper.deleteById(definition.getId());
    Assert.assertNotEquals(taskInstanceIPage.getTotal(), 0);
}
Also used : TaskInstance(org.apache.dolphinscheduler.dao.entity.TaskInstance) ProcessDefinition(org.apache.dolphinscheduler.dao.entity.ProcessDefinition) ProcessInstance(org.apache.dolphinscheduler.dao.entity.ProcessInstance) Page(com.baomidou.mybatisplus.extension.plugins.pagination.Page) IPage(com.baomidou.mybatisplus.core.metadata.IPage) Date(java.util.Date) Test(org.junit.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Aggregations

Page (com.baomidou.mybatisplus.extension.plugins.pagination.Page)239 IPage (com.baomidou.mybatisplus.core.metadata.IPage)171 QueryWrapper (com.baomidou.mybatisplus.core.conditions.query.QueryWrapper)62 ApiOperation (io.swagger.annotations.ApiOperation)38 ArrayList (java.util.ArrayList)29 LoginUser (org.jeecg.common.system.vo.LoginUser)26 Test (org.junit.Test)24 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)22 RequiresPermissions (org.apache.shiro.authz.annotation.RequiresPermissions)19 LambdaQueryWrapper (com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)17 JSONObject (com.alibaba.fastjson.JSONObject)15 PageInfo (org.apache.dolphinscheduler.api.utils.PageInfo)13 Result (org.jeecg.common.api.vo.Result)12 User (org.apache.dolphinscheduler.dao.entity.User)11 OrderItem (com.baomidou.mybatisplus.core.metadata.OrderItem)9 java.util (java.util)9 HashMap (java.util.HashMap)9 Project (org.apache.dolphinscheduler.dao.entity.Project)9 Service (org.springframework.stereotype.Service)9 IOException (java.io.IOException)8