he2802 3 năm trước cách đây
mục cha
commit
6c7b3ed01a
29 tập tin đã thay đổi với 800 bổ sung12 xóa
  1. 92 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/goods/GoodsCourseTeacherController.java
  2. 19 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonCourseController.java
  3. 48 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsCourseTeacherController.java
  4. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseMenuExamAddBo.java
  5. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseMenuExam.java
  6. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseModuleChapterMapper.java
  7. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseChapterSectionServiceImpl.java
  8. 0 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseMenuServiceImpl.java
  9. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseModuleChapterServiceImpl.java
  10. 3 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseMenuExamVo.java
  11. 24 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseUserModuleChapterVo.java
  12. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseVo.java
  13. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseAddBo.java
  14. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseEditBo.java
  15. 39 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherAddBo.java
  16. 43 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherEditBo.java
  17. 34 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherItemBo.java
  18. 51 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherQueryBo.java
  19. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/GoodsCourse.java
  20. 43 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/GoodsCourseTeacher.java
  21. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsCourseTeacherMapper.java
  22. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsCourseTeacherService.java
  23. 142 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsCourseTeacherServiceImpl.java
  24. 46 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsCourseTeacherVo.java
  25. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsCourseVo.java
  26. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseChapterSectionMapper.xml
  27. 48 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseModuleChapterMapper.xml
  28. 6 2
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsCourseMapper.xml
  29. 64 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsCourseTeacherMapper.xml

+ 92 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/goods/GoodsCourseTeacherController.java

@@ -0,0 +1,92 @@
+package com.zhongzheng.controller.goods;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherAddBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherEditBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherQueryBo;
+import com.zhongzheng.modules.goods.service.IGoodsCourseTeacherService;
+import com.zhongzheng.modules.goods.vo.GoodsCourseTeacherVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 商品课程双师资绑定Controller
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+@Api(value = "商品课程双师资绑定控制器", tags = {"商品课程双师资绑定管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/goods/course/teacher")
+public class GoodsCourseTeacherController extends BaseController {
+
+    private final IGoodsCourseTeacherService iGoodsCourseTeacherService;
+
+    /**
+     * 查询商品课程双师资绑定列表
+     */
+    @ApiOperation("查询商品课程双师资绑定列表")
+    @PreAuthorize("@ss.hasPermi('system:teacher:list')")
+    @GetMapping("/list")
+    public AjaxResult<List<GoodsCourseTeacherVo>> list(GoodsCourseTeacherQueryBo bo) {
+        bo.setStatus(1);
+        List<GoodsCourseTeacherVo> list = iGoodsCourseTeacherService.queryList(bo);
+        return AjaxResult.success(list);
+    }
+
+
+
+    /**
+     * 获取商品课程双师资绑定详细信息
+     */
+    @ApiOperation("获取商品课程双师资绑定详细信息")
+    @PreAuthorize("@ss.hasPermi('system:teacher:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<GoodsCourseTeacherVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iGoodsCourseTeacherService.queryById(id));
+    }
+
+    /**
+     * 新增商品课程双师资绑定
+     */
+    @ApiOperation("新增商品课程双师资绑定")
+    @PreAuthorize("@ss.hasPermi('system:teacher:add')")
+    @Log(title = "商品课程双师资绑定", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody GoodsCourseTeacherAddBo bo) {
+        return toAjax(iGoodsCourseTeacherService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改商品课程双师资绑定
+     */
+    @ApiOperation("修改商品课程双师资绑定")
+    @PreAuthorize("@ss.hasPermi('system:teacher:edit')")
+    @Log(title = "商品课程双师资绑定", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody GoodsCourseTeacherEditBo bo) {
+        return toAjax(iGoodsCourseTeacherService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+
+}

+ 19 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonCourseController.java

@@ -19,12 +19,16 @@ import com.zhongzheng.modules.course.service.ICourseMenuService;
 import com.zhongzheng.modules.course.service.ICourseModuleChapterService;
 import com.zhongzheng.modules.course.vo.*;
 import com.zhongzheng.modules.goods.bo.GoodsAttachedQueryBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherQueryBo;
 import com.zhongzheng.modules.goods.service.IGoodsAttachedService;
+import com.zhongzheng.modules.goods.service.IGoodsCourseTeacherService;
 import com.zhongzheng.modules.goods.vo.GoodsAttachedVo;
+import com.zhongzheng.modules.goods.vo.GoodsCourseTeacherVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -45,9 +49,13 @@ import java.util.List;
 public class CommonCourseController extends BaseController {
 
     private final ICourseModuleChapterService iCourseModuleChapterService;
+
     private final ICourseMenuService iCourseMenuService;
+
     private final ICourseChapterSectionService iCourseChapterSectionService;
 
+    private final IGoodsCourseTeacherService iGoodsCourseTeacherService;
+
 
 
     /**
@@ -80,5 +88,16 @@ public class CommonCourseController extends BaseController {
     }
 
 
+    /**
+     * 查询商品课程双师资绑定列表
+     */
+    @ApiOperation("查询商品课程双师资绑定列表")
+    @PreAuthorize("@ss.hasPermi('system:teacher:list')")
+    @GetMapping("/teacher/list")
+    public AjaxResult<List<GoodsCourseTeacherVo>> list(GoodsCourseTeacherQueryBo bo) {
+        bo.setStatus(1);
+        List<GoodsCourseTeacherVo> list = iGoodsCourseTeacherService.queryList(bo);
+        return AjaxResult.success(list);
+    }
 
 }

+ 48 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsCourseTeacherController.java

@@ -0,0 +1,48 @@
+package com.zhongzheng.controller.goods;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherAddBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherEditBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherQueryBo;
+import com.zhongzheng.modules.goods.service.IGoodsCourseTeacherService;
+import com.zhongzheng.modules.goods.vo.GoodsCourseTeacherVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 商品课程双师资绑定Controller
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+@Api(value = "商品课程双师资绑定控制器", tags = {"商品课程双师资绑定管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/goods/course/teacher")
+public class GoodsCourseTeacherController extends BaseController {
+
+    private final IGoodsCourseTeacherService iGoodsCourseTeacherService;
+
+    /**
+     * 查询商品课程双师资绑定列表
+     */
+    @ApiOperation("查询商品课程双师资绑定列表")
+    @PreAuthorize("@ss.hasPermi('system:teacher:list')")
+    @GetMapping("/list")
+    public AjaxResult<List<GoodsCourseTeacherVo>> list(GoodsCourseTeacherQueryBo bo) {
+        bo.setStatus(1);
+        List<GoodsCourseTeacherVo> list = iGoodsCourseTeacherService.queryList(bo);
+        return AjaxResult.success(list);
+    }
+
+
+}

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseMenuExamAddBo.java

@@ -30,8 +30,8 @@ public class CourseMenuExamAddBo {
     /** 节ID */
     @ApiModelProperty("节ID")
     private Long sectionId;
-    /** 题卷类型 1试卷 2章卷 3模块卷 */
-    @ApiModelProperty("题卷类型 1试卷 2章卷 3模块卷")
+    /** 题卷类型 1章卷 2节卷 3模块卷 */
+    @ApiModelProperty("题卷类型 1章卷 2节卷 3模块卷")
     private Integer type;
     /** 卷ID */
     @ApiModelProperty("卷ID")

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseMenuExam.java

@@ -34,7 +34,7 @@ private static final long serialVersionUID=1L;
     private Long chapterId;
     /** 节ID */
     private Long sectionId;
-    /** 题卷类型 1试卷 2章卷 3模块卷 */
+    /** 题卷类型 1章卷 2节卷 3模块卷 */
     private Integer type;
     /** 卷ID */
     private Long examId;

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseModuleChapterMapper.java

@@ -5,6 +5,7 @@ import com.zhongzheng.modules.course.bo.CourseMenuQueryBo;
 import com.zhongzheng.modules.course.domain.CourseModuleChapter;
 import com.zhongzheng.modules.course.vo.CourseChapterSectionVo;
 import com.zhongzheng.modules.course.vo.CourseModuleChapterVo;
+import com.zhongzheng.modules.course.vo.CourseUserChapterSectionVo;
 import com.zhongzheng.modules.course.vo.CourseUserModuleChapterVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -22,4 +23,6 @@ public interface CourseModuleChapterMapper extends BaseMapper<CourseModuleChapte
     List<CourseUserModuleChapterVo> chapterList(CourseMenuQueryBo bo);
 
     Integer rebuildChapterCheck(@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("gradeId") Long gradeId,@Param("userId") Long userId);
+
+    List<CourseUserModuleChapterVo> examList(CourseMenuQueryBo bo);
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseChapterSectionServiceImpl.java

@@ -146,8 +146,8 @@ public class CourseChapterSectionServiceImpl extends ServiceImpl<CourseChapterSe
         if (!CollectionUtils.isEmpty(courseUserChapterSectionVos)) {
             bo.setModuleId(courseUserChapterSectionVos.get(0).getModuleId());
             bo.setChapterId(courseUserChapterSectionVos.get(0).getChapterId());
+            courseUserChapterSectionVos.addAll(courseChapterSectionMapper.examList(bo));
         }
-        courseUserChapterSectionVos.addAll(courseChapterSectionMapper.examList(bo));
         if (bo.getUserId() != null) {
             for (CourseUserChapterSectionVo courseMenuVo : courseUserChapterSectionVos) {
                 if (courseMenuVo.getType().equals(1)) {

+ 0 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseMenuServiceImpl.java

@@ -125,7 +125,6 @@ public class CourseMenuServiceImpl extends ServiceImpl<CourseMenuMapper, CourseM
                 Collection<CourseMenuExam> coll = new HashSet<>();
                 for(int i=0;i<bo.getMenuExamList().size();i++){
                     CourseMenuExam addItem = BeanUtil.toBean(bo.getMenuExamList().get(i), CourseMenuExam.class);
-                    addItem.setType(1);
                     addItem.setCourseId(bo.getCourseId());
                     addItem.setCreateTime(DateUtils.getNowTime());
                     addItem.setUpdateTime(DateUtils.getNowTime());
@@ -188,7 +187,6 @@ public class CourseMenuServiceImpl extends ServiceImpl<CourseMenuMapper, CourseM
             Collection<CourseMenuExam> coll = new HashSet<>();
             for(int i=0;i<bo.getMenuExamList().size();i++){
                 CourseMenuExam addItem = BeanUtil.toBean(bo.getMenuExamList().get(i), CourseMenuExam.class);
-                addItem.setType(1);
                 addItem.setCourseId(bo.getCourseId());
                 addItem.setCreateTime(DateUtils.getNowTime());
                 addItem.setUpdateTime(DateUtils.getNowTime());

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseModuleChapterServiceImpl.java

@@ -2,6 +2,7 @@ package com.zhongzheng.modules.course.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.course.bo.*;
 import com.zhongzheng.modules.course.domain.CourseModuleChapter;
@@ -107,6 +108,10 @@ public class CourseModuleChapterServiceImpl extends ServiceImpl<CourseModuleChap
     @Override
     public List<CourseUserModuleChapterVo> chapterList(CourseMenuQueryBo bo) {
         List<CourseUserModuleChapterVo> courseUserModuleChapterVos = baseMapper.chapterList(bo);
+        if (!CollectionUtils.isEmpty(courseUserModuleChapterVos)) {
+            courseUserModuleChapterVos.addAll(baseMapper.examList(bo));
+        }
+
         //获得重修目录
         if (bo.getRebuild() != null && bo.getRebuild() == 1){
             for (CourseUserModuleChapterVo courseUserModuleChapterVo : courseUserModuleChapterVos) {

+ 3 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseMenuExamVo.java

@@ -40,9 +40,9 @@ public class CourseMenuExamVo {
 	@Excel(name = "节ID")
 	@ApiModelProperty("节ID")
 	private Long sectionId;
-	/** 题卷类型 1试卷 2章卷 3模块卷 */
-	@Excel(name = "题卷类型 1试卷 2章卷 3模块卷")
-	@ApiModelProperty("题卷类型 1试卷 2章卷 3模块卷")
+	/** 题卷类型 1章卷 2节卷 3模块卷 */
+	@Excel(name = "题卷类型 1章卷 2节卷 3模块卷")
+	@ApiModelProperty("题卷类型 1章卷 2节卷 3模块卷")
 	private Integer type;
 	/** 卷ID */
 	@Excel(name = "卷ID")

+ 24 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseUserModuleChapterVo.java

@@ -75,4 +75,28 @@ public class CourseUserModuleChapterVo {
 	@Excel(name = "章下面的节")
 	@ApiModelProperty("章下面的节")
 	private List<CourseChapterSectionVo> courseChapterSectionList;
+
+	/** 节id */
+	@Excel(name = "节id")
+	@ApiModelProperty("节id 试卷ID")
+	private Long typeId;
+
+	@Excel(name = "1 章 2试卷")
+	@ApiModelProperty("1 章 2试卷")
+	private Integer type;
+
+
+
+	@ApiModelProperty("做卷类型  1练习 2考试")
+	private Long doType;
+
+	@ApiModelProperty("分数")
+	private Long performance;
+
+	@ApiModelProperty("1及格 0不及格")
+	private Integer reportStatus;
+	@ApiModelProperty("回答次数")
+	private Long answerNum;
+	@ApiModelProperty("做次数")
+	private Long doNum;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseVo.java

@@ -115,5 +115,7 @@ public class CourseVo {
 	/** 1显示 0隐藏 */
 	@ApiModelProperty("1显示 0隐藏")
 	private Integer courseShow;
+	@ApiModelProperty("课程双师资绑定状态")
+	private Integer bindStatus;
 
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseAddBo.java

@@ -30,4 +30,7 @@ public class GoodsCourseAddBo {
     /** 1显示 0隐藏 */
     @ApiModelProperty("1显示 0隐藏")
     private Integer courseShow;
+    /** 别名 */
+    @ApiModelProperty("别名")
+    private String aliasName;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseEditBo.java

@@ -36,4 +36,8 @@ public class GoodsCourseEditBo {
     /** 1显示 0隐藏 */
     @ApiModelProperty("1显示 0隐藏")
     private Integer courseShow;
+
+    /** 别名 */
+    @ApiModelProperty("别名")
+    private String aliasName;
 }

+ 39 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherAddBo.java

@@ -0,0 +1,39 @@
+package com.zhongzheng.modules.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 商品课程双师资绑定添加对象 goods_course_teacher
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+@Data
+@ApiModel("商品课程双师资绑定添加对象")
+public class GoodsCourseTeacherAddBo {
+
+    /** 课程数组 */
+    @ApiModelProperty("课程数组")
+    private List<GoodsCourseTeacherItemBo> courseList;
+    /** 双师资模板名称 */
+    @ApiModelProperty("双师资模板名称")
+    private String name;
+    /** 添加时间 */
+    @ApiModelProperty("添加时间")
+    private Long createTime;
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+    /** 商品ID */
+    @ApiModelProperty("商品ID")
+    private Long goodsId;
+}

+ 43 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherEditBo.java

@@ -0,0 +1,43 @@
+package com.zhongzheng.modules.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 商品课程双师资绑定编辑对象 goods_course_teacher
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+@Data
+@ApiModel("商品课程双师资绑定编辑对象")
+public class GoodsCourseTeacherEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** 课程数组 */
+    @ApiModelProperty("课程数组")
+    private List<GoodsCourseTeacherItemBo> courseList;
+    /** 双师资模板名称 */
+    @ApiModelProperty("双师资模板名称")
+    private String name;
+    /** 添加时间 */
+    @ApiModelProperty("添加时间")
+    private Long createTime;
+    /** 修改时间 */
+    @ApiModelProperty("修改时间")
+    private Long updateTime;
+    /** 状态 1正常 0关闭 */
+    @ApiModelProperty("状态 1正常 0关闭")
+    private Integer status;
+    /** 商品ID */
+    @ApiModelProperty("商品ID")
+    private Long goodsId;
+}

+ 34 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherItemBo.java

@@ -0,0 +1,34 @@
+package com.zhongzheng.modules.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 商品课程双师资绑定添加对象 goods_course_teacher
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+@Data
+@ApiModel("商品课程双师资绑定添加对象")
+public class GoodsCourseTeacherItemBo {
+
+    /** 课程ID */
+    @ApiModelProperty("课程ID")
+    private Long courseId;
+    /** 课程别名 */
+    @ApiModelProperty("课程别名")
+    private String aliasName;
+    @ApiModelProperty("课程名称")
+    private String courseName;
+    @ApiModelProperty("课程编码")
+    private String code;
+    @ApiModelProperty("科目ID")
+    private Long subjectId;
+    /** 科目名称 */
+    @ApiModelProperty("科目名称")
+    private String subjectName;
+
+}

+ 51 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherQueryBo.java

@@ -0,0 +1,51 @@
+package com.zhongzheng.modules.goods.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 商品课程双师资绑定分页查询对象 goods_course_teacher
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("商品课程双师资绑定分页查询对象")
+public class GoodsCourseTeacherQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 课程ID拼接 */
+	@ApiModelProperty("课程ID拼接")
+	private String courseIds;
+	/** 双师资模板名称 */
+	@ApiModelProperty("双师资模板名称")
+	private String name;
+	/** 状态 1正常 0关闭 */
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+	/** 商品ID */
+	@ApiModelProperty("商品ID")
+	private Long goodsId;
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/GoodsCourse.java

@@ -35,4 +35,6 @@ private static final long serialVersionUID=1L;
     private Integer sort;
     /** 1显示 0隐藏 */
     private Integer courseShow;
+    /** 别名 */
+    private String aliasName;
 }

+ 43 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/GoodsCourseTeacher.java

@@ -0,0 +1,43 @@
+package com.zhongzheng.modules.goods.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 商品课程双师资绑定对象 goods_course_teacher
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("goods_course_teacher")
+public class GoodsCourseTeacher implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 课程ID拼接 */
+    private String courseIds;
+    /** 双师资模板名称 */
+    private String name;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 状态 1正常 0关闭 */
+    private Integer status;
+    /** 商品ID */
+    private Long goodsId;
+}

+ 18 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsCourseTeacherMapper.java

@@ -0,0 +1,18 @@
+package com.zhongzheng.modules.goods.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherQueryBo;
+import com.zhongzheng.modules.goods.domain.GoodsCourseTeacher;
+import com.zhongzheng.modules.goods.vo.GoodsCourseTeacherVo;
+
+import java.util.List;
+
+/**
+ * 商品课程双师资绑定Mapper接口
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+public interface GoodsCourseTeacherMapper extends BaseMapper<GoodsCourseTeacher> {
+   List<GoodsCourseTeacherVo> getList(GoodsCourseTeacherQueryBo bo);
+}

+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsCourseTeacherService.java

@@ -0,0 +1,52 @@
+package com.zhongzheng.modules.goods.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherAddBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherEditBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherQueryBo;
+import com.zhongzheng.modules.goods.domain.GoodsCourseTeacher;
+import com.zhongzheng.modules.goods.vo.GoodsCourseTeacherVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 商品课程双师资绑定Service接口
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+public interface IGoodsCourseTeacherService extends IService<GoodsCourseTeacher> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	GoodsCourseTeacherVo queryById(Long id);
+
+	/**
+	 * 查询列表
+	 */
+	List<GoodsCourseTeacherVo> queryList(GoodsCourseTeacherQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入商品课程双师资绑定
+	 * @param bo 商品课程双师资绑定新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(GoodsCourseTeacherAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改商品课程双师资绑定
+	 * @param bo 商品课程双师资绑定编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(GoodsCourseTeacherEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 142 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsCourseTeacherServiceImpl.java

@@ -0,0 +1,142 @@
+package com.zhongzheng.modules.goods.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.course.domain.CourseSectionWatchPer;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherAddBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherEditBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherItemBo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherQueryBo;
+import com.zhongzheng.modules.goods.domain.GoodsCourse;
+import com.zhongzheng.modules.goods.domain.GoodsCourseTeacher;
+import com.zhongzheng.modules.goods.mapper.GoodsCourseTeacherMapper;
+import com.zhongzheng.modules.goods.service.IGoodsCourseService;
+import com.zhongzheng.modules.goods.service.IGoodsCourseTeacherService;
+import com.zhongzheng.modules.goods.vo.GoodsCourseTeacherVo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 商品课程双师资绑定Service业务层处理
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+@Service
+public class GoodsCourseTeacherServiceImpl extends ServiceImpl<GoodsCourseTeacherMapper, GoodsCourseTeacher> implements IGoodsCourseTeacherService {
+
+    @Autowired
+    private IGoodsCourseService iGoodsCourseService;
+
+    @Override
+    public GoodsCourseTeacherVo queryById(Long id){
+        GoodsCourseTeacher db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, GoodsCourseTeacherVo.class);
+    }
+
+    @Override
+    public List<GoodsCourseTeacherVo> queryList(GoodsCourseTeacherQueryBo bo) {
+        return baseMapper.getList(bo);
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<GoodsCourseTeacherVo> entity2Vo(Collection<GoodsCourseTeacher> collection) {
+        List<GoodsCourseTeacherVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, GoodsCourseTeacherVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<GoodsCourseTeacher> page = (Page<GoodsCourseTeacher>)collection;
+            Page<GoodsCourseTeacherVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(GoodsCourseTeacherAddBo bo) {
+        if(Validator.isEmpty(bo.getCourseList())||bo.getCourseList().size()<2){
+            throw new CustomException("课程列表错误");
+        }
+        List<Long> idList = new ArrayList<>();
+        for(GoodsCourseTeacherItemBo item : bo.getCourseList()){
+            idList.add(item.getCourseId());
+            if(Validator.isEmpty(item.getAliasName())||Validator.isEmpty(item.getCourseId())){
+                throw new CustomException("课程参数错误");
+            }
+            iGoodsCourseService.update(new LambdaUpdateWrapper<GoodsCourse>()
+                    .set(GoodsCourse::getAliasName,item.getAliasName())
+                    .eq(GoodsCourse::getGoodsId,bo.getGoodsId()).eq(GoodsCourse::getCourseId,item.getCourseId()));
+        }
+        String courseIds = StringUtils.join(idList,",");
+        GoodsCourseTeacher add = BeanUtil.toBean(bo, GoodsCourseTeacher.class);
+        add.setCourseIds(courseIds);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(GoodsCourseTeacherEditBo bo) {
+        GoodsCourseTeacher update = BeanUtil.toBean(bo, GoodsCourseTeacher.class);
+        if(Validator.isEmpty(bo.getStatus())||bo.getStatus()!=-1){
+            if(Validator.isEmpty(bo.getCourseList())||bo.getCourseList().size()<2){
+                throw new CustomException("课程列表错误");
+            }
+            List<Long> idList = new ArrayList<>();
+            for(GoodsCourseTeacherItemBo item : bo.getCourseList()){
+                idList.add(item.getCourseId());
+                if(Validator.isEmpty(item.getAliasName())||Validator.isEmpty(item.getCourseId())){
+                    throw new CustomException("课程参数错误");
+                }
+                iGoodsCourseService.update(new LambdaUpdateWrapper<GoodsCourse>()
+                        .set(GoodsCourse::getAliasName,item.getAliasName())
+                        .eq(GoodsCourse::getGoodsId,bo.getGoodsId()).eq(GoodsCourse::getCourseId,item.getCourseId()));
+            }
+            String courseIds = StringUtils.join(idList,",");
+            update.setCourseIds(courseIds);
+        }
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(GoodsCourseTeacher entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 46 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsCourseTeacherVo.java

@@ -0,0 +1,46 @@
+package com.zhongzheng.modules.goods.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhongzheng.modules.goods.bo.GoodsCourseTeacherItemBo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 商品课程双师资绑定视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2022-09-14
+ */
+@Data
+@ApiModel("商品课程双师资绑定视图对象")
+public class GoodsCourseTeacherVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** 课程ID拼接 */
+	@Excel(name = "课程ID拼接")
+	@ApiModelProperty("课程ID拼接")
+	private String courseIds;
+	/** 双师资模板名称 */
+	@Excel(name = "双师资模板名称")
+	@ApiModelProperty("双师资模板名称")
+	private String name;
+	/** 状态 1正常 0关闭 */
+	@Excel(name = "状态 1正常 0关闭")
+	@ApiModelProperty("状态 1正常 0关闭")
+	private Integer status;
+	/** 商品ID */
+	@Excel(name = "商品ID")
+	@ApiModelProperty("商品ID")
+	private Long goodsId;
+	@ApiModelProperty("课程列表")
+	private List<GoodsCourseTeacherItemBo> courseList;
+}

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsCourseVo.java

@@ -41,4 +41,8 @@ public class GoodsCourseVo {
 	@Excel(name = "1显示 0隐藏")
 	@ApiModelProperty("1显示 0隐藏")
 	private Integer courseShow;
+	/** 别名 */
+	@Excel(name = "别名")
+	@ApiModelProperty("别名")
+	private String aliasName;
 }

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/course/CourseChapterSectionMapper.xml

@@ -155,10 +155,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where 1=1
           and cme.chapter_id = #{chapterId}
           and cme.course_id = #{courseId}
+         and cme.type = 1
         <if test="moduleId == null ">
             and cme.module_id = #{moduleId}
         </if>
-
     </select>
 
     <select id="getListTotalTime" parameterType="Long"  resultType="java.lang.Long">

+ 48 - 0
zhongzheng-system/src/main/resources/mapper/modules/course/CourseModuleChapterMapper.xml

@@ -37,6 +37,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="status" column="status"/>
         <result property="publishStatus" column="publish_status"/>
         <result property="courseId" column="course_id"/>
+
+        <result property="performance" column="performance"/>
+        <result property="reportStatus" column="report_status"/>
+        <result property="answerNum" column="answer_num"/>
+        <result property="doNum" column="do_num"/>
+        <result property="type" column="type"/>
+        <result property="typeId" column="type_id"/>
     </resultMap>
 
     <select id="getListById" parameterType="Long"  resultMap="CourseModuleChapterResultVo">
@@ -62,7 +69,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             cmc.sort AS c_sort,
             cmc.id,
             cmc.module_id,
+            cmc.chapter_id as type_id,
             #{gradeId} as grade_id,
+            1 as type,
             #{courseId} as course_id
         FROM
             course_module_chapter cmc
@@ -74,6 +83,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             cmc.sort
     </select>
 
+    <select id="examList" parameterType="com.zhongzheng.modules.course.bo.CourseMenuQueryBo"  resultMap="CourseUserModuleChapterVo">
+        SELECT
+        e.*,
+        cme.course_id,
+        cme.module_id,
+        cme.chapter_id,
+        cme.section_id,
+        e.exam_name as name,
+        e.answer_num,
+        (SELECT
+        count(*)
+        FROM
+        user_bank_record ubr
+        WHERE
+        ubr.user_id = #{userId}
+        AND ubr.module_exam_id = e.exam_id
+        AND grade_id = #{gradeId}) do_num,
+        e.exam_id as type_id,
+        #{gradeId} as grade_id,
+        2 as type,
+        ubr1.report_status,
+        ubr1.performance
+        FROM
+        exam e
+        LEFT JOIN course_menu_exam cme ON cme.exam_id = e.exam_id
+        LEFT JOIN (SELECT
+        any_value ( ubr.report_status ) report_status,
+        any_value ( ubr.performance ) performance,
+        ubr.module_exam_id
+        FROM
+        ( SELECT record_id, report_status, module_exam_id, performance FROM user_bank_record WHERE user_id = #{userId} AND grade_id = #{gradeId} ORDER BY record_id DESC LIMIT 9999 ) ubr
+        GROUP BY
+        ubr.module_exam_id)ubr1 on e.exam_id = ubr1.module_exam_id
+        where 1=1
+        and cme.course_id = #{courseId}
+        and cme.type = 3
+        and cme.module_id = #{moduleId}
+    </select>
+
     <select id="rebuildChapterCheck" parameterType="map"  resultType="Integer">
         SELECT
             COUNT(up.id)

+ 6 - 2
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsCourseMapper.xml

@@ -10,6 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="courseId" column="course_id"/>
         <result property="sort" column="sort"/>
         <result property="courseShow" column="course_show"/>
+        <result property="aliasName" column="alias_name"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.goods.vo.GoodsCourseVo" id="GoodsCourseVoResult">
@@ -19,6 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="sort" column="sort"/>
         <result property="goodsType" column="goods_type"/>
         <result property="courseShow" column="course_show"/>
+        <result property="aliasName" column="alias_name"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.course.vo.CourseVo" id="CourseResultVo">
@@ -50,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="subjectName" column="subject_name"/>
         <result property="sort" column="g_sort"/>
         <result property="courseShow" column="course_show"/>
+        <result property="bindStatus" column="bind_status"/>
     </resultMap>
 
 
@@ -72,8 +75,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         s.school_name,
         m.category_name,
         cs.subject_name,
-               gc.sort as g_sort,
-        c.course_show
+        gc.sort as g_sort,
+        c.course_show,
+        (SELECT count(*) from goods_course_teacher gct where gct.goods_id = gc.goods_id and  FIND_IN_SET(gc.course_id,gct.course_ids) and gct.status =1 ) bind_status
         FROM
         goods_course gc
         LEFT JOIN course c ON gc.course_id = c.course_id

+ 64 - 0
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsCourseTeacherMapper.xml

@@ -0,0 +1,64 @@
+<?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.zhongzheng.modules.goods.mapper.GoodsCourseTeacherMapper">
+
+    <resultMap type="com.zhongzheng.modules.goods.domain.GoodsCourseTeacher" id="GoodsCourseTeacherResult">
+        <result property="id" column="id"/>
+        <result property="courseIds" column="course_ids"/>
+        <result property="name" column="name"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="status" column="status"/>
+        <result property="goodsId" column="goods_id"/>
+    </resultMap>
+
+    <resultMap type="com.zhongzheng.modules.goods.vo.GoodsCourseTeacherVo" id="GoodsCourseTeacherVoResult">
+        <result property="id" column="id"/>
+        <result property="courseIds" column="course_ids"/>
+        <result property="name" column="name"/>
+        <result property="status" column="status"/>
+        <result property="goodsId" column="goods_id"/>
+        <collection property="courseList" column="{courseIds=course_ids,goodsId=goods_id}" select="findCourseList"/>
+    </resultMap>
+
+    <resultMap type="com.zhongzheng.modules.goods.bo.GoodsCourseTeacherItemBo" id="GoodsCourseTeacherItemResult">
+        <result property="courseId" column="course_id"/>
+        <result property="courseName" column="course_name"/>
+        <result property="aliasName" column="alias_name"/>
+        <result property="code" column="code"/>
+        <result property="subjectId" column="subject_id"/>
+        <result property="subjectName" column="subject_name"/>
+    </resultMap>
+
+    <select id="findCourseList"  resultMap="GoodsCourseTeacherItemResult">
+        SELECT
+            gc.course_id,
+            gc.alias_name,
+            c.course_name,
+            c.code,
+            cs.subject_name,
+            c.subject_id
+        FROM
+            goods_course gc
+                LEFT JOIN course c ON gc.course_id = c.course_id
+                LEFT JOIN course_subject cs ON cs.id = c.subject_id
+        WHERE
+            gc.goods_id = #{goodsId}
+          AND FIND_IN_SET(
+                gc.course_id,
+                #{courseIds})
+        order by gc.sort
+    </select>
+
+    <select id="getList" parameterType="com.zhongzheng.modules.goods.bo.GoodsCourseTeacherQueryBo" resultMap="GoodsCourseTeacherVoResult">
+        SELECT
+            gct.*
+        FROM
+            goods_course_teacher gct
+        WHERE
+            gct.goods_id =  #{goodsId}
+        and gct.status = 1
+    </select>
+</mapper>