wangliang 4 years ago
parent
commit
eb788fadf2

+ 17 - 21
themis-admin/src/main/java/com/qmth/themis/admin/api/TBExamInvigilateUserController.java

@@ -1,7 +1,6 @@
 package com.qmth.themis.admin.api;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.themis.business.annotation.ApiJsonObject;
 import com.qmth.themis.business.annotation.ApiJsonProperty;
@@ -106,34 +105,31 @@ public class TBExamInvigilateUserController {
                         ExceptionResultEnum.ERROR.getCode(), "一个考场最多设置3名监考员");
             }
             TBOrg tbOrg = (TBOrg) ServletUtil.getRequestOrg();
+            QueryWrapper<TBExamInvigilateUser> tbExamInvigilateUserQueryWrapper = new QueryWrapper<>();
+            tbExamInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getRoomCode, roomCode)
+                    .eq(TBExamInvigilateUser::getExamId, examId);
+            if (Objects.nonNull(tbOrg) && Objects.isNull(tbOrg.getId())) {
+                throw new BusinessException("监考员机构id不允许为空");
+            }
+            List<TBExamInvigilateUser> tbExamInvigilateUserList = tbExamInvigilateUserService
+                    .list(tbExamInvigilateUserQueryWrapper);
+            List<String> roomNameList = tbExamInvigilateUserList.stream().map(s -> s.getRoomName())
+                    .collect(Collectors.toList());
+            Long orgId = tbOrg.getId();
+            tbExamInvigilateUserService.remove(tbExamInvigilateUserQueryWrapper);
+            tbExamInvigilateUserList = new ArrayList<>();
             if (userIds.size() > 0) {
-                QueryWrapper<TBExamInvigilateUser> tbExamInvigilateUserQueryWrapper = new QueryWrapper<>();
-                tbExamInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getRoomCode, roomCode)
-                        .eq(TBExamInvigilateUser::getExamId, examId);
-                if (Objects.nonNull(tbOrg) && Objects.isNull(tbOrg.getId())) {
-                    throw new BusinessException("监考员机构id不允许为空");
-                }
-                List<TBExamInvigilateUser> tbExamInvigilateUserList = tbExamInvigilateUserService
-                        .list(tbExamInvigilateUserQueryWrapper);
-                Long orgId = tbOrg.getId();
-                List<String> roomNameList = tbExamInvigilateUserList.stream().map(s -> s.getRoomName())
-                        .collect(Collectors.toList());
-                tbExamInvigilateUserService.remove(tbExamInvigilateUserQueryWrapper);
-                tbExamInvigilateUserList = new ArrayList<>();
                 for (int i = 0; i < userIds.size(); i++) {
                     TBExamInvigilateUser tbExamInvigilateUser = new TBExamInvigilateUser(examId, orgId,
                             Long.parseLong(userIds.get(i)), roomCode, roomNameList.get(0));
                     tbExamInvigilateUserList.add(tbExamInvigilateUser);
                 }
-                tbExamInvigilateUserService.saveBatch(tbExamInvigilateUserList);
             } else {
-                UpdateWrapper<TBExamInvigilateUser> tbExamInvigilateUserUpdateWrapper = new UpdateWrapper<>();
-                tbExamInvigilateUserUpdateWrapper.lambda().set(TBExamInvigilateUser::getUserId, null)
-                        .eq(TBExamInvigilateUser::getRoomCode, roomCode)
-                        .eq(TBExamInvigilateUser::getExamId, examId)
-                        .eq(TBExamInvigilateUser::getOrgId, tbOrg.getId());
-                tbExamInvigilateUserService.update(tbExamInvigilateUserUpdateWrapper);
+                TBExamInvigilateUser tbExamInvigilateUser = new TBExamInvigilateUser(examId, orgId,
+                        null, roomCode, roomNameList.get(0));
+                tbExamInvigilateUserList.add(tbExamInvigilateUser);
             }
