Explorar o código

监考员登录登出时间查询接口

wangliang %!s(int64=2) %!d(string=hai) anos
pai
achega
48404d52f9

+ 29 - 1
themis-admin/src/main/java/com/qmth/themis/admin/api/TBExamInvigilateUserController.java

@@ -5,14 +5,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.themis.business.annotation.ApiJsonObject;
 import com.qmth.themis.business.annotation.ApiJsonProperty;
 import com.qmth.themis.business.constant.SystemConstant;
+import com.qmth.themis.business.dto.InvigilateUserExportDto;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.response.TBExamInvigilateUserDto;
 import com.qmth.themis.business.entity.*;
 import com.qmth.themis.business.enums.*;
+import com.qmth.themis.business.excel.ExportUtils;
 import com.qmth.themis.business.service.MqDtoService;
 import com.qmth.themis.business.service.TBAttachmentService;
 import com.qmth.themis.business.service.TBExamInvigilateUserService;
 import com.qmth.themis.business.service.TBTaskHistoryService;
+import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.business.util.MqUtil;
 import com.qmth.themis.business.util.OssUtil;
 import com.qmth.themis.business.util.ServletUtil;
@@ -25,6 +28,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -71,7 +75,7 @@ public class TBExamInvigilateUserController {
     @ApiOperation(value = "监考员查询接口")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "监考员信息", response = TBExamInvigilateUserDto.class)})
-    public Result query(@ApiParam(value = "考试批次id", required = true) @RequestParam(required = false) Long examId,
+    public Result query(@ApiParam(value = "考试批次id", required = true) @RequestParam Long examId,
                         @ApiParam(value = "考场代码", required = false) @RequestParam(required = false) String roomCode,
                         @ApiParam(value = "用户id", required = false) @RequestParam(required = false) Long userId,
                         @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) int pageNumber,
@@ -248,4 +252,28 @@ public class TBExamInvigilateUserController {
         }
         return ResultUtil.ok(Collections.singletonMap(SystemConstant.TASK_ID, tbTaskHistory.getId()));
     }
+
+    @ApiOperation(value = "监考员登录登出时间查询接口")
+    @RequestMapping(value = "/login/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "监考员信息", response = TBExamInvigilateUserDto.class)})
+    public void loginQuery(@ApiParam(value = "考试批次id", required = true) @RequestParam Long examId) throws Exception {
+        List<InvigilateUserExportDto> invigilateUserExportDtoList = tbExamInvigilateUserService.examInvigilateUserLoginTimeExport(examId);
+        if (!CollectionUtils.isEmpty(invigilateUserExportDtoList)) {
+            List<InvigilateUserExportDto> invigilateUserExportDtoListTemp = new ArrayList<>(invigilateUserExportDtoList.size());
+            for (InvigilateUserExportDto i : invigilateUserExportDtoList) {
+                if (Objects.nonNull(i.getType()) && Objects.equals(i.getType(), "LOGIN")) {
+                    i.setLoginTime(i.getCreateTime());
+                    invigilateUserExportDtoListTemp.add(i);
+                } else if (Objects.nonNull(i.getType()) && Objects.equals(i.getType(), "LOGOUT")) {
+                    if (!CollectionUtils.isEmpty(invigilateUserExportDtoListTemp)) {
+                        InvigilateUserExportDto invigilateUserExportDto = invigilateUserExportDtoListTemp.get(invigilateUserExportDtoListTemp.size() - 1);
+                        invigilateUserExportDto.setLogoutTime(i.getCreateTime());
+                    } else {
+                        log.error("数据有误,没有登录时间:{}", JacksonUtil.parseJson(i));
+                    }
+                }
+            }
+            ExportUtils.exportEXCEL("监考员登录时间", InvigilateUserExportDto.class, invigilateUserExportDtoListTemp, ServletUtil.getResponse());
+        }
+    }
 }

+ 9 - 1
themis-business/src/main/java/com/qmth/themis/business/dao/TBExamInvigilateUserMapper.java

