Sfoglia il codice sorgente

Merge branch 'dev_v1.3.5_20220929' of http://git.dayaedu.com/yonge/cooleshow into dev_v1.3.5_20220929

liujunchi 2 anni fa
parent
commit
583b4b4ae9
15 ha cambiato i file con 349 aggiunte e 8 eliminazioni
  1. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java
  2. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  3. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumDetailSearch.java
  4. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java
  5. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicAlbum.java
  6. 13 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheetPurchaseRecord.java
  7. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ChargeTypeEnum.java
  8. 41 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/album/PurchaseRecordTypeEnum.java
  9. 9 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationRecordServiceImpl.java
  10. 107 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  11. 17 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  12. 33 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumDetailVo.java
  13. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVo.java
  14. 23 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  15. 22 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java

@@ -5,8 +5,10 @@ import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -64,4 +66,12 @@ public interface MusicAlbumDao extends BaseMapper<MusicAlbum> {
      * @return page
      */
     List<MusicAlbumVo> selectStudentPage(@Param("page") IPage<MusicAlbumVo> page, @Param("query") MusicAlbumSearch query, @Param("clientType") ClientEnum clientType);
+
+    /**
+     * 专辑单曲付费类型统计
+     * @param albumId 专辑ID
+     * @param paymentType 付费方式
+     * @return List<StatGroupWrapper>
+     */
+    List<StatGroupWrapper> selectAlbumMusicSheetStatInfo(@Param("albumId") Long albumId, @Param("paymentType") ChargeTypeEnum paymentType);
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -162,4 +163,11 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
      */
     List<MusicSheetDetailVo> auditDetailList(@Param("originalMusicSheetId") Long originalMusicSheetId, @Param(
             "authMusicSheetId") Long authMusicSheetId);
+
+    /**
+     * 单曲数量统计
+     * @param musicIds 单曲ID
+     * @return List<StatGroupWrapper>
+     */
+    List<StatGroupWrapper> selectMusicAlbumStatInfo(@Param("musicIds") List<Long> musicIds);
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumDetailSearch.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
 import java.util.Optional;
 
 /**
@@ -38,6 +39,8 @@ public class MusicAlbumDetailSearch extends MusicSheetSearch {
     @ApiModelProperty(value = "艺术家")
     private String composer;  //音乐家
 
+    private List<String> paymentTypes;
+
     public Integer getRelatedNum() {
         return relatedNum;
     }
@@ -87,4 +90,12 @@ public class MusicAlbumDetailSearch extends MusicSheetSearch {
     public void setDelFlag(Boolean delFlag) {
         this.delFlag = delFlag;
     }
+
+    public List<String> getPaymentTypes() {
+        return paymentTypes;
+    }
+
+    public void setPaymentTypes(List<String> paymentTypes) {
+        this.paymentTypes = paymentTypes;
+    }
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java

@@ -53,6 +53,9 @@ public class MusicAlbumSearch extends QueryInfo{
     @ApiModelProperty("声部id,多个逗号隔开")
     private String subjectIds;
 
+    @ApiModelProperty("曲目ID")
+    private Long musicId;
+
     @ApiModelProperty(hidden = true)
     private List<Long> subjectIdList;
 
@@ -157,4 +160,12 @@ public class MusicAlbumSearch extends QueryInfo{
 	public void setClientId(String clientId) {
 		this.clientId = clientId;
 	}
+
+    public Long getMusicId() {
+        return musicId;
+    }
+
+    public void setMusicId(Long musicId) {
+        this.musicId = musicId;
+    }
 }

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

@@ -90,6 +90,14 @@ public class MusicAlbum extends BaseEntity {
 	@ApiModelProperty("假删除标识 0:未删除 1:已删除")
 	private Boolean delFlag;
 
+	@TableField("album_price_")
+	@ApiModelProperty("专辑价格 ")
+	private Double albumPrice;
+
+	@TableField("payment_type_")
+	@ApiModelProperty("专辑价格 ")
+	private String paymentType;
+
 	public String getSubjectId() {
 		return subjectId;
 	}
@@ -236,4 +244,20 @@ public class MusicAlbum extends BaseEntity {
 	public void setAuditVersion(YesOrNoEnum auditVersion) {
 		this.auditVersion = auditVersion;
 	}
+
+	public Double getAlbumPrice() {
+		return albumPrice;
+	}
+
+	public void setAlbumPrice(Double albumPrice) {
+		this.albumPrice = albumPrice;
+	}
+
+	public String getPaymentType() {
+		return paymentType;
+	}
+
+	public void setPaymentType(String paymentType) {
+		this.paymentType = paymentType;
+	}
 }

+ 13 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheetPurchaseRecord.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -67,6 +68,10 @@ public class MusicSheetPurchaseRecord extends BaseEntity {
     @ApiModelProperty(value = "订单状态(WAIT_PAY:待支付;PAYING:支付中,PAID:已付款)")
     private OrderStatusEnum orderStatus;  //订单状态(1:已完成;0:取消)
 
+	@TableField("purchase_type_")
+	@ApiModelProperty("购买类型 ")
+	private PurchaseRecordTypeEnum purchaseType;
+
 	public ClientEnum getClientType() {
 		return clientType;
 	}
@@ -163,8 +168,15 @@ public class MusicSheetPurchaseRecord extends BaseEntity {
 	    return this.orderStatus;
 	}
 
+	public PurchaseRecordTypeEnum getPurchaseType() {
+		return purchaseType;
+	}
+
+	public void setPurchaseType(PurchaseRecordTypeEnum purchaseType) {
+		this.purchaseType = purchaseType;
+	}
 
-    @Override
+	@Override
     public String toString() {
         return ToStringBuilder.reflectionToString(this);
     }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ChargeTypeEnum.java

@@ -30,4 +30,14 @@ public enum ChargeTypeEnum implements BaseEnum<String, ChargeTypeEnum> {
     public String getCode() {
         return this.code;
     }
+
+    /**
+     * 收费类型匹配
+     * @param type 收费类型
+     * @return boolean
+     */
+    public boolean match(String type) {
+
+        return getCode().equals(type);
+    }
 }

