Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev

大数据与最优化研究所 1 год назад
Родитель
Сommit
b305f18191

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

@@ -0,0 +1,193 @@
+package com.xjrsoft.module.base.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.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.ArrayList;
+
+import com.xjrsoft.module.base.dto.BaseClassCoursePageDto;
+import com.xjrsoft.module.base.entity.BaseClassCourse;
+import com.xjrsoft.module.base.service.IBaseClassCourseService;
+import com.xjrsoft.module.base.vo.BaseClassCoursePageVo;
+
+import com.xjrsoft.module.base.vo.BaseClassCourseVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 班级课程
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/base" + "/baseClassCourse")
+@Api(value = "/base"  + "/baseClassCourse",tags = "班级课程代码")
+@AllArgsConstructor
+public class BaseClassCourseController {
+
+
+    private static final Logger log = LoggerFactory.getLogger(BaseClassCourseController.class);
+    private final IBaseClassCourseService baseClassCourseService;
+    private final BaseCourseSubjectServiceImpl baseCourseSubjectServiceImpl;
+    private final TextbookServiceImpl textbookServiceImpl;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="班级课程列表(分页)")
+    @SaCheckPermission("baseclasscourse:detail")
+    public RT<PageOutput<BaseClassCoursePageVo>> page(@Valid BaseClassCoursePageDto dto){
+        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("/getSemesterTree")
+    @ApiOperation("获取年级树结构")
+    @SaCheckPermission("baseclasscourse:detail")
+    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查询班级课程信息")
+    @SaCheckPermission("baseclasscourse:detail")
+    public RT<BaseClassCourseVo> info(@RequestParam Long id){
+        BaseClassCourse baseClassCourse = baseClassCourseService.getById(id);
+        if (baseClassCourse == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(baseClassCourse, BaseClassCourseVo.class));
+    }
+
+    @GetMapping("/getAllCoursesAndTextbooks")
+    @ApiOperation(value="获取所有课程教材")
+    @SaCheckPermission("baseclasscourse:detail")
+    public RT<List<CourseBookInfo>> getAllCoursesAndTextbooks(@RequestParam(required = false) Long subjectGroupId) {
+        List<CourseBookInfo> data = baseClassCourseService.getAllCourseBook(subjectGroupId);
+        return RT.ok(data);
+    }
+
+    @GetMapping("/getAllSelectedCoursesAndTextbooks")
+    @ApiOperation(value="获取所有以选择课程教材")
+    @SaCheckPermission("baseclasscourse:detail")
+    public RT<List<CourseBookInfo>> getAllSelectedCoursesAndTextbooks(@RequestParam(required = false) Long[] classIds) {
+        List<CourseBookInfo> data = baseClassCourseService.getSelectedCourseBook(classIds);
+        return RT.ok(data);
+    }
+
+    @GetMapping("/updateAddCoursesAndTextbooks")
+    @ApiOperation(value="更新增加课程教材")
+    @SaCheckPermission("baseclasscourse:detail")
+    public RT updateAddCoursesAndTextbooks(@Valid ClassCourseTextbook list) {
+        baseClassCourseService.updateAddCourseBook(list.getClassId(), list.getCourseId(), list.getTextbookId());
+        return RT.ok();
+    }
+
+    @GetMapping("/updateRemoveCoursesAndTextbooks")
+    @ApiOperation(value="更新减少课程教材")
+    @SaCheckPermission("baseclasscourse:detail")
+    public RT updateRemoveCoursesAndTextbooks(@Valid ClassCourseTextbook list) {
+        baseClassCourseService.updateRemoveCourseBook(list.getClassId(), list.getCourseId(), list.getTextbookId());
+        return RT.ok();
+    }
+
+    @GetMapping("/insertClassCourseTextbookCombinations")
+    @ApiOperation(value="复用课程教材")
+    @SaCheckPermission("baseclasscourse:detail")
+    public RT insertClassCourseTextbookCombinations(@RequestParam  Long newClassId, @RequestParam Long sourceClassId) {
+        baseClassCourseService.markExistingRecordsAsDeleted(newClassId, sourceClassId);
+        baseClassCourseService.duplicateCourseBook(newClassId, sourceClassId);
+        return RT.ok();
+    }
+
+    @PostMapping
+    @ApiOperation(value = "新增班级课程")
+    @SaCheckPermission("baseclasscourse:add")
+    public RT<Boolean> add(@Valid @RequestBody AddBaseClassCourseDto dto){
+        BaseClassCourse baseClassCourse = BeanUtil.toBean(dto, BaseClassCourse.class);
+        boolean isSuccess = baseClassCourseService.save(baseClassCourse);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改班级课程")
+    @SaCheckPermission("baseclasscourse:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateBaseClassCourseDto dto){
+
+        BaseClassCourse baseClassCourse = BeanUtil.toBean(dto, BaseClassCourse.class);
+        return RT.ok(baseClassCourseService.updateById(baseClassCourse));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除班级课程")
+    @SaCheckPermission("baseclasscourse:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(baseClassCourseService.removeBatchByIds(ids));
+
+    }
+
+    @PostMapping("/import")
+    @ApiOperation(value = "导入")
+    public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
+        List<BaseClassCoursePageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(BaseClassCoursePageVo.class).sheet().doReadSync();
+
+        List<BaseClassCourse> baseClassCourses = new ArrayList<>();
+        for (BaseClassCoursePageVo vo : savedDataList) {
+            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());
+
+            if (baseClassCourseService.checkExits(classId, courseId, textbookId)) continue;
+
+            if (classId != null && courseId != null && textbookId != null) {
+                BaseClassCourse baseClassCourse = new BaseClassCourse();
+                baseClassCourse.setClassId(classId);
+                baseClassCourse.setCourseId(courseId);
+                baseClassCourse.setTextbookId(textbookId);
+                baseClassCourse.setCreateDate(new Date());
+                baseClassCourse.setDeleteMark(0);
+                baseClassCourses.add(baseClassCourse);
+            }
+        }
+
+        Boolean result = baseClassCourseService.saveBatch(baseClassCourses);
+        return RT.ok(result);
+    }
+
+    @GetMapping("/export")
+    @ApiOperation(value = "导出")
+    public ResponseEntity<byte[]> exportData(@Valid BaseClassCoursePageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
+        List<BaseClassCoursePageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<BaseClassCoursePageVo>) page(dto).getData()).getList();
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, BaseClassCoursePageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
+        return RT.fileStream(bot.toByteArray(), "BaseClassCourse" + ExcelTypeEnum.XLSX.getValue());
+    }
+}

