ソースを参照

3.2.7 bug修改

xiaofei 1 年間 前
コミット
ec687890c1

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamTaskDetailCardDto.java

@@ -36,6 +36,8 @@ public class ExamTaskDetailCardDto {
     private String flowStatusStr;
     private String printContent;
 
+    private Boolean review;
+
     public FlowStatusEnum getFlowStatus() {
         return flowStatus;
     }
@@ -238,4 +240,12 @@ public class ExamTaskDetailCardDto {
     public void setPrintContent(String printContent) {
         this.printContent = printContent;
     }
+
+    public Boolean getReview() {
+        return review;
+    }
+
+    public void setReview(Boolean review) {
+        this.review = review;
+    }
 }

+ 73 - 96
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -28,10 +28,7 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.service.*;
-import com.qmth.teachcloud.common.util.ConvertUtil;
-import com.qmth.teachcloud.common.util.RedisUtil;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.common.util.*;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.FillPatternType;
 import org.apache.poi.ss.usermodel.Font;
@@ -44,6 +41,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.jdbc.BadSqlGrammarException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -572,66 +570,78 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Transactional(rollbackFor = Exception.class)
     @Override
     public List<Long> disposeExamDataByExaminationExcel(ExamPrintPlan examPrintPlan, List<ExaminationImportDto> dataList, SerialNumberParams serialNumberParams, SysUser sysUser) {
-        List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
-            Long schoolIdId = e.getSchoolId();
-            Map<String, Object> map = new HashMap<>();
-            map.put("schoolId", schoolIdId);
-            map.put("examPlace", e.getExamPlace());
-            map.put("examRoom", e.getExamRoom());
-            map.put("examStartTime", e.getExamStartTime());
-            map.put("examEndTime", e.getExamEndTime());
-            return Stream.of(map);
-        }).distinct().collect(Collectors.toList());
+        try {
+            List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
+                Long schoolIdId = e.getSchoolId();
+                Map<String, Object> map = new HashMap<>();
+                map.put("schoolId", schoolIdId);
+                map.put("examPlace", e.getExamPlace());
+                map.put("examRoom", e.getExamRoom());
+                map.put("examStartTime", e.getExamStartTime());
+                map.put("examEndTime", e.getExamEndTime());
+                return Stream.of(map);
+            }).distinct().collect(Collectors.toList());
+
+            List<Long> examDetailIdList = new ArrayList<>();
+            for (Map<String, Object> map : examDetailKeyList) {
+                Long schoolId = Long.valueOf(String.valueOf(map.get("schoolId")));
+                String examPlace = String.valueOf(map.get("examPlace"));
+                String examRoom = String.valueOf(map.get("examRoom"));
+                String examStartTime = String.valueOf(map.get("examStartTime"));
+                String examEndTime = String.valueOf(map.get("examEndTime"));
+
+                QueryWrapper<ExamDetail> queryWrapper = new QueryWrapper<>();
+                queryWrapper.lambda().eq(ExamDetail::getSchoolId, schoolId)
+                        .eq(ExamDetail::getPrintPlanId, examPrintPlan.getId())
+                        .eq(ExamDetail::getExamPlace, examPlace)
+                        .eq(ExamDetail::getExamRoom, examRoom)
+                        .eq(ExamDetail::getExamStartTime, SystemConstant.convertIdToLong(examStartTime))
+                        .eq(ExamDetail::getExamEndTime, SystemConstant.convertIdToLong(examEndTime));
+                ExamDetail examDetailOld = this.getOne(queryWrapper);
+                if (examDetailOld != null) {
+                    this.deleteExaminationDataByExamDetailIds(Arrays.asList(examDetailOld.getId()));
+                }
 
-        List<Long> examDetailIdList = new ArrayList<>();
-        for (Map<String, Object> map : examDetailKeyList) {
-            Long schoolId = Long.valueOf(String.valueOf(map.get("schoolId")));
-            String examPlace = String.valueOf(map.get("examPlace"));
-            String examRoom = String.valueOf(map.get("examRoom"));
-            String examStartTime = String.valueOf(map.get("examStartTime"));
-            String examEndTime = String.valueOf(map.get("examEndTime"));
-
-            QueryWrapper<ExamDetail> queryWrapper = new QueryWrapper<>();
-            queryWrapper.lambda().eq(ExamDetail::getSchoolId, schoolId)
-                    .eq(ExamDetail::getPrintPlanId, examPrintPlan.getId())
-                    .eq(ExamDetail::getExamPlace, examPlace)
-                    .eq(ExamDetail::getExamRoom, examRoom)
-                    .eq(ExamDetail::getExamStartTime, SystemConstant.convertIdToLong(examStartTime))
-                    .eq(ExamDetail::getExamEndTime, SystemConstant.convertIdToLong(examEndTime));
-            ExamDetail examDetailOld = this.getOne(queryWrapper);
-            if (examDetailOld != null) {
-                this.deleteExaminationDataByExamDetailIds(Arrays.asList(examDetailOld.getId()));
+                List<ExaminationImportDto> examDetailStudentList = dataList.stream().filter(e -> e.getExamPlace().equals(examPlace) &&
+                                e.getExamRoom().equals(examRoom) && e.getExamStartTime().equals(examStartTime) && e.getExamEndTime().equals(examEndTime))
+                        .collect(Collectors.toList());
+
+                ExamDetail examDetail = new ExamDetail();
+                examDetail.setId(SystemConstant.getDbUuid());
+                examDetail.setPackageCode(convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit()));
+                examDetail.setSchoolId(schoolId);
+                examDetail.setOrgId(sysUser.getOrgId());
+                examDetail.setPrintPlanId(examPrintPlan.getId());
+                examDetail.setPrintPlanName(examPrintPlan.getName());
+                examDetail.setExamId(examPrintPlan.getExamId());
+                examDetail.setExamPlace(examPlace);
+                examDetail.setExamRoom(examRoom);
+                examDetail.setStatus(ExamDetailStatusEnum.NEW);
+                examDetail.setTotalSubjects(examDetailStudentList.size());
+                examDetail.setExamStartTime(SystemConstant.convertIdToLong(examStartTime));
+                examDetail.setExamEndTime(SystemConstant.convertIdToLong(examEndTime));
+                examDetail.setExamDataSource(ExamDataSourceEnum.FILE_IMPORT);
+                examDetail.setNormal(true);
+                examDetail.setCreateId(sysUser.getId());
+                examDetail.setBackupCount(examPrintPlan.getBackupCount());
+                this.save(examDetail);
+                examDetailIdList.add(examDetail.getId());
+
+                //组装exam_detail_course数据
+                disposeExamDetailCourseData(examPrintPlan.getExamId(), examDetail.getId(), examDetailStudentList, sysUser);
             }
-
-            List<ExaminationImportDto> examDetailStudentList = dataList.stream().filter(e -> e.getExamPlace().equals(examPlace) &&
-                            e.getExamRoom().equals(examRoom) && e.getExamStartTime().equals(examStartTime) && e.getExamEndTime().equals(examEndTime))
-                    .collect(Collectors.toList());
-
-            ExamDetail examDetail = new ExamDetail();
-            examDetail.setId(SystemConstant.getDbUuid());
-            examDetail.setPackageCode(convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit()));
-            examDetail.setSchoolId(schoolId);
-            examDetail.setOrgId(sysUser.getOrgId());
-            examDetail.setPrintPlanId(examPrintPlan.getId());
-            examDetail.setPrintPlanName(examPrintPlan.getName());
-            examDetail.setExamId(examPrintPlan.getExamId());
-            examDetail.setExamPlace(examPlace);
-            examDetail.setExamRoom(examRoom);
-            examDetail.setStatus(ExamDetailStatusEnum.NEW);
-            examDetail.setTotalSubjects(examDetailStudentList.size());
-            examDetail.setExamStartTime(SystemConstant.convertIdToLong(examStartTime));
-            examDetail.setExamEndTime(SystemConstant.convertIdToLong(examEndTime));
-            examDetail.setExamDataSource(ExamDataSourceEnum.FILE_IMPORT);
-            examDetail.setNormal(true);
-            examDetail.setCreateId(sysUser.getId());
-            examDetail.setBackupCount(examPrintPlan.getBackupCount());
-            this.save(examDetail);
-            examDetailIdList.add(examDetail.getId());
-
-            //组装exam_detail_course数据
-            disposeExamDetailCourseData(examPrintPlan.getExamId(), examDetail.getId(), examDetailStudentList, sysUser);
-        }
-        return examDetailIdList;
+            return examDetailIdList;
+        } catch (Exception e) {
+            if (e instanceof DataIntegrityViolationException || e instanceof BadSqlGrammarException) {
+                String content = JdbcErrorUtil.parseErrorMsg(e.getMessage().toString());
+                throw ExceptionResultEnum.SQL_ERROR.exception(content);
+            } else if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return null;
     }
 
     /**
@@ -732,40 +742,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             examStudentList.add(examStudent);
         }
 
-        // 校验准考证号是否重复
-//        if (!ticketNumberRepeatList.isEmpty()) {
-//            stringJoiner.add("考号[" + String.join(",", ticketNumberRepeatList) + "]在当前考试下已存在");
-//        }
-//        if (stringJoiner.toString().length() > 1) {
-//            throw ExceptionResultEnum.ERROR.exception(stringJoiner.toString());
-//        }
-        try {
-            examStudentService.saveBatch(examStudentList);
-        } catch (Exception e) {
-            if (e instanceof DataIntegrityViolationException) {
-                String error = e.getCause().toString();
-                String tooLongColumn = error.substring(error.lastIndexOf("column") + 7);
-                tooLongColumn = tooLongColumn.substring(0, tooLongColumn.lastIndexOf("at") - 1);
-                tooLongColumn = tooLongColumn.replaceAll("'", "");
-                String columnName = "";
-                switch (tooLongColumn) {
-                    case "student_name":
-                        columnName = "考生名称";
-                        break;
-                    case "student_code":
-                        columnName = "考生编号";
-                        break;
-                    default:
-                        break;
-                }
-                String content = SystemConstant.strNotNull(columnName) ? columnName : tooLongColumn;
-                throw ExceptionResultEnum.SQL_ERROR.exception("[" + content + "]超过长度限制");
-            } else if (e instanceof ApiException) {
-                ResultUtil.error((ApiException) e, e.getMessage());
-            } else {
-                ResultUtil.error(e.getMessage());
-            }
-        }
+        examStudentService.saveBatch(examStudentList);
     }
 
     @Override

+ 1 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -506,13 +506,8 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
                 this.updateById(taskDetail);
             }
 
-
             StringJoiner stringJoiner = new StringJoiner("_");
-            stringJoiner.add(String.valueOf(examDetails.get(0).getSchoolId()))
-                    .add(String.valueOf(examDetails.get(0).getExamStartTime()))
-                    .add(String.valueOf(examDetails.get(0).getExamEndTime()))
-                    .add(examTask.getCourseCode())
-                    .add(examTask.getPaperNumber());
+            stringJoiner.add(String.valueOf(examTask.getExamId())).add(examTask.getPaperNumber()).add(String.valueOf(examDetails.get(0).getExamStartTime())).add(String.valueOf(examDetails.get(0).getExamEndTime()));
             String key = stringJoiner.toString();
             CreatePdfCacheUtil.deletePaperType(key);
             for (ExamDetail examDetail : examDetails) {

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -922,6 +922,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examTask.getExamId());
             if (basicPrintConfig != null) {
                 detailCardDto.setPrintContent(basicPrintConfig.getPrintContent());
+                detailCardDto.setReview(basicPrintConfig.getReview());
             }
         }
         return detailCardDto;

+ 4 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -296,11 +296,11 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 paperType = paperTypeParam;
                 CreatePdfCacheUtil.setPaperType(key, paperType);
             } else {
-                if (StringUtils.isBlank(examDetailCourse.getPaperType())) {
+//                if (StringUtils.isBlank(examDetailCourse.getPaperType())) {
                     paperType = createPdfUtil.getPaperType(examPrintPlan.getDrawRule(), examTaskDetail, key);
-                } else {
-                    paperType = examDetailCourse.getPaperType();
-                }
+//                } else {
+//                    paperType = examDetailCourse.getPaperType();
+//                }
             }
             //查询考生
             QueryWrapper<ExamStudent> examStudentQueryWrapper = new QueryWrapper<>();

+ 50 - 1
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -914,7 +914,56 @@
                 and art.ASSIGNEE_ is null
                 and ari.USER_ID_ = cast(#{userId} as char)
                 and ari.TYPE_ = 'candidate'
-                and et.school_id = #{schoolId} ) t order by t.updateTime desc
+                and et.school_id = #{schoolId}
+              UNION all
+          select
+              et.id,
+              et.school_id schoolId,
+              et.org_id as orgId,
+              et.course_code courseCode,
+              et.course_name courseName,
+              et.specialty,
+              et.paper_number paperNumber,
+              et.card_rule_id cardRuleId,
+              case
+                  et.card_rule_id when -1 then '全部通卡'
+                                  else b.name
+                  end cardRuleName,
+              null as userId,
+              null userName,
+              et.start_time startTime,
+              et.end_time endTime,
+              null status,
+              null auditStatus,
+              et.enable,
+              et.create_time as createTime,
+              et.update_time as updateTime,
+              null as executionId,
+              null as flowId,
+              null as taskName,
+              null as taskDefKey,
+              null as taskId,
+              null setup,
+              et.teacher_name teacherName,
+              et.lecturer_name lecturerName,
+              d.real_name as propositionName,
+              so.name teachingRoomName,
+              et.exam_id as examId
+            from
+                 exam_task et
+                  left join basic_card_rule b ON
+                  et.card_rule_id = b.id
+                  LEFT JOIN sys_user d ON
+                  et.user_id= d.id
+                  LEFT JOIN
+                  sys_org so ON et.teaching_room_id = so.id
+                  LEFT JOIN exam_task_detail det ON
+                  det.exam_task_id = et.id
+          where
+              et.enable = true
+            AND et.status = 'STAGE'
+            AND et.user_id = #{userId}
+            and et.school_id = #{schoolId} ) t order by t.updateTime desc
     </select>
 
     <sql id="findFlowIdToMySelfSql">

+ 8 - 36
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -24,10 +24,12 @@ import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.mapper.BasicCourseMapper;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ExcelUtil;
+import com.qmth.teachcloud.common.util.JdbcErrorUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.jdbc.BadSqlGrammarException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -158,24 +160,9 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
             // 同步更新命题任务中的课程名称
             this.baseMapper.updateCourseNameFormExamTask(sysUser.getSchoolId(), editBasicCourse.getCode(), editBasicCourse.getName());
         } catch (Exception e) {
-            if (e instanceof DataIntegrityViolationException) {
-                String error = e.getCause().toString();
-                String tooLongColumn = error.substring(error.lastIndexOf("column") + 7);
-                tooLongColumn = tooLongColumn.substring(0, tooLongColumn.lastIndexOf("at") - 1);
-                tooLongColumn = tooLongColumn.replaceAll("'", "");
-                String columnName = "";
-                switch (tooLongColumn) {
-                    case "name":
-                        columnName = "基础课程名称";
-                        break;
-                    case "code":
-                        columnName = "基础课程编号";
-                        break;
-                    default:
-                        break;
-                }
-                String content = SystemConstant.strNotNull(columnName) ? columnName : tooLongColumn;
-                throw ExceptionResultEnum.SQL_ERROR.exception("[" + content + "]超过长度限制");
+            if (e instanceof DataIntegrityViolationException || e instanceof BadSqlGrammarException) {
+                String content = JdbcErrorUtil.parseErrorMsg(e.getMessage().toString());
+                throw ExceptionResultEnum.SQL_ERROR.exception(content);
             } else if (e instanceof ApiException) {
                 ResultUtil.error((ApiException) e, e.getMessage());
             } else {
@@ -448,24 +435,9 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                     this.baseMapper.updateCourseNameFormExamTask(sysUser.getSchoolId(), basicCourse.getCode(), basicCourse.getName());
                 }
             } catch (Exception e) {
-                if (e instanceof DataIntegrityViolationException) {
-                    String error = e.getCause().toString();
-                    String tooLongColumn = error.substring(error.lastIndexOf("column") + 7);
-                    tooLongColumn = tooLongColumn.substring(0, tooLongColumn.lastIndexOf("at") - 1);
-                    tooLongColumn = tooLongColumn.replaceAll("'", "");
-                    String columnName = "";
-                    switch (tooLongColumn) {
-                        case "name":
-                            columnName = "基础课程名称";
-                            break;
-                        case "code":
-                            columnName = "基础课程编号";
-                            break;
-                        default:
-                            break;
-                    }
-                    String content = SystemConstant.strNotNull(columnName) ? columnName : tooLongColumn;
-                    throw ExceptionResultEnum.SQL_ERROR.exception("[" + content + "]超过长度限制");
+                if (e instanceof DataIntegrityViolationException || e instanceof BadSqlGrammarException) {
+                    String content = JdbcErrorUtil.parseErrorMsg(e.getMessage().toString());
+                    throw ExceptionResultEnum.SQL_ERROR.exception(content);
                 } else if (e instanceof ApiException) {
                     ResultUtil.error((ApiException) e, e.getMessage());
                 } else {

+ 5 - 18
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java

@@ -25,11 +25,13 @@ import com.qmth.teachcloud.common.enums.TeachBasicEnum;
 import com.qmth.teachcloud.common.mapper.BasicStudentMapper;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ExcelUtil;
+import com.qmth.teachcloud.common.util.JdbcErrorUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.jdbc.BadSqlGrammarException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -267,24 +269,9 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
         try {
             this.saveOrUpdateBatch(editEntityList);
         } catch (Exception e) {
-            if (e instanceof DataIntegrityViolationException) {
-                String error = e.getCause().toString();
-                String tooLongColumn = error.substring(error.lastIndexOf("column") + 7);
-                tooLongColumn = tooLongColumn.substring(0, tooLongColumn.lastIndexOf("at") - 1);
-                tooLongColumn = tooLongColumn.replaceAll("'", "");
-                String columnName = "";
-                switch (tooLongColumn) {
-                    case "student_name":
-                        columnName = "基础学生姓名";
-                        break;
-                    case "student_code":
-                        columnName = "基础学生编号";
-                        break;
-                    default:
-                        break;
-                }
-                String content = SystemConstant.strNotNull(columnName) ? columnName : tooLongColumn;
-                throw ExceptionResultEnum.SQL_ERROR.exception("[" + content + "]超过长度限制");
+            if (e instanceof DataIntegrityViolationException || e instanceof BadSqlGrammarException) {
+                String content = JdbcErrorUtil.parseErrorMsg(e.getMessage().toString());
+                throw ExceptionResultEnum.SQL_ERROR.exception(content);
             } else if (e instanceof ApiException) {
                 ResultUtil.error((ApiException) e, e.getMessage());
             } else {

+ 5 - 18
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -23,6 +23,7 @@ import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import com.qmth.teachcloud.common.mapper.SysOrgMapper;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ExcelUtil;
+import com.qmth.teachcloud.common.util.JdbcErrorUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.collections4.CollectionUtils;
@@ -30,6 +31,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.dao.DuplicateKeyException;
+import org.springframework.jdbc.BadSqlGrammarException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -566,24 +568,9 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
             }
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
-            if (e instanceof DataIntegrityViolationException) {
-                String error = e.getCause().toString();
-                String tooLongColumn = error.substring(error.lastIndexOf("column") + 7);
-                tooLongColumn = tooLongColumn.substring(0, tooLongColumn.lastIndexOf("at") - 1);
-                tooLongColumn = tooLongColumn.replaceAll("'", "");
-                String columnName = "";
-                switch (tooLongColumn) {
-                    case "name":
-                        columnName = "机构名称";
-                        break;
-                    case "code":
-                        columnName = "机构编号";
-                        break;
-                    default:
-                        break;
-                }
-                String content = SystemConstant.strNotNull(columnName) ? columnName : tooLongColumn;
-                throw ExceptionResultEnum.SQL_ERROR.exception("[" + content + "]超过长度限制");
+            if (e instanceof DataIntegrityViolationException || e instanceof BadSqlGrammarException) {
+                String content = JdbcErrorUtil.parseErrorMsg(e.getMessage().toString());
+                throw ExceptionResultEnum.SQL_ERROR.exception(content);
             } else if (e instanceof ApiException) {
                 ResultUtil.error((ApiException) e, e.getMessage());
             } else {

+ 5 - 25
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -25,15 +25,13 @@ import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import com.qmth.teachcloud.common.enums.userPush.UserPushResultEnum;
 import com.qmth.teachcloud.common.mapper.SysUserMapper;
 import com.qmth.teachcloud.common.service.*;
-import com.qmth.teachcloud.common.util.Base64Util;
-import com.qmth.teachcloud.common.util.ExcelUtil;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.common.util.*;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.dao.DuplicateKeyException;
+import org.springframework.jdbc.BadSqlGrammarException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
@@ -610,27 +608,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 String errorColumn = e.getCause().toString();
                 String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3).replaceAll("'", "");
                 throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
-            } else if (e instanceof DataIntegrityViolationException) {
-                String error = e.getCause().toString();
-                String tooLongColumn = error.substring(error.lastIndexOf("column") + 7);
-                tooLongColumn = tooLongColumn.substring(0, tooLongColumn.lastIndexOf("at") - 1);
-                tooLongColumn = tooLongColumn.replaceAll("'", "");
-                String columnName = "";
-                switch (tooLongColumn) {
-                    case "login_name":
-                        columnName = "登录名";
-                        break;
-                    case "real_name":
-                        columnName = "真实姓名";
-                        break;
-                    case "code":
-                        columnName = "工号";
-                        break;
-                    default:
-                        break;
-                }
-                String content = SystemConstant.strNotNull(columnName) ? columnName : tooLongColumn;
-                throw ExceptionResultEnum.SQL_ERROR.exception("[" + content + "]超过长度限制");
+            } else if (e instanceof DataIntegrityViolationException || e instanceof BadSqlGrammarException) {
+                String content = JdbcErrorUtil.parseErrorMsg(e.getMessage().toString());
+                throw ExceptionResultEnum.SQL_ERROR.exception(content);
             } else if (e instanceof ApiException) {
                 ResultUtil.error((ApiException) e, e.getMessage());
             } else {

+ 65 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/JdbcErrorUtil.java

@@ -0,0 +1,65 @@
+package com.qmth.teachcloud.common.util;
+
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import org.apache.commons.lang3.StringUtils;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.Security;
+import java.security.spec.AlgorithmParameterSpec;
+import java.util.Base64;
+
+/**
+ * @Description: 数据库异常解析
+ */
+public class JdbcErrorUtil {
+    private final static Logger log = LoggerFactory.getLogger(JdbcErrorUtil.class);
+
+    /**
+     * 解析数据库异常
+     *
+     * @return
+     */
+    public static String parseErrorMsg(String error) {
+        String content = null;
+        String msg = "";
+        // 唯一索引报错
+        if (error.contains("Duplicate entry")) {
+            int startIndex = error.lastIndexOf("for key");
+            content = error.substring(startIndex + "for key".length());
+            msg = "违反数据库唯一规则";
+        }
+        // 字段不存在
+        else if (error.contains("Unknown column")) {
+            int startIndex = error.lastIndexOf("Unknown column");
+            int endIndex = error.lastIndexOf("in 'field list'");
+            content = error.substring(startIndex + "Unknown column".length(), endIndex);
+            msg = "字段在数据库中不存在,请联系管理员";
+        }
+        // 字段超过最大长度
+        else if (error.contains("Data too long")) {
+            int startIndex = error.lastIndexOf("Data too long for column");
+            int endIndex = error.lastIndexOf("at");
+            content = error.substring(startIndex + "Data too long for column".length(), endIndex);
+            msg = "字段值超过数据库最大长度";
+        }
+        // 必填项,没填值
+        else if (error.contains("doesn't have a default value")) {
+            int startIndex = error.lastIndexOf("Field");
+            int endIndex = error.lastIndexOf("doesn't have a default value");
+            content = error.substring(startIndex + "Field".length(), endIndex);
+            msg = "字段数据库设置为必填,但实际值为空";
+        }
+        if (StringUtils.isNotBlank(content)) {
+            return content.trim() + msg;
+        } else {
+            return error;
+        }
+    }
+
+}