Browse Source

Merge branch 'dev_vn_20221117' into ponline

liujunchi 2 năm trước cách đây
mục cha
commit
2238d5e1c9
25 tập tin đã thay đổi với 385 bổ sung27 xóa
  1. 7 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java
  2. 5 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java
  3. 24 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  4. 19 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/VirtualNumberTask.java
  5. 32 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java
  6. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicAlbum.java
  7. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java
  8. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherStyleVideo.java
  9. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroup.java
  10. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicAlbumService.java
  11. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  12. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherStyleVideoService.java
  13. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupService.java
  14. 40 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  15. 28 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  16. 33 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherStyleVideoServiceImpl.java
  17. 7 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupDetailServiceImpl.java
  18. 75 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java
  19. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LessonGroupVo.java
  20. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonTeacherVo.java
  21. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  22. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  23. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherStyleVideoMapper.xml
  24. 6 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  25. 1 1
      service.md

+ 7 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java

@@ -137,4 +137,11 @@ public interface AdminFeignService {
      */
     @PostMapping(value = "/open/im/customerService")
     HttpResponseResult<Boolean> customerService(@RequestBody UserFriendInfoVO info);
+
+
+    /**
+     *  每日增加收藏/热度人数
+     */
+    @GetMapping("/task/virtualNumber")
+    HttpResponseResult<Boolean> virtualNumber();
 }

+ 5 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java

@@ -118,4 +118,9 @@ public class AdminFeignServiceFallback implements AdminFeignService {
     public HttpResponseResult<Boolean> customerService(UserFriendInfoVO info) {
         return null;
     }
+
+    @Override
+    public HttpResponseResult<Boolean> virtualNumber() {
+        return null;
+    }
 }

+ 24 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -331,8 +331,31 @@ public interface SysConfigConstant {
     String MALL_ACCOUNT_PERIOD = "mall_account_period";
 
     /**
-     * 曲目置顶数
+     * 曲目置顶数 弃用
      */
     String MUSIC_SHEET_TOP_NUM = "music_sheet_top_num";
 
+
+    /**
+     * 曲目虚拟人数增长最大值
+     */
+    String MUSIC_SHEET_VIRTUAL_NUMBER = "music_sheet_virtual_number";
+
+    /**
+     * 专辑虚拟人数增长最大值
+     */
+    String MUSIC_ALBUM_VIRTUAL_NUMBER = "music_album_virtual_number";
+
+
+    /**
+     * 免费视频课虚拟人数增长最大值
+     */
+    String VIDEO_VIRTUAL_NUMBER = "video_virtual_number";
+
+
+
+    /**
+     * 个人风采虚拟人数增长最大值
+     */
+    String STYLE_VIDEO_VIRTUAL_NUMBER = "style_video_virtual_number";
 }

+ 19 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/VirtualNumberTask.java

@@ -0,0 +1,19 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class VirtualNumberTask extends BaseTask {
+
+    @Autowired
+    private AdminFeignService adminFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        Object o = adminFeignService.virtualNumber();
+    }
+}

+ 32 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java

@@ -46,6 +46,18 @@ public class TaskController extends BaseController {
     @Value("${app.blacklist:}")
     private String blacklistFilePath;
 
+    @Autowired
+    private MusicSheetService musicSheetService;
+
+    @Autowired
+    private MusicAlbumService musicAlbumService;
+
+    @Autowired
+    private TeacherStyleVideoService teacherStyleVideoService;
+
+    @Autowired
+    private VideoLessonGroupService videoLessonGroupService;
+
     /***
      * 轮询用户订单
      * @author liweifan
@@ -126,4 +138,24 @@ public class TaskController extends BaseController {
         activityPlanEvaluationService.successActivity(activityId);
         return HttpResponseResult.succeed();
     }
+
+
+    /**
+     * 每日增加收藏/热度人数
+     */
+    @GetMapping("/virtualNumber")
+    public HttpResponseResult<Object> virtualNumber() {
+
+        // 曲目
+        musicSheetService.setVirtualNumber();
+        // 专辑
+        musicAlbumService.setVirtualNumber();
+        // 视频课 暂时不做课程数据
+        // videoLessonGroupService.setVirtualNumber();
+        // 个人风采
+        teacherStyleVideoService.setVirtualNumber();
+
+        return HttpResponseResult.succeed();
+    }
+
 }

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicAlbum.java