+ 48 - 0
src/main/java/com/xjrsoft/module/base/dto/AddBaseClassCourseDto.java

@@ -0,0 +1,48 @@
+package com.xjrsoft.module.base.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 班级课程
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class AddBaseClassCourseDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 班级id(base_class)
+    */
+    @ApiModelProperty("班级id(base_class)")
+    private Long classId;
+    /**
+    * 课程id(base_course_subject)
+    */
+    @ApiModelProperty("课程id(base_course_subject)")
+    private Long courseId;
+    /**
+    * 教材id(textbook)
+    */
+    @ApiModelProperty("教材id(textbook)")
+    private Long textbookId;
+
+}

+ 35 - 0
src/main/java/com/xjrsoft/module/base/dto/BaseClassCoursePageDto.java

@@ -0,0 +1,35 @@
+package com.xjrsoft.module.base.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 班级课程分页查询入参
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseClassCoursePageDto extends PageInput {
+    @ApiModelProperty("班级名称")
+    private String className;
+
+    @ApiModelProperty("所属机构")
+    private Long deptId;
+
+    @ApiModelProperty("教学课程设置(0:全部 1:已设置 2:未设置)")
+    private Integer courseSet;
+
+    @ApiModelProperty("学期id")
+    private Long semester;
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/base/dto/UpdateBaseClassCourseDto.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.base.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 班级课程
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class UpdateBaseClassCourseDto extends AddBaseClassCourseDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+}

+ 98 - 0
src/main/java/com/xjrsoft/module/base/entity/BaseClassCourse.java

@@ -0,0 +1,98 @@
+package com.xjrsoft.module.base.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+/**
+* @title: 班级课程
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+@TableName("base_class_course")
+@ApiModel(value = "base_class_course", description = "班级课程")
+public class BaseClassCourse implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 班级id(base_class)
+    */
+    @ApiModelProperty("班级id(base_class)")
+    private Long classId;
+    /**
+    * 课程id(base_course_subject)
+    */
+    @ApiModelProperty("课程id(base_course_subject)")
+    private Long courseId;
+    /**
+    * 教材id(textbook)
+    */
+    @ApiModelProperty("教材id(textbook)")
+    private Long textbookId;
+
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/base/entity/ClassCourseTextbook.java

