Sfoglia il codice sorgente

成绩管理导入导出

夏文涛 2 anni fa
parent
commit
aabc6dcef8

+ 92 - 121
.idea/workspace.xml

@@ -2,25 +2,8 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="6c5cf517-721b-44b7-afae-e7b1b913b988" name="Default Changelist" comment="">
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/api/SmartScoreControllerAPI.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/api/SmartScoreControllerAPI.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/mapper/SmartAuthorGroupMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/mapper/SmartAuthorGroupMapper.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/mapper/SmartScoreMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/mapper/SmartScoreMapper.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/mapper/SmartSubjectMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/mapper/SmartSubjectMapper.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/main/java/com/template/model/pojo/SmartScore.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/model/pojo/SmartScore.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/model/request/updateScoreRequest.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/model/request/updateScoreRequest.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/model/vo/ScorePageVo.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/model/vo/ScorePageVo.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/model/vo/ScoreVo.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/model/vo/ScoreVo.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/services/SmartAuthorGroupService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/services/SmartAuthorGroupService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/services/SmartScoreService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/services/SmartScoreService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/services/SmartSubjectService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/services/SmartSubjectService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/services/impl/SmartAuthorGroupServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/services/impl/SmartAuthorGroupServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/services/impl/SmartScoreServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/services/impl/SmartScoreServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/template/services/impl/SmartSubjectServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/template/services/impl/SmartSubjectServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/mapper/template/SmartAuthorGroupMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/mapper/template/SmartAuthorGroupMapper.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/mapper/template/SmartScoreMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/mapper/template/SmartScoreMapper.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/target/classes/mapper/template/SmartAuthorGroupMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/mapper/template/SmartAuthorGroupMapper.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/target/mybatis_plus-0.0.1-SNAPSHOT.jar.original" beforeDir="false" afterPath="$PROJECT_DIR$/target/mybatis_plus-0.0.1-SNAPSHOT.jar.original" afterDir="false" />
     </list>
     <ignored path="$PROJECT_DIR$/classes/" />
     <ignored path="$PROJECT_DIR$/target/" />
@@ -38,8 +21,8 @@
       <file pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="238">
-              <caret line="436" column="66" selection-start-line="436" selection-start-column="66" selection-end-line="436" selection-end-column="66" />
+            <state relative-caret-position="486">
+              <caret line="671" column="48" lean-forward="true" selection-start-line="671" selection-start-column="48" selection-end-line="671" selection-end-column="48" />
               <folding>
                 <element signature="e#11979#11980#0" expanded="true" />
                 <element signature="e#12006#12007#0" expanded="true" />
@@ -47,16 +30,26 @@
                 <element signature="e#12180#12181#0" expanded="true" />
                 <element signature="e#12290#12291#0" expanded="true" />
                 <element signature="e#12317#12318#0" expanded="true" />
+                <element signature="method#downloadScoreExcel#0;class#SmartScoreController#0" />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/main/java/com/template/model/pojo/SmartScore.java">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/template/core/JwtAuthenticationInterceptor.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="134">
-              <caret line="59" column="32" selection-start-line="59" selection-start-column="32" selection-end-line="59" selection-end-column="32" />
+            <state relative-caret-position="295">
+              <caret line="75" column="32" lean-forward="true" selection-start-line="75" selection-start-column="12" selection-end-line="75" selection-end-column="32" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/template/api/SmartScoreControllerAPI.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="484">
+              <caret line="99" column="38" selection-start-line="99" selection-start-column="17" selection-end-line="99" selection-end-column="38" />
             </state>
           </provider>
         </entry>
@@ -97,15 +90,6 @@
           </provider>
         </entry>
       </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/main/java/com/template/api/SmartScoreControllerAPI.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="371">
-              <caret line="90" column="24" selection-start-line="90" selection-start-column="24" selection-end-line="90" selection-end-column="24" />
-            </state>
-          </provider>
-        </entry>
-      </file>
     </leaf>
   </component>
   <component name="FileTemplateManagerImpl">