+            tbExamInvigilateUserService.saveBatch(tbExamInvigilateUserList);
         } catch (Exception e) {
             log.error("请求出错", e);
             if (e instanceof DuplicateKeyException) {

+ 18 - 0
themis-business/src/main/java/com/qmth/themis/business/entity/TBExamInvigilateUser.java

@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.util.Objects;
 
 /**
  * @Description: 监考员设置
@@ -136,4 +137,21 @@ public class TBExamInvigilateUser implements Serializable {
     public void setMonitorStatus(InvigilateMonitorStatusEnum monitorStatus) {
         this.monitorStatus = monitorStatus;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        TBExamInvigilateUser that = (TBExamInvigilateUser) o;
+        return Objects.equals(examId, that.examId) &&
+                Objects.equals(orgId, that.orgId) &&
+                Objects.equals(userId, that.userId) &&
+                Objects.equals(roomCode, that.roomCode) &&
+                Objects.equals(roomName, that.roomName);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(examId, orgId, userId, roomCode, roomName);
+    }
 }

+ 27 - 21
themis-business/src/main/java/com/qmth/themis/business/templete/service/impl/TempleteLogicServiceImpl.java

@@ -222,10 +222,12 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         Long examId = Long.parseLong(String.valueOf(map.get("examId")));
         Long createId = Long.parseLong(String.valueOf(map.get("createId")));
         List<String> txtList = (List<String>) map.get("txtList");
-        List<TBUser> tbUserList = new ArrayList<>();
-        List<TBUserRole> tbUserRoleList = new ArrayList<>();
-        List<TBExamInvigilateUser> tbExamInvigilateUserList = new ArrayList<>();
+        Set<TBUser> tbUserList = new HashSet<>();
+        Set<TBUserRole> tbUserRoleList = new HashSet<>();
+        Set<TBExamInvigilateUser> tbExamInvigilateUserList = new HashSet<>();
         TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
+        Set<String> roomCodeSet = new HashSet<>();
+        Set<String> roomNameSet = new HashSet<>();
         //保存用户
         int line = 0;
         for (int i = 0; i < finalList.size(); i++) {
@@ -241,6 +243,8 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                 for (int y = 0; y < subList.size(); y++) {
                     line++;
                     RoomCodeImportDto roomCodeImportDto = (RoomCodeImportDto) subList.get(y);
+                    roomCodeSet.add(roomCodeImportDto.getRoomCode());
+                    roomNameSet.add(roomCodeImportDto.getRoomName());
                     dataVerify(examId, roomCodeImportDto.getTeacher1(), roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId, tbUserList, tbUserRoleList, tbExamInvigilateUserList);
                     dataVerify(examId, roomCodeImportDto.getTeacher2(), roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId, tbUserList, tbUserRoleList, tbExamInvigilateUserList);
                     dataVerify(examId, roomCodeImportDto.getTeacher3(), roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId, tbUserList, tbUserRoleList, tbExamInvigilateUserList);
@@ -255,10 +259,20 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                     max = size;
                 }
             }
-            tbUserService.saveOrUpdateBatch(tbUserList);
-            tbUserRoleService.saveOrUpdateBatch(tbUserRoleList);
-            tbExamInvigilateUserService.saveOrUpdateBatch(tbExamInvigilateUserList);
+//            tbUserService.saveOrUpdateBatch(tbUserList);
+//            tbUserRoleService.saveOrUpdateBatch(tbUserRoleList);
+//            tbExamInvigilateUserService.saveOrUpdateBatch(tbExamInvigilateUserList);
         }
+        QueryWrapper<TBExamInvigilateUser> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(TBExamInvigilateUser::getOrgId, orgId)
+                .in(TBExamInvigilateUser::getRoomCode, roomCodeSet)
+                .eq(TBExamInvigilateUser::getExamId, examId)
+                .in(TBExamInvigilateUser::getRoomName, roomNameSet);
+        tbExamInvigilateUserService.remove(wrapper);
+
+        tbUserService.saveOrUpdateBatch(tbUserList);
+        tbUserRoleService.saveOrUpdateBatch(tbUserRoleList);
+        tbExamInvigilateUserService.saveOrUpdateBatch(tbExamInvigilateUserList);
         map.put("line", line);
         return map;
     }
@@ -297,7 +311,7 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      * @param orgId
      * @param createId
      */
-    public void dataVerify(Long examId, String userName, String roomCode, String roomName, Long orgId, Long createId, List<TBUser> tbUserList, List<TBUserRole> tbUserRoleList, List<TBExamInvigilateUser> tbExamInvigilateUserList) {
+    public void dataVerify(Long examId, String userName, String roomCode, String roomName, Long orgId, Long createId, Set<TBUser> tbUserList, Set<TBUserRole> tbUserRoleList, Set<TBExamInvigilateUser> tbExamInvigilateUserList) {
         if (checkRoomCodeExist(examId, roomCode, orgId)) {
             throw new BusinessException("考场代码 " + roomCode + " 不存在");
         }
@@ -324,20 +338,12 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                     .eq(TBExamInvigilateUser::getRoomName, roomName);
             TBExamInvigilateUser tbExamInvigilateUser = tbExamInvigilateUserService.getOne(tbExamInvigilateUserQueryWrapper);
             if (Objects.isNull(tbExamInvigilateUser)) {//新增考场
-                QueryWrapper<TBExamInvigilateUser> wrapper = new QueryWrapper<>();
-                wrapper.lambda().eq(TBExamInvigilateUser::getOrgId, orgId)
-                        .isNull(TBExamInvigilateUser::getUserId)
-                        .eq(TBExamInvigilateUser::getRoomCode, roomCode)
-                        .eq(TBExamInvigilateUser::getExamId, examId)
-                        .eq(TBExamInvigilateUser::getRoomName, roomName)
-                        .groupBy(TBExamInvigilateUser::getOrgId, TBExamInvigilateUser::getRoomCode, TBExamInvigilateUser::getExamId, TBExamInvigilateUser::getRoomName);
-                tbExamInvigilateUser = tbExamInvigilateUserService.getOne(wrapper);
-                if (tbExamInvigilateUser == null) {
-                    tbExamInvigilateUser = new TBExamInvigilateUser(examId, orgId, tbUser.getId(), roomCode, roomName);
-                } else {
-                    tbExamInvigilateUser.setUserId(tbUser.getId());
-                }
-//                tbExamInvigilateUserService.saveOrUpdate(tbExamInvigilateUser);
+                tbExamInvigilateUser = new TBExamInvigilateUser(examId, orgId, tbUser.getId(), roomCode, roomName);
+            }
+            tbExamInvigilateUserList.add(tbExamInvigilateUser);
+        } else {
+            TBExamInvigilateUser tbExamInvigilateUser = new TBExamInvigilateUser(examId, orgId, null, roomCode, roomName);
+            if (!tbExamInvigilateUserList.contains(tbExamInvigilateUser)) {
                 tbExamInvigilateUserList.add(tbExamInvigilateUser);
             }
         }