@@ -0,0 +1,17 @@
+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;
+
+    @ApiModelProperty("课程id")
+    private Long courseId;
+
+    @ApiModelProperty("教材id")
+    private Long textbookId;
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/base/entity/CourseBookInfo.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.base.entity;
+
+import lombok.Data;
+
+@Data
+public class CourseBookInfo {
+    private Long courseId;
+    private String courseName;
+    private String bookName;
+
+    public CourseBookInfo(Long courseId, String courseName,String bookName) {
+        this.courseId = courseId;
+        this.courseName = courseName;
+        this.bookName = bookName;
+    }
+}

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

@@ -0,0 +1,42 @@
+package com.xjrsoft.module.base.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.base.dto.BaseClassCoursePageDto;
+import com.xjrsoft.module.base.entity.BaseClassCourse;
+import com.xjrsoft.module.base.entity.CourseBookInfo;
+import com.xjrsoft.module.base.vo.BaseClassCoursePageVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 班级课程
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Mapper
+public interface BaseClassCourseMapper extends MPJBaseMapper<BaseClassCourse> {
+    Page<BaseClassCoursePageVo> getPage(Page<BaseClassCoursePageVo> page, BaseClassCoursePageDto dto);
+
+    @Select("SELECT id, name FROM base_semester")
+    List<Map<String, Object>> getAllSemesterNames();
+
+    List<CourseBookInfo> getAllCourseBook(Long subjectGroupId);
+    List<CourseBookInfo> getSelectedCourseBook(Long[] classIds);
+
+
+    void updateAddClassCourseTextbooks(Long classId,Long courseId,Long textbookId);
+    void updateRemoveClassCourseTextbooks(Long classId,Long courseId,Long textbookId);
+
+    void markExistingRecordsAsDeleted(Long newClassId, Long sourceClassId);
+    void insertClassCourseTextbookCombinations(Long newClassId, Long sourceClassId);
+
+    Long getClassIdByName(String name);
+    Long getCourseIdByName(String name);
+    Long getBookIdByName(String name);
+    boolean checkExits(Long classId,Long courseId,Long textbookId);
+}

+ 47 - 0
src/main/java/com/xjrsoft/module/base/service/IBaseClassCourseService.java

@@ -0,0 +1,47 @@
+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.entity.BaseClassCourse;
+import com.xjrsoft.module.base.entity.ClassCourseTextbook;
+import com.xjrsoft.module.base.entity.CourseBookInfo;
+import com.xjrsoft.module.base.vo.BaseClassCoursePageVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 班级课程
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+
+public interface IBaseClassCourseService extends MPJBaseService<BaseClassCourse> {
+
+    Page<BaseClassCoursePageVo> getPage(Page<BaseClassCoursePageVo> objectPage, BaseClassCoursePageDto dto);
+
+
+    List<CourseBookInfo> getAllCourseBook(Long subjectGroupId);
+
+    List<CourseBookInfo> getSelectedCourseBook(Long[] subjectGroupId);
+
+
+    void updateAddCourseBook(Long classId,Long courseId,Long textbookId);
+    void updateRemoveCourseBook(Long classId, Long courseId, Long textbookId);
+
+    void markExistingRecordsAsDeleted(Long newClassId, Long sourceClassId);
+
+    void duplicateCourseBook(Long newClassId, Long sourceClassId);
+
+    Map<String, Map<String, Object>> getSemesterTree();
+
+    Long GetClassIdByName(String name);
+
+    Long GetCourseIdByName(String name);
+
+    Long GetTextbookIdByName(String name);
+
+    boolean checkExits(Long classId, Long courseId, Long textbookId);
+}

+ 112 - 0
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImpl.java

