소스 검색

Merge remote-tracking branch 'origin/master'

liweifan 3 년 전
부모
커밋
4ddcb9f1b8
24개의 변경된 파일353개의 추가작업 그리고 123개의 파일을 삭제
  1. 39 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/config/RedisConfig.java
  2. 40 57
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsArticleController.java
  3. 18 2
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsAuthRecordController.java
  4. 3 6
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsArticleDao.java
  5. 1 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsAuthRecordDao.java
  6. 11 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsAuthRecordSearch.java
  7. 6 3
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsArticle.java
  8. 7 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsAuthRecord.java
  9. 23 6
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsArticleService.java
  10. 8 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsAuthRecordService.java
  11. 0 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsConfigLabelService.java
  12. 107 4
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java
  13. 27 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsAuthRecordServiceImpl.java
  14. 8 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/valid/OtherGroup.java
  15. 0 11
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsAuthRecordVo.java
  16. 7 7
      cooleshow-bbs/src/main/resources/config/mybatis/BbsArticleMapper.xml
  17. 4 2
      cooleshow-bbs/src/main/resources/config/mybatis/BbsAuthRecordMapper.xml
  18. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  19. 9 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  20. 14 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java
  21. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseStudent.java
  22. 11 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java
  23. 3 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  24. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

+ 39 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/config/RedisConfig.java

@@ -0,0 +1,39 @@
+package com.yonge.cooleshow.bbs.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
+        //为了开发方便一般直接使用 <String, Object>
+        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
+        template.setConnectionFactory(factory);
+        //Json序列化配置
+        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+        //String 的序列化
+        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+        // key采用String的序列化方式
+        template.setKeySerializer(stringRedisSerializer);
+        // hash的key也采用String的序列化方式
+        template.setHashKeySerializer(stringRedisSerializer);
+        // value序列化方式采用jackson
+        template.setValueSerializer(jackson2JsonRedisSerializer);
+        // hash的value序列化方式采用jackson
+        template.setHashValueSerializer(jackson2JsonRedisSerializer);
+        template.afterPropertiesSet();
+        return template;
+    }
+}

+ 40 - 57
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsArticleController.java

@@ -5,25 +5,27 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.cooleshow.bbs.valid.AddGroup;
+import com.yonge.cooleshow.bbs.valid.OtherGroup;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 import com.yonge.toolset.mybatis.support.PageUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
-
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.service.BbsArticleService;
 
+import java.util.List;
+import java.util.Map;
+
 @RestController
 @RequestMapping("/bbsArticle")
 @Api(value = "文章", tags = "文章")
@@ -34,7 +36,7 @@ public class BbsArticleController extends BaseController {
     private BbsArticleService bbsArticleService;
 
     @PostMapping("/addArticle")
-    @ApiOperation(value = "发布文章")
+    @ApiOperation(value = "详情-发布文章")
     public HttpResponseResult addArticle(@Validated(AddGroup.class) @RequestBody BbsArticle bbsArticle) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
@@ -45,66 +47,47 @@ public class BbsArticleController extends BaseController {
         return succeed();
     }
 
-    /**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<BbsArticleVo> detail(@PathVariable("id") Long id) {
-        return succeed(bbsArticleService.detail(id));
-    }
-
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入bbsArticleSearch")
-    public HttpResponseResult<PageInfo<BbsArticleVo>> page(@RequestBody BbsArticleSearch query) {
-        IPage<BbsArticleVo> pages = bbsArticleService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-
+    @PostMapping("/updateArticle")
+    @ApiOperation(value = "详情-修改文章")
+    public HttpResponseResult updateArticle(@Validated(UpdateGroup.class) @RequestBody BbsArticle bbsArticle) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        bbsArticleService.updateArticle(bbsArticle, user.getId());
+        return succeed();
     }
 
-    /**
-     * 修改
-     */
-    @PostMapping("/update")
-    @ApiOperation(value = "修改", notes = "传入bbsArticle")
-    public HttpResponseResult update(@Valid @RequestBody BbsArticle bbsArticle) {
-        return status(bbsArticleService.updateById(bbsArticle));
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ids", dataType = "List", value = "文章id集合"),
+    })
+    @PostMapping("/deleteArticle")
+    @ApiOperation(value = "详情-删除文章")
+    public HttpResponseResult deleteArticle(@RequestBody Map<String, List<Long>> ids) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        bbsArticleService.deleteArticle(ids, user);
+        return succeed();
     }
 
