Browse Source

教职工信息相关信息导入

大数据与最优化研究所 6 months ago
parent
commit
a0de809dd0

+ 11 - 0
src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java

@@ -254,6 +254,7 @@ public class BaseClassCourseController {
         List<BaseClassCourse> baseClassCourses = new ArrayList<>();
         List<String> duplicateLogs = new ArrayList<>();
         List<String> errorLogs = new ArrayList<>();
+        // 班级数据
         List<BaseClass> classList = classService.list(new QueryWrapper<BaseClass>());
         Map<String, Long> classMap = new HashMap<>();
         for (BaseClass baseClass : classList) {
@@ -262,6 +263,7 @@ public class BaseClassCourseController {
         if (ObjectUtils.isEmpty(classMap)) {
             throw new MyException("系统中还没有维护班级数据");
         }
+        // 课程数据
         List<BaseCourseSubject> courseSubjectList = subjectService.list(new QueryWrapper<BaseCourseSubject>());
         Map<String, Long> courseSubjectMap = new HashMap<>();
         for (BaseCourseSubject baseCourseSubject : courseSubjectList) {
@@ -270,6 +272,7 @@ public class BaseClassCourseController {
         if (ObjectUtils.isEmpty(courseSubjectMap)) {
             throw new MyException("系统中还没有维护课程学科数据");
         }
+        // 教材数据
         List<Textbook> textbookList = textbookService.list(new QueryWrapper<Textbook>());
         Map<String, Long> textbookMap = new HashMap<>();
         for (Textbook textbook : textbookList) {
@@ -278,6 +281,7 @@ public class BaseClassCourseController {
         if (ObjectUtils.isEmpty(textbookMap)) {
             throw new MyException("系统中还没有维护教材数据");
         }
+        //学期数据
         List<BaseSemester> semesterList = semesterService.list(new QueryWrapper<BaseSemester>());
         Map<String, Long> semesterMap = new HashMap<>();
         for (BaseSemester baseSemester : semesterList) {
@@ -342,6 +346,7 @@ public class BaseClassCourseController {
                 baseClassAdminCourse.setClassId(classId);
                 baseClassAdminCourse.setBaseSemesterId(baseSemesterId);
                 baseClassAdminCourseMapper.insert(baseClassAdminCourse);
+                classAdminCourseId = baseClassAdminCourse.getId();
                 classSemester.put(newClassSemester, baseClassAdminCourse.getId());
             }
 
@@ -351,11 +356,17 @@ public class BaseClassCourseController {
             Long textbookId = null;
             if (ObjectUtils.isNotEmpty(vo.getCourseName())) {
                 courseId = courseSubjectMap.get(vo.getCourseName());
+                if (ObjectUtils.isEmpty(courseId)) {
+                    throw new MyException("第" + (i + 4) + "行数据的课程信息不存在于系统中");
+                }
                 baseClassCourse.setCourseId(courseId);
             }
 
             if (ObjectUtils.isNotEmpty(vo.getTextbookName())) {
                 textbookId = textbookMap.get(vo.getTextbookName());
+                if (ObjectUtils.isEmpty(textbookId)) {
+                    throw new MyException("第" + (i + 4) + "行数据的教材信息不存在于系统中");
+                }
                 baseClassCourse.setTextbookId(textbookId);
             }
 

+ 46 - 3
src/main/java/com/xjrsoft/module/base/controller/BaseCourseSubjectController.java

@@ -9,6 +9,7 @@ import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.annotation.XjrLog;
+import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
@@ -17,9 +18,11 @@ import com.xjrsoft.module.base.dto.AddBaseCourseSubjectDto;
 import com.xjrsoft.module.base.dto.BaseCourseSubjectPageDto;
 import com.xjrsoft.module.base.dto.UpdateBaseCourseSubjectDto;
 import com.xjrsoft.module.base.entity.BaseCourseSubject;
+import com.xjrsoft.module.base.entity.CourseSubjectDetail;
 import com.xjrsoft.module.base.service.IBaseCourseSubjectService;
 import com.xjrsoft.module.base.vo.BaseCourseSubjectPageVo;
 import com.xjrsoft.module.base.vo.BaseCourseSubjectVo;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -64,12 +67,52 @@ public class BaseCourseSubjectController {
 
         MPJLambdaWrapper<BaseCourseSubject> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper
-                .orderByDesc(BaseCourseSubject::getId)
+                .disableSubLogicDel()
                 .select(BaseCourseSubject::getId)
                 .select(BaseCourseSubject.class, x -> VoToColumnUtil.fieldsToColumns(BaseCourseSubjectPageVo.class).contains(x.getProperty()))
+                .leftJoin(CourseSubjectDetail.class, CourseSubjectDetail::getBaseCourseSubjectId, BaseCourseSubject::getId)
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, CourseSubjectDetail::getCourseCategory,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, BaseCourseSubjectPageVo::getCourseCategoryCn)
+                        )
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, CourseSubjectDetail::getCourseNature,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, BaseCourseSubjectPageVo::getCourseNatureCn)
+                )
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, CourseSubjectDetail::getCourseNature,
+                wrapper -> wrapper
+                        .selectAs(DictionaryDetail::getName, BaseCourseSubjectPageVo::getCourseNatureCn)
+                )
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, CourseSubjectDetail::getCourseAttribute,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, BaseCourseSubjectPageVo::getCourseAttributeCn)
+                )
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, CourseSubjectDetail::getCourseType,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, BaseCourseSubjectPageVo::getCourseTypeCn)
+                )
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, CourseSubjectDetail::getSubjectQuality,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, BaseCourseSubjectPageVo::getSubjectQualityCn)
+                )
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, CourseSubjectDetail::getCoreCourse,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, BaseCourseSubjectPageVo::getCoreCourseCn)
+                )
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, CourseSubjectDetail::getOnlineCourse,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, BaseCourseSubjectPageVo::getOnlineCourseCn)
+                )
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, CourseSubjectDetail::getIdeologyDemo,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, BaseCourseSubjectPageVo::getIdeologyDemoCn)
+                )
                 .like(StrUtil.isNotEmpty(dto.getName()), BaseCourseSubject::getName, dto.getName())