+ 41 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/album/PurchaseRecordTypeEnum.java

@@ -0,0 +1,41 @@
+package com.yonge.cooleshow.biz.dal.enums.album;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 单曲、专辑付费购买类型
+ */
+public enum PurchaseRecordTypeEnum implements BaseEnum<String, PurchaseRecordTypeEnum> {
+
+    MUSIC("单曲"),
+    ALBUM("专辑"),
+    ;
+    @EnumValue
+    private String code;
+    private String msg;
+
+    PurchaseRecordTypeEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    /**
+     * 收费类型匹配
+     * @param type 收费类型
+     * @return boolean
+     */
+    public boolean match(String type) {
+
+        return getCode().equals(type);
+    }
+}

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

@@ -277,15 +277,19 @@ public class ActivityEvaluationRecordServiceImpl extends ServiceImpl<ActivityEva
             // 学生声部信息
             Student student = studentMapper.selectOne(Wrappers.<Student>lambdaQuery().eq(Student::getUserId, userId));
 
-            long subjectId = 0;
-            if (Objects.nonNull(student.getSubjectId())) {
-                subjectId = Long.parseLong(student.getSubjectId().split(",")[0]);
+            String userSubject = "";
+            if (Objects.nonNull(student) && Objects.nonNull(student.getSubjectId())) {
+                long subjectId = Long.parseLong(student.getSubjectId().split(",")[0]);
+
+                Subject subject = subjectService.get(subjectId);
+
+                // 学生声部信息
+                userSubject = Optional.ofNullable(subject).map(Subject::getName).orElse("");
             }
-            Subject subject = subjectService.get(subjectId);
 
             if (Objects.nonNull(userRanking)) {
 
-                userRanking.setUserSubject(Optional.ofNullable(subject).map(Subject::getName).orElse(""));
+                userRanking.setUserSubject(userSubject);
             }
 
         } else {

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

@@ -1,16 +1,31 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import java.text.MessageFormat;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.google.common.collect.Lists;
+import com.yonge.cooleshow.biz.dal.dao.AlbumMusicRelateDao;
+import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
+import com.yonge.cooleshow.biz.dal.dao.MusicSheetPurchaseRecordDao;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheetPurchaseRecord;
+import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.album.PurchaseRecordTypeEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import org.apache.commons.collections.CollectionUtils;
 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;
-import org.springframework.util.CollectionUtils;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
@@ -62,6 +77,13 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
 
     @Autowired
     private AlbumFavoriteService albumFavoriteService;
+    @Autowired
+    private MusicSheetPurchaseRecordDao musicSheetPurchaseRecordMapper;
+    @Autowired
+    private MusicSheetDao musicSheetMapper;
+    @Autowired
+    private AlbumMusicRelateDao albumMusicRelateMapper;
+
 
     public MusicAlbumDao getDao() {
         return musicAlbumDao;
@@ -101,13 +123,38 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         albumDetailVo.setAlbumCoverUrl(musicAlbum.getAlbumCoverUrl());
         albumDetailVo.setAlbumStatue(musicAlbum.getAlbumStatus());
         albumDetailVo.setAlbumFavoriteCount(musicAlbum.getAlbumFavoriteCount());
+        albumDetailVo.setAlbumPrice(musicAlbum.getAlbumPrice());
+        albumDetailVo.setPaymentType(musicAlbum.getPaymentType());
         albumDetailVo.setMusicTagNames(musicTagService.getMusicTagNames(StringUtil.toLongList(musicAlbum.getAlbumTag())));
 
+        // 新增专辑曲目查询条件
         if (query.getType() != null && query.getType() == 1) {
             query.setSubjectIds(musicAlbum.getSubjectId());
+
+            // 判断专辑收费类型;非免费类型,只能添加平台曲目
+            /*if (!ChargeTypeEnum.FREE.match(musicAlbum.getPaymentType())) {
+
+                // 曲目来源
+                query.setSourceType(SourceTypeEnum.PLATFORM);
+                // 曲目收费类型
+                if (musicAlbum.getPaymentType().contains(",")) {
+                    // 多种付费方式
+                    query.setPaymentTypes(Lists.newArrayList(musicAlbum.getPaymentType(), ChargeTypeEnum.FREE.getCode()));
+                } else {
+                    // 单一付费方式
+                    query.setChargeType(ChargeTypeEnum.valueOf(musicAlbum.getPaymentType()));
+                }
+
+            }*/
         }
 
         IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectAlbumDetailPage(page,query);
+
+        // 专辑曲目付费方式
+        List<String> paymentTypes = musicSheetVoIPage.getRecords().stream()
+                .flatMap(x -> Arrays.stream(x.getPaymentType().split(","))).distinct().collect(Collectors.toList());
+        albumDetailVo.setMusicPaymentTypes(paymentTypes);
+
         albumDetailVo.setMusicSheetList(PageUtil.pageInfo(musicSheetVoIPage));
 
         albumDetailVo.setMusicSheetCount((int) musicSheetVoIPage.getTotal());
@@ -121,6 +168,20 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         if (musicAlbum == null) {
             throw  new BizException("未找到专辑信息");
         }
+
+        // 付费专辑,需要校验是否已存在购买记录
+        /*if (!ChargeTypeEnum.VIP.match(musicAlbum.getPaymentType())) {
+
+            // 统计付费专辑的购买数量
+            Integer count = musicSheetPurchaseRecordMapper.selectCount(Wrappers.<MusicSheetPurchaseRecord>lambdaQuery()
+                    .eq(MusicSheetPurchaseRecord::getMusicSheetId, albumId)
+                    .eq(MusicSheetPurchaseRecord::getPurchaseType, PurchaseRecordTypeEnum.ALBUM)
+            );
+            if (Optional.ofNullable(count).orElse(0) > 0) {
+                throw new BizException("当前专辑已有购买记录");
+            }
+        }*/
+
         List<Long> musicSheetIdList = StringUtil.toLongList(musicSheetIds);
         return albumMusicRelateService.delMusicSheet(albumId,musicSheetIdList);
     }
@@ -132,6 +193,31 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         if (musicAlbum == null) {
             throw  new BizException("未找到专辑信息");
         }
+
+        // 付费专辑最多只能添加两首免费曲目
+        if (!ChargeTypeEnum.FREE.match(musicAlbum.getPaymentType())) {
+
+            // 新添加曲目统计
+            long freeNum = 0;
+            List<Long> musicIds = albumMusicList.stream()
+                    .map(MusicAlbumSheetDto.AlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(musicIds)) {
+
+                freeNum = musicSheetMapper.selectBatchIds(musicIds).stream()
+                        .filter(x -> ChargeTypeEnum.FREE.match(x.getPaymentType()))
+                        .count();
+            }
+
+            // 已添加曲目统计
+            Map<Long, Integer> collect = getBaseMapper().selectAlbumMusicSheetStatInfo(albumId, ChargeTypeEnum.FREE).stream()
+                    .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal, (o, n) -> n));
+
+            if ((collect.getOrDefault(albumId, 0) + freeNum) > 2) {
+                throw new BizException("专辑免费曲目最多2首");
+            }
+        }
+
         return albumMusicRelateService.addMusicSheet(albumId,albumMusicList,userId);
     }
 
