刘俊驰 1 년 전
부모
커밋
f3fdec0ddb
27개의 변경된 파일358개의 추가작업 그리고 217개의 파일을 삭제
  1. 16 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java
  2. 1 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/RewardTypeEnum.java
  3. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  4. 12 58
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MemberPriceSettings.java
  5. 23 130
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java
  6. 37 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/EVipRecordStatus.java
  7. 45 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/EVipType.java
  8. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/GoodTypeEnum.java
  9. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java
  10. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PeriodEnum.java
  11. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/coupon/CouponCategoryEnum.java
  12. 21 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java
  13. 12 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  14. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  15. 11 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  16. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SubjectServiceImpl.java
  17. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  18. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  19. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java
  20. 78 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  21. 6 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeVo.java
  22. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java
  23. 32 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/VipCardRecordWrapper.java
  24. 1 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/HomeMapper.xml
  25. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MemberPriceSettingsMapper.xml
  26. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  27. 10 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml

+ 16 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java

@@ -5,6 +5,7 @@ import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsSubjectWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.musicInstrument.CbsMusicalInstrumentWrapper;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.dto.PageUtil;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.queryInfo.SubjectQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.SubjectService;
@@ -179,4 +180,19 @@ public class SubjectController extends BaseController {
 			throw BizException.from("内容平台服务异常");
 		}
     }
+
+	@ApiOperation(value = "内容平台对应的声部数据")
+	@PostMapping("/cbsSubject/list")
+	public HttpResponseResult<PageInfo<CbsSubjectWrapper.Subject>> subjectPage(){
+		CbsSubjectWrapper.SubjectQuery subjectQuery = new CbsSubjectWrapper.SubjectQuery();
+		subjectQuery.setPage(1);
+		subjectQuery.setRows(-1);
+
+		try {
+			return succeed(PageUtil.pageInfo(musicFeignClientService.subjectPage(subjectQuery).feignData()));
+		} catch (Exception e) {
+			log.error("内容平台对应的声部数据查询失败", e);
+			throw BizException.from("内容平台服务异常");
+		}
+	}
 }

+ 1 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/RewardTypeEnum.java

