Browse Source

课程班级

大数据与最优化研究所 9 months ago
parent
commit
f045f508c8
18 changed files with 366 additions and 103 deletions
  1. 83 63
      src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java
  2. 23 0
      src/main/java/com/xjrsoft/module/base/dto/BaseClassCourseListDto.java
  3. 41 0
      src/main/java/com/xjrsoft/module/base/dto/ClassCourseReuseDto.java
  4. 5 1
      src/main/java/com/xjrsoft/module/base/entity/BaseClassCourse.java
  5. 11 3
      src/main/java/com/xjrsoft/module/base/entity/ClassCourseTextbook.java
  6. 5 6
      src/main/java/com/xjrsoft/module/base/entity/CourseBookInfo.java
  7. 1 0
      src/main/java/com/xjrsoft/module/base/mapper/BaseClassCourseMapper.java
  8. 5 2
      src/main/java/com/xjrsoft/module/base/service/IBaseClassCourseService.java
  9. 88 4
      src/main/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImpl.java
  10. 66 0
      src/main/java/com/xjrsoft/module/base/vo/BaseClassCourseListVo.java
  11. 4 6
      src/main/java/com/xjrsoft/module/student/controller/PbSemesterConfigController.java
  12. 1 1
      src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardController.java
  13. 4 2
      src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardItemController.java
  14. 6 1
      src/main/java/com/xjrsoft/module/teacher/dto/TeacherAwardItemPageDto.java
  15. 1 1
      src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardItemService.java
  16. 2 1
      src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardItemServiceImpl.java
  17. 19 11
      src/main/resources/mapper/base/BaseClassCourse.xml
  18. 1 1
      src/main/resources/mapper/teacher/TeacherAwardItemMapper.xml

+ 83 - 63
src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java

@@ -1,53 +1,50 @@
 package com.xjrsoft.module.base.controller;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.xjrsoft.common.handler.FormContentStyleStrategy;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
-import com.xjrsoft.common.model.result.RT;
-import com.xjrsoft.module.base.dto.AddBaseClassCourseDto;
-import com.xjrsoft.module.base.dto.UpdateBaseClassCourseDto;
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import com.alibaba.excel.EasyExcel;
-import com.xjrsoft.module.base.entity.ClassCourseTextbook;
-import com.xjrsoft.module.base.entity.CourseBookInfo;
-import com.xjrsoft.module.base.entity.ExportBaseClassCourseVo;
-import com.xjrsoft.module.base.service.impl.BaseCourseSubjectServiceImpl;
-import com.xjrsoft.module.textbook.service.impl.TextbookServiceImpl;
-import org.apache.ibatis.annotations.Param;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.multipart.MultipartFile;
-import java.io.IOException;
-import com.alibaba.excel.support.ExcelTypeEnum;
-import org.springframework.http.ResponseEntity;
-import java.io.ByteArrayOutputStream;
-import java.util.*;
-
-import com.xjrsoft.module.base.dto.BaseClassCoursePageDto;
-import com.xjrsoft.module.base.entity.BaseClassCourse;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.base.dto.*;
+import com.xjrsoft.module.base.entity.*;
 import com.xjrsoft.module.base.service.IBaseClassCourseService;
+import com.xjrsoft.module.base.service.impl.BaseCourseSubjectServiceImpl;
+import com.xjrsoft.module.base.vo.BaseClassCourseListVo;
 import com.xjrsoft.module.base.vo.BaseClassCoursePageVo;
-
 import com.xjrsoft.module.base.vo.BaseClassCourseVo;
+import com.xjrsoft.module.textbook.entity.Textbook;
+import com.xjrsoft.module.textbook.entity.TextbookStudentClaim;
+import com.xjrsoft.module.textbook.service.impl.TextbookServiceImpl;
+import com.xjrsoft.module.textbook.vo.TextbookStudentClaimPageVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
-import java.util.stream.Collectors;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.*;
 
 /**
-* @title: 班级课程
-* @Author brealinxx
-* @Date: 2024-06-04
-* @Version 1.0
-*/
+ * @title: 班级课程
+ * @Author brealinxx
+ * @Date: 2024-06-04
+ * @Version 1.0
+ */
 @RestController
 @RequestMapping("/base" + "/baseClassCourse")