@@ -157,6 +243,26 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         if (musicAlbum.getAuditVersion() == null) {
             musicAlbum.setAuditVersion(YesOrNoEnum.NO);
         }
+
+        // 非付费类型,已添加曲目或者已购买,不允许修改付费方式
+        MusicAlbum album = getById(musicAlbum.getId());
+        if (Objects.isNull(album)) {
+            throw new BizException("无效的专辑ID");
+        }
+
+        // 专辑从免费修改为付费方式,需要判断当前免费单曲数量
+        if (Objects.nonNull(musicAlbum.getPaymentType())
+                && ChargeTypeEnum.FREE.match(album.getPaymentType())
+                && !album.getPaymentType().equals(musicAlbum.getPaymentType())) {
+
+            Map<Long, Integer> collect = getBaseMapper().selectAlbumMusicSheetStatInfo(album.getId(), ChargeTypeEnum.FREE).stream()
+                    .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal, (o, n) -> n));
+
+            if (collect.getOrDefault(album.getId(), 0) > 2) {
+                throw new BizException(MessageFormat.format("当前专辑免费单曲数为 {0}, 已超过免费数量", collect.get(album.getId())));
+            }
+        }
+
         return this.updateById(musicAlbum);
     }
 

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.*;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.common.enums.ActivityShareEnum;
 import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
