瀏覽代碼

Merge branch 'pre'

dzx 6 月之前
父節點
當前提交
b69fbb1e96
共有 31 個文件被更改,包括 618 次插入130 次删除
  1. 1 1
      src/main/java/com/xjrsoft/module/attendance/mapper/TeacherAttendanceRecordMapper.java
  2. 3 1
      src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceStatisticsServiceImpl.java
  3. 3 0
      src/main/java/com/xjrsoft/module/banding/mapper/BandingTaskClassStudentMapper.java
  4. 3 0
      src/main/java/com/xjrsoft/module/banding/service/IBandingTaskClassStudentService.java
  5. 84 14
      src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskClassStudentServiceImpl.java
  6. 31 0
      src/main/java/com/xjrsoft/module/banding/vo/SyncStudentDataListVo.java
  7. 11 0
      src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java
  8. 46 3
      src/main/java/com/xjrsoft/module/base/controller/BaseCourseSubjectController.java
  9. 0 2
      src/main/java/com/xjrsoft/module/base/entity/CourseSubjectDetail.java
  10. 8 1
      src/main/java/com/xjrsoft/module/base/service/impl/BaseCourseSubjectServiceImpl.java
  11. 101 43
      src/main/java/com/xjrsoft/module/base/vo/BaseCourseSubjectPageVo.java
  12. 5 1
      src/main/java/com/xjrsoft/module/organization/service/impl/WeChatServiceImgl.java
  13. 5 0
      src/main/java/com/xjrsoft/module/student/controller/StudentReportPlanController.java
  14. 4 0
      src/main/java/com/xjrsoft/module/student/mapper/StudentReportRecordMapper.java
  15. 115 4
      src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherbaseManagerServiceImpl.java
  16. 2 3
      src/main/java/com/xjrsoft/module/teacher/vo/CoreTeacherImportVo.java
  17. 3 2
      src/main/java/com/xjrsoft/module/teacher/vo/EvaluatorInformationImportVo.java
  18. 3 4
      src/main/java/com/xjrsoft/module/teacher/vo/FacultyContractImportVo.java
  19. 2 3
      src/main/java/com/xjrsoft/module/teacher/vo/JobInformationImportVo.java
  20. 2 3
      src/main/java/com/xjrsoft/module/teacher/vo/LanguageCompetenceImportVo.java
  21. 4 2
      src/main/java/com/xjrsoft/module/teacher/vo/OutsideAssociationsImportVo.java
  22. 7 8
      src/main/java/com/xjrsoft/module/teacher/vo/ProfessionalTitleImportVo.java
  23. 2 1
      src/main/java/com/xjrsoft/module/teacher/vo/ScientificResearchImportVo.java
  24. 2 1
      src/main/java/com/xjrsoft/module/teacher/vo/TeacherCertificationImportVo.java
  25. 0 1
      src/main/java/com/xjrsoft/module/veb/controller/ImportRubAndHandController.java
  26. 15 0
      src/main/java/com/xjrsoft/module/veb/entity/InternshipPlanManage.java
  27. 63 26
      src/main/java/com/xjrsoft/module/veb/service/impl/ImportRubAndHandServiceImpl.java
  28. 34 0
      src/main/java/com/xjrsoft/module/veb/util/ImportExcelUtil.java
  29. 6 6
      src/main/java/com/xjrsoft/module/veb/vo/BaseCourseSubjectImportVo.java
  30. 10 0
      src/main/resources/mapper/banding/BandingTaskClassStudentMapper.xml
  31. 43 0
      src/main/resources/sqlScript/鸿合提供数据视图.sql

+ 1 - 1
src/main/java/com/xjrsoft/module/attendance/mapper/TeacherAttendanceRecordMapper.java

@@ -27,6 +27,6 @@ public interface TeacherAttendanceRecordMapper extends MPJBaseMapper<TeacherAtte
 
     List<TeacherAttendanceRecord> getLeaveList(@Param("dto") WfTeacherleave dto);
 