@@ -0,0 +1,112 @@
+package com.xjrsoft.module.base.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.base.dto.BaseClassCoursePageDto;
+import com.xjrsoft.module.base.entity.BaseClassCourse;
+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 java.util.*;
+
+/**
+* @title: 班级课程
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCourseMapper, BaseClassCourse> implements IBaseClassCourseService {
+    private final BaseClassCourseMapper baseClassCourseMapper;
+
+    @Override
+    public Page<BaseClassCoursePageVo> getPage(Page<BaseClassCoursePageVo> page, BaseClassCoursePageDto dto) {
+        return baseClassCourseMapper.getPage(page, dto);
+    }
+
+    @Override
+    public List<CourseBookInfo> getAllCourseBook(Long subjectGroupId){
+        return baseClassCourseMapper.getAllCourseBook(subjectGroupId);
+    }
+
+    @Override
+    public List<CourseBookInfo> getSelectedCourseBook(Long[] subjectGroupId){
+        return baseClassCourseMapper.getSelectedCourseBook(subjectGroupId);
+    }
+
+    @Override
+    public void updateAddCourseBook(Long classId,Long courseId,Long textbookId){
+        baseClassCourseMapper.updateAddClassCourseTextbooks(classId, courseId, textbookId);
+    }
+
+    @Override
+    public void updateRemoveCourseBook(Long classId, Long courseId, Long textbookId){
+        baseClassCourseMapper.updateRemoveClassCourseTextbooks(classId, courseId, textbookId);
+    }
+
+    @Override
+    public void markExistingRecordsAsDeleted(Long newClassId, Long sourceClassId){
+        baseClassCourseMapper.markExistingRecordsAsDeleted(newClassId, sourceClassId);
+    }
+
+    @Override
+    public void duplicateCourseBook(Long newClassId, Long sourceClassId){
+        baseClassCourseMapper.insertClassCourseTextbookCombinations(newClassId, sourceClassId);
+    }
+
+    @Override
+    public Map<String, Map<String, Object>> getSemesterTree() {
+        List<Map<String, Object>> semesterData = baseClassCourseMapper.getAllSemesterNames();
+
+        Map<String, Map<String, Object>> tree = new TreeMap<>();
+
+        for (Map<String, Object> data : semesterData) {
+            String name = (String) data.get("name");
+            String[] parts = name.split("年");
+            String year = parts[0]; // 年份
+            String semesterType = parts[1].substring(0, parts[1].length() - 1); // 学期类型(春期/秋期)
+            Long id = Long.parseLong(data.get("id").toString());
+
+            if (!tree.containsKey(year + "年")) {
+                tree.put(year + "年", new HashMap<>());
+            }
+
+            Map<String, Object> yearMap = tree.get(year + "年");
+
+            if (semesterType.equals("春")) {
+                yearMap.put("springName", name);
+                yearMap.put("springId", id);
+            } else if (semesterType.equals("秋")) {
+                yearMap.put("autumnName", name);
+                yearMap.put("autumnId", id);
+            }
+        }
+
+        return tree;
+    }
+
+    @Override
+    public Long GetClassIdByName(String name){
+        return baseClassCourseMapper.getClassIdByName(name);
+    }
+
+    @Override
+    public Long GetCourseIdByName(String name){
+        return baseClassCourseMapper.getCourseIdByName(name);
+    }
+
+    @Override
+    public Long GetTextbookIdByName(String name){
+        return baseClassCourseMapper.getBookIdByName(name);
+    }
+
+    @Override
+    public boolean checkExits(Long classId,Long courseId,Long textbookId){
+        return baseClassCourseMapper.checkExits(classId, courseId, textbookId);
+    }
+}

+ 127 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseClassCoursePageVo.java

@@ -0,0 +1,127 @@
+package com.xjrsoft.module.base.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 班级课程分页列表出参
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class BaseClassCoursePageVo {
+
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private String id;
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @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;
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 班级id(base_class)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("班级id(base_class)")
+    @ApiModelProperty("班级id(base_class)")
+    private Long classId;
+    /**
+    * 课程id(base_course_subject)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("课程id(base_course_subject)")
+    @ApiModelProperty("课程id(base_course_subject)")
+    private Long courseId;
+    /**
+    * 教材id(textbook)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("教材id(textbook)")
+    @ApiModelProperty("教材id(textbook)")
+    private Long textbookId;
+
+    @ApiModelProperty("班级名称")
+    @ExcelProperty("班级名称")
+    private String className;
+
+    @ApiModelProperty("教师名称")
+    private String teacherName;
+
+    @ApiModelProperty("专业方向")
+    private String majorName;
+
+    @ApiModelProperty("所属机构")
+    private String deptName;
+
+    @ApiModelProperty("教学课程")
+    @ExcelProperty("教学课程")
+    private String courseName;
+
+    @ApiModelProperty("对应教材")
+    @ExcelProperty("对应教材")
+    private String textbookName;
+
+    @ExcelProperty("年级")
+    private String semester;
+}

+ 49 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseClassCourseVo.java

@@ -0,0 +1,49 @@
+package com.xjrsoft.module.base.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+/**
+* @title: 班级课程表单出参
+* @Author brealinxx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class BaseClassCourseVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 班级id(base_class)
+    */
+    @ApiModelProperty("班级id(base_class)")
+    private Long classId;
+    /**
+    * 课程id(base_course_subject)
+    */
+    @ApiModelProperty("课程id(base_course_subject)")
+    private Long courseId;
+    /**
+    * 教材id(textbook)
+    */
+    @ApiModelProperty("教材id(textbook)")
+    private Long textbookId;
+
+
+
+}

