Browse Source

Merge branch 'ljc_dev1.2' into dev_1_2_20220802

liujunchi 3 years ago
parent
commit
23acedc15b

+ 17 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/AdminCourseGroupController.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.LiveSaleOutDto;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
@@ -92,6 +93,22 @@ public class AdminCourseGroupController extends BaseController {
     }
 
 
+    @ApiOperation(value = "直播课下架")
+    @PostMapping(value="/live/saleOut")
+    public HttpResponseResult<Boolean> liveSaleOut(@RequestBody @Valid LiveSaleOutDto dto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        if (dto.getCourseGourpId() == null) {
+            return failed("课程组id不能为空");
+        }
+
+        return succeed(courseGroupService.liveSaleOut(dto));
+    }
+
+
+
     @ApiOperation(value = "老师详情-直播课购买学员信息", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/live/student", consumes="application/json", produces="application/json")
     public HttpResponseResult<PageInfo<LiveCourseGroupStudentVo>> student(@Valid @RequestBody LiveCourseGroupStudentSearch query) {

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -180,7 +180,7 @@ public class MusicSheetController extends BaseController {
     @PostMapping("/state/{id}")
     @ApiOperation(value = "启用/停用", notes = "传入id")
     @PreAuthorize("@pcs.hasPermissions('music/sheet/state')")
-    public HttpResponseResult<Boolean> state(@ApiParam(value = "曲目编号", required = true)  @PathVariable Long id,@RequestParam String reason) {
+    public HttpResponseResult<Boolean> state(@ApiParam(value = "曲目编号", required = true)  @PathVariable Long id, String reason) {
         if (StringUtil.isEmpty(id)) {
             return failed("参数不能为空");
         }

+ 53 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/LiveSaleOutDto.java

@@ -0,0 +1,53 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * Description 直播课下架
+ *
+ * @author liujunchi
+ * @date 2022-08-03
+ */
+@ApiModel("直播课下架参数")
+public class LiveSaleOutDto {
+
+    @NotNull(message = "课程组名不能为空")
+    @ApiModelProperty(value = "直播课课程组id",required = true)
+    private Long courseGourpId;
+
+    @NotNull(message = "上下架状态不能为空")
+    @ApiModelProperty(value = "上下架  0:下架 1:上架",required = true)
+    private Long status;
+
+
+    @ApiModelProperty("下架原因")
+    private String reason;
+
+
+    public Long getCourseGourpId() {
+        return courseGourpId;
+    }
+
+    public void setCourseGourpId(Long courseGourpId) {
+        this.courseGourpId = courseGourpId;
+    }
+
+    public Long getStatus() {
+        return status;
+    }
+
+    public void setStatus(Long status) {
+        this.status = status;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+}

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseGroupEnum.java

@@ -9,8 +9,11 @@ public enum CourseGroupEnum implements BaseEnum<String,CourseGroupEnum> {
     DISSOLVE( "未成课"),//解散课程
     CANCEL("已取消"),//课程已取消
     APPLY("报名中"),//开售中可以报名
-    NOT_SALE( "未开售");//还未到开售日期
+    NOT_SALE( "未开售"),//还未到开售日期
+    OUT_SALE( "下架"),//下架
 
+
+    ;
     @EnumValue
     private String code;
 

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -92,7 +92,9 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_LIVE_COMPLETION_FAIL("直播课成课失败"),
     SMS_TOMORROW_COURSE_REMINDER("明日课程提醒(每晚9点)(短信)"),
 
-    MUSIC_SHEET_STOP_SHELVES_REASON("老师曲目下架通知"),
+    MUSIC_SHEET_OUT_SALE_REASON("老师曲目下架通知"),
+    LIVE_COURSE_OUT_SALE_REASON("老师直播课下架通知"),
+
 
     ;
 

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.CourseGroupDao;
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto;
+import com.yonge.cooleshow.biz.dal.dto.LiveSaleOutDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
@@ -330,5 +331,12 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return
      */
     ShareProfitVo shareLiveCourseProfit(SysUser sysUser, Long liveGroupId);
+
+    /**
+     * 课程上架/下架
+     *
+     * @return
+     */
+    Boolean liveSaleOut(LiveSaleOutDto dto);
 }
 

+ 56 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.dao.CourseGroupDao;
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto.CoursePlanDto;
+import com.yonge.cooleshow.biz.dal.dto.LiveSaleOutDto;
 import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
@@ -1071,13 +1072,13 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         List<CourseGroup> courseGroupList = this.list(Wrappers.<CourseGroup>lambdaQuery()
                 .eq(CourseGroup::getType, CourseScheduleEnum.LIVE.getCode())
                 .eq(CourseGroup::getSalesEndDate, LocalDate.now().plusDays(-1))
-                .eq(CourseGroup::getStatus, CourseGroupEnum.APPLY.getCode()));
+                .in(CourseGroup::getStatus, CourseGroupEnum.APPLY.getCode(),CourseGroupEnum.OUT_SALE.getCode()));
         if (CollectionUtils.isEmpty(courseGroupList)) {
             return;
         }
         courseGroupList.forEach(courseGroup -> {
             try {
-                if (courseGroup.getPreStudentNum() >= courseGroup.getMixStudentNum()) {
+                if (courseGroup.getPreStudentNum() >= courseGroup.getMixStudentNum() &&courseGroup.getStatus().equals(CourseGroupEnum.APPLY.getCode())) {
                     //人数达标则修改课程组为进行中状态
                     courseGroup.setStatus(CourseGroupEnum.ING.getCode());
                     //创建群聊 并添加人员到群中
@@ -1135,6 +1136,10 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      * @param courseGroup 课程组
      */
     private void sendMessage(CourseGroup courseGroup) {
+        // 直播课下架后,不推送直播课成课失败消息
+        if (courseGroup.getStatus().equals(CourseGroupEnum.OUT_SALE.getCode())) {
+            return;
+        }
         // 发短信
         try {
             SysUser user = sysUserFeignService.queryUserById(courseGroup.getTeacherId());
@@ -1266,5 +1271,54 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         result.setAvatar(sysUser.getAvatar());
         return result;
     }
+
+    @Override
+    @Transactional
+    public Boolean liveSaleOut(LiveSaleOutDto dto) {
+
+
+        CourseGroup liveCourseGroupVo = this.getById(dto.getCourseGourpId());
+        if (liveCourseGroupVo == null || !CourseScheduleEnum.LIVE.getCode().equals(liveCourseGroupVo.getType())) {
+            throw new BizException("没找到课程组信息");
+        }
+
+        // 条件检查
+        if(dto.getStatus() == 0 && StringUtils.isEmpty(dto.getReason())) {
+            throw  new BizException("请填写下架原因");
+        } else if (dto.getStatus() == 0  && !CourseGroupEnum.APPLY.getCode().equals(liveCourseGroupVo.getStatus())) {
+            throw new BizException("只能下架销售中的课程组");
+        } else if (dto.getStatus() == 1  && !CourseGroupEnum.OUT_SALE.getCode().equals(liveCourseGroupVo.getStatus())) {
+            throw new BizException("只能上架被下架的课程组");
+        } else if ( new Date().compareTo(liveCourseGroupVo.getSalesEndDate()) > 0) {
+            throw new BizException("课程组售卖时间已结束,不能操作");
+        }
+
+        if (dto.getStatus() == 0) {
+            liveCourseGroupVo.setStatus(CourseGroupEnum.OUT_SALE.getCode());
+
+            // 发送下架消息
+            sendOutSaleMessage(dto, liveCourseGroupVo);
+
+        } else {
+            liveCourseGroupVo.setStatus(CourseGroupEnum.APPLY.getCode());
+        }
+
+
+        return this.updateById(liveCourseGroupVo);
+    }
+
+    private void sendOutSaleMessage(LiveSaleOutDto dto, CourseGroup liveCourseGroupVo) {
+        // 发送课程下架通知
+        try {
+            SysUser user = sysUserFeignService.queryUserById(liveCourseGroupVo.getTeacherId());
+            Map<Long, String> receivers = new HashMap<>();
+            receivers.put(user.getId(), user.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.LIVE_COURSE_OUT_SALE_REASON,
+                                               receivers, null, 0, null, ClientEnum.TEACHER.getCode(),
+                                               liveCourseGroupVo.getName(), dto.getReason());
+        } catch (Exception e) {
+            log.warn("直播课下架推送发送失败,{}", e.getMessage());
+        }
+    }
 }
 

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseGroupVo.java

@@ -60,6 +60,17 @@ public class LiveCourseGroupVo {
     @ApiModelProperty("订单号")
     private String orderNo;
 
+    @ApiModelProperty(value = "类型 practice陪练课 live直播课")
+    private String type;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
     public Long getCourseNum() {
         return courseNum;
     }

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -289,6 +289,7 @@
             cg.course_num_ as courseNum,
             cg.created_time_ as createTime,
             cg.course_introduce_ as courseIntroduce,
+        cg.type_ as type,
             s.name_ as subjectName
         from course_group cg
          left join course_schedule_student_payment cssp on cg.id_ = cssp.course_group_id_

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseGroupController.java

@@ -57,7 +57,7 @@ public class TeacherCourseGroupController extends BaseController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "teacherId", dataType = "Long", value = "老师id"),
             @ApiImplicitParam(name = "search", dataType = "String", value = "关键字"),
-            @ApiImplicitParam(name = "groupStatus", dataType = "String", value = "课程组状态  ING(进行中)  NOT_SALE(未开售,未上架) APPLY(报名中,销售中) COMPLETE(已完成)"),
+            @ApiImplicitParam(name = "groupStatus", dataType = "String", value = "课程组状态  ING(进行中)  NOT_SALE(未开售,未上架) APPLY(报名中,销售中) COMPLETE(已完成) OUT_SALE(已下架)"),
             @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
             @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
             @ApiImplicitParam(name = "myself", dataType = "Boolean", value = "查看我自己的直播课"),