-    @Delete("delete from teacher_attendance_record where time_interval = #{timePeriod} and attendance_date = '#{attendanceDate}'")
+    @Delete("delete from teacher_attendance_record where time_interval = #{timePeriod} and attendance_date = #{attendanceDate}")
     Boolean deleteRecord(@Param("timePeriod") Integer timePeriod, @Param("attendanceDate") String attendanceDate);
 }

+ 3 - 1
src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceStatisticsServiceImpl.java

@@ -63,6 +63,7 @@ import java.io.IOException;
 import java.text.ParseException;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
@@ -194,7 +195,8 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
 
             List<LocalDate> dateList2 = getDatesBetween(statistics.getStartDate(), statistics.getEndDate());
             LocalDateTime now = LocalDateTime.now();
-            if (dateList2.contains(now.toLocalDate())) {
+
+            if (dateList2.contains(now.toLocalDate()) && (statistics.getTimePeriod() == 1 && now.toLocalTime().isBefore(LocalTime.MIDNIGHT))) {
                 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                 String sql = "DELETE FROM teacher_attendance_record WHERE attendance_date = '" + now.toLocalDate().format(dtf) + "'" +
                         " AND time_interval = " + statistics.getTimePeriod();

+ 3 - 0
src/main/java/com/xjrsoft/module/banding/mapper/BandingTaskClassStudentMapper.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.banding.mapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.banding.dto.StudentDto;
 import com.xjrsoft.module.banding.entity.BandingTaskClassStudent;
+import com.xjrsoft.module.banding.vo.SyncStudentDataListVo;
 import com.xjrsoft.module.student.dto.BaseNewStudentPageDto;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -25,4 +26,6 @@ public interface BandingTaskClassStudentMapper extends MPJBaseMapper<BandingTask
     List<BaseNewStudentPageDto> surplusStudent(@Param("dto") StudentDto dto);
 
     List<BaseNewStudentPageDto> surplusStudentSure(@Param("dto") StudentDto dto);
+
+    List<SyncStudentDataListVo> getSyncStudentDataList(@Param("studentReportPlanId") Long studentReportPlanId);
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/banding/service/IBandingTaskClassStudentService.java

@@ -5,6 +5,7 @@ import com.xjrsoft.module.banding.dto.ChangeClassDto;
 import com.xjrsoft.module.banding.dto.StudentDto;
 import com.xjrsoft.module.banding.entity.BandingTaskClassStudent;
 import com.xjrsoft.module.student.dto.BaseNewStudentPageDto;
+import com.xjrsoft.module.student.entity.StudentReportPlan;
 
 import java.util.List;
 
@@ -54,4 +55,6 @@ public interface IBandingTaskClassStudentService extends MPJBaseService<BandingT
 
 
     Boolean insertStudent(ChangeClassDto dto);
+
+    Boolean syncStudentData(StudentReportPlan studentReportPlan);
 }

+ 84 - 14
src/main/java/com/xjrsoft/module/banding/service/impl/BandingTaskClassStudentServiceImpl.java

@@ -1,21 +1,16 @@
 package com.xjrsoft.module.banding.service.impl;
 
-import cn.dev33.satoken.secure.BCrypt;
 import cn.dev33.satoken.stp.StpUtil;
 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.xjrsoft.common.constant.GlobalConstant;
-import com.xjrsoft.common.enums.ArchivesStatusEnum;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.EnabledMark;
-import com.xjrsoft.common.enums.RoleEnum;
 import com.xjrsoft.common.exception.MyException;
-import com.xjrsoft.common.utils.LocalDateUtil;
 import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.banding.dto.ChangeClassDto;
 import com.xjrsoft.module.banding.dto.StudentDto;
 import com.xjrsoft.module.banding.entity.BandingTask;
@@ -25,6 +20,7 @@ import com.xjrsoft.module.banding.mapper.BandingTaskClassMapper;
 import com.xjrsoft.module.banding.mapper.BandingTaskClassStudentMapper;
 import com.xjrsoft.module.banding.mapper.BandingTaskMapper;
 import com.xjrsoft.module.banding.service.IBandingTaskClassStudentService;
+import com.xjrsoft.module.banding.vo.SyncStudentDataListVo;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.service.IBaseClassService;
@@ -35,29 +31,22 @@ import com.xjrsoft.module.organization.service.IUserRoleRelationService;
 import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.student.dto.BaseNewStudentPageDto;
 import com.xjrsoft.module.student.entity.BaseNewStudent;
-import com.xjrsoft.module.student.entity.BaseStudent;
-import com.xjrsoft.module.student.entity.BaseStudentFamily;
-import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.entity.StudentReportPlan;
 import com.xjrsoft.module.student.entity.StudentReportRecord;
 import com.xjrsoft.module.student.mapper.StudentReportRecordMapper;
 import com.xjrsoft.module.student.service.IBaseNewStudentService;
-import com.xjrsoft.module.student.service.IBaseStudentFamilyService;
-import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
-import com.xjrsoft.module.student.service.IBaseStudentService;
 import com.xjrsoft.module.student.service.IStudentReportPlanService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
-import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
@@ -388,4 +377,85 @@ public class BandingTaskClassStudentServiceImpl extends MPJBaseServiceImpl<Bandi
         return true;
     }
 