@@ -1,8 +1,8 @@
 package com.qmth.themis.business.dao;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.themis.business.base.CustomBaseMapper;
+import com.qmth.themis.business.dto.InvigilateUserExportDto;
 import com.qmth.themis.business.dto.RoomCodeExportDto;
 import com.qmth.themis.business.dto.response.TBExamInvigilateUserDto;
 import com.qmth.themis.business.entity.TBExamInvigilateUser;
@@ -47,4 +47,12 @@ public interface TBExamInvigilateUserMapper extends CustomBaseMapper<TBExamInvig
 
     @SuppressWarnings("MybatisXMapperMethodInspection")
     public List<Map<String, String>> getInvigilateUsers(@Param("examId") Long examId, @Param("roomCode") String roomCode);
+
+    /**
+     * 监考员登录时间导出
+     *
+     * @param examId
+     * @return
+     */
+    public List<InvigilateUserExportDto> examInvigilateUserLoginTimeExport(@Param("examId") Long examId);
 }

+ 106 - 0
themis-business/src/main/java/com/qmth/themis/business/dto/InvigilateUserExportDto.java

@@ -0,0 +1,106 @@
+package com.qmth.themis.business.dto;
+
+import com.qmth.themis.business.annotation.ExcelNotExport;
+import com.qmth.themis.business.annotation.ExcelNote;
+import com.qmth.themis.business.excel.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 监考员登录时间导出 dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/7/20
+ */
+public class InvigilateUserExportDto implements Serializable {
+
+    @ExcelProperty(name = "学校名称", width = 30, index = 1)
+    private String schoolName;
+
+    @ExcelProperty(name = "考试名称", width = 30, index = 2)
+    private String examName;
+
+    @ExcelProperty(name = "场次代码", width = 30, index = 3)
+    private String code;
+
+    @ExcelProperty(name = "登录名", width = 30, index = 4)
+    private String name;
+
+    @ApiModelProperty(value = "类型")
+    private String type;
+
+    @ApiModelProperty(value = "创建时间")
+    private String createTime;
+
+    @ExcelProperty(name = "登录时间", width = 30, index = 5)
+    private String loginTime;
+
+    @ExcelProperty(name = "登出时间", width = 30, index = 5)
+    private String logoutTime;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getSchoolName() {
+        return schoolName;
+    }
+
+    public void setSchoolName(String schoolName) {
+        this.schoolName = schoolName;
+    }
+
+    public String getExamName() {
+        return examName;
+    }
+
+    public void setExamName(String examName) {
+        this.examName = examName;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getLoginTime() {
+        return loginTime;
+    }
+
+    public void setLoginTime(String loginTime) {
+        this.loginTime = loginTime;
+    }
+
+    public String getLogoutTime() {
+        return logoutTime;
+    }
+
+    public void setLogoutTime(String logoutTime) {
+        this.logoutTime = logoutTime;
+    }
+}

+ 3 - 1
themis-business/src/main/java/com/qmth/themis/business/dto/RoomCodeExportDto.java

@@ -2,6 +2,8 @@ package com.qmth.themis.business.dto;
 
 import com.qmth.themis.business.annotation.ExcelNote;
 
+import java.io.Serializable;
+
 /**
  * @Description: 考场导出 dto
  * @Param:
@@ -9,7 +11,7 @@ import com.qmth.themis.business.annotation.ExcelNote;
  * @Author: wangliang
  * @Date: 2020/7/20
  */
-public class RoomCodeExportDto {
+public class RoomCodeExportDto implements Serializable {
 
     @ExcelNote(value = "考场代码")
     private String roomCode; //考场代码

+ 9 - 0
themis-business/src/main/java/com/qmth/themis/business/service/TBExamInvigilateUserService.java

@@ -2,6 +2,7 @@ package com.qmth.themis.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.themis.business.dto.InvigilateUserExportDto;
 import com.qmth.themis.business.dto.RoomCodeExportDto;
 import com.qmth.themis.business.dto.response.TBExamInvigilateUserDto;
 import com.qmth.themis.business.entity.TBExamInvigilateUser;
@@ -40,4 +41,12 @@ public interface TBExamInvigilateUserService extends IService<TBExamInvigilateUs
      * @return
      */
     public List<RoomCodeExportDto> examInvigilateUserExport(Long examId, String roomCode, Long userId, Long orgId);
+
+    /**
+     * 监考员登录时间导出
+     *
+     * @param examId
+     * @return
+     */
+    public List<InvigilateUserExportDto> examInvigilateUserLoginTimeExport(Long examId);
 }

+ 12 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TBExamInvigilateUserServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.themis.business.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.themis.business.dao.TBExamInvigilateUserMapper;
+import com.qmth.themis.business.dto.InvigilateUserExportDto;
 import com.qmth.themis.business.dto.RoomCodeExportDto;
 import com.qmth.themis.business.dto.response.TBExamInvigilateUserDto;
 import com.qmth.themis.business.entity.TBExamInvigilateUser;
@@ -54,4 +55,15 @@ public class TBExamInvigilateUserServiceImpl extends ServiceImpl<TBExamInvigilat
     public List<RoomCodeExportDto> examInvigilateUserExport(Long examId, String roomCode, Long userId, Long orgId) {
         return tbExamInvigilateUserMapper.examInvigilateUserExport(examId, roomCode, userId, orgId);
     }
+
+    /**
+     * 监考员登录时间导出
+     *
+     * @param examId
+     * @return
+     */
+    @Override
+    public List<InvigilateUserExportDto> examInvigilateUserLoginTimeExport(Long examId) {
+        return tbExamInvigilateUserMapper.examInvigilateUserLoginTimeExport(examId);
+    }
 }

+ 33 - 0
themis-business/src/main/resources/mapper/TBExamInvigilateUserMapper.xml

@@ -67,9 +67,42 @@
         t.roomCode,
         t.roomName
     </select>
+
     <select id="getInvigilateUsers" resultType="java.util.Map">
 	    select f.login_name loginName,f.`name` from 
 		t_b_exam_invigilate_user t left join t_b_user f on t.user_id=f.id
 		where t.exam_id=#{examId} and t.room_code=#{roomCode}
     </select>
+
+    <select id="examInvigilateUserLoginTimeExport" resultType="com.qmth.themis.business.dto.InvigilateUserExportDto">
+        select
+            t.*
+        from
+            (
+                select
+                    distinct tbo.name as 'schoolName',
+                        tee.name as 'examName',
+                        teea.code as 'code',
+                        tbu.login_name as 'name',
+                        teul.`type`,
+                        DATE_FORMAT(FROM_UNIXTIME(teul.create_time / 1000), '%Y-%m-%d %H:%i:%s') as 'createTime'
+                from
+                    t_b_exam_invigilate_user tbeiu
+                        join t_e_exam tee on
+                        tee.id = tbeiu.exam_id
+                        join t_e_exam_activity teea on
+                        teea.exam_id = tee.id
+                        join t_b_user tbu on
+                        tbu.id = tbeiu.user_id
+                        join t_b_org tbo on
+                        tbo.id = tbeiu.org_id
+                        join t_e_user_log teul on
+                        teul.user_id = tbu.id
+                where
+                    tee.id = #{examId}
+                  and (teul.`type` = 'LOGIN'
+                    or teul.`type` = 'LOGOUT')) t
+        order by
+            t.code,t.name,t.createTime
+    </select>
 </mapper>

+ 2 - 3
themis-business/src/main/resources/mapper/TEExamBreachLogMapper.xml

@@ -56,12 +56,11 @@
 		t.exam_activity_id examActivityId,
 		t.room_code roomCode,
 		t.course_code
-		courseCode,
 		t.course_name courseName,
 		t.NAME,
 		t.identity,
-		t.room_name
-		roomName,'正常' breachStatus,
+		t.room_name,
+		'正常' breachStatus,
 		teea.code as examActivityCode
 		FROM
 		t_e_exam_breach_log f