+ 8 - 0
src/main/java/com/xjrsoft/module/workflow/controller/WorkflowExecuteController.java

@@ -314,6 +314,14 @@ public class WorkflowExecuteController {
         return R.ok(workflowExecuteService.transfer(dto));
     }
 
+    @GetMapping("/my-transfer")
+    @ApiOperation(value = "我的转办")
+    public RT<PageOutput<PendingTaskVo>> myTransfer(@Valid MyExaminePageDto dto){
+        Page<PendingTaskVo> voPage = workflowExecuteService.myTransfer(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<PendingTaskVo> pageOutput = ConventPage.getPageOutput(voPage, PendingTaskVo.class);
+        return RT.ok(pageOutput);
+    }
+
 
     @GetMapping("/process/form-finished-task")
     @ApiOperation(value = "根据formId  查询流程图 以及  当前流程已完成的任务")

+ 7 - 0
src/main/java/com/xjrsoft/module/workflow/service/IWorkflowExecuteService.java

@@ -99,6 +99,13 @@ public interface IWorkflowExecuteService {
      */
     PageOutput<PendingTaskVo> pending(PendingTaskPageDto dto);
 
+    /**
+     * 查询我的转办
+     * @param dto
+     * @return
+     */
+    Page<PendingTaskVo> myTransfer(Page<PendingTaskVo> page, MyExaminePageDto dto);
+
     /**
      * 当前人员待处理
      *

+ 17 - 0
src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java

@@ -1746,6 +1746,23 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
         return output;
     }
 
+    @Override
+    public Page<PendingTaskVo> myTransfer(Page<PendingTaskVo> page, MyExaminePageDto dto) {
+        long createUserId = StpUtil.getLoginIdAsLong();
+        List<WorkflowRecord> recordList = workflowRecordMapper.selectList(
+                new QueryWrapper<WorkflowRecord>().lambda()
+                        .eq(WorkflowRecord::getCreateUserId, createUserId)
+                        .like(WorkflowRecord::getMessage, "】转交给【")
+        );
+        List<String> taskIds = recordList.stream().map(WorkflowRecord::getNodeId).collect(Collectors.toList());
+        if (!taskIds.isEmpty()) {
+            dto.setTaskIds(taskIds);
+            return xjrWorkflowExtraMapper.myApproveRecord(page, dto);
+        }
+
+        return new Page<>();
+    }
+
     @Override
     public Page<PendingTaskVo> myExamine(Page<PendingTaskVo> page, MyExaminePageDto dto) {
         List<String> taskIds = new ArrayList<>();

+ 142 - 0
src/main/resources/mapper/base/BaseClassCourse.xml

@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xjrsoft.module.base.mapper.BaseClassCourseMapper">
+    <select id="getPage" parameterType="com.xjrsoft.module.base.dto.BaseClassCoursePageDto" resultType="com.xjrsoft.module.base.vo.BaseClassCoursePageVo">
+        select t5.id, t.name as class_name, t1.name as teacher_name, t3.name as major_name, t4.name as dept_name,
+               GROUP_CONCAT(t6.name SEPARATOR '、') as course_name, GROUP_CONCAT(t7.book_name SEPARATOR '、') as textbook_name
+        from base_class t
+        left join xjr_user t1 on t1.id = t.teacher_id
+        left join base_class_major_set t2 on t2.class_id = t.id
+        left join base_major_set t3 on t3.id = t2.major_set_id
+        left join xjr_department t4 on t4.id = t.org_id
+        left join base_class_course t5 on t5.class_id = t.id
+        left join base_course_subject t6 on t6.id = t5.course_id
+        left join textbook t7 on t7.id = t5.textbook_id
+        where t5.delete_mark = 0
+        <if test="dto.className != null">
+            and t.name = #{dto.className}
+        </if>
+        <if test="dto.deptId != null">
+            and t4.id = #{dto.deptId}
+        </if>
+
+        <if test="dto.semester != null">
+            and (
+            SELECT base_semester_id
+            FROM textbook
+            WHERE t5.textbook_id = id
+            GROUP BY base_semester_id
+            HAVING COUNT(DISTINCT base_semester_id) = 1
+            ) = #{dto.semester}
+        </if>
+        GROUP BY t5.id, t.name, t1.name, t3.name, t4.name
+        <if test="dto.courseSet == 1">
+            HAVING LENGTH(course_name) > 0
+        </if>
+        <if test="dto.courseSet == 2">
+            HAVING LENGTH(course_name) = 0
+        </if>
+    </select>
+
+    <select id="getAllCourseBook" resultType="com.xjrsoft.module.base.entity.CourseBookInfo">
+        select t1.id as courseId, t1.name as courseName,t.book_name as bookName
+        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
+        <if test="subjectGroupId != null">
+            AND t2.id = #{subjectGroupId}
+        </if>
+    </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
+        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
+        where t.delete_mark = 0
+        <if test="classIds != null">
+            AND t.class_id in
+            <foreach item="classIds" collection="classIds" open="(" separator="," close=")">
+                #{classIds}
+            </foreach>
+        </if>
+<!--        <if test="subjectGroupId != null">-->
+<!--            AND-->
+<!--        </if>-->
+    </select>
+
+    <insert id="updateAddClassCourseTextbooks">
+        INSERT INTO base_class_course (class_id, course_id, textbook_id, create_date, delete_mark, enabled_mark)
+        VALUES (#{classId}, #{courseId}, #{textbookId},now(),0,1)
+            ON DUPLICATE KEY UPDATE
+                                 class_id = #{classId},
+                                 course_id = #{courseId},
+                                 textbook_id = #{textbookId}
+
+    </insert>
+
+    <update id="updateRemoveClassCourseTextbooks">
+        UPDATE base_class_course
+        SET delete_mark = 1
+        WHERE class_id = #{classId}
+          AND course_id = #{courseId}
+          AND textbook_id = #{textbookId}
+    </update>
+
+    <update id="markExistingRecordsAsDeleted" parameterType="map">
+        UPDATE base_class_course
+        SET delete_mark = 1
+        WHERE class_id = #{newClassId} AND (course_id IS NULL OR textbook_id IS NULL)
+    </update>
+
+    <insert id="insertClassCourseTextbookCombinations" parameterType="map">
+        INSERT INTO base_class_course (class_id, course_id, textbook_id, create_date, delete_mark,enabled_mark)
+        SELECT #{newClassId}, t.course_id, t.textbook_id, now(), 0, 1
+        FROM (
+                 SELECT course_id, textbook_id
+                 FROM base_class_course
+                 WHERE class_id = #{sourceClassId}
+                   AND delete_mark = 0
+                 GROUP BY course_id, textbook_id
+             ) t
+            ON DUPLICATE KEY UPDATE delete_mark = 0
+    </insert>
+
+    <select id="getClassIdByName" resultType="java.lang.Long">
+        select t.id
+        from base_class t
+        where t.delete_mark = 0
+        <if test="name != null">
+            AND t.name = #{name}
+        </if>
+    </select>
+
+    <select id="getCourseIdByName" resultType="java.lang.Long">
+        select t.id
+        from base_course_subject t
+        where t.delete_mark = 0
+        <if test="name != null">
+            AND t.name = #{name}
+        </if>
+    </select>
+
+    <select id="getBookIdByName" resultType="java.lang.Long">
+        select t.id
+        from textbook t
+        where t.delete_mark = 0
+        <if test="name != null">
+            AND t.book_name = #{name}
+        </if>
+    </select>
+
+    <select id="checkExits" resultType="java.lang.Boolean">
+        SELECT COUNT(1)
+        from base_class_course
+        WHERE class_id = #{classId}
+          AND course_id = #{courseId}
+          AND textbook_id = #{textbookId}
+    </select>
+</mapper>