+    /**
+     * 同步修改学生的班级信息
+     */
+    @Override
+    @Transactional
+    public Boolean syncStudentData(StudentReportPlan studentReportPlan) {
+        //先删除所有的
+        reportRecordMapper.deleteRecordByPlanId(studentReportPlan.getId());
+        
+        //拷贝试读报到的数据过来
+        StudentReportPlan tryReadingReportPlan = reportPlanService.getOne(
+                new QueryWrapper<StudentReportPlan>().lambda()
+                        .eq(StudentReportPlan::getCategory, 2)
+                        .eq(StudentReportPlan::getBandingTaskId, studentReportPlan.getBandingTaskId())
+        );
+
+        List<StudentReportRecord> records = reportRecordMapper.selectList(
+                new QueryWrapper<StudentReportRecord>().lambda()
+                        .eq(StudentReportRecord::getStudentReportPlanId, tryReadingReportPlan.getId())
+        );
+        Date createDate = new Date();
+        Set<Long> existInsertUserIds = new HashSet<>();
+        for (StudentReportRecord record : records) {
+            if(existInsertUserIds.contains(record.getUserId())){
+                continue;
+            }
+            record.setReportTime(null);
+            record.setModifyUserId(null);
+            record.setModifyDate(null);
+            record.setCreateDate(createDate);
+            record.setStudentReportPlanId(studentReportPlan.getId());
+            record.setId(null);
+            reportRecordMapper.insert(record);
+            existInsertUserIds.add(record.getUserId());
+        }
+
+
+        List<SyncStudentDataListVo> syncStudentDataList = this.baseMapper.getSyncStudentDataList(studentReportPlan.getId());
+        List<Long> newStudentIds = syncStudentDataList.stream().map(SyncStudentDataListVo::getNewStudentId).collect(Collectors.toList());
+
+        //修改新生基本信息
+        Map<Long, String> stduyStatusMap = syncStudentDataList.stream().collect(Collectors.toMap(SyncStudentDataListVo::getNewStudentId, SyncStudentDataListVo::getStduyStatus));
+        List<BaseNewStudent> studentList = newStudentService.listByIds(newStudentIds);
+        for (BaseNewStudent student : studentList) {
+            student.setStduyStatus(stduyStatusMap.get(student.getId()));
+        }
+        newStudentService.updateBatchById(studentList);
+
+        //修改班级信息
+        Map<Long, Long> bandingTaskClassMap = syncStudentDataList.stream().filter(x -> x.getBandingTaskClassId() != null).collect(Collectors.toMap(SyncStudentDataListVo::getNewStudentId, SyncStudentDataListVo::getBandingTaskClassId));
+
+        List<BandingTaskClass> taskClassList = taskClassMapper.selectList(
+                new QueryWrapper<BandingTaskClass>().lambda()
+                        .eq(BandingTaskClass::getBandingTaskId, studentReportPlan.getBandingTaskId())
+        );
+        Map<Long, Long> taskClassMap = taskClassList.stream().collect(Collectors.toMap(BandingTaskClass::getBaseClassId, BandingTaskClass::getId));
+
+        List<BandingTaskClassStudent> insertList = new ArrayList<>();
+        for (BaseNewStudent student : studentList) {
+            Long bandingTaskClassId = bandingTaskClassMap.get(student.getId());
+            if(bandingTaskClassId == null){
+                continue;
+            }
+            insertList.add(new BandingTaskClassStudent(){{
+                setBandingTaskClassId(taskClassMap.get(bandingTaskClassId));
+                setNewStudentId(student.getId());
+                setCreateDate(new Date());
+                setStatus(1);
+            }});
+        }
+
+        if(!insertList.isEmpty()){
+            this.remove(
+                    new QueryWrapper<BandingTaskClassStudent>().lambda()
+                            .in(BandingTaskClassStudent::getNewStudentId, newStudentIds)
+            );
+            this.saveBatch(insertList);
+        }
+        return true;
+    }
+
 }