-                .like(StrUtil.isNotEmpty(dto.getCode()), BaseCourseSubject::getCode, dto.getCode());
-        IPage<BaseCourseSubject> page = baseCourseSubjectService.page(ConventPage.getPage(dto), queryWrapper);
+                .like(StrUtil.isNotEmpty(dto.getCode()), BaseCourseSubject::getCode, dto.getCode())
+                .eq(BaseCourseSubject::getDeleteMark, DeleteMark.NODELETE.getCode())
+                .orderByDesc(BaseCourseSubject::getId)
+        ;
+        IPage<BaseCourseSubjectPageVo> page = baseCourseSubjectService.selectJoinListPage(ConventPage.getPage(dto), BaseCourseSubjectPageVo.class, queryWrapper);
         PageOutput<BaseCourseSubjectPageVo> pageOutput = ConventPage.getPageOutput(page, BaseCourseSubjectPageVo.class);
         return RT.ok(pageOutput);
     }

+ 0 - 2
src/main/java/com/xjrsoft/module/base/entity/CourseSubjectDetail.java

@@ -164,6 +164,4 @@ public class CourseSubjectDetail implements Serializable {
      */
     @ApiModelProperty("主要开设实习项目名称")
     private String internshipName;
-
-
 }

+ 8 - 1
src/main/java/com/xjrsoft/module/base/service/impl/BaseCourseSubjectServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.base.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.xjrsoft.module.base.entity.BaseCourseSubject;
@@ -11,6 +12,7 @@ import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -35,6 +37,8 @@ public class BaseCourseSubjectServiceImpl extends MPJBaseServiceImpl<BaseCourseS
         baseCourseSubjectBaseCourseSubjectMapper.insert(baseCourseSubject);
         for (CourseSubjectDetail courseSubjectDetail : baseCourseSubject.getCourseSubjectDetailList()) {
             courseSubjectDetail.setBaseCourseSubjectId(baseCourseSubject.getId());
+            courseSubjectDetail.setCreateDate(new Date());
+            courseSubjectDetail.setCreateUserId(StpUtil.getLoginIdAsLong());
             baseCourseSubjectCourseSubjectDetailMapper.insert(courseSubjectDetail);
         }
 
