浏览代码

Merge branch 'feature/1022_vip' into dev

刘俊驰 9 月之前
父节点
当前提交
bb7a3ac07a
共有 37 个文件被更改,包括 1148 次插入103 次删除
  1. 12 0
      mec-application/src/main/java/com/ym/mec/web/controller/MemberRankOrganizationFeeMapperController.java
  2. 42 6
      mec-application/src/main/java/com/ym/mec/web/controller/MemberRankSettingController.java
  3. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  4. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankSettingDao.java
  5. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java
  6. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java
  7. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java
  8. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankCategoryMapper.java
  9. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankCourseTypeMapper.java
  10. 21 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankSetting.java
  11. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantMemberRankSetting.java
  12. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/MemberRankCategoryMapperMapper.java
  13. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/MemberRankCourseTypeMapperMapper.java
  14. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/TenantMemberRankSettingMapper.java
  15. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MemberPrivilegesItemQueryInfo.java
  16. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MemberRankOrganizationFeeMapperWrapper.java
  17. 139 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MemberRankSettingWrapper.java
  18. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetWrapper.java
  19. 106 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TenantMemberRankSettingWrapper.java
  20. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankCategoryMapperService.java
  21. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankCourseTypeMapperService.java
  22. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankOrganizationFeeMapperService.java
  23. 15 3
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java
  24. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantMemberRankSettingService.java
  25. 37 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberPrivilegesItemServiceImpl.java
  26. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankCategoryMapperServiceImpl.java
  27. 52 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankCourseTypeMapperServiceImpl.java
  28. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankOrganizationFeeMapperServiceImpl.java
  29. 230 70
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  30. 16 20
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  31. 67 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantMemberRankSettingServiceImpl.java
  32. 7 2
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  33. 5 0
      mec-biz/src/main/resources/config/mybatis/MemberRankCategoryMapperMapper.xml
  34. 5 0
      mec-biz/src/main/resources/config/mybatis/MemberRankCourseTypeMapperMapper.xml
  35. 19 0
      mec-biz/src/main/resources/config/mybatis/MemberRankSettingMapper.xml
  36. 9 0
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  37. 5 0
      mec-biz/src/main/resources/config/mybatis/TenantMemberRankSettingMapper.xml

+ 12 - 0
mec-application/src/main/java/com/ym/mec/web/controller/MemberRankOrganizationFeeMapperController.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.entity.MemberRankOrganizationFeeMapper;
 import com.ym.mec.biz.dal.page.MemberRankFeeQueryInfo;
+import com.ym.mec.biz.dal.wrapper.MemberRankOrganizationFeeMapperWrapper;
 import com.ym.mec.biz.service.MemberRankOrganizationFeeMapperService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SysUserService;
@@ -39,6 +40,17 @@ public class MemberRankOrganizationFeeMapperController extends BaseController {
         return succeed();
     }
 
+
+    @ApiOperation(value = "新增")
+    @PostMapping("/addV2")
+    @PreAuthorize("@pcs.hasPermissions('memberRankOrganizationFeeMapper/addV2')")
+    @AuditLogAnnotation(operateName = "新增系统功能类型")
+    public Object addV2(@RequestBody MemberRankOrganizationFeeMapperWrapper.MemberRankOrganizationFeeMapperAdd memberRankOrganizationFeeMapper) {
+        memberRankOrganizationFeeMapper.setOperatorId(sysUserService.getUserId());
+        memberRankOrganizationFeeMapperService.addV2(memberRankOrganizationFeeMapper);
+        return succeed();
+    }
+
     @ApiOperation(value = "修改")
     @PostMapping("/update")
     @PreAuthorize("@pcs.hasPermissions('memberRankOrganizationFeeMapper/update')")

+ 42 - 6
mec-application/src/main/java/com/ym/mec/web/controller/MemberRankSettingController.java

@@ -1,18 +1,32 @@
 package com.ym.mec.web.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
+import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.MemberRankSettingService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 
 @RequestMapping("${app-config.url.web:}/memberRankSetting")
 @Api(tags = "会员等级服务")