+ 31 - 0
src/main/java/com/xjrsoft/module/banding/vo/SyncStudentDataListVo.java

@@ -0,0 +1,31 @@
+package com.xjrsoft.module.banding.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @title: 分班后的学生导出
+ * @Author dzx
+ * @Date: 2024-07-01
+ * @Version 1.0
+ */
+@Data
+public class SyncStudentDataListVo {
+
+    @ApiModelProperty("新生id")
+    private Long newStudentId;
+
+    @ApiModelProperty("班级id")
+    private String classId;
+
+    @ApiModelProperty("就读方式")
+    private String stduyStatus;
+
+    @ApiModelProperty("分班班级id")
+    private Long bandingTaskClassId;
+
+}

+ 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;
 }

+ 5 - 1
src/main/java/com/xjrsoft/module/organization/service/impl/WeChatServiceImgl.java

@@ -2,6 +2,7 @@ package com.xjrsoft.module.organization.service.impl;
 
 
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.xjrsoft.common.enums.DeleteMark;
@@ -19,6 +20,7 @@ import com.xjrsoft.module.organization.service.IWeChatService;
 import com.xjrsoft.module.system.entity.WechatMessageSendLog;
 import com.xjrsoft.module.system.mapper.WechatMessageSendLogMapper;
 import lombok.AllArgsConstructor;
+import org.apache.skywalking.apm.toolkit.trace.ActiveSpan;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -53,14 +55,16 @@ public class WeChatServiceImgl implements IWeChatService {
         object.put("url", dto.getUrl());
         object.put("client_msg_id", dto.getMsgId());
         object.put("data", dto.getContent());
+        ActiveSpan.tag("sendTemplateMessage-params", JSON.toJSONString(object));
         String result = weChatUtil.sendTemplateMessage(object);
-
+        ActiveSpan.tag("sendTemplateMessage-result", result);
         //新增微信模板消息发送记录
         wechatMessageSendLogMapper.insert(new WechatMessageSendLog(){{
             setOpenId(dto.getUserId());
             setTemplateId(dto.getTemplateId());
             setResult(result);
             setParams(object.toString());
+            setCreateDate(new Date());
         }});
     }
 

+ 5 - 0
src/main/java/com/xjrsoft/module/student/controller/StudentReportPlanController.java