-    /**
-     * 新增或修改
-     */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入bbsArticle")
-    public HttpResponseResult submit(@Valid @RequestBody BbsArticle bbsArticle) {
-        return status(bbsArticleService.saveOrUpdate(bbsArticle));
+    @PostMapping("/top")
+    @ApiOperation(value = "后台管理-置顶文章")
+    public HttpResponseResult articleTop(@Validated(OtherGroup.class) @RequestBody BbsArticle article) {
+        bbsArticleService.articleTop(article);
+        return succeed();
     }
 
     /**
-     * 删除
+     * 首页
      */
-    @PostMapping("/remove")
-    @ApiOperation(value = "逻辑删除", notes = "传入ids")
-    public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-            return failed("参数不能为空");
-        }
-        return status(bbsArticleService.removeByIds(StringUtil.toLongList(ids)));
+    @PostMapping("/home")
+    @ApiOperation(value = "首页", notes = "传入bbsArticleSearch")
+    public HttpResponseResult<PageInfo<BbsArticleVo>> home(@RequestBody BbsArticleSearch query) {
+        query.setDelFlag(false);
+        query.setStatus(ArticleEnum.PASS);
+        IPage<BbsArticleVo> pages = bbsArticleService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
     }
-
-
-	/**
-	 * 首页
-	 */
-	@PostMapping("/home")
-	@ApiOperation(value = "首页", notes = "传入bbsArticleSearch")
-	public HttpResponseResult<PageInfo<BbsArticleVo>> home(@RequestBody BbsArticleSearch query) {
-		query.setDelFlag(false);
-		query.setStatus(ArticleEnum.PASS);
-		IPage<BbsArticleVo> pages = bbsArticleService.selectPage(PageUtil.getPage(query), query);
-		return succeed(PageUtil.pageInfo(pages));
-	}
 }

+ 18 - 2
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsAuthRecordController.java

@@ -2,8 +2,11 @@ package com.yonge.cooleshow.bbs.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.bbs.dto.search.BbsAuthRecordSearch;
+import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
 import com.yonge.cooleshow.bbs.service.BbsAuthRecordService;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -12,9 +15,10 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-
 @RestController
 @RequestMapping("/bbsAuthRecord")
 @Api(value = "文章审核", tags = "文章审核")
@@ -25,9 +29,21 @@ public class BbsAuthRecordController extends BaseController {
     private BbsAuthRecordService bbsAuthRecordService;
 
     @PostMapping("/page")
-    @ApiOperation(value = "查询文章审核列表")
+    @ApiOperation(value = "后台管理-审核-查询文章审核列表")
     public HttpResponseResult<PageInfo<BbsAuthRecordVo>> page(@RequestBody BbsAuthRecordSearch query) {
         IPage<BbsAuthRecordVo> pages = bbsAuthRecordService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
     }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "后台管理-审核-修改文章审核状态")
+    public HttpResponseResult<PageInfo<BbsAuthRecordVo>> updateAuditState(@Validated(UpdateGroup.class) @RequestBody BbsAuthRecord record) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        record.setVerifyUserId(user.getId());
+        bbsAuthRecordService.updateAuditState(record);
+        return succeed();
+    }
 }

+ 3 - 6
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsArticleDao.java