@@ -24,12 +38,15 @@ public class MemberRankSettingController extends BaseController {
     @Autowired
     private SysUserService sysUserService;
 
+
+
     @ApiOperation(value = "新增")
     @PostMapping("/add")
     @PreAuthorize("@pcs.hasPermissions('memberRankSetting/add')")
     @AuditLogAnnotation(operateName = "新增会员等级")
-    public Object add(@RequestBody MemberRankSetting memberRankSetting) {
+    public HttpResponseResult<Object> add(@RequestBody MemberRankSettingWrapper.MemberRankSettingAdd memberRankSetting) {
         memberRankSetting.setOperator(sysUserService.getUserId());
+        memberRankSetting.setUpdateTime(new Date());
         memberRankSettingService.add(memberRankSetting);
         return succeed();
     }
@@ -38,24 +55,43 @@ public class MemberRankSettingController extends BaseController {
     @GetMapping("/get")
     @PreAuthorize("@pcs.hasPermissions('memberRankSetting/get')")
     @AuditLogAnnotation(operateName = "会员等级详情")
-    public Object get(Integer memberRankSettingId) {
+    public HttpResponseResult<MemberRankSettingWrapper.MemberRankSetting> get(Integer memberRankSettingId) {
         return succeed(memberRankSettingService.getDetail(memberRankSettingId));
     }
 
     @ApiOperation(value = "修改")
     @PostMapping("/update")
     @PreAuthorize("@pcs.hasPermissions('memberRankSetting/update')")
-    public Object update(@RequestBody MemberRankSetting memberRankSetting) {
+    @AuditLogAnnotation(operateName = "修改会员等级")
+    public HttpResponseResult<Object> update(@RequestBody MemberRankSettingWrapper.MemberRankSettingAdd memberRankSetting) {
         memberRankSetting.setOperator(sysUserService.getUserId());
         memberRankSettingService.updateSetting(memberRankSetting);
         return succeed();
     }
 
+
+
+    @ApiOperation(value = "删除")
+    @PostMapping("/del")
+    @PreAuthorize("@pcs.hasPermissions('memberRankSetting/del')")
+    @AuditLogAnnotation(operateName = "删除学练宝会员等级")
+    public HttpResponseResult<Object> update(@RequestParam Integer id) {
+        memberRankSettingService.del(id);
+        return succeed();
+    }
     @ApiOperation(value = "分页查询")
-    @GetMapping("/queryPage")
+    @PostMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('memberRankSetting/queryPage')")
-    public Object queryPage(QueryInfo queryInfo) {
-        return succeed(memberRankSettingService.queryPage(queryInfo));
+    public HttpResponseResult<List<MemberRankSettingWrapper.MemberRankSetting>> queryPage(@RequestBody MemberRankSettingWrapper.MemberRankSettingQuery queryInfo) {
+        return succeed(memberRankSettingService.queryPage2(queryInfo));
+    }
+
+
+    @ApiOperation(value = "树状列表")
+    @GetMapping("/categoryTree")
+    public HttpResponseResult<List<SysMusicScoreCategories>> queryTree(@RequestParam(required = false) Integer parentId) {
+
+        return succeed(memberRankSettingService.getTree(parentId));
     }
 
     @ApiOperation(value = "获取所有会员列表")

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -130,4 +130,6 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
     List<CloudCoachActivationDetailsDto> exportCloudCoachActivationDetails(@Param("month") String month, @Param("organId") String organId);
 
     List<CloudCoachActivationDetailsDto> exportMusicGroupNoCourse(@Param("organId") String organId);
+
+    int countByMemberRankSetttingId(@Param("memberRankSettingId") Integer memberRankSettingId);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankSettingDao.java

@@ -10,4 +10,6 @@ import com.ym.mec.common.dal.BaseDAO;
 public interface MemberRankSettingDao extends BaseDAO<Integer, MemberRankSetting> {
 
 	List<MemberRankSetting> queryListByIsDefault(@Param("isDefault") Boolean isDefault);
+
+    List<MemberRankSetting> selectBatchIds(@Param("ids") List<Integer> ids);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java

@@ -4,6 +4,7 @@ package com.ym.mec.biz.dal.dao;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApiWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApplicationExtendWrapper;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -32,4 +33,6 @@ public interface SysMusicScoreDao extends BaseDAO<Integer, SysMusicScore> {
     List<SysMusicScore> selectSyncPage();
 
     SysMusicScore getCbsId(@Param("cbsMusicSheetId") Long cbsMusicSheetId);
+
+    List<MusicSheetWrapper.CategoryMusicNumStat> getNumByCategoryIds(@Param("categoryIds") List<Integer> categoryIds);
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java

@@ -1,10 +1,12 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.wrapper.TenantMemberRankSettingWrapper;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.*;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author hgw
@@ -107,6 +109,10 @@ public class TenantInfoDto implements Serializable {
     @ApiModelProperty(value = "机构配置参数")
     private TenantConfigDto config;
 
+    @ApiModelProperty("机构会员信息设置")
+    @NotNull(message = "请填写机构会员信息设置!")
+    private List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> memberInfos;
+
     @ApiModelProperty(value = "购买的服务名称")
     private String platformServeName;
 
@@ -116,6 +122,14 @@ public class TenantInfoDto implements Serializable {
     @ApiModelProperty(value = "推荐人")
     private Integer recommender;
 
+    public List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> getMemberInfos() {
+        return memberInfos;
+    }
+
+    public void setMemberInfos(List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> memberInfos) {
+        this.memberInfos = memberInfos;
+    }
+
     public Integer getId() {
         return id;
     }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java

@@ -23,6 +23,9 @@ public class CloudTeacherOrder {
     @ApiModelProperty(value = "学生id")
     private Integer studentId;
 
+    @ApiModelProperty(value = "会员卡ID")
+    private Integer memberRankSettingId;
+
     @ApiModelProperty(value = "时长类型 1-天 2-月 3-年")
     private PeriodEnum type;
 

+ 35 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankCategoryMapper.java

@@ -0,0 +1,35 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import lombok.Data;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+
+/**
+ * 会员分类权限表
+ * 2024-10-22 14:51:51
+ */
+@Data
+@ApiModel(" MemberRankCategoryMapper-会员分类权限表")
+@TableName("member_rank_category_mapper")
+public class MemberRankCategoryMapper implements Serializable {
+
+	    @TableId(value = "id_", type = IdType.AUTO)
+        private Integer id;
+
+    @ApiModelProperty("分类编号") 
+	@TableField(value = "category_id_")
+    private Integer categoryId;
+
+    @ApiModelProperty("会员编号") 
+	@TableField(value = "rank_id_")
+    private Integer rankId;
+
+}

+ 35 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankCourseTypeMapper.java

@@ -0,0 +1,35 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import lombok.Data;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+
+/**
+ * 会员课程类型权限表
+ * 2024-10-22 14:51:51
+ */
+@Data
+@ApiModel(" MemberRankCourseTypeMapper-会员课程类型权限表")
+@TableName("member_rank_course_type_mapper")
+public class MemberRankCourseTypeMapper implements Serializable {
+
+	    @TableId(value = "id_", type = IdType.AUTO)
+        private Integer id;
+
+    @ApiModelProperty("课程类型") 
+	@TableField(value = "course_type_")
+    private String courseType;
+
+    @ApiModelProperty("会员编号") 
+	@TableField(value = "rank_id_")
+    private Integer rankId;
+
+}

+ 21 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankSetting.java

@@ -20,7 +20,10 @@ public class MemberRankSetting {
 
 	/**  */
 	private String name;
-	
+
+    private Integer parentId;
+    private Boolean delFlag;
+
 	/**  */
 	private String intro;
 	
@@ -47,7 +50,23 @@ public class MemberRankSetting {
 	
 	private MemberFeeSetting memberFeeSetting;
 
-	public String getExperienceIcon() {
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public Integer getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Integer parentId) {
+        this.parentId = parentId;
+    }
+
+    public String getExperienceIcon() {
 		return experienceIcon;
 	}
 

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantMemberRankSetting.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import lombok.Data;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+
+/**
+ * 机构学练宝配置表
+ * 2024-10-23 10:48:21
+ */
+@Data
+@ApiModel(" TenantMemberRankSetting-机构学练宝配置表")
+@TableName("tenant_member_rank_setting")
+public class TenantMemberRankSetting implements Serializable {
+
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("机构id") 
+	@TableField(value = "tenant_id_")
+    private Integer tenantId;
+
+    @ApiModelProperty("学练宝ID") 
+	@TableField(value = "member_rank_setting_id_")
+    private Integer memberRankSettingId;
+
+    @ApiModelProperty("机构配置:TENANT, 学生配置:STUDENT") 
+	@TableField(value = "type_")
+    private String type;
+
+    @ApiModelProperty("学练宝配置") 
+	@TableField(value = "member_config_")
+    private String memberConfig;
+
+}

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/MemberRankCategoryMapperMapper.java

@@ -0,0 +1,14 @@
+package com.ym.mec.biz.dal.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.MemberRankCategoryMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 会员分类权限表
+ * 2024-10-22 14:51:51
+ */
+@Repository
+public interface MemberRankCategoryMapperMapper extends BaseMapper<MemberRankCategoryMapper> {
+
+}

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/MemberRankCourseTypeMapperMapper.java

@@ -0,0 +1,14 @@
+package com.ym.mec.biz.dal.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.MemberRankCourseTypeMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 会员课程类型权限表
+ * 2024-10-22 14:51:51
+ */
+@Repository
+public interface MemberRankCourseTypeMapperMapper extends BaseMapper<MemberRankCourseTypeMapper> {
+
+}

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/TenantMemberRankSettingMapper.java

@@ -0,0 +1,15 @@
+package com.ym.mec.biz.dal.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.TenantMemberRankSetting;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 机构学练宝配置表
+ * 2024-10-23 10:48:21
+ */
+@Repository
+public interface TenantMemberRankSettingMapper extends BaseMapper<TenantMemberRankSetting> {
+
+
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MemberPrivilegesItemQueryInfo.java

@@ -7,6 +7,17 @@ public class MemberPrivilegesItemQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "父节点编号,默认0",required = false)
     private Integer parentId = 0;
 
+
+    private Integer memberRankSettingId;
+
+    public Integer getMemberRankSettingId() {
+        return memberRankSettingId;
+    }
+
+    public void setMemberRankSettingId(Integer memberRankSettingId) {
+        this.memberRankSettingId = memberRankSettingId;
+    }
+
     public Integer getParentId() {
         return parentId;
     }

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MemberRankOrganizationFeeMapperWrapper.java

@@ -0,0 +1,25 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.ym.mec.biz.dal.entity.MemberFeeSetting;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+public class MemberRankOrganizationFeeMapperWrapper {
+
+    @Data
+    public static class MemberRankOrganizationFeeMapperAdd{
+
+        @ApiModelProperty("机构ID 多个逗号隔开")
+        private String organIds;
+
+        @ApiModelProperty("会员卡ID")
+        private Integer memberRankSettingId;
+
+
+        private Integer operatorId;
+
+        @ApiModelProperty("价格信息")
+        private MemberFeeSetting memberFeeSetting;
+
+    }
+}

+ 139 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MemberRankSettingWrapper.java

@@ -0,0 +1,139 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.validation.constraints.NotNull;
+
+public class MemberRankSettingWrapper {
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MemberRankSettingQuery-会员等级设置")
+    public static class MemberRankSettingQuery implements QueryInfo {
+
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("更新开始时间")
+        private Date updateStartTime;
+
+        @ApiModelProperty("更新结束时间")
+        private Date updateEndTime;
+
+        @ApiModelProperty("更新人名称")
+        private String updateName;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MemberRankSettingQuery from(String json) {
+            return JSON.parseObject(json, MemberRankSettingQuery.class);
+        }
+    }
+
+
+    @Data
+    @ApiModel(" MemberRankSettingAdd-会员等级设置")
+    public static class MemberRankSettingAdd {
+
+        private Integer id;
+
+        @ApiModelProperty("父级编号")
+        private Integer parentId;
+
+        @ApiModelProperty("名称")
+        @NotNull(message = "名称不能为空")
+        private String name;
+
+        @ApiModelProperty("介绍")
+        @NotNull(message = "介绍不能为空")
+        private String intro;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("更新人")
+        private Integer operator;
+
+        @ApiModelProperty("学练宝曲目分类内容")
+        private List<Integer> memberCategoryIdList;
+
+
+        @ApiModelProperty("学练宝云课堂内容")
+        private List<String> memberCourseTypeList;
+
+        @ApiModelProperty("学练宝功能")
+        private List<Integer> memberPrivilegesItemIdList;
+    }
+
+    @Data
+    @ApiModel(" MemberRankSetting-会员等级设置")
+    public static class MemberRankSetting {
+
+        private Integer id;
+
+        @ApiModelProperty("父级编号")
+        private Integer parentId;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("介绍")
+        private String intro;
+
+        @ApiModelProperty("曲目数量")
+        private Integer musicCount = 0;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("更新人")
+        private Integer operator;
+
+        @ApiModelProperty("是否已被购买")
+        private Boolean buyFlag = false;
+
+        @ApiModelProperty("子节点")
+        private List<MemberRankSetting> children;
+
+
+        @ApiModelProperty("更新人名称")
+        private String operatorName;
+
+        @ApiModelProperty("学练宝曲目分类内容 详情接口返回")
+        private List<Integer> memberCategoryIdList;
+
+
+        @ApiModelProperty("学练宝云课堂内容 详情接口返回")
+        private List<String> memberCourseTypeList;
+
+        @ApiModelProperty("学练宝功能 详情接口返回")
+        private List<Integer> memberPrivilegesItemIdList;
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MemberRankSetting from(String json) {
+            return JSON.parseObject(json, MemberRankSetting.class);
+        }
+    }
+
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetWrapper.java

@@ -490,4 +490,16 @@ public class MusicSheetWrapper {
 
     }
 
+    @Data
+    public static class CategoryMusicNumStat {
+
+        @ApiModelProperty("曲目分类ID")
+        private Integer categoryId;
+
+        @ApiModelProperty("曲目数量")
+        private Integer musicNum;
+
+
+    }
+
 }

+ 106 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TenantMemberRankSettingWrapper.java

@@ -0,0 +1,106 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Optional;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 机构学练宝配置表
+ * 2024-10-23 10:48:21
+ */
+@ApiModel(value = "TenantMemberRankSettingWrapper对象", description = "机构学练宝配置表查询对象")
+public class TenantMemberRankSettingWrapper {
+
+    @Data
+	@Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" TenantMemberRankSettingQuery-机构学练宝配置表")
+    public static class TenantMemberRankSettingQuery implements QueryInfo {
+    
+    	@ApiModelProperty("当前页")
+        private Integer page;
+        
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+        
+        @ApiModelProperty("关键字匹配")
+		private String keyword;
+        
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+        
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static TenantMemberRankSettingQuery from(String json) {
+            return JSON.parseObject(json, TenantMemberRankSettingQuery.class);
+        }
+    }  
+
+    @Data
+	@ApiModel(" TenantMemberRankSettingAdd-机构学练宝配置表")
+    public static class TenantMemberRankSettingAdd {
+
+        @ApiModelProperty("学练宝ID")
+        private Integer memberRankSettingId;
+
+        @ApiModelProperty("学练宝名称")
+        private String memberRankSettingName;
+
+        @ApiModelProperty("机构配置:TENANT, 学生配置:STUDENT")
+        private String type;
+
+        @ApiModelProperty("学练宝配置")
+        private MemberConfig memberConfig;
+        
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static TenantMemberRankSettingAdd from(String json) {
+            return JSON.parseObject(json, TenantMemberRankSettingAdd.class);
+        }
+	}
+
+
+    @Data
+    @ApiModel(" MemberConfig")
+    public static class MemberConfig {
+
+//        "day_divide": "0",
+//            "month_divide": "0",
+//            "quarter_divide": "1",
+//            "half_year_divide": "0",
+//            "year_divide": "0"
+
+        @ApiModelProperty("日分成")
+        private BigDecimal dayDivide;
+
+        @ApiModelProperty("月分成")
+        private BigDecimal monthDivide;
+
+        @ApiModelProperty("季度分成")
+        private BigDecimal quarterDivide;
+
+        @ApiModelProperty("半年分成")
+        private BigDecimal halfYearDivide;
+
+        @ApiModelProperty("年分成")
+        private BigDecimal yearDivide;
+
+    }
+}

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankCategoryMapperService.java

@@ -0,0 +1,19 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.MemberRankCategoryMapper;
+
+import java.util.List;
+
+/**
+ * 会员分类权限表
+ * 2024-10-22 14:51:51
+ */
+public interface MemberRankCategoryMapperService extends IService<MemberRankCategoryMapper>  {
+
+    void batchInsert(Integer memberRankSettingId, List<Integer> memberCategoryIdList);
+
+    List<MemberRankCategoryMapper> getByMemberRankId(List<Integer> memberRankSettingId);
+
+    void deleteByRankSettingId(Integer memberRankSettingId);
+}

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankCourseTypeMapperService.java

@@ -0,0 +1,19 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.MemberRankCourseTypeMapper;
+
+import java.util.List;
+
+/**
+ * 会员课程类型权限表
+ * 2024-10-22 14:51:51
+ */
+public interface MemberRankCourseTypeMapperService extends IService<MemberRankCourseTypeMapper>  {
+
+    void batchInsert(Integer memberRankSettingId, List<String> memberCourseTypeList);
+
+    List<MemberRankCourseTypeMapper> getByMemberRankId(Integer memberRankSettingId);
+
+    void deleteByRankSettingId(Integer memberRankSettingId);
+}

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankOrganizationFeeMapperService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.MemberRankOrganizationFeeMapper;
+import com.ym.mec.biz.dal.wrapper.MemberRankOrganizationFeeMapperWrapper;
 import com.ym.mec.common.service.BaseService;
 
 public interface MemberRankOrganizationFeeMapperService extends BaseService<Integer,MemberRankOrganizationFeeMapper>{
@@ -8,4 +9,6 @@ public interface MemberRankOrganizationFeeMapperService extends BaseService<Inte
     void add(MemberRankOrganizationFeeMapper memberRankOrganizationFeeMapper);
 
     void updateFee(MemberRankOrganizationFeeMapper memberRankOrganizationFeeMapper);
+
+    void addV2(MemberRankOrganizationFeeMapperWrapper.MemberRankOrganizationFeeMapperAdd memberRankOrganizationFeeMapper);
 }

+ 15 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java

@@ -3,18 +3,22 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
+import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
 
 public interface MemberRankSettingService extends BaseService<Integer, MemberRankSetting> {
 
-    void add(MemberRankSetting memberRankSetting);
+    void add(MemberRankSettingWrapper.MemberRankSettingAdd memberRankSetting);
 
-    MemberRankSetting getDetail(Integer memberRankSettingId);
+    MemberRankSettingWrapper.MemberRankSetting getDetail(Integer memberRankSettingId);
 
-    void updateSetting(MemberRankSetting memberRankSetting);
+    void updateSetting(MemberRankSettingWrapper.MemberRankSettingAdd memberRankSetting);
 
     List<MemberRankSetting> queryListByIsDefault(Boolean isDefault);
 
@@ -47,4 +51,12 @@ public interface MemberRankSettingService extends BaseService<Integer, MemberRan
     HttpResponseResult activeBuy(MemberPayParamDto memberPayParamDto) throws Exception;
 
     HttpResponseResult<Integer> checkActiveBuy(MemberPayParamDto memberPayParamDto);
+
+    List<SysMusicScoreCategories> getTree(Integer parentId);
+
+    List<MemberRankSettingWrapper.MemberRankSetting> queryPage2(MemberRankSettingWrapper.MemberRankSettingQuery queryInfo);
+
+    void del(Integer id);
+
+    List<MemberRankSetting> listByIds(List<Integer> ids);
 }

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantMemberRankSettingService.java

@@ -0,0 +1,18 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.TenantMemberRankSetting;
+import com.ym.mec.biz.dal.wrapper.TenantMemberRankSettingWrapper;
+
+import java.util.List;
+
+/**
+ * 机构学练宝配置表
+ * 2024-10-23 10:48:21
+ */
+public interface TenantMemberRankSettingService extends IService<TenantMemberRankSetting>  {
+
+    void update(Integer tenantId, List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> memberInfo);
+
+    List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> query(Integer tenantId);
+}

+ 37 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberPrivilegesItemServiceImpl.java

@@ -3,17 +3,22 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.biz.dal.dao.MemberPrivilegesItemDao;
 import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
 import com.ym.mec.biz.dal.entity.MemberPrivilegesItem;
+import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
 import com.ym.mec.biz.dal.page.MemberPrivilegesItemQueryInfo;
+import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
 import com.ym.mec.biz.service.MemberPrivilegesItemService;
+import com.ym.mec.biz.service.MemberRankSettingService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.filters.TenantIdThreadLocal;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -25,6 +30,8 @@ public class MemberPrivilegesItemServiceImpl extends BaseServiceImpl<Integer, Me
 	@Autowired
 	private MemberRankPrivilegesDao memberRankPrivilegesDao;
 
+    @Autowired
+    private MemberRankSettingService memberRankSettingService;
 
 
 	@Override
@@ -43,6 +50,26 @@ public class MemberPrivilegesItemServiceImpl extends BaseServiceImpl<Integer, Me
 		return item;
 	}
 
+
+    private List<MemberPrivilegesItem> getTreeByIds(List<MemberPrivilegesItem> memberPrivilegesItems, List<Integer> ids) {
+        if (CollectionUtils.isEmpty(memberPrivilegesItems)) {
+            return new ArrayList<>();
+        }
+        List<MemberPrivilegesItem> list = new ArrayList<>();
+        for (MemberPrivilegesItem memberPrivilegesItem : memberPrivilegesItems) {
+            if (ids.contains(memberPrivilegesItem.getId())) {
+                list.add(memberPrivilegesItem);
+            } else {
+                List<MemberPrivilegesItem> memberPrivilegesItemList = getTreeByIds(memberPrivilegesItem.getMemberPrivilegesItems(), ids);
+                if (CollectionUtils.isNotEmpty(memberPrivilegesItemList)) {
+                    memberPrivilegesItem.setMemberPrivilegesItems(memberPrivilegesItemList);
+                    list.add(memberPrivilegesItem);
+                }
+            }
+        }
+        return list;
+    }
+
     @Override
 	@Transactional(rollbackFor = Exception.class)
     public void recursiveDel(Integer memberPrivilegesItemId) {
@@ -90,6 +117,16 @@ public class MemberPrivilegesItemServiceImpl extends BaseServiceImpl<Integer, Me
 		for (MemberPrivilegesItem item : rows) {
 			item = getTree(item);
 		}
+
+        // 如果是有学练宝ID 只返回学练宝数据
+        if (queryInfo.getMemberRankSettingId() != null) {
+            MemberRankSettingWrapper.MemberRankSetting detail = memberRankSettingService.getDetail(queryInfo.getMemberRankSettingId());
+            if (detail != null && CollectionUtils.isNotEmpty(detail.getMemberPrivilegesItemIdList())) {
+                return getTreeByIds(rows, detail.getMemberPrivilegesItemIdList());
+
+            }
+
+        }
 		return rows;
 	}
 

+ 54 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankCategoryMapperServiceImpl.java

@@ -0,0 +1,54 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.entity.MemberRankCategoryMapper;
+import com.ym.mec.biz.dal.mapper.MemberRankCategoryMapperMapper;
+import com.ym.mec.biz.service.MemberRankCategoryMapperService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * 会员分类权限表
+ * 2024-10-22 14:51:51
+ */
+@Slf4j
+@Service
+public class MemberRankCategoryMapperServiceImpl extends ServiceImpl<MemberRankCategoryMapperMapper, MemberRankCategoryMapper> implements MemberRankCategoryMapperService {
+
+    @Override
+    public void batchInsert(Integer memberRankSettingId, List<Integer> memberCategoryIdList) {
+        if (CollectionUtils.isNotEmpty(memberCategoryIdList)) {
+            List<MemberRankCategoryMapper> memberRankCategoryMappers = new ArrayList<>();
+            for (Integer i : new HashSet<>(memberCategoryIdList)) {
+                MemberRankCategoryMapper memberRankCategoryMapper = new MemberRankCategoryMapper();
+                memberRankCategoryMapper.setRankId(memberRankSettingId);
+                memberRankCategoryMapper.setCategoryId(i);
+                memberRankCategoryMappers.add(memberRankCategoryMapper);
+            }
+            this.saveBatch(memberRankCategoryMappers);
+        }
+    }
+
+    @Override
+    public List<MemberRankCategoryMapper> getByMemberRankId(List<Integer> memberRankSettingId) {
+        if (CollectionUtils.isEmpty(memberRankSettingId)) {
+            return new ArrayList<>();
+        }
+        return lambdaQuery()
+            .in(MemberRankCategoryMapper::getRankId, memberRankSettingId)
+            .list();
+
+    }
+
+    @Override
+    public void deleteByRankSettingId(Integer memberRankSettingId) {
+        lambdaUpdate()
+            .eq(MemberRankCategoryMapper::getRankId, memberRankSettingId)
+            .remove();
+    }
+}

+ 52 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankCourseTypeMapperServiceImpl.java

@@ -0,0 +1,52 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.entity.MemberRankCourseTypeMapper;
+import com.ym.mec.biz.dal.mapper.MemberRankCourseTypeMapperMapper;
+import com.ym.mec.biz.service.MemberRankCourseTypeMapperService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * 会员课程类型权限表
+ * 2024-10-22 14:51:51
+ */
+@Slf4j
+@Service
+public class MemberRankCourseTypeMapperServiceImpl extends ServiceImpl<MemberRankCourseTypeMapperMapper, MemberRankCourseTypeMapper> implements MemberRankCourseTypeMapperService {
+
+    @Override
+    public void batchInsert(Integer memberRankSettingId, List<String> memberCourseTypeList) {
+        if (CollectionUtils.isEmpty(memberCourseTypeList)) {
+            return;
+        }
+
+        List<MemberRankCourseTypeMapper> memberRankCourseTypeMappers = new ArrayList<>();
+        for (String s : new HashSet<>(memberCourseTypeList)) {
+            MemberRankCourseTypeMapper memberRankCourseTypeMapper = new MemberRankCourseTypeMapper();
+            memberRankCourseTypeMapper.setCourseType(s);
+            memberRankCourseTypeMapper.setRankId(memberRankSettingId);
+            memberRankCourseTypeMappers.add(memberRankCourseTypeMapper);
+        }
+        this.saveBatch(memberRankCourseTypeMappers);
+    }
+
+    @Override
+    public List<MemberRankCourseTypeMapper> getByMemberRankId(Integer memberRankSettingId) {
+        return lambdaQuery()
+            .eq(MemberRankCourseTypeMapper::getRankId,memberRankSettingId)
+            .list();
+    }
+
+    @Override
+    public void deleteByRankSettingId(Integer memberRankSettingId) {
+        lambdaUpdate()
+            .eq(MemberRankCourseTypeMapper::getRankId,memberRankSettingId)
+            .remove();
+    }
+}

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankOrganizationFeeMapperServiceImpl.java

@@ -1,8 +1,10 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.MemberRankOrganizationFeeMapperDao;
 import com.ym.mec.biz.dal.entity.MemberFeeSetting;
 import com.ym.mec.biz.dal.entity.MemberRankOrganizationFeeMapper;
+import com.ym.mec.biz.dal.wrapper.MemberRankOrganizationFeeMapperWrapper;
 import com.ym.mec.biz.service.MemberFeeSettingService;
 import com.ym.mec.biz.service.MemberRankOrganizationFeeMapperService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -12,6 +14,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Service
 public class MemberRankOrganizationFeeMapperServiceImpl extends BaseServiceImpl<Integer, MemberRankOrganizationFeeMapper>  implements MemberRankOrganizationFeeMapperService {
 
@@ -63,4 +69,18 @@ public class MemberRankOrganizationFeeMapperServiceImpl extends BaseServiceImpl<
 		memberFeeSettingService.update(memberFeeSetting);
 		memberRankOrganizationFeeMapperDao.update(memberRankOrganizationFeeMapper);
 	}
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addV2(MemberRankOrganizationFeeMapperWrapper.MemberRankOrganizationFeeMapperAdd memberRankOrganizationFeeMapper) {
+        //一个分部只能关联一个会员
+        List<Integer> orgIds = Arrays.stream(memberRankOrganizationFeeMapper.getOrganIds().split(","))
+            .map(Integer::parseInt).collect(Collectors.toList());
+
+        for (Integer orgId : orgIds) {
+            MemberRankOrganizationFeeMapper mapper = JSON.parseObject(JSON.toJSONString(memberRankOrganizationFeeMapper), MemberRankOrganizationFeeMapper.class);
+            mapper.setOrganId(orgId);
+            add(mapper);
+        }
+    }
 }

+ 230 - 70
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -1,74 +1,26 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.enums.CouponDetailTypeEnum.MEMBER;
-
-import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.concurrent.TimeUnit;
-import java.util.function.BiPredicate;
-import java.util.stream.Collectors;
-
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.biz.service.*;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.joda.time.LocalDate;
-import org.redisson.api.RBucket;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
-import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dao.TempBuyFreeLiveTheoryCourseDao;
-import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampUserRelationDao;
-import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.Cloud2022ActivityDto;
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
-import com.ym.mec.biz.dal.entity.ActivityUserMapper;
-import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
-import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
-import com.ym.mec.biz.dal.entity.MemberRankPrivileges;
-import com.ym.mec.biz.dal.entity.MemberRankSetting;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.StudentCloudCoachPaymentDetails;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.dal.entity.TempBuyFreeLiveTheoryCourse;
-import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCampUserRelation;
-import com.ym.mec.biz.dal.entity.VipGroupActivity;
-import com.ym.mec.biz.dal.enums.CouponDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PeriodEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
+import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.adapay.Payment;
@@ -77,6 +29,28 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.LocalDate;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.function.BiPredicate;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.enums.CouponDetailTypeEnum.MEMBER;
 
 @Service
 public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, MemberRankSetting> implements MemberRankSettingService {
@@ -94,6 +68,11 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     @Autowired
     private SysUserCashAccountDetailService sysUserCashAccountDetailService;
 
+    @Autowired
+    private LessonCoursewareService lessonCoursewareService;
+
+    @Resource
+    private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
     @Lazy
     @Autowired
     private ContractService contractService;
@@ -133,10 +112,22 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     private TempLittleArtistTrainingCampUserRelationDao tempLittleArtistTrainingCampUserRelationDao;
     @Autowired
     private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
+
+    @Autowired
+    private MemberRankCategoryMapperService memberRankCategoryMapperService;
+
+    @Autowired
+    private MemberRankCourseTypeMapperService memberRankCourseTypeMapperService;
     
     @Autowired
     private HfMerchantConfigService hfMerchantConfigService;
 
+    @Autowired
+    private SysMusicScoreDao sysMusicScoreDao;
+
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
+
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     @Override
@@ -146,35 +137,74 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void add(MemberRankSetting memberRankSetting) {
-        memberRankSettingDao.insert(memberRankSetting);
+    public void add(MemberRankSettingWrapper.MemberRankSettingAdd memberRankSetting) {
+        MemberRankSetting object = JSON.parseObject(JSON.toJSONString(memberRankSetting), MemberRankSetting.class);
+        memberRankSettingDao.insert(object);
         List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
-        if (memberPrivilegesItemIdList == null || memberPrivilegesItemIdList.size() == 0) {
+        if (CollectionUtils.isEmpty(memberPrivilegesItemIdList)) {
             throw new BizException("操作失败:请配置会员权益");
         }
-        memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(), memberPrivilegesItemIdList);
+        memberRankPrivilegesDao.batchInsert(object.getId(), memberPrivilegesItemIdList);
+        // 设置学练宝曲目分类内容
+        if (CollectionUtils.isNotEmpty( memberRankSetting.getMemberCategoryIdList())) {
+            memberRankCategoryMapperService.batchInsert(object.getId(), memberRankSetting.getMemberCategoryIdList());
+        }
+        // 设置云课堂曲目分类内容
+        if (CollectionUtils.isNotEmpty( memberRankSetting.getMemberCourseTypeList())) {
+            memberRankCourseTypeMapperService.batchInsert(object.getId(), memberRankSetting.getMemberCourseTypeList());
+        }
     }
 
     @Override
-    public MemberRankSetting getDetail(Integer memberRankSettingId) {
+    public MemberRankSettingWrapper.MemberRankSetting getDetail(Integer memberRankSettingId) {
         MemberRankSetting memberRankSetting = memberRankSettingDao.get(memberRankSettingId);
+        MemberRankSettingWrapper.MemberRankSetting result = JSON
+            .parseObject(JSON.toJSONString(memberRankSetting), MemberRankSettingWrapper.MemberRankSetting.class);
         List<MemberRankPrivileges> byRankSettingId = memberRankPrivilegesDao.findByRankSettingId(memberRankSettingId);
-        if (byRankSettingId != null && byRankSettingId.size() > 0) {
-            memberRankSetting.setMemberRankPrivileges(byRankSettingId);
-            memberRankSetting.setMemberPrivilegesItemIdList(byRankSettingId.stream().map(e -> e.getMemberPrivilegesId()).collect(Collectors.toList()));
+        if (CollectionUtils.isNotEmpty(byRankSettingId)) {
+            result.setMemberPrivilegesItemIdList(byRankSettingId.stream().map(e -> e.getMemberPrivilegesId()).collect(Collectors.toList()));
+        }
+        // 分类ID集合
+        List<MemberRankCategoryMapper> categoryMapperList = memberRankCategoryMapperService.getByMemberRankId(Lists.newArrayList(memberRankSetting.getId()));
+        if (CollectionUtils.isNotEmpty(categoryMapperList)) {
+            result.setMemberCategoryIdList(categoryMapperList.stream().map(MemberRankCategoryMapper::getCategoryId).collect(Collectors.toList()));
         }
-        return memberRankSetting;
+
+        // 云课堂集合
+        List<MemberRankCourseTypeMapper> courseTypeMapperList = memberRankCourseTypeMapperService.getByMemberRankId(memberRankSetting.getId());
+        if (CollectionUtils.isNotEmpty(courseTypeMapperList)) {
+            result.setMemberCourseTypeList(courseTypeMapperList.stream().map(MemberRankCourseTypeMapper::getCourseType).collect(Collectors.toList()));
+        }
+
+        // 是否已被购买
+        int count = cloudTeacherOrderDao.countByMemberRankSetttingId(memberRankSettingId);
+        result.setBuyFlag(count > 0);
+
+        return result;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateSetting(MemberRankSetting memberRankSetting) {
-        memberRankSettingDao.update(memberRankSetting);
+    public void updateSetting(MemberRankSettingWrapper.MemberRankSettingAdd memberRankSetting) {
+
+
+
+        memberRankSettingDao.update(JSON.parseObject(JSON.toJSONString(memberRankSetting),MemberRankSetting.class));
         memberRankPrivilegesDao.deleteByRankSettingId(memberRankSetting.getId());
+        memberRankCourseTypeMapperService.deleteByRankSettingId(memberRankSetting.getId());
+        memberRankCategoryMapperService.deleteByRankSettingId(memberRankSetting.getId());
         List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
         if (memberPrivilegesItemIdList != null && memberPrivilegesItemIdList.size() > 0) {
             memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(), memberPrivilegesItemIdList);
         }
+        // 设置学练宝曲目分类内容
+        if (CollectionUtils.isNotEmpty( memberRankSetting.getMemberCategoryIdList())) {
+            memberRankCategoryMapperService.batchInsert(memberRankSetting.getId(), memberRankSetting.getMemberCategoryIdList());
+        }
+        // 设置云课堂曲目分类内容
+        if (CollectionUtils.isNotEmpty( memberRankSetting.getMemberCourseTypeList())) {
+            memberRankCourseTypeMapperService.batchInsert(memberRankSetting.getId(), memberRankSetting.getMemberCourseTypeList());
+        }
     }
 
     @Override
@@ -434,6 +464,81 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
         return BaseController.succeed(1);
     }
 
+    @Override
+    public List<SysMusicScoreCategories> getTree(Integer parentId) {
+        // 分类
+        List<SysMusicScoreCategories> sysMusicScoreCategories = cbsMusicScoreCategoriesService.queryTreeByAppId();
+
+        // 课件
+        IPage<LessonCoursewareWrapper.LessonCoursewareDto> lessonCoursewareDtoIPage = lessonCoursewareService.selectPage(new Page<>(1, -1), new LessonCoursewareWrapper.LessonCoursewareQuery());
+        List<LessonCoursewareWrapper.LessonCoursewareDto> records = lessonCoursewareDtoIPage.getRecords();
+        SysMusicScoreCategories course =null;
+        if (CollectionUtils.isNotEmpty(records)) {
+            course = new SysMusicScoreCategories();
+            course.setId(-1);
+            course.setName("云课堂");
+            course.setSysMusicScoreCategoriesList(new ArrayList<>());
+        }
+        if (parentId != null) {
+            MemberRankSettingWrapper.MemberRankSetting detail = getDetail(parentId);
+            List<Integer> memberCategoryIdList = detail.getMemberCategoryIdList();
+            if (CollectionUtils.isEmpty(memberCategoryIdList)) {
+                sysMusicScoreCategories = new ArrayList<>();
+            }
+            // 将被使用过的选出来
+            sysMusicScoreCategories = getCategoryTreeByIds(sysMusicScoreCategories,memberCategoryIdList);
+
+            List<String> memberCourseTypeList = detail.getMemberCourseTypeList();
+            if (CollectionUtils.isNotEmpty(memberCourseTypeList) && course !=null) {
+                for (LessonCoursewareWrapper.LessonCoursewareDto record : records) {
+                    if (memberCourseTypeList.contains(record.getId().toString())) {
+                        SysMusicScoreCategories lesson = new SysMusicScoreCategories();
+                        lesson.setId(record.getId());
+                        lesson.setName(record.getName());
+                        course.getSysMusicScoreCategoriesList().add(lesson);
+                    }
+                }
+                if (CollectionUtils.isNotEmpty(course.getSysMusicScoreCategoriesList())) {
+                    sysMusicScoreCategories.add(course);
+                }
+            }
+        } else {
+            for (LessonCoursewareWrapper.LessonCoursewareDto record : records) {
+                SysMusicScoreCategories lesson = new SysMusicScoreCategories();
+                lesson.setId(record.getId());
+                lesson.setName(record.getName());
+                course.getSysMusicScoreCategoriesList().add(lesson);
+            }
+            if (CollectionUtils.isNotEmpty(course.getSysMusicScoreCategoriesList())) {
+                sysMusicScoreCategories.add(course);
+            }
+        }
+
+
+        return sysMusicScoreCategories;
+
+    }
+
+    private List<SysMusicScoreCategories> getCategoryTreeByIds(List<SysMusicScoreCategories> sysMusicScoreCategories, List<Integer> memberCategoryIdList) {
+        if (CollectionUtils.isEmpty(sysMusicScoreCategories)) {
+            return new ArrayList<>();
+        }
+        List<SysMusicScoreCategories> list = new ArrayList<>();
+        for (SysMusicScoreCategories sysMusicScoreCategory : sysMusicScoreCategories) {
+            if (memberCategoryIdList.contains(sysMusicScoreCategory.getId())) {
+                list.add(sysMusicScoreCategory);
+            } else {
+                List<SysMusicScoreCategories> sysMusicScoreCategories1 = getCategoryTreeByIds(sysMusicScoreCategory.getSysMusicScoreCategoriesList(), memberCategoryIdList);
+                if (CollectionUtils.isNotEmpty(sysMusicScoreCategories1)) {
+                    sysMusicScoreCategory.setSysMusicScoreCategoriesList(sysMusicScoreCategories1);
+                    list.add(sysMusicScoreCategory);
+                }
+            }
+        }
+        return list;
+    }
+
+
     public static final String BUY_2_QQHE_LOCK = "BUY_2_QQHE_LOCK:";
 
     @Override
@@ -912,4 +1017,59 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
         userPhones.put(sysUser.getId(), sysUser.getPhone());
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.CLOUD_TEACHER_ORDER_SUCCESS, userPhones, null, 0, null, null);
     }
+
+
+    /**
+     * 通过参数查找结果集,适合分页场景
+     *
+     * @param queryInfo
+     * @return
+     */
+    @Override
+    public List<MemberRankSettingWrapper.MemberRankSetting> queryPage2(MemberRankSettingWrapper.MemberRankSettingQuery queryInfo) {
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+        List<MemberRankSetting>   dataList = this.getDAO().queryPage(params);
+
+        List<MemberRankSettingWrapper.MemberRankSetting> memberRankSettings = JSON.parseArray(JSON.toJSONString(dataList), MemberRankSettingWrapper.MemberRankSetting.class);
+
+        // 设置曲目数量
+        // 查询曲目ID分类
+        // 分类去重
+        // 曲目表汇总曲目数量
+        if (CollectionUtils.isNotEmpty(memberRankSettings)) {
+            List<Integer> memberRankSettingIds = memberRankSettings.stream().map(MemberRankSettingWrapper.MemberRankSetting::getId).collect(Collectors.toList());
+            List<MemberRankCategoryMapper> categoryMapperList = memberRankCategoryMapperService.getByMemberRankId(memberRankSettingIds);
+            // 分组
+            Map<Integer, List<Integer>> map = categoryMapperList.stream()
+                .collect(Collectors.groupingBy(MemberRankCategoryMapper::getRankId,
+                    Collectors.mapping(MemberRankCategoryMapper::getCategoryId, Collectors.toList())));
+
+
+            List<Integer> categoryIds = categoryMapperList.stream().map(MemberRankCategoryMapper::getCategoryId).distinct().collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(categoryIds)) {
+                List<MusicSheetWrapper.CategoryMusicNumStat> statList = sysMusicScoreDao.getNumByCategoryIds(categoryIds);
+                Map<Integer, Integer> statMap = statList.stream()
+                    .collect(Collectors.toMap(MusicSheetWrapper.CategoryMusicNumStat::getCategoryId, MusicSheetWrapper.CategoryMusicNumStat::getMusicNum));
+
+                memberRankSettings.forEach(e -> {
+                    List<Integer> categoryList = map.get(e.getId());
+                    if (CollectionUtils.isNotEmpty(categoryList)) {
+                        e.setMusicCount(categoryList.stream().map(statMap::get).filter(Objects::nonNull).reduce(Integer::sum).orElse(0));
+                    }
+                });
+            }
+        }
+        return memberRankSettings;
+    }
+
+    @Override
+    public void del(Integer id) {
+
+    }
+
+    @Override
+    public List<MemberRankSetting> listByIds(List<Integer> ids) {
+        return memberRankSettingDao.selectBatchIds(ids);
+    }
 }

+ 16 - 20
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletRequest;
 
 import com.microsvc.toolkit.middleware.oss.OssPluginContext;
 import com.microsvc.toolkit.middleware.oss.impl.TencentOssPlugin;
+import com.ym.mec.biz.service.*;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -86,26 +87,6 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.vo.PlatformServePageVo;
 import com.ym.mec.biz.dal.vo.SysUserTenantVo;
 import com.ym.mec.biz.dal.vo.TenantInfoPageVo;
-import com.ym.mec.biz.service.ContractService;
-import com.ym.mec.biz.service.EmployeeService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.PlatformProductService;
-import com.ym.mec.biz.service.PlatformServeDetailService;
-import com.ym.mec.biz.service.PlatformServeService;
-import com.ym.mec.biz.service.StudentService;
-import com.ym.mec.biz.service.SysAreaService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysUserTenantService;
-import com.ym.mec.biz.service.SysUserTsignService;
-import com.ym.mec.biz.service.TenantAssetsInfoService;
-import com.ym.mec.biz.service.TenantConfigService;
-import com.ym.mec.biz.service.TenantContractRecordService;
-import com.ym.mec.biz.service.TenantContractTemplateService;
-import com.ym.mec.biz.service.TenantInfoService;
-import com.ym.mec.biz.service.TenantOrderRecordService;
-import com.ym.mec.biz.service.TenantPreJoinService;
-import com.ym.mec.biz.service.TenantProductInfoService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
@@ -174,6 +155,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     @Autowired
     private OssPluginContext ossPluginContext;
 
+    @Autowired
+    private TenantMemberRankSettingService tenantMemberRankSettingService;
+
     @Value("${contract.baseDir:/var/pdf}")
     private String contractBaseDir;
     //乐小雅协议名称
@@ -247,6 +231,11 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         userTenant.setTenantId(tenantId);
         userTenant.setCreatedTime(new Date());
         sysUserTenantService.save(userTenant);
+
+        // 设置机构会员配置
+        tenantMemberRankSettingService.update(tenantId,dto.getMemberInfos());
+
+
         //释放
         bucket.delete();
     }
@@ -313,6 +302,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         if (Objects.nonNull(dto.getConfig())) {
             setIdByApply(tenantInfo.getId(), dto.getConfig(), dto.getConfig()::setTenantId, tenantConfigService::updateConfig);
         }
+        if (CollectionUtils.isNotEmpty(dto.getMemberInfos())) {
+            // 设置机构会员配置
+            tenantMemberRankSettingService.update(tenantId,dto.getMemberInfos());
+        }
     }
 
     /**
@@ -348,6 +341,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         Optional.ofNullable(serveDetail)
                 .map(PlatformServeDetail::getStudentUpLimit)
                 .ifPresent(tenantInfoDto::setStudentUpLimit);
+
+        // 学练宝信息
+        tenantInfoDto.setMemberInfos(tenantMemberRankSettingService.query(tenantId));
         return tenantInfoDto;
     }
 

+ 67 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantMemberRankSettingServiceImpl.java

@@ -0,0 +1,67 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.entity.TenantMemberRankSetting;
+import com.ym.mec.biz.dal.mapper.TenantMemberRankSettingMapper;
+import com.ym.mec.biz.dal.wrapper.TenantMemberRankSettingWrapper;
+import com.ym.mec.biz.service.MemberRankSettingService;
+import com.ym.mec.biz.service.TenantMemberRankSettingService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 机构学练宝配置表
+ * 2024-10-23 10:48:21
+ */
+@Slf4j
+@Service
+public class TenantMemberRankSettingServiceImpl extends ServiceImpl<TenantMemberRankSettingMapper, TenantMemberRankSetting> implements TenantMemberRankSettingService {
+
+    @Autowired
+    private MemberRankSettingService memberRankSettingService;
+
+    @Override
+    @Transactional
+    public void update(Integer tenantId, List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> memberInfo) {
+
+        // 先删除
+        lambdaUpdate().eq(TenantMemberRankSetting::getTenantId, tenantId).remove();
+
+        // 在新增
+        List<TenantMemberRankSetting> tenantMemberRankSettings = JSON.parseArray(JSON.toJSONString(memberInfo), TenantMemberRankSetting.class);
+        tenantMemberRankSettings.forEach(tenantMemberRankSetting -> tenantMemberRankSetting.setTenantId(tenantId));
+
+        saveBatch(tenantMemberRankSettings);
+
+    }
+
+    @Override
+    public List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> query(Integer tenantId) {
+        List<TenantMemberRankSetting> list = lambdaQuery().eq(TenantMemberRankSetting::getTenantId, tenantId).list();
+        if (CollectionUtils.isEmpty(list)) {
+            return new ArrayList<>();
+        }
+        List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> tenantMemberRankSettingAdds = JSON.parseArray(JSON.toJSONString(list), TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd.class);
+        // 学练宝ID集合
+        List<Integer> ids = tenantMemberRankSettingAdds.stream().map(o -> o.getMemberRankSettingId()).distinct().collect(Collectors.toList());
+        List<MemberRankSetting> memberRankSettings = memberRankSettingService.listByIds(ids);
+        // map
+        Map<Integer, String> map =
+            memberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, MemberRankSetting::getName));
+
+        tenantMemberRankSettingAdds
+            .forEach(tenantMemberRankSettingAdd -> tenantMemberRankSettingAdd.setMemberRankSettingName(map.get(tenantMemberRankSettingAdd.getMemberRankSettingId())));
+
+        return tenantMemberRankSettingAdds;
+    }
+}

+ 7 - 2
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml

@@ -6,6 +6,7 @@
         <!--@Table cloud_teacher_order-->
         <id column="id_" property="id"/>
         <result column="organ_id_" property="organId"/>
+        <result column="member_rank_setting_id_" property="memberRankSettingId"/>
         <result column="student_id_" property="studentId"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="level_" property="level"/>
@@ -61,9 +62,9 @@
     <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder"
             useGeneratedKeys="true">
         INSERT INTO cloud_teacher_order (organ_id_,student_id_, type_, level_, time_, amount_, operating_amount_, refund_amount_, status_,
-        order_id_,platform_order_id_,start_time_,end_time_,remark_, create_time_, update_time_,music_group_id_,active_remark_,tenant_id_)
+        order_id_,platform_order_id_,start_time_,end_time_,remark_, create_time_, update_time_,music_group_id_,active_remark_,tenant_id_,member_rank_setting_id_)
         VALUES (#{organId},#{studentId}, #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{level}, #{time}, #{amount}, #{operatingAmount}, #{refundAmount},
-        #{status},#{orderId},#{platformOrderId},#{startTime},#{endTime}, #{remark}, NOW(), NOW(),#{musicGroupId},#{activeRemark},#{tenantId})
+        #{status},#{orderId},#{platformOrderId},#{startTime},#{endTime}, #{remark}, NOW(), NOW(),#{musicGroupId},#{activeRemark},#{tenantId},#{memberRankSettingId})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
         <!--@mbg.generated-->
@@ -610,4 +611,8 @@
         </if>
         group by mgpscd.music_group_id_,mgpscd.user_id_ order by mg.organ_id_,mg.id_
     </select>
+
+    <select id="countByMemberRankSetttingId" resultType="int">
+        select count(1) from cloud_teacher_order where member_rank_setting_id_ = #{memberRankSettingId}
+    </select>
 </mapper>

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/MemberRankCategoryMapperMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ym.mec.biz.dal.mapper.MemberRankCategoryMapperMapper">
+
+</mapper>

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/MemberRankCourseTypeMapperMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ym.mec.biz.dal.mapper.MemberRankCourseTypeMapperMapper">
+
+</mapper>

+ 19 - 0
mec-biz/src/main/resources/config/mybatis/MemberRankSettingMapper.xml

@@ -8,6 +8,7 @@
 	
 	<resultMap type="com.ym.mec.biz.dal.entity.MemberRankSetting" id="MemberRankSetting">
 		<result column="id_" property="id" />
+		<result column="parent_id_" property="parentId" />
 		<result column="name_" property="name" />
 		<result column="intro_" property="intro" />
 		<result column="icon_" property="icon" />
@@ -74,15 +75,26 @@
 
 	<sql id="queryPageSql">
 		<where>
+            mrs.del_flag_ = 0
 			<if test="search != null and search != ''">
 				AND (mrs.name_ LIKE CONCAT('%',#{search},'%') OR mrs.id_ = #{search})
 			</if>
+            <if test="updateStartTime !=null">
+                AND mrs.update_time_ &gt;= #{updateStartTime}
+            </if>
+            <if test="updateEndTime !=null">
+                AND mrs.update_time_ &lt;= #{updateEndTime}
+            </if>
+            <if test="updateName !=null and updateName !=''">
+                AND su.real_name_ LIKE CONCAT('%',#{updateName},'%')
+            </if>
 		</where>
 	</sql>
 	
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(mrs.id_) FROM member_rank_setting mrs
+        LEFT JOIN sys_user su ON su.id_ = mrs.operator_
 		<include refid="queryPageSql"/>
 	</select>
 	
@@ -94,4 +106,11 @@
 			</if>
 		</where>
 	</select>
+
+	<select id="selectBatchIds" resultMap="MemberRankSetting">
+        SELECT * FROM member_rank_setting WHERE id_ IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
 </mapper>

+ 9 - 0
mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml

@@ -337,4 +337,13 @@
             </if>
 		</where>
 	</sql>
+
+	<select id="getNumByCategoryIds" resultType="com.ym.mec.biz.dal.wrapper.MusicSheetWrapper$CategoryMusicNumStat">
+        SELECT cbs_music_categories_id_ categoryId,COUNT(0) musicNum FROM sys_music_score WHERE cbs_music_categories_id_ in
+        <foreach collection="categoryIds" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        and del_flag_ = 0 and cbs_music_sheet_id_ is not null GROUP BY cbs_music_categories_id_
+
+    </select>
 </mapper>

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/TenantMemberRankSettingMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ym.mec.biz.dal.mapper.TenantMemberRankSettingMapper">
+
+</mapper>