@@ -58,12 +62,15 @@ public class BaseCourseSubjectServiceImpl extends MPJBaseServiceImpl<BaseCourseS
             for (CourseSubjectDetail courseSubjectDetail : baseCourseSubject.getCourseSubjectDetailList()) {
                 //如果不等于空则修改
                 if (courseSubjectDetail.getId() != null) {
+                    courseSubjectDetail.setCreateDate(new Date());
+                    courseSubjectDetail.setCreateUserId(StpUtil.getLoginIdAsLong());
                     baseCourseSubjectCourseSubjectDetailMapper.updateById(courseSubjectDetail);
                 }
                 //如果等于空 则新增
                 else {
-                    //已经不存在的id 删除
                     courseSubjectDetail.setBaseCourseSubjectId(baseCourseSubject.getId());
+                    courseSubjectDetail.setCreateDate(new Date());
+                    courseSubjectDetail.setCreateUserId(StpUtil.getLoginIdAsLong());
                     baseCourseSubjectCourseSubjectDetailMapper.insert(courseSubjectDetail);
                 }
             }

+ 101 - 43
src/main/java/com/xjrsoft/module/base/vo/BaseCourseSubjectPageVo.java

@@ -23,13 +23,6 @@ public class BaseCourseSubjectPageVo {
     @ExcelProperty("主键")
     @ApiModelProperty("主键")
     private String id;
-    /**
-     * 创建人
-     */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("创建人")
-    @ApiModelProperty("创建人")
-    private Long createUserId;
     /**
      * 创建时间
      */
@@ -37,34 +30,6 @@ public class BaseCourseSubjectPageVo {
     @ExcelProperty("创建时间")
     @ApiModelProperty("创建时间")
     private Date createDate;
-    /**
-     * 修改人
-     */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("修改人")
-    @ApiModelProperty("修改人")
-    private Long modifyUserId;
-    /**
-     * 修改时间
-     */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("修改时间")
-    @ApiModelProperty("修改时间")
-    private Date modifyDate;
-    /**
-     * 删除标记
-     */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("删除标记")
-    @ApiModelProperty("删除标记")
-    private Integer deleteMark;
-    /**
-     * 有效标志
-     */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("有效标志")
-    @ApiModelProperty("有效标志")
-    private Integer enabledMark;
     /**
      * 课程学科名称
      */
@@ -79,13 +44,6 @@ public class BaseCourseSubjectPageVo {
     @ExcelProperty("课程学科代码")
     @ApiModelProperty("课程学科代码")
     private String code;
-    /**
-     * 备注
-     */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("备注")
-    @ApiModelProperty("备注")
-    private String remark;
     /**
      * 标签id(base_label)
      */
@@ -93,5 +51,105 @@ public class BaseCourseSubjectPageVo {
     @ExcelProperty("标签id(base_label)")
     @ApiModelProperty("标签id(base_label)")
     private Long baseLabelId;
-
+    /**
+     * 课程类别
+     */
+    @ApiModelProperty("课程类别")
+    private String courseCategory;
+    @ApiModelProperty("课程类别")
+    private String courseCategoryCn;
+    /**
+     * 课程性质
+     */
+    @ApiModelProperty("课程性质")
+    private String courseNature;
+    @ApiModelProperty("课程性质")
+    private String courseNatureCn;
+    /**
+     * 课程属性
+     */
+    @ApiModelProperty("课程属性")
+    private String courseAttribute;
+    @ApiModelProperty("课程属性")
+    private String courseAttributeCn;
+    /**
+     * 课程分类
+     */
+    @ApiModelProperty("课程分类")
+    private String courseType;
+    @ApiModelProperty("课程分类")
+    private String courseTypeCn;
+    /**
+     * 学科类别
+     */
+    @ApiModelProperty("学科类别")
+    private String subjectQuality;
+    @ApiModelProperty("学科类别")
+    private String subjectQualityCn;
+    /**
+     * 是否专业核心课程
+     */
+    @ApiModelProperty("是否专业核心课程")
+    private String coreCourse;
+    @ApiModelProperty("是否专业核心课程")
+    private String coreCourseCn;
+    /**
+     * 理论教学时数
+     */
+    @ApiModelProperty("理论教学时数")
+    private Integer theoryTime;
+    /**
+     * 实践教学时数
+     */
+    @ApiModelProperty("实践教学时数")
+    private Integer practiceTime;
+    /**
+     * 是否有线上课程
+     */
+    @ApiModelProperty("是否有线上课程")
+    private String onlineCourse;
+    @ApiModelProperty("是否有线上课程")
+    private String onlineCourseCn;
+    /**
+     * 线上课程网址
+     */
+    @ApiModelProperty("线上课程网址")
+    private String courseUrl;
+    /**
+     * 是否思政示范课程
+     */
+    @ApiModelProperty("是否思政示范课程")
+    private String ideologyDemo;
+    @ApiModelProperty("是否思政示范课程")
+    private String ideologyDemoCn;
+    /**
+     * 课堂教学设计主要选用课程资源
+     */
+    @ApiModelProperty("课堂教学设计主要选用课程资源")
+    private String courseResource;
+    /**
+     * 虚拟仿真实训课时数
+     */
+    @ApiModelProperty("虚拟仿真实训课时数")
+    private Integer emulationTime;
+    /**
+     * 主要开设虚拟仿真实训项目名称
+     */
+    @ApiModelProperty("主要开设虚拟仿真实训项目名称")
+    private String emulationName;
+    /**
+     * 主要开设实验项目名称
+     */
+    @ApiModelProperty("主要开设实验项目名称")
+    private String experimentName;
+    /**
+     * 主要开设实训项目名称
+     */
+    @ApiModelProperty("主要开设实训项目名称")
+    private String trainingName;
+    /**
+     * 主要开设实习项目名称
+     */
+    @ApiModelProperty("主要开设实习项目名称")
+    private String internshipName;
 }

+ 0 - 1
src/main/java/com/xjrsoft/module/veb/controller/ImportRubAndHandController.java

@@ -75,5 +75,4 @@ public class ImportRubAndHandController {
         ByteArrayOutputStream bot = ImportExcelUtil.writeTemplateSheet(obj);
         return R.fileStream(bot.toByteArray(), System.currentTimeMillis() + ExcelTypeEnum.XLSX.getValue());
     }
-
 }

+ 15 - 0
src/main/java/com/xjrsoft/module/veb/entity/InternshipPlanManage.java

@@ -75,6 +75,11 @@ public class InternshipPlanManage implements Serializable {
      */
     @ApiModelProperty("学期主键id(base_semester)")
     private Long baseSemesterId;
+    /**
+     * 学期
+     */
+    @ApiModelProperty("学期")
+    private String baseSemester;
     /**
      * 实习计划名称
      */
@@ -90,6 +95,16 @@ public class InternshipPlanManage implements Serializable {
      */
     @ApiModelProperty("实训基地主键id(school_training_base and outside_training_base)")
     private Long trainingBaseId;
+    /**
+     * 实训基地名称
+     */
+    @ApiModelProperty("实训基地名称")
+    private String trainingBaseName;
+    /**
+     * 实训基地编号
+     */
+    @ApiModelProperty("实训基地编号")
+    private String trainingBaseNumber;
     /**
      * 实习去向
      */

+ 63 - 26
src/main/java/com/xjrsoft/module/veb/service/impl/ImportRubAndHandServiceImpl.java

@@ -1,9 +1,11 @@
 package com.xjrsoft.module.veb.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.IdUtil;
 import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.module.base.entity.*;
 import com.xjrsoft.module.base.mapper.*;
@@ -29,11 +31,9 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static com.xjrsoft.module.veb.util.ImportExcelUtil.*;
 
@@ -99,6 +99,8 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
             courseSubject.setId(id);
             courseSubject.setName(dto.getName());
             courseSubject.setCode(dto.getCode());
+            courseSubject.setCreateDate(new Date());
+            courseSubject.setCreateUserId(StpUtil.getLoginIdAsLong());
             baseCourseSubjects.add(courseSubject);
 
             CourseSubjectDetail courseSubjectDetail = BeanUtil.toBean(dto, CourseSubjectDetail.class);
@@ -168,6 +170,9 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
 
             // 布尔类型
 
+            courseSubjectDetail.setCreateDate(new Date());
+            courseSubjectDetail.setCreateUserId(StpUtil.getLoginIdAsLong());
+
             courseSubjectDetails.add(courseSubjectDetail);
         }
 
@@ -214,6 +219,8 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
         Map<String, Long> baseSemesterMap = baseSemesters.stream()
                 .collect(Collectors.toMap(BaseSemester::getName, BaseSemester::getId, (o1, o2) -> o1));
 
+        // 实训基地
+        // 校内实训基地
         List<TrainingSchool> trainingSchools = trainingSchoolMapper.selectList(
                 Wrappers
                         .lambdaQuery(TrainingSchool.class)
@@ -221,7 +228,10 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
         );
         Map<String, Long> trainingSchoolMap = trainingSchools.stream()
                 .collect(Collectors.toMap(TrainingSchool::getTrainingName, TrainingSchool::getId, (o1, o2) -> o1));
+        Map<String, String> trainingSchoolNumberMap = trainingSchools.stream()
+                .collect(Collectors.toMap(TrainingSchool::getTrainingName, TrainingSchool::getTrainingNumber, (o1, o2) -> o1));
 
+        // 校外实训基地
         List<TrainingOutside> trainingOutsides = trainingOutsideMapper.selectList(
                 Wrappers
                         .lambdaQuery(TrainingOutside.class)
@@ -229,6 +239,24 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
         );
         Map<String, Long> trainingOutsideMap = trainingOutsides.stream()
                 .collect(Collectors.toMap(TrainingOutside::getTrainingName, TrainingOutside::getId, (o1, o2) -> o1));
+        Map<String, String> trainingOutsideNumberMap = trainingOutsides.stream()
+                .collect(Collectors.toMap(TrainingOutside::getTrainingName, TrainingOutside::getTrainingNumber, (o1, o2) -> o1));
+        // 实训基地合集
+        Map<String, Long> trainingMap = Stream.of(trainingSchoolMap, trainingOutsideMap)
+                .flatMap(map -> map.entrySet().stream())
+                .collect(Collectors.toMap(
+                        Map.Entry::getKey,
+                        Map.Entry::getValue,
+                        (oldVal, newVal) -> newVal // 用新值覆盖旧值
+                ));
+
+        Map<String, String> trainingNumberMap = Stream.of(trainingSchoolNumberMap, trainingOutsideNumberMap)
+                .flatMap(map -> map.entrySet().stream())
+                .collect(Collectors.toMap(
+                        Map.Entry::getKey,
+                        Map.Entry::getValue,
+                        (oldVal, newVal) -> newVal // 用新值覆盖旧值
+                ));
 
         List<User> users = userMapper.selectList(
                 Wrappers
@@ -258,11 +286,12 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
         List<InternshipPlanManageParticipant> internshipPlanManageParticipants = new ArrayList<>();
 
         for (int i = 0; i < excelDataList.size(); i++) {
+            int row = i + 1;
             InternshipPlanImportVo vo = excelDataList.get(i);
 
             if (isRequiredFieldsFilled(vo,
                     sb,
-                    i)) {
+                    row)) {
                 return sb.toString();
             }
 
@@ -282,7 +311,7 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         baseSemesterMap,
                         internshipPlanManage::setBaseSemesterId,
                         sb,
-                        i
+                        row
                 )) {
                     return sb.toString();
                 }
@@ -293,24 +322,26 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         dictionary,
                         internshipPlanManage::setInternshipPlanType,
                         sb,
-                        i)) {
+                        row)) {
                     return sb.toString();
                 }
 
                 if (validateAndSetString2LongField(vo::getTrainingBaseName,
                         "实训基地名称",
-                        trainingSchoolMap,
+                        trainingMap,
                         internshipPlanManage::setTrainingBaseId,
                         sb,
-                        i
-                ) && (validateAndSetString2LongField(vo::getTrainingBaseName,
+                        row)
+                ) {
+                    return sb.toString();
+                }
+
+                if (validateAndSetString2StringField(vo::getTrainingBaseName,
                         "实训基地名称",
-                        trainingOutsideMap,
-                        internshipPlanManage::setTrainingBaseId,
+                        trainingNumberMap,
+                        internshipPlanManage::setTrainingBaseNumber,
                         sb,
-                        i
-                )
-                )
+                        row)
                 ) {
                     return sb.toString();
                 }