-@Api(value = "/base"  + "/baseClassCourse",tags = "班级课程代码")
+@Api(value = "/base" + "/baseClassCourse", tags = "班级课程代码")
 @AllArgsConstructor
 public class BaseClassCourseController {
 
@@ -58,35 +55,63 @@ public class BaseClassCourseController {
     private final TextbookServiceImpl textbookServiceImpl;
 
     @GetMapping(value = "/page")
-    @ApiOperation(value="班级课程列表(分页)")
+    @ApiOperation(value = "班级课程列表(分页)")
     @SaCheckPermission("baseclasscourse:detail")
-    public RT<PageOutput<BaseClassCoursePageVo>> page(@Valid BaseClassCoursePageDto dto){
+    public RT<PageOutput<BaseClassCoursePageVo>> page(@Valid BaseClassCoursePageDto dto) {
+        if(dto.getSemester() == null || dto.getSemester() == 0){
+            Page<BaseClassCoursePageVo> page = new Page<>();
+            page.setRecords(new ArrayList<>());
+            return RT.ok(ConventPage.getPageOutput(page, BaseClassCoursePageVo.class));
+        }
         Page<BaseClassCoursePageVo> page = baseClassCourseService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         PageOutput<BaseClassCoursePageVo> pageOutput = ConventPage.getPageOutput(page, BaseClassCoursePageVo.class);
         return RT.ok(pageOutput);
     }
 
+    @GetMapping(value = "/list")
+    @ApiOperation(value = "单个班级班级课程列表")
+    @SaCheckPermission("baseclasscourse:detail")
+    public RT<List<BaseClassCourseListVo>> page(@Valid BaseClassCourseListDto dto) {
+        MPJLambdaWrapper<BaseClassCourse> baseClassCourseMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        baseClassCourseMPJLambdaWrapper
+                .select(BaseClassCourse::getCourseId)
+                .selectAs(BaseClass::getName, BaseClassCourseListVo::getClassIdCn)
+                .selectAs(BaseCourseSubject::getName, BaseClassCourseListVo::getCourseIdCn)
+                .selectAs(Textbook::getBookName, BaseClassCourseListVo::getTextbookIdCn)
+                .selectAs(BaseSemester::getName, BaseClassCourseListVo::getBaseSemesterIdCn)
+                .select(BaseClassCourse.class, x -> VoToColumnUtil.fieldsToColumns(BaseClassCourseListVo.class).contains(x.getProperty()))
+                .leftJoin(BaseClass.class, BaseClass::getId, BaseClassCourse::getClassId)
+                .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, BaseClassCourse::getCourseId)
+                .leftJoin(Textbook.class, Textbook::getId, BaseClassCourse::getTextbookId)
+                .leftJoin(BaseSemester.class, BaseSemester::getId, BaseClassCourse::getBaseSemesterId)
+                .eq(dto.getBaseSemesterId() != null && dto.getBaseSemesterId() > 0, BaseClassCourse::getBaseSemesterId, dto.getBaseSemesterId())
+                .eq(dto.getClassId() != null && dto.getClassId() > 0, BaseClassCourse::getClassId, dto.getClassId())
+                ;
+        List<BaseClassCourseListVo> baseClassCourseListVoList = baseClassCourseService.selectJoinList(BaseClassCourseListVo.class, baseClassCourseMPJLambdaWrapper);
+        return RT.ok(baseClassCourseListVoList);
+    }
+
     @GetMapping("/getSemesterTree")
     @ApiOperation("获取年级树结构")
     @SaCheckPermission("baseclasscourse:detail")
-    public RT<Map<String, Map<String, Object>>> semesterTree(){
+    public RT<Map<String, Map<String, Object>>> semesterTree() {
         Map<String, Map<String, Object>> tree = baseClassCourseService.getSemesterTree();
         return RT.ok(tree);
     }
 
     @GetMapping(value = "/info")
-    @ApiOperation(value="根据id查询班级课程信息")
+    @ApiOperation(value = "根据id查询班级课程信息")
     @SaCheckPermission("baseclasscourse:detail")
-    public RT<BaseClassCourseVo> info(@RequestParam Long id){
+    public RT<BaseClassCourseVo> info(@RequestParam Long id) {
         BaseClassCourse baseClassCourse = baseClassCourseService.getById(id);
         if (baseClassCourse == null) {
-           return RT.error("找不到此数据!");
+            return RT.error("找不到此数据!");
         }
         return RT.ok(BeanUtil.toBean(baseClassCourse, BaseClassCourseVo.class));
     }
 
     @GetMapping("/getAllCoursesAndTextbooks")
-    @ApiOperation(value="获取所有课程教材")
+    @ApiOperation(value = "获取所有课程教材")
     @SaCheckPermission("baseclasscourse:detail")
     public RT<List<CourseBookInfo>> getAllCoursesAndTextbooks(@RequestParam(required = false) Long[] classIds, @RequestParam(required = false) Long subjectGroupId, @RequestParam(required = false) Long semester) {
         List<CourseBookInfo> data = baseClassCourseService.getAllCourseBook(classIds, subjectGroupId, semester);
@@ -94,7 +119,7 @@ public class BaseClassCourseController {
     }
 
     @GetMapping("/getAllSelectedCoursesAndTextbooks")
-    @ApiOperation(value="获取所有以选择课程教材")
+    @ApiOperation(value = "获取所有以选择课程教材")
     @SaCheckPermission("baseclasscourse:detail")
     public RT<List<CourseBookInfo>> getAllSelectedCoursesAndTextbooks(@RequestParam(required = false) Long[] classIds, @RequestParam(required = false) Long semester) {
         List<CourseBookInfo> data = baseClassCourseService.getSelectedCourseBook(classIds, semester);
@@ -102,53 +127,46 @@ public class BaseClassCourseController {
     }
 
     @PostMapping("/updateAddCoursesAndTextbooks")
-    @ApiOperation(value="更新增加课程教材")
+    @ApiOperation(value = "更新增加课程教材")
     @SaCheckPermission("baseclasscourse:detail")
-    public RT updateAddCoursesAndTextbooks(@Valid ClassCourseTextbook list) {
-        for (Long classId : list.getClassId()){
-            for (Long i = 0L ;i < list.getCourseId().length; i++){
-                baseClassCourseService.updateAddCourseBook(classId, list.getCourseId()[Math.toIntExact(i)], list.getTextbookId()[Math.toIntExact(i)]);
-            }
-        }
-        return RT.ok();
+    public RT<Boolean> updateAddCoursesAndTextbooks(@Valid @RequestBody ClassCourseTextbook dto) {
+        return RT.ok(baseClassCourseService.updateAddCourseBook(dto));
     }
 
     @PostMapping("/updateRemoveCoursesAndTextbooks")
-    @ApiOperation(value="更新减少课程教材")
+    @ApiOperation(value = "更新减少课程教材")
     @SaCheckPermission("baseclasscourse:detail")
-    public RT updateRemoveCoursesAndTextbooks(@Valid ClassCourseTextbook list) {
-        for (Long classId : list.getClassId()){
-            for (Long i = 0L ;i < list.getCourseId().length; i++){
+    public RT<Boolean> updateRemoveCoursesAndTextbooks(@Valid ClassCourseTextbook list) {
+        boolean isSuccess = true;
+        for (Long classId : list.getClassIds()) {
+            for (Long i = 0L; i < list.getCourseId().length; i++) {
                 baseClassCourseService.updateRemoveCourseBook(classId, list.getCourseId()[Math.toIntExact(i)], list.getTextbookId()[Math.toIntExact(i)]);
             }
         }
-        return RT.ok();
+        return RT.ok(isSuccess);
     }
 
     @PostMapping("/insertClassCourseTextbookCombinations")
-    @ApiOperation(value="复用课程教材")
+    @ApiOperation(value = "复用课程教材")
     @SaCheckPermission("baseclasscourse:detail")
-    public RT insertClassCourseTextbookCombinations(@RequestParam Long newClassId, @RequestParam Long[] sourceClassIds, @RequestParam Long semester) {
+    public RT<Boolean> insertClassCourseTextbookCombinations(@Valid @RequestBody ClassCourseReuseDto dto) {
 //        baseClassCourseService.markExistingRecordsAsDeleted(newClassId, sourceClassId);
-        for (Long sourceId : sourceClassIds){
-            baseClassCourseService.duplicateCourseBook(newClassId, sourceId, semester);
-        }
-        return RT.ok();
+        return RT.ok(baseClassCourseService.duplicateCourseBook(dto));
     }
 
     @PostMapping
     @ApiOperation(value = "新增班级课程")
     @SaCheckPermission("baseclasscourse:add")
-    public RT<Boolean> add(@Valid @RequestBody AddBaseClassCourseDto dto){
+    public RT<Boolean> add(@Valid @RequestBody AddBaseClassCourseDto dto) {
         BaseClassCourse baseClassCourse = BeanUtil.toBean(dto, BaseClassCourse.class);
         boolean isSuccess = baseClassCourseService.save(baseClassCourse);
-    return RT.ok(isSuccess);
+        return RT.ok(isSuccess);
     }
 
     @PutMapping
     @ApiOperation(value = "修改班级课程")
     @SaCheckPermission("baseclasscourse:edit")
-    public RT<Boolean> update(@Valid @RequestBody UpdateBaseClassCourseDto dto){
+    public RT<Boolean> update(@Valid @RequestBody UpdateBaseClassCourseDto dto) {
 
         BaseClassCourse baseClassCourse = BeanUtil.toBean(dto, BaseClassCourse.class);
         return RT.ok(baseClassCourseService.updateById(baseClassCourse));
@@ -158,7 +176,7 @@ public class BaseClassCourseController {
     @DeleteMapping
     @ApiOperation(value = "删除班级课程")
     @SaCheckPermission("baseclasscourse:delete")
-    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids) {
         return RT.ok(baseClassCourseService.removeBatchByIds(ids));
 
     }
@@ -177,19 +195,21 @@ public class BaseClassCourseController {
                 Long classId = Long.parseLong(baseClassCourseService.GetClassIdByName(vo.getClassName()).toString());
                 Long courseId = Long.parseLong(baseClassCourseService.GetCourseIdByName(vo.getCourseName()).toString());
                 Long textbookId = Long.parseLong(baseClassCourseService.GetTextbookIdByName(vo.getTextbookName()).toString());
+                Long baseSemesterId = Long.parseLong(baseClassCourseService.GetBaseSemesterIdByName(vo.getSemester()).toString());
 
                 if (baseClassCourseService.checkExits(classId, courseId, textbookId)) {
                     duplicateLogs.add(String.format("[输入的信息重复添加] 班级: %s, 课程: %s, 教材: %s", vo.getClassName(), vo.getCourseName(), vo.getTextbookName()));
                     continue;
                 }
 
-                if (classId != null && courseId != null && textbookId != null) {
+                if (classId != null && courseId != null && textbookId != null && baseSemesterId != null) {
                     BaseClassCourse baseClassCourse = new BaseClassCourse();
                     baseClassCourse.setClassId(classId);
                     baseClassCourse.setCourseId(courseId);
                     baseClassCourse.setTextbookId(textbookId);
                     baseClassCourse.setCreateDate(new Date());
                     baseClassCourse.setDeleteMark(0);
+                    baseClassCourse.setBaseSemesterId(baseSemesterId);
                     baseClassCourses.add(baseClassCourse);
                 }
             } catch (NumberFormatException e) {

+ 23 - 0
src/main/java/com/xjrsoft/module/base/dto/BaseClassCourseListDto.java

@@ -0,0 +1,23 @@
+package com.xjrsoft.module.base.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 班级课程分页查询入参
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseClassCourseListDto {
+    @ApiModelProperty("班级id")
+    private Long classId;
+
+    @ApiModelProperty("学期id")
+    private Long baseSemesterId;
+}

+ 41 - 0
src/main/java/com/xjrsoft/module/base/dto/ClassCourseReuseDto.java

@@ -0,0 +1,41 @@
+package com.xjrsoft.module.base.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+* @title: 复用入参
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class ClassCourseReuseDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 旧的班级id
+    */
+    @ApiModelProperty("旧的班级id")
+    private Long oldClassId;
+    /**
+     * 新的班级id集合
+     */
+    @ApiModelProperty("新的班级id集合")
+    private List<Long> newClassIds;
+    /**
+     * 旧的学期ID
+     */
+    @ApiModelProperty("旧的学期ID")
+    private Long oldBaseSemesterId;
+    /**
+     * 新的学期ID
+     */
+    @ApiModelProperty("新的学期ID")
+    private Long newBaseSemesterId;
+}

+ 5 - 1
src/main/java/com/xjrsoft/module/base/entity/BaseClassCourse.java

@@ -94,5 +94,9 @@ public class BaseClassCourse implements Serializable {
     @ApiModelProperty("教材id(textbook)")
     private Long textbookId;
 
-
+    /**
+     * 学期ID(base_semester)
+     */
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
 }

+ 11 - 3
src/main/java/com/xjrsoft/module/base/entity/ClassCourseTextbook.java

@@ -1,17 +1,25 @@
 package com.xjrsoft.module.base.entity;
 
-import com.xjrsoft.common.page.PageInput;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @Data
 public class ClassCourseTextbook {
     @ApiModelProperty("班级id")
-    private Long[] classId;
+    private Long[] classIds;
+
+    @ApiModelProperty("主键id")
+    private String[] ids;
 
     @ApiModelProperty("课程id")
     private Long[] courseId;
 
     @ApiModelProperty("教材id")
     private Long[] textbookId;
-}
+
+    /**
+     * 学期ID(base_semester)
+     */
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+}

+ 5 - 6
src/main/java/com/xjrsoft/module/base/entity/CourseBookInfo.java

@@ -4,13 +4,12 @@ import lombok.Data;
 
 @Data
 public class CourseBookInfo {
-    private Long courseId;
+
+    private String id;
+    private String courseId;
     private String courseName;
     private String bookName;
 
-    public CourseBookInfo(Long courseId, String courseName,String bookName) {
-        this.courseId = courseId;
-        this.courseName = courseName;
-        this.bookName = bookName;
-    }
+    private String bookId;
+
 }

+ 1 - 0
src/main/java/com/xjrsoft/module/base/mapper/BaseClassCourseMapper.java

@@ -37,5 +37,6 @@ public interface BaseClassCourseMapper extends MPJBaseMapper<BaseClassCourse> {
     Long getClassIdByName(String name);
     Long getCourseIdByName(String name);
     Long getBookIdByName(String name);
+    Long getBaseSemesterIdByName(String name);
     boolean checkExits(Long classId,Long courseId,Long textbookId);
 }

+ 5 - 2
src/main/java/com/xjrsoft/module/base/service/IBaseClassCourseService.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.base.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.base.dto.BaseClassCoursePageDto;
+import com.xjrsoft.module.base.dto.ClassCourseReuseDto;
 import com.xjrsoft.module.base.entity.BaseClassCourse;
 import com.xjrsoft.module.base.entity.ClassCourseTextbook;
 import com.xjrsoft.module.base.entity.CourseBookInfo;
@@ -28,12 +29,12 @@ public interface IBaseClassCourseService extends MPJBaseService<BaseClassCourse>
     List<CourseBookInfo> getSelectedCourseBook(Long[] subjectGroupId, Long semester);
 
 
-    void updateAddCourseBook(Long classId,Long courseId,Long textbookId);
+    Boolean updateAddCourseBook(ClassCourseTextbook dto);
     void updateRemoveCourseBook(Long classId, Long courseId, Long textbookId);
 
     void markExistingRecordsAsDeleted(Long newClassId, Long sourceClassId);
 
-    void duplicateCourseBook(Long newClassId, Long sourceClassId, Long semester);
+    Boolean duplicateCourseBook(ClassCourseReuseDto dto);
 
     Map<String, Map<String, Object>> getSemesterTree();
 
@@ -43,5 +44,7 @@ public interface IBaseClassCourseService extends MPJBaseService<BaseClassCourse>
 
     Long GetTextbookIdByName(String name);
 
+    Long GetBaseSemesterIdByName(String name);
+
     boolean checkExits(Long classId, Long courseId, Long textbookId);
 }

+ 88 - 4
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImpl.java

@@ -1,15 +1,20 @@
 package com.xjrsoft.module.base.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.module.base.dto.BaseClassCoursePageDto;
+import com.xjrsoft.module.base.dto.ClassCourseReuseDto;
 import com.xjrsoft.module.base.entity.BaseClassCourse;
+import com.xjrsoft.module.base.entity.ClassCourseTextbook;
 import com.xjrsoft.module.base.entity.CourseBookInfo;
 import com.xjrsoft.module.base.mapper.BaseClassCourseMapper;
 import com.xjrsoft.module.base.service.IBaseClassCourseService;
 import com.xjrsoft.module.base.vo.BaseClassCoursePageVo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
@@ -40,8 +45,45 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
     }
 
     @Override
-    public void updateAddCourseBook(Long classId,Long courseId,Long textbookId){
-        baseClassCourseMapper.updateAddClassCourseTextbooks(classId, courseId, textbookId);
+    @Transactional
+    public Boolean updateAddCourseBook(ClassCourseTextbook dto){
+        if (dto.getClassIds() == null || dto.getClassIds().length == 0 || dto.getBaseSemesterId() == null || dto.getBaseSemesterId() == 0) {
+            return false;
+        }
+
+        boolean isSuccess = false;
+
+        List<Long> classIdList = Arrays.asList(dto.getClassIds());
+        //删除班级的所有课程教材
+        LambdaQueryWrapper<BaseClassCourse> baseClassCourseLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        baseClassCourseLambdaQueryWrapper
+                .in(BaseClassCourse::getClassId, classIdList)
+                .eq(BaseClassCourse::getBaseSemesterId, dto.getBaseSemesterId())
+        ;
+        isSuccess = this.remove(baseClassCourseLambdaQueryWrapper);
+
+        List<BaseClassCourse> baseClassCourseList = new ArrayList<>();
+        for (Long classId : dto.getClassIds()){
+            for (String id : dto.getIds()){
+                String[] idArr = id.split("_");
+                if(idArr[0].equals("") || idArr[1].equals("")){
+                    continue;
+                }
+                Long courseId = Long.parseLong(idArr[0]);
+                Long textbookId = Long.parseLong(idArr[1]);
+                baseClassCourseList.add(new BaseClassCourse(){{
+                    setBaseSemesterId(dto.getBaseSemesterId());
+                    setClassId(classId);
+                    setCourseId(courseId);
+                    setTextbookId(textbookId);
+                }});
+            }
+        }
+
+        isSuccess = this.saveBatch(baseClassCourseList);
+
+        return isSuccess;
+        //baseClassCourseMapper.updateAddClassCourseTextbooks(classId, courseId, textbookId);
     }
 
     @Override
@@ -55,8 +97,45 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
     }
 
     @Override
-    public void duplicateCourseBook(Long newClassId, Long sourceClassId, Long semester){
-        baseClassCourseMapper.insertClassCourseTextbookCombinations(newClassId, sourceClassId, semester);
+    @Transactional
+    public Boolean duplicateCourseBook(ClassCourseReuseDto dto){
+        LambdaQueryWrapper<BaseClassCourse> baseClassCourseLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        baseClassCourseLambdaQueryWrapper
+                .eq(dto.getOldClassId() != null && dto.getOldClassId() > 0, BaseClassCourse::getClassId, dto.getOldClassId())
+                .eq(dto.getOldBaseSemesterId() != null && dto.getOldBaseSemesterId() > 0, BaseClassCourse::getBaseSemesterId, dto.getOldBaseSemesterId())
+                ;
+        List<BaseClassCourse> baseClassCourseList = this.list(baseClassCourseLambdaQueryWrapper);
+        if(baseClassCourseList == null || baseClassCourseList.isEmpty()){
+            throw new MyException("该学期的该班级没有可以复用的课程!");
+        }
+
+        boolean isSuccess = false;
+
+        //删除班级的所有课程教材
+        LambdaQueryWrapper<BaseClassCourse> removeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        removeLambdaQueryWrapper
+                .in(BaseClassCourse::getClassId, dto.getNewClassIds())
+                .eq(BaseClassCourse::getBaseSemesterId, dto.getNewBaseSemesterId())
+        ;
+        isSuccess = this.remove(baseClassCourseLambdaQueryWrapper);
+
+        List<BaseClassCourse> newBaseClassCourseList = new ArrayList<>();
+        for (Long newClassId : dto.getNewClassIds()){
+            for (BaseClassCourse baseClassCourse : baseClassCourseList){
+                Long courseId = baseClassCourse.getCourseId();
+                Long textbookId = baseClassCourse.getTextbookId();
+                newBaseClassCourseList.add(new BaseClassCourse(){{
+                    setBaseSemesterId(dto.getNewBaseSemesterId());
+                    setClassId(newClassId);
+                    setCourseId(courseId);
+                    setTextbookId(textbookId);
+                }});
+            }
+        }
+
+        isSuccess = this.saveBatch(newBaseClassCourseList);
+        return isSuccess;
+        //baseClassCourseMapper.insertClassCourseTextbookCombinations(newClassId, sourceClassId, semester);
     }
 
     @Override
@@ -105,6 +184,11 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
         return baseClassCourseMapper.getBookIdByName(name);
     }
 
+    @Override
+    public Long GetBaseSemesterIdByName(String name) {
+        return baseClassCourseMapper.getBaseSemesterIdByName(name);
+    }
+
     @Override
     public boolean checkExits(Long classId,Long courseId,Long textbookId){
         return baseClassCourseMapper.checkExits(classId, courseId, textbookId);

+ 66 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseClassCourseListVo.java

@@ -0,0 +1,66 @@
+package com.xjrsoft.module.base.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.util.Date;
+
+/**
+* @title: 班级课程分页列表出参
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class BaseClassCourseListVo {
+
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("")
+    private String id;
+    /**
+    * 班级id(base_class)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班级id(base_class)")
+    private Long classId;
+    /**
+     * 班级id(base_class)
+     */
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班级id(base_class)")
+    private String classIdCn;
+
+    /**
+    * 课程id(base_course_subject)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("课程id(base_course_subject)")
+    private Long courseId;
+
+    @ApiModelProperty("课程id")
+    @ExcelProperty("课程id")
+    private String courseIdCn;
+
+    /**
+    * 教材id(textbook)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("教材id(textbook)")
+    private Long textbookId;
+    /**
+     * 教材id(textbook)
+     */
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("教材id(textbook)")
+    private String textbookIdCn;
+
+    @ExcelProperty("学期")
+    private Long baseSemesterId;
+    @ExcelProperty("学期")
+    private String baseSemesterIdCn;
+}

+ 4 - 6
src/main/java/com/xjrsoft/module/student/controller/PbSemesterConfigController.java

@@ -34,10 +34,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
 * @title: 攀宝学期对应
@@ -61,7 +58,7 @@ public class PbSemesterConfigController {
     public RT<List<SemesterYeatTreeVo>> tree() {
         List<BaseSemester> baseSemesterList = baseSemesterService.list();
 
-        baseSemesterList.stream().forEach(element -> {
+        baseSemesterList.forEach(element -> {
             // 处理元素
             element.setModifyUserId(Long.parseLong(element.getName().substring(0,4)));
         });
@@ -84,7 +81,8 @@ public class PbSemesterConfigController {
                 setChildren(new ArrayList<>());
             }});
         }
-        List<SemesterYeatTreeVo> voList = new ArrayList<>(yearMap.values());
+        Map<Long, SemesterYeatTreeVo> sortedMap = new TreeMap<>(yearMap);
+        List<SemesterYeatTreeVo> voList = new ArrayList<>(sortedMap.values());
         return RT.ok(voList);
     }
 

+ 1 - 1
src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardController.java

@@ -75,7 +75,7 @@ public class TeacherAwardController {
                 .leftJoin(XjrUser.class, XjrUser::getId, TeacherAward::getApplicantUserId)
                 .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId())
                 .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis())
-                .like(dto.getApplicantUserIdCn() != null && dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn())
+                .like(dto.getApplicantUserIdCn() != null && !dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn())
                 .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName())
                 .eq(TeacherAward::getStatus, 1)
                 .orderByDesc(TeacherAward::getCreateDate)

+ 4 - 2
src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardItemController.java

@@ -51,8 +51,10 @@ public class TeacherAwardItemController {
         LambdaQueryWrapper<TeacherAwardItem> queryWrapper = new LambdaQueryWrapper<>();
 
         queryWrapper
-                    .orderByDesc(TeacherAwardItem::getId)
-                .select(TeacherAwardItem.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardItemPageVo.class).contains(x.getProperty()));
+                .orderByDesc(TeacherAwardItem::getId)
+                .eq(dto.getIsThesis() != null && dto.getIsThesis() > 0, TeacherAwardItem::getIsThesis, dto.getIsThesis())
+                .select(TeacherAwardItem.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardItemPageVo.class).contains(x.getProperty()))
+                ;
         List<TeacherAwardItem> list = teacherAwardItemService.list(queryWrapper);
         List<TeacherAwardItemVo> itemVos = BeanUtil.copyToList(list, TeacherAwardItemVo.class);
         List<TeacherAwardItemVo> build = TreeUtil.build(itemVos);

+ 6 - 1
src/main/java/com/xjrsoft/module/teacher/dto/TeacherAwardItemPageDto.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.teacher.dto;
 
 import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -15,5 +16,9 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = false)
 public class TeacherAwardItemPageDto extends PageInput {
 
-
+    /**
+     * 是否论文(1:是 0:否)
+     */
+    @ApiModelProperty("是否论文(1:是 0:否)")
+    private Integer isThesis;
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardItemService.java

@@ -21,6 +21,6 @@ public interface ITeacherAwardItemService extends MPJBaseService<TeacherAwardIte
 
     Page<TeacherAwardStatisticsPageVo> getStatisticsPage(Page<TeacherAwardStatisticsPageVo> page, TeacherAwardStatisticsPageDto dto);
 
-    List<TeacherAwardItemVo> getTeacherAwardItemTree();
+    List<TeacherAwardItemVo> getTeacherAwardItemTree(Integer isThesis);
 
 }

+ 2 - 1
src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardItemServiceImpl.java

@@ -37,11 +37,12 @@ public class TeacherAwardItemServiceImpl extends MPJBaseServiceImpl<TeacherAward
     }
 
     @Override
-    public List<TeacherAwardItemVo> getTeacherAwardItemTree() {
+    public List<TeacherAwardItemVo> getTeacherAwardItemTree(Integer isThesis) {
         LambdaQueryWrapper<TeacherAwardItem> queryWrapper = new LambdaQueryWrapper<>();
 
         queryWrapper
                 .orderByDesc(TeacherAwardItem::getId)
+                .eq(isThesis != null && isThesis > 0, TeacherAwardItem::getIsThesis, isThesis)
                 .select(TeacherAwardItem.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardItemPageVo.class).contains(x.getProperty()));
         List<TeacherAwardItem> list = this.list(queryWrapper);
         List<TeacherAwardItemVo> itemVos = BeanUtil.copyToList(list, TeacherAwardItemVo.class);

+ 19 - 11
src/main/resources/mapper/base/BaseClassCourse.xml

@@ -32,7 +32,7 @@
         LEFT JOIN base_major_set t3 ON t3.id = t2.major_set_id
         LEFT JOIN xjr_department t4 ON t4.id = t.org_id
         WHERE t.delete_mark = 0
-        <if test="dto.className != null">
+        <if test="dto.className != null dto.className != ''">
             and t.name = #{dto.className}
         </if>
         <if test="dto.deptId != null">
@@ -49,13 +49,17 @@
 
 
     <select id="getAllCourseBook" resultType="com.xjrsoft.module.base.entity.CourseBookInfo">
-        SELECT t1.id AS courseId, t1.name AS courseName, t.book_name AS bookName
+        SELECT t.course_subject_id                    AS courseId,
+        t1.name                  AS courseName,
+        t.book_name              AS bookName,
+        t.id                     AS bookId,
+        concat(t.course_subject_id, '_', t.id) AS id
         FROM textbook t
         LEFT JOIN base_course_subject t1 ON t.course_subject_id = t1.id
-        LEFT JOIN subject_group t2 ON t2.id = t.subject_group_id
         WHERE t.delete_mark = 0
+        AND t.course_subject_id IS NOT NULL
         <if test="subjectGroupId != null">
-            AND t2.id = #{subjectGroupId}
+            AND t.subject_group_id = #{subjectGroupId}
         </if>
         <if test="semester != null">
             AND EXISTS (
@@ -68,7 +72,7 @@
     </select>
 
     <select id="getSelectedCourseBook" resultType="com.xjrsoft.module.base.entity.CourseBookInfo">
-        select t.id as courseId, t2.name as courseName, t1.book_name as bookName
+        select t.course_id as courseId, t2.name as courseName, t1.book_name as bookName, t.textbook_id as bookId, concat(t.course_id, '_', t.textbook_id) AS id
         from base_class_course t
         left join textbook t1 on t1.id = t.textbook_id
         left join base_course_subject t2 on t.course_id = t2.id
@@ -80,12 +84,7 @@
             </foreach>
         </if>
         <if test="semester != null">
-            AND EXISTS (
-            SELECT 1
-            FROM textbook tb
-            WHERE tb.id = t.textbook_id
-            AND tb.base_semester_id = #{semester}
-            )
+            and t.base_semester_id = #{semester}
         </if>
 <!--        <if test="subjectGroupId != null">-->
 <!--            AND-->
@@ -164,6 +163,15 @@
         </if>
     </select>
 
+    <select id="getBaseSemesterIdByName" resultType="java.lang.Long">
+        select t.id
+        from base_semester t
+        where t.delete_mark = 0
+        <if test="name != null">
+            AND t.name = #{name}
+        </if>
+    </select>
+
     <select id="checkExits" resultType="java.lang.Boolean">
         SELECT COUNT(1)
         from base_class_course

+ 1 - 1
src/main/resources/mapper/teacher/TeacherAwardItemMapper.xml

@@ -15,7 +15,7 @@
         LEFT JOIN xjr_dictionary_detail t3 ON t1.gender = t3.code
         WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
         <if test="dto.userName != null and dto.userName != '' ">
-            and t1.userName like concat('%', #{dto.userName}, '%')
+            and t1.user_name like concat('%', #{dto.userName}, '%')
         </if>
         <if test="dto.name != null and dto.name != '' ">
             and t1.name like concat('%', #{dto.name}, '%')