@@ -17,6 +17,7 @@ import com.xjrsoft.common.utils.LocalDateTimeUtil;
 import com.xjrsoft.common.utils.TreeUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.banding.entity.BandingTask;
+import com.xjrsoft.module.banding.service.IBandingTaskClassStudentService;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.service.IBaseClassService;
@@ -61,6 +62,7 @@ public class StudentReportPlanController {
     private final IBaseSemesterService semesterService;
     private final IBaseClassService classService;
     private final IEnrollmentPlanService enrollmentPlanService;
+    private final IBandingTaskClassStudentService taskClassStudentService;
 
     @GetMapping(value = "/page")
     @ApiOperation(value = "学生报到计划列表(分页)")
@@ -116,6 +118,9 @@ public class StudentReportPlanController {
         if((reportPlan.getCategory() == 2 || reportPlan.getCategory() == 3) && LocalDateTimeUtil.isDateTimeInRange(LocalDateTime.now(), reportPlan.getStartTime(), reportPlan.getEndTime())){
             reportPlan.setStatus(1);
         }
+        if(reportPlan.getCategory() == 3){
+            taskClassStudentService.syncStudentData(reportPlan);
+        }
         return RT.ok(studentReportPlanService.update(reportPlan));
     }
 

+ 4 - 0
src/main/java/com/xjrsoft/module/student/mapper/StudentReportRecordMapper.java

@@ -10,6 +10,7 @@ import com.xjrsoft.module.student.vo.StudentReportRecordPageVo;
 import com.xjrsoft.module.student.vo.StudentReportRecordPlanPageVo;
 import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsListVo;
 import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsVo;
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
@@ -45,4 +46,7 @@ public interface StudentReportRecordMapper extends MPJBaseMapper<StudentReportRe
     @Update("update student_report_record set delete_mark = 1 where user_id = #{userId} and student_report_plan_id = #{planId}")
     Boolean deleteRecordByUserIdAndPlanId(@Param("userId") Long userId, @Param("planId") Long planId);
 
+    @Delete("delete from student_report_record where student_report_plan_id = #{planId}")
+    Boolean deleteRecordByPlanId(@Param("planId") Long planId);
+
 }

+ 115 - 4
src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherbaseManagerServiceImpl.java

@@ -112,8 +112,11 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.IOException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -1062,6 +1065,43 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
 
             ProfessionalTitle insertOrUpdate = new ProfessionalTitle();
             BeanUtils.copyProperties(vo, insertOrUpdate);
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getGetDate())){
+                Instant instant = vo.getGetDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setGetDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
+            if(ObjectUtils.isNotEmpty(vo.getBeHonoredDate())){
+                Instant instant = vo.getBeHonoredDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setBeHonoredDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
+            if(ObjectUtils.isNotEmpty(vo.getIssuanceDate())){
+                Instant instant = vo.getIssuanceDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setIssuanceDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
+            if(ObjectUtils.isNotEmpty(vo.getQualificationStartDate())){
+                Instant instant = vo.getQualificationStartDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setQualificationStartDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
+            if(ObjectUtils.isNotEmpty(vo.getQualificationEndDate())){
+                Instant instant = vo.getQualificationEndDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setQualificationEndDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
+            if(ObjectUtils.isNotEmpty(vo.getNoticeDate())){
+                Instant instant = vo.getNoticeDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setNoticeDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
             insertOrUpdate.setUserId(user.getId());
             insertOrUpdate.setDeptId(user.getCode());
             insertOrUpdate.setJobStatus(jobStatus);
@@ -1147,6 +1187,13 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
 
             TeacherCertification insertOrUpdate = new TeacherCertification();
             BeanUtils.copyProperties(vo, insertOrUpdate);
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getIssuanceDate())){
+                Instant instant = vo.getIssuanceDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setIssuanceDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
             insertOrUpdate.setUserId(user.getId());
             insertOrUpdate.setDeptId(user.getCode());
 
@@ -1230,6 +1277,20 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
 
             EvaluatorInformation insertOrUpdate = new EvaluatorInformation();
             BeanUtils.copyProperties(vo, insertOrUpdate);
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getIssuanceDate())){
+                Instant instant = vo.getIssuanceDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setIssuanceDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getValidity())){
+                Instant instant = vo.getValidity().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setValidity(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
             insertOrUpdate.setUserId(user.getId());
             insertOrUpdate.setDeptId(user.getCode());
 
@@ -1313,6 +1374,13 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
 
             LanguageCompetence insertOrUpdate = new LanguageCompetence();
             BeanUtils.copyProperties(vo, insertOrUpdate);
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getIssuanceDate())){
+                Instant instant = vo.getIssuanceDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setIssuanceDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
             insertOrUpdate.setUserId(user.getId());
             insertOrUpdate.setDeptId(user.getCode());
 
@@ -1396,10 +1464,20 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
 
             // 判断是否需要新增或更新
             Map<LocalDate, FacultyContract> existingMap = mapByUserIdThenNo.getOrDefault(user.getId(), Collections.emptyMap());
-            FacultyContract existing = existingMap.get(vo.getStartDate());
-
+            Instant instant = vo.getStartDate().toInstant();
+            // 使用系统默认时区将 Instant 转换为 LocalDate
+            LocalDate startDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
+            FacultyContract existing = existingMap.get(startDate);
             FacultyContract insertOrUpdate = new FacultyContract();
             BeanUtils.copyProperties(vo, insertOrUpdate);
+            insertOrUpdate.setStartDate(startDate);
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getEndDate())){
+                Instant endDateInstant = vo.getEndDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setEndDate(endDateInstant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
             insertOrUpdate.setUserId(user.getId());
             insertOrUpdate.setDeptId(user.getCode());
 
@@ -1483,6 +1561,19 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
 
             OutsideAssociations insertOrUpdate = new OutsideAssociations();
             BeanUtils.copyProperties(vo, insertOrUpdate);
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getJoinDate())){
+                Instant instant = vo.getJoinDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setJoinDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
+
+            if(ObjectUtils.isNotEmpty(vo.getExitDate())){
+                Instant instant = vo.getExitDate().toInstant();
+                insertOrUpdate.setExitDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
+
             insertOrUpdate.setUserId(user.getId());
             insertOrUpdate.setDeptId(user.getCode());
 
@@ -1563,9 +1654,15 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
             // 判断是否需要新增或更新
             Map<String, CoreTeacher> existingMap = mapByUserIdThenNo.getOrDefault(user.getId(), Collections.emptyMap());
             CoreTeacher existing = existingMap.get(vo.getCertificationNo());
-
             CoreTeacher insertOrUpdate = new CoreTeacher();
             BeanUtils.copyProperties(vo, insertOrUpdate);
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getIssuanceDate())){
+                Instant instant = vo.getIssuanceDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setIssuanceDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
             insertOrUpdate.setUserId(user.getId());
             insertOrUpdate.setDeptId(user.getCode());
 
@@ -1646,9 +1743,15 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
             // 判断是否需要新增或更新
             Map<String, ScientificResearch> existingMap = mapByUserIdThenNo.getOrDefault(user.getId(), Collections.emptyMap());
             ScientificResearch existing = existingMap.get(vo.getName());
-
             ScientificResearch insertOrUpdate = new ScientificResearch();
             BeanUtils.copyProperties(vo, insertOrUpdate);
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getIssuanceDate())){
+                Instant instant = vo.getIssuanceDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setIssuanceDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
             insertOrUpdate.setUserId(user.getId());
             insertOrUpdate.setDeptId(user.getCode());
 
@@ -1733,6 +1836,14 @@ public class TeacherbaseManagerServiceImpl extends MPJBaseServiceImpl<XjrUserMap
 
             JobInformation insertOrUpdate = new JobInformation();
             BeanUtils.copyProperties(vo, insertOrUpdate);
+            // 处理时间字符串
+            if(ObjectUtils.isNotEmpty(vo.getEmployDate())){
+                Instant instant = vo.getEmployDate().toInstant();
+
+                // 使用系统默认时区将 Instant 转换为 LocalDate
+                insertOrUpdate.setEmployDate(instant.atZone(ZoneId.systemDefault()).toLocalDate());
+            }
+
             insertOrUpdate.setUserId(user.getId());
             insertOrUpdate.setDeptId(user.getCode());
 

+ 2 - 3
src/main/java/com/xjrsoft/module/teacher/vo/CoreTeacherImportVo.java

@@ -6,8 +6,7 @@ import com.xjrsoft.common.annotation.Required;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 骨干教师记录分页列表出参
@@ -78,7 +77,7 @@ public class CoreTeacherImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("认证时间")
     @ApiModelProperty("认证时间")
-    private LocalDate issuanceDate;
+    private Date issuanceDate;
     /**
     * 备注
     */

+ 3 - 2
src/main/java/com/xjrsoft/module/teacher/vo/EvaluatorInformationImportVo.java

@@ -8,6 +8,7 @@ import lombok.Data;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 考评员信息分页列表出参
@@ -76,13 +77,13 @@ public class EvaluatorInformationImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("发证时间")
     @ApiModelProperty("发证时间")
-    private LocalDate issuanceDate;
+    private Date issuanceDate;
     /**
     * 有效期
     */
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("有效期")
     @ApiModelProperty("有效期")
-    private LocalDate validity;
+    private Date validity;
 
 }