@@ -321,7 +352,7 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         dictionary,
                         internshipPlanManage::setInsurancePurchaser,
                         sb,
-                        i)) {
+                        row)) {
                     return sb.toString();
                 }
 
@@ -331,7 +362,7 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         dictionary,
                         internshipPlanManage::setInternshipWhereabouts,
                         sb,
-                        i)) {
+                        row)) {
                     return sb.toString();
                 }
 
@@ -341,7 +372,7 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         dictionary,
                         internshipPlanManage::setInsuranceType,
                         sb,
-                        i)) {
+                        row)) {
                     return sb.toString();
                 }
 
@@ -351,7 +382,7 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         dictionary,
                         internshipPlanManage::setInsuranceType,
                         sb,
-                        i)) {
+                        row)) {
                     return sb.toString();
                 }
 
@@ -361,7 +392,7 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         dictionary,
                         internshipPlanManage::setInternshipSiteType,
                         sb,
-                        i)) {
+                        row)) {
                     return sb.toString();
                 }
 
@@ -371,7 +402,7 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         dictionary,
                         internshipPlanManage::setInternshipUnitSource,
                         sb,
-                        i)) {
+                        row)) {
                     return sb.toString();
                 }
 
@@ -381,7 +412,7 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         dictionary,
                         internshipPlanManage::setLodgingPlan,
                         sb,