@@ -9,7 +9,6 @@ import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 
-
 public interface BbsArticleDao extends BaseMapper<BbsArticle> {
     /**
      * 发布文章
@@ -19,13 +18,11 @@ public interface BbsArticleDao extends BaseMapper<BbsArticle> {
     void addArticle(BbsArticle bbsArticle);
 
     /**
-     * 查询详情
+     * 删除文章
      *
-     * @author liweifan
-     * @date 2022-06-09 17:27:11
-     * @return: com.yonge.cooleshow.bbs.vo.BbsArticleVo
+     * @param list
      */
-    BbsArticleVo detail(@Param("id") Long id);
+    void deleteArticle(List<Long> list);
 
     /**
      * 分页查询

+ 1 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsAuthRecordDao.java

@@ -12,6 +12,7 @@ import java.util.List;
 public interface BbsAuthRecordDao extends BaseMapper<BbsAuthRecord> {
     /**
      * 查询文章审核列表
+     *
      * @param page
      * @param bbsArticle
      * @return

+ 11 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsAuthRecordSearch.java

@@ -20,6 +20,9 @@ public class BbsAuthRecordSearch extends QueryInfo {
     @ApiModelProperty(value = "审核中:DOING,通过:PASS,驳回:REJECT")
     private ArticleEnum auditState;
 
+    @ApiModelProperty("0:正常 1:删除")
+    private Boolean delFlag;
+
     @ApiModelProperty(value = "开始时间")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -56,6 +59,14 @@ public class BbsAuthRecordSearch extends QueryInfo {
         this.auditState = auditState;
     }
 
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
     public Date getStartTime() {
         return startTime;
     }

+ 6 - 3
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsArticle.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
 import com.yonge.cooleshow.bbs.valid.AddGroup;
+import com.yonge.cooleshow.bbs.valid.OtherGroup;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -28,6 +30,7 @@ public class BbsArticle implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(value = "id_", type = IdType.AUTO)
+    @NotNull(groups = {UpdateGroup.class,OtherGroup.class}, message = "文章id不能为空")
     private Long id;
 
     @ApiModelProperty("发布者id")
@@ -36,17 +39,17 @@ public class BbsArticle implements Serializable {
 
     @ApiModelProperty("文章标题")
     @TableField(value = "title_")
-    @NotBlank(groups = {AddGroup.class},message = "标题不能为空")
+    @NotBlank(groups = {AddGroup.class}, message = "标题不能为空")
     private String title;
 
     @ApiModelProperty("文章内容")
     @TableField(value = "content_")
-    @NotBlank(groups = {AddGroup.class},message = "内容不能为空")
+    @NotBlank(groups = {AddGroup.class}, message = "内容不能为空")
     private String content;
 
     @ApiModelProperty("标签id")
     @TableField(value = "label_id_")
-    @NotNull(groups = {AddGroup.class},message = "标签id不能为空")
+    @NotNull(groups = {AddGroup.class}, message = "标签id不能为空")
     private Integer labelId;
 
     @ApiModelProperty("标签名称(冗余字段)")

+ 7 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsAuthRecord.java

@@ -6,10 +6,13 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -21,18 +24,21 @@ public class BbsAuthRecord implements Serializable {
 
     @ApiModelProperty("文章id")
     @TableField(value = "article_id_")
+    @NotNull(groups = {UpdateGroup.class}, message = "文章id不能为空")
     private Long articleId;
 
-    @ApiModelProperty("审核id")
+    @ApiModelProperty("审核id")
     @TableField(value = "verify_user_id_")
     private Long verifyUserId;
 
     @ApiModelProperty("审核中:DOING,通过:PASS,驳回:REJECT")
     @TableField(value = "audit_state_")
+    @NotNull(groups = {UpdateGroup.class}, message = "审核状态不能为空")
     private ArticleEnum auditState;
 
     @ApiModelProperty("审核理由")
     @TableField(value = "reason_")
+    @NotBlank(groups = {UpdateGroup.class}, message = "审核理由不能为空")
     private String reason;
 
     @TableField(value = "created_time_")

+ 23 - 6
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsArticleService.java

@@ -2,10 +2,14 @@ package com.yonge.cooleshow.bbs.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 文章 服务类
  *
@@ -13,21 +17,34 @@ import com.yonge.cooleshow.bbs.entity.BbsArticle;
  * @date 2022-06-09
  */
 public interface BbsArticleService extends IService<BbsArticle> {
-
     /**
-     * 发布文章
+     * 详情-发布文章
      *
      * @param bbsArticle
      */
     void addArticle(BbsArticle bbsArticle);
 
     /**
-     * 查询详情
+     * 详情-修改文章
      *
-     * @author liweifan
-     * @date 2022-06-09
+     * @param bbsArticle
+     */
+    void updateArticle(BbsArticle bbsArticle, Long userId);
+
+    /**
+     * 详情-删除文章
+     *
+     * @param ids
+     * @param user
+     */
+    void deleteArticle(Map<String, List<Long>> ids, SysUser user);
+
+    /**
+     * 后台管理-置顶文章
+     *
+     * @param article
      */
-    BbsArticleVo detail(Long id);
+    void articleTop(BbsArticle article);
 
     /**
      * 分页查询

+ 8 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsAuthRecordService.java

@@ -8,11 +8,18 @@ import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
 
 public interface BbsAuthRecordService extends IService<BbsAuthRecord> {
     /**
-     * 查询文章审核列表
+     * 后台管理-审核-查询文章审核列表
      *
      * @param page
      * @param query
      * @return
      */
     IPage<BbsAuthRecordVo> selectPage(IPage<BbsAuthRecordVo> page, BbsAuthRecordSearch query);
+
+    /**
+     * 后台管理-审核-修改文章审核状态
+     *
+     * @param record
+     */
+    void updateAuditState(BbsAuthRecord record);
 }

+ 0 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsConfigLabelService.java

@@ -15,7 +15,6 @@ import java.util.List;
  * @date 2022-06-09
  */
 public interface BbsConfigLabelService extends IService<BbsConfigLabel> {
-
     /**
      * 查询详情
      *

+ 107 - 4
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java

@@ -1,8 +1,17 @@
 package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao;
+import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
+import com.yonge.toolset.base.exception.BizException;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -11,23 +20,117 @@ import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
 import com.yonge.cooleshow.bbs.service.BbsArticleService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class BbsArticleServiceImpl extends ServiceImpl<BbsArticleDao, BbsArticle> implements BbsArticleService {
     private final static Logger log = LoggerFactory.getLogger(BbsArticleServiceImpl.class);
 
+    @Autowired
+    private BbsAuthRecordDao authRecordDao;
+
+    /**
+     * @Description: 详情-发布文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void addArticle(BbsArticle bbsArticle) {
         //状态为null,默认审核中,否则为草稿
         if (bbsArticle.getStatus() == null) {
             bbsArticle.setStatus(ArticleEnum.DOING);
-        } else bbsArticle.setStatus(ArticleEnum.DRAFT);
-        baseMapper.addArticle(bbsArticle);
+            baseMapper.addArticle(bbsArticle);
+
+            //新增审核记录
+            BbsAuthRecord authRecord = new BbsAuthRecord();
+            authRecord.setVerifyUserId(bbsArticle.getUserId());
+            authRecord.setArticleId(bbsArticle.getId());
+            authRecord.setAuditState(ArticleEnum.DOING);
+            authRecordDao.insert(authRecord);
+        } else {
+            bbsArticle.setStatus(ArticleEnum.DRAFT);
+            baseMapper.addArticle(bbsArticle);
+        }
+    }
+
+    /**
+     * @Description: 详情-修改文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateArticle(BbsArticle bbsArticle, Long userId) {
+        BbsArticle article = baseMapper.selectById(bbsArticle.getId());
+        if (article == null) {
+            throw new BizException("文章不存在");
+        }
+        if (!userId.equals(article.getUserId())) {
+            throw new BizException("只能修改自己的文章");
+        }
+
+        bbsArticle.setStatus(ArticleEnum.DOING);
+        baseMapper.updateById(bbsArticle);
+
+        //删除原审核记录
+        authRecordDao.delete(Wrappers.<BbsAuthRecord>lambdaQuery()
+                .eq(BbsAuthRecord::getArticleId, bbsArticle.getId())
+                .eq(BbsAuthRecord::getAuditState, ArticleEnum.DOING));
+
+        //新增审核记录
+        BbsAuthRecord authRecord = new BbsAuthRecord();
+        authRecord.setVerifyUserId(bbsArticle.getUserId());
+        authRecord.setArticleId(bbsArticle.getId());
+        authRecord.setAuditState(ArticleEnum.DOING);
+        authRecordDao.insert(authRecord);
+    }
+
+    /**
+     * @Description: 详情-删除文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteArticle(Map<String, List<Long>> ids, SysUser user) {
+        List<Long> list = ids.get("ids");
+        if (CollectionUtils.isEmpty(list)) {
+            throw new BizException("文章id不能为空");
+        }
+
+        //当前用户为管理员
+        if (user.getUserType().contains(SysUserType.SYSTEM.getCode())) {
+            baseMapper.deleteArticle(list);
+        } else {
+            List<BbsArticle> articles = baseMapper.selectBatchIds(list);
+            List<Long> idList = articles.stream().map(BbsArticle::getUserId).distinct().collect(Collectors.toList());
+            if (idList.size() != 1 || !user.getId().equals(idList.get(0))) {
+                throw new BizException("无法删除他人文章");
+            }
+            baseMapper.deleteArticle(list);
+        }
     }
 
+    /**
+     * @Description: 后台管理-置顶文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
     @Override
-    public BbsArticleVo detail(Long id) {
-        return baseMapper.detail(id);
+    @Transactional(rollbackFor = Exception.class)
+    public void articleTop(BbsArticle article) {
+        BbsArticle bbsArticle = baseMapper.selectById(article.getId());
+        YesOrNoEnum topFlag = bbsArticle.getTopFlag();
+        if (topFlag.getCode() == 0) {
+            article.setTopFlag(YesOrNoEnum.YES);//未置顶 -> 置顶
+        } else {
+            article.setTopFlag(YesOrNoEnum.NO);//置顶 -> 未置顶
+        }
+        baseMapper.updateById(article);
     }
 
     @Override

+ 27 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsAuthRecordServiceImpl.java

@@ -1,22 +1,49 @@
 package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
 import com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao;
 import com.yonge.cooleshow.bbs.dto.search.BbsAuthRecordSearch;
+import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
 import com.yonge.cooleshow.bbs.service.BbsAuthRecordService;
 import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
 public class BbsAuthRecordServiceImpl extends ServiceImpl<BbsAuthRecordDao, BbsAuthRecord> implements BbsAuthRecordService {
     private final static Logger log = LoggerFactory.getLogger(BbsAuthRecordServiceImpl.class);
 
+    @Autowired
+    private BbsArticleDao bbsArticleDao;
+
+    /**
+     * @Description: 后台管理-审核-查询文章审核列表
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
     @Override
     public IPage<BbsAuthRecordVo> selectPage(IPage<BbsAuthRecordVo> page, BbsAuthRecordSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
+
+    /**
+     * @Description: 后台管理-审核-修改文章审核状态
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateAuditState(BbsAuthRecord record) {
+        bbsArticleDao.update(null, Wrappers.<BbsArticle>lambdaUpdate()
+                .eq(BbsArticle::getId, record.getArticleId())
+                .set(BbsArticle::getStatus, record.getAuditState()));
+        baseMapper.insert(record);
+    }
 }

+ 8 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/valid/OtherGroup.java

@@ -0,0 +1,8 @@
+package com.yonge.cooleshow.bbs.valid;
+
+/**
+ * @author: cy
+ * @date: 2022/3/31 09:54
+ */
+public interface OtherGroup {
+}

+ 0 - 11
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsAuthRecordVo.java

@@ -34,9 +34,6 @@ public class BbsAuthRecordVo implements Serializable {
     @ApiModelProperty("标签名")
     private String labelName;
 
-    @ApiModelProperty("文章当前状态 审核中:DOING,通过:PASS,驳回:REJECT")
-    private ArticleEnum status;
-
     @ApiModelProperty("是否可评论 0:不可评论 1:可评论")
     private YesOrNoEnum replyFlag;
 
@@ -119,14 +116,6 @@ public class BbsAuthRecordVo implements Serializable {
         this.labelName = labelName;
     }
 
-    public ArticleEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(ArticleEnum status) {
-        this.status = status;
-    }
-
     public YesOrNoEnum getReplyFlag() {
         return replyFlag;
     }

+ 7 - 7
cooleshow-bbs/src/main/resources/config/mybatis/BbsArticleMapper.xml

@@ -42,17 +42,17 @@
         , t.del_flag_ as delFlag
         </sql>
 
-    <insert id="addArticle">
+    <insert id="addArticle" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO bbs_article
         (user_id_,title_,content_,label_id_,label_name_,status_,reply_flag_)
         VALUES(#{userId},#{title},#{content},#{labelId},#{labelName},#{status},#{replyFlag})
     </insert>
-    <select id="detail" resultType="com.yonge.cooleshow.bbs.vo.BbsArticleVo">
-        SELECT
-            <include refid="baseColumns"/>
-        FROM bbs_article t
-        where t.id_ = #{id}
-    </select>
+    <update id="deleteArticle" parameterType="java.util.List">
+        UPDATE bbs_article SET del_flag_=1 WHERE id_ IN
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </update>
     <select id="selectPage" resultType="com.yonge.cooleshow.bbs.vo.BbsArticleVo">
 		SELECT         
         	<include refid="baseColumns" />

+ 4 - 2
cooleshow-bbs/src/main/resources/config/mybatis/BbsAuthRecordMapper.xml

@@ -11,7 +11,6 @@
         u.phone_ AS phone,
         a.label_id_ AS labelId,
         l.label_name_ AS labelName,
-        a.status_ AS `status`,
         a.reply_flag_ AS replyFlag,
         a.created_time_ AS articleCreatedTime,
         r.audit_state_ AS auditState,
@@ -34,7 +33,10 @@
             AND a.label_id_ = #{param.labelId}
         </if>
         <if test="param.auditState !=null">
-            AND a.status_ = #{param.auditState}
+            AND r.audit_state_ = #{param.auditState}
+        </if>
+        <if test="param.delFlag !=null">
+            AND a.del_flag_ = #{param.delFlag}
         </if>
         <if test="param.startTime !=null">
             <![CDATA[AND a.created_time_ >= #{param.startTime} ]]>

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -85,7 +85,10 @@ public interface CourseScheduleStudentPaymentDao extends BaseMapper<CourseSchedu
      * @author zx
      * @date 2022/5/7 16:44
      */
-    void adjustPlayMidiAndMusicSheet(Long scheduleId, Long userId, String content, String musicSheetJson);
+    void adjustPlayMidiAndMusicSheet(@Param("scheduleId") Long scheduleId,
+                                     @Param("userId") Long userId,
+                                     @Param("content") String content,
+                                     @Param("musicSheetJson") String musicSheetJson);
 
     //查询报课学员
     List<CourseScheduleStudentVo> selectUser();

+ 9 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -1169,7 +1169,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         }
         if (studentId == null) {
             StudentHomePage.RecentCourses coursesPractice = baseMapper.selectRecentCoursesPractice(teacherId);
-            StudentHomePage.RecentCourses coursesLive = baseMapper.selectRecentCoursesLive(teacherId);
+            StudentHomePage.RecentCourses coursesLive = baseMapper.selectRecentCoursesLive(teacherId);//直播课&琴房课共用coursesLive
 
             if (coursesPractice == null && coursesLive != null) {
                 homePage.setRecentCourses(coursesLive);
@@ -1486,12 +1486,14 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @return
      */
     public List<DateChangeVo> splicingDate(String day, List<DateVo> strDateList, List<DateChangeVo> rList) {
-        for (DateVo vo : strDateList) {
-            if (vo != null) {
-                DateChangeVo dateChange = new DateChangeVo();
-                dateChange.setStartTime(DateUtil.strToDate(day + " " + vo.getStartTime()));
-                dateChange.setEndTime(DateUtil.strToDate(day + " " + vo.getEndTime()));
-                rList.add(dateChange);
+        if (CollectionUtils.isNotEmpty(strDateList)){
+            for (DateVo vo : strDateList) {
+                if (vo != null) {
+                    DateChangeVo dateChange = new DateChangeVo();
+                    dateChange.setStartTime(DateUtil.strToDate(day + " " + vo.getStartTime()));
+                    dateChange.setEndTime(DateUtil.strToDate(day + " " + vo.getEndTime()));
+                    rList.add(dateChange);
+                }
             }
         }
         return rList;

+ 14 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java

@@ -25,6 +25,8 @@ import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 /**
@@ -260,6 +262,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     public void pushDownloadMusicSheetMsg(ImNetworkMusicSheetDto musicSheetDto) throws Exception {
         Long courseScheduleId = Optional.ofNullable(musicSheetDto).map(ImNetworkBaseDto::getRoomId).orElseThrow(() -> new BizException("房间编号不能为空"));
         Long accompanimentId = Optional.ofNullable(musicSheetDto).map(ImNetworkMusicSheetDto::getAccompanimentId).orElseThrow(() -> new BizException("伴奏编号不能为空"));
+        log.info("pushDownloadMusicSheetMsg: courseScheduleId:{} ,accompanimentId:{} ,deviceType:{}", courseScheduleId,accompanimentId);
         Long userId = sysUserService.getUserId();
         List<CourseScheduleStudentMusicSheetResult> scheduleStudentMusicSheetResults = courseScheduleStudentMusicSheetService.getDao().
                 queryBySheetIdAndCourseId(accompanimentId, courseScheduleId, null, null, 0);
@@ -335,6 +338,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
                     deviceType == ImNetworkDeviceTypeEnum.MUSIC_SHEET ||
                     deviceType == ImNetworkDeviceTypeEnum.ACCOMPANIMENT) {
                 List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(Long.parseLong(deviceControl.getRoomId()));
+
                 for (CourseScheduleStudentPayment studentPayment : studentPayments) {
                     deviceControl.setUserId(studentPayment.getUserId());
                     controlDevice(deviceControl);
@@ -355,20 +359,21 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void controlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
-        log.info("controlDevice in deviceControl = {}", deviceControl);
         SysUser sysUser = sysUserService.getUser();
         String roomId = deviceControl.getRoomId();
         Long userId = deviceControl.getUserId();
-        if(deviceControl.getEnable()){
+        Boolean enable = deviceControl.getEnable();
+        log.info("controlDevice: roomId:{} ,deviceType:{} ,enable:{} ,userId:{}", roomId,deviceControl.getDeviceType(),enable);
+        if(enable){
             long scheduleId = Long.parseLong(roomId);
-            ImNetworkDeviceStateChangedMessage deviceResourceMessage = new ImNetworkDeviceStateChangedMessage(deviceControl.getDeviceType().ordinal(),deviceControl.getEnable());
+            ImNetworkDeviceStateChangedMessage deviceResourceMessage = new ImNetworkDeviceStateChangedMessage(deviceControl.getDeviceType().ordinal(),enable);
             deviceResourceMessage.setUserId(userId.toString());
             switch (deviceControl.getDeviceType()) {
                 case EXAM_SONG:
                     ImNetworkRoomMusicSheetDownloadData msg = courseScheduleStudentPaymentService.getMemberExamSong(scheduleId, userId);
-                    msg.setEnable(deviceControl.getEnable());
+                    msg.setEnable(enable);
                     courseScheduleStudentPaymentService.getDao().adjustExamSong(scheduleId,userId, JSON.toJSONString(msg));
-                    imHelper.publishMessage(userId.toString(), deviceControl.getRoomId(), deviceResourceMessage, 1);
+                    imHelper.publishMessage(userId.toString(), roomId, deviceResourceMessage, 1);
                     break;
                 case MUSIC_SHEET:
                     Integer musicSheetId = Optional.ofNullable(deviceControl.getMusicSheetAccompanimentId()).
@@ -449,7 +454,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void approveControlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
-        log.info("approveControlDevice: deviceControl={}", deviceControl);
+        log.info("approveControlDevice: roomId:{} ,deviceType:{} ,enable:{}", deviceControl.getRoomId(),deviceControl.getDeviceType(),deviceControl.getEnable());
         SysUser sysUser = sysUserService.getUser();
         ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().findByRidAndUid(deviceControl.getRoomId(), sysUser.getId())).
                 orElseThrow(()-> new BizException("用户不在房间内"));
@@ -488,7 +493,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void deviceStatusSync(ImNetworkDeviceControlDto deviceStatusSync) throws Exception {
-        log.info("deviceStatusSync: deviceStatusSync={}", deviceStatusSync);
+        log.info("deviceStatusSync: enable:{} ,roomId:{} ,deviceType:{}", deviceStatusSync.getEnable(),deviceStatusSync.getRoomId(),deviceStatusSync.getDeviceType());
         Long userId = sysUserService.getUserId();
         ImNetworkDeviceTypeEnum deviceType = deviceStatusSync.getDeviceType();
         ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().
@@ -541,7 +546,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void rejectControlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
-        log.info("rejectControlDevice: deviceControl={}", deviceControl);
+        log.info("rejectControlDevice: roomId:{} ,deviceType:{}", deviceControl.getRoomId(),deviceControl.getDeviceType());
         SysUser sysUser = sysUserService.getUser();
         ImNetworkControlDeviceNotifyMessage msg = new ImNetworkControlDeviceNotifyMessage(ImNetworkActionEnum.REJECT.ordinal());
         msg.setType(deviceControl.getDeviceType().ordinal());
@@ -560,7 +565,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
         Long roomId = Optional.ofNullable(musicSheetDto).map(ImNetworkBaseDto::getRoomId).orElseThrow(() -> new BizException("房间编号不能为空"));
         Long accompanimentId = Optional.ofNullable(musicSheetDto).map(ImNetworkMusicSheetDto::getAccompanimentId).orElseThrow(() -> new BizException("伴奏编号不能为空"));
         Integer status = Optional.ofNullable(musicSheetDto).map(ImNetworkMusicSheetDto::getStatus).orElseThrow(() -> new BizException("伴奏下载状态不能为空"));
-        log.info("musicSheetDownNotify: musicSheetDto={}", musicSheetDto);
+        log.info("musicSheetDownNotify: roomId:{} ,accompanimentId:{} ,status:{}", roomId,accompanimentId,status);
         Long userId = sysUserService.getUserId();
         List<CourseScheduleStudentMusicSheetResult> studentMusicSheetResults = courseScheduleStudentMusicSheetService.getDao().queryBySheetIdAndCourseId(accompanimentId, roomId,userId, null, null);
         if(CollectionUtils.isEmpty(studentMusicSheetResults)){

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseStudent.java

@@ -30,7 +30,7 @@ public class CourseStudent implements Serializable {
     @ApiModelProperty(value = "课程状态(NOT_START:未开始 ING:进行中 COMPLETE:已完成 CANCEL:已取消)")
     private String status;
 
-    @ApiModelProperty(value = "课程类型(LIVE:直播课 PRACTICE:陪练课")
+    @ApiModelProperty(value = "课程类型(LIVE:直播课 PRACTICE:陪练课 PIANO_ROOM_CLASS:琴房课")
     private String courseType;
 
     @ApiModelProperty(value = "用户id")

+ 11 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java

@@ -22,6 +22,8 @@ public class StudentHomePage implements Serializable {
     private RecentCourses recentCourses;
 
     public static class RecentCourses{
+        @ApiModelProperty(value = "学生id")
+        private Long studentId;
         @ApiModelProperty(value = "老师id")
         private Long teacherId;
         @ApiModelProperty(value = "老师姓名")
@@ -36,13 +38,21 @@ public class StudentHomePage implements Serializable {
         private Long courseGroupId;
         @ApiModelProperty(value = "课程组名称")
         private String courseGroupName;
-        @ApiModelProperty(value = "课程类型(PRACTICE陪练课 LIVE直播课)")
+        @ApiModelProperty(value = "课程类型(PRACTICE陪练课 LIVE直播课 PIANO_ROOM_CLASS琴房课)")
         private String courseType;
         @ApiModelProperty(value = "课程状态(NOT_START未开始 ING进行中 )")
         private String status;
         @ApiModelProperty(value = "开课时间")
         private Date courseStartTime;
 
+        public Long getStudentId() {
+            return studentId;
+        }
+
+        public void setStudentId(Long studentId) {
+            this.studentId = studentId;
+        }
+
         public String getRealName() {
             return realName;
         }

+ 3 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -614,6 +614,7 @@
     </select>
     <select id="selectRecentCoursesPractice" resultType="com.yonge.cooleshow.biz.dal.vo.StudentHomePage$RecentCourses">
         SELECT
+            p.user_id_ AS studentId,
             u.id_ AS teacherId,
             u.username_ AS teacherName,
             u.real_name_ AS realName,
@@ -627,6 +628,7 @@
         FROM course_schedule s
         LEFT JOIN sys_user u ON s.teacher_id_=u.id_
         LEFT JOIN course_group g ON s.course_group_id_=g.id_
+        LEFT JOIN course_schedule_student_payment p ON s.id_=p.course_id_
         WHERE s.teacher_id_=#{teacherId}
         AND s.type_='PRACTICE'
         AND s.status_ = 'ING'
@@ -650,7 +652,7 @@
         LEFT JOIN sys_user u ON s.teacher_id_=u.id_
         LEFT JOIN course_group g ON s.course_group_id_=g.id_
         WHERE s.teacher_id_=#{teacherId}
-        AND s.type_='LIVE'
+        AND s.type_ IN ('LIVE','PIANO_ROOM_CLASS')
         AND s.status_ ='ING'
         ORDER BY ABS(NOW() - s.start_time_) ASC
         limit 1

+ 2 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -64,10 +64,10 @@
         UPDATE course_schedule_student_payment cssp
         <set>
             <if test="content == null or content == ''">
-                cssp.open_play_midi_ = NULL,cssp.updated_time_ = NOW()
+                cssp.open_play_midi_ = NULL,cssp.updated_time_ = NOW(),
             </if>
             <if test="content != null and content != ''">
-                cssp.open_play_midi_ = #{content},cssp.updated_time_ = NOW()
+                cssp.open_play_midi_ = #{content},cssp.updated_time_ = NOW(),
             </if>
             <if test="examSongJson != null">
                 cssp.exam_song_download_json_ = #{examSongJson}