@@ -31,13 +32,13 @@ import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import com.yonge.toolset.utils.easyexcel.ExcelException;
 
+import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 
@@ -318,6 +319,21 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     @Override
     public IPage<MusicSheetVo> selectStudentPage(IPage<MusicSheetVo> page, StudentMusicSheetSearch query, ClientEnum clientType) {
     	List<MusicSheetVo> records = baseMapper.selectStudentMusicPage(page, query, clientType);
+
+        if (CollectionUtils.isNotEmpty(records)) {
+
+            // 统计单曲归属专辑数
+            List<Long> musicIds = records.stream()
+                    .map(MusicSheet::getId).distinct().collect(Collectors.toList());
+
+            Map<Long, Integer> collect = getBaseMapper().selectMusicAlbumStatInfo(musicIds).stream()
+                    .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal, (o, n) -> n));
+
+            for (MusicSheetVo item : records) {
+
+                item.setAlbumNums(collect.getOrDefault(item.getId(), 0));
+            }
+        }
     	
     	/*if(query.getMyself() != null && query.getMyself() == false){//首页
         	if(records == null || records.size() == 0){

+ 33 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumDetailVo.java

@@ -56,6 +56,15 @@ public class AlbumDetailVo {
     @ApiModelProperty("相关专辑")
     private List<MusicAlbumVo> relatedMusicAlbum;
 
+    @ApiModelProperty("专辑价格 ")
+    private Double albumPrice;
+
+    @ApiModelProperty("专辑价格 ")
+    private String paymentType;
+
+    @ApiModelProperty("专辑曲目付费方式")
+    private List<String> musicPaymentTypes;
+
 
     public String getSubjectId() {
         return subjectId;
@@ -179,4 +188,28 @@ public class AlbumDetailVo {
     public void setFavorite(YesOrNoEnum favorite) {
         this.favorite = favorite;
     }
+
+    public Double getAlbumPrice() {
+        return albumPrice;
+    }
+
+    public void setAlbumPrice(Double albumPrice) {
+        this.albumPrice = albumPrice;
+    }
+
+    public String getPaymentType() {
+        return paymentType;
+    }
+
+    public void setPaymentType(String paymentType) {
+        this.paymentType = paymentType;
+    }
+
+    public List<String> getMusicPaymentTypes() {
+        return musicPaymentTypes;
+    }
+
+    public void setMusicPaymentTypes(List<String> musicPaymentTypes) {
+        this.musicPaymentTypes = musicPaymentTypes;
+    }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVo.java

@@ -38,6 +38,8 @@ public class MusicSheetVo extends MusicSheet {
     @ApiModelProperty("专辑中曲目的排序号")
     private Integer albumSortNumber;  //排序号
 
+    @ApiModelProperty("单曲专辑数")
+    private Integer albumNums;
 
     public Integer getAlbumSortNumber() {
         return albumSortNumber;
@@ -102,4 +104,12 @@ public class MusicSheetVo extends MusicSheet {
     public void setPlay(YesOrNoEnum play) {
         this.play = play;
     }
+
+    public Integer getAlbumNums() {
+        return albumNums;
+    }
+
+    public void setAlbumNums(Integer albumNums) {
+        this.albumNums = albumNums;
+    }
 }

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

@@ -34,6 +34,8 @@
         t.create_time_,
         t.audit_version_,
         t.create_by_,
+        t.album_price_,
+        t.payment_type_,
         t.update_time_,
         t.update_by_
     </sql>
@@ -206,6 +208,9 @@
        and amr.album_id_ = t.id_) as musicSheetCount
         ,if(t2.num >0,t2.num,0) as albumFavoriteCount
         from music_album t
+        <if test="query.musicId != null">
+            JOIN album_music_relate t1 ON (t.id_ = t1.album_id_ AND t1.music_sheet_id_ = #{query.musicId})
+        </if>
         left join (select count(1) as num,af.album_id_ from album_favorite af
             left join sys_user su on (af.user_id_ = su.id_ <if test="clientType != null"> AND af.client_type_ = #{clientType} </if>)
             where su.del_flag_ = 0 group by af.album_id_
@@ -245,4 +250,22 @@
         </if>
         ,t.id_ desc
     </select>
+
+    <!--专辑曲目付费方式统计-->
+    <select id="selectAlbumMusicSheetStatInfo"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper">
+        SELECT t1.album_id_ AS id, COUNT(t1.id_) AS total
+        FROM album_music_relate t1 JOIN music_sheet t2 ON (t1.music_sheet_id_ = t2.id_)
+        <where>
+            <if test="albumId != null">
+                AND t1.album_id_ = #{albumId}
+            </if>
+            <if test="paymentType != null">
+                AND t2.payment_type_ = #{paymentType}
+            </if>
+        </where>
+        GROUP BY t1.album_id_
+    </select>
+    <!--专辑曲目付费方式统计-->
+
 </mapper>

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

@@ -191,6 +191,15 @@
             <if test="param.delFlag != null">
                 and t.del_flag_ = #{param.delFlag}
             </if>
+            <if test="param.sourceType != null">
+                AND t.source_type_ = #{param.sourceType}
+            </if>
+            <if test="param.chargeType != null">
+                AND (t.payment_type_ = 'FREE' OR FIND_IN_SET(#{param.chargeType}, t.payment_type_))
+            </if>
+            <if test="param.paymentTypes != null">
+                AND t.payment_type_ IN (<foreach collection="param.paymentTypes" separator="," item="item">#{item}</foreach>)
+            </if>
             <if test="param.id != null">
                 <if test="param.type == 2">
                     and amr.album_id_ = #{param.id}
@@ -713,4 +722,17 @@
 
         order by msar.id_ desc
     </select>
+
+    <!--单曲专辑数量统计-->
+    <select id="selectMusicAlbumStatInfo" resultType="com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper">
+        SELECT t1.music_sheet_id_ AS id, COUNT(DISTINCT t1.id_) AS total
+        FROM album_music_relate t1 JOIN music_sheet t2 ON (t1.music_sheet_id_ = t2.id_)
+        <where>
+            <if test="musicIds != null">
+                AND t1.music_sheet_id_ IN (<foreach collection="musicIds" separator="," item="item">#{item}</foreach>)
+            </if>
+        </where>
+        GROUP BY t1.music_sheet_id_
+    </select>
+    <!--单曲专辑数量统计-->
 </mapper>