parent
be5f518612
commit
b2e1335220
20 changed files with 944 additions and 0 deletions
@ -0,0 +1,64 @@ |
|||||||
|
package com.teaching.backend.controller.courses; |
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil; |
||||||
|
import com.teaching.backend.common.BaseResponse; |
||||||
|
import com.teaching.backend.common.ResultUtils; |
||||||
|
import com.teaching.backend.mapper.courses.CourseObjectivesMapper; |
||||||
|
import com.teaching.backend.model.dto.courses.CourseObjectivesDTO; |
||||||
|
import com.teaching.backend.model.entity.courses.CourseObjectives; |
||||||
|
import com.teaching.backend.service.courses.ICourseObjectivesService; |
||||||
|
import io.swagger.annotations.Api; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* 前端控制器 |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-31 |
||||||
|
*/ |
||||||
|
@Api(tags = "项目目标管理接口") |
||||||
|
@RestController |
||||||
|
@RequestMapping("/course_objectives") |
||||||
|
public class CourseObjectivesController { |
||||||
|
|
||||||
|
|
||||||
|
@Autowired |
||||||
|
ICourseObjectivesService courseObjectivesService; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
CourseObjectivesMapper courseObjectivesMapper; |
||||||
|
|
||||||
|
@ApiOperation("新增分项目标-默认第一个必须添加思政目标") |
||||||
|
@PostMapping("/addobjectives") |
||||||
|
public BaseResponse<String> saveCourseObjectives(@RequestBody CourseObjectivesDTO courseObjectivesDTO){ |
||||||
|
String data = courseObjectivesService.addObjectives(courseObjectivesDTO); |
||||||
|
return ResultUtils.success(data); |
||||||
|
} |
||||||
|
|
||||||
|
@ApiOperation("删除分项目标-只能最后一个删除思政目标") |
||||||
|
@DeleteMapping("/{id}") |
||||||
|
public BaseResponse<String> deleteCourseObjectivesByIds(@PathVariable String id){ |
||||||
|
String data = courseObjectivesService.deleteObjectives(id); |
||||||
|
return ResultUtils.success(data); |
||||||
|
} |
||||||
|
|
||||||
|
@ApiOperation("编辑分项目标") |
||||||
|
@PutMapping |
||||||
|
public BaseResponse<String> updateCourseObjectives(@RequestBody CourseObjectivesDTO courseObjectivesDTO){ |
||||||
|
String pid = courseObjectivesDTO.getPid(); |
||||||
|
CourseObjectives courseObjectives = courseObjectivesMapper.selectById(pid); |
||||||
|
BeanUtil.copyProperties(courseObjectivesDTO, courseObjectives); |
||||||
|
courseObjectives.setUpdateTime(LocalDateTime.now()); |
||||||
|
courseObjectivesService.updateById(courseObjectives); |
||||||
|
return ResultUtils.success("编辑成功"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,81 @@ |
|||||||
|
package com.teaching.backend.controller.courses; |
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil; |
||||||
|
import com.teaching.backend.common.BaseResponse; |
||||||
|
import com.teaching.backend.common.ResultUtils; |
||||||
|
import com.teaching.backend.model.dto.courses.CoursesDTO; |
||||||
|
import com.teaching.backend.model.dto.courses.PageDTO; |
||||||
|
import com.teaching.backend.model.entity.courses.Courses; |
||||||
|
import com.teaching.backend.model.query.CourseQuery; |
||||||
|
import com.teaching.backend.model.vo.CoursesVO; |
||||||
|
import com.teaching.backend.service.courses.ICoursesService; |
||||||
|
import io.swagger.annotations.Api; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import org.springframework.beans.BeanUtils; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* 前端控制器 |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-30 |
||||||
|
*/ |
||||||
|
@Api(tags = "教师管理课程接口") |
||||||
|
@RestController |
||||||
|
@RequestMapping("/coursesteacher") |
||||||
|
public class CoursesController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
ICoursesService coursesService; |
||||||
|
|
||||||
|
@ApiOperation("新增课程--同步新增课程的总体目标") |
||||||
|
@PostMapping("/addcourse") |
||||||
|
public BaseResponse<String> saveCourse(@RequestBody CoursesDTO coursesDTO, @RequestParam String teacherId){ |
||||||
|
String data = coursesService.saveCourseWithObjective(coursesDTO, teacherId); |
||||||
|
return ResultUtils.success(data); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@ApiOperation("查询课程列表") |
||||||
|
@GetMapping("/page") |
||||||
|
public BaseResponse<PageDTO<CoursesVO>> getCourses(CourseQuery courseQuery, @RequestParam String teacherId){ |
||||||
|
PageDTO<CoursesVO> coursesList = coursesService.queryCourses(courseQuery,teacherId); |
||||||
|
return ResultUtils.success(coursesList); |
||||||
|
} |
||||||
|
|
||||||
|
@ApiOperation("根据id查询课程") |
||||||
|
@GetMapping("/{id}") |
||||||
|
public BaseResponse<CoursesDTO> getByIdCourse(@PathVariable String id){ |
||||||
|
Courses course = coursesService.getById(id); |
||||||
|
CoursesDTO coursesDTO = new CoursesDTO(); |
||||||
|
BeanUtils.copyProperties(course,coursesDTO); |
||||||
|
return ResultUtils.success(coursesDTO); |
||||||
|
} |
||||||
|
|
||||||
|
@ApiOperation("根据id修改课程") |
||||||
|
@PutMapping |
||||||
|
public BaseResponse<String> editCourse(@RequestBody CoursesDTO coursesDTO){ |
||||||
|
String courseId = coursesDTO.getId(); |
||||||
|
Courses course = coursesService.getById(courseId); |
||||||
|
BeanUtil.copyProperties(coursesDTO, course); |
||||||
|
coursesService.updateById(course); |
||||||
|
return ResultUtils.success("编辑成功"); |
||||||
|
} |
||||||
|
|
||||||
|
//TODO:删除功能暂未完善,数据表缺失
|
||||||
|
@ApiOperation("根据ids批量删除课程") |
||||||
|
@DeleteMapping("/{ids}") |
||||||
|
public BaseResponse<String> deleteCourses(@PathVariable List<String> ids){ |
||||||
|
System.out.println(ids); |
||||||
|
coursesService.removeBatchByIds(ids); |
||||||
|
return ResultUtils.success("删除成功"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.teaching.backend.mapper.courses; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.teaching.backend.model.entity.courses.CourseObjectives; |
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* Mapper 接口 |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-31 |
||||||
|
*/ |
||||||
|
public interface CourseObjectivesMapper extends BaseMapper<CourseObjectives> { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.teaching.backend.mapper.courses; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||||
|
import com.teaching.backend.model.entity.courses.Courses; |
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* Mapper 接口 |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-30 |
||||||
|
*/ |
||||||
|
public interface CoursesMapper extends BaseMapper<Courses> { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.teaching.backend.model.dto.courses; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
@ApiModel(description = "分项目标参数实体") |
||||||
|
public class CourseObjectivesDTO { |
||||||
|
/** |
||||||
|
* 内部编号 |
||||||
|
*/ |
||||||
|
@ApiModelProperty("id") |
||||||
|
private String id; |
||||||
|
|
||||||
|
/** |
||||||
|
* 分项目标名称 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "分项目标名称",required = true) |
||||||
|
private String name; |
||||||
|
/** |
||||||
|
* 分项目标类型 思政1 知识2、素质3、价值4 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "分项目标类型 思政1 知识2、素质3、价值4",required = true) |
||||||
|
private String type; |
||||||
|
/** |
||||||
|
* 分项目标描述 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "分项目标内容",required = true) |
||||||
|
private String content; |
||||||
|
|
||||||
|
/** |
||||||
|
* 父节点 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "父节点pid",required = true) |
||||||
|
private String pid; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,100 @@ |
|||||||
|
package com.teaching.backend.model.dto.courses; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
@Data |
||||||
|
@ApiModel(description = "教师创建课程参数实体") |
||||||
|
public class CoursesDTO { |
||||||
|
/** |
||||||
|
* 内部编号 |
||||||
|
*/ |
||||||
|
@ApiModelProperty("id") |
||||||
|
private String id; |
||||||
|
/** |
||||||
|
* 创建人 教师id |
||||||
|
*/ |
||||||
|
@ApiModelProperty("负责教师") |
||||||
|
private String teacher; |
||||||
|
/** |
||||||
|
* 创建日期 |
||||||
|
*/ |
||||||
|
@ApiModelProperty("创建日期") |
||||||
|
private LocalDateTime createTime; |
||||||
|
/** |
||||||
|
* 课程封面 |
||||||
|
*/ |
||||||
|
@ApiModelProperty("图片") |
||||||
|
private String img; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程类别 专业教育 通识教育 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "课程类别:专业教育 通识教育",required = true) |
||||||
|
private String category; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程性质 必修选修任修 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "课程性质:必修,选修,任修",required = true) |
||||||
|
private String nature; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程名称 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "课程名称",required = true) |
||||||
|
private String name; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程编码 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "课程编码",required = true) |
||||||
|
private String code; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 课程学分 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "课程学分",required = true) |
||||||
|
private BigDecimal credit; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程学时 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "课程学时",required = true) |
||||||
|
private Integer classhours; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考核类型 考试 考查 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "考核类型:考试 考查",required = true) |
||||||
|
private String assessmenttype; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考核方式 开卷 闭卷 其他 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "考核方式:开卷 闭卷 其他",required = true) |
||||||
|
private String assessmentway; |
||||||
|
|
||||||
|
/** |
||||||
|
* 教学方法 |
||||||
|
*/ |
||||||
|
@ApiModelProperty("教学方法") |
||||||
|
private String teachermethod; |
||||||
|
|
||||||
|
/** |
||||||
|
* 教学方式 |
||||||
|
*/ |
||||||
|
@ApiModelProperty("教学方式") |
||||||
|
private String teacherway; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程简介 |
||||||
|
*/ |
||||||
|
@ApiModelProperty("课程简介") |
||||||
|
private String description; |
||||||
|
} |
@ -0,0 +1,60 @@ |
|||||||
|
package com.teaching.backend.model.dto.courses; |
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil; |
||||||
|
import cn.hutool.core.collection.CollUtil; |
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.Collections; |
||||||
|
import java.util.List; |
||||||
|
import java.util.function.Function; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
@Data |
||||||
|
@ApiModel(description = "分页结果") |
||||||
|
public class PageDTO<T> { |
||||||
|
@ApiModelProperty("总条数") |
||||||
|
private Long total; |
||||||
|
@ApiModelProperty("总页数") |
||||||
|
private Long pages; |
||||||
|
@ApiModelProperty("集合") |
||||||
|
private List<T> list; |
||||||
|
|
||||||
|
public static <PO, VO> PageDTO<VO> of(Page<PO> p, Class<VO> clazz){ |
||||||
|
PageDTO<VO> dto = new PageDTO<>(); |
||||||
|
// 1.总条数
|
||||||
|
dto.setTotal(p.getTotal()); |
||||||
|
// 2.总页数
|
||||||
|
dto.setPages(p.getPages()); |
||||||
|
// 3.当前页数据
|
||||||
|
List<PO> records = p.getRecords(); |
||||||
|
if (CollUtil.isEmpty(records)) { |
||||||
|
dto.setList(Collections.emptyList()); |
||||||
|
return dto; |
||||||
|
} |
||||||
|
// 4.拷贝user的VO
|
||||||
|
dto.setList(BeanUtil.copyToList(records, clazz)); |
||||||
|
// 5.返回
|
||||||
|
return dto; |
||||||
|
} |
||||||
|
|
||||||
|
public static <PO, VO> PageDTO<VO> of(Page<PO> p, Function<PO, VO> convertor){ |
||||||
|
PageDTO<VO> dto = new PageDTO<>(); |
||||||
|
// 1.总条数
|
||||||
|
dto.setTotal(p.getTotal()); |
||||||
|
// 2.总页数
|
||||||
|
dto.setPages(p.getPages()); |
||||||
|
// 3.当前页数据
|
||||||
|
List<PO> records = p.getRecords(); |
||||||
|
if (CollUtil.isEmpty(records)) { |
||||||
|
dto.setList(Collections.emptyList()); |
||||||
|
return dto; |
||||||
|
} |
||||||
|
// 4.拷贝user的VO
|
||||||
|
dto.setList(records.stream().map(convertor).collect(Collectors.toList())); |
||||||
|
// 5.返回
|
||||||
|
return dto; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,68 @@ |
|||||||
|
package com.teaching.backend.model.entity.courses; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-31 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
@TableName("course_objectives") |
||||||
|
@ApiModel(value="CourseObjectives对象", description="") |
||||||
|
public class CourseObjectives implements Serializable { |
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "内部编号") |
||||||
|
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||||
|
private String id; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "创建日期") |
||||||
|
private LocalDateTime createTime; |
||||||
|
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "更新日期") |
||||||
|
private LocalDateTime updateTime; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "父级节点") |
||||||
|
private String pid; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否有子节点") |
||||||
|
private String hasChild; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "目标名称") |
||||||
|
private String name; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "目标类型") |
||||||
|
private String type; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "目标内容") |
||||||
|
private String content; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "课程id") |
||||||
|
private String courseid; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "毕业要求id") |
||||||
|
private String requireid; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "毕业要求") |
||||||
|
private String temp; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,143 @@ |
|||||||
|
package com.teaching.backend.model.entity.courses; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-30 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@EqualsAndHashCode(callSuper = false) |
||||||
|
@Accessors(chain = true) |
||||||
|
@TableName("courses") |
||||||
|
public class Courses implements Serializable { |
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
|
||||||
|
/** |
||||||
|
* 内部编号 |
||||||
|
*/ |
||||||
|
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||||
|
private String id; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 创建日期 |
||||||
|
*/ |
||||||
|
private LocalDateTime createTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新日期 |
||||||
|
*/ |
||||||
|
private LocalDateTime updateTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程封面 |
||||||
|
*/ |
||||||
|
private String img; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程类别 |
||||||
|
*/ |
||||||
|
private String category; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程性质 |
||||||
|
*/ |
||||||
|
private String nature; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程名称 |
||||||
|
*/ |
||||||
|
private String name; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程编码 |
||||||
|
*/ |
||||||
|
private String code; |
||||||
|
|
||||||
|
/** |
||||||
|
* 开课学期 |
||||||
|
*/ |
||||||
|
private String semester; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程学分 |
||||||
|
*/ |
||||||
|
private BigDecimal credit; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程学时 |
||||||
|
*/ |
||||||
|
private Integer classhours; |
||||||
|
|
||||||
|
/** |
||||||
|
* 理论学时 |
||||||
|
*/ |
||||||
|
private Integer theoryhours; |
||||||
|
|
||||||
|
/** |
||||||
|
* 实践学时 |
||||||
|
*/ |
||||||
|
private Integer practicehours; |
||||||
|
|
||||||
|
/** |
||||||
|
* 实验学时 |
||||||
|
*/ |
||||||
|
private Integer experimenthours; |
||||||
|
|
||||||
|
/** |
||||||
|
* 其他学时 |
||||||
|
*/ |
||||||
|
private Integer otherhours; |
||||||
|
|
||||||
|
/** |
||||||
|
* 上课周数 |
||||||
|
*/ |
||||||
|
private Integer weeks; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考核类型 |
||||||
|
*/ |
||||||
|
private String assessmenttype; |
||||||
|
|
||||||
|
/** |
||||||
|
* 考核方式 |
||||||
|
*/ |
||||||
|
private String assessmentway; |
||||||
|
|
||||||
|
/** |
||||||
|
* 负责教师 |
||||||
|
*/ |
||||||
|
private String teacher; |
||||||
|
|
||||||
|
/** |
||||||
|
* 教学方法 |
||||||
|
*/ |
||||||
|
private String teachermethod; |
||||||
|
|
||||||
|
/** |
||||||
|
* 教学方式 |
||||||
|
*/ |
||||||
|
private String teacherway; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程简介 |
||||||
|
*/ |
||||||
|
private String description; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.teaching.backend.model.query; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.EqualsAndHashCode; |
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true) |
||||||
|
@Data |
||||||
|
@ApiModel(description = "课程查询条件实体") |
||||||
|
public class CourseQuery extends PageQuery { |
||||||
|
@ApiModelProperty("课程名称关键字") |
||||||
|
private String name; |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package com.teaching.backend.model.query; |
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil; |
||||||
|
import com.baomidou.mybatisplus.core.metadata.OrderItem; |
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
@ApiModel(description = "分页查询实体") |
||||||
|
public class PageQuery { |
||||||
|
@ApiModelProperty("页码") |
||||||
|
private Integer pageNo = 1; |
||||||
|
@ApiModelProperty("页码") |
||||||
|
private Integer pageSize = 10; |
||||||
|
@ApiModelProperty("排序字段") |
||||||
|
private String sortBy; |
||||||
|
@ApiModelProperty("是否升序") |
||||||
|
private Boolean isAsc = true; |
||||||
|
|
||||||
|
public <T> Page<T> toMpPage(OrderItem ... items){ |
||||||
|
// 1.分页条件
|
||||||
|
Page<T> page = Page.of(pageNo, pageSize); |
||||||
|
// 2.排序条件
|
||||||
|
if(StrUtil.isNotBlank(sortBy)){ |
||||||
|
// 不为空
|
||||||
|
page.addOrder(new OrderItem(sortBy, isAsc)); |
||||||
|
}else if(items != null){ |
||||||
|
// 为空,默认排序
|
||||||
|
page.addOrder(items); |
||||||
|
} |
||||||
|
return page; |
||||||
|
} |
||||||
|
public <T> Page<T> toMpPage(String defaultSortBy, Boolean defaultAsc){ |
||||||
|
return toMpPage(new OrderItem(defaultSortBy, defaultAsc)); |
||||||
|
} |
||||||
|
public <T> Page<T> toMpPageDefaultSortByCreateTime(){ |
||||||
|
return toMpPage(new OrderItem("create_time", false)); |
||||||
|
} |
||||||
|
public <T> Page<T> toMpPageDefaultSortByUpdateTime(){ |
||||||
|
return toMpPage(new OrderItem("update_time", false)); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.teaching.backend.model.vo; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
|
||||||
|
@Data |
||||||
|
@ApiModel(description = "课程VO实体") |
||||||
|
public class CoursesVO { |
||||||
|
|
||||||
|
/** |
||||||
|
* 内部编号 |
||||||
|
*/ |
||||||
|
@ApiModelProperty("id") |
||||||
|
private String id; |
||||||
|
/** |
||||||
|
* 教师id |
||||||
|
*/ |
||||||
|
@ApiModelProperty("教师id") |
||||||
|
private String teacher; |
||||||
|
/** |
||||||
|
* 课程封面 |
||||||
|
*/ |
||||||
|
@ApiModelProperty("图片") |
||||||
|
private String img; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程名称 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "课程名称",required = true) |
||||||
|
private String name; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 课程学分 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "课程学分",required = true) |
||||||
|
private BigDecimal credit; |
||||||
|
|
||||||
|
/** |
||||||
|
* 课程学时 |
||||||
|
*/ |
||||||
|
@ApiModelProperty(value = "课程学时",required = true) |
||||||
|
private Integer classhours; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.teaching.backend.service.courses; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.teaching.backend.model.dto.courses.CourseObjectivesDTO; |
||||||
|
import com.teaching.backend.model.entity.courses.CourseObjectives; |
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* 服务类 |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-31 |
||||||
|
*/ |
||||||
|
public interface ICourseObjectivesService extends IService<CourseObjectives> { |
||||||
|
|
||||||
|
String addObjectives(CourseObjectivesDTO courseObjectivesDTO); |
||||||
|
|
||||||
|
String deleteObjectives(String id); |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.teaching.backend.service.courses; |
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||||
|
import com.teaching.backend.model.dto.courses.CoursesDTO; |
||||||
|
import com.teaching.backend.model.dto.courses.PageDTO; |
||||||
|
import com.teaching.backend.model.entity.courses.Courses; |
||||||
|
import com.teaching.backend.model.query.CourseQuery; |
||||||
|
import com.teaching.backend.model.vo.CoursesVO; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* 服务类 |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-30 |
||||||
|
*/ |
||||||
|
public interface ICoursesService extends IService<Courses> { |
||||||
|
|
||||||
|
String saveCourseWithObjective(CoursesDTO coursesDTO, String teacherId); |
||||||
|
|
||||||
|
PageDTO<CoursesVO> queryCourses(CourseQuery courseQuery, String teacherId); |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,94 @@ |
|||||||
|
package com.teaching.backend.service.impl.courses; |
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil; |
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.mapper.courses.CourseObjectivesMapper; |
||||||
|
import com.teaching.backend.model.dto.courses.CourseObjectivesDTO; |
||||||
|
import com.teaching.backend.model.entity.courses.CourseObjectives; |
||||||
|
import com.teaching.backend.service.courses.ICourseObjectivesService; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* 服务实现类 |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-31 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class CourseObjectivesServiceImpl extends ServiceImpl<CourseObjectivesMapper, CourseObjectives> implements ICourseObjectivesService { |
||||||
|
|
||||||
|
|
||||||
|
@Autowired |
||||||
|
CourseObjectivesMapper courseObjectivesMapper; |
||||||
|
|
||||||
|
@Override |
||||||
|
public String addObjectives(CourseObjectivesDTO courseObjectivesDTO) { |
||||||
|
String pid = courseObjectivesDTO.getPid(); |
||||||
|
if(pid.equals(null)){ |
||||||
|
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR,"pid父节点不能为空"); |
||||||
|
} |
||||||
|
String hasChild = courseObjectivesMapper.selectById(pid).getHasChild(); |
||||||
|
String type = courseObjectivesDTO.getType(); |
||||||
|
if (hasChild.equals("0") && !type.equals("1")){ |
||||||
|
throw new BusinessException(ErrorCode.PARAMS_ILLEGAL,"请在添加完思政目标以后再添加此类型目标!"); |
||||||
|
} |
||||||
|
//判断是否已经添加过思政目标
|
||||||
|
// TODO:思政目标能不能有多个??
|
||||||
|
if (courseObjectivesDTO.getType().equals("1")){ |
||||||
|
LambdaQueryWrapper<CourseObjectives> queryWrapper = new LambdaQueryWrapper<>(); |
||||||
|
queryWrapper |
||||||
|
.eq(CourseObjectives::getPid, pid) |
||||||
|
.eq(CourseObjectives::getType, "1"); |
||||||
|
Long count = courseObjectivesMapper.selectCount(queryWrapper); |
||||||
|
if (count>0){ |
||||||
|
throw new BusinessException(ErrorCode.OPERATION_ERROR,"思政目标已存在,禁止重复添加!"); |
||||||
|
} |
||||||
|
} |
||||||
|
//往表里面写分项目标
|
||||||
|
CourseObjectives courseObjectives = new CourseObjectives(); |
||||||
|
BeanUtil.copyProperties(courseObjectivesDTO,courseObjectives); |
||||||
|
courseObjectives.setCreateTime(LocalDateTime.now()); |
||||||
|
courseObjectivesMapper.insert(courseObjectives); |
||||||
|
//插入数据以后要把总体目标那边的haschild改成1
|
||||||
|
CourseObjectives objectives = courseObjectivesMapper.selectById(pid); |
||||||
|
objectives.setHasChild("1"); |
||||||
|
courseObjectivesMapper.updateById(objectives); |
||||||
|
return "添加成功"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String deleteObjectives(String id) { |
||||||
|
|
||||||
|
CourseObjectives courseObjectives = courseObjectivesMapper.selectById(id); |
||||||
|
String type = courseObjectives.getType(); |
||||||
|
String pid = courseObjectives.getPid(); |
||||||
|
if (type.equals("1")){ |
||||||
|
LambdaQueryWrapper<CourseObjectives> queryWrapper = new LambdaQueryWrapper<>(); |
||||||
|
queryWrapper.eq(CourseObjectives::getPid, pid); |
||||||
|
Long count = courseObjectivesMapper.selectCount(queryWrapper); |
||||||
|
if (count==1){ |
||||||
|
courseObjectivesMapper.deleteById(id); |
||||||
|
CourseObjectives courseObjectives1 = courseObjectivesMapper.selectById(pid); |
||||||
|
courseObjectives1.setHasChild("0"); |
||||||
|
courseObjectivesMapper.updateById(courseObjectives1); |
||||||
|
return "删除成功"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
throw new BusinessException(ErrorCode.OPERATION_ERROR, "请删除其他类型的分目标后再来删除思政目标"); |
||||||
|
} |
||||||
|
} |
||||||
|
else { |
||||||
|
courseObjectivesMapper.deleteById(id); |
||||||
|
return "删除成功"; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,92 @@ |
|||||||
|
package com.teaching.backend.service.impl.courses; |
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||||
|
import com.teaching.backend.common.ErrorCode; |
||||||
|
import com.teaching.backend.exception.BusinessException; |
||||||
|
import com.teaching.backend.mapper.courses.CourseObjectivesMapper; |
||||||
|
import com.teaching.backend.mapper.courses.CoursesMapper; |
||||||
|
import com.teaching.backend.model.dto.courses.CoursesDTO; |
||||||
|
import com.teaching.backend.model.dto.courses.PageDTO; |
||||||
|
import com.teaching.backend.model.entity.courses.CourseObjectives; |
||||||
|
import com.teaching.backend.model.entity.courses.Courses; |
||||||
|
import com.teaching.backend.model.query.CourseQuery; |
||||||
|
import com.teaching.backend.model.vo.CoursesVO; |
||||||
|
import com.teaching.backend.service.courses.ICoursesService; |
||||||
|
import org.springframework.beans.BeanUtils; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
|
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* <p> |
||||||
|
* 服务实现类 |
||||||
|
* </p> |
||||||
|
* |
||||||
|
* @author zjh |
||||||
|
* @since 2024-05-30 |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses>implements ICoursesService { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
CoursesMapper coursesMapper; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
CourseObjectivesMapper courseObjectivesMapper; |
||||||
|
|
||||||
|
@Override |
||||||
|
@Transactional |
||||||
|
public String saveCourseWithObjective(CoursesDTO coursesDTO, String teacherId) { |
||||||
|
Courses courses = new Courses(); |
||||||
|
CourseObjectives courseObjectives = new CourseObjectives(); |
||||||
|
BeanUtils.copyProperties(coursesDTO, courses); |
||||||
|
// List<String> teacherIds = new ArrayList<>();
|
||||||
|
// teacherIds.add(teacherId);
|
||||||
|
// courses.setTeacher(String.valueOf(teacherIds));
|
||||||
|
courses.setTeacher(teacherId); |
||||||
|
courses.setCreateTime(LocalDateTime.now()); |
||||||
|
String code = coursesDTO.getCode(); |
||||||
|
QueryWrapper<Courses> queryWrapper = new QueryWrapper<>(); |
||||||
|
queryWrapper.eq("code", code); |
||||||
|
Long count = coursesMapper.selectCount(queryWrapper); |
||||||
|
if(count==0){ |
||||||
|
int insert = coursesMapper.insert(courses); |
||||||
|
if (insert>0){ |
||||||
|
Courses courses1 = coursesMapper.selectOne(queryWrapper); |
||||||
|
courseObjectives.setCourseid(courses1.getId()); |
||||||
|
courseObjectives.setCreateTime(courses1.getCreateTime()); |
||||||
|
courseObjectives.setName(courses1.getName()+"课程总体目标"); |
||||||
|
courseObjectivesMapper.insert(courseObjectives); |
||||||
|
} |
||||||
|
return "添加成功"; |
||||||
|
}else { |
||||||
|
throw new BusinessException(ErrorCode.OPERATION_ERROR, "这个课程已经存在了!请联系系统相关人员为您导入课程数据!"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public PageDTO<CoursesVO> queryCourses(CourseQuery courseQuery, String teacherId) { |
||||||
|
//要搜索的课程名字
|
||||||
|
String name = courseQuery.getName(); |
||||||
|
// 1.1构建分页条件
|
||||||
|
Page<Courses> page = courseQuery.toMpPageDefaultSortByCreateTime(); |
||||||
|
// 2.分页查询
|
||||||
|
Page<Courses> p = lambdaQuery() |
||||||
|
.like(name != null, Courses::getName, name) |
||||||
|
// .eq(Courses::getTeacher,teacherId)
|
||||||
|
// .apply("JSON_CONTAINS(teacher, JSON_QUOTE({0}))", teacherId)
|
||||||
|
.apply("FIND_IN_SET({0}, teacher)", teacherId) |
||||||
|
.page(page); |
||||||
|
|
||||||
|
|
||||||
|
return PageDTO.of(p,CoursesVO.class); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
<?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="edu.huanghuai.mapper.CourseObjectivesMapper"> |
||||||
|
|
||||||
|
</mapper> |
@ -0,0 +1,5 @@ |
|||||||
|
<?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="edu.huanghuai.mapper.CoursesMapper"> |
||||||
|
|
||||||
|
</mapper> |
Loading…
Reference in new issue