-                        i)) {
+                        row)) {
                     return sb.toString();
                 }
 
@@ -391,9 +422,11 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                         dictionary,
                         internshipPlanManage::setProfessionalRelevanceEnterprise,
                         sb,
-                        i)) {
+                        row)) {
                     return sb.toString();
                 }
+                internshipPlanManage.setCreateDate(new Date());
+                internshipPlanManage.setCreateUserId(StpUtil.getLoginIdAsLong());
                 internshipPlanManageMap.put(key, internshipPlanManage);
             } else {
                 InternshipPlanManage internshipPlanManage = internshipPlanManageMap.get(key);
@@ -408,28 +441,32 @@ public class ImportRubAndHandServiceImpl implements ImportRubAndHandService {
                     userMap,
                     internshipPlanManageParticipant::setParticipantUserId,
                     sb,
-                    i
+                    row
             )) {
                 return sb.toString();
             }
+
             if (validateAndSetString2LongField(vo::getBaseMajorName,
                     "所属专业名称",
                     baseMajorMap,
                     internshipPlanManageParticipant::setBaseMajorId,
                     sb,
-                    i
+                    row
             )) {
                 return sb.toString();
             }
+
             if (validateAndSetString2LongField(vo::getClassName,
                     "班级名称",
                     baseClassMap,
                     internshipPlanManageParticipant::setClassId,
                     sb,
-                    i
+                    row
             )) {
                 return sb.toString();
             }