@@ -117,15 +101,6 @@
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>insertSmartUser</find>
-      <find>getXwAttendance</find>
-      <find>发送短信</find>
-      <find>queryLeaveRecords</find>
-      <find>Build</find>
-      <find>@T</find>
-      <find>false</find>
-      <find>.isPresent()</find>
-      <find>楼栋</find>
       <find>sheet</find>
       <find>(HttpServletResponse</find>
       <find>导出</find>
@@ -147,6 +122,15 @@
       <find>querySmartScores</find>
       <find>subjects.size() * 3</find>
       <find>smartScoreExport</find>
+      <find>cos</find>
+      <find>导入</find>
+      <find>downloadScoreExcel</find>
+      <find>dataFormatter</find>
+      <find>.isEmpty</find>
+      <find>hasTe</find>
+      <find>score</find>
+      <find>classes</find>
+      <find>gradeId</find>
     </findStrings>
     <replaceStrings>
       <replace />
@@ -215,10 +199,10 @@
         <option value="$PROJECT_DIR$/src/main/java/com/template/services/impl/SmartSubjectServiceImpl.java" />
         <option value="$PROJECT_DIR$/src/main/java/com/template/model/vo/ScoreRankVo.java" />
         <option value="$PROJECT_DIR$/src/main/java/com/template/model/vo/ScoreVo.java" />
-        <option value="$PROJECT_DIR$/src/main/java/com/template/model/pojo/SmartScore.java" />
         <option value="$PROJECT_DIR$/src/main/java/com/template/model/vo/ScorePageVo.java" />
         <option value="$PROJECT_DIR$/src/main/resources/mapper/template/SmartScoreMapper.xml" />
         <option value="$PROJECT_DIR$/src/main/java/com/template/api/SmartScoreControllerAPI.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/template/model/pojo/SmartScore.java" />
         <option value="$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java" />
       </list>
     </option>
@@ -515,17 +499,18 @@
       <workItem from="1709604835831" duration="41000" />
       <workItem from="1709604890825" duration="250000" />
       <workItem from="1709606083794" duration="10623000" />
-      <workItem from="1709688259937" duration="118762000" />
+      <workItem from="1709688259937" duration="124825000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="269477000" />
+    <option name="totallyTimeSpent" value="275540000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="-8" y="-8" width="1936" height="1048" extended-state="6" />
+    <editor active="true" />
     <layout>
-      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.25266525" />
+      <window_info content_ui="combo" id="Project" order="0" weight="0.39059082" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
       <window_info id="Designer" order="2" />
       <window_info id="JRebel" order="3" side_tool="true" />
@@ -536,8 +521,8 @@
       <window_info id="Web" order="8" side_tool="true" />
       <window_info anchor="bottom" id="Message" order="0" />
       <window_info anchor="bottom" id="Find" order="1" />
-      <window_info anchor="bottom" id="Run" order="2" sideWeight="0.4989059" visible="true" weight="0.2286652" />
-      <window_info anchor="bottom" id="Debug" order="3" sideWeight="0.4989059" weight="0.3127072" />
+      <window_info anchor="bottom" id="Run" order="2" sideWeight="0.4989059" weight="0.2286652" />
+      <window_info anchor="bottom" id="Debug" order="3" sideWeight="0.4989059" weight="0.3118162" />
       <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
       <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
       <window_info anchor="bottom" id="TODO" order="6" />
@@ -554,7 +539,7 @@
       <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
       <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
       <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
-      <window_info active="true" anchor="right" id="Maven" order="3" visible="true" weight="0.120469086" />
+      <window_info anchor="right" id="Maven" order="3" weight="0.120469086" />
       <window_info anchor="right" id="Palette" order="4" />
       <window_info anchor="right" id="Capture Analysis" order="5" />
       <window_info anchor="right" id="Database" order="6" />
@@ -596,24 +581,6 @@
           <option name="timeStamp" value="17" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java</url>
-          <line>828</line>
-          <properties />
-          <option name="timeStamp" value="36" />
-        </line-breakpoint>
-        <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java</url>
-          <line>791</line>
-          <properties />
-          <option name="timeStamp" value="37" />
-        </line-breakpoint>
-        <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java</url>
-          <line>789</line>
-          <properties />
-          <option name="timeStamp" value="38" />
-        </line-breakpoint>
-        <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartUserController.java</url>
           <line>1471</line>
           <properties />
@@ -669,10 +636,22 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java</url>
-          <line>132</line>
+          <line>133</line>
           <properties />
           <option name="timeStamp" value="128" />
         </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java</url>
+          <line>673</line>
+          <properties />
+          <option name="timeStamp" value="140" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java</url>
+          <line>838</line>
+          <properties />
+          <option name="timeStamp" value="141" />
+        </line-breakpoint>
       </breakpoints>
     </breakpoint-manager>
   </component>
@@ -680,50 +659,6 @@
     <SUITE FILE_PATH="coverage/mybatis_plus$MybatisPlusApplication.ic" NAME="MybatisPlusApplication Coverage Results" MODIFIED="1709618808702" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/main/java/com/template/api/SmartExamtypeControllerAPI.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="447">
-          <caret line="29" column="112" selection-start-line="29" selection-start-column="112" selection-end-line="29" selection-end-column="129" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/java/com/template/services/SmartExamtypeService.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="401">
-          <caret line="21" column="113" selection-start-line="21" selection-start-column="113" selection-end-line="21" selection-end-column="113" />
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/java/com/template/model/pojo/SmartExamtype.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="172">
-          <caret line="28" column="13" selection-start-line="28" selection-start-column="13" selection-end-line="28" selection-end-column="13" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/java/com/template/services/impl/SmartExamtypeServiceImpl.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="101">
-          <caret line="29" column="13" selection-start-line="29" selection-start-column="13" selection-end-line="29" selection-end-column="13" />
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartExamtypeController.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="240">
-          <caret line="97" column="13" selection-start-line="97" selection-start-column="13" selection-end-line="97" selection-end-column="13" />
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/main/java/com/template/model/pojo/SmartSubject.java">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="86">
@@ -1005,13 +940,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/java/com/template/model/pojo/SmartScore.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="134">
-          <caret line="59" column="32" selection-start-line="59" selection-start-column="32" selection-end-line="59" selection-end-column="32" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/main/java/com/template/model/vo/ScorePageVo.java">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="677">
@@ -1033,17 +961,59 @@
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/application-dev.yml">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/application-prod.yml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="525">
+          <caret line="38" column="5" selection-start-line="38" selection-start-column="5" selection-end-line="38" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi/4.1.0/poi-4.1.0.jar!/org/apache/poi/ss/usermodel/DataFormatter.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="295">
+          <caret line="509" column="18" selection-start-line="509" selection-start-column="18" selection-end-line="509" selection-end-column="18" />
+          <folding>
+            <element signature="e#20546#20547#0" expanded="true" />
+            <element signature="e#20619#20620#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/template/core/JwtAuthenticationInterceptor.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="295">
+          <caret line="75" column="32" lean-forward="true" selection-start-line="75" selection-start-column="12" selection-end-line="75" selection-end-column="32" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/template/model/enumModel/eExamType.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="207">
+          <caret line="9" column="12" selection-start-line="9" selection-start-column="12" selection-end-line="9" selection-end-column="12" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/template/model/pojo/SmartScore.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="238">
+          <caret line="58" selection-start-line="58" selection-end-line="58" />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/src/main/java/com/template/api/SmartScoreControllerAPI.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="371">
-          <caret line="90" column="24" selection-start-line="90" selection-start-column="24" selection-end-line="90" selection-end-column="24" />
+        <state relative-caret-position="484">
+          <caret line="99" column="38" selection-start-line="99" selection-start-column="17" selection-end-line="99" selection-end-column="38" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/main/java/com/template/controller/SmartScoreController.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="238">
-          <caret line="436" column="66" selection-start-line="436" selection-start-column="66" selection-end-line="436" selection-end-column="66" />
+        <state relative-caret-position="486">
+          <caret line="671" column="48" lean-forward="true" selection-start-line="671" selection-start-column="48" selection-end-line="671" selection-end-column="48" />
           <folding>
             <element signature="e#11979#11980#0" expanded="true" />
             <element signature="e#12006#12007#0" expanded="true" />
@@ -1051,6 +1021,7 @@
             <element signature="e#12180#12181#0" expanded="true" />
             <element signature="e#12290#12291#0" expanded="true" />
             <element signature="e#12317#12318#0" expanded="true" />
+            <element signature="method#downloadScoreExcel#0;class#SmartScoreController#0" />
           </folding>
         </state>
       </provider>

+ 191 - 137
src/main/java/com/template/controller/SmartScoreController.java

@@ -24,6 +24,7 @@ import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
 import org.springframework.validation.BindingResult;
 
 import org.springframework.web.bind.annotation.RequestHeader;
@@ -561,7 +562,7 @@ public class SmartScoreController implements SmartScoreControllerAPI {
                                         if (subjectScore != null && subjectScore.isPresent()) {
                                             dataRow.createCell(j).setCellValue(subjectScore.get().getScore());//分数
                                             dataRow.getCell(j).setCellStyle(style);
-                                        }else{
+                                        } else {
                                             dataRow.createCell(j).setCellStyle(style);
                                         }
                                     }
@@ -640,6 +641,21 @@ public class SmartScoreController implements SmartScoreControllerAPI {
         if (grades == null) {
             return CommonResult.fail("系统年级数据为空,导入失败");
         }
+        //获取科目
+        List<SmartSubject> subjects = smartSubjectService.list(null);
+        if (subjects == null) {
+            return CommonResult.fail("科目数据为空,导入失败");
+        }
+        //考试类型
+        List<SmartExamtype> examtypes = smartExamtypeService.list(null);
+        if (examtypes == null) {
+            return CommonResult.fail("考试类型数据为空,导入失败");
+        }
+        //学期
+        List<SmartSemester> semesters = smartSemesterService.list(null);
+        if (semesters == null) {
+            return CommonResult.fail("学期数据为空,导入失败");
+        }
         //获取班级
         List<SmartClass> classes = smartClassService.list(null);
         if (classes == null) {
@@ -649,102 +665,113 @@ public class SmartScoreController implements SmartScoreControllerAPI {
         DataFormatter dataFormatter = new DataFormatter();
 
         try {
+            HSSFRow titleRow = sheetAt.getRow(1);
             //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
-            for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
-
-                HSSFRow row = sheetAt.getRow(rowNum);
+            for (int rowNum = 1; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
 
+                HSSFRow row = sheetAt.getRow(1);
                 //判断每一列单元格是否符合规则
-                if (rowNum == 0) {
-                    String semester = dataFormatter.formatCellValue(row.getCell(0));//学期
-                    if (!semester.equals("学期")) {
-                        return CommonResult.fail("导入数据第一列为学期");
+                if (rowNum == 1) {
+                    String name = dataFormatter.formatCellValue(titleRow.getCell(0));//姓名
+                    if (!name.equals("姓名")) {
+                        return CommonResult.fail("导入数据第一列为姓名");
                     }
-                    String grade = dataFormatter.formatCellValue(row.getCell(1));//年级
-                    if (!grade.equals("年级")) {
-                        return CommonResult.fail("导入数据第二列为年级");
+                    String cardNo = dataFormatter.formatCellValue(titleRow.getCell(1));//学号
+                    if (!cardNo.equals("学号")) {
+                        return CommonResult.fail("导入数据第二列为学号");
                     }
-                    String schoolClass = dataFormatter.formatCellValue(row.getCell(2));//班级
+                    String schoolClass = dataFormatter.formatCellValue(titleRow.getCell(2));//班级
                     if (!schoolClass.equals("班级")) {
                         return CommonResult.fail("导入数据第三列为班级");
                     }
-                    String subject = dataFormatter.formatCellValue(row.getCell(3));//学科
-                    if (!subject.equals("学科")) {
-                        return CommonResult.fail("导入数据第四列为学科");
+                    String grade = dataFormatter.formatCellValue(titleRow.getCell(3));//年级
+                    if (!grade.equals("年级")) {
+                        return CommonResult.fail("导入数据第四列为年级");
                     }
-                    String examType = dataFormatter.formatCellValue(row.getCell(4));//考试类型
+                    String examType = dataFormatter.formatCellValue(titleRow.getCell(4));//考试类型
                     if (!examType.equals("考试类型")) {
-                        return CommonResult.fail("导入数据第四列为考试类型");
-                    }
-                    String name = dataFormatter.formatCellValue(row.getCell(5));//姓名
-                    if (!name.equals("姓名")) {
-                        return CommonResult.fail("导入数据第四列为姓名");
-                    }
-                    String cardNo = dataFormatter.formatCellValue(row.getCell(6));//学号
-                    if (!cardNo.equals("学号")) {
-                        return CommonResult.fail("导入数据第四列为学号");
-                    }
-                    String score = dataFormatter.formatCellValue(row.getCell(7));//成绩
-                    if (!score.equals("成绩")) {
-                        return CommonResult.fail("导入数据第四列为成绩");
+                        return CommonResult.fail("导入数据第五列为考试类型");
                     }
-                } else {
-                    SmartScore data = new SmartScore();
-                    String semester = dataFormatter.formatCellValue(row.getCell(0));//学期
-                    String grade = dataFormatter.formatCellValue(row.getCell(1));//年级
-                    String schoolClass = dataFormatter.formatCellValue(row.getCell(2));//班级
-                    String subject = dataFormatter.formatCellValue(row.getCell(3));//学科
-                    String examType = dataFormatter.formatCellValue(row.getCell(4));//考试类型
-                    String name = dataFormatter.formatCellValue(row.getCell(5));//姓名
-                    String cardNo = dataFormatter.formatCellValue(row.getCell(6));//学号
-                    String score = dataFormatter.formatCellValue(row.getCell(7));//成绩
-
-                    SmartSemester semesterStr = smartSemesterService.querySemesterByName(semester);
-                    if (semesterStr == null) {
-                        return CommonResult.fail(semester + "学期数据无效,导入失败!");
+                    String semester = dataFormatter.formatCellValue(titleRow.getCell(5));//学期
+                    if (!semester.equals("学期")) {
+                        return CommonResult.fail("导入数据第六列为学期");
                     }
+                } else if (rowNum > 2) {
 
-                    //数据重复性判断 学期 + 学号 + 科目
-                    String existData = semester + cardNo + subject;
-                    scoreNames.add(existData);
-                    if (scoreNames.stream().distinct().count() != scoreNames.size()) {
-                        return CommonResult.fail("导入的Excel中的" + existData + "存在重复数据");
-                    }
+                    String name = dataFormatter.formatCellValue(row.getCell(0));//姓名
+                    String cardNo = dataFormatter.formatCellValue(row.getCell(1));//学号
 
-                    //重复数据提示
-                    long exist = scores.stream().filter(e -> e.getSemester().equals(semester) && e.getCardNo().equals(cardNo) && e.getSubjectId().equals(eSubjectStatu.integerOf(subject))).count();
-                    if (exist > 0) {
-                        return CommonResult.fail(existData + "成绩数据在系统中已存在,请勿重复导入");
+                    Optional<SmartUser> user = users.stream().filter(e -> e.getCardNo().equals(cardNo)).findFirst();
+                    if (!(user != null && user.isPresent())) {
+                        return CommonResult.fail("当前系统中不存在" + name + "的学生信息,无法导入成绩");
                     }
+                    Integer userId = user.get().getId();
 
-                    data.setSemester(semester);
-                    data.setSemesterId(semesterStr.getId());
-                    data.setGrade(grade);
+                    String grade = dataFormatter.formatCellValue(row.getCell(3));//年级
                     Optional<SmartGrade> nowGrade = grades.stream().filter(e -> e.getName().equals(grade)).findFirst();
                     if (!(nowGrade != null && nowGrade.isPresent())) {
                         return CommonResult.fail(name + "的年级数据失效,导入失败");
                     }
-                    data.setGradeId(nowGrade.get().getId());
+                    Integer gradeId = nowGrade.get().getId();
 
+                    String schoolClass = dataFormatter.formatCellValue(row.getCell(2));//班级
                     Optional<SmartClass> nowClass = classes.stream().filter(e -> e.getName().equals(schoolClass)).findFirst();
                     if (!(nowClass != null && nowClass.isPresent())) {
                         return CommonResult.fail(name + "的班级数据失效,导入失败");
                     }
-                    data.setSchoolClassId(nowClass.get().getId());
-                    data.setSchoolClass(schoolClass);
-                    data.setCardNo(cardNo);
-                    data.setName(name);
-                    Optional<SmartUser> user = users.stream().filter(e -> e.getCardNo().equals(cardNo)).findFirst();
-                    if (user != null && user.isPresent()) {
-                        data.setUserId(user.get().getId());
-                    } else {
-                        return CommonResult.fail("当前系统中不存在" + name + "的学生信息,无法导入成绩");
+                    Integer schoolClassId = nowClass.get().getId();
+
+                    String examType = dataFormatter.formatCellValue(row.getCell(4));//考试类型
+                    Optional<SmartExamtype> examtype = examtypes.stream().filter(e -> e.getGradeId().equals(gradeId) && e.getName().equals(examType)).findFirst();
+                    if (!(examtype != null && examtype.isPresent())) {
+                        return CommonResult.fail(name + "的考试类型数据失效,导入失败");
                     }
-                    data.setSubjectId(eSubjectStatu.integerOf(subject));
-                    data.setExamType(eExamType.integerOf(examType));
-                    data.setScore(Double.valueOf(score));
+                    Integer examTypeId = examtype.get().getId();
 
-                    result.add(data);
+                    String semesterStr = dataFormatter.formatCellValue(row.getCell(5));//学期
+                    Optional<SmartSemester> semester = semesters.stream().filter(e -> e.getName().equals(semesterStr)).findFirst();
+                    if (!(semester != null && semester.isPresent())) {
+                        return CommonResult.fail(name + "的学期数据失效,导入失败");
+                    }
+                    Integer semesterId = semester.get().getId();
+
+                    int sds = titleRow.getLastCellNum();
+                    for (int i = 6; i < titleRow.getLastCellNum(); i++) {
+                        String score = dataFormatter.formatCellValue(row.getCell(i));//成绩
+                        if (StringUtils.hasText(score)) {
+                            String subjectStr = dataFormatter.formatCellValue(titleRow.getCell(i));//科目
+                            Optional<SmartSubject> subject = subjects.stream().filter(e -> e.getName().equals(subjectStr)).findFirst();
+                            if (subject != null && subject.isPresent()) {
+                                //数据重复性判断 学期 + 学号 + 科目
+                                String existData = semester + cardNo + subject;
+                                scoreNames.add(existData);
+                                if (scoreNames.stream().distinct().count() != scoreNames.size()) {
+                                    return CommonResult.fail("导入的Excel中的" + existData + "存在重复数据");
+                                }
+                                //重复数据提示
+                                long exist = scores.stream().filter(e -> e.getSemester().equals(semester) && e.getCardNo().equals(cardNo) && e.getSubjectId().equals(subject.get().getId())).count();
+                                if (exist > 0) {
+                                    return CommonResult.fail(existData + "成绩数据在系统中已存在,请勿重复导入");
+                                }
+                                SmartScore data = new SmartScore();
+                                data.setSemesterId(semesterId);
+                                data.setSemester(semesterStr);
+                                data.setGradeId(gradeId);
+                                data.setGrade(grade);
+                                data.setSchoolClassId(schoolClassId);
+                                data.setSchoolClass(schoolClass);
+                                data.setCardNo(cardNo);
+                                data.setName(name);
+                                data.setUserId(userId);
+                                data.setSubjectId(subject.get().getId());
+                                data.setExamType(examTypeId);
+                                data.setScore(Double.valueOf(score));
+                                result.add(data);
+                            } else {
+                                return CommonResult.fail(subjectStr + "科目数据在系统中不存在,导入失败");
+                            }
+                        }
+                    }
                 }
             }
         } catch (Exception e) {
@@ -777,6 +804,21 @@ public class SmartScoreController implements SmartScoreControllerAPI {
         if (grades == null) {
             return CommonResult.fail("系统年级数据为空,导入失败");
         }
+        //获取科目
+        List<SmartSubject> subjects = smartSubjectService.list(null);
+        if (subjects == null) {
+            return CommonResult.fail("科目数据为空,导入失败");
+        }
+        //考试类型
+        List<SmartExamtype> examtypes = smartExamtypeService.list(null);
+        if (examtypes == null) {
+            return CommonResult.fail("考试类型数据为空,导入失败");
+        }
+        //学期
+        List<SmartSemester> semesters = smartSemesterService.list(null);
+        if (semesters == null) {
+            return CommonResult.fail("学期数据为空,导入失败");
+        }
         //获取班级
         List<SmartClass> classes = smartClassService.list(null);
         if (classes == null) {
@@ -786,102 +828,114 @@ public class SmartScoreController implements SmartScoreControllerAPI {
         DataFormatter dataFormatter = new DataFormatter();
 
         try {
+            XSSFRow titleRow = sheetAt.getRow(1);
             //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
-            for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
+            for (int rowNum = 1; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) {
 
                 XSSFRow row = sheetAt.getRow(rowNum);
 
                 //判断每一列单元格是否符合规则
-                if (rowNum == 0) {
-                    String semester = dataFormatter.formatCellValue(row.getCell(0));//学期
-                    if (!semester.equals("学期")) {
-                        return CommonResult.fail("导入数据第一列为学期");
+                if (rowNum == 1) {
+                    String name = dataFormatter.formatCellValue(titleRow.getCell(0));//姓名
+                    if (!name.equals("姓名")) {
+                        return CommonResult.fail("导入数据第一列为姓名");
                     }
-                    String grade = dataFormatter.formatCellValue(row.getCell(1));//年级
-                    if (!grade.equals("年级")) {
-                        return CommonResult.fail("导入数据第二列为年级");
+                    String cardNo = dataFormatter.formatCellValue(titleRow.getCell(1));//学号
+                    if (!cardNo.equals("学号")) {
+                        return CommonResult.fail("导入数据第二列为学号");
                     }
-                    String schoolClass = dataFormatter.formatCellValue(row.getCell(2));//班级
+                    String schoolClass = dataFormatter.formatCellValue(titleRow.getCell(2));//班级
                     if (!schoolClass.equals("班级")) {
                         return CommonResult.fail("导入数据第三列为班级");
                     }
-                    String subject = dataFormatter.formatCellValue(row.getCell(3));//学科
-                    if (!subject.equals("学科")) {
-                        return CommonResult.fail("导入数据第四列为学科");
+                    String grade = dataFormatter.formatCellValue(titleRow.getCell(3));//年级
+                    if (!grade.equals("年级")) {
+                        return CommonResult.fail("导入数据第四列为年级");
                     }
-                    String examType = dataFormatter.formatCellValue(row.getCell(4));//考试类型
+                    String examType = dataFormatter.formatCellValue(titleRow.getCell(4));//考试类型
                     if (!examType.equals("考试类型")) {
-                        return CommonResult.fail("导入数据第四列为考试类型");
-                    }
-                    String name = dataFormatter.formatCellValue(row.getCell(5));//姓名
-                    if (!name.equals("姓名")) {
-                        return CommonResult.fail("导入数据第四列为姓名");
-                    }
-                    String cardNo = dataFormatter.formatCellValue(row.getCell(6));//学号
-                    if (!cardNo.equals("学号")) {
-                        return CommonResult.fail("导入数据第四列为学号");
-                    }
-                    String score = dataFormatter.formatCellValue(row.getCell(7));//成绩
-                    if (!score.equals("成绩")) {
-                        return CommonResult.fail("导入数据第四列为成绩");
+                        return CommonResult.fail("导入数据第五列为考试类型");
                     }
-                } else {
-                    SmartScore data = new SmartScore();
-                    String semester = dataFormatter.formatCellValue(row.getCell(0));//学期
-                    String grade = dataFormatter.formatCellValue(row.getCell(1));//年级
-                    String schoolClass = dataFormatter.formatCellValue(row.getCell(2));//班级
-                    String subject = dataFormatter.formatCellValue(row.getCell(3));//学科
-                    String examType = dataFormatter.formatCellValue(row.getCell(4));//考试类型
-                    String name = dataFormatter.formatCellValue(row.getCell(5));//姓名
-                    String cardNo = dataFormatter.formatCellValue(row.getCell(6));//学号
-                    String score = dataFormatter.formatCellValue(row.getCell(7));//成绩
-
-                    SmartSemester semesterStr = smartSemesterService.querySemesterByName(semester);
-                    if (semesterStr == null) {
-                        return CommonResult.fail(semester + "学期数据无效,导入失败!");
+                    String semester = dataFormatter.formatCellValue(titleRow.getCell(5));//学期
+                    if (!semester.equals("学期")) {
+                        return CommonResult.fail("导入数据第六列为学期");
                     }
+                } else if (rowNum > 2) {
 
-                    //数据重复性判断 学期 + 学号 + 科目
-                    String existData = semester + cardNo + subject;
-                    scoreNames.add(existData);
-                    if (scoreNames.stream().distinct().count() != scoreNames.size()) {
-                        return CommonResult.fail("导入的Excel中的" + existData + "存在重复数据");
-                    }
+                    String name = dataFormatter.formatCellValue(row.getCell(0));//姓名
+                    String cardNo = dataFormatter.formatCellValue(row.getCell(1));//学号
 
-                    //重复数据提示
-                    long exist = scores.stream().filter(e -> e.getSemester().equals(semester) && e.getCardNo().equals(cardNo) && e.getSubjectId().equals(eSubjectStatu.integerOf(subject))).count();
-                    if (exist > 0) {
-                        return CommonResult.fail(existData + "成绩数据在系统中已存在,请勿重复导入");
+                    Optional<SmartUser> user = users.stream().filter(e -> e.getCardNo().equals(cardNo)).findFirst();
+                    if (!(user != null && user.isPresent())) {
+                        return CommonResult.fail("当前系统中不存在" + name + "的学生信息,无法导入成绩");
                     }
+                    Integer userId = user.get().getId();
 
-                    data.setSemester(semester);
-                    data.setSemesterId(semesterStr.getId());
-                    data.setGrade(grade);
+                    String grade = dataFormatter.formatCellValue(row.getCell(3));//年级
                     Optional<SmartGrade> nowGrade = grades.stream().filter(e -> e.getName().equals(grade)).findFirst();
                     if (!(nowGrade != null && nowGrade.isPresent())) {
                         return CommonResult.fail(name + "的年级数据失效,导入失败");
                     }
-                    data.setGradeId(nowGrade.get().getId());
+                    Integer gradeId = nowGrade.get().getId();
 
+                    String schoolClass = dataFormatter.formatCellValue(row.getCell(2));//班级
                     Optional<SmartClass> nowClass = classes.stream().filter(e -> e.getName().equals(schoolClass)).findFirst();
                     if (!(nowClass != null && nowClass.isPresent())) {
                         return CommonResult.fail(name + "的班级数据失效,导入失败");
                     }
-                    data.setSchoolClassId(nowClass.get().getId());
-                    data.setSchoolClass(schoolClass);
-                    data.setCardNo(cardNo);
-                    data.setName(name);
-                    Optional<SmartUser> user = users.stream().filter(e -> e.getCardNo().equals(cardNo)).findFirst();
-                    if (user != null && user.isPresent()) {
-                        data.setUserId(user.get().getId());
-                    } else {
-                        return CommonResult.fail("当前系统中不存在" + name + "的学生信息,无法导入成绩");
+                    Integer schoolClassId = nowClass.get().getId();
+
+                    String examType = dataFormatter.formatCellValue(row.getCell(4));//考试类型
+                    Optional<SmartExamtype> examtype = examtypes.stream().filter(e -> e.getGradeId().equals(gradeId) && e.getName().equals(examType)).findFirst();
+                    if (!(examtype != null && examtype.isPresent())) {
+                        return CommonResult.fail(name + "的考试类型数据失效,导入失败");
                     }
-                    data.setSubjectId(eSubjectStatu.integerOf(subject));
-                    data.setExamType(eExamType.integerOf(examType));
-                    data.setScore(Double.valueOf(score));
+                    Integer examTypeId = examtype.get().getId();
 
-                    result.add(data);
+                    String semesterStr = dataFormatter.formatCellValue(row.getCell(5));//学期
+                    Optional<SmartSemester> semester = semesters.stream().filter(e -> e.getName().equals(semesterStr)).findFirst();
+                    if (!(semester != null && semester.isPresent())) {
+                        return CommonResult.fail(name + "的学期数据失效,导入失败");
+                    }
+                    Integer semesterId = semester.get().getId();
+
+                    int sds = titleRow.getLastCellNum();
+                    for (int i = 6; i < titleRow.getLastCellNum(); i++) {
+                        String score = dataFormatter.formatCellValue(row.getCell(i));//成绩
+                        if (StringUtils.hasText(score)) {
+                            String subjectStr = dataFormatter.formatCellValue(titleRow.getCell(i));//科目
+                            Optional<SmartSubject> subject = subjects.stream().filter(e -> e.getName().equals(subjectStr)).findFirst();
+                            if (subject != null && subject.isPresent()) {
+                                //数据重复性判断 学期 + 学号 + 科目
+                                String existData = semester + cardNo + subject;
+                                scoreNames.add(existData);
+                                if (scoreNames.stream().distinct().count() != scoreNames.size()) {
+                                    return CommonResult.fail("导入的Excel中的" + existData + "存在重复数据");
+                                }
+                                //重复数据提示
+                                long exist = scores.stream().filter(e -> e.getSemester().equals(semester) && e.getCardNo().equals(cardNo) && e.getSubjectId().equals(subject.get().getId())).count();
+                                if (exist > 0) {
+                                    return CommonResult.fail(existData + "成绩数据在系统中已存在,请勿重复导入");
+                                }
+                                SmartScore data = new SmartScore();
+                                data.setSemesterId(semesterId);
+                                data.setSemester(semesterStr);
+                                data.setGradeId(gradeId);
+                                data.setGrade(grade);
+                                data.setSchoolClassId(schoolClassId);
+                                data.setSchoolClass(schoolClass);
+                                data.setCardNo(cardNo);
+                                data.setName(name);
+                                data.setUserId(userId);
+                                data.setSubjectId(subject.get().getId());
+                                data.setExamType(examTypeId);
+                                data.setScore(Double.valueOf(score));
+                                result.add(data);
+                            } else {
+                                return CommonResult.fail(subjectStr + "科目数据在系统中不存在,导入失败");
+                            }
+                        }
+                    }
                 }
             }
         } catch (Exception e) {

+ 0 - 3
src/main/java/com/template/model/pojo/SmartScore.java

@@ -57,9 +57,6 @@ public class SmartScore implements Serializable {
     @ApiModelProperty(value = "卡号")
     private String cardNo;
 
-    @ApiModelProperty(value = "考号")
-    private String candidate;
-
     @ApiModelProperty(value = "名称")
     private String name;
 

+ 1 - 1
target/classes/mapper/template/SmartAuthorGroupMapper.xml

@@ -38,6 +38,6 @@
     <select id="getSmartAuthorGroupManager" resultType="com.template.model.pojo.SmartAuthorGroupManager" resultMap="smartAuthorGroupManager">
         select a.`id`,a.`group_id`,a.`user_id`,b.card_no,b.`name` as user_name,a.`department_manage`,a.`department_view`
             from `smart_authority` a left join `smart_user` b on a.`user_id`=b.id
-            where group_id=#{groupId}
+            where group_id=#{groupId} and a.deleted=0 and b.deleted=0
     </select>
 </mapper>