Ver Fonte

课表课时统计

dzx há 1 ano atrás
pai
commit
e391f55096

+ 2 - 1
src/main/java/com/xjrsoft/module/classtime/controller/CourseClassTimeStatisticsController.java

@@ -206,7 +206,8 @@ public class CourseClassTimeStatisticsController {
     @ApiOperation(value = "导入")
     @SaCheckPermission("classtimestatistics:detail")
     public RT<Boolean> importData(@RequestParam Long classTimeStatisticsId, @RequestParam MultipartFile file) throws IOException {
-        return null;
+        Boolean aBoolean = classTimeStatisticsService.importAdministration(classTimeStatisticsId, file);
+        return RT.ok(aBoolean);
     }
 
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/classtime/service/IClassTimeStatisticsService.java

@@ -6,6 +6,7 @@ import com.xjrsoft.module.classtime.entity.ClassTimeStatistics;
 import com.xjrsoft.module.classtime.vo.ClassTimeStatisticsRecordVo;
 import com.xjrsoft.module.classtime.vo.CourseClassTimeStatisticsRecordVo;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.util.List;
@@ -80,4 +81,6 @@ public interface IClassTimeStatisticsService extends MPJBaseService<ClassTimeSta
 
 
     Boolean refreshCourseRecord(ClassTimeStatistics statistics);
+
+    Boolean importAdministration(Long classTimeStatisticsId, MultipartFile file) throws IOException;
 }

+ 51 - 0
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImpl.java

@@ -2,9 +2,11 @@ package com.xjrsoft.module.classtime.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
@@ -16,6 +18,7 @@ import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.classtime.dto.AddClassTimeStatisticsDto;
 import com.xjrsoft.module.classtime.entity.ClassTimeDelete;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatistics;
@@ -34,8 +37,12 @@ import com.xjrsoft.module.classtime.vo.CourseListVo;
 import com.xjrsoft.module.classtime.vo.TeacherListVo;
 import com.xjrsoft.module.classtime.vo.WeekTimeRangeVo;
 import com.xjrsoft.module.oa.entity.WfTeacherCourseTime;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.system.service.IDictionarydetailService;
+import com.xjrsoft.module.teacher.entity.BaseTeacher;
+import com.xjrsoft.module.teacher.entity.XjrUser;
 import lombok.AllArgsConstructor;
 import me.zhyd.oauth.log.Log;
 import org.apache.poi.ss.usermodel.Cell;
@@ -50,8 +57,10 @@ import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.DayOfWeek;
@@ -88,6 +97,8 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
 
     private final ClassTimeStatisticsAdministrationMapper administrationMapper;
 
+    private final IUserService userService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean add(ClassTimeStatistics classTimeStatistics) {
@@ -891,6 +902,46 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
         return true;
     }
 
+    @Override
+    public Boolean importAdministration(Long classTimeStatisticsId, MultipartFile file) throws IOException {
+        try {
+            List<Map<Integer, Object>> excelDataList = EasyExcel.read(file.getInputStream()).sheet().headRowNumber(2).doReadSync();
+            List<User> teacherList = userService.list(
+                    new MPJLambdaWrapper<User>()
+                            .select(User::getId)
+                            .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
+                            .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
+            );
+            List<ClassTimeStatisticsAdministration> insertList = new ArrayList<>();
+            Map<String, Long> userMap = teacherList.stream().collect(Collectors.toMap(User::getUserName, User::getId));
+            for (Map<Integer, Object> rowData : excelDataList) {
+                String userName = rowData.get(1).toString();
+                ClassTimeStatisticsAdministration data = new ClassTimeStatisticsAdministration(){{
+                    setClassTimeStatisticsId(classTimeStatisticsId);
+                    setUserId(userMap.get(userName));
+                    setWorkload(Double.parseDouble(rowData.get(3).toString()));
+                }};
+                insertList.add(data);
+            }
+            if(!insertList.isEmpty()){
+                String sql = "delete from class_time_statistics_administration where class_time_statistics_id = " + classTimeStatisticsId;
+                SqlRunnerAdapter.db().delete(sql);
+                for (ClassTimeStatisticsAdministration administration : insertList) {
+                    administrationMapper.insert(administration);
+                }
+
+                CompletableFuture.runAsync(() -> {
+                    ClassTimeStatistics statistics = this.getById(classTimeStatisticsId);
+                    refreshCourseRecord(statistics);
+                });
+            }
+            return true;
+        }catch (Exception e){
+            Log.error(e.getMessage(), e);
+            throw  new MyException("导入行政工作量报错,请联系管理员");
+        }
+    }
+
     /**
      * 生成第二行表头
      * 前端固定表头:序号、工号、姓名、教研会、督导听课、临近三年退休政策、出题、阅卷、周末培优、早自习、正课(含调顶课时)、晚辅(含调顶课时)、顶课、调课