@@ -13,6 +13,7 @@ public enum RewardTypeEnum implements BaseEnum<String, RewardTypeEnum> {
 
     ACTUAL("实物"),
     VIP("小酷AI会员"),
+    SVIP("小酷AISVIP会员"),
     PIANO_ROOM("琴房时长"),
     COUPON("优惠券"),
     ;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java

@@ -32,7 +32,7 @@ public class OrderReq {
     @ApiModelProperty(value = "订单名称 ", required = true)
     private String orderName;
     @NotNull(message = "订单类型不能为空")
-    @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
+    @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  SVIP:SVIP PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
     private OrderTypeEnum orderType;
     @ApiModelProperty(value = "订单描述信息 ")
     private String orderDesc;

+ 12 - 58
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MemberPriceSettings.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.biz.dal.enums.EVipType;
 import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -11,11 +12,13 @@ import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.PositiveOrZero;
 import java.math.BigDecimal;
 
+@Data
 @TableName("member_price_settings")
 @ApiModel(value = "MemberPriceSettings对象", description = "")
 public class MemberPriceSettings implements Serializable {
@@ -50,68 +53,19 @@ public class MemberPriceSettings implements Serializable {
 	@TableField(value = "update_by_")
 	private Long updateBy;
 
-	public Long getId() {
-		return id;
-	}
 
-	public void setId(Long id) {
-		this.id = id;
-	}
+    @ApiModelProperty("状态 1:启用 0:停用 ")
+    @TableField(value = "status_")
+    private Boolean status;
 
-	public PeriodEnum getPeriod() {
-		return period;
-	}
 
-	public void setPeriod(PeriodEnum period) {
-		this.period = period;
-	}
+    @ApiModelProperty("描述文案")
+    @TableField(value = "desc_")
+    private String desc;
 
-	public BigDecimal getSalePrice() {
-		return salePrice;
-	}
 
-	public void setSalePrice(BigDecimal salePrice) {
-		this.salePrice = salePrice;
-	}
-
-	public BigDecimal getOriginalPrice() {
-		return originalPrice;
-	}
-
-	public void setOriginalPrice(BigDecimal originalPrice) {
-		this.originalPrice = originalPrice;
-	}
-
-	public Date getCreateTime() {
-		return createTime;
-	}
-
-	public void setCreateTime(Date createTime) {
-		this.createTime = createTime;
-	}
-
-	public Date getUpdateTime() {
-		return updateTime;
-	}
-
-	public void setUpdateTime(Date updateTime) {
-		this.updateTime = updateTime;
-	}
-
-	public Long getCreateBy() {
-		return createBy;
-	}
-
-	public void setCreateBy(Long createBy) {
-		this.createBy = createBy;
-	}
-
-	public Long getUpdateBy() {
-		return updateBy;
-	}
-
-	public void setUpdateBy(Long updateBy) {
-		this.updateBy = updateBy;
-	}
 
+    @ApiModelProperty("会员类型")
+    @TableField(value = "vip_type_")
+    private EVipType vipType;
 }

+ 23 - 130
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java

@@ -4,20 +4,20 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
-import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 /**
  * 购买会员卡记录表
  */
+@Data
 @TableName("vip_card_record")
 @ApiModel(value = "VipCardRecord对象", description = "购买会员卡记录表")
 public class VipCardRecord implements Serializable {
@@ -90,131 +90,24 @@ public class VipCardRecord implements Serializable {
     @TableField(value = "reason_")
     private String reason;
 
-    public Long getCreateBy() {
-        return createBy;
-    }
-
-    public void setCreateBy(Long createBy) {
-        this.createBy = createBy;
-    }
-
-    public String getReason() {
-        return reason;
-    }
-
-    public void setReason(String reason) {
-        this.reason = reason;
-    }
-
-    public Integer getTimes() {
-        return times;
-    }
-
-    public void setTimes(Integer times) {
-        this.times = times;
-    }
-
-    public PeriodEnum getType() {
-        return type;
-    }
-
-    public void setType(PeriodEnum type) {
-        this.type = type;
-    }
-
-    public SourceTypeEnum getSourceType() {
-        return sourceType;
-    }
-
-    public void setSourceType(SourceTypeEnum sourceType) {
-        this.sourceType = sourceType;
-    }
-
-    public ClientEnum getClientType() {
-        return clientType;
-    }
-
-    public void setClientType(ClientEnum clientType) {
-        this.clientType = clientType;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-    
-	public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public String getOrderNo() {
-        return orderNo;
-    }
-
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
-    }
-
-    public String getSubOrderNo() {
-        return subOrderNo;
-    }
-
-    public void setSubOrderNo(String subOrderNo) {
-        this.subOrderNo = subOrderNo;
-    }
-
-    public Long getVipCardId() {
-        return vipCardId;
-    }
-
-    public void setVipCardId(Long vipCardId) {
-        this.vipCardId = vipCardId;
-    }
-
-    public Date getStartTime() {
-        return startTime;
-    }
-
-    public void setStartTime(Date startTime) {
-        this.startTime = startTime;
-    }
-    
-	public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-    
-	public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-    
-	public Date getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(Date endTime) {
-        this.endTime = endTime;
-    }
-
-    public Integer getMsgStatus() {
-        return msgStatus;
-    }
-
-    public void setMsgStatus(Integer msgStatus) {
-        this.msgStatus = msgStatus;
-    }
+    @ApiModelProperty("会员类型 VIP,SVIP")
+    @TableField(value = "vip_type_")
+    private EVipType vipType;
+
+    @ApiModelProperty("状态 ADD:新增,DEDUCTION:扣减,UPDATE:变更")
+    @TableField(value = "status_")
+    private EVipRecordStatus status;
+
+    @ApiModelProperty("是否展示1:展示,0:隐藏")
+    @TableField(value = "display_flag_")
+    private Boolean displayFlag;
+
+    @ApiModelProperty("是否有效 1:有效,0:失效")
+    @TableField(value = "efficient_flag_")
+    private Boolean efficientFlag;
+
+    @ApiModelProperty("关联ID")
+    @TableField(value = "ref_id_")
+    private Long refId;
+
 }

+ 37 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/EVipRecordStatus.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 认证审核类型 ADD 新增 MODIFY 修改
+ *
+ * @Author: liweifan
+ * @Data: 2022/3/16 10:19
+ */
+public enum EVipRecordStatus implements BaseEnum<String, EVipRecordStatus> {
+
+    //状态 ADD:新增,DEDUCTION:扣减,UPDATE:变更
+    ADD("新增"),
+    DEDUCTION("扣减"),
+    UPDATE("变更"),
+
+    ;
+    @EnumValue
+    private String code;
+    private String name;
+
+    EVipRecordStatus(String name) {
+        this.code = this.name();
+        this.name = name;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 45 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/EVipType.java

@@ -0,0 +1,45 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 认证审核类型 ADD 新增 MODIFY 修改
+ *
+ * @Author: liweifan
+ * @Data: 2022/3/16 10:19
+ */
+public enum EVipType implements BaseEnum<String, EVipType> {
+
+    // 字段 说明 VIP:会员 SVIP:SVIP,PERMANENT_SVIP:永久SVIP,NOT_VIP:不是vip
+
+    VIP("会员"),
+    SVIP("SVIP"),
+
+
+    // 业务用字段
+    // 永久SVIP
+    PERMANENT_SVIP("永久SVIP"),
+
+    // 不是vip
+    NOT_VIP("不是vip"),
+
+    ;
+    @EnumValue
+    private String code;
+    private String name;
+
+    EVipType(String name) {
+        this.code = this.name();
+        this.name = name;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/GoodTypeEnum.java

@@ -11,6 +11,7 @@ import com.yonge.toolset.base.enums.BaseEnum;
  */
 public enum GoodTypeEnum implements BaseEnum<String, GoodTypeEnum> {
     VIP("开通会员"),
+    SVIP("开通会员 SVIP"),
     PRACTICE("陪练课购买"),
     LIVE("直播课购买"),
     VIDEO("视频课购买"),

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java

@@ -11,6 +11,7 @@ import com.yonge.toolset.base.enums.BaseEnum;
  */
 public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     VIP("开通会员"),
+    SVIP("开通会员 SVIP"),
     PRACTICE("陪练课购买"),
     LIVE("直播课购买"),
     VIDEO("视频课购买"),

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

@@ -12,7 +12,10 @@ public enum PeriodEnum implements BaseEnum<String, PeriodEnum> {
 	MONTH("月"),
 	QUARTERLY("季度"),
 	YEAR_HALF("半年"),
-	YEAR("年");
+	YEAR("年"),
+	PERPETUAL("永久"),
+
+    ;
 
 	@EnumValue
 	private String code;

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/coupon/CouponCategoryEnum.java

@@ -16,6 +16,7 @@ public enum CouponCategoryEnum implements BaseEnum<String, CouponCategoryEnum> {
 
     UNIVERSAL("全场通用", "UNIVERSAL"),
     VIP("小酷Ai", "VIP"),
+    SVIP("小酷Ai SVIP ", "SVIP"),
     PIANO("云酷琴房", "PIANO_ROOM"),
     MALL("商场购物券", "MALL"),
     MUSIC("单曲点播券", "MUSIC"),

+ 21 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java

@@ -15,9 +15,12 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
+import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 
+import java.util.List;
+
 /**
  * 购买会员卡记录表 服务类
  *
@@ -83,4 +86,22 @@ public interface VipCardRecordService extends IService<VipCardRecord> {
      * @return
      */
     PageInfo<VipRecordVo> vipRecord(VipRecordSearch recordSearch);
+
+    /**
+     * 获取生效中的会员记录
+     *
+     * @param userId
+     * @param clientEnum
+     * @return
+     */
+    List<VipCardRecord> getEfficientVipRecord(Long userId, ClientEnum clientEnum);
+
+    /**
+     * 用户会员信息
+     *
+     * @param userId
+     * @param clientEnum
+     * @return
+     */
+    VipCardRecordWrapper.UserVip UserVipInfo(Long userId, ClientEnum clientEnum);
 }

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

@@ -90,6 +90,9 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         if (null == detail) {
             return HttpResponseResult.failed("未找到会员卡信息");
         }
+        if (Boolean.FALSE.equals(detail.getStatus())) {
+            return HttpResponseResult.failed("会员卡已下架");
+        }
 
         OrderCreateRes orderCreateRes = new OrderCreateRes();
         BigDecimal couponAmount = BigDecimal.ZERO;
@@ -97,7 +100,8 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
         if (activityPlanVo != null && activityPlanVo.getActivityState() == 1) {
             for (ActivityPlanRewardDto activityPlanRewardDto : activityPlanVo.getActivityRewardList()) {
-                if (activityPlanRewardDto.getActivityReward().getUnit().getCode().equals(detail.getPeriod().getCode())) {
+                if (activityPlanRewardDto.getActivityReward().getRewardType().getCode().equals(detail.getVipType().getCode())
+                && activityPlanRewardDto.getActivityReward().getUnit().getCode().equals(detail.getPeriod().getCode())) {
                     couponAmount = activityPlanRewardDto.getActivityReward().getDiscountPrice();
                     orderCreateRes.setActivityId(activityPlanVo.getId());
                     orderCreateRes.setRewardId(activityPlanRewardDto.getActivityReward().getId());
@@ -263,12 +267,18 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         if (null == detail) {
             throw new BizException("未找到会员卡信息");
         }
+
+        if (Boolean.FALSE.equals(detail.getStatus())) {
+            throw new BizException("会员卡已下架");
+        }
+
         BigDecimal couponAmount = BigDecimal.ZERO;
         ActivityPlanVo activityPlanVo = activityPlanService.detail(orderGoodsInfo.getActivityId());
 
         if (activityPlanVo != null && activityPlanVo.getActivityState() == 1) {
             for (ActivityPlanRewardDto activityPlanRewardDto : activityPlanVo.getActivityRewardList()) {
-                if (activityPlanRewardDto.getActivityReward().getUnit().getCode().equals(detail.getPeriod().getCode())) {
+                if (activityPlanRewardDto.getActivityReward().getRewardType().getCode().equals(detail.getVipType().getCode())
+                    && activityPlanRewardDto.getActivityReward().getUnit().getCode().equals(detail.getPeriod().getCode())) {
                     couponAmount = activityPlanRewardDto.getActivityReward().getDiscountPrice();
                     break;
                 }

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

@@ -2318,11 +2318,11 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         ThreadPoolExecutor executorService =  new ThreadPoolExecutor(50, 50,
             0L, TimeUnit.MILLISECONDS,
             new LinkedBlockingQueue<>());
-        while (true) {
-            IPage<MusicSheet> page = baseMapper.selectSyncPage(new Page<>(curPage, pageSize));
+//        while (true) {
+            IPage<MusicSheet> page = baseMapper.selectSyncPage(new Page<>(1, -1));
             List<MusicSheet> records = page.getRecords();
             if (CollectionUtils.isEmpty(records)) {
-                break;
+                return;
             }
             for (MusicSheet record : records) {
                 if (record.getCbsMusicSheetId() != null && !DateUtil.format(record.getCreateTime(),"yyyy-MM-dd HH:mm:ss").equals("2024-06-25 00:00:00")) {
@@ -2343,7 +2343,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             }
 
             curPage++;
-        }
+//        }
 
         while (!executorService.getQueue().isEmpty()) {
             try {
@@ -2377,7 +2377,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             musicSheet1.setMusicSheetName(musicSheet.getName());
             this.updateById(musicSheet1);
         } catch (Exception e){
-            log.error("曲目同步失败,曲目ID:{}", record.getId());
+            log.error("曲目同步失败,曲目ID:{}", record.getId(),e);
         }
 
     }

+ 11 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -17,10 +17,7 @@ import com.yonge.cooleshow.biz.dal.dao.*;
 import com.yonge.cooleshow.biz.dal.dto.search.QueryMyFollowSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
-import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
-import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
@@ -34,6 +31,7 @@ import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -116,6 +114,9 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     @Autowired
     private SysMessageService sysMessageService;
 
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
+
     @Override
     public StudentDao getDao() {
         return baseMapper;
@@ -190,6 +191,12 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         studentHomeVo.setMusicAlbumNum(null == total.getMusicAlbumNum() ? 0 : total.getMusicAlbumNum());
         studentHomeVo.setMusicSheetNum(null == total.getMusicSheetNum() ? 0 : total.getMusicSheetNum());
 
+        // 设置会员信息
+
+
+        studentHomeVo.setUserVip(vipCardRecordService.UserVipInfo(user.getId(), ClientEnum.STUDENT));
+
+
         // IM聊天用户ID
         studentHomeVo.setImUserId(imGroupService.getImUserId(String.valueOf(detail.getUserId()), ClientEnum.STUDENT.name()));
 

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

@@ -334,8 +334,8 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
                                 continue;
                             }
                             subject.setCbsSubjectName(row.getName());
-                            subject.setName(row.getName());
-                            subject.setCode(row.getCode());
+//                            subject.setName(row.getName());
+//                            subject.setCode(row.getCode());
                             dataList.add(subject);
                         }
                     }
@@ -394,11 +394,11 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
 
     @Override
     public void convertSubject(List<Subject> subjectSelect) {
-        convert(subjectSelect);
+//        convert(subjectSelect);
     }
 
     private void convert(List<Subject> subjects){
-        if(CollectionUtils.isNotEmpty(subjects)){
+        /*if(CollectionUtils.isNotEmpty(subjects)){
             // cbs声部ID集合
             List<Long> cbsSubjectIds = subjects.stream().map(Subject::getCbsSubjectId).collect(Collectors.toList());
             CbsSubjectWrapper.SubjectQuery subjectQuery = new CbsSubjectWrapper.SubjectQuery();
@@ -423,7 +423,7 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
             } catch (Exception e) {
                 log.error("调用音乐服务查询曲目详情失败", e);
             }
-        }
+        }*/
     }
 
     @Override

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

@@ -208,6 +208,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     @Autowired
     private UserTenantBindRecordMapper userTenantBindRecordMapper;
 
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
 
     @Override
     public TeacherDao getDao() {
@@ -376,6 +378,11 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             }
         }
 
+        // 会员信息
+
+        teacherHomeVo.setUserVip(vipCardRecordService.UserVipInfo(teacherHomeVo.getUserId(), ClientEnum.TEACHER));
+
+
         if (YesOrNoEnum.YES.equals(teacher.getMusicianFlag())) {
             teacherHomeVo.setMusicianAuthStatus(AuthStatusEnum.PASS);
         } else {
@@ -1238,7 +1245,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     }
 
     private void sendBindUnBindSMS(Long userId, String phone, MessageTypeEnum messageType, Long tenantId) {
+        if (tenantId == null ){
+            return;
+        }
         TenantInfo tenantInfo = tenantInfoService.getById(tenantId);
+        if (tenantInfo == null) {
+            return;
+        }
         Map<Long, String> receivers = new HashMap<>();
         receivers.put(userId, phone);
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, messageType,

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

@@ -171,6 +171,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         /**********订单生成前******************/
         //vip开通缴费
         orderCreate.put(GoodTypeEnum.VIP, memberPriceSettingsService::orderCreate);
+        orderCreate.put(GoodTypeEnum.SVIP, memberPriceSettingsService::orderCreate);
         //直播课程购买
         orderCreate.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourse);
         //陪练课购买
@@ -1036,6 +1037,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             configValue = sysConfigService.findConfigValue(SysConfigConstant.GOOD_LOGO_ACTI_REGIST);
         } else if (GoodTypeEnum.ALBUM.equals(goodTypeEnum)) {
             configValue = sysConfigService.findConfigValue(SysConfigConstant.GOOD_LOGO_ALBUM);
+        } else if (GoodTypeEnum.SVIP.equals(goodTypeEnum)) {
+            configValue = sysConfigService.findConfigValue(SysConfigConstant.GOOD_LOGO_VIP);
         }
         return configValue;
     }

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

@@ -161,6 +161,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         /**********订单生成前 商品校验******************/
         //vip开通缴费
         orderGoodsCreate.put(GoodTypeEnum.VIP, memberPriceSettingsService::orderCreate);
+        orderGoodsCreate.put(GoodTypeEnum.SVIP, memberPriceSettingsService::orderCreate);
         //直播课程购买
         orderGoodsCreate.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourse);
         //陪练课购买
@@ -198,6 +199,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         paymentSuccess.put(GoodTypeEnum.VIDEO, paymentDivMemberRecordService::videoCourse);
         paymentSuccess.put(GoodTypeEnum.ALBUM, paymentDivMemberRecordService::musicSheet);
         paymentSuccess.put(GoodTypeEnum.VIP, paymentDivMemberRecordService::vip);
+        paymentSuccess.put(GoodTypeEnum.SVIP, paymentDivMemberRecordService::vip);
         paymentSuccess.put(GoodTypeEnum.ACTI_REGIST, paymentDivMemberRecordService::activity);
 
         /**********订单取消后******************/

+ 78 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java

@@ -1,21 +1,21 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.MemberPriceSettingsDao;
 import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings;
 import com.yonge.cooleshow.biz.dal.entity.Student;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
-import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.date.DateUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -27,6 +27,7 @@ import com.yonge.cooleshow.biz.dal.dao.VipCardRecordDao;
 
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -228,6 +229,79 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
     }
 
+    /**
+     * 获取生效中的会员记录
+     * @param userId
+     * @param clientEnum
+     * @return
+     */
+    @Override
+    public List<VipCardRecord> getEfficientVipRecord(Long userId, ClientEnum clientEnum) {
+        return this.lambdaQuery()
+            .eq(VipCardRecord::getUserId, userId)
+            .eq(VipCardRecord::getEfficientFlag, true)
+            .eq(VipCardRecord::getClientType, clientEnum.name())
+            .and(wrapper -> wrapper
+                .gt(VipCardRecord::getEndTime, new Date())
+                .or()
+                .isNull(VipCardRecord::getEndTime)
+            )
+            .list();
+    }
+
+    /**
+     * 用户会员信息
+     *
+     * @param userId
+     * @param clientEnum
+     * @return
+     */
+    @Override
+    public VipCardRecordWrapper.UserVip UserVipInfo (Long userId, ClientEnum clientEnum) {
+        // 获取生效中的会员记录
+        VipCardRecordWrapper.UserVip userVip = new VipCardRecordWrapper.UserVip();
+        List<VipCardRecord> vipCardRecords = this.getEfficientVipRecord(userId,clientEnum);
+        if (CollectionUtils.isEmpty(vipCardRecords)) {
+            userVip.setVipType(EVipType.NOT_VIP);
+        } else {
+            // 存在没有结束时间的SVIP记录 永久SVIP
+            List<VipCardRecord> svipList = vipCardRecords.stream().filter(o -> o.getVipType() == EVipType.SVIP).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(svipList)) {
+                userVip.setVipType(EVipType.SVIP);
+
+                Optional<VipCardRecord> first = svipList.stream().filter(o -> o.getEndTime() == null).findFirst();
+                if (first.isPresent()) {
+                    userVip.setVipType(EVipType.PERMANENT_SVIP);
+                } else {
+                    Optional<VipCardRecord> max = svipList.stream().max(Comparator.comparing(VipCardRecord::getEndTime));
+                    max.ifPresent(vipCardRecord -> userVip.setSvipEndDate(vipCardRecord.getEndTime()));
+
+                }
+            }
+            // 过滤出VIP数据
+            List<VipCardRecord> vipList = vipCardRecords.stream().filter(o -> o.getVipType() == EVipType.VIP).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(vipList)) {
+                if (userVip.getVipType() == null) {
+                    userVip.setVipType(EVipType.VIP);
+                }
+                Optional<VipCardRecord> max = vipList.stream().max(Comparator.comparing(VipCardRecord::getEndTime));
+                max.ifPresent(vipCardRecord -> userVip.setVipEndDate(vipCardRecord.getEndTime()));
+            }
+        }
+
+        // 设置剩余天数
+        if (userVip.getVipEndDate() != null) {
+
+            int num = DateUtil.daysBetween(new Date(), userVip.getVipEndDate());
+            userVip.setVipEndDays(Math.max(num, 0));
+        }
+        if (userVip.getSvipEndDate() != null) {
+            int num = DateUtil.daysBetween(new Date(), userVip.getSvipEndDate());
+            userVip.setSvipEndDays(Math.max(num, 0));
+        }
+        return userVip;
+    }
+
     // 发送会员到期3天消息推送
     private void temporary3DaysSend(Long userId, String phone, ClientEnum clientType) {
         Map<Long, String> receivers = new HashMap<>();

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

@@ -2,7 +2,9 @@ package com.yonge.cooleshow.biz.dal.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.enums.EVipType;
 import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -57,9 +59,12 @@ public class StudentHomeVo extends Student {
     private Integer musicAlbumNum;
     @ApiModelProperty("曲谱数 ")
     private Integer musicSheetNum;
-    @ApiModelProperty(value = "是否会员 0否 1是")
+    @ApiModelProperty(value = "是否会员 0否 1是 弃用")
     private YesOrNoEnum isVip;
 
+    @ApiModelProperty(value = "会员信息")
+    private VipCardRecordWrapper.UserVip userVip;
+
     @ApiModelProperty(value = "IM用户ID")
     private String imUserId;
 

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

@@ -5,9 +5,11 @@ import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -18,6 +20,7 @@ import java.util.List;
  * @Author: liweifan
  * @Data: 2022/3/21 18:37
  */
+@Data
 @ApiModel(value = "TeacherHomeVo对象", description = "老师主页基本信息返回")
 public class TeacherHomeVo extends Teacher implements Serializable {
     private static final long serialVersionUID = 1L;
@@ -81,6 +84,10 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     private String userType;
 
 
+
+    @ApiModelProperty(value = "会员信息")
+    private VipCardRecordWrapper.UserVip userVip;
+
     @ApiModelProperty(value = "默认查询声部名称 ")
     private String defaultSubjectName;
 
@@ -95,6 +102,7 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     @ApiModelProperty(value = "imToken")
     private String imToken;
 
+
     public String getTenantName() {
         return tenantName;
     }
@@ -123,7 +131,7 @@ public class TeacherHomeVo extends Teacher implements Serializable {
         this.membershipDays = membershipDays;
     }
 
-    @ApiModelProperty(value = "是否会员 0否 1是")
+    @ApiModelProperty(value = "是否会员 0否 1是 弃用")
     private YesOrNoEnum isVip;
 
     public YesOrNoEnum getIsVip() {

+ 32 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/VipCardRecordWrapper.java

@@ -0,0 +1,32 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+import com.yonge.cooleshow.biz.dal.enums.EVipType;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+public class VipCardRecordWrapper {
+
+    @Data
+    public static class UserVip{
+
+
+        @ApiModelProperty(value = "vip类型 VIP:会员 SVIP:SVIP,PERMANENT_SVIP:永久SVIP,NOT_VIP:不是vip")
+        private EVipType vipType;
+
+        @ApiModelProperty(value = "vip结束时间")
+        private Date vipEndDate;
+
+
+        @ApiModelProperty(value = "vip剩余天数")
+        private Integer vipEndDays;
+
+        @ApiModelProperty(value = "svip结束时间")
+        private Date svipEndDate;
+
+
+        @ApiModelProperty(value = "svip剩余天数")
+        private Integer svipEndDays;
+    }
+}

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

@@ -10,9 +10,7 @@
 			(select count(1) from teacher_auth_musician_record a
 				left join sys_user u on a.user_id_ = u.id_
 			 	where u.del_flag_ =0 and a.teacher_auth_status_ = 'DOING') as musicianNum,
-        	(select count(1) from music_sheet a
-				left join sys_user u on a.user_id_ = u.id_
-			 	where u.del_flag_ =0 and a.del_flag_ = 0 and a.audit_status_ = 'DOING') as musicNum,
+        	(select count(1) from music_sheet_auth_record where audit_state_ = last_audit_state_ and audit_state_ = 'DOING') as musicNum,
         	(select count(1) from video_lesson_group where audit_status_ = 'DOING') as videoCourseNum,
 			(select count(1) from teacher_style_video a
 				left join sys_user u on a.user_id_ = u.id_

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MemberPriceSettingsMapper.xml

@@ -10,6 +10,9 @@
 		<result column="update_time_" property="updateTime" />
 		<result column="create_by_" property="createBy" />
 		<result column="update_by_" property="updateBy" />
+		<result column="status_" property="status" />
+		<result column="desc_" property="desc" />
+		<result column="vip_type_" property="vipType" />
 	</resultMap>
 
 	<!-- 表字段 -->
@@ -22,6 +25,9 @@
         , t.update_time_ as updateTime
         , t.create_by_ as createBy
         , t.update_by_ as updateBy
+        , t.status_ as status
+        , t.desc_ as `desc`
+        , t.vip_type_ as vipType
         </sql>
 
 	<select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.MemberPriceSettingsVo">

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

@@ -922,7 +922,7 @@
         update music_sheet
         set music_sheet_name_ = #{param.name},music_subject_ = #{param.subjectIds},music_svg_ = #{param.musicSvg},
             composer_ = #{param.composer},title_img_ = #{param.musicCover},music_img_ = #{param.musicCover},accompaniment_type_ = #{param.audioType},
-            play_speed_ = #{param.playSpeed},music_price_ = #{param.musicPrice},notation_ = #{param.notation},
+            play_speed_ = #{param.playSpeed},notation_ = #{param.notation},
             music_sheet_type_ = #{param.musicSheetType},source_type_ = CASE WHEN #{param.sourceType} = 'PLATFORM' THEN 'PLATFORM' ELSE 'TEACHER' END,
             create_by_ = #{param.userId}
         where cbs_music_sheet_id_ = #{param.id}
@@ -1020,7 +1020,7 @@
     <select id="selectSyncPage" resultType="com.yonge.cooleshow.biz.dal.entity.MusicSheet">
         select *
         from music_sheet
-        where del_flag_ = 0 and audit_status_ = 'PASS'
+        where del_flag_ = 0 and audit_status_ = 'PASS' and cbs_music_sheet_id_ is null
     </select>
     <!--单曲专辑数量统计-->
 </mapper>

+ 10 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml

@@ -17,6 +17,11 @@
             <result column="times_" property="times" />
             <result column="create_by_" property="createBy" />
             <result column="reason_" property="reason" />
+            <result column="vip_type_" property="vipType" />
+            <result column="status_" property="status" />
+            <result column="display_flag_" property="displayFlag" />
+            <result column="ref_id_" property="refId" />
+            <result column="efficient_flag_" property="efficientFlag" />
 		</resultMap>
 
     <!-- 表字段 -->
@@ -37,6 +42,11 @@
         ,t.times_ as times
         ,t.create_by_ as createBy
         ,t.reason_ as reason
+        ,t.vip_type_ as vipType
+        ,t.status_ as status
+        ,t.display_flag_ as displayFlag
+        ,t.ref_id_ as refId
+        ,t.efficient_flag_ as efficientFlag
         </sql>
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo">