he2802 3 gadi atpakaļ
vecāks
revīzija
edc1fcfd68
44 mainītis faili ar 984 papildinājumiem un 36 dzēšanām
  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. 9 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/course/CourseController.java
  4. 48 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsCourseTeacherController.java
  5. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  6. 18 12
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/impl/ActivityRecommendServiceImpl.java
  7. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseMenuExamAddBo.java
  8. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseMenuExam.java
  9. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseChapterSectionMapper.java
  10. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseModuleChapterMapper.java
  11. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseChapterSectionService.java
  12. 14 5
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseChapterSectionServiceImpl.java
  13. 0 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseMenuServiceImpl.java
  14. 13 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseModuleChapterServiceImpl.java
  15. 7 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseTopicServiceImpl.java
  16. 3 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseMenuExamVo.java
  17. 26 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseUserModuleChapterVo.java
  18. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseVo.java
  19. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamRecommendGoodsQueryBo.java
  20. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java
  21. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseAddBo.java
  22. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseEditBo.java
  23. 39 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherAddBo.java
  24. 43 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherEditBo.java
  25. 34 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherItemBo.java
  26. 51 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsCourseTeacherQueryBo.java
  27. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/GoodsCourse.java
  28. 43 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/GoodsCourseTeacher.java
  29. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsCourseTeacherMapper.java
  30. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsCourseTeacherService.java
  31. 142 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsCourseTeacherServiceImpl.java
  32. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  33. 46 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsCourseTeacherVo.java
  34. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsCourseVo.java
  35. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordAddBo.java
  36. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordEditBo.java
  37. 4 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordQueryBo.java
  38. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserBankRecord.java
  39. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserBankRecordVo.java
  40. 66 3
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseChapterSectionMapper.xml
  41. 67 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseModuleChapterMapper.xml
  42. 6 2
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsCourseMapper.xml
  43. 64 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsCourseTeacherMapper.xml
  44. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.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);
+    }
 
 }

+ 9 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/course/CourseController.java

@@ -119,6 +119,15 @@ public class CourseController extends BaseController {
         return AjaxResult.success(list);
     }
 
+    @ApiOperation("查询章下的节卷列表")
+    @GetMapping("/sectionExamList")
+    public AjaxResult<List<CourseUserChapterSectionVo>> sectionExamList(CourseMenuQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        List<CourseUserChapterSectionVo> list = iCourseChapterSectionService.sectionExamList(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);
+    }
+
+
+}

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -892,6 +892,7 @@ public class WxLoginService implements IWxLoginService {
         obj.put("page", "pages4/courseTopic/goodsTopic");
         obj.put("scene",String.format("topicId=%s",topicId));
         obj.put("env_version",enCodeVersion);
+//        obj.put("env_version","trial");
         String result = HttpUtils.sendPost(url, obj);
         return result;
     }

+ 18 - 12
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/impl/ActivityRecommendServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
@@ -176,18 +177,23 @@ public class ActivityRecommendServiceImpl extends ServiceImpl<ActivityRecommendM
             return result;
         }
         List<ActivityRecommendGoods> list = page.getRecords();
-        List<ActivityRecommendGoodsVo> listVos = list.stream().map(item -> {
-            ActivityRecommendGoodsVo vo = new ActivityRecommendGoodsVo();
-            BeanUtil.copyProperties(item, vo);
-            Goods goods = iGoodsService.getById(item.getGoodsId());
-            vo.setGoodsName(goods.getGoodsName());
-            vo.setGoodsType(goods.getGoodsType());
-            vo.setCoverUrl(goods.getCoverUrl());
-            vo.setYear(goods.getYear());
-            vo.setStandPrice(goods.getStandPrice());
-            vo.setLinePrice(goods.getLinePrice());
-            return vo;
-        }).collect(Collectors.toList());
+        List<ActivityRecommendGoodsVo> listVos = new ArrayList<>();
+        for (ActivityRecommendGoods item : list) {
+            Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>()
+                    .eq(Goods::getGoodsId, item.getGoodsId())
+                    .eq(Goods::getGoodsStatus, 1));
+            if (ObjectUtils.isNotNull(goods)){
+                ActivityRecommendGoodsVo vo = new ActivityRecommendGoodsVo();
+                BeanUtil.copyProperties(item, vo);
+                vo.setGoodsName(goods.getGoodsName());
+                vo.setGoodsType(goods.getGoodsType());
+                vo.setCoverUrl(goods.getCoverUrl());
+                vo.setYear(goods.getYear());
+                vo.setStandPrice(goods.getStandPrice());
+                vo.setLinePrice(goods.getLinePrice());
+                listVos.add(vo);
+            }
+        }
         result.setTotal(page.getTotal());
         result.setRows(listVos);
         result.setCode(200);

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

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseChapterSectionMapper.java

@@ -26,6 +26,8 @@ public interface CourseChapterSectionMapper extends BaseMapper<CourseChapterSect
 
     List<CourseUserChapterSectionVo> examList(CourseMenuQueryBo bo);
 
+    List<CourseUserChapterSectionVo> sectionExamList(CourseMenuQueryBo bo);
+
     Integer rebuildCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
                          @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
 
@@ -38,6 +40,9 @@ public interface CourseChapterSectionMapper extends BaseMapper<CourseChapterSect
     Integer learningExamCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
                           @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
 
+    Integer learningSectionExamCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
+                              @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId,@Param("sectionId") Long sectionId);
+
     Long getStudyDuration(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
                           @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
 }

+ 6 - 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,9 @@ 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);
+
+    Integer learningExamCheck(@Param("typeId") Long typeId,@Param("gradeId") Long gradeId,
+                              @Param("userId") Long userId,@Param("moduleId") Long moduleId,@Param("chapterId") Long chapterId,@Param("examId") Long examId,@Param("courseId") Long courseId);
 }

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

@@ -58,4 +58,6 @@ public interface ICourseChapterSectionService extends IService<CourseChapterSect
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
     List<CourseUserChapterSectionVo> sectionList(CourseMenuQueryBo bo);
+
+	List<CourseUserChapterSectionVo> sectionExamList(CourseMenuQueryBo bo);
 }

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

@@ -11,10 +11,7 @@ import com.zhongzheng.modules.course.domain.CourseStreamingBusiness;
 import com.zhongzheng.modules.course.mapper.CourseChapterMapper;
 import com.zhongzheng.modules.course.mapper.CourseChapterSectionMapper;
 import com.zhongzheng.modules.course.service.ICourseChapterSectionService;
-import com.zhongzheng.modules.course.vo.CourseChapterSectionVo;
-import com.zhongzheng.modules.course.vo.CourseUserChapterSectionVo;
-import com.zhongzheng.modules.course.vo.CourseUserMenuVo;
-import com.zhongzheng.modules.course.vo.CourseUserVo;
+import com.zhongzheng.modules.course.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -146,8 +143,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)) {
@@ -189,4 +186,16 @@ public class CourseChapterSectionServiceImpl extends ServiceImpl<CourseChapterSe
         }
         return courseUserChapterSectionVos;
     }
+
+    @Override
+    public List<CourseUserChapterSectionVo> sectionExamList(CourseMenuQueryBo bo) {
+        List<CourseUserChapterSectionVo> examList = baseMapper.sectionExamList(bo);
+        for(CourseUserChapterSectionVo vo : examList){
+            Integer learning = baseMapper.learningSectionExamCheck(0L, vo.getGradeId(), bo.getUserId(), bo.getModuleId(), bo.getChapterId(), vo.getTypeId(),bo.getCourseId(),vo.getSectionId());
+            if(Validator.isNotEmpty(learning)){
+                vo.setLearning(new Long(learning));
+            }
+        }
+        return examList;
+    }
 }

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

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

@@ -1,7 +1,9 @@
 package com.zhongzheng.modules.course.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.toolkit.CollectionUtils;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.course.bo.*;
 import com.zhongzheng.modules.course.domain.CourseModuleChapter;
@@ -107,6 +109,17 @@ public class CourseModuleChapterServiceImpl extends ServiceImpl<CourseModuleChap
     @Override
     public List<CourseUserModuleChapterVo> chapterList(CourseMenuQueryBo bo) {
         List<CourseUserModuleChapterVo> courseUserModuleChapterVos = baseMapper.chapterList(bo);
+        if (!CollectionUtils.isEmpty(courseUserModuleChapterVos)) {
+            List<CourseUserModuleChapterVo> examList = baseMapper.examList(bo);
+            for(CourseUserModuleChapterVo vo : examList){
+                Integer learning = baseMapper.learningExamCheck(0L, vo.getGradeId(), bo.getUserId(), bo.getModuleId(), bo.getChapterId(), vo.getTypeId(),bo.getCourseId());
+                if(Validator.isNotEmpty(learning)){
+                    vo.setLearning(new Long(learning));
+                }
+            }
+            courseUserModuleChapterVos.addAll(examList);
+        }
+
         //获得重修目录
         if (bo.getRebuild() != null && bo.getRebuild() == 1){
             for (CourseUserModuleChapterVo courseUserModuleChapterVo : courseUserModuleChapterVos) {

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

@@ -20,6 +20,7 @@ import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.wx.service.IWxLoginService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -54,6 +55,9 @@ public class CourseTopicServiceImpl extends ServiceImpl<CourseTopicMapper, Cours
     @Autowired
     private IWxLoginService wxLoginService;
 
+    @Value("${liveGotoURL}")
+    private String liveGotoURL;
+
     @Override
     public CourseTopicVo queryById(Long topicId){
         CourseTopic db = this.baseMapper.selectById(topicId);
@@ -74,9 +78,11 @@ public class CourseTopicServiceImpl extends ServiceImpl<CourseTopicMapper, Cours
         lqw.eq( CourseTopic::getStatus, 1);
         List<CourseTopicVo> courseTopicVos = entity2Vo(this.list(lqw));
         courseTopicVos.forEach(item -> {
-            //todo 小程序二维码和PC链接
+            //小程序二维码和PC链接
             String enCode = wxLoginService.getTopicEnCode(item.getTopicId());
             item.setEnCode(enCode);
+            String url = String.format("%s%s?topicId=%s", liveGotoURL,"goodsTopic",item.getTopicId());
+            item.setEnCodePC(url);
         });
         return courseTopicVos;
     }

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

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

@@ -75,4 +75,30 @@ 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;
+	@ApiModelProperty("1已学习")
+	private Long learning;
 }

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

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamRecommendGoodsQueryBo.java

@@ -25,6 +25,7 @@ public class ExamRecommendGoodsQueryBo implements Serializable {
     @ApiModelProperty("分页参数")
     private Integer pageNum;
 
-
+    @ApiModelProperty("1小程序 2PC网站")
+    private Integer platform;
 
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java

@@ -334,10 +334,12 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
         if (ObjectUtils.isNull(business)){
             throw new CustomException("获取试卷业务层次信息失败");
         }
+        Integer platform = ObjectUtils.isNull(bo.getPlatform())?1:bo.getPlatform();
         //获取推荐位信息
         List<ActivityRecommend> list = iActivityRecommendService.list(new LambdaQueryWrapper<ActivityRecommend>()
                 .eq(ActivityRecommend::getEducationTypeId, business.getEducationTypeId())
                 .eq(ActivityRecommend::getBusinessId, business.getBusinessId())
+                .eq(ActivityRecommend::getPlatform,platform)
                 .eq(ActivityRecommend::getType, 1)
                 .eq(ActivityRecommend::getStatus,1));
         if (CollectionUtils.isEmpty(list)){

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

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -324,6 +324,9 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         update.setUpdateTime(DateUtils.getNowTime());
         //课程列表
         if(bo.getCourseList()!=null){
+            GoodsCourseQueryBo courseQueryBo = new GoodsCourseQueryBo();
+            courseQueryBo.setGoodsId(bo.getGoodsId());
+            List<GoodsCourseVo> courseVoList = iGoodsCourseService.queryList(courseQueryBo);
             iGoodsCourseService.remove(new LambdaQueryWrapper<GoodsCourse>().eq(GoodsCourse::getGoodsId, bo.getGoodsId()));
             Collection<GoodsCourse> coll = new HashSet<>();
             for(int i=0;i<bo.getCourseList().size();i++){
@@ -332,6 +335,10 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                 addItem.setGoodsId(update.getGoodsId());
                 addItem.setCourseId(item.getCourseId());
                 addItem.setSort(item.getSort());
+                Optional<GoodsCourseVo> first = courseVoList.stream().filter(course -> Objects.equals(course.getCourseId(),item.getCourseId())).findFirst();
+                if (first.isPresent()) {
+                    addItem.setAliasName(first.get().getAliasName());
+                }
                 coll.add(addItem);
             }
             iGoodsCourseService.saveBatch(coll);

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

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordAddBo.java

@@ -69,4 +69,8 @@ public class UserBankRecordAddBo {
     /** 准确率 */
     @ApiModelProperty("准确率")
     private BigDecimal rightRate;
+    /** 题卷类型 1章卷 2节卷 3模块卷 */
+    @ApiModelProperty("题卷类型 1章卷 2节卷 3模块卷")
+    private Integer type;
+
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordEditBo.java

@@ -72,4 +72,8 @@ public class UserBankRecordEditBo {
     /** 准确率 */
     @ApiModelProperty("准确率")
     private BigDecimal rightRate;
+    /** 题卷类型 1章卷 2节卷 3模块卷 */
+    @ApiModelProperty("题卷类型 1章卷 2节卷 3模块卷")
+    private Integer type;
+
 }

+ 4 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordQueryBo.java

@@ -35,9 +35,9 @@ public class UserBankRecordQueryBo extends BaseEntity {
 	private String isAsc;
 
 
-	/** 1真题模拟考试 2试卷练习 3真题练习 */
-	@ApiModelProperty("1真题模拟考试 2试卷练习 3真题练习")
-	private Long type;
+	/** 题卷类型 1章卷 2节卷 3模块卷 */
+	@ApiModelProperty("题卷类型 1章卷 2节卷 3模块卷")
+	private Integer type;
 	/** 真题模拟ID */
 	@ApiModelProperty("真题模拟ID")
 	private Long simulateId;
@@ -79,4 +79,5 @@ public class UserBankRecordQueryBo extends BaseEntity {
 	private Long gradeId;
 	private Integer currentStatus;
 
+
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserBankRecord.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.user.domain;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -62,4 +63,7 @@ private static final long serialVersionUID=1L;
     private Integer currentStatus;
     /** 准确率 */
     private BigDecimal rightRate;
+
+    /** 题卷类型 1章卷 2节卷 3模块卷 */
+    private Integer type;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserBankRecordVo.java

@@ -89,4 +89,8 @@ public class UserBankRecordVo {
 	@Excel(name = "当前状态 1 当前状态 0过往状态")
 	@ApiModelProperty("当前状态 1 当前状态 0过往状态")
 	private Integer currentStatus;
+	/** 题卷类型 1章卷 2节卷 3模块卷 */
+	@ApiModelProperty("题卷类型 1章卷 2节卷 3模块卷")
+	private Integer type;
+
 }

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

@@ -135,7 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 WHERE
                     ubr.user_id = #{userId}
                   AND ubr.exam_id = e.exam_id
-                  AND grade_id = #{gradeId}) do_num,
+                  AND grade_id = #{gradeId} and `type` = 1) do_num,
             e.exam_id as type_id,
             #{gradeId} as grade_id,
             2 as type,
@@ -149,16 +149,58 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                any_value ( ubr.performance ) performance,
                                ubr.exam_id
                            FROM
-                               ( SELECT record_id, report_status, exam_id, performance FROM user_bank_record WHERE user_id = #{userId} AND grade_id = #{gradeId} ORDER BY record_id DESC LIMIT 9999 ) ubr
+                               ( SELECT record_id, report_status, exam_id, performance FROM user_bank_record WHERE user_id = #{userId} AND grade_id = #{gradeId} and `type` = 1 ORDER BY record_id DESC LIMIT 9999 ) ubr
                            GROUP BY
                                ubr.exam_id)ubr1 on e.exam_id = ubr1.exam_id
         where 1=1
           and cme.chapter_id = #{chapterId}
           and cme.course_id = #{courseId}
-        <if test="moduleId == null ">
+         and cme.type = 1
+        <if test="moduleId != null ">
             and cme.module_id = #{moduleId}
         </if>
+    </select>
 
+    <select id="sectionExamList" parameterType="com.zhongzheng.modules.course.bo.CourseMenuQueryBo"  resultMap="CourseUserChapterSectionVo">
+        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.exam_id = e.exam_id
+        AND grade_id = #{gradeId} and `type` = 2) 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.exam_id
+        FROM
+        ( SELECT record_id, report_status, exam_id, performance FROM user_bank_record WHERE user_id = #{userId} AND grade_id = #{gradeId} and `type` = 2 ORDER BY record_id DESC LIMIT 9999 ) ubr
+        GROUP BY
+        ubr.exam_id)ubr1 on e.exam_id = ubr1.exam_id
+        where 1=1
+        and cme.chapter_id = #{chapterId}
+        and cme.course_id = #{courseId}
+        and cme.type = 2
+        <if test="moduleId != null ">
+            and cme.module_id = #{moduleId}
+        </if>
     </select>
 
     <select id="getListTotalTime" parameterType="Long"  resultType="java.lang.Long">
@@ -237,6 +279,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           AND ubr.chapter_id = #{chapterId}
           AND ubr.exam_id = #{examId}
           AND ubr.current_status = 1
+          AND ubr.type = 1
+        ORDER BY
+            ubr.record_id DESC
+            LIMIT 1
+    </select>
+
+    <select id="learningSectionExamCheck" parameterType="map"  resultType="integer">
+        SELECT
+            IFNULL(MAX(ubr.report_status),-1)
+        FROM
+            user_bank_record ubr
+        WHERE
+            ubr.grade_id = #{gradeId}
+          AND ubr.user_id = #{userId}
+          AND ubr.module_id = #{moduleId}
+          AND ubr.course_id=#{courseId}
+          AND ubr.chapter_id = #{chapterId}
+          AND ubr.section_id = #{sectionId}
+          AND ubr.exam_id = #{examId}
+          AND ubr.current_status = 1
+          AND ubr.type = 2
         ORDER BY
             ubr.record_id DESC
             LIMIT 1

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

@@ -30,6 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="sort" column="c_sort"/>
         <result property="id" column="id"/>
         <result property="gradeId" column="grade_id"/>
+        <result property="moduleId" column="module_id"/>
 
         <result property="code" column="code"/>
         <result property="name" column="name"/>
@@ -37,6 +38,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 +70,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 +84,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.exam_id = e.exam_id
+        AND grade_id = #{gradeId} and `type` = 3) 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.exam_id
+        FROM
+        ( SELECT record_id, report_status, exam_id, performance FROM user_bank_record WHERE user_id = #{userId} AND grade_id = #{gradeId} and `type` = 3 ORDER BY record_id DESC LIMIT 9999 ) ubr
+        GROUP BY
+        ubr.exam_id)ubr1 on e.exam_id = ubr1.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)
@@ -89,4 +138,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           and (ups.`status` = 0 or ups.`status` = 3)
     </select>
 
+    <select id="learningExamCheck" parameterType="map"  resultType="integer">
+        SELECT
+            IFNULL(MAX(ubr.report_status),-1)
+        FROM
+            user_bank_record ubr
+        WHERE
+            ubr.grade_id = #{gradeId}
+          AND ubr.user_id = #{userId}
+          AND ubr.module_id = #{moduleId}
+          AND ubr.course_id=#{courseId}
+          AND ubr.exam_id = #{examId}
+          AND ubr.current_status = 1
+          AND ubr.type = 3
+        ORDER BY
+            ubr.record_id DESC
+            LIMIT 1
+    </select>
+
 </mapper>

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

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml

@@ -163,8 +163,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="chapterNum ==1">
         ,(SELECT COUNT(m.id)+(SELECT COUNT(p.id) FROM course_module_chapter p LEFT JOIN course_menu m on m.menu_id = p.module_id LEFT JOIN goods_course gc on gc.course_id = m.course_id  where gc.goods_id =  g.goods_id and m.type in(1))+(SELECT COUNT(cmc.id) FROM course_module_chapter cmc  LEFT JOIN course_menu m on m.menu_id = cmc.module_id LEFT JOIN goods_course gc on gc.course_id = m.course_id where gc.goods_id =  g.goods_id and m.type in(2)) FROM course_menu m LEFT JOIN goods_course gc on gc.course_id = m.course_id  where gc.goods_id =  g.goods_id  and m.type in(3)) as chapter_num
         </if>
+        ,(case WHEN g.goods_type =1 then (SELECT count(*) FROM goods_course gc LEFT JOIN course c on gc.course_id = c.course_id where gc.goods_id =g.goods_id  and c.course_show=1) ELSE 0 end) as course_num
         <if test="goodsType ==1">
-        , (SELECT count(*) FROM goods_course where goods_id =g.goods_id ) as course_num
         , (SELECT count(*) FROM class_grade cg  LEFT JOIN class_grade_goods cgg on cg.grade_id = cgg.grade_id where  cgg.goods_id = g.goods_id and cg.`status` = 1 ) as grade_num
         </if>
         <if test="goodsType ==2">