+ 3 - 4
src/main/java/com/xjrsoft/module/teacher/vo/FacultyContractImportVo.java

@@ -6,8 +6,7 @@ import com.xjrsoft.common.annotation.Required;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 教职工合同记录分页列表出参
@@ -40,7 +39,7 @@ public class FacultyContractImportVo {
     @ExcelProperty("起始日期")
     @ApiModelProperty("起始日期")
     @Required
-    private LocalDate startDate;
+    private Date startDate;
     /**
     * 结束日期
     */
@@ -48,7 +47,7 @@ public class FacultyContractImportVo {
     @ExcelProperty("结束日期")
     @ApiModelProperty("结束日期")
     @Required
-    private LocalDate endDate;
+    private Date endDate;
     /**
     * 合同岗位
     */

+ 2 - 3
src/main/java/com/xjrsoft/module/teacher/vo/JobInformationImportVo.java

@@ -6,8 +6,7 @@ import com.xjrsoft.common.annotation.Required;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 岗位信息记录分页列表出参
@@ -54,7 +53,7 @@ public class JobInformationImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("聘用时间")
     @ApiModelProperty("聘用时间")
-    private LocalDate employDate;
+    private Date employDate;
     /**
     * 聘用文号
     */

+ 2 - 3
src/main/java/com/xjrsoft/module/teacher/vo/LanguageCompetenceImportVo.java

@@ -6,8 +6,7 @@ import com.xjrsoft.common.annotation.Required;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 语言能力信息分页列表出参
@@ -77,6 +76,6 @@ public class LanguageCompetenceImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("发证时间")
     @ApiModelProperty("发证时间")
-    private LocalDate issuanceDate;
+    private Date issuanceDate;
 
 }

+ 4 - 2
src/main/java/com/xjrsoft/module/teacher/vo/OutsideAssociationsImportVo.java

@@ -5,9 +5,11 @@ import com.alibaba.excel.annotation.write.style.ContentStyle;
 import com.xjrsoft.common.annotation.Required;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 校外其他协会记录分页列表出参
@@ -48,14 +50,14 @@ public class OutsideAssociationsImportVo {
     @ExcelProperty("加入时间")
     @ApiModelProperty("加入时间")
     @Required
-    private LocalDate joinDate;
+    private Date joinDate;
     /**
     * 退出时间
     */
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("退出时间")
     @ApiModelProperty("退出时间")
-    private LocalDate exitDate;
+    private Date exitDate;
     /**
     * 职务
     */

+ 7 - 8
src/main/java/com/xjrsoft/module/teacher/vo/ProfessionalTitleImportVo.java

@@ -6,8 +6,7 @@ import com.xjrsoft.common.annotation.Required;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 教职工职称信息分页列表出参
@@ -55,7 +54,7 @@ public class ProfessionalTitleImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("取得时间")
     @ApiModelProperty("取得时间")
-    private LocalDate getDate;
+    private Date getDate;
     /**
     * 学科类别
     */
@@ -69,35 +68,35 @@ public class ProfessionalTitleImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("授予时间")
     @ApiModelProperty("授予时间")
-    private LocalDate beHonoredDate;
+    private Date beHonoredDate;
     /**
     * 发证时间
     */
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("发证时间")
     @ApiModelProperty("发证时间")
-    private LocalDate issuanceDate;
+    private Date issuanceDate;
     /**
     * 任职资格开始时间
     */
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("任职资格开始时间")
     @ApiModelProperty("任职资格开始时间")
-    private LocalDate qualificationStartDate;
+    private Date qualificationStartDate;
     /**
     * 任职资格结束时间
     */
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("任职资格结束时间")
     @ApiModelProperty("任职资格结束时间")
-    private LocalDate qualificationEndDate;
+    private Date qualificationEndDate;
     /**
     * 发文时间
     */
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("发文时间")
     @ApiModelProperty("发文时间")
-    private LocalDate noticeDate;
+    private Date noticeDate;
     /**
     * 职称类别
     */

+ 2 - 1
src/main/java/com/xjrsoft/module/teacher/vo/ScientificResearchImportVo.java

@@ -8,6 +8,7 @@ import lombok.Data;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 科研信息记录分页列表出参
@@ -75,7 +76,7 @@ public class ScientificResearchImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("发证时间")
     @ApiModelProperty("发证时间")
-    private LocalDate issuanceDate;
+    private Date issuanceDate;
     /**
     * 备注
     */

+ 2 - 1
src/main/java/com/xjrsoft/module/teacher/vo/TeacherCertificationImportVo.java

@@ -8,6 +8,7 @@ import lombok.Data;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 教师资格证信息分页列表出参
@@ -76,6 +77,6 @@ public class TeacherCertificationImportVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("发证时间")
     @ApiModelProperty("发证时间")
-    private LocalDate issuanceDate;
+    private Date issuanceDate;
 
 }

+ 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;
 }

+ 10 - 0
src/main/resources/mapper/banding/BandingTaskClassStudentMapper.xml

@@ -204,4 +204,14 @@
             </if>
         </if>
     </select>
+
+    <select id="getSyncStudentDataList" resultType="com.xjrsoft.module.banding.vo.SyncStudentDataListVo">
+        SELECT t2.id AS new_student_id,t4.class_id,t6.banding_task_class_id,t4.stduy_status FROM student_report_record t1
+        INNER JOIN base_new_student t2 ON t1.user_id = t2.id
+        INNER JOIN xjr_user t3 ON t2.credential_number = t3.credential_number AND t3.delete_mark = 0
+        INNER JOIN base_student_school_roll t4 ON t3.id = t4.user_id AND t4.delete_mark = 0
+        LEFT JOIN banding_task_class t5 ON t4.class_id = t5.base_class_id
+        LEFT JOIN banding_task_class_student t6 ON t2.id = t6.new_student_id AND t6.delete_mark = 0
+        WHERE t1.delete_mark = 0 AND t1.student_report_plan_id = #{studentReportPlanId}
+    </select>
 </mapper>

+ 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
+    );
+