+            internshipPlanManageParticipant.setCreateDate(new Date());
+            internshipPlanManageParticipant.setCreateUserId(StpUtil.getLoginIdAsLong());
             internshipPlanManageParticipants.add(internshipPlanManageParticipant);
         }
 

+ 34 - 0
src/main/java/com/xjrsoft/module/veb/util/ImportExcelUtil.java

@@ -406,6 +406,40 @@ public class ImportExcelUtil {
         return false; // 字段为空,不进行验证
     }
 
+    /**
+     * 验证子表字段值的合理性并转换为对应的值
+     *
+     * @param getter
+     * @param fieldName
+     * @param string2String
+     * @param setter
+     * @param sb
+     * @param i
+     * @return
+     */
+    public static boolean validateAndSetString2StringField(Supplier<String> getter,
+                                                         String fieldName,
+                                                         Map<String, String> string2String,
+                                                         Consumer<String> setter,
+                                                         StringBuilder sb, int i) {
+        String value = getter.get();
+        if (value != null && !value.trim().isEmpty()) {
+            String sublistValue = string2String.get(value);
+            if (sublistValue != null) {
+                setter.accept(sublistValue);
+                return false;
+            } else {
+                sb.append("第");
+                sb.append(i);
+                sb.append("行的");
+                sb.append(fieldName);
+                sb.append("列的值不存在于系统对应基础数据中,请到基础数据维护");
+                return true;
+            }
+        }
+        return false; // 字段为空,不进行验证
+    }
+
     /**
      * 验证boolean值的合理性并转换为数值
      *

+ 6 - 6
src/main/java/com/xjrsoft/module/veb/vo/BaseCourseSubjectImportVo.java

@@ -108,7 +108,7 @@ public class BaseCourseSubjectImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("线上课程网址")
     @ApiModelProperty("线上课程网址")
-    @Required
+    @Required(value = false)
     private String courseUrl;
     /**
      * 是否思政示范课程
@@ -124,7 +124,7 @@ public class BaseCourseSubjectImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("课堂教学设计主要选用课程资源")
     @ApiModelProperty("课堂教学设计主要选用课程资源")
-    @Required
+    @Required(value = false)
     private String courseResource;
     /**
      * 虚拟仿真实训课时数
@@ -140,7 +140,7 @@ public class BaseCourseSubjectImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("主要开设虚拟仿真实训项目名称")
     @ApiModelProperty("主要开设虚拟仿真实训项目名称")
-    @Required
+    @Required(value = false)
     private String emulationName;
     /**
      * 主要开设实验项目名称
@@ -148,7 +148,7 @@ public class BaseCourseSubjectImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("主要开设实验项目名称")
     @ApiModelProperty("主要开设实验项目名称")
-    @Required
+    @Required(value = false)
     private String experimentName;
     /**
      * 主要开设实训项目名称
@@ -156,7 +156,7 @@ public class BaseCourseSubjectImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("主要开设实训项目名称")
     @ApiModelProperty("主要开设实训项目名称")
-    @Required
+    @Required(value = false)
     private String trainingName;
     /**
      * 主要开设实习项目名称
@@ -164,6 +164,6 @@ public class BaseCourseSubjectImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("主要开设实习项目名称")
     @ApiModelProperty("主要开设实习项目名称")
-    @Required
+    @Required(value = false)
     private String internshipName;
 }

+ 43 - 0
src/main/resources/sqlScript/鸿合提供数据视图.sql

@@ -0,0 +1,43 @@
+# 班级信息
+DROP VIEW IF EXISTS hh_class_view;
+create view hh_class_view as
+(
+select t.id         as class_id,
+       t.name       as class_name,
+       t.teacher_id as teacher_id,
+       t1.name      as teacher_name
+from base_class t
+         inner join xjr_user t1 on t1.id = t.teacher_id
+where t.delete_mark = 0
+  and t.is_graduate = 1
+    );
+
+# 教师信息
+DROP VIEW IF EXISTS hh_teacher_view;
+create view hh_teacher_view as
+(
+select t.id         as user_id,
+       t.name       as name,
+       t.mobile as mobile
+from  xjr_user t
+         inner join xjr_user_role_relation t1 on t1.user_id = t.id
+where t.delete_mark = 0
+  and t1.role_id = 2
+    );
+
+# 地点信息
+DROP VIEW IF EXISTS hh_area_view;
+create view hh_area_view as
+(
+select
+        CAST(ROW_NUMBER() OVER (ORDER BY t1.id) AS SIGNED) as id,
+       concat(t2.name,t.name) as name,
+       t1.id as class_id
+from base_classroom t
+         inner join base_class t1 on t1.classroom_id = t.id
+         inner join base_office_build t2 on t2.id = t.office_build_id
+where t.delete_mark = 0
+  and t1.delete_mark = 0
+  and t1.is_graduate = 1
+    );
+