@@ -70,6 +70,12 @@ public class MusicAlbum extends BaseEntity {
     @ApiModelProperty(value = "是否置顶(1:是;0:否)")
     private YesOrNoEnum topFlag;  //是否置顶(1:是;0:否)
 
+
+
+	@ApiModelProperty("虚拟人数 ")
+	@TableField(value = "virtual_number_")
+	private Integer virtualNumber;
+
     @TableField("create_time_")
     @ApiModelProperty(value = "创建时间")
     private java.util.Date createTime;  //创建时间
@@ -98,6 +104,15 @@ public class MusicAlbum extends BaseEntity {
 	@ApiModelProperty("专辑价格 ")
 	private String paymentType;
 
+
+	public Integer getVirtualNumber() {
+		return virtualNumber;
+	}
+
+	public void setVirtualNumber(Integer virtualNumber) {
+		this.virtualNumber = virtualNumber;
+	}
+
 	public String getSubjectId() {
 		return subjectId;
 	}

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java

@@ -89,6 +89,11 @@ public class MusicSheet implements Serializable {
 	@ApiModelProperty(value = "收藏数")
 	private Integer favoriteCount;
 
+
+	@ApiModelProperty("虚拟人数 ")
+	@TableField(value = "virtual_number_")
+	private Integer virtualNumber;
+
     @NotBlank(message = "曲谱标签不能为空!")
     @TableField("music_tag_")
     @ApiModelProperty(value = "曲谱标签(多个标签用逗号分隔)")
@@ -225,6 +230,14 @@ public class MusicSheet implements Serializable {
 	@ApiModelProperty(value = "假删除标识 0:未删除 1:已删除")
 	private Boolean delFlag;
 
+	public Integer getVirtualNumber() {
+		return virtualNumber;
+	}
+
+	public void setVirtualNumber(Integer virtualNumber) {
+		this.virtualNumber = virtualNumber;
+	}
+
 	public Date getFirstPassAuditTime() {
 		return firstPassAuditTime;
 	}

+ 18 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherStyleVideo.java

@@ -44,19 +44,29 @@ public class TeacherStyleVideo implements Serializable {
     @ApiModelProperty("审核状态 DOING、审核中 PASS、通过 UNPASS、不通过 ")
     @TableField(value = "auth_status_")
     private AuthStatusEnum authStatus;
+
     @ApiModelProperty("审核人 ")
     @TableField(value = "verify_user_id_")
     private Long verifyUserId;
+
     @ApiModelProperty("审核理由 ")
     @TableField(value = "reason_")
     private String reason;
+
+    @ApiModelProperty("虚拟人数 ")
+    @TableField(value = "virtual_number_")
+    private Integer virtualNumber;
+
+
     @ApiModelProperty("入驻审核视频 0 否 1 是 ")
     @TableField(value = "entry_flag_")
     private YesOrNoEnum entryFlag;
+
     @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
+
     @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@@ -65,6 +75,14 @@ public class TeacherStyleVideo implements Serializable {
     @TableField(value = "del_flag_")
     private Boolean delFlag = false;
 
+    public Integer getVirtualNumber() {
+        return virtualNumber;
+    }
+
+    public void setVirtualNumber(Integer virtualNumber) {
+        this.virtualNumber = virtualNumber;
+    }
+
     public String getCover() {
         return cover;
     }

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroup.java

@@ -139,6 +139,19 @@ public class VideoLessonGroup extends BaseEntity {
     @ApiModelProperty(value = "是否审核时可见 (0:否  1:是)")
     private YesOrNoEnum auditVersion = YesOrNoEnum.NO;
 
+
+    @ApiModelProperty("虚拟人数 ")
+    @TableField(value = "virtual_number_")
+    private Integer virtualNumber;
+
+    public Integer getVirtualNumber() {
+        return virtualNumber;
+    }
+
+    public void setVirtualNumber(Integer virtualNumber) {
+        this.virtualNumber = virtualNumber;
+    }
+
     public YesOrNoEnum getDraftFlag() {
         return draftFlag;
     }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicAlbumService.java

@@ -152,4 +152,9 @@ public interface MusicAlbumService extends IService<MusicAlbum> {
     ShareProfitVo albumShareProfit(SysUser sysUser, Long albumId);
 
     IPage<StudentMusicAlbumOrderVo>  selectStudentOrderPage(IPage<StudentMusicAlbumOrderVo> page, StudentMusicSheetOrderSearch query);
+
+    /**
+     * 设置专辑收藏的虚拟人数
+     */
+    void setVirtualNumber();
 }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java

@@ -348,4 +348,9 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return
      */
     List<MusicSheetDetailVo> auditDetailList(Long authMusicSheetId);
+
+    /**
+     * 添加上架曲目的虚拟数
+     */
+    void setVirtualNumber();
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherStyleVideoService.java

@@ -88,4 +88,8 @@ public interface TeacherStyleVideoService extends IService<TeacherStyleVideo>  {
      */
     HttpResponseResult<Boolean> addVideoBrowse(Long videoId);
 
+    /**
+     * 设置虚拟人数
+     */
+    void setVirtualNumber();
 }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupService.java

@@ -82,4 +82,9 @@ public interface VideoLessonGroupService extends IService<VideoLessonGroup> {
      * 课程关联的曲目 /专辑信息
      */
     IPage<CourseRelationWrapper.MusicAlbumInfo> queryRelationMusicAlbum(IPage<CourseRelationWrapper.MusicAlbumInfo> page, CourseRelationQueryInfo queryInfo);
+
+    /**
+     * 设置免费视频课的虚拟人数
+     */
+    void setVirtualNumber();
 }

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

@@ -9,10 +9,14 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
 import com.yonge.cooleshow.biz.dal.dao.AlbumMusicRelateDao;
@@ -25,6 +29,7 @@ import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetPurchaseRecordService;
 import com.yonge.cooleshow.biz.dal.vo.StudentMusicAlbumOrderVo;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.enums.ActivityShareEnum;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
@@ -85,14 +90,10 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
 
     @Autowired
     private AlbumFavoriteService albumFavoriteService;
-    @Autowired
-    private MusicSheetPurchaseRecordDao musicSheetPurchaseRecordMapper;
-    @Autowired
-    private MusicSheetDao musicSheetMapper;
-    @Autowired
-    private AlbumMusicRelateDao albumMusicRelateMapper;
 
     @Autowired
+    private SysConfigService sysConfigService;
+    @Autowired
     private MusicSheetPurchaseRecordService musicSheetPurchaseRecordService;
 
     public MusicAlbumDao getDao() {
@@ -132,7 +133,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         albumDetailVo.setAlbumTag(musicAlbum.getAlbumTag());
         albumDetailVo.setAlbumCoverUrl(musicAlbum.getAlbumCoverUrl());
         albumDetailVo.setAlbumStatue(musicAlbum.getAlbumStatus());
-        albumDetailVo.setAlbumFavoriteCount(musicAlbum.getAlbumFavoriteCount());
+        albumDetailVo.setAlbumFavoriteCount(musicAlbum.getAlbumFavoriteCount() + musicAlbum.getVirtualNumber());
         albumDetailVo.setAlbumPrice(musicAlbum.getAlbumPrice());
         albumDetailVo.setPaymentType(musicAlbum.getPaymentType());
         albumDetailVo.setMusicTagNames(musicTagService.getMusicTagNames(StringUtil.toLongList(musicAlbum.getAlbumTag())));
@@ -339,8 +340,8 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         for (MusicAlbumVo record : records) {
             List<MusicAlbumVo> musicAlbumVos = collect.get(record.getId());
             if (CollectionUtils.isNotEmpty(musicAlbumVos)) {
-                record.setAlbumFavoriteCount(musicAlbumVos.get(0).getAlbumFavoriteCount());
-                record.setAlbumFavoriteCount(musicAlbumVos.get(0).getMusicSheetCount());
+                record.setAlbumFavoriteCount(musicAlbumVos.get(0).getAlbumFavoriteCount() + record.getVirtualNumber());
+                record.setMusicSheetCount(musicAlbumVos.get(0).getMusicSheetCount());
             } else {
                 record.setAlbumFavoriteCount(0);
                 record.setMusicSheetCount(0);
@@ -365,6 +366,12 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     		query.setSubjectIdList(null);
     		records = baseMapper.selectStudentPage(page, query);
     	}*/
+
+        // 设置收藏数
+        for (MusicAlbumVo record : records) {
+            record.setAlbumFavoriteCount(record.getAlbumFavoriteCount() + record.getVirtualNumber());
+        }
+
         IPage<MusicAlbumVo> iPage = page.setRecords(records);
 
         List<Long> albumIds = records.stream().map(MusicAlbumVo::getId).collect(Collectors.toList());
@@ -425,6 +432,30 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         return page.setRecords(baseMapper.selectStudentOrderPage(page, query));
     }
 
+    @Override
+    public void setVirtualNumber() {
+
+        List<MusicAlbum> musicAlbums = this.lambdaQuery()
+                                                .select(MusicAlbum::getId,MusicAlbum::getVirtualNumber)
+                                               .eq(MusicAlbum::getAlbumStatus, 1)
+                                               .eq(MusicAlbum::getDelFlag, false)
+                                                .eq(MusicAlbum::getAuditVersion,0)
+                                               .list();
+        if (CollectionUtils.isEmpty(musicAlbums)) {
+            return;
+        }
+        //给每个曲目设置增长值
+        String value = sysConfigService.findConfigValue(SysConfigConstant.MUSIC_ALBUM_VIRTUAL_NUMBER);
+        for (MusicAlbum musicAlbum : musicAlbums) {
+            int i = (int) (Math.random() * Integer.parseInt(value));
+            musicAlbum.setVirtualNumber(i + musicAlbum.getVirtualNumber());
+        }
+
+        // 保存虚拟人数
+        this.updateBatchById(musicAlbums,100);
+
+    }
+
     private boolean checkNameRepeat(String albumName, Long id) {
         LambdaQueryChainWrapper<MusicAlbum> eq = this.lambdaQuery()
                                                      .eq(MusicAlbum::getDelFlag,0)

+ 28 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.additional.update.impl.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
@@ -36,6 +37,7 @@ import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import com.yonge.toolset.utils.easyexcel.ExcelException;
 
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.RandomUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -266,6 +268,10 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         if (detail == null) {
             throw new BizException("未找到曲目信息");
         }
+
+        // 设置收藏人数
+        detail.setFavoriteCount(detail.getFavoriteCount() + detail.getVirtualNumber());
+
         if (sysUser == null) {
             return detail;
         }
@@ -1411,6 +1417,28 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
 
     @Override
+    public void setVirtualNumber() {
+        List<MusicSheet> musicSheets = this.lambdaQuery().select(MusicSheet::getId,MusicSheet::getVirtualNumber)
+                                               .eq(MusicSheet::getState, 1)
+                                               .eq(MusicSheet::getDelFlag, false)
+                                               .eq(MusicSheet::getAuditVersion,0)
+                                               .eq(MusicSheet::getAuditStatus, AuthStatusEnum.PASS)
+                .list();
+        if (CollectionUtils.isEmpty(musicSheets)) {
+            return;
+        }
+        //给每个曲目设置增长值
+        String value = sysConfigService.findConfigValue(SysConfigConstant.MUSIC_SHEET_VIRTUAL_NUMBER);
+        for (MusicSheet musicSheet : musicSheets) {
+            int i = (int) (Math.random() * Integer.parseInt(value));
+            musicSheet.setVirtualNumber(i + musicSheet.getVirtualNumber());
+        }
+
+        // 保存虚拟人数
+        this.updateBatchById(musicSheets,100);
+    }
+
+    @Override
     public Boolean updateMusicImg(String musicImg, Long musicSheetId) {
         MusicSheet musicSheet = new MusicSheet();
         musicSheet.setMusicImg(musicImg);

+ 33 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherStyleVideoServiceImpl.java

@@ -8,20 +8,24 @@ import com.yonge.cooleshow.biz.dal.dao.TeacherStyleVideoDao;
 import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherStyleSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherStyleVideoSearch;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TeacherStyleVideoService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherStyleVideoVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.string.StringPool;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,6 +52,9 @@ public class TeacherStyleVideoServiceImpl extends ServiceImpl<TeacherStyleVideoD
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private SysConfigService sysConfigService;
+
     @Override
     public TeacherStyleVideoVo detail(Long id) {
         return baseMapper.detail(id);
@@ -128,7 +135,11 @@ public class TeacherStyleVideoServiceImpl extends ServiceImpl<TeacherStyleVideoD
 
     @Override
     public IPage<TeacherStyleVideoVo> stylePage(IPage<TeacherStyleVideoVo> page, TeacherStyleSearch query) {
-        return page.setRecords(baseMapper.stylePage(page, query));
+        List<TeacherStyleVideoVo> teacherStyleVideoVos = baseMapper.stylePage(page, query);
+        for (TeacherStyleVideoVo teacherStyleVideoVo : teacherStyleVideoVos) {
+            teacherStyleVideoVo.setBrowse(teacherStyleVideoVo.getBrowse() + teacherStyleVideoVo.getVirtualNumber());
+        }
+        return page.setRecords(teacherStyleVideoVos);
     }
 
     @Override
@@ -136,4 +147,25 @@ public class TeacherStyleVideoServiceImpl extends ServiceImpl<TeacherStyleVideoD
         Integer num = baseMapper.addVideoBrowse(videoId);
         return HttpResponseResult.succeed(num > 0);
     }
+
+    @Override
+    public void setVirtualNumber() {
+        List<TeacherStyleVideo> teacherStyleVideos = this.lambdaQuery().select(TeacherStyleVideo::getId, TeacherStyleVideo::getVirtualNumber)
+                                           .eq(TeacherStyleVideo::getDelFlag, false)
+                                           .eq(TeacherStyleVideo::getAuditVersion,0)
+                                           .eq(TeacherStyleVideo::getAuthStatus, AuthStatusEnum.PASS)
+                                           .list();
+        if (CollectionUtils.isEmpty(teacherStyleVideos)) {
+            return;
+        }
+        //给每个曲目设置增长值
+        String value = sysConfigService.findConfigValue(SysConfigConstant.STYLE_VIDEO_VIRTUAL_NUMBER);
+        for (TeacherStyleVideo musicSheet : teacherStyleVideos) {
+            int i = (int) (Math.random() * Integer.parseInt(value));
+            musicSheet.setVirtualNumber(i + musicSheet.getVirtualNumber());
+        }
+
+        // 保存虚拟人数
+        this.updateBatchById(teacherStyleVideos,100);
+    }
 }

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import java.math.BigDecimal;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -225,7 +226,12 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
         }
         
         List<VideoLessonPurchaseRecord> videoLessonPurchaseRecordList = videoLessonPurchaseRecordDao.queryByVideoLessonGroupId(videoLessonGroupLog.getVideoLessonGroupId(), OrderStatusEnum.PAID.getCode());
-        videoLessonGroupVo.setCountStudent(videoLessonPurchaseRecordList.size());
+        if (videoLessonGroupVo.getLessonPrice().compareTo(BigDecimal.ZERO) == 0) {
+            VideoLessonGroup videoLessonGroup = videoLessonGroupDao.selectById(videoLessonGroupVo.getId());
+            videoLessonGroupVo.setCountStudent(videoLessonPurchaseRecordList.size() + videoLessonGroup.getVirtualNumber());
+        } else {
+            videoLessonGroupVo.setCountStudent(videoLessonPurchaseRecordList.size());
+        }
 
         Teacher teacher = teacherService.getById(videoLessonGroupVo.getTeacherId());
         if (teacher != null) {

+ 75 - 13
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -15,6 +16,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.dto.CourseMusicAlbumRelationDto;
 import com.yonge.cooleshow.biz.dal.entity.CourseRelationMusicAlbum;
+import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
 import com.yonge.cooleshow.biz.dal.enums.course.CourseRelationTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.course.CourseTypeEnum;
@@ -123,13 +125,6 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     @Autowired
     private CourseRelationMusicAlbumService courseRelationMusicAlbumService;
 
-    @Autowired
-    private MusicSheetPurchaseRecordService musicSheetPurchaseRecordService;
-
-
-    @Autowired
-    private VideoLessonPurchaseRecordService videoLessonPurchaseRecordService;
-
     public VideoLessonGroupDao getDao() {
         return videoLessonGroupDao;
     }
@@ -156,13 +151,24 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
 				}
 			}
 		}
-        return page.setRecords(baseMapper.selectPage(page, query));
+        List<VideoLessonGroupVo> videoLessonGroupVos = baseMapper.selectPage(page, query);
+        for (VideoLessonGroupVo videoLessonGroupVo : videoLessonGroupVos) {
+            if (videoLessonGroupVo.getLessonPrice().compareTo(BigDecimal.ZERO) == 0) {
+                videoLessonGroupVo.setCountStudent(videoLessonGroupVo.getCountStudent() + videoLessonGroupVo.getVirtualNumber());
+            }
+        }
+        return page.setRecords(videoLessonGroupVos);
     }
 
     public List<VideoLessonGroupVo> selectPage(VideoLessonGroupSearch query) {
         List<VideoLessonGroupVo> list = baseMapper.selectPage(null, query);
         List<VideoLessonGroupVo> collect = list.stream().filter(videoLessonGroupVo -> !videoLessonGroupVo.getId().equals(query.getVideoLessonGroupId()))
                                                .sorted(Comparator.comparing(VideoLessonGroupVo::getCountStudent, Comparator.reverseOrder())).limit(2).collect(Collectors.toList());
+        for (VideoLessonGroupVo videoLessonGroupVo : collect) {
+            if (videoLessonGroupVo.getLessonPrice().compareTo(BigDecimal.ZERO) == 0) {
+                videoLessonGroupVo.setCountStudent(videoLessonGroupVo.getCountStudent() + videoLessonGroupVo.getVirtualNumber());
+            }
+        }
         return collect;
     }
 
@@ -495,7 +501,13 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
      */
     @Override
     public IPage<VideoLessonTeacherVo> selectTeacherPage(IPage<VideoLessonTeacherVo> page, VideoLessonSearch search) {
-        return page.setRecords(baseMapper.selectTeacherPage(page, search));
+        List<VideoLessonTeacherVo> videoLessonTeacherVos = baseMapper.selectTeacherPage(page, search);
+        for (VideoLessonTeacherVo videoLessonGroupVo : videoLessonTeacherVos) {
+            if (new BigDecimal(videoLessonGroupVo.getLessonPrice()).compareTo(BigDecimal.ZERO) == 0) {
+                videoLessonGroupVo.setCountStudent(videoLessonGroupVo.getCountStudent() + videoLessonGroupVo.getVirtualNumber());
+            }
+        }
+        return page.setRecords(videoLessonTeacherVos);
     }
 
     /**
@@ -556,7 +568,11 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         if (CollectionUtils.isEmpty(lessonGroup)) {
             return null;
         }
-        return lessonGroup.get(0);
+        VideoLessonGroupVo videoLessonGroupVo = lessonGroup.get(0);
+        if (videoLessonGroupVo.getLessonPrice().compareTo(BigDecimal.ZERO) == 0) {
+            videoLessonGroupVo.setCountStudent(videoLessonGroupVo.getCountStudent() + videoLessonGroupVo.getVirtualNumber());
+        }
+        return videoLessonGroupVo;
     }
 
     /**
@@ -679,7 +695,13 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     public IPage<LessonGroupVo> selectLessonGroup(IPage<LessonGroupVo> page, VideoLessonGroupSearch query) {
         query.setAuditStatus(AuthStatusEnum.PASS.getCode());
         query.setShelvesFlag(1);
-        return page.setRecords(baseMapper.selectLessonGroup(page, query));
+        List<LessonGroupVo> lessonGroupVos = baseMapper.selectLessonGroup(page, query);
+        for (LessonGroupVo videoLessonGroupVo : lessonGroupVos) {
+            if (videoLessonGroupVo.getLessonPrice().compareTo(BigDecimal.ZERO) == 0) {
+                videoLessonGroupVo.setCountStudent(videoLessonGroupVo.getCountStudent() + videoLessonGroupVo.getVirtualNumber());
+            }
+        }
+        return page.setRecords(lessonGroupVos);
     }
 
     /**
@@ -783,8 +805,21 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
      */
     @Override
     public IPage<LessonGroupVo> selectLessonGroupById(IPage<LessonGroupVo> page, VideoLessonGroupSearch query) {
-
-        return page.setRecords(baseMapper.queryMyLessonGroup(page, query));
+        List<LessonGroupVo> lessonGroupVos = baseMapper.queryMyLessonGroup(page, query);
+        if (CollectionUtils.isEmpty(lessonGroupVos)) {
+            return page.setRecords(lessonGroupVos);
+        }
+        List<Long> idList = lessonGroupVos.stream().map(LessonGroupVo::getId).collect(Collectors.toList());
+        Map<Long, Integer> idMap = videoLessonGroupDao.selectBatchIds(idList)
+                                                        .stream()
+                                                        .collect(Collectors.toMap(VideoLessonGroup::getId,
+                                                                                  VideoLessonGroup::getVirtualNumber));
+        for (LessonGroupVo videoLessonGroupVo : lessonGroupVos) {
+            if (videoLessonGroupVo.getLessonPrice().compareTo(BigDecimal.ZERO) == 0) {
+                videoLessonGroupVo.setCountStudent(videoLessonGroupVo.getCountStudent() + idMap.get(videoLessonGroupVo.getId()));
+            }
+        }
+        return page.setRecords(lessonGroupVos);
     }
 
     /**
@@ -886,5 +921,32 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
 
     }
 
+    @Override
+    public void setVirtualNumber() {
+
+        List<VideoLessonGroup> videoLessonGroups = this.lambdaQuery()
+                .select(VideoLessonGroup::getId,VideoLessonGroup::getVirtualNumber)
+                                                .eq(VideoLessonGroup::getAuditStatus, AuthStatusEnum.PASS)
+                                                .eq(VideoLessonGroup::getDraftFlag, 0)
+                                                .eq(VideoLessonGroup::getLessonPrice, BigDecimal.ZERO)
+                                                .eq(VideoLessonGroup::getAuditVersion, 0)
+                                                .eq(VideoLessonGroup::getShelvesFlag, 1)
+                                                .list();
+        if (CollectionUtils.isEmpty(videoLessonGroups)) {
+            return;
+        }
+        //给每个曲目设置增长值
+        String value = sysConfigService.findConfigValue(SysConfigConstant.VIDEO_VIRTUAL_NUMBER);
+        for (VideoLessonGroup videoLessonGroup : videoLessonGroups) {
+            int i = (int) (Math.random() * Integer.parseInt(value));
+            videoLessonGroup.setVirtualNumber(i +videoLessonGroup.getVirtualNumber());
+        }
+
+        // 保存虚拟人数
+        this.updateBatchById(videoLessonGroups,100);
+
+
+    }
+
 
 }

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.enums.course.CourseRelationTypeEnum;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
@@ -58,6 +59,16 @@ public class LessonGroupVo extends BaseEntity {
     @ApiModelProperty(value = "关联曲目专辑类型,RECOMMEND:推荐  GIFT:赠品")
     private CourseRelationTypeEnum relationType;
 
+    @ApiModelProperty("虚拟人数 ")
+    private Integer virtualNumber;
+
+    public Integer getVirtualNumber() {
+        return virtualNumber;
+    }
+
+    public void setVirtualNumber(Integer virtualNumber) {
+        this.virtualNumber = virtualNumber;
+    }
     public YesOrNoEnum getAuditVersion() {
         return auditVersion;
     }

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonTeacherVo.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
@@ -41,6 +42,18 @@ public class VideoLessonTeacherVo extends BaseEntity {
     @ApiModelProperty("课程介绍")
     private String lessonDesc;
 
+
+    @ApiModelProperty("虚拟人数 ")
+    private Integer virtualNumber;
+
+    public Integer getVirtualNumber() {
+        return virtualNumber;
+    }
+
+    public void setVirtualNumber(Integer virtualNumber) {
+        this.virtualNumber = virtualNumber;
+    }
+
     public String getLessonSubjectName() {
         return lessonSubjectName;
     }

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

@@ -13,6 +13,7 @@
         <result column="sort_number_" jdbcType="INTEGER" property="sortNumber"/>
         <result column="hot_flag_" jdbcType="TINYINT" property="hotFlag"/>
         <result column="top_flag_" jdbcType="TINYINT" property="topFlag"/>
+        <result column="virtual_number_" property="virtualNumber" />
         <result column="audit_version_" jdbcType="TINYINT" property="auditVersion"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="create_by_" jdbcType="BIGINT" property="createBy"/>
@@ -31,6 +32,7 @@
         t.sort_number_,
         t.hot_flag_,
         t.top_flag_,
+        t.virtual_number_,
         t.create_time_,
         t.audit_version_,
         t.create_by_,

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

@@ -12,6 +12,7 @@
         <result column="music_tag_" jdbcType="VARCHAR" property="musicTag"/>
         <result column="play_speed_" jdbcType="INTEGER" property="playSpeed"/>
         <result column="favorite_count_" jdbcType="INTEGER" property="favoriteCount"/>
+        <result column="virtual_number_" property="virtualNumber" />
         <result column="first_pass_audit_time_" jdbcType="TIMESTAMP" property="firstPassAuditTime"/>
         <result column="can_evaluate_" jdbcType="TINYINT" property="canEvaluate"/>
         <result column="show_fingering_" jdbcType="TINYINT" property="showFingering"/>
@@ -46,6 +47,7 @@
         t.music_tag_ as musicTag,
         t.play_speed_ as playSpeed,
         t.favorite_count_ as favoriteCount,
+        t.virtual_number_ as virtualNumber,
         t.first_pass_audit_time_ as firstPassAuditTime,
         t.can_evaluate_ as canEvaluate,
         t.show_fingering_ as showFingering,

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

@@ -10,6 +10,7 @@
 		<result column="browse_" property="browse" />
 		<result column="audit_version_" property="auditVersion" />
 		<result column="auth_status_" property="authStatus" />
+		<result column="virtual_number_" property="virtualNumber" />
 		<result column="verify_user_id_" property="verifyUserId" />
 		<result column="reason_" property="reason" />
 		<result column="entry_flag_" property="entryFlag" />
@@ -28,6 +29,7 @@
         , t.browse_ as browse
         , t.audit_version_ as auditVersion
         , t.auth_status_ as authStatus
+		, t.virtual_number_ as virtualNumber
         , t.verify_user_id_ as verifyUserId
         , t.reason_ as reason
 		, t.entry_flag_ as entryFlag

+ 6 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml

@@ -19,6 +19,7 @@
 		<result column="shelves_time_" property="shelvesTime" />
 		<result column="shelves_reason_" property="shelvesReason" />
 		<result column="shelves_id_" property="shelvesId" />
+		<result column="virtual_number_" property="virtualNumber" />
 		<result column="audit_status_" jdbcType="TINYINT" property="auditStatus" />
 		<result column="audit_id_" jdbcType="INTEGER" property="auditId" />
 		<result column="audit_name_" jdbcType="VARCHAR" property="auditName" />
@@ -50,6 +51,7 @@
 		g.audit_id_ AS auditId,
 		g.audit_name_ AS auditName,
 		g.relation_type_ AS relationType,
+		g.virtual_number_ as virtualNumber,
 	</sql>
 	<sql id="recordColumns">
 		g.id_ AS id,
@@ -73,6 +75,7 @@
 		r.audit_name_ AS auditName,
 		r.audit_status_ AS auditStatus,
 		g.audit_version_ as auditVersion,
+		g.virtual_number_ as virtualNumber,
 	</sql>
 
 	<update id="updateGroup" parameterType="com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupUpVo">
@@ -215,7 +218,8 @@
 			g.audit_status_ AS auditStatus,
 			(SELECT COUNT(1) FROM video_lesson_purchase_record r WHERE r.video_lesson_group_id_=g.id_ AND r.order_status_='PAID') AS countStudent,
 			g.create_time_ AS createTime,
-			g.lesson_desc_ AS lessonDesc
+			g.lesson_desc_ AS lessonDesc,
+		g.virtual_number_ as virtualNumber
 		FROM video_lesson_group g
 		LEFT JOIN subject j ON g.lesson_subject_ = j.id_
 		<where>
@@ -287,6 +291,7 @@
 			u.username_ AS userName,
 			u.real_name_ AS realName,
 			u.avatar_ AS avatar,
+			g.virtual_number_ as virtualNumber,
 			g.audit_version_ as auditVersion,
 			(SELECT COUNT(1) FROM video_lesson_purchase_record r WHERE r.video_lesson_group_id_=g.id_ AND r.order_status_='PAID') AS countStudent
 		FROM video_lesson_group g

+ 1 - 1
service.md

@@ -4,7 +4,7 @@
 - [x] teacher-server
 - [x] student-server
 - [ ] website-server
-- [ ] task-server
+- [x] task-server
 - [ ] websocket-server
 - [ ] audio-analysis
 - [ ] bbs-server