刘俊驰 пре 10 месеци
родитељ
комит
4388650e37
93 измењених фајлова са 2631 додато и 1172 уклоњено
  1. 2 2
      mec-application/src/main/java/com/ym/mec/student/controller/CloudCoachPaymentProgramController.java
  2. 97 10
      mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java
  3. 33 0
      mec-application/src/main/java/com/ym/mec/student/controller/MemberRankSettingController.java
  4. 5 0
      mec-application/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  5. 1 1
      mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  6. 7 0
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreController.java
  7. 6 1
      mec-application/src/main/java/com/ym/mec/teacher/controller/LessonCoursewareController.java
  8. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java
  9. 26 10
      mec-application/src/main/java/com/ym/mec/web/controller/ExportController.java
  10. 28 0
      mec-application/src/main/java/com/ym/mec/web/controller/MemberRankOrganizationFeeMapperController.java
  11. 42 6
      mec-application/src/main/java/com/ym/mec/web/controller/MemberRankSettingController.java
  12. 3 3
      mec-application/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java
  13. 18 18
      mec-application/src/main/java/com/ym/mec/web/controller/StudentManageController.java
  14. 26 26
      mec-application/src/main/resources/exportColumnMapper.ini
  15. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  16. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankOrganizationFeeMapperDao.java
  17. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankPrivilegesDao.java
  18. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankSettingDao.java
  19. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderMemberDao.java
  20. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java
  21. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentBaseCalender.java
  22. 7 359
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  23. 11 16
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RegisterPayDto.java
  24. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageBaseInfoOfMusicGroupDto.java
  25. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java
  26. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java
  27. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherStudent.java
  28. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankCategoryMapper.java
  29. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankCourseTypeMapper.java
  30. 21 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankSetting.java
  31. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderMember.java
  32. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrderDetail.java
  33. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScore.java
  34. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantMemberRankSetting.java
  35. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CalenderBaseServiceEnum.java
  36. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/MemberRankCategoryMapperMapper.java
  37. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/MemberRankCourseTypeMapperMapper.java
  38. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/TenantMemberRankSettingMapper.java
  39. 4 96
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherOrderQueryInfo.java
  40. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MemberPrivilegesItemQueryInfo.java
  41. 4 127
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java
  42. 2 56
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentSignQueryInfo.java
  43. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java
  44. 39 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/CloudTeacherOrderWrapper.java
  45. 37 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/LessonCoursewareWrapper.java
  46. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MemberRankOrganizationFeeMapperWrapper.java
  47. 163 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MemberRankSettingWrapper.java
  48. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetWrapper.java
  49. 106 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TenantMemberRankSettingWrapper.java
  50. 9 2
      mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java
  51. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/LessonCoursewareService.java
  52. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankCategoryMapperService.java
  53. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankCourseTypeMapperService.java
  54. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankOrganizationFeeMapperService.java
  55. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankPrivilegesService.java
  56. 17 3
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java
  57. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderMemberService.java
  58. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java
  59. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  60. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  61. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantMemberRankSettingService.java
  62. 151 44
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  63. 34 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/LessonCoursewareServiceImpl.java
  64. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberFeeSettingServiceImpl.java
  65. 38 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberPrivilegesItemServiceImpl.java
  66. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankCategoryMapperServiceImpl.java
  67. 55 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankCourseTypeMapperServiceImpl.java
  68. 61 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankOrganizationFeeMapperServiceImpl.java
  69. 33 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankPrivilegesServiceImpl.java
  70. 410 71
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  71. 35 25
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  72. 87 17
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderMemberServiceImpl.java
  73. 88 79
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  74. 29 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  75. 21 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  76. 51 41
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  77. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  78. 43 35
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  79. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java
  80. 16 20
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  81. 75 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantMemberRankSettingServiceImpl.java
  82. 41 4
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  83. 5 0
      mec-biz/src/main/resources/config/mybatis/MemberRankCategoryMapperMapper.xml
  84. 5 0
      mec-biz/src/main/resources/config/mybatis/MemberRankCourseTypeMapperMapper.xml
  85. 10 0
      mec-biz/src/main/resources/config/mybatis/MemberRankOrganizationFeeMapperMapper.xml
  86. 6 0
      mec-biz/src/main/resources/config/mybatis/MemberRankPrivilegesMapper.xml
  87. 61 2
      mec-biz/src/main/resources/config/mybatis/MemberRankSettingMapper.xml
  88. 55 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMemberMapper.xml
  89. 7 11
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  90. 9 0
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  91. 5 0
      mec-biz/src/main/resources/config/mybatis/TenantMemberRankSettingMapper.xml
  92. 1 1
      mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java
  93. 1 1
      pom.xml

+ 2 - 2
mec-application/src/main/java/com/ym/mec/student/controller/CloudCoachPaymentProgramController.java

@@ -36,12 +36,12 @@ public class CloudCoachPaymentProgramController extends BaseController {
     public Object get(Long id){
         CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(id);
         if(cloudCoachPaymentProgram == null){
-            throw new BizException("云教练缴费项目不存在,请联系指导老师");
+            throw new BizException("学练宝缴费项目不存在,请联系指导老师");
         }
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         StudentCloudCoachPaymentDetails studentCloudCoachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(id, sysUser.getId());
         if(studentCloudCoachPaymentDetails == null){
-            throw new BizException("您不在当前云教练缴费项目中,请联系指导老师");
+            throw new BizException("您不在当前学练宝缴费项目中,请联系指导老师");
         }
         MemberRankSetting memberRankSetting = memberRankSettingService.get(cloudCoachPaymentProgram.getMemberRankSettingId());
         cloudCoachPaymentProgram.setMemberIntro(memberRankSetting.getIntro());

+ 97 - 10
mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java

@@ -7,24 +7,27 @@ import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareDetailWra
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
-import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
-import com.ym.mec.biz.service.LessonCoursewareService;
-import com.ym.mec.biz.service.OrganizationService;
-import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 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.page.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.student:}/lessonCourseware")
 @Api(tags = "课件教材")
@@ -42,22 +45,87 @@ public class LessonCoursewareController extends BaseController {
 	@Resource
 	private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
 
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
+
+    @Autowired
+    private MemberRankCourseTypeMapperService memberRankCourseTypeMapperService;
+
+    @Autowired
+    private MemberRankCategoryMapperService memberRankCategoryMapperService;
+
 	@ApiOperation(value = "分页查询已添加的课件")
 	@PostMapping("/queryLessonCourseware")
 	public HttpResponseResult<PageInfo<LessonCoursewareWrapper.LessonCoursewareDto>> queryLessonCourseware(@RequestBody LessonCoursewareWrapper.LessonCoursewareQuery query){
 		query.setEnable(true);
 		query.setStudentId(sysUserService.getUserId());
 		IPage<LessonCoursewareWrapper.LessonCoursewareDto> pages = lessonCoursewareService.selectPage(QueryInfo.getPage(query), query);
-		return succeed(PageUtil.pageInfo(pages));
+        List<LessonCoursewareWrapper.LessonCoursewareDto> records = pages.getRecords();
+        if (CollectionUtils.isNotEmpty(records)) {
+
+            // 根据用户会员判断是否锁定
+            // 查询有效的会员
+            List<Integer> courseIds = getCourseIds();
+
+            // 判断曲目是否在分类中
+            for (LessonCoursewareWrapper.LessonCoursewareDto row : records) {
+                if (courseIds.contains(row.getId())) {
+                    row.setUseStatus("UNLOCK");
+                } else  {
+                    row.setUseStatus("LOCK");
+                }
+            }
+        }
+
+        return succeed(PageUtil.pageInfo(pages));
 	}
 
 	@ApiOperation(value = "获取课件详情")
 	@GetMapping("/getLessonCoursewareDetail/{id}")
-	public HttpResponseResult<CbsLessonCoursewareWrapper.LessonCourseware> getLessonCoursewareDetail(@PathVariable("id") Long id){
-		return succeed(coursewareFeignService.lessonCoursewareDetail(id).feignData());
+	public HttpResponseResult<LessonCoursewareWrapper.LessonCoursewareExtend> getLessonCoursewareDetail(@PathVariable("id") Long id){
+        CbsLessonCoursewareWrapper.LessonCourseware lessonCourseware = coursewareFeignService.lessonCoursewareDetail(id).feignData();
+        if (lessonCourseware == null) {
+            return succeed();
+        }
+        //使用课件ID查询应用这边的ID
+        LessonCourseware lessonCourseware1 = lessonCoursewareService.getByLessonCoursewareId(id);
+        if (lessonCourseware1 == null) {
+            throw new BizException("课件不存在");
+        }
+
+        LessonCoursewareWrapper.LessonCoursewareExtend lessonCoursewareExtend = JSONObject
+            .parseObject(JSONObject.toJSONString(lessonCourseware), LessonCoursewareWrapper.LessonCoursewareExtend.class);
+        // 根据用户会员判断是否锁定
+        // 查询有效的会员
+        List<Integer> courseIds = getCourseIds();
+
+
+        // 判断曲目是否在分类中
+        if (courseIds.contains(lessonCourseware1.getId())) {
+            lessonCoursewareExtend.setUseStatus("UNLOCK");
+        } else {
+            lessonCoursewareExtend.setUseStatus("LOCK");
+        }
+
+        return succeed(lessonCoursewareExtend);
 	}
 
-	@ApiOperation(value = "获取课件关联的课程列表")
+    @NotNull
+    private List<Integer> getCourseIds() {
+        List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(sysUserService.getUserId());
+
+        // 获取会员的曲目分类
+
+        List<MemberRankCourseTypeMapper> courseTypeMapperList = memberRankCourseTypeMapperService.getByMemberRankId(activationVipIds);
+        if (CollectionUtils.isEmpty(courseTypeMapperList)) {
+            courseTypeMapperList = new ArrayList<>();
+        }
+        List<Integer> categoryIds = courseTypeMapperList.stream().map(MemberRankCourseTypeMapper::getCourseType)
+            .distinct().map(Integer::parseInt).collect(Collectors.toList());
+        return categoryIds;
+    }
+
+    @ApiOperation(value = "获取课件关联的课程列表")
 	@GetMapping("/getLessonCoursewareCourseList/{id}")
 	public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
 		List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
@@ -73,9 +141,28 @@ public class LessonCoursewareController extends BaseController {
 	@GetMapping("/getLessonCourseDetail/{id}")
 	public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") Long id){
 		SysUser sysUser = sysUserService.getUser();
+        // 机构可用曲目分类
 		String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
 		List<Integer> categoryIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(teachingMaterialIds);
-		return succeed(lessonCoursewareService.getLessonCourseDetail(id,categoryIdList));
+
+        // 学生会员可用曲目分类
+        Integer userId = sysUserService.getUserId();
+        List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(userId);
+
+        // 获取会员的曲目分类
+
+        List<MemberRankCategoryMapper> categoryMapperList = memberRankCategoryMapperService.getByMemberRankId(activationVipIds);
+        if (CollectionUtils.isEmpty(categoryMapperList)) {
+            categoryMapperList = new ArrayList<>();
+        }
+        List<Integer> categoryIds = categoryMapperList.stream().map(MemberRankCategoryMapper::getCategoryId)
+            .distinct().collect(Collectors.toList());
+        LessonCoursewareWrapper.LessonCoursewareDetailQuery query = new LessonCoursewareWrapper.LessonCoursewareDetailQuery();
+        query.setLessonCoursewareDetailId(id);
+        query.setUserType(ClientEnum.STUDENT);
+        query.setTenantCategoriesIdList(categoryIdList);
+        query.setStudentCategoriesIdList(categoryIds);
+		return succeed(lessonCoursewareService.getLessonCourseDetail(query));
 	}
 
 	@ApiOperation(value = "获取课件关联的声部列表")

+ 33 - 0
mec-application/src/main/java/com/ym/mec/student/controller/MemberRankSettingController.java

@@ -0,0 +1,33 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
+import com.ym.mec.biz.service.MemberRankSettingService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RequestMapping("${app-config.url.student:}/memberRankSetting")
+@Api(tags = "会员等级服务")
+@RestController
+public class MemberRankSettingController extends BaseController {
+
+    @Resource
+    private MemberRankSettingService memberRankSettingService;
+
+    @ApiOperation(value = "获取可用的会员树状列表")
+    @GetMapping("/queryTree")
+    public HttpResponseResult<List<MemberRankSettingWrapper.MemberRankSetting>> queryTree(String musicGroupId,Integer organId,Integer studentId) {
+        if (musicGroupId == null && organId == null && studentId == null) {
+            return failed("参数错误");
+        }
+        return succeed(memberRankSettingService.queryTree(musicGroupId,organId,studentId));
+    }
+
+}

+ 5 - 0
mec-application/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.student.controller;
 
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
@@ -85,6 +86,9 @@ public class StudentManageController extends BaseController {
     @Autowired
     private InstrumentService instrumentService;
 
+    @Autowired
+    private CloudTeacherOrderService cloudTeacherOrderService;
+
     private final static Logger LOGGER = LoggerFactory.getLogger(StudentManageController.class);
 
     @Autowired
@@ -303,6 +307,7 @@ public class StudentManageController extends BaseController {
         }
 
 
+        datas.put("vipInfo", cloudTeacherOrderService.getEffectiveCloudTeacherOrder(Lists.newArrayList(student.getUserId())));
 		return succeed(datas);
 	}
 

+ 1 - 1
mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -415,7 +415,7 @@ public class StudentOrderController extends BaseController {
             }
             orderDetail.put("detail", vipGroupActivities);
         } else if (orderByOrderNo.getGroupType().equals(GroupType.MEMBER)) {
-            CloudTeacherOrderDto orderDto = cloudTeacherOrderService.queryOrderInfoByOrderId(orderByOrderNo.getId());
+            CloudTeacherOrderDto orderDto = cloudTeacherOrderService.queryOrderInfoByOrderId(orderByOrderNo.getId()).get(0);
             orderDetail.put("detail", orderDto);
             if (orderDto != null) {
                 Map<String, Object> map = new HashMap<>(1);

+ 7 - 0
mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreController.java

@@ -1,8 +1,10 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -20,9 +22,14 @@ public class SysMusicScoreController extends BaseController {
     @Resource
     private SysMusicScoreService sysMusicScoreService;
 
+    @Resource
+    private SysUserService sysUserService;
     @ApiOperation(value = "分页查询")
     @GetMapping("/queryPage2")
     public Object queryPage2(SysExamSongQueryInfo queryInfo) {
+        Integer userId = sysUserService.getUserId();
+        queryInfo.setUserId(userId);
+        queryInfo.setUserType(ClientEnum.STUDENT);
         queryInfo.setType("COMMON");
         queryInfo.setClientFlag(true);
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);

+ 6 - 1
mec-application/src/main/java/com/ym/mec/teacher/controller/LessonCoursewareController.java

@@ -12,6 +12,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.LessonCoursewareService;
@@ -94,7 +95,11 @@ public class LessonCoursewareController extends BaseController {
 		SysUser sysUser = sysUserService.getUser();
 		String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
 		List<Integer> categoryIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(teachingMaterialIds);
-		return succeed(lessonCoursewareService.getLessonCourseDetail(id,categoryIdList));
+        LessonCoursewareWrapper.LessonCoursewareDetailQuery query = new LessonCoursewareWrapper.LessonCoursewareDetailQuery();
+        query.setLessonCoursewareDetailId(id);
+        query.setUserType(ClientEnum.TEACHER);
+        query.setTenantCategoriesIdList(categoryIdList);
+		return succeed(lessonCoursewareService.getLessonCourseDetail(query));
 	}
 
 	@ApiOperation(value = "获取课件关联的声部列表")

+ 1 - 1
mec-application/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java

@@ -46,7 +46,7 @@ public class CloudTeacherOrderController extends BaseController {
 
     @ApiOperation(value = "查询未激活团练宝用户")
     @PostMapping("/queryInactive")
-    @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/queryInActive')")
+    @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/queryInactive')")
     public HttpResponseResult<PageInfo<CloudTeacherStudent>> queryInactive(@RequestBody CloudTeacherOrderQueryInfo cloudTeacherOrderQueryInfo) throws Exception {
         Integer tenantId = TenantContextHolder.getTenantId();
         cloudTeacherOrderQueryInfo.setTenantId(tenantId);

+ 26 - 10
mec-application/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.controller.BaseController;
@@ -229,7 +230,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团编号", "乐团名称", "合作单位", "乐团状态",
-                    "收费模式", "收费类型", "乐团主管", "成团人数", "在读人数",  "会员人数",  "非会员人数", "申请时间", "成团时间", "清单状态", "收费标准"}, new String[]{
+                    "收费模式", "收费类型", "乐团主管", "成团人数", "在读人数",  "学练宝人数",  "非会员人数", "申请时间", "成团时间", "清单状态", "收费标准"}, new String[]{
                     "organName", "id", "name", "cooperationOrganName", "status.msg", "courseViewType.msg", "chargeTypeName",
                     "educationalTeacherName", "groupMemberNum", "payNum", "memberNum", "notMemberNum"
                     , "createTime", "billStartDate", "hasVerifyMusicalList?'已确认':'未确认'", "chargeStandard"}, rows);
@@ -916,7 +917,7 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "学员姓名", "性别", "家长姓名",
                     "家长联系电话", "VIP老师", "网管老师", "声部老师", "合奏老师", "是否激活", "是否有课", "是否有网管课", "网管课剩余课时", "VIP课剩余课时", "课程余额(元)", "账户余额(元)",
-                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用云教练", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"}, new String[]{
+                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用学练宝", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"}, new String[]{
                     "organName", "userId", "username", "gender.description", "parentsName", "parentsPhone","vipTeacherName", "practiceTeacherName", "normalTeacherName", "mixTeacherName",
                     "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg", "noStartPracticeCourseNum", "noStartVipCourseNum", "courseBalance", "balance", "musicGroupName",
                     "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'",
@@ -1113,7 +1114,7 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "云教练金额", "乐保金额", "订单总价"}, new String[]{
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "学练宝金额", "乐保金额", "订单总价"}, new String[]{
                     "organName", "musicGroupName", "userId", "username", "subjectName", "musicalName", "kitGroupPurchaseTypeEnum.msg",
                     "musicalAmount", "accessoriesName", "accessoriesAmount", "courseAmount", "cloudTeacherAmount", "maintenanceAmount", "orderAmount"}, musicalList);
             response.setContentType("application/octet-stream");
@@ -1174,7 +1175,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学生姓名", "家长姓名", "年级", "班级", "性别", "服从调剂", "报名专业",
-                    "实际专业", "联系电话", "学员缴费状态", "乐器购买方式", "缴费中/审核中", "是否购买云教练"}, new String[]{
+                    "实际专业", "联系电话", "学员缴费状态", "乐器购买方式", "缴费中/审核中", "是否购买学练宝"}, new String[]{
                     "studentName", "parentsName", "currentGrade", "currentClass", "gender.description",
                     "isAllowAdjust.msg", "subjectName", "actualSubjectName", "parentsPhone", "paymentStatus.desc",
                     "kitGroupPurchaseTypeEnum.msg", "payingStatusStr", "hasCloudTeacher==1?'有':'没有'"}, studentApplyDetail);
@@ -1233,7 +1234,7 @@ public class ExportController extends BaseController {
     @RequestMapping("export/musicGroupStudent")
     @PreAuthorize("@pcs.hasPermissions('export/musicGroupStudent')")
     public void queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo, HttpServletResponse response) throws IOException {
-        queryInfo.setIsExport(true);
+        queryInfo.setExport(true);
         queryInfo.setPage(1);
         queryInfo.setRows(49999);
         PageInfo<MusicGroupStudentsDto> musicGroupStudentsDtoPageInfo = studentManageService.queryMusicGroupStudent(queryInfo);
@@ -1243,6 +1244,22 @@ public class ExportController extends BaseController {
             MusicGroup musicGroup = musicGroupDao.get(queryInfo.getMusicGroupId());
             Map<Integer, String> gradeList = organizationService.getGradeList(musicGroup.getOrganId());
             for (MusicGroupStudentsDto row : musicGroupStudentsDtoPageInfo.getRows()) {
+                List<CloudTeacherOrderWrapper.StudentMemberDetail> orderList = row.getCloudTeacherOrderList();
+                if (!CollectionUtils.isEmpty(orderList)) {
+                    StringBuffer remark = new StringBuffer();
+                    for (CloudTeacherOrderWrapper.StudentMemberDetail studentMemberDetail : orderList) {
+                        if (StringUtils.isNotEmpty(remark)) {
+                            remark.append("\r\n");
+                        }
+                        remark.append(studentMemberDetail.getMemberRankName());
+                        remark.append(" ");
+                        remark.append(DateUtil.dateToString(studentMemberDetail.getEndTime(), DateUtil.DEFAULT_PATTERN));
+                        remark.append("(");
+                        remark.append(studentMemberDetail.getRemainingDays());
+                        remark.append("天)");
+                    }
+                    row.setRemark(remark.toString());
+                }
                 if (StringUtils.isNotEmpty(row.getCurrentGrade())) {
                     String grade = gradeList.get(Integer.parseInt(row.getCurrentGrade()));
                     if (StringUtils.isNotEmpty(grade)) {
@@ -1264,7 +1281,7 @@ public class ExportController extends BaseController {
                 } else if (row.getStudentStatus().equals("APPLY")) {
                     row.setStudentStatus("报名");
                 } else {
-                    row.setStudentStatus("" + row.getStudentStatus());
+                    row.setStudentStatus(row.getStudentStatus());
                 }
                 if (row.getIsActive()) {
                     row.setActiveName("是");
@@ -1279,13 +1296,12 @@ public class ExportController extends BaseController {
                 }
             }
             String[] header = {"学员编号", "学员姓名", "性别", "联系电话", "入团时间", "年级", "班级", "入团专业", "学员状态", "报名缴费", "缴费金额", "是否激活",
-                    "VIP/网管是否有课", "关心包", "加油包", "欠费金额(元)", "退团原因", "会员截止时间", "会员剩余天数"};
+                    "VIP/网管是否有课", "关心包", "加油包", "欠费金额(元)", "退团原因", "学练宝截止时间(剩余天数)"};
             String[] body = {"userId", "realName", "gender", "phone", "registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc"
                     , "courseFee", "activeName", "hasCourse ? '是' : '否'"
                     , "carePackage == null || carePackage == 0 ? '不可用' : carePackage == 1 ? '可用' : '已使用'"
                     , "comeOnPackage == null || comeOnPackage == 0 ? '不可用'' : comeOnPackage == 1 ? '可用' : '已使用'"
-                    , "noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason",
-                    "membershipEndTime", "membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'"};
+                    , "noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason","remark"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, musicGroupStudentsDtoPageInfo.getRows());
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -1547,7 +1563,7 @@ public class ExportController extends BaseController {
         OutputStream ouputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(
-                    new String[]{"布置时间", "截至时间", "训练标题", "老师名字", "分部", "学生姓名", "学生编号", "提交训练", "提交训练时间", "是否评价", "是否有vip", "及时评价", "是否云教练布置"},
+                    new String[]{"布置时间", "截至时间", "训练标题", "老师名字", "分部", "学生姓名", "学生编号", "提交训练", "提交训练时间", "是否评价", "是否有vip", "及时评价", "是否学练宝布置"},
                     new String[]{"createTime", "expireDate", "title", "teacherName", "organName",
                             "user.username", "userId", "statusStr", "submitTime", "isRepliedStr", "existVipCourseStr", "isRepliedTimelyStr", "musicScoreId"}, rows);
             response.setContentType("application/octet-stream");

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

@@ -2,19 +2,25 @@ 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.dal.wrapper.MemberRankSettingWrapper;
 import com.ym.mec.biz.service.MemberRankOrganizationFeeMapperService;
 import com.ym.mec.biz.service.OrganizationService;
 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.tenant.TenantContextHolder;
 import com.ym.mec.util.collection.MapUtil;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @RequestMapping("${app-config.url.web:}/memberRankOrganizationFeeMapper")
@@ -39,6 +45,28 @@ public class MemberRankOrganizationFeeMapperController extends BaseController {
         return succeed();
     }
 
+
+    @ApiOperation(value = "查询分部可配置的学练宝")
+    @PostMapping("/getMemberRankSetting")
+    @AuditLogAnnotation(operateName = "查询分部可配置的学练宝")
+    public HttpResponseResult<List<MemberRankSettingWrapper.MemberRankSetting>> getMemberRankSetting(
+        @RequestBody @Validated MemberRankOrganizationFeeMapperWrapper.MemberRankQuery query) {
+        query.setTenantId(TenantContextHolder.getTenantId());
+        return succeed(memberRankOrganizationFeeMapperService.getMemberRankSetting(query));
+
+    }
+
+
+    @ApiOperation(value = "新增")
+    @PostMapping("/addV2")
+    @PreAuthorize("@pcs.hasPermissions('memberRankOrganizationFeeMapper/addV2')")
+    @AuditLogAnnotation(operateName = "新增系统功能类型")
+    public Object addV2(@RequestBody @Validated 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/{id}")
+    @PreAuthorize("@pcs.hasPermissions('memberRankSetting/del')")
+    @AuditLogAnnotation(operateName = "删除学练宝会员等级")
+    public HttpResponseResult<Object> update(@PathVariable 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<MemberRankSettingWrapper.Category> queryTree(@RequestParam(required = false) Integer parentMemberId) {
+
+        return succeed(memberRankSettingService.getTree(parentMemberId));
     }
 
     @ApiOperation(value = "获取所有会员列表")

+ 3 - 3
mec-application/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java

@@ -53,7 +53,7 @@ public class MusicGroupPaymentCalenderController extends BaseController {
 
     @ApiOperation(value = "查询审核人")
     @GetMapping(value = "/queryUser")
-    public Object queryUser(MusicGroupPaymentCalenderQueryInfo queryInfo) {
+    public HttpResponseResult<List<Map<String, String>>> queryUser(MusicGroupPaymentCalenderQueryInfo queryInfo) {
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(musicGroupPaymentCalenderService.queryUser(queryInfo));
     }
@@ -61,14 +61,14 @@ public class MusicGroupPaymentCalenderController extends BaseController {
     @ApiOperation(value = "获取缴费信息")
     @GetMapping("/getDetail")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalender/getDetail')")
-    public Object getDetail(Long id) {
+    public HttpResponseResult<Map<String, Object>> getDetail(Long id) {
         return succeed(musicGroupPaymentCalenderService.getDetail(id));
     }
 
     @ApiOperation(value = "新增乐团缴费日历")
     @PostMapping(value = "/add", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalender/add')")
-    public HttpResponseResult add(@RequestBody MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto) {
+    public HttpResponseResult<ModelMap> add(@RequestBody MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto) {
     	String batchNo = musicGroupPaymentCalenderService.create(musicGroupPaymentCalenderDto);
         ModelMap map = new ModelMap(1);
         map.put("musicGroupPaymentCalenderBatchNo", batchNo);

+ 18 - 18
mec-application/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -48,7 +48,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学生请假异常列表")
     @GetMapping("/queryStudentErrorLeaveList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentErrorLeaveList')")
-    public Object queryStudentErrorLeaveList(StudentErrorLeaveQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<StudentErrorLeaveDto>> queryStudentErrorLeaveList(StudentErrorLeaveQueryInfo queryInfo){
         queryInfo.setOrganIds(organizationService.getEmployeeOrgan(queryInfo.getOrganIds()));
         return succeed(studentManageService.queryStudentErrorLeaveList(queryInfo));
     }
@@ -56,14 +56,14 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学生请假课程列表")
     @GetMapping("/queryStudentLeaveCourseList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentLeaveCourseList')")
-    public Object queryStudentLeaveCourseList(StudentErrorLeaveQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<StudentLeaveCourseDto>> queryStudentLeaveCourseList(StudentErrorLeaveQueryInfo queryInfo){
         return succeed(studentManageService.queryStudentLeaveCourseList(queryInfo));
     }
 
     @ApiOperation(value = "获取学生列表")
     @PostMapping("/queryStudentList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentList')")
-    public Object queryStudentList(@RequestBody StudentManageQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<StudentManageListDto>> queryStudentList(@RequestBody StudentManageQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         queryInfo.setIsExport(false);
         return succeed(studentManageService.findStudentsByOrganId(queryInfo));
@@ -72,7 +72,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学生列表")
     @GetMapping("/queryStudent")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudent')")
-    public Object queryStudent(StudentActivityQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<Student>> queryStudent(StudentActivityQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(studentManageService.queryStudent(queryInfo));
     }
@@ -80,7 +80,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学生列表(基本信息)")
     @GetMapping("/queryStudentBasicInfo")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentBasicInfo')")
-    public Object queryStudentBasicInfo(UserBasicQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<SysUserDto>> queryStudentBasicInfo(UserBasicQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(studentService.queryStudentBasicInfo(queryInfo));
     }
@@ -88,7 +88,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取61活动学生列表")
     @GetMapping("/queryChildrenDayStudentList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryChildrenDayStudentList')")
-    public Object queryChildrenDayStudentList(StudentManageQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<Student>> queryChildrenDayStudentList(StudentManageQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(studentService.queryPage(queryInfo));
     }
@@ -104,7 +104,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取指定分部学生列表")
     @GetMapping("/queryOrganStudentList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryOrganStudentList')")
-    public Object queryOrganStudentList(StudentManageQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<StudentManageListDto>> queryOrganStudentList(StudentManageQueryInfo queryInfo){
         if(StringUtils.isBlank(queryInfo.getOrganId())){
             return failed("请指定分部");
         }
@@ -115,21 +115,21 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "学员注册")
     @PostMapping("/register")
     @PreAuthorize("@pcs.hasPermissions('studentManage/register')")
-    public Object studentRegister(Student student){
+    public HttpResponseResult<Integer> studentRegister(Student student){
         return succeed(studentManageService.studentRegister(student));
     }
 
     @ApiOperation(value = "修改学员信息")
     @PostMapping("/studentUpdate")
     @PreAuthorize("@pcs.hasPermissions('studentManage/studentUpdate')")
-    public Object studentUpdate(Student student){
+    public HttpResponseResult<Integer> studentUpdate(Student student){
         return succeed(studentManageService.studentUpdate(student));
     }
 
     @ApiOperation(value = "乐团管理--乐团详情--获取学员列表")
     @GetMapping("/queryMusicGroupStudent")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryMusicGroupStudent')")
-    public Object queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<MusicGroupStudentsDto>> queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo){
         return succeed(studentManageService.queryMusicGroupStudent(queryInfo));
     }
 
@@ -150,7 +150,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "乐团修改--学员缴费记录--可新增学员列表")
     @GetMapping("/queryCanAddStudent")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryCanAddStudent')")
-    public Object queryCanAddStudent(String musicGroupId,String batchNo,String search,Integer subjectId){
+    public HttpResponseResult<List<BasicUserDto>> queryCanAddStudent(String musicGroupId, String batchNo, String search, Integer subjectId){
         return succeed(studentManageService.queryCanAddStudent(musicGroupId,batchNo,search,subjectId));
     }
 
@@ -159,7 +159,7 @@ public class StudentManageController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentClassGroup')")
     @ApiImplicitParams({@ApiImplicitParam(name = "teacherId", value = "学生编号", required = true, dataType = "Integer"),
             @ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String")})
-    public Object queryStudentClassGroup(String musicGroupId,Integer teacherId){
+    public HttpResponseResult<List<ConditionDto>> queryStudentClassGroup(String musicGroupId,Integer teacherId){
         if(StringUtils.isEmpty(musicGroupId) || teacherId == null){
             return failed("参数校验失败");
         }
@@ -169,42 +169,42 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "乐团管理--乐团详情--学员列表,汇总数据接口")
     @GetMapping("/musicGroupStudentsSum")
     @PreAuthorize("@pcs.hasPermissions('studentManage/musicGroupStudentsSum')")
-    public Object musicGroupStudentsSum(String musicGroupId){
+    public HttpResponseResult<Map<String, Object>> musicGroupStudentsSum(String musicGroupId){
         return succeed(studentManageService.musicGroupStudentsSum(musicGroupId));
     }
 
     @ApiOperation(value = "乐团管理--乐团详情--点名总览")
     @GetMapping("/queryMusicGroupStudentsSign")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryMusicGroupStudentsSign')")
-    public Object queryMusicGroupStudentsSign(StudentSignQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<MusicGroupStudentSignDto>> queryMusicGroupStudentsSign(StudentSignQueryInfo queryInfo){
         return succeed(studentManageService.queryMusicGroupStudentsSign(queryInfo));
     }
 
     @ApiOperation(value = "根据学生ID获取学生基本报名信息")
     @GetMapping("/findStudentBaseInfo")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentBaseInfo')")
-    public Object findStudentBaseInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
+    public HttpResponseResult<StudentManageListDto> findStudentBaseInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
         return succeed(studentManageService.findStudentManageBaseInfo(userId));
     }
 
     @ApiOperation(value = "根据学生ID获取其所在的乐团")
     @GetMapping("/findStudentMusicGroups")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentMusicGroups')")
-    public Object findStudentMusicGroups(@ApiParam(value = "学生编号", required = true) Integer userId){
+    public HttpResponseResult<List<StudentManageBaseInfoOfMusicGroupDto>> findStudentMusicGroups(@ApiParam(value = "学生编号", required = true) Integer userId){
         return succeed(studentManageService.findStudentMusicGroupsByUserId(userId));
     }
 
     @ApiOperation("获取学生所在乐团列表名称")
     @GetMapping(value = "/queryUserMusicInfos")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryUserMusicInfos')")
-    public Object queryUserMusicInfos(Integer userId) {
+    public HttpResponseResult<List<MusicCardDto>> queryUserMusicInfos(Integer userId) {
         return succeed(studentManageService.queryUserMusicInfos(userId));
     }
 
     @ApiOperation(value = "根据乐团获取排课列表")
     @GetMapping("/findStudentCourses")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentCourses')")
-    public Object findStudentCourses(StudentManageCourseQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo> findStudentCourses(StudentManageCourseQueryInfo queryInfo){
         return succeed(studentManageService.findStudentCourseList(queryInfo));
     }
 

+ 26 - 26
mec-application/src/main/resources/exportColumnMapper.ini

@@ -11,11 +11,11 @@ headColumns = ["分部", "合作单位", "乐团","学员编号", "学员姓名"
 fieldColumns = ["organName", "cooperationOrganName", "musicGroupName","userId", "username", "phone","subjectName","currentClass", "realName", "isReserve == true ?'是':'否'","gradeLeave","theoryLevel","buyVipFlag == true ?'是':'否'","buyTheoryCourseFlag == true ?'是':'否'"]
 
 [2021双十一学员购买详情]
-headColumns = ["学员编号", "学员姓名","订单号", "交易金额","交易时间", "订单创建时间", "购买课程", "赠送会员"]
+headColumns = ["学员编号", "学员姓名","订单号", "交易金额","交易时间", "订单创建时间", "购买课程", "赠送学练宝"]
 fieldColumns = ["userId", "username", "orderNo","amount", "payTime", "createTime","type","giveMember==0?'否':'是'"]
 
 [分部2021双11活动统计导出]
-headColumns = ["分部", "总成交金额","总购买人数", "人均购买金额","20节1v1成交金额", "20节1v1成交人数", "40节1v1成交金额", "40节1v1成交人数", "20节1v2成交金额", "20节1v2成交人数","40节1v2成交金额", "40节1v2成交人数", "小组课成交金额", "小组课成交人数", "赠送会员人数"]
+headColumns = ["分部", "总成交金额","总购买人数", "人均购买金额","20节1v1成交金额", "20节1v1成交人数", "40节1v1成交金额", "40节1v1成交人数", "20节1v2成交金额", "20节1v2成交人数","40节1v2成交金额", "40节1v2成交人数", "小组课成交金额", "小组课成交人数", "赠送学练宝人数"]
 fieldColumns = ["organName", "totalBuyAmount", "totalBuyNum","avgBuyAmount", "vip1V120Amount", "vip1V120Num","vip1V140Amount", "vip1V140Num", "vip1V220Amount", "vip1V220Num","vip1V240Amount" ,"vip1V240Num","musicTheoryAmount","musicTheoryNum","giveMemberNum"]
 
 [学生个人账户余额导出]
@@ -43,7 +43,7 @@ headColumns = ["分部编号", "分部名称", "课程组类型", "课程组编
 fieldColumns = ["organId", "organName", "groupType.desc", "groupId", "groupName", "username", "userId", "courseScheduleId", "courseScheduleName", "classDate", "startClassTime", "endClassTime", "guideTeacherName", "guideTeacherId" , "educationalTeacherName", "educationalTeacherId", "actualTeacherName", "actualTeacherId", "studentAttendanceStatus.msg"]
 
 [缴费记录导出]
-headColumns = ["学员编号", "学员姓名", "学员声部", "学员状态", "手机号","缴费开始日期", "缴费截止日期", "是否开启缴费", "缴费状态", "支付时间","会员金额", "乐器金额", "课程金额", "辅件金额", "乐保金额", "活动金额"]
+headColumns = ["学员编号", "学员姓名", "学员声部", "学员状态", "手机号","缴费开始日期", "缴费截止日期", "是否开启缴费", "缴费状态", "支付时间","学练宝金额", "乐器金额", "课程金额", "辅件金额", "乐保金额", "活动金额"]
 fieldColumns = ["userId", "sysUser.username", "studentRegistration.subjectName", "studentRegistration.musicGroupStatus.msg", "sysUser.phone", "startPaymentDateMgpc", "deadlinePaymentDateMgpc", "openFlag.msg", "paymentStatus.desc", "payTime", "cloudAmount", "musicalAmount", "courseAmount", "accessoriesAmount", "maintenanceAmount", "activityAmount"]
 
 [业务管理--审核列表导出]
@@ -75,8 +75,8 @@ headColumns = ["课程组编号", "课程组名称", "分部", "指导老师", "
 fieldColumns = ["musicGroupId", "courseGroupName", "organName", "teacherName", "settlementStatus.msg", "expectRewardAmount", "settlementDate", "memo"]
 
 [导出学员列表]
-headColumns = ["分部", "学员编号", "学员姓名", "性别", "家长姓名","家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)","所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用云教练", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"]
-fieldColumns = ["organName", "userId", "username", "gender.description", "parentsName", "parentsPhone", "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg","noStartPracticeCourseNum","noStartVipCourseNum", "courseBalance", "balance", "musicGroupName", "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'", "experienceMembershipEndTime","membershipEndTime == null ? '未试用' : membershipDay >= 0 ? membershipDay : '已失效'"]
+headColumns = ["分部", "学员编号", "学员姓名", "性别", "家长姓名","家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)","所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用学练宝", "学练宝截止日期", "学练宝剩余天数", "学练宝试用结束日期", "学练宝试用剩余天数"]
+fieldColumns = ["organName", "userId", "username", "gender.description", "parentsName", "parentsPhone", "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg","noStartPracticeCourseNum","noStartVipCourseNum", "courseBalance", "balance", "musicGroupName", "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '学练宝已过期'", "experienceMembershipEndTime","membershipEndTime == null ? '未试用' : membershipDay >= 0 ? membershipDay : '已失效'"]
 
 [导出陪练课列表]
 headColumns = ["课程组编号", "课程组名称", "课程组类型", "分部", "教务老师", "指导老师", "班级人数","当前课次", "总课次", "剩余课次", "开课时间", "结束时间", "课程组状态", "是否续费", "备注"]
@@ -99,11 +99,11 @@ headColumns = ["分部", "乐团", "商品类型", "商品名称", "型号", "
 fieldColumns = ["brief", "memo", "type.desc", "name", "specification", "sellCount"]
 
 [导出学员采购清单明细]
-headColumns = ["分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "云教练金额", "乐保金额", "订单总价"]
+headColumns = ["分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "学练宝金额", "乐保金额", "订单总价"]
 fieldColumns = ["organName", "musicGroupName", "userId", "username", "subjectName", "musicalName", "kitGroupPurchaseTypeEnum.msg", "musicalAmount", "accessoriesName", "accessoriesAmount", "courseAmount", "cloudTeacherAmount", "maintenanceAmount", "orderAmount"]
 
 [学生详情列表导出]
-headColumns = ["学生姓名", "家长姓名", "年级", "班级", "性别", "服从调剂", "报名专业","实际专业", "联系电话", "学员缴费状态", "乐器购买方式","缴费中/审核中","是否购买云教练"]
+headColumns = ["学生姓名", "家长姓名", "年级", "班级", "性别", "服从调剂", "报名专业","实际专业", "联系电话", "学员缴费状态", "乐器购买方式","缴费中/审核中","是否购买学练宝"]
 fieldColumns = ["studentName", "parentsName", "currentGrade", "currentClass", "gender.description", "isAllowAdjust.msg", "subjectName", "actualSubjectName", "parentsPhone", "paymentStatus.desc", "kitGroupPurchaseTypeEnum.msg","payingStatusStr","hasCloudTeacher==1?'有':'没有'"]
 
 [分页导出教师薪酬列表]
@@ -115,15 +115,15 @@ headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount","balancePaymentAmount","couponRemitFee", "transferFee", "platformFee", "payTime", "organName","memo"]
 
 [订单列表导出1]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额", "课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它", "汇付手续费","平台手续费", "到账时间","关联乐团ID/VIP课ID","课程形态","类型","收费乐团编号","收费乐团","零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额", "课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它", "汇付手续费","平台手续费", "到账时间","关联乐团ID/VIP课ID","课程形态","类型","收费乐团编号","收费乐团","零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount","balancePaymentAmount","couponRemitFee","musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId","groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [订单列表导出2]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它","平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它","平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee",     "musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee",     "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [订单列表汇总导出]
-headColumns = ["分部", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它"]
+headColumns = ["分部", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它"]
 fieldColumns = ["organName", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee","musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee", "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee"]
 
 [学员小课记录导出]
@@ -131,8 +131,8 @@ headColumns = ["分部", "学员编号", "学生姓名", "年级", "课程余额
 fieldColumns = ["organName","userId", "username", "grade","courseBalance", "subjectName", "normalClassTeacherId", "normalClassTeacherName", "beforeClassNum", "vipTotalNum", "vipOverNum", "vipNotStartNum", "vipOverTeacherId", "vipOverTeacherName", "vipNotStartTeacherId", "vipNotStartTeacherName" , "practiceOverNum", "practiceNotStartNum", "practiceOverTeacherId", "practiceOverTeacherName", "practiceNotStartTeacherId", "practiceNotStartTeacherName","teacherId","teacherName"]
 
 [乐团导出学员列表]
-headColumns = ["学员编号", "学员姓名", "性别", "联系电话","入团时间", "年级", "班级", "入团专业", "学员状态", "报名缴费", "缴费金额", "是否激活","VIP/网管是否有课","关心包","加油包", "欠费金额(元)", "退团原因", "会员截止时间", "会员剩余天数"]
-fieldColumns = ["userId", "realName", "gender", "phone","registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc" ,"courseFee", "activeName", "hasCourse ? '是' : '否'" ,"carePackage == null || carePackage == 0 ? '不可用' : carePackage == 1 ? '可用' : '已使用'" ,"comeOnPackage == null || comeOnPackage == 0 ? '不可用' : comeOnPackage == 1 ? '可用' : '已使用'" ,"noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'"]
+headColumns = ["学员编号", "学员姓名", "性别", "联系电话","入团时间", "年级", "班级", "入团专业", "学员状态", "报名缴费", "缴费金额", "是否激活","VIP/网管是否有课","关心包","加油包", "欠费金额(元)", "退团原因", "学练宝截止时间", "学练宝剩余天数"]
+fieldColumns = ["userId", "realName", "gender", "phone","registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc" ,"courseFee", "activeName", "hasCourse ? '是' : '否'" ,"carePackage == null || carePackage == 0 ? '不可用' : carePackage == 1 ? '可用' : '已使用'" ,"comeOnPackage == null || comeOnPackage == 0 ? '不可用' : comeOnPackage == 1 ? '可用' : '已使用'" ,"noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '学练宝已过期'"]
 
 [评论列表导出]
 headColumns = ["分部", "上课日期", "学生编号", "课程编号", "学员是否到课", "课程班名称", "老师", "教材内容", "发音", "节奏", "小组", "曲目", "评价备注", "回访日期(布置训练)", "完成app双向沟通", "学员评分", "是否布置训练", "是否提交训练", "是否回复训练", "教务老师", "教务评价"]
@@ -175,11 +175,11 @@ headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee", "transferFee", "platformFee", "payTime", "organName", "memo"]
 
 [财务管理导出1]
-headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee","musicGroupCourseFee", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [财务管理导出2]
-headColumns = ["序号", "业务分部", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "业务分部", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount" , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee","musicGroupCourseFee", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [老师默认课酬导出]
@@ -215,7 +215,7 @@ headColumns = ["分部", "老师编号", "老师姓名", "服务周期", "课后
 fieldColumns = ["organName", "teacherId", "teacherName", "dateRange", "homeworkNum", "exerciseNum", "actualExercisesNum", "exercisesReplyNum", "expectExercisesNum>actualExercisesNum?'异常':'正常'", "exercisesReplyNum>exercisesMessageNum?'异常':'正常'", "submitRate", "remindDate", "operatorName"]
 
 [首页异常统计导出]
-headColumns = ["分部", "基础技能班学员数量异常", "乐团巡查事项异常", "未在班级学员数", "欠费学员数","申请退团学员数", "预计课酬较低", "课程时间安排异常", "乐团巡查未计划", "乐团巡查任务未提交","回访任务未完成", "课程考勤异常", "课程异常", "服务指标异常", "异常请假", "会员过期学员数", "总计"]
+headColumns = ["分部", "基础技能班学员数量异常", "乐团巡查事项异常", "未在班级学员数", "欠费学员数","申请退团学员数", "预计课酬较低", "课程时间安排异常", "乐团巡查未计划", "乐团巡查任务未提交","回访任务未完成", "课程考勤异常", "课程异常", "服务指标异常", "异常请假", "学练宝过期学员数", "总计"]
 fieldColumns = ["organName", "highClassStudentLessThanThreeNum", "musicPatrolItem", "noClassMusicGroupStudentInfo", "studentNotPayment", "studentApplyForQuitMusicGroup", "teacherExpectSalaryBeLow", "courseTimeError", "inspectionItem", "inspectionItemPlan", "studentVisit", "teacherExceptionAttendance", "teacherNotAClass", "teacherServeError", "studentErrorLeave", "noMemberStudentNum", "total"]
 
 [运营预警导出]
@@ -235,15 +235,15 @@ headColumns = ["编号", "姓名", "手机号", "微信","声部", "所在城市
 fieldColumns = ["id", "realName", "mobileNo", "wechatNo", "subjectName", "liveCity", "intentionCity", "sourceFrom", "nextVisitDateStr", "entryDateStr", "position.msg","organName","status.desc", "idCard", "age", "gender?'男':'女'", "bankCardNo","bankAddress","emergencyContactName", "emergencyContactRelation", "emergencyContactPhone", "updateTime", "hrbpName","resignationDateStr"]
 
 [分部云教练学员数据预览导出]
-headColumns = ["排名", "分部", "学员总数", "目标人数", "活跃人数", "使用人数", "新增使用人数", "使用比例", "付费会员数", "付费会员占比"]
+headColumns = ["排名", "分部", "学员总数", "目标人数", "活跃人数", "使用人数", "新增使用人数", "使用比例", "付费学练宝数", "付费学练宝占比"]
 fieldColumns = ["index","organName", "totalStudentNum", "targetNum", "cloudStudyLivelyStudentNum", "cloudStudyUseStudentNum", "newCloudStudyStudentNum", "cloudStudyUseStudentDuty+'%'", "vipStudentNum", "vipStudentDuty+'%'"]
 
 [分部云教练学员数据详情导出]
-headColumns = ["分部", "在读人数", "生效待激活总人数", "会员占比", "生效会员", "待激活", "覆盖率", "复购率","近一个月活跃人数", "今日使用人数"]
+headColumns = ["分部", "在读人数", "生效待激活总人数", "学练宝占比", "生效学练宝", "待激活", "覆盖率", "复购率","近一个月活跃人数", "今日使用人数"]
 fieldColumns = ["organName", "totalStudentNum", "vipStudentNum", "vipStudentRate+'%'", "effectiveVipStudentNum", "waitActivateVipStudentNum", "buyRate+'%'", "againBuyRate+'%'", "activeStudentNum", "cloudStudyTodayUseStudentNum"]
 
 [分部云教练学员训练数据导出]
-headColumns = ["分部", "学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "是否会员", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "声部", "声部老师",  "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否云教练活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
+headColumns = ["分部", "学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "是否学练宝", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "声部", "声部老师",  "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否学练宝活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
 fieldColumns = ["organName","studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'", "memberFlag?'是':'否'", "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames","subjectName","subjectTeacherName",  "hasVipGroup>0?'是':'否'", "cloudStudyUseNum+'次'", "cloudStudyUseDays+'天'",         "cloudStudyUseAvgTime+'分钟'", "membershipEndTime", "serviceTag>0?'是':'否'", "operatingTag>0?'是':'否'","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?'已使用':'可用':'不可用'", "comeOnPackage>0?comeOnPackage>1?'已使用':'可用':'不可用'",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
 
 [分部云教练活动统计数据导出]
@@ -323,11 +323,11 @@ headColumns = ["分部", "在读人数", "应有课耗", "实际课耗","课耗
 fieldColumns = ["organName","normalNum","courseConsumerNum","courseSum","courseConsumerRate+'%'","num5","num4","num3","num2","num1","num0","standRate+'%'"]
 
 [云教练统计导出]
-headColumns = ["分部", "会员人数","练习人数","练习率","<10分钟","10~60分钟", "60~120分钟","120~240分钟",">=240分钟","平均练习时长(会员)","平均练习时长(练习)","练习达标占比"]
+headColumns = ["分部", "学练宝人数","练习人数","练习率","<10分钟","10~60分钟", "60~120分钟","120~240分钟",">=240分钟","平均练习时长(学练宝)","平均练习时长(练习)","练习达标占比"]
 fieldColumns = ["organName","normalNum","trainStudentNum","trainRate+'%'","train0","train1","train2","train3","train4","avgTrainTime","trainAvgTrainTime","trainStandRate+'%'"]
 
 [云教练统计详情导出]
-headColumns = ["声部老师", "会员人数","练习人数","练习率","<60分钟", "60~120分钟","120~240分钟",">=240分钟","平均练习时长(会员)","平均练习时长(练习)","练习达标占比"]
+headColumns = ["声部老师", "学练宝人数","练习人数","练习率","<60分钟", "60~120分钟","120~240分钟",">=240分钟","平均练习时长(学练宝)","平均练习时长(练习)","练习达标占比"]
 fieldColumns = ["teacherName","normalNum","trainStudentNum","trainRate+'%'","train1","train2","train3","train4","avgTrainTime","trainAvgTrainTime","trainStandRate+'%'"]
 
 [班级列表导出]
@@ -339,11 +339,11 @@ headColumns = ["合作单位", "总金额"]
 fieldColumns = ["name", "amount"]
 
 [老师云教练使用数据]
-headColumns = ["分部", "老师姓名", "声部", "课程时长(分)", "课程云教练使用时长(分)", "云教练使用总时长(分)"]
+headColumns = ["分部", "老师姓名", "声部", "课程时长(分)", "课程学练宝使用时长(分)", "学练宝使用总时长(分)"]
 fieldColumns = ["organName", "teacherName", "subjectName", "courseTime", "playTime", "totalPlayTime"]
 
 [oa费用汇总]
-headColumns = ["城市","固定人力成本","房屋","办公","水电物业","变动人力成本","差旅","外部服务","福利","活动","交通","考级","临时场地租赁","通讯","邮递运输","招待费","其他","学员管理费","云教练成本","网络教室成本","业务退费","内部结算","手续费","税费"]
+headColumns = ["城市","固定人力成本","房屋","办公","水电物业","变动人力成本","差旅","外部服务","福利","活动","交通","考级","临时场地租赁","通讯","邮递运输","招待费","其他","学员管理费","学练宝成本","网络教室成本","业务退费","内部结算","手续费","税费"]
 fieldColumns = ["organName", "fixedHumanCost", "house", "office", "mainsProperty","variableHumanCost", "travel","services", "welfare", "activities", "traffic", "certificates", "instrument","communications", "postalTransport", "hospitality", "other", "studentManagementFeeAdjustment","cloudCoachingCost", "network", "refund", "internalSettlement", "commission", "tax"]
 
 [oa费用明细]
@@ -351,7 +351,7 @@ headColumns = ["城市","钉钉流程编号","费用归属学校","申请人","
 fieldColumns = ["organName","batchNo","cooperationOrganName","applyUser","feeProject.desc","type.desc","amount","paymentTime","cause","studentId","currentAmount"]
 
 [经营报表收入汇总]
-headColumns = ["城市","学生指导费课耗收入","承担课程云教练收入","学校课程采买课耗收入","考级","维修费用","乐保费用","其他服务收入","不承担课程云教练收入","团购乐器","团购教辅","大件乐器","其他","服务收入","销售收入"]
+headColumns = ["城市","学生指导费课耗收入","承担课程学练宝收入","学校课程采买课耗收入","考级","维修费用","乐保费用","其他服务收入","不承担课程学练宝收入","团购乐器","团购教辅","大件乐器","其他","服务收入","销售收入"]
 fieldColumns = ["organName","studentGuidanceIncome","cloudCoachIncome","coursePurchaseIncome","examIncome","maintenanceCost","instrumentInsuranceCost","otherServiceIncome","saleCloudCoachIncome","groupPurchaseInstruments","groupPurchaseTeachingAids","largeInstruments","otherIncome","serviceIncome","salesIncome"]
 
 [课程收入明细导出]
@@ -371,7 +371,7 @@ headColumns = ["分部","乐团名称","乐团编号","学员编号","学员姓
 fieldColumns = ["organName","musicGroupName","musicGroupId","studentId","studentName","classroom","comprehensive","high","highOnline","mix","single","trainingMix","trainingSingle"]
 
 [云教练待激活明细]
-headColumns = ["分部","学员编号","学员姓名","手机号","学员声部","云教练类型","数量","缴费金额(元)","状态","取消原因","操作人","操作时间","获得资格时间"]
+headColumns = ["分部","学员编号","学员姓名","手机号","学员声部","学练宝版本","学练宝类型","数量","缴费金额(元)","状态","取消原因","操作人","操作时间","获得资格时间"]
 fieldColumns = ["organName","studentId","name","phone","subjectName","type.msg","time","amount","status == 1 ? '待激活':'已取消'","cancelReason","operatorName","operateTime","createTime"]
 
 [平衡关系-乐团课]
@@ -403,9 +403,9 @@ headColumns = ["分部","乐团编号","乐团名称","学员编号","学员名
 fieldColumns = ["organName","musicGroupId","musicGroupName","studentId","studentName"]
 
 [云课堂统计导出]
-headColumns = ["分部名称","会员人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长(分钟)"]
+headColumns = ["分部名称","学练宝人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长(分钟)"]
 fieldColumns = ["organizationName","memberNum","noPlayNum","playTimeLess10","playTimeLess60","playTimeLess120","playTimeLess240","playTimeRather240","avgPlayTime"]
 
 [云课堂统计详情导出]
-headColumns = ["声部老师","会员人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长(分钟)"]
+headColumns = ["声部老师","学练宝人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长(分钟)"]
 fieldColumns = ["teacherName","memberNum","noPlayNum","playTimeLess10","playTimeLess60","playTimeLess120","playTimeLess240","playTimeRather240","avgPlayTime"]

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -45,7 +45,7 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
      * @param orderId
      * @return
      */
-    CloudTeacherOrderDto queryOrderInfoByOrderId(Long orderId);
+    List<CloudTeacherOrderDto> queryOrderInfoByOrderId(Long orderId);
 
     List<Map<Long, String>> queryNoStartByUserIds(@Param("userIds") Set<Integer> userIds, @Param("isMusicMember") Boolean isMusicMember);
 
@@ -130,4 +130,12 @@ 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 countByMemberRankSettingId(@Param("memberRankSettingId") Integer memberRankSettingId);
+
+    Date getActivationMaxTime(@Param("studentId") Integer studentId, @Param("level") Integer level);
+
+    List<Integer> getActivationVipIds(Integer userId);
+
+    List<CloudTeacherOrder> queryByUserIds(@Param("userIds") List<Integer> userIds, @Param("status") Integer status);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankOrganizationFeeMapperDao.java

@@ -4,8 +4,14 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.MemberRankOrganizationFeeMapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface MemberRankOrganizationFeeMapperDao extends BaseDAO<Integer, MemberRankOrganizationFeeMapper> {
 
 
     MemberRankOrganizationFeeMapper findByOrganIdAndRankId(@Param("organId") Integer organId, @Param("memberRankSettingId") Integer memberRankSettingId);
+
+    List<MemberRankOrganizationFeeMapper> queryByOrganId(@Param("organId") Integer organId);
+
+    List<MemberRankOrganizationFeeMapper> queryByOrganIds(@Param("orgIds") List<Integer> orgIds);
 }

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

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.entity.MemberRankPrivileges;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Arrays;
 import java.util.List;
 
 public interface MemberRankPrivilegesDao extends BaseDAO<Integer, MemberRankPrivileges>{
@@ -21,4 +22,6 @@ public interface MemberRankPrivilegesDao extends BaseDAO<Integer, MemberRankPriv
      * @return
      */
     boolean hasPrivileges(Integer parentId);
+
+    List<MemberRankPrivileges> findByRankSettingIds(@Param("memberRankIds") List<Integer> memberRankIds);
 }

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

@@ -10,4 +10,12 @@ 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);
+
+    List<MemberRankSetting> getNotDelByParentIds(@Param("topIds") List<Integer> topIds);
+
+    void deleteById(@Param("id") Integer id);
+
+    List<MemberRankSetting> getNotDelByIds(@Param("ids") List<Integer> parentIds);
 }

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderMemberDao.java

@@ -11,5 +11,11 @@ public interface MusicGroupPaymentCalenderMemberDao extends BaseDAO<Long, MusicG
 
     void deleteByCalenderId(@Param("calenderId") Long calenderId);
 
-    MusicGroupPaymentCalenderMember findByCalenderId(@Param("calenderId") Long calenderId);
+    List<MusicGroupPaymentCalenderMember> findByCalenderId(@Param("calenderId") Long calenderId);
+
+    void batchInsert(@Param("beans") List<MusicGroupPaymentCalenderMember> calenderMemberList);
+
+    void batchUpdate(@Param("beans") List<MusicGroupPaymentCalenderMember> calenderMemberList);
+
+    List<MusicGroupPaymentCalenderMember> findByIds(@Param("calenderMemberIds") List<Long> calenderMemberIds);
 }

+ 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);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentBaseCalender.java

@@ -49,7 +49,7 @@ public class MusicGroupPaymentBaseCalender {
 	private MusicGroupPaymentCalenderAddress calenderAddress;
 
 	@ApiModelProperty(value = "会员相关缴费信息", required = false)
-	private MusicGroupPaymentCalenderMember calenderMember;
+	private List<MusicGroupPaymentCalenderMember> calenderMemberList;
 
 	@ApiModelProperty(value = "乐保信息", required = false)
 	private MusicGroupPaymentCalenderRepair musicRepair;

+ 7 - 359
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java

@@ -1,13 +1,18 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.SubjectChange;
 import com.ym.mec.biz.dal.enums.PaymentFlagEnum;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
+@Data
 public class MusicGroupStudentsDto{
 
     @ApiModelProperty(value = "学生乐团注册编号",required = false)
@@ -136,363 +141,6 @@ public class MusicGroupStudentsDto{
 
     private Integer memberRankSettingId;
 
-    public Integer getMusicMembershipDay1() {
-        return musicMembershipDay1;
-    }
-
-    public void setMusicMembershipDay1(Integer musicMembershipDay1) {
-        this.musicMembershipDay1 = musicMembershipDay1;
-    }
-
-    public Integer getMemberRankSettingId() {
-        return memberRankSettingId;
-    }
-
-    public void setMemberRankSettingId(Integer memberRankSettingId) {
-        this.memberRankSettingId = memberRankSettingId;
-    }
-
-    public Boolean getHasNoStartCloudTeacher() {
-        return hasNoStartCloudTeacher;
-    }
-
-    public void setHasNoStartCloudTeacher(Boolean hasNoStartCloudTeacher) {
-        this.hasNoStartCloudTeacher = hasNoStartCloudTeacher;
-    }
-
-    public Integer getExperienceMembershipDay() {
-        return experienceMembershipDay;
-    }
-
-    public void setExperienceMembershipDay(Integer experienceMembershipDay) {
-        this.experienceMembershipDay = experienceMembershipDay;
-    }
-
-    public Integer getMembershipDay() {
-        return membershipDay;
-    }
-
-    public void setMembershipDay(Integer membershipDay) {
-        this.membershipDay = membershipDay;
-    }
-
-    public Integer getMusicMembershipDay() {
-        return musicMembershipDay;
-    }
-
-    public void setMusicMembershipDay(Integer musicMembershipDay) {
-        this.musicMembershipDay = musicMembershipDay;
-    }
-
-    public Date getMusicMembershipEndTime() {
-        return musicMembershipEndTime;
-    }
-
-    public void setMusicMembershipEndTime(Date musicMembershipEndTime) {
-        this.musicMembershipEndTime = musicMembershipEndTime;
-    }
-
-    public Date getExperienceMembershipEndTime() {
-        return experienceMembershipEndTime;
-    }
-
-    public void setExperienceMembershipEndTime(Date experienceMembershipEndTime) {
-        this.experienceMembershipEndTime = experienceMembershipEndTime;
-    }
-
-    public Date getMembershipEndTime() {
-        return membershipEndTime;
-    }
-
-    public void setMembershipEndTime(Date membershipEndTime) {
-        this.membershipEndTime = membershipEndTime;
-    }
-
-    public String getCarePackageStr() {
-        return carePackageStr;
-    }
-
-    public void setCarePackageStr(String carePackageStr) {
-        this.carePackageStr = carePackageStr;
-    }
-
-    public String getComeOnPackageStr() {
-        return comeOnPackageStr;
-    }
-
-    public void setComeOnPackageStr(String comeOnPackageStr) {
-        this.comeOnPackageStr = comeOnPackageStr;
-    }
-
-    public Integer getCarePackage() {
-        return carePackage;
-    }
-
-    public void setCarePackage(Integer carePackage) {
-        this.carePackage = carePackage;
-    }
-
-    public Integer getComeOnPackage() {
-        return comeOnPackage;
-    }
-
-    public void setComeOnPackage(Integer comeOnPackage) {
-        this.comeOnPackage = comeOnPackage;
-    }
-
-    public Boolean getHasCourse() {
-        return hasCourse;
-    }
-
-    public void setHasCourse(Boolean hasCourse) {
-        this.hasCourse = hasCourse;
-    }
-
-    public BigDecimal getNoPaymentAmount() {
-        return noPaymentAmount;
-    }
-
-    public void setNoPaymentAmount(BigDecimal noPaymentAmount) {
-        this.noPaymentAmount = noPaymentAmount;
-    }
-
-    public BigDecimal getSubTotalCourseTime() {
-        return subTotalCourseTime;
-    }
-
-    public void setSubTotalCourseTime(BigDecimal subTotalCourseTime) {
-        this.subTotalCourseTime = subTotalCourseTime;
-    }
-
-    public String getPaymentPeriodList() {
-        return paymentPeriodList;
-    }
-
-    public void setPaymentPeriodList(String paymentPeriodList) {
-        this.paymentPeriodList = paymentPeriodList;
-    }
-
-    public Integer getIsLock() {
-        return isLock;
-    }
-
-    public void setIsLock(Integer isLock) {
-        this.isLock = isLock;
-    }
-
-    public Boolean getIsActive() {
-        return isActive;
-    }
-
-    public void setIsActive(Boolean active) {
-        isActive = active;
-    }
-
-    public Date getNextPaymentDate() {
-        return nextPaymentDate;
-    }
-
-    public void setNextPaymentDate(Date nextPaymentDate) {
-        this.nextPaymentDate = nextPaymentDate;
-    }
-
-    public BigDecimal getCourseFee() {
-        return courseFee;
-    }
-
-    public void setCourseFee(BigDecimal courseFee) {
-        this.courseFee = courseFee;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public String getRealName() {
-        return realName;
-    }
-
-    public void setRealName(String realName) {
-        this.realName = realName;
-    }
-
-    public String getGender() {
-        return gender;
-    }
-
-    public void setGender(String gender) {
-        this.gender = gender;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getCurrentGrade() {
-        return currentGrade;
-    }
-
-    public void setCurrentGrade(String currentGrade) {
-        this.currentGrade = currentGrade;
-    }
-
-    public String getCurrentClass() {
-        return currentClass;
-    }
-
-    public void setCurrentClass(String currentClass) {
-        this.currentClass = currentClass;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-    public String getStudentStatus() {
-        return studentStatus;
-    }
-
-    public void setStudentStatus(String studentStatus) {
-        this.studentStatus = studentStatus;
-    }
-
-    public PaymentStatusEnum getPaymentStatus() {
-        return paymentStatus;
-    }
-
-    public void setPaymentStatus(PaymentStatusEnum paymentStatus) {
-        this.paymentStatus = paymentStatus;
-    }
-
-    public Integer getIsNewStudent() {
-        return isNewStudent;
-    }
-
-    public void setIsNewStudent(Integer isNewStudent) {
-        this.isNewStudent = isNewStudent;
-    }
-
-    public String getActiveName() {
-        return activeName;
-    }
-
-    public void setActiveName(String activeName) {
-        this.activeName = activeName;
-    }
-
-    public String getIsNewStudentStr() {
-        return isNewStudentStr;
-    }
-
-    public void setIsNewStudentStr(String isNewStudentStr) {
-        this.isNewStudentStr = isNewStudentStr;
-    }
-
-    public String getNextPaymentDateStr() {
-        return nextPaymentDateStr;
-    }
-
-    public void setNextPaymentDateStr(String nextPaymentDateStr) {
-        this.nextPaymentDateStr = nextPaymentDateStr;
-    }
-
-    public String getQuitReason() {
-        return quitReason;
-    }
-
-    public void setQuitReason(String quitReason) {
-        this.quitReason = quitReason;
-    }
-
-    public Date getCurrentGradeDate() {
-        return currentGradeDate;
-    }
-
-    public void setCurrentGradeDate(Date currentGradeDate) {
-        this.currentGradeDate = currentGradeDate;
-    }
-
-    public Date getRegisterTime() {
-        return registerTime;
-    }
-
-    public void setRegisterTime(Date registerTime) {
-        this.registerTime = registerTime;
-    }
-
-    public String getRegSubjectName() {
-        return regSubjectName;
-    }
-
-    public void setRegSubjectName(String regSubjectName) {
-        this.regSubjectName = regSubjectName;
-    }
-
-    public Integer getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Integer subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public Integer getRegSubjectId() {
-        return regSubjectId;
-    }
-
-    public void setRegSubjectId(Integer regSubjectId) {
-        this.regSubjectId = regSubjectId;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public SubjectChange getSubjectChange() {
-        return subjectChange;
-    }
-
-    public void setSubjectChange(SubjectChange subjectChange) {
-        this.subjectChange = subjectChange;
-    }
-
-    public Boolean getHasMaintenance() {
-        return hasMaintenance;
-    }
-
-    public void setHasMaintenance(Boolean hasMaintenance) {
-        this.hasMaintenance = hasMaintenance;
-    }
-
-    public BigDecimal getCloudTeacherAmount() {
-        return cloudTeacherAmount;
-    }
-
-    public void setCloudTeacherAmount(BigDecimal cloudTeacherAmount) {
-        this.cloudTeacherAmount = cloudTeacherAmount;
-    }
+    @ApiModelProperty(value = "学员生效中的云教练",required = false)
+    private List<CloudTeacherOrderWrapper.StudentMemberDetail> cloudTeacherOrderList;
 }

+ 11 - 16
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RegisterPayDto.java

@@ -34,11 +34,14 @@ public class RegisterPayDto extends PayParamBasicDto{
     @ApiModelProperty(value = "购买乐器保养",required = false)
     private Boolean buyMaintenance = false;
 
-    @ApiModelProperty(value = "购买云教练",required = false)
-    private Boolean buyCloudTeacher= false;
+    @ApiModelProperty(value = "缴费项目关联会员Id",required = false)
+    private List<Long> buyCalenderMemberId;
 
-    @ApiModelProperty(value = "购买云教练+",required = false)
-    private Boolean buyCloudTeacherPlus= false;
+//    @ApiModelProperty(value = "购买云教练",required = false)
+//    private Boolean buyCloudTeacher= false;
+//
+//    @ApiModelProperty(value = "购买云教练+",required = false)
+//    private Boolean buyCloudTeacherPlus= false;
 
     public String getBatchNo() {
         return batchNo;
@@ -120,19 +123,11 @@ public class RegisterPayDto extends PayParamBasicDto{
         this.buyMaintenance = buyMaintenance;
     }
 
-    public Boolean getBuyCloudTeacher() {
-        return buyCloudTeacher;
+    public List<Long> getBuyCalenderMemberId() {
+        return buyCalenderMemberId;
     }
 
-    public void setBuyCloudTeacher(Boolean buyCloudTeacher) {
-        this.buyCloudTeacher = buyCloudTeacher;
-    }
-
-    public Boolean getBuyCloudTeacherPlus() {
-        return buyCloudTeacherPlus;
-    }
-
-    public void setBuyCloudTeacherPlus(Boolean buyCloudTeacherPlus) {
-        this.buyCloudTeacherPlus = buyCloudTeacherPlus;
+    public void setBuyCalenderMemberId(List<Long> buyCalenderMemberId) {
+        this.buyCalenderMemberId = buyCalenderMemberId;
     }
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageBaseInfoOfMusicGroupDto.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
@@ -54,6 +55,17 @@ public class StudentManageBaseInfoOfMusicGroupDto {
     @JsonInclude(JsonInclude.Include.NON_NULL)
     private BigDecimal depositFee;
 
+    @ApiModelProperty("会员信息")
+    private List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails;
+
+    public List<CloudTeacherOrderWrapper.StudentMemberDetail> getStudentMemberDetails() {
+        return studentMemberDetails;
+    }
+
+    public void setStudentMemberDetails(List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails) {
+        this.studentMemberDetails = studentMemberDetails;
+    }
+
     public List<UserGoodsDto> getUserGoodsDtos() {
         return userGoodsDtos;
     }

+ 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;
 

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherStudent.java

@@ -19,6 +19,9 @@ public class CloudTeacherStudent {
     @ApiModelProperty(value = "团练宝订单Id")
     private Integer cloudTeacherOrderId;
 
+    @ApiModelProperty(value = "会员编号")
+    private Integer memberRankId;
+
     @ApiModelProperty(value = "姓名")
     private String name;
 
@@ -52,6 +55,9 @@ public class CloudTeacherStudent {
     @ApiModelProperty(value = "订单时间")
     private String orderTime;
 
+    @ApiModelProperty(value = "会员名称")
+    private String memberName;
+
     @ApiModelProperty(value = "金额")
     private BigDecimal amount;
 

+ 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;
 	}
 

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

@@ -24,4 +24,7 @@ public class MusicGroupPaymentCalenderMember extends MusicGroupPaymentCalenderBa
 
     @ApiModelProperty(value = "团练宝收入实际收入,用于结算经营报表,actualAmount减去收入以及其他费用,剩下的就是课程费用", required = false)
     private BigDecimal income = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "会员说明", required = false)
+    private String intro;
 }

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

@@ -75,7 +75,7 @@ public class StudentPaymentOrderDetail extends BaseEntity {
 	@ApiModelProperty(value = "子商品列表",required = false)
 	private List<Goods> childGoodsList;
 	
-	private CloudTeacherOrderDto cloudTeacherOrderDto;
+	private List<CloudTeacherOrderDto> cloudTeacherOrderDto;
 
 	private Integer userId;
 	
@@ -224,11 +224,11 @@ public class StudentPaymentOrderDetail extends BaseEntity {
 		this.isRenew = isRenew;
 	}
 
-	public CloudTeacherOrderDto getCloudTeacherOrderDto() {
+	public List<CloudTeacherOrderDto> getCloudTeacherOrderDto() {
 		return cloudTeacherOrderDto;
 	}
 
-	public void setCloudTeacherOrderDto(CloudTeacherOrderDto cloudTeacherOrderDto) {
+	public void setCloudTeacherOrderDto(List<CloudTeacherOrderDto> cloudTeacherOrderDto) {
 		this.cloudTeacherOrderDto = cloudTeacherOrderDto;
 	}
 

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScore.java

@@ -178,6 +178,7 @@ public class SysMusicScore {
 	@ApiModelProperty("伴奏固定调PDF文件")
 	private String accJianPdfUrl;
 
+    @ApiModelProperty("曲目状态 ")
 	private List<SysMusicScoreAccompaniment> background;
 
     private String titleImg;
@@ -187,6 +188,9 @@ public class SysMusicScore {
 
     @ApiModelProperty("音频类型,SING:演唱,PLAY:演奏")
     private String audioPlayTypes;
+    @ApiModelProperty("使用状态 试用: FREE 锁定: LOCK 解锁:UNLOCK")
+    private String useStatus;
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 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;
+
+}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CalenderBaseServiceEnum.java

@@ -3,7 +3,7 @@ package com.ym.mec.biz.dal.enums;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum CalenderBaseServiceEnum implements BaseEnum<String, CalenderBaseServiceEnum> {
-	COURSE("课程"), MEMBER("会员"), MUSIC_REPAIR("乐保"), ACTIVITY("活动");
+	COURSE("课程"), MEMBER("学练宝"), MUSIC_REPAIR("乐保"), ACTIVITY("活动");
 
 	private String code;
 

+ 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> {
+
+
+}

+ 4 - 96
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherOrderQueryInfo.java

@@ -3,11 +3,13 @@ package com.ym.mec.biz.dal.page;
 import io.swagger.annotations.ApiModelProperty;
 
 import com.ym.mec.common.page.QueryInfo;
+import lombok.Data;
 import org.joda.time.DateTime;
 
 import java.util.Date;
 import java.util.List;
 
+@Data
 public class CloudTeacherOrderQueryInfo extends QueryInfo {
 
 	@ApiModelProperty(value = "乐团Id")
@@ -22,6 +24,8 @@ public class CloudTeacherOrderQueryInfo extends QueryInfo {
 	@ApiModelProperty(value = "学员姓名/编号/电话")
 	private String queryCondition;
 
+	@ApiModelProperty(value = "会员编号")
+	private Integer memberRankId;
 
 	@ApiModelProperty(value = "订单号")
 	private String orderNo;
@@ -44,102 +48,6 @@ public class CloudTeacherOrderQueryInfo extends QueryInfo {
 	@ApiModelProperty(value = "操作结束时间")
 	private Date operateEndTime;
 
-	public Date getStartTime() {
-		return startTime;
-	}
-
-	public void setStartTime(Date startTime) {
-		this.startTime = startTime;
-	}
-
-	public Date getEndTime() {
-		return endTime;
-	}
-
-	public void setEndTime(Date endTime) {
-		this.endTime = endTime;
-	}
-
 	@ApiModelProperty(value = "结束时间")
 	private Date endTime;
-
-	public String getStatus() {
-		return status;
-	}
-
-	public void setStatus(String status) {
-		this.status = status;
-	}
-
-	public Integer getStudentId() {
-		return studentId;
-	}
-
-	public void setStudentId(Integer studentId) {
-		this.studentId = studentId;
-	}
-
-	public String getQueryCondition() {
-		return queryCondition;
-	}
-
-	public void setQueryCondition(String queryCondition) {
-		this.queryCondition = queryCondition;
-	}
-
-	public Integer getSubjectId() {
-		return subjectId;
-	}
-
-	public void setSubjectId(Integer subjectId) {
-		this.subjectId = subjectId;
-	}
-
-	public String getOrderNo() {
-		return orderNo;
-	}
-
-	public void setOrderNo(String orderNo) {
-		this.orderNo = orderNo;
-	}
-
-	public String getMusicGroupId() {
-		return musicGroupId;
-	}
-
-	public void setMusicGroupId(String musicGroupId) {
-		this.musicGroupId = musicGroupId;
-	}
-
-	public String getOrganIds() {
-		return organIds;
-	}
-
-	public void setOrganIds(String organIds) {
-		this.organIds = organIds;
-	}
-
-	public String getOperatorName() {
-		return operatorName;
-	}
-
-	public void setOperatorName(String operatorName) {
-		this.operatorName = operatorName;
-	}
-
-	public Date getOperateStartTime() {
-		return operateStartTime;
-	}
-
-	public void setOperateStartTime(Date operateStartTime) {
-		this.operateStartTime = operateStartTime;
-	}
-
-	public Date getOperateEndTime() {
-		return operateEndTime;
-	}
-
-	public void setOperateEndTime(Date operateEndTime) {
-		this.operateEndTime = operateEndTime;
-	}
 }

+ 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 parentMemberId;
+
+    public Integer getParentMemberId() {
+        return parentMemberId;
+    }
+
+    public void setParentMemberId(Integer parentMemberId) {
+        this.parentMemberId = parentMemberId;
+    }
+
     public Integer getParentId() {
         return parentId;
     }

+ 4 - 127
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java

@@ -2,7 +2,9 @@ package com.ym.mec.biz.dal.page;
 
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+@Data
 public class MusicGroupStudentQueryInfo extends QueryInfo {
 
   @ApiModelProperty(value = "科目编号")
@@ -52,131 +54,6 @@ public class MusicGroupStudentQueryInfo extends QueryInfo {
   @ApiModelProperty(value = "0否1是2未生效")
   private Integer hasMember;
 
-  public Integer getHasMember() {
-    return hasMember;
-  }
-
-  public void setHasMember(Integer hasMember) {
-    this.hasMember = hasMember;
-  }
-
-  public Boolean getOweFlag() {
-    return oweFlag;
-  }
-
-  public void setOweFlag(Boolean oweFlag) {
-    this.oweFlag = oweFlag;
-  }
-
-  public Integer getCarePackage() {
-    return carePackage;
-  }
-
-  public void setCarePackage(Integer carePackage) {
-    this.carePackage = carePackage;
-  }
-
-  public Integer getComeOnPackage() {
-    return comeOnPackage;
-  }
-
-  public void setComeOnPackage(Integer comeOnPackage) {
-    this.comeOnPackage = comeOnPackage;
-  }
-
-  public Boolean getHasCourse() {
-    return hasCourse;
-  }
-
-  public void setHasCourse(Boolean hasCourse) {
-    this.hasCourse = hasCourse;
-  }
-
-  public boolean getIsExport() {
-    return isExport;
-  }
-
-  public void setIsExport(boolean export) {
-    isExport = export;
-  }
-
-  public Integer getClassGroupId() {
-    return classGroupId;
-  }
-
-  public void setClassGroupId(Integer classGroupId) {
-    this.classGroupId = classGroupId;
-  }
-
-  public Integer getIsLock() {
-    return isLock;
-  }
-
-  public void setIsLock(Integer isLock) {
-    this.isLock = isLock;
-  }
-
-  public Boolean getIsActive() {
-    return isActive;
-  }
-
-  public void setIsActive(Boolean active) {
-    isActive = active;
-  }
-
-  public String getStudentName() {
-    return studentName;
-  }
-
-  public void setStudentName(String studentName) {
-    this.studentName = studentName;
-  }
-
-  public String getMusicGroupId() {
-    return musicGroupId;
-  }
-
-  public void setMusicGroupId(String musicGroupId) {
-    this.musicGroupId = musicGroupId;
-  }
-
-  public Integer getSubjectId() {
-    return subjectId;
-  }
-
-  public void setSubjectId(Integer subjectId) {
-    this.subjectId = subjectId;
-  }
-
-  public String getStudentStatus() {
-    return studentStatus;
-  }
-
-  public void setStudentStatus(String studentStatus) {
-    this.studentStatus = studentStatus;
-  }
-
-  public String getPaymentStatus() {
-    return paymentStatus;
-  }
-
-  public void setPaymentStatus(String paymentStatus) {
-    this.paymentStatus = paymentStatus;
-  }
-
-  public String getCurrentGrade() {
-    return currentGrade;
-  }
-
-  public void setCurrentGrade(String currentGrade) {
-    this.currentGrade = currentGrade;
-  }
-
-  public String getCreateYear() {
-    return createYear;
-  }
-
-  public void setCreateYear(String createYear) {
-    this.createYear = createYear;
-  }
+  @ApiModelProperty(value = "会员编号")
+  private Integer memberRankId;
 }

+ 2 - 56
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentSignQueryInfo.java

@@ -2,7 +2,9 @@ package com.ym.mec.biz.dal.page;
 
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+@Data
 public class StudentSignQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "开始时间",required = false)
@@ -25,60 +27,4 @@ public class StudentSignQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "班级编号")
     private Integer classGroupId;
-
-    public Integer getClassGroupId() {
-        return classGroupId;
-    }
-
-    public void setClassGroupId(Integer classGroupId) {
-        this.classGroupId = classGroupId;
-    }
-
-    public String getStartTime() {
-        return startTime;
-    }
-
-    public void setStartTime(String startTime) {
-        this.startTime = startTime;
-    }
-
-    public String getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(String endTime) {
-        this.endTime = endTime;
-    }
-
-    public String getCourseScheduleName() {
-        return courseScheduleName;
-    }
-
-    public void setCourseScheduleName(String courseScheduleName) {
-        this.courseScheduleName = courseScheduleName;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public String getSignStatus() {
-        return signStatus;
-    }
-
-    public void setSignStatus(String signStatus) {
-        this.signStatus = signStatus;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.page;
 
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
@@ -73,4 +74,7 @@ public class SysExamSongQueryInfo extends QueryInfo {
 
     @ApiModelProperty("仅匹配资源名称")
     private String name;
+
+    @ApiModelProperty("用户类型")
+    private ClientEnum userType;
 }

+ 39 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/CloudTeacherOrderWrapper.java

@@ -0,0 +1,39 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+public class CloudTeacherOrderWrapper {
+
+
+    @Data
+    @ApiModel("学员会员详情")
+    public static class StudentMemberDetail {
+
+        @ApiModelProperty("会员编号")
+        private Integer memberRankId;
+
+        @ApiModelProperty("结束时间")
+        private Date endTime;
+
+        @ApiModelProperty("剩余天数")
+        private Integer remainingDays;
+
+        @ApiModelProperty("会员名称")
+        private String memberRankName;
+
+        @ApiModelProperty("学员编号")
+        private Integer studentId;
+    }
+}

+ 37 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/LessonCoursewareWrapper.java

@@ -2,9 +2,11 @@ package com.ym.mec.biz.dal.wrapper;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareDetailWrapper;
+import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.dto.im.BasicUserInfo;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.models.auth.In;
@@ -108,6 +110,10 @@ public class LessonCoursewareWrapper {
 
         @ApiModelProperty(value = "创建时间")
         private String createTime;
+
+
+        @ApiModelProperty("使用状态 锁定: LOCK 解锁:UNLOCK")
+        private String useStatus;
     }
 
     @Data
@@ -225,4 +231,35 @@ public class LessonCoursewareWrapper {
         private Integer teacherId;
     }
 
+    @Data
+    public static class LessonCoursewareExtend extends CbsLessonCoursewareWrapper.LessonCourseware{
+
+        @ApiModelProperty("使用状态 锁定: LOCK 解锁:UNLOCK")
+        private String useStatus;
+    }
+
+    @Data
+    public static class LessonCoursewareDetailQuery{
+
+
+        @ApiModelProperty(value = "课件详情ID")
+        private Long lessonCoursewareDetailId;
+
+        @ApiModelProperty("用户类型")
+        private ClientEnum userType;
+
+        @ApiModelProperty("机构可用曲目分类ID")
+        private List<Integer> tenantCategoriesIdList;
+
+        @ApiModelProperty("学生会员曲目分类ID")
+        private List<Integer> studentCategoriesIdList;
+
+    }
+
+    @Data
+    public static class AddMaterialRefExtend{
+
+        @ApiModelProperty("使用状态 锁定: LOCK 解锁:UNLOCK")
+        private String useStatus;
+    }
 }

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

@@ -0,0 +1,42 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.ym.mec.biz.dal.entity.MemberFeeSetting;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+public class MemberRankOrganizationFeeMapperWrapper {
+
+    @Data
+    public static class MemberRankOrganizationFeeMapperAdd{
+
+        @ApiModelProperty("分部ID 多个逗号隔开")
+        @NotNull(message = "分部ID不能为空")
+        private String organIds;
+
+        @ApiModelProperty("学练宝ID")
+        @NotNull(message = "学练宝ID不能为空")
+        private Integer memberRankSettingId;
+
+
+        private Integer operatorId;
+
+        @ApiModelProperty("价格信息")
+        private MemberFeeSetting memberFeeSetting;
+
+    }
+
+    @Data
+    public static class MemberRankQuery {
+
+        @ApiModelProperty("分部ID 多个逗号隔开")
+        private String organIds;
+
+        @ApiModelProperty("机构ID")
+        private Integer tenantId;
+
+        @ApiModelProperty("ID")
+        private Integer id;
+    }
+}

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

@@ -0,0 +1,163 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
+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;
+
+        @ApiModelProperty("会员编号")
+        private List<Integer> memberIds;
+
+        @ApiModelProperty("查询有子节点的数据")
+        private Boolean hasChildren;
+
+        @ApiModelProperty("移除ID")
+        private List<Integer> removeIds;
+
+        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 parentName;
+
+        @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;
+
+        @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);
+        }
+    }
+
+
+
+    @Data
+    @ApiModel(" Category-会员等级设置")
+    public static class Category {
+
+        @ApiModelProperty("曲目分类")
+        private List<SysMusicScoreCategories> musicScoreCategories;
+
+        @ApiModelProperty("学练宝云课堂内容")
+        private List<SysMusicScoreCategories> lessonCategories;
+    }
+}

+ 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;
+
+    }
+}

+ 9 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.CloudTeacherAddQueryInfo;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 import org.springframework.transaction.annotation.Transactional;
@@ -32,7 +33,7 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
      * @param order
      * @return
      */
-    void addOrderDetail2CloudTeacher(StudentPaymentOrder order, BigDecimal cloudTeacherFee);
+    void addOrderDetail2CloudTeacher(StudentPaymentOrder order, BigDecimal cloudTeacherFee,List<MusicGroupPaymentCalenderMember> calenderMembers);
 
     /**
     * @description: 激活团练宝
@@ -61,7 +62,7 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
      * @param orderId
      * @return
      */
-    CloudTeacherOrderDto queryOrderInfoByOrderId(Long orderId);
+    List<CloudTeacherOrderDto> queryOrderInfoByOrderId(Long orderId);
 
     List<Map<Long, String>> queryNoStartByUserIds(Set<Integer> userIds, Boolean isMusicMember);
 
@@ -124,4 +125,10 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
     CloudTeacherOrder queryByOrderId(Long orderId);
 
     Boolean cancelInactive(CloudTeacherCancel cloudTeacherCancel,Integer tenantId);
+
+    //获取用户生效中的云教练详情列表
+    List<CloudTeacherOrderWrapper.StudentMemberDetail> getEffectiveCloudTeacherOrder(List<Integer> userIds);
+
+    //获取会员全名称
+    Map<Integer,String> queryMemberName(List<Integer> memberRankIds);
 }

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/LessonCoursewareService.java

@@ -22,8 +22,10 @@ public interface LessonCoursewareService extends IService<LessonCourseware> {
     //获取课件适用范围
     LessonCoursewareWrapper.UpdateRangeDetail getRangeType(Integer lessonCoursewareId);
 
-    CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(Long id,List<Integer> categoryIdList);
+    CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(LessonCoursewareWrapper.LessonCoursewareDetailQuery query);
 
     List<LessonCoursewareWrapper.RefLevelDetailInfo> refLevel(LessonCoursewareWrapper.RefLevelQuery query);
+
+    LessonCourseware getByLessonCoursewareId(Long lessonCoursewareId);
 }
 

+ 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(List<Integer> memberRankSettingId);
+
+    void deleteByRankSettingId(Integer memberRankSettingId);
+}

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

@@ -1,11 +1,19 @@
 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.biz.dal.wrapper.MemberRankSettingWrapper;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+
 public interface MemberRankOrganizationFeeMapperService extends BaseService<Integer,MemberRankOrganizationFeeMapper>{
 
     void add(MemberRankOrganizationFeeMapper memberRankOrganizationFeeMapper);
 
     void updateFee(MemberRankOrganizationFeeMapper memberRankOrganizationFeeMapper);
+
+    void addV2(MemberRankOrganizationFeeMapperWrapper.MemberRankOrganizationFeeMapperAdd memberRankOrganizationFeeMapper);
+
+    List<MemberRankSettingWrapper.MemberRankSetting> getMemberRankSetting(MemberRankOrganizationFeeMapperWrapper.MemberRankQuery query);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankPrivilegesService.java

@@ -14,4 +14,6 @@ public interface MemberRankPrivilegesService extends BaseService<Integer, Member
 	 * @return
 	 */
 	List<MemberPrivilegesItem> queryByMemberRankId(Integer memberRankId);
+
+	List<MemberPrivilegesItem> queryByMemberRankIds(List<Integer> memberRankIds);
 }

+ 17 - 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,14 @@ public interface MemberRankSettingService extends BaseService<Integer, MemberRan
     HttpResponseResult activeBuy(MemberPayParamDto memberPayParamDto) throws Exception;
 
     HttpResponseResult<Integer> checkActiveBuy(MemberPayParamDto memberPayParamDto);
+
+    MemberRankSettingWrapper.Category getTree(Integer parentId);
+
+    List<MemberRankSettingWrapper.MemberRankSetting> queryPage2(MemberRankSettingWrapper.MemberRankSettingQuery queryInfo);
+
+    void del(Integer id);
+
+    List<MemberRankSetting> listByIds(List<Integer> ids);
+
+    List<MemberRankSettingWrapper.MemberRankSetting> queryTree(String musicGroupId, Integer organId, Integer studentId);
 }

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderMemberService.java

@@ -3,9 +3,17 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderMember;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+
 public interface MusicGroupPaymentCalenderMemberService extends BaseService<Long, MusicGroupPaymentCalenderMember> {
 
     void deleteByCalenderId(Long calenderId);
 
-    MusicGroupPaymentCalenderMember findByCalenderId(Long calenderId);
+    List<MusicGroupPaymentCalenderMember> findByCalenderId(Long calenderId);
+
+    void batchInsert(List<MusicGroupPaymentCalenderMember> calenderMemberList);
+
+    void batchUpdate(List<MusicGroupPaymentCalenderMember> calenderMemberList);
+
+    List<MusicGroupPaymentCalenderMember> findByIds(List<Long> calenderMemberIds);
 }

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java

@@ -181,7 +181,7 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
     BigDecimal getRepairAmount(Long calenderId);
 
     //获取会员金额
-    BigDecimal getMemberAmount(Long calenderId);
+    BigDecimal getMemberAmount(List<Long> calenderMemberIdList);
 
     //获取活动总金额
 	BigDecimal getActivityAmount(List<Long> buyCalenderActivityIdList);
@@ -213,5 +213,5 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	*/
 	Map<Long, Integer>  findCooperationByIds(List<Long> calenderIds);
 
-    Object queryUser(MusicGroupPaymentCalenderQueryInfo queryInfo);
+	List<Map<String,String>> queryUser(MusicGroupPaymentCalenderQueryInfo queryInfo);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java

@@ -111,7 +111,7 @@ public interface StudentManageService {
      * @param musicGroupId
      * @return
      */
-    Object musicGroupStudentsSum(String musicGroupId);
+    Map<String, Object> musicGroupStudentsSum(String musicGroupId);
 
     /**
      * 乐团管理--点名总览

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java

@@ -102,7 +102,7 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
     List<StudentPaymentOrderDetail> addOrder1(StudentPaymentOrder studentPaymentOrder,
                    MusicGroupPaymentCalender calender,
                    List<MusicGroupPaymentCalenderCourseSettings> newCourses,
-                   MusicGroupPaymentCalenderMember calenderMember,
+                   List<MusicGroupPaymentCalenderMember> calenderMembers,
                    MusicGroupPaymentCalenderRepair calenderRepair,
                    List<MusicGroupPaymentCalenderActivity> calenderActivities
     ) throws Exception;

+ 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);
+}

+ 151 - 44
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -7,6 +7,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.dto.Mapper;
@@ -16,6 +17,7 @@ import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.ReturnFeeEnum;
 import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -27,13 +29,14 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import jodd.util.StringUtil;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -45,40 +48,34 @@ import static com.ym.mec.biz.dal.enums.PeriodEnum.*;
 public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTeacherOrder> implements CloudTeacherOrderService {
 
     private static final Logger log = LoggerFactory.getLogger(CloudTeacherOrderServiceImpl.class);
-    @Autowired
+    @Resource
     private CloudTeacherOrderDao cloudTeacherOrderDao;
-    @Autowired
-    private StudentService studentService;
-    @Autowired
-    private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
-    @Autowired
+    @Resource
     private TenantConfigService tenantConfigService;
-    @Autowired
+    @Resource
     private PayService payService;
-    @Autowired
+    @Resource
     private IdGeneratorService idGenerator;
-    @Autowired
+    @Resource
     private TenantOrderRecordService tenantOrderRecordService;
-    @Autowired
+    @Resource
     private SysConfigDao sysConfigDao;
-
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
-
-    @Autowired
+    @Resource
     private EmployeeDao employeeDao;
-
-    @Autowired
+    @Resource
     private SysUserCashAccountLogService sysUserCashAccountLogService;
-
+    @Resource
+    private SysMessageService sysMessageService;
+    @Resource
+    private TenantInfoService tenantInfoService;
+    @Resource
+    private MemberRankSettingDao memberRankSettingDao;
     @Override
     public BaseDAO<Long, CloudTeacherOrder> getDAO() {
         return cloudTeacherOrderDao;
     }
-    @Autowired
-    private SysMessageService sysMessageService;
-    @Autowired
-    private TenantInfoService tenantInfoService;
 
 
     @Override
@@ -92,6 +89,9 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = cloudTeacherOrderDao.queryRecord(params);
+            List<Integer> memberRankIds = dataList.stream().map(CloudTeacherStudent::getMemberRankId).distinct().collect(Collectors.toList());
+            Map<Integer, String> memberNameMap = queryMemberName(memberRankIds);
+            dataList.forEach(e -> e.setMemberName(memberNameMap.get(e.getMemberRankId())));
         }
         if (count == 0) {
             dataList = new ArrayList<>();
@@ -137,7 +137,24 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             List<SimpleUserDto> byIds = employeeDao.findByIds(operatorIdList);
             byIds.forEach(next -> empMapById.put(next.getUserId(), next));
         }
+        //获取会员名称
+        List<Integer> memberRankIds = dataList.stream().map(CloudTeacherStudent::getMemberRankId).collect(Collectors.toList());
+        List<MemberRankSetting> memberRankSettings = memberRankSettingDao.selectBatchIds(memberRankIds);
+        List<Integer> parentRankIds = memberRankSettings.stream().map(MemberRankSetting::getParentId).filter(parentId -> parentId != 0).collect(Collectors.toList());
+        List<MemberRankSetting> parentMemberRankSettings = memberRankSettingDao.selectBatchIds(parentRankIds);
+        Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+        Map<Integer, MemberRankSetting> parentMemberRankSettingMap = parentMemberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+        //获取
         for (CloudTeacherStudent cst : dataList) {
+            MemberRankSetting rankSetting = memberRankSettingMap.get(cst.getMemberRankId());
+            if (rankSetting != null) {
+                MemberRankSetting parentRank = parentMemberRankSettingMap.get(rankSetting.getParentId());
+                if (parentRank != null) {
+                    cst.setMemberName(parentRank.getName() + "-" + rankSetting.getName());
+                } else {
+                    cst.setMemberName(rankSetting.getName());
+                }
+            }
             cst.setOrganName(organNameMap.get(cst.getOrganId()));
             if (cst.getOperator() != null) {
                 cst.setOperatorName(empMapById.getOrDefault(cst.getOperator(), new SimpleUserDto()).getUserName());
@@ -195,8 +212,25 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             List<SimpleUserDto> byIds = employeeDao.findByIds(operatorIdList);
             byIds.forEach(next -> empMapById.put(next.getUserId(), next));
         }
+        //获取会员名称
+        List<Integer> memberRankIds = dataList.stream().map(CloudTeacherStudent::getMemberRankId).collect(Collectors.toList());
+        List<MemberRankSetting> memberRankSettings = memberRankSettingDao.selectBatchIds(memberRankIds);
+        List<Integer> parentRankIds = memberRankSettings.stream().map(MemberRankSetting::getParentId).filter(parentId -> parentId != 0).collect(Collectors.toList());
+        List<MemberRankSetting> parentMemberRankSettings = memberRankSettingDao.selectBatchIds(parentRankIds);
+        Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+        Map<Integer, MemberRankSetting> parentMemberRankSettingMap = parentMemberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+
         TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", queryInfo.getTenantId()));
         for (CloudTeacherStudent cst : dataList) {
+            MemberRankSetting rankSetting = memberRankSettingMap.get(cst.getMemberRankId());
+            if (rankSetting != null) {
+                MemberRankSetting parentRank = parentMemberRankSettingMap.get(rankSetting.getParentId());
+                if (parentRank != null) {
+                    cst.setMemberName(parentRank.getName() + "-" + rankSetting.getName());
+                } else {
+                    cst.setMemberName(rankSetting.getName());
+                }
+            }
             cst.setOrganName(organNameMap.get(cst.getOrganId()));
             if (cst.getOperator() != null) {
                 cst.setOperatorName(empMapById.getOrDefault(cst.getOperator(), new SimpleUserDto()).getUserName());
@@ -238,7 +272,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     @Transactional(rollbackFor = Exception.class)
     public Map<String, Object> pay(List<CloudTeacherStudent> cloudTeacherStudents) throws Exception {
 
-        if (cloudTeacherStudents.size() == 0) {
+        if (CollectionUtils.isEmpty(cloudTeacherStudents)) {
             throw new Exception("请选择选择一条记录");
         }
         List<Integer> ids = cloudTeacherStudents.stream().map(CloudTeacherStudent::getCloudTeacherOrderId).collect(
@@ -366,30 +400,36 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void addOrderDetail2CloudTeacher(StudentPaymentOrder order, BigDecimal cloudTeacherFee) {
-        CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-        cloudTeacherOrder.setTenantId(order.getTenantId());
-        cloudTeacherOrder.setOrganId(order.getOrganId());
-        cloudTeacherOrder.setOrderId(order.getId());
-        MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(order.getCalenderId());
-        cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId());
-        cloudTeacherOrder.setTime(calenderMember.getNum().intValue());
-        cloudTeacherOrder.setType(calenderMember.getPeriod());
-        cloudTeacherOrder.setAmount(cloudTeacherFee);
-        cloudTeacherOrder.setStudentId(order.getUserId());
-        cloudTeacherOrder.setStatus(1);
-        cloudTeacherOrder.setMusicGroupId(order.getMusicGroupId());
-        cloudTeacherOrder.setOperatingAmount(calenderMember.getIncome().compareTo(BigDecimal.ZERO) == 0?cloudTeacherFee:calenderMember.getIncome());
-        //保存云教练订单
-        this.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
+    public void addOrderDetail2CloudTeacher(StudentPaymentOrder order, BigDecimal cloudTeacherFee,List<MusicGroupPaymentCalenderMember> calenderMembers) {
+        for (MusicGroupPaymentCalenderMember calenderMember : calenderMembers) {
+            CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+            cloudTeacherOrder.setTenantId(order.getTenantId());
+            cloudTeacherOrder.setOrganId(order.getOrganId());
+            cloudTeacherOrder.setOrderId(order.getId());
+            cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId());
+            cloudTeacherOrder.setTime(calenderMember.getNum().intValue());
+            cloudTeacherOrder.setType(calenderMember.getPeriod());
+            cloudTeacherOrder.setAmount(cloudTeacherFee);
+            cloudTeacherOrder.setStudentId(order.getUserId());
+            cloudTeacherOrder.setStatus(1);
+            cloudTeacherOrder.setMusicGroupId(order.getMusicGroupId());
+            cloudTeacherOrder.setOperatingAmount(calenderMember.getIncome().compareTo(BigDecimal.ZERO) == 0?cloudTeacherFee:calenderMember.getIncome());
+            //保存云教练订单
+            this.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
+        }
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void activationMember(Date now,CloudTeacherOrder cloudTeacherOrder){
-        Student student = studentService.get(cloudTeacherOrder.getStudentId());
-        if(student.getMembershipEndTime() != null && student.getMembershipEndTime().compareTo(now) > 0){
-            now = student.getMembershipEndTime();
+//        Student student = studentService.get(cloudTeacherOrder.getStudentId());
+//        if(student.getMembershipEndTime() != null && student.getMembershipEndTime().compareTo(now) > 0){
+//            now = student.getMembershipEndTime();
+//        }
+        //获取已激活的云教练最大时间
+        Date maxTime = cloudTeacherOrderDao.getActivationMaxTime(cloudTeacherOrder.getStudentId(),cloudTeacherOrder.getLevel());
+        if (maxTime != null && maxTime.compareTo(now) > 0) {
+            now = maxTime;
         }
         Date startTime = DateUtil.trunc(now);
         Date endTime = this.calcCloudTeacherOrderTime(cloudTeacherOrder, startTime);
@@ -401,7 +441,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         }else {
             cloudTeacherOrderDao.update(cloudTeacherOrder);
         }
-        studentService.updateMemberRank(cloudTeacherOrder.getStudentId(), cloudTeacherOrder.getType(), cloudTeacherOrder.getTime(), 1);
+//        studentService.updateMemberRank(cloudTeacherOrder.getStudentId(), cloudTeacherOrder.getType(), cloudTeacherOrder.getTime(), 1);
     }
 
     public Date calcCloudTeacherOrderTime(CloudTeacherOrder cloudTeacherOrder, Date startTime) {
@@ -426,7 +466,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     }
 
     @Override
-    public CloudTeacherOrderDto queryOrderInfoByOrderId(Long orderId) {
+    public List<CloudTeacherOrderDto> queryOrderInfoByOrderId(Long orderId) {
         return cloudTeacherOrderDao.queryOrderInfoByOrderId(orderId);
     }
 
@@ -473,4 +513,71 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
 
         return true;
     }
+
+    @Override
+    public List<CloudTeacherOrderWrapper.StudentMemberDetail> getEffectiveCloudTeacherOrder(List<Integer> userIds) {
+        //获取生效中的会员
+        List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails = new ArrayList<>();
+        List<CloudTeacherOrder> activeCloudTeachers = cloudTeacherOrderDao.queryByUserIds(userIds,2);
+        if (CollectionUtils.isNotEmpty(activeCloudTeachers)) {
+            //获取所有的会员列表
+            List<Integer> memberRankIds = activeCloudTeachers.stream().map(CloudTeacherOrder::getLevel).distinct().collect(Collectors.toList());
+            List<MemberRankSetting> memberRankSettings = memberRankSettingDao.selectBatchIds(memberRankIds);
+            //获取所有父级会员
+            List<Integer> parentRankIds = memberRankSettings.stream().map(MemberRankSetting::getParentId).filter(parentId -> parentId != 0).collect(Collectors.toList());
+            List<MemberRankSetting> parentMemberRankSettings = memberRankSettingDao.selectBatchIds(parentRankIds);
+            Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+            Map<Integer, MemberRankSetting> parentMemberRankSettingMap = parentMemberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+            //按学员分组
+            Map<Integer, List<CloudTeacherOrder>> cloudTeacherOrderMap = activeCloudTeachers.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
+            cloudTeacherOrderMap.forEach((k, v) -> {
+                //按会员等级分组,同一个级别的会员,去最大的截止时间
+                Map<Integer, List<CloudTeacherOrder>> memberRankMap = v.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getLevel));
+                memberRankMap.forEach((key, value) -> {
+                    CloudTeacherOrderWrapper.StudentMemberDetail studentMemberDetail = new CloudTeacherOrderWrapper.StudentMemberDetail();
+                    studentMemberDetail.setStudentId(k);
+                    //拼接会员名称
+                    MemberRankSetting rankSetting = memberRankSettingMap.get(key);
+                    if (rankSetting != null) {
+                        MemberRankSetting parentRank = parentMemberRankSettingMap.get(rankSetting.getParentId());
+                        if (parentRank != null) {
+                            studentMemberDetail.setMemberRankName(parentRank.getName() + "-" + rankSetting.getName());
+                        } else {
+                            studentMemberDetail.setMemberRankName(rankSetting.getName());
+                        }
+                    }
+                    //获取最大的截止时间
+                    Date maxTime = value.stream().map(CloudTeacherOrder::getEndTime).max(Date::compareTo).get();
+                    studentMemberDetail.setEndTime(maxTime);
+                    //剩余天数
+                    studentMemberDetail.setRemainingDays(DateUtil.daysBetween(new Date(), maxTime));
+                    studentMemberDetail.setMemberRankId(key);
+                    studentMemberDetails.add(studentMemberDetail);
+                });
+            });
+        }
+        return studentMemberDetails;
+    }
+
+    @Override
+    public Map<Integer, String> queryMemberName(List<Integer> memberRankIds) {
+        List<MemberRankSetting> memberRankSettings = memberRankSettingDao.selectBatchIds(memberRankIds);
+        if (CollectionUtils.isEmpty(memberRankSettings)) {
+            return new HashMap<>();
+        }
+        List<Integer> parentRankIds = memberRankSettings.stream().map(MemberRankSetting::getParentId).filter(parentId -> parentId != 0).collect(Collectors.toList());
+        List<MemberRankSetting> parentMemberRankSettings = memberRankSettingDao.selectBatchIds(parentRankIds);
+        Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+        Map<Integer, MemberRankSetting> parentMemberRankSettingMap = parentMemberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+        Map<Integer, String> memberNameMap = new HashMap<>();
+        memberRankSettingMap.forEach((k, v) -> {
+            MemberRankSetting parentRank = parentMemberRankSettingMap.get(v.getParentId());
+            if (parentRank != null) {
+                memberNameMap.put(k, parentRank.getName() + "-" + v.getName());
+            } else {
+                memberNameMap.put(k, v.getName());
+            }
+        });
+        return memberNameMap;
+    }
 }

+ 34 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/LessonCoursewareServiceImpl.java

@@ -15,6 +15,7 @@ import com.ym.mec.biz.dal.entity.LessonCourseware;
 import com.ym.mec.biz.dal.entity.LessonCoursewareUserMapper;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.mapper.LessonCoursewareMapper;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.ym.mec.biz.service.LessonCoursewareService;
@@ -194,13 +195,14 @@ public class LessonCoursewareServiceImpl extends ServiceImpl<LessonCoursewareMap
     }
 
     @Override
-    public CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(Long id,List<Integer> categoryIdList) {
-        CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail detail = coursewareFeignService.lessonCoursewareDetailDetail(id).feignData();
+    public CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(LessonCoursewareWrapper.LessonCoursewareDetailQuery query) {
+        CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail detail = coursewareFeignService
+            .lessonCoursewareDetailDetail(query.getLessonCoursewareDetailId()).feignData();
         if (detail == null) {
             return null;
         }
         //获取知识点下的素材列表、下面关联的资源列表,如果applicationIdList是空的,那么把他剔除掉
-        this.setTreeResourceId(detail.getKnowledgePointList(),categoryIdList);
+        this.setTreeResourceId(detail.getKnowledgePointList(),query);
         return detail;
     }
 
@@ -280,6 +282,17 @@ public class LessonCoursewareServiceImpl extends ServiceImpl<LessonCoursewareMap
         return result;
     }
 
+    @Override
+    public LessonCourseware getByLessonCoursewareId(Long lessonCoursewareId) {
+        List<LessonCourseware> list = lambdaQuery()
+            .eq(LessonCourseware::getLessonCourseId, lessonCoursewareId)
+            .list();
+        if (CollectionUtils.isEmpty(list)) {
+            return null;
+        }
+        return list.get(0);
+    }
+
     private LessonCoursewareWrapper.RefLevelDetailInfo initRefLevelDetailInfo(CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail coursewareDetail,
                                                                               CbsLessonCoursewareWrapper.LessonCourseware lessonCourseware) {
         LessonCoursewareWrapper.RefLevelDetailInfo refLevelDetailInfo = new LessonCoursewareWrapper.RefLevelDetailInfo();
@@ -294,20 +307,20 @@ public class LessonCoursewareServiceImpl extends ServiceImpl<LessonCoursewareMap
     }
 
     //递归处理CbsLessonCoursewareDetailWrapper.KnowledgePointSmall
-    private void setTreeResourceId(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,List<Integer> categoryIdList){
+    private void setTreeResourceId(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,LessonCoursewareWrapper.LessonCoursewareDetailQuery query){
         if(CollectionUtils.isNotEmpty(knowledgePointList)){
             knowledgePointList.forEach(knowledgePointSmall -> {
-                this.setResourceId(knowledgePointSmall,categoryIdList);
+                this.setResourceId(knowledgePointSmall,query);
                 List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> children = knowledgePointSmall.getChildren();
                 if(CollectionUtils.isNotEmpty(children)){
-                    this.setTreeResourceId(children,categoryIdList);
+                    this.setTreeResourceId(children,query);
                 }
             });
         }
     }
 
 
-    private void setResourceId(CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall,List<Integer> categoryIdList){
+    private void setResourceId(CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall,LessonCoursewareWrapper.LessonCoursewareDetailQuery query){
         List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
         if(CollectionUtils.isNotEmpty(materialList)){
             for (CbsLessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
@@ -329,8 +342,21 @@ public class LessonCoursewareServiceImpl extends ServiceImpl<LessonCoursewareMap
                                 && CollectionUtils.isNotEmpty(relateMaterialInfo.getApplicationIdList())){
                             SysMusicScore musicScore = sysMusicScoreService.getDao().getCbsId(relateMaterialInfo.getId());
                             if(musicScore != null && musicScore.getShowFlag() == 1 && musicScore.getClientShowFlag() == 1
-                                    && categoryIdList.contains(musicScore.getCbsMusicCategoriesId())) {
+                                    && query.getTenantCategoriesIdList().contains(musicScore.getCbsMusicCategoriesId())) {
                                 materialRef.setResourceIdStr(musicScore.getId().toString());
+                                // 学生需要判断学练宝是否能用
+                                LessonCoursewareWrapper.AddMaterialRefExtend addMaterialRefExtend = new LessonCoursewareWrapper.AddMaterialRefExtend();
+                                if (query.getUserType() !=null && query.getUserType() == ClientEnum.STUDENT) {
+                                    if (StringUtils.isBlank(musicScore.getRankIds())) {
+                                        addMaterialRefExtend.setUseStatus("UNLOCK");
+                                    } else {
+                                        addMaterialRefExtend.setUseStatus(query.getStudentCategoriesIdList()
+                                            .contains(musicScore.getCbsMusicCategoriesId()) ? "UNLOCK" : "LOCK");
+                                    }
+                                } else {
+                                    addMaterialRefExtend.setUseStatus("UNLOCK");
+                                }
+                                materialRef.setExtend(addMaterialRefExtend);
                             }
                         }
                     }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberFeeSettingServiceImpl.java

@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Objects;
 import java.util.function.BiFunction;
 
@@ -38,7 +39,7 @@ public class MemberFeeSettingServiceImpl extends BaseServiceImpl<Integer, Member
             throw new BizException("操作失败:请配置当前分部会员收费标准");
         }
         //获取总价(原价或者现价)
-        return func.apply(period, memberFee).multiply(num).setScale(0, BigDecimal.ROUND_HALF_UP);
+        return func.apply(period, memberFee).multiply(num).setScale(0, RoundingMode.HALF_UP);
     }
 
     public static BigDecimal getGroupPurchaseFee(PeriodEnum periodEnum, MemberFeeSetting memberFee) {

+ 38 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberPrivilegesItemServiceImpl.java

@@ -4,16 +4,19 @@ 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.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 +28,8 @@ public class MemberPrivilegesItemServiceImpl extends BaseServiceImpl<Integer, Me
 	@Autowired
 	private MemberRankPrivilegesDao memberRankPrivilegesDao;
 
+    @Autowired
+    private MemberRankSettingService memberRankSettingService;
 
 
 	@Override
@@ -43,6 +48,23 @@ public class MemberPrivilegesItemServiceImpl extends BaseServiceImpl<Integer, Me
 		return item;
 	}
 
+
+    private void getTreeByIds(List<MemberPrivilegesItem> memberPrivilegesItems, List<Integer> ids) {
+        if (CollectionUtils.isEmpty(memberPrivilegesItems)) {
+            return ;
+        }
+        for (int i = 0; i < memberPrivilegesItems.size(); i++) {
+            MemberPrivilegesItem memberPrivilegesItem = memberPrivilegesItems.get(i);
+            if (!ids.contains(memberPrivilegesItem.getId())) {
+                memberPrivilegesItems.remove(i);
+                i--;
+            } else {
+                getTreeByIds(memberPrivilegesItem.getMemberPrivilegesItems(), ids);
+
+            }
+        }
+    }
+
     @Override
 	@Transactional(rollbackFor = Exception.class)
     public void recursiveDel(Integer memberPrivilegesItemId) {
@@ -84,12 +106,21 @@ public class MemberPrivilegesItemServiceImpl extends BaseServiceImpl<Integer, Me
 	@Override
 	public List<MemberPrivilegesItem> findAllItem(MemberPrivilegesItemQueryInfo queryInfo) {
 		List<MemberPrivilegesItem> rows = memberPrivilegesItemDao.findList(queryInfo.getParentId());
-		if(rows == null || rows.size() == 0){
-			return rows;
-		}
-		for (MemberPrivilegesItem item : rows) {
-			item = getTree(item);
-		}
+        if(rows == null || rows.size() == 0){
+            return rows;
+        }
+        for (MemberPrivilegesItem item : rows) {
+            item = getTree(item);
+        }
+        // 如果是有学练宝ID 只返回学练宝数据
+        if (queryInfo.getParentMemberId() != null) {
+            MemberRankSettingWrapper.MemberRankSetting detail = memberRankSettingService.getDetail(queryInfo.getParentMemberId());
+            if (detail != null && CollectionUtils.isNotEmpty(detail.getMemberPrivilegesItemIdList())) {
+                getTreeByIds(rows, detail.getMemberPrivilegesItemIdList());
+                return rows;
+            }
+
+        }
 		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();
+    }
+}

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

@@ -0,0 +1,55 @@
+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(List<Integer> memberRankSettingId) {
+        if (CollectionUtils.isEmpty(memberRankSettingId)) {
+            return new ArrayList<>();
+        }
+        return lambdaQuery()
+            .in(MemberRankCourseTypeMapper::getRankId,memberRankSettingId)
+            .list();
+    }
+
+    @Override
+    public void deleteByRankSettingId(Integer memberRankSettingId) {
+        lambdaUpdate()
+            .eq(MemberRankCourseTypeMapper::getRankId,memberRankSettingId)
+            .remove();
+    }
+}

+ 61 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankOrganizationFeeMapperServiceImpl.java

@@ -1,17 +1,30 @@
 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.entity.TenantMemberRankSetting;
+import com.ym.mec.biz.dal.wrapper.MemberRankOrganizationFeeMapperWrapper;
+import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
 import com.ym.mec.biz.service.MemberFeeSettingService;
 import com.ym.mec.biz.service.MemberRankOrganizationFeeMapperService;
+import com.ym.mec.biz.service.MemberRankSettingService;
+import com.ym.mec.biz.service.TenantMemberRankSettingService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 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.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Service
 public class MemberRankOrganizationFeeMapperServiceImpl extends BaseServiceImpl<Integer, MemberRankOrganizationFeeMapper>  implements MemberRankOrganizationFeeMapperService {
 
@@ -20,6 +33,12 @@ public class MemberRankOrganizationFeeMapperServiceImpl extends BaseServiceImpl<
 	@Autowired
 	private MemberFeeSettingService memberFeeSettingService;
 
+    @Autowired
+    private TenantMemberRankSettingService tenantMemberRankSettingService;
+
+    @Autowired
+    private MemberRankSettingService memberRankSettingService;
+
 	@Override
 	public BaseDAO<Integer, MemberRankOrganizationFeeMapper> getDAO() {
 		return memberRankOrganizationFeeMapperDao;
@@ -31,7 +50,7 @@ public class MemberRankOrganizationFeeMapperServiceImpl extends BaseServiceImpl<
 		//一个分部只能关联一个会员
 		MemberRankOrganizationFeeMapper feeMapper = memberRankOrganizationFeeMapperDao.findByOrganIdAndRankId(memberRankOrganizationFeeMapper.getOrganId(),memberRankOrganizationFeeMapper.getMemberRankSettingId());
 		if(feeMapper != null){
-			throw new BizException("操作失败: 该分部会员收费标准已存在");
+			throw new BizException("操作失败: 分部学练宝收费标准已存在");
 		}
 		MemberFeeSetting memberFeeSetting = memberRankOrganizationFeeMapper.getMemberFeeSetting();
 		if(memberFeeSetting == null){
@@ -56,11 +75,51 @@ public class MemberRankOrganizationFeeMapperServiceImpl extends BaseServiceImpl<
 		if(!feeMapper.getOrganId().equals(memberRankOrganizationFeeMapper.getOrganId())){
 			MemberRankOrganizationFeeMapper organIdAndRankId = memberRankOrganizationFeeMapperDao.findByOrganIdAndRankId(memberRankOrganizationFeeMapper.getOrganId(), memberRankOrganizationFeeMapper.getMemberRankSettingId());
 			if(organIdAndRankId != null){
-				throw new BizException("修改失败: 该分部会员收费标准已存在");
+				throw new BizException("修改失败: 该分部学练宝收费标准已存在");
 			}
 		}
 		memberFeeSetting.setId(feeMapper.getMemberFeeSettingId());
 		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);
+        }
+    }
+
+    @Override
+    public List<MemberRankSettingWrapper.MemberRankSetting> getMemberRankSetting(MemberRankOrganizationFeeMapperWrapper.MemberRankQuery query) {
+        // 查询机构学练宝ID
+        List<TenantMemberRankSetting> list = tenantMemberRankSettingService.lambdaQuery()
+            .eq(TenantMemberRankSetting::getTenantId, query.getTenantId())
+            .list();
+        if (CollectionUtils.isEmpty(list)) {
+            return new ArrayList<>();
+        }
+        MemberRankSettingWrapper.MemberRankSettingQuery settingQuery = new MemberRankSettingWrapper.MemberRankSettingQuery();
+        settingQuery.setHasChildren(true);
+        List<Integer> memberRankSettingIds = list.stream().map(TenantMemberRankSetting::getMemberRankSettingId).collect(Collectors.toList());
+        settingQuery.setMemberIds(memberRankSettingIds);
+        if (StringUtils.isNotBlank(query.getOrganIds())) {
+            List<MemberRankOrganizationFeeMapper> memberRankOrganizationFeeMappers = memberRankOrganizationFeeMapperDao.queryByOrganIds(Arrays.stream(query.getOrganIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList()));
+            if (query.getId() != null) {
+                memberRankOrganizationFeeMappers = memberRankOrganizationFeeMappers.stream().filter(o->!o.getId().equals(query.getId())).collect(Collectors.toList());
+            }
+            settingQuery.setRemoveIds(memberRankOrganizationFeeMappers.stream().map(MemberRankOrganizationFeeMapper::getMemberRankSettingId).collect(Collectors.toList()));
+        }
+
+        return memberRankSettingService.queryPage2(settingQuery);
+
+    }
 }

+ 33 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankPrivilegesServiceImpl.java

@@ -1,14 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.ym.mec.biz.dal.dao.MemberPrivilegesItemDao;
 import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
 import com.ym.mec.biz.dal.entity.MemberPrivilegesItem;
@@ -16,14 +7,23 @@ import com.ym.mec.biz.dal.entity.MemberRankPrivileges;
 import com.ym.mec.biz.service.MemberRankPrivilegesService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class MemberRankPrivilegesServiceImpl extends BaseServiceImpl<Integer, MemberRankPrivileges> implements MemberRankPrivilegesService {
 
-	@Autowired
+	@Resource
 	private MemberRankPrivilegesDao memberRankPrivilegesDao;
 
-	@Autowired
+	@Resource
 	private MemberPrivilegesItemDao memberPrivilegesItemDao;
 
 	@Override
@@ -33,31 +33,45 @@ public class MemberRankPrivilegesServiceImpl extends BaseServiceImpl<Integer, Me
 
 	@Override
 	public List<MemberPrivilegesItem> queryByMemberRankId(Integer memberRankId) {
-		List<Integer> memberPrivilegesIdList = memberRankPrivilegesDao.findByRankSettingId(memberRankId).stream().map(e -> e.getMemberPrivilegesId())
+		List<Integer> memberPrivilegesIdList = memberRankPrivilegesDao.
+				findByRankSettingId(memberRankId).stream().map(MemberRankPrivileges::getMemberPrivilegesId)
 				.collect(Collectors.toList());
 		
-		if (memberPrivilegesIdList == null || memberPrivilegesIdList.size() == 0) {
-			return new ArrayList<MemberPrivilegesItem>();
+		if (CollectionUtils.isEmpty(memberPrivilegesIdList)) {
+			return new ArrayList<>();
+		}
+		return initMemberPrivilegesItem(memberPrivilegesIdList);
+	}
+
+	@Override
+	public List<MemberPrivilegesItem> queryByMemberRankIds(List<Integer> memberRankIds) {
+		List<Integer> memberPrivilegesIdList = memberRankPrivilegesDao.
+				findByRankSettingIds(memberRankIds).stream().map(MemberRankPrivileges::getMemberPrivilegesId)
+				.collect(Collectors.toList());
+
+		if (CollectionUtils.isEmpty(memberPrivilegesIdList)) {
+			return new ArrayList<>();
 		}
+		return initMemberPrivilegesItem(memberPrivilegesIdList);
+	}
 
+	private List<MemberPrivilegesItem> initMemberPrivilegesItem(List<Integer> memberPrivilegesIdList) {
 		List<MemberPrivilegesItem> memberPrivilegesItemList = memberPrivilegesItemDao.findById(memberPrivilegesIdList);
 
 		Map<Integer, MemberPrivilegesItem> map = new HashMap<Integer, MemberPrivilegesItem>();
 
 		for (MemberPrivilegesItem item : memberPrivilegesItemList) {
-			
-			if(!map.containsKey(item.getId())){
+			if (!map.containsKey(item.getId())) {
 				MemberPrivilegesItem memberPrivilegesItem = queryParentBysubId(item);
-				
-				if (map.containsKey(memberPrivilegesItem.getId())) {
 
+				if (map.containsKey(memberPrivilegesItem.getId())) {
 					memberPrivilegesItem = addSubItemToParent(map.get(memberPrivilegesItem.getId()), item);
 				}
 				map.put(memberPrivilegesItem.getId(), memberPrivilegesItem);
 			}
 		}
 
-		return map.values().stream().collect(Collectors.toList());
+		return new ArrayList<>(map.values());
 	}
 
 	private MemberPrivilegesItem queryParentBysubId(MemberPrivilegesItem memberPrivilegesItem) {

+ 410 - 71
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -1,70 +1,21 @@
 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;
@@ -77,6 +28,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 +67,14 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     @Autowired
     private SysUserCashAccountDetailService sysUserCashAccountDetailService;
 
+    @Autowired
+    private LessonCoursewareService lessonCoursewareService;
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Resource
+    private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
     @Lazy
     @Autowired
     private ContractService contractService;
@@ -133,10 +114,31 @@ 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;
+
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+
+    @Autowired
+    private TenantMemberRankSettingService tenantMemberRankSettingService;
+
+    @Autowired
+    private MemberRankOrganizationFeeMapperDao memberRankOrganizationFeeMapperDao;
+
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     @Override
@@ -146,35 +148,121 @@ 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) {
-            throw new BizException("操作失败:请配置会员权益");
+        if (CollectionUtils.isEmpty(memberPrivilegesItemIdList)) {
+            throw new BizException("操作失败:请配置学练宝功能");
+        }
+        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());
         }
-        memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(), memberPrivilegesItemIdList);
     }
 
     @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()));
         }
-        return memberRankSetting;
+        // 分类ID集合
+        List<MemberRankCategoryMapper> categoryMapperList = memberRankCategoryMapperService.getByMemberRankId(Lists.newArrayList(memberRankSetting.getId()));
+        if (CollectionUtils.isNotEmpty(categoryMapperList)) {
+            result.setMemberCategoryIdList(categoryMapperList.stream().map(MemberRankCategoryMapper::getCategoryId).collect(Collectors.toList()));
+        }
+
+        // 云课堂集合
+        List<MemberRankCourseTypeMapper> courseTypeMapperList = memberRankCourseTypeMapperService.getByMemberRankId(Lists.newArrayList(memberRankSetting.getId()));
+        if (CollectionUtils.isNotEmpty(courseTypeMapperList)) {
+            result.setMemberCourseTypeList(courseTypeMapperList.stream().map(MemberRankCourseTypeMapper::getCourseType).collect(Collectors.toList()));
+        }
+
+        // 是否已被购买
+        int count = cloudTeacherOrderDao.countByMemberRankSettingId(memberRankSettingId);
+        result.setBuyFlag(count > 0);
+
+        // 查询上级
+        if (memberRankSetting.getParentId() != null && memberRankSetting.getParentId() != 0) {
+            MemberRankSetting parent = memberRankSettingDao.get(memberRankSetting.getParentId());
+            result.setParentName(parent.getName());
+        }
+
+        return result;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateSetting(MemberRankSetting memberRankSetting) {
-        memberRankSettingDao.update(memberRankSetting);
+    public void updateSetting(MemberRankSettingWrapper.MemberRankSettingAdd memberRankSetting) {
+
+        // 是否已被购买
+        int count = cloudTeacherOrderDao.countByMemberRankSettingId(memberRankSetting.getId());
+        if (count >0) {
+            // 不能修改权益内容
+            List<MemberRankPrivileges> privilegesList = memberRankPrivilegesDao.findByRankSettingId(memberRankSetting.getId());
+            if (CollectionUtils.isNotEmpty(privilegesList)) {
+                List<Integer> privilegesIds = privilegesList.stream().map(MemberRankPrivileges::getMemberPrivilegesId).collect(Collectors.toList());
+                List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
+                if (CollectionUtils.isEmpty(memberPrivilegesItemIdList)) {
+                    memberPrivilegesItemIdList = new ArrayList<>();
+                }
+                if (!new HashSet<>(privilegesIds).containsAll(memberPrivilegesItemIdList) || !new HashSet<>(memberPrivilegesItemIdList).containsAll(privilegesIds)) {
+                    throw new BizException("已被购买的会员等级不能修改权益内容");
+                }
+            }
+            // 不能修改曲目分类内容
+            List<MemberRankCategoryMapper> categoryMapperList = memberRankCategoryMapperService.getByMemberRankId(Lists.newArrayList(memberRankSetting.getId()));
+            if (CollectionUtils.isNotEmpty(categoryMapperList)) {
+                List<Integer> categoryIdList = categoryMapperList.stream().map(MemberRankCategoryMapper::getCategoryId).collect(Collectors.toList());
+                List<Integer> memberCategoryIdList = memberRankSetting.getMemberCategoryIdList();
+                if (CollectionUtils.isEmpty(memberCategoryIdList)) {
+                    memberCategoryIdList = new ArrayList<>();
+                }
+                if (!new HashSet<>(categoryIdList).containsAll(memberCategoryIdList) || !new HashSet<>(memberCategoryIdList).containsAll(categoryIdList)) {
+                    throw new BizException("已被购买的会员等级不能修改权益内容");
+                }
+            }
+            // 不能修改云课堂内容
+            List<MemberRankCourseTypeMapper> courseTypeMapperList = memberRankCourseTypeMapperService.getByMemberRankId(Lists.newArrayList(memberRankSetting.getId()));
+            if (CollectionUtils.isNotEmpty(courseTypeMapperList)) {
+                List<String> courseTypeList = courseTypeMapperList.stream().map(MemberRankCourseTypeMapper::getCourseType).collect(Collectors.toList());
+                List<String> memberCourseTypeList = memberRankSetting.getMemberCourseTypeList();
+                if (CollectionUtils.isEmpty(memberCourseTypeList)) {
+                    memberCourseTypeList = new ArrayList<>();
+                }
+                if (!new HashSet<>(courseTypeList).containsAll(memberCourseTypeList) || !new HashSet<>(memberCourseTypeList).containsAll(courseTypeList)) {
+                    throw new BizException("已被购买的会员等级不能修改权益内容");
+                }
+            }
+
+        }
+
+
+        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 +522,80 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
         return BaseController.succeed(1);
     }
 
+    @Override
+    public MemberRankSettingWrapper.Category getTree(Integer parentId) {
+        MemberRankSettingWrapper.Category category = new MemberRankSettingWrapper.Category();
+        // 分类
+        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<>();
+            }
+            // 将被使用过的选出来
+            getCategoryTreeByIds(sysMusicScoreCategories,memberCategoryIdList);
+            category.setMusicScoreCategories(sysMusicScoreCategories);
+
+            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())) {
+                    category.setLessonCategories(Lists.newArrayList(course));
+                }
+            }
+        } else {
+            category.setMusicScoreCategories(sysMusicScoreCategories);
+            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())) {
+                category.setLessonCategories(Lists.newArrayList(course));
+            }
+        }
+
+
+        return category;
+
+    }
+
+    private void getCategoryTreeByIds(List<SysMusicScoreCategories> sysMusicScoreCategories, List<Integer> memberCategoryIdList) {
+        if (CollectionUtils.isEmpty(sysMusicScoreCategories)) {
+            return ;
+        }
+        for (int i = 0; i < sysMusicScoreCategories.size(); i++) {
+            SysMusicScoreCategories sysMusicScoreCategory = sysMusicScoreCategories.get(i);
+            if (!memberCategoryIdList.contains(sysMusicScoreCategory.getId())) {
+                sysMusicScoreCategories.remove(i);
+                i--;
+            } else {
+                getCategoryTreeByIds(sysMusicScoreCategory.getSysMusicScoreCategoriesList(), memberCategoryIdList);
+            }
+        }
+    }
+
+
     public static final String BUY_2_QQHE_LOCK = "BUY_2_QQHE_LOCK:";
 
     @Override
@@ -912,4 +1074,181 @@ 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);
+        if (CollectionUtils.isEmpty(dataList)) {
+            return new ArrayList<>();
+        }
+
+        // 顶级查询所有,下级的查询自己和上级
+        List<Integer> topIds = new ArrayList<>();
+        //
+        List<Integer> parentIds = new ArrayList<>();
+        for (MemberRankSetting memberRankSetting : dataList) {
+            if (memberRankSetting.getParentId()== null || memberRankSetting.getParentId() == 0) {
+                topIds.add(memberRankSetting.getId());
+            } else {
+                parentIds.add(memberRankSetting.getParentId());
+            }
+        }
+        // 查询上级
+        if (CollectionUtils.isNotEmpty(parentIds)) {
+            List<MemberRankSetting> parents = memberRankSettingDao.getNotDelByIds(parentIds);
+            dataList.addAll(parents);
+        }
+        if (CollectionUtils.isNotEmpty(topIds)) {
+            List<MemberRankSetting> tops = memberRankSettingDao.getNotDelByParentIds(topIds);
+
+            dataList.addAll(tops);
+        }
+        //dataList 转map
+        Map<Integer, MemberRankSetting> settingMap = dataList.stream().collect(Collectors.toMap(MemberRankSetting::getId, o -> o, (o1, o2) -> o1));
+
+
+        List<MemberRankSettingWrapper.MemberRankSetting> memberRankSettings = JSON.parseArray(JSON.toJSONString(settingMap.values()), MemberRankSettingWrapper.MemberRankSetting.class);
+
+        //  更新人ID集合
+        List<Integer> operatorIds = memberRankSettings.stream().map(o -> o.getOperator()).collect(Collectors.toList());
+        Map<Long, SysUser> sysUserMap = sysUserService.getMapByIds(operatorIds);
+
+
+        // 设置曲目数量
+        // 查询曲目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));
+                    }
+                    SysUser sysUser = sysUserMap.get(e.getOperator().longValue());
+                    if (sysUser != null) {
+                        e.setOperatorName(sysUser.getRealName());
+                    }
+                    MemberRankSetting memberRankSetting = settingMap.get(e.getParentId());
+                    if (memberRankSetting != null) {
+                        e.setParentName(memberRankSetting.getName());
+                    }
+                });
+            }
+            // 转tree
+            memberRankSettings = tree(memberRankSettings);
+
+            // ID 倒序
+            memberRankSettings.sort(Comparator.comparing(MemberRankSettingWrapper.MemberRankSetting::getId).reversed());
+        }
+        return memberRankSettings;
+    }
+
+    private List<MemberRankSettingWrapper.MemberRankSetting> tree(List<MemberRankSettingWrapper.MemberRankSetting> memberRankSettings) {
+        List<MemberRankSettingWrapper.MemberRankSetting> list = Lists.newArrayList();
+        if (CollectionUtils.isEmpty(memberRankSettings)) {
+            return list;
+        }
+
+        for (MemberRankSettingWrapper.MemberRankSetting item : memberRankSettings) {
+            if (item.getParentId() == 0) {
+                list.add(item);
+            }
+
+            for (MemberRankSettingWrapper.MemberRankSetting child : memberRankSettings) {
+                if (child.getParentId().equals(item.getId())) {
+                    if (item.getChildren() == null) {
+                        item.setChildren(new ArrayList<>());
+                    }
+                    item.getChildren().add(child);
+                }
+            }
+
+        }
+        return list;
+
+    }
+
+    @Override
+    public void del(Integer id) {
+
+        // 判断是否买过
+
+        // 是否已被购买
+        int count = cloudTeacherOrderDao.countByMemberRankSettingId(id);
+        if (count > 0) {
+            throw new BizException("存在学员使用、或销售,不可删除");
+        }
+        Integer count1 = tenantMemberRankSettingService.lambdaQuery()
+            .eq(TenantMemberRankSetting::getMemberRankSettingId, id)
+            .count();
+        if (count1 > 0) {
+            throw new BizException("存在学员使用、或销售,不可删除");
+        }
+        // 判断是否存在子集
+        List<MemberRankSetting> memberRankSettings = memberRankSettingDao.getNotDelByParentIds(Lists.newArrayList(id));
+        memberRankSettings = memberRankSettings.stream().filter(o -> !o.getDelFlag()).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(memberRankSettings)) {
+            throw new BizException("存在子级,不可删除");
+        }
+        memberRankSettingDao.deleteById(id);
+    }
+
+    @Override
+    public List<MemberRankSetting> listByIds(List<Integer> ids) {
+        return memberRankSettingDao.selectBatchIds(ids);
+    }
+
+    @Override
+    public List<MemberRankSettingWrapper.MemberRankSetting> queryTree(String musicGroupId, Integer organId, Integer studentId) {
+        if(organId == null){
+            if(StringUtils.isNotEmpty(musicGroupId)){
+                MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+                if (musicGroup == null) {
+                    throw new BizException("乐团不存在");
+                }
+                organId = musicGroup.getOrganId();
+            }else if (studentId != null){
+                SysUser user = studentService.getDao().getUser(studentId);
+                if (user == null) {
+                    throw new BizException("学生不存在");
+                }
+                organId = user.getOrganId();
+            }else {
+                throw new BizException("参数错误");
+            }
+        }
+        //获取分部可用会员编号
+        List<MemberRankOrganizationFeeMapper> feeMappers = memberRankOrganizationFeeMapperDao.queryByOrganId(organId);
+        if (CollectionUtils.isEmpty(feeMappers)) {
+            return Lists.newArrayList();
+        }
+        List<Integer> rankIds = feeMappers.stream().map(MemberRankOrganizationFeeMapper::getMemberRankSettingId).collect(Collectors.toList());
+        MemberRankSettingWrapper.MemberRankSettingQuery queryInfo = new MemberRankSettingWrapper.MemberRankSettingQuery();
+        queryInfo.setMemberIds(rankIds);
+        queryInfo.setHasChildren(true);
+        return this.queryPage2(queryInfo);
+    }
 }

+ 35 - 25
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java

@@ -228,10 +228,10 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
         if(CollectionUtils.isNotEmpty(calenderActivities)){
             List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(calenderActivities.stream().
                     map(e -> e.getActivityId().toString()).distinct().collect(Collectors.joining(",")));
-            collect = vipGroupActivities.stream().collect(Collectors.groupingBy(e -> e.getId(),
+            collect = vipGroupActivities.stream().collect(Collectors.groupingBy(VipGroupActivity::getId,
                     Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
         }
-        MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(musicGroupPaymentCalenderId);
+        List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberService.findByCalenderId(musicGroupPaymentCalenderId);
         for (Integer studentId : userIdList) {
             musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
             musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
@@ -248,27 +248,29 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
             musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
             musicGroupPaymentCalenderDetail.setMusicGroupId(musicGroupPaymentCalender.getMusicGroupId());
             //设置云教练、课程收入
-            this.setCourseIncome(calenderMember,musicGroupPaymentCalenderDetail);
+            this.setCourseIncome(calenderMembers,musicGroupPaymentCalenderDetail);
             Integer organId = musicGroupPaymentCalender.getOrganId();
             musicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
             if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0 || musicGroupPaymentCalender.getPayUserType() == SCHOOL) {
                 // 添加会员
-                if (calenderMember != null) {
-                    CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-                    cloudTeacherOrder.setOrganId(organId);
-                    cloudTeacherOrder.setType(calenderMember.getPeriod());
-                    cloudTeacherOrder.setAmount(BigDecimal.ZERO);
-                    cloudTeacherOrder.setStudentId(studentId);
-                    cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId());
-                    cloudTeacherOrder.setTime(calenderMember.getNum().intValue());
-                    cloudTeacherOrder.setStatus(1);
-                    if(musicGroupPaymentCalender.getPayUserType() == SCHOOL){
-                        cloudTeacherOrder.setRemark("学校缴费新增学员");
-                    }else {
-                        cloudTeacherOrder.setRemark("缴费项目0元新增学员");
+                if (CollectionUtils.isNotEmpty(calenderMembers)) {
+                    for (MusicGroupPaymentCalenderMember calenderMember : calenderMembers) {
+                        CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+                        cloudTeacherOrder.setOrganId(organId);
+                        cloudTeacherOrder.setType(calenderMember.getPeriod());
+                        cloudTeacherOrder.setAmount(BigDecimal.ZERO);
+                        cloudTeacherOrder.setStudentId(studentId);
+                        cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId());
+                        cloudTeacherOrder.setTime(calenderMember.getNum().intValue());
+                        cloudTeacherOrder.setStatus(1);
+                        if(musicGroupPaymentCalender.getPayUserType() == SCHOOL){
+                            cloudTeacherOrder.setRemark("学校缴费新增学员");
+                        }else {
+                            cloudTeacherOrder.setRemark("缴费项目0元新增学员");
+                        }
+                        cloudTeacherOrder.setMusicGroupId(musicGroupId);
+                        cloudTeacherOrderService.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
                     }
-                    cloudTeacherOrder.setMusicGroupId(musicGroupId);
-                    cloudTeacherOrderService.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
                 }
                 //添加小课包
                 if (calenderActivities != null && calenderActivities.size() > 0) {
@@ -321,19 +323,27 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
         }
     }
 
-    public void setCourseIncome(MusicGroupPaymentCalenderMember calenderMember, MusicGroupPaymentCalenderDetail calenderDetail){
-        if(Objects.nonNull(calenderMember)){
+    public void setCourseIncome(List<MusicGroupPaymentCalenderMember> calenderMembers, MusicGroupPaymentCalenderDetail calenderDetail){
+        if(CollectionUtils.isNotEmpty(calenderMembers)){
             MusicGroup musicGroup = musicGroupDao.get(calenderDetail.getMusicGroupId());
             if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
                 //获取云教练溢出费用
-                BigDecimal courseIncome = memberFeeSettingService.getAmount(musicGroup.getOrganId(), 1, calenderMember.getPeriod(),
-                        calenderMember.getNum(), MemberFeeSettingServiceImpl::getIncome);
-                if(calenderMember.getActualAmount().compareTo(courseIncome) > 0){
+                BigDecimal courseIncome = BigDecimal.ZERO;
+                BigDecimal actualAmount = BigDecimal.ZERO;
+                for (MusicGroupPaymentCalenderMember calenderMember : calenderMembers) {
+                    courseIncome.add(memberFeeSettingService.getAmount(musicGroup.getOrganId(),
+                        calenderMember.getMemberRankSettingId(),
+                        calenderMember.getPeriod(),
+                        calenderMember.getNum(),
+                        MemberFeeSettingServiceImpl::getIncome));
+                    actualAmount = actualAmount.add(calenderMember.getActualAmount());
+                }
+                if(actualAmount.compareTo(courseIncome) > 0){
                     calenderDetail.setExpectMemberAmount(courseIncome);
-                    calenderDetail.setActualAmount(calenderMember.getActualAmount().subtract(courseIncome));
+                    calenderDetail.setActualAmount(actualAmount.subtract(courseIncome));
                 }
             }else {
-                calenderDetail.setExpectMemberAmount(calenderMember.getActualAmount());
+                calenderDetail.setExpectMemberAmount(calenderMembers.stream().map(MusicGroupPaymentCalenderMember::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
                 calenderDetail.setActualAmount(BigDecimal.ZERO);
             }
         }

+ 87 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderMemberServiceImpl.java

@@ -12,11 +12,16 @@ import com.ym.mec.biz.service.MusicGroupPaymentCalenderMemberService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 import java.util.function.BiFunction;
+import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.AUDITING;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.NO;
@@ -25,37 +30,42 @@ import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalende
 public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalenderMember>
         implements MusicGroupPaymentCalenderBaseService<MusicGroupPaymentCalenderMember>, MusicGroupPaymentCalenderMemberService {
 
-    @Autowired
+    @Resource
     private MusicGroupPaymentCalenderMemberDao musicGroupPaymentCalenderMemberDao;
+    @Resource
+    private MemberFeeSettingService memberFeeSettingService;
+    @Resource
+    private MemberRankSettingDao memberRankSettingDao;
 
     @Override
     public BaseDAO<Long, MusicGroupPaymentCalenderMember> getDAO() {
         return musicGroupPaymentCalenderMemberDao;
     }
 
-    @Autowired
-    private MemberFeeSettingService memberFeeSettingService;
-    @Autowired
-    private MemberRankSettingDao memberRankSettingDao;
-
     public MusicGroupPaymentCalenderMemberServiceImpl() {
         MusicGroupPaymentCalenderBaseService.calenderBaseServiceMap.put(CalenderBaseServiceEnum.MEMBER,this);
     }
 
     @Override
     public MusicGroupPaymentCalender.PaymentCalenderStatusEnum checkComponentAmount(MusicGroupPaymentBaseCalender baseCalender) {
-        if(getAmount(baseCalender, MemberFeeSettingServiceImpl::getGroupPurchaseFee).
-                compareTo(baseCalender.getCalenderMember().getActualAmount()) != 0){
-            return AUDITING;
+        List<MusicGroupPaymentCalenderMember> calenderMemberList = baseCalender.getCalenderMemberList();
+        if(CollectionUtils.isEmpty(calenderMemberList)){
+            return NO;
+        }
+        for (MusicGroupPaymentCalenderMember calenderMember : calenderMemberList) {
+            if(getAmount(baseCalender,calenderMember, MemberFeeSettingServiceImpl::getGroupPurchaseFee).
+                    compareTo(calenderMember.getActualAmount()) != 0){
+                return AUDITING;
+            }
         }
         return NO;
     }
 
     @Override
     public BigDecimal getActualAmount(MusicGroupPaymentBaseCalender baseCalender) {
-        MusicGroupPaymentCalenderMember calenderMember = baseCalender.getCalenderMember();
-        if(calenderMember != null){
-            return calenderMember.getActualAmount();
+        List<MusicGroupPaymentCalenderMember> calenderMemberList = baseCalender.getCalenderMemberList();
+        if(CollectionUtils.isNotEmpty(calenderMemberList)){
+            return calenderMemberList.stream().map(MusicGroupPaymentCalenderBase::getActualAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
         }
         return BigDecimal.ZERO;
     }
@@ -78,13 +88,32 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
             if(memberRankSetting == null){
                 throw new BizException("会员信息不存在");
             }
-            calenderMember.setName(memberRankSetting.getName());
+            String name = memberRankSetting.getName();
+            if(memberRankSetting.getParentId() != 0){
+                MemberRankSetting rankSetting = memberRankSettingDao.get(memberRankSetting.getParentId());
+                if(rankSetting != null){
+                    name = rankSetting.getName() + "-" + name;
+                }
+            }
+            calenderMember.setName(name);
         }
         return bean;
     }
 
     private BigDecimal getAmount(MusicGroupPaymentBaseCalender baseCalender, BiFunction<PeriodEnum,MemberFeeSetting,BigDecimal> func){
-        MusicGroupPaymentCalenderMember calenderMember = baseCalender.getCalenderMember();
+        List<MusicGroupPaymentCalenderMember> calenderMemberList = baseCalender.getCalenderMemberList();
+        if(CollectionUtils.isNotEmpty(calenderMemberList)){
+            MusicGroup musicGroup = baseCalender.getMusicGroup();
+            BigDecimal amount = BigDecimal.ZERO;
+            for (MusicGroupPaymentCalenderMember calenderMember : calenderMemberList) {
+                amount = amount.add(memberFeeSettingService.getAmount(musicGroup.getOrganId(), calenderMember.getMemberRankSettingId(),
+                        calenderMember.getPeriod(), calenderMember.getNum(), func));
+            }
+        }
+        return BigDecimal.ZERO;
+    }
+
+    private BigDecimal getAmount(MusicGroupPaymentBaseCalender baseCalender,MusicGroupPaymentCalenderMember calenderMember, BiFunction<PeriodEnum,MemberFeeSetting,BigDecimal> func){
         if(calenderMember != null){
             MusicGroup musicGroup = baseCalender.getMusicGroup();
             //会员价格是否变动
@@ -100,7 +129,48 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
     }
 
     @Override
-    public MusicGroupPaymentCalenderMember findByCalenderId(Long calenderId) {
-        return musicGroupPaymentCalenderMemberDao.findByCalenderId(calenderId);
+    public List<MusicGroupPaymentCalenderMember> findByCalenderId(Long calenderId) {
+        List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberDao.findByCalenderId(calenderId);
+        if(CollectionUtils.isNotEmpty(calenderMembers)){
+            List<Integer> memberIds = calenderMembers.stream().map(MusicGroupPaymentCalenderMember::getMemberRankSettingId).collect(Collectors.toList());
+            List<MemberRankSetting> memberRankSettingList = memberRankSettingDao.selectBatchIds(memberIds);
+            Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettingList.stream().collect(Collectors.toMap(MemberRankSetting::getId, e -> e));
+            calenderMembers.forEach(e -> {
+                MemberRankSetting memberRankSetting = memberRankSettingMap.get(e.getMemberRankSettingId());
+                if(memberRankSetting != null){
+                    e.setIntro(memberRankSetting.getIntro());
+                }
+            });
+        }
+        return calenderMembers;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchInsert(List<MusicGroupPaymentCalenderMember> calenderMemberList) {
+        musicGroupPaymentCalenderMemberDao.batchInsert(calenderMemberList);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchUpdate(List<MusicGroupPaymentCalenderMember> calenderMemberList) {
+        musicGroupPaymentCalenderMemberDao.batchUpdate(calenderMemberList);
+    }
+
+    @Override
+    public List<MusicGroupPaymentCalenderMember> findByIds(List<Long> calenderMemberIds) {
+        List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberDao.findByIds(calenderMemberIds);
+        if(CollectionUtils.isNotEmpty(calenderMembers)){
+            List<Integer> memberIds = calenderMembers.stream().map(MusicGroupPaymentCalenderMember::getMemberRankSettingId).collect(Collectors.toList());
+            List<MemberRankSetting> memberRankSettingList = memberRankSettingDao.selectBatchIds(memberIds);
+            Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettingList.stream().collect(Collectors.toMap(MemberRankSetting::getId, e -> e));
+            calenderMembers.forEach(e -> {
+                MemberRankSetting memberRankSetting = memberRankSettingMap.get(e.getMemberRankSettingId());
+                if(memberRankSetting != null){
+                    e.setIntro(memberRankSetting.getIntro());
+                }
+            });
+        }
+        return calenderMembers;
     }
 }

+ 88 - 79
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -204,8 +204,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         musicGroupPaymentCalender.setMusicGroupId(musicGroupId);
         musicGroupPaymentCalender.setMusicGroupOrganizationCourseSettingId(musicGroupPaymentCalenderDto.getMusicGroupOrganizationCourseSettingId());
 
-        musicGroupPaymentCalender.setOriginalTotalAmount(calenderStudentDetails.stream().map(e -> e.getCourseOriginalPrice()).reduce(BigDecimal.ZERO, BigDecimal::add));
-        musicGroupPaymentCalender.setCurrentTotalAmount(calenderStudentDetails.stream().map(e -> e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add));
+        musicGroupPaymentCalender.setOriginalTotalAmount(calenderStudentDetails.stream().map(MusicGroupPaymentCalenderStudentDetail::getCourseOriginalPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
+        musicGroupPaymentCalender.setCurrentTotalAmount(calenderStudentDetails.stream().map(MusicGroupPaymentCalenderStudentDetail::getCourseCurrentPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
         musicGroupPaymentCalender.setPaymentType(paymentType);
         musicGroupPaymentCalender.setPayUserType(musicGroupPaymentCalenderDto.getPayUserType());
         musicGroupPaymentCalender.setStartPaymentDate(musicGroupPaymentDateRange.getStartPaymentDate());
@@ -301,7 +301,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                 List<MusicGroupPaymentCalender> list = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
                 //排除商品采购
                 List<MusicGroupPaymentCalender> collect = list.stream().filter(e -> e.getPaymentType() != GOODS_PURCHASE).collect(Collectors.toList());
-                if (collect.size() > 0) {
+                if (CollectionUtils.isNotEmpty(collect)) {
                     throw new BizException("创建失败,已经存在缴费信息");
                 }
             }
@@ -318,7 +318,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         BigDecimal originalTotalAmount = courseOriginalAmount.add(memberOriginalAmount)
                 .add(activityOriginalAmount)
                 .add(goodsOriginalAmount)
-                .add(repairOriginalAmount).setScale(0, BigDecimal.ROUND_HALF_UP);
+                .add(repairOriginalAmount).setScale(0, RoundingMode.HALF_UP);
 
         //计算缴费项目总金额(前端录入)
         BigDecimal courseActualAmount = musicGroupPaymentCalenderCourseSettingsService.getActualAmount(musicGroupPaymentBaseCalender);
@@ -330,7 +330,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         BigDecimal actualTotalAmount = courseActualAmount.add(memberActualAmount)
                 .add(repairActualAmount)
                 .add(goodsActualAmount)
-                .add(activityActualAmount).setScale(0, BigDecimal.ROUND_HALF_UP);
+                .add(activityActualAmount).setScale(0, RoundingMode.HALF_UP);
         //标记是否云教练缴费
         if(musicGroupPaymentCalender.getPayUserType() == STUDENT && musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
             if(musicGroupPaymentCalender.getPaymentType() == ADD_STUDENT){
@@ -364,8 +364,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             BigDecimal courseCurrentAmount = musicGroupPaymentCalenderCourseSettingsService.getCurrentAmount(musicGroupPaymentBaseCalender);
             //如果课程价格是0元,那么需要审核
             if(courseCurrentAmount.compareTo(BigDecimal.ZERO) == 0 &&
-                    musicGroupPaymentBaseCalender.getMusicGroupPaymentCalenderCourseSettingsList() != null &&
-                    musicGroupPaymentBaseCalender.getMusicGroupPaymentCalenderCourseSettingsList().size() > 0){
+                    CollectionUtils.isNotEmpty(musicGroupPaymentBaseCalender.getMusicGroupPaymentCalenderCourseSettingsList())){
                 status = AUDITING;
             }else {
                 BigDecimal memberCurrentAmount = musicGroupPaymentCalenderMemberService.getCurrentAmount(musicGroupPaymentBaseCalender);
@@ -375,7 +374,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                 BigDecimal currentTotalAmount = courseCurrentAmount.add(memberCurrentAmount)
                         .add(goodsCurrentAmount)
                         .add(repairCurrentAmount)
-                        .add(activityCurrentAmount).setScale(0, BigDecimal.ROUND_HALF_UP);
+                        .add(activityCurrentAmount).setScale(0, RoundingMode.HALF_UP);
                 status = actualTotalAmount.compareTo(currentTotalAmount) == 0 ? NO : AUDITING;
             }
         }
@@ -413,13 +412,15 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         operatingReportCloudService.save(musicGroupPaymentCalender);
         Long calenderId = musicGroupPaymentCalender.getId();
         //保存会员缴费信息
-        MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentBaseCalender.getCalenderMember();
-        if (calenderMember != null) {
-            calenderMember = musicGroupPaymentCalenderMemberService.initBean(calenderMember);
-            calenderMember.setActualAmount(memberActualAmount);
-            calenderMember.setOriginalAmount(memberOriginalAmount);
-            calenderMember.setCalenderId(calenderId);
-            musicGroupPaymentCalenderMemberService.insert(calenderMember);
+        List<MusicGroupPaymentCalenderMember> calenderMemberList = musicGroupPaymentBaseCalender.getCalenderMemberList();
+        if (CollectionUtils.isNotEmpty(calenderMemberList)) {
+            for (MusicGroupPaymentCalenderMember calenderMember : calenderMemberList) {
+                calenderMember = musicGroupPaymentCalenderMemberService.initBean(calenderMember);
+                calenderMember.setActualAmount(memberActualAmount);
+                calenderMember.setOriginalAmount(memberOriginalAmount);
+                calenderMember.setCalenderId(calenderId);
+            }
+            musicGroupPaymentCalenderMemberService.batchInsert(calenderMemberList);
         }
         //保存乐保缴费信息
         MusicGroupPaymentCalenderRepair musicRepair = musicGroupPaymentBaseCalender.getMusicRepair();
@@ -442,17 +443,21 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                 e.setOverflowCoursePrice(BigDecimal.ZERO);
             });
             //是否会员团
-            if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE && Objects.nonNull(calenderMember)){
-                //获取云教练溢出费用
-                BigDecimal courseIncome = memberFeeSettingService.getAmount(musicGroup.getOrganId(), 1, calenderMember.getPeriod(),
-                        calenderMember.getNum(), MemberFeeSettingServiceImpl::getIncome);
-                calenderMember.setIncome(courseIncome);
-                musicGroupPaymentCalenderMemberService.update(calenderMember);
-                //获取云教练溢出费用
-                BigDecimal currentFee = memberFeeSettingService.getAmount(musicGroup.getOrganId(), 1, calenderMember.getPeriod(),
-                        calenderMember.getNum(), MemberFeeSettingServiceImpl::getCurrentFee);
+            if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE && CollectionUtils.isNotEmpty(calenderMemberList)){
+                BigDecimal totalCourseIncome = BigDecimal.ZERO;
+                BigDecimal currentFee = BigDecimal.ZERO;
+                for (MusicGroupPaymentCalenderMember calenderMember : calenderMemberList) {
+                    //获取云教练溢出费用
+                    BigDecimal courseIncome = memberFeeSettingService.getAmount(musicGroup.getOrganId(), calenderMember.getMemberRankSettingId(), calenderMember.getPeriod(),
+                            calenderMember.getNum(), MemberFeeSettingServiceImpl::getIncome);
+                    calenderMember.setIncome(courseIncome);
+                    //获取云教练溢出费用
+                    currentFee = currentFee.add(memberFeeSettingService.getAmount(musicGroup.getOrganId(), calenderMember.getMemberRankSettingId(), calenderMember.getPeriod(),
+                            calenderMember.getNum(), MemberFeeSettingServiceImpl::getCurrentFee));
+                }
+                musicGroupPaymentCalenderMemberService.batchUpdate(calenderMemberList);
                 //平摊金额
-                distributeTotalAmount(courseSettingsList,currentFee.subtract(courseIncome));
+                distributeTotalAmount(courseSettingsList,currentFee.subtract(totalCourseIncome));
             }
             musicGroupPaymentCalender.setMusicGroupPaymentCalenderCourseSettingsList(courseSettingsList);
             musicGroupPaymentCalenderCourseSettingsService.batchInsert(musicGroupPaymentCalender);
@@ -460,7 +465,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         //保存商品缴费信息
         if (musicGroupPaymentCalender.getPaymentType() == GOODS_PURCHASE) {
             if(CollectionUtils.isNotEmpty(musicGroupPaymentBaseCalender.getCalenderGoodsList())){
-                List<Integer> goodsIds = musicGroupPaymentBaseCalender.getCalenderGoodsList().stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
+                List<Integer> goodsIds = musicGroupPaymentBaseCalender.getCalenderGoodsList().stream().map(MusicGroupPaymentCalenderGoods::getGoodsId).collect(Collectors.toList());
                 Map<Integer, Goods> goodsMap = goodsDao.getGoodies(goodsIds).stream().collect(Collectors.toMap(Goods::getId, e -> e));
                 for (MusicGroupPaymentCalenderGoods e : musicGroupPaymentBaseCalender.getCalenderGoodsList()) {
                     Goods goods = goodsMap.get(e.getGoodsId());
@@ -506,6 +511,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             this.updateNoPaymentAndZeroPaymentStatus(musicGroupPaymentCalender, true);
             List<MusicGroupPaymentCalenderCourseSettings> settingsList = musicGroupPaymentBaseCalender.getMusicGroupPaymentCalenderCourseSettingsList();
             // 学生加到班级
+            assert calenderAddStudent != null;
             classGroupService.addStudentToClassGroupAndCourseArranging(calenderAddStudent.getStudentIds(), calenderAddStudent.getClassGroupIds(),
                     batchNo, settingsList, musicGroup);
             //记录经营报表学员课程费用
@@ -531,7 +537,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         }
         BigDecimal remainingAmount = totalAmount;
         int lastIndex = settings.size() - 1;
-        BigDecimal totalUnitPrice = settings.stream().map(e -> e.getUnitPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalUnitPrice = settings.stream().map(MusicGroupPaymentCalenderCourseSettings::getUnitPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 
         // 分摊总金额
         for (int i = 0; i < lastIndex; i++) {
@@ -568,7 +574,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             }
         }
         List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = musicGroupPaymentCalenderDetailDao.queryNotPaymentStudentByUserIdAndMusicGroupId(userId, musicGroup.getId());
-        if (musicGroupPaymentCalenderDetailList != null && musicGroupPaymentCalenderDetailList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(musicGroupPaymentCalenderDetailList)) {
             throw new BizException("创建缴费失败:已存在缴费项目");
         }
     }
@@ -576,17 +582,17 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     public Map<String, Object> getCalenderDetail(Map<String, Object> result, Long calenderId) {
         //课程
         List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettings(calenderId);
-        result.put("course", courseSettingsList==null?null:courseSettingsList.size() == 0?null:courseSettingsList);
+        result.put("course", CollectionUtils.isEmpty(courseSettingsList)?null:courseSettingsList);
         //乐保
         result.put("repair", musicGroupPaymentCalenderRepairService.findByCalenderId(calenderId));
-        MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(calenderId);
+        List<MusicGroupPaymentCalenderMember> calenderMemberList = musicGroupPaymentCalenderMemberService.findByCalenderId(calenderId);
         //会员信息
-        result.put("member", calenderMember);
+        result.put("member", calenderMemberList);
         //活动相关信息
         List<MusicGroupPaymentCalenderActivity> byCalenderId = musicGroupPaymentCalenderActivityService.findByCalenderId(calenderId);
-        result.put("activity", byCalenderId==null?null:byCalenderId.size() == 0?null:byCalenderId);
-        if (calenderMember != null) {
-            result.put("memberPrivilegesItemList", memberRankPrivilegesService.queryByMemberRankId(calenderMember.getMemberRankSettingId()));
+        result.put("activity", CollectionUtils.isEmpty(byCalenderId)?null:byCalenderId);
+        if (CollectionUtils.isNotEmpty(calenderMemberList)) {
+            result.put("memberPrivilegesItemList", memberRankPrivilegesService.queryByMemberRankIds(calenderMemberList.stream().map(MusicGroupPaymentCalenderMember::getMemberRankSettingId).collect(Collectors.toList())));
         }
         //获取商品采购信息
         result.put("goods",musicGroupPaymentCalenderGoodsService.lambdaQuery().eq(MusicGroupPaymentCalenderGoods::getCalenderId,calenderId).list());
@@ -616,14 +622,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(id);
         //统计预计缴费人数
         Map<Long, Long> expectNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countExpectNum(id));
-        if (expectNumMap != null) {
-            calender.setExpectNum(expectNumMap.get(id) == null ? 0 : expectNumMap.get(id).intValue());
-        }
+        calender.setExpectNum(expectNumMap.get(id) == null ? 0 : expectNumMap.get(id).intValue());
         //统计实际缴费人数
         Map<Long, Long> actualNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countActualNum(id));
-        if (actualNumMap != null) {
-            calender.setActualNum(actualNumMap.get(id) == null ? 0 : actualNumMap.get(id).intValue());
-        }
+        calender.setActualNum(actualNumMap.get(id) == null ? 0 : actualNumMap.get(id).intValue());
         //如果是学校缴费并且金额不为0,返回费用信息
         if (calender.getPayUserType() == SCHOOL && calender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) > 0){
             List<MusicGroupCalenderRefundPeriod> list = musicGroupCalenderRefundPeriodService.findByCalenderId(id);
@@ -633,7 +635,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             } else {
                 List<MusicGroupCalenderRefundPeriodWrapper.MusicGroupCalenderRefundPeriod> parseArray = JSON.parseArray(JSON.toJSONString(list), MusicGroupCalenderRefundPeriodWrapper.MusicGroupCalenderRefundPeriod.class);
 
-                List<Integer> userIds = list.stream().map(o -> o.getResponsiblePerson()).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+                List<Integer> userIds = list.stream().map(MusicGroupCalenderRefundPeriod::getResponsiblePerson).filter(Objects::nonNull).distinct().collect(Collectors.toList());
                 if (CollectionUtils.isNotEmpty(userIds)) {
                     Map<Long, SysUser> mapByIds = sysUserService.getMapByIds(userIds);
                     parseArray.forEach(o -> {
@@ -680,7 +682,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         String batchNo = musicGroupPaymentCalenderDto.getBatchNo();
 
         List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
-        if (musicGroupPaymentCalenderList == null || musicGroupPaymentCalenderList.size() == 0) {
+        if (CollectionUtils.isEmpty(musicGroupPaymentCalenderList)) {
             throw new BizException("[批次号]参数错误");
         }
         PaymentCalenderStatusEnum status = musicGroupPaymentCalenderList.get(0).getStatus();
@@ -717,7 +719,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         List<Integer> studentIdList = JSON.parseArray(adjust.getStudentIds(), Integer.class);
         //获取欠费学员列表
         List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroup.getId(), studentIdList,null);
-        if (noPaymentUserIds.size() > 0) {
+        if (CollectionUtils.isNotEmpty(noPaymentUserIds)) {
             throw new BizException("操作失败:有欠费的学员不允许创建缴费");
         }
         //获取缴费状态在审核中或者已拒绝的缴费项目的学员
@@ -751,8 +753,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         musicGroupPaymentCalender.setMemo(musicGroupPaymentCalenderDto.getMemo());
         musicGroupPaymentCalender.setMusicGroupId(musicGroupId);
         musicGroupPaymentCalender.setMusicGroupOrganizationCourseSettingId(musicGroupPaymentCalenderDto.getMusicGroupOrganizationCourseSettingId());
-        musicGroupPaymentCalender.setOriginalTotalAmount(calenderStudentDetails.stream().map(e -> e.getCourseOriginalPrice()).reduce(BigDecimal.ZERO, BigDecimal::add));
-        musicGroupPaymentCalender.setCurrentTotalAmount(calenderStudentDetails.stream().map(e -> e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add));
+        musicGroupPaymentCalender.setOriginalTotalAmount(calenderStudentDetails.stream().map(MusicGroupPaymentCalenderStudentDetail::getCourseOriginalPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
+        musicGroupPaymentCalender.setCurrentTotalAmount(calenderStudentDetails.stream().map(MusicGroupPaymentCalenderStudentDetail::getCourseCurrentPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
         musicGroupPaymentCalender.setPaymentType(paymentType);
         musicGroupPaymentCalender.setPayUserType(musicGroupPaymentCalenderDto.getPayUserType());
         musicGroupPaymentCalender.setStartPaymentDate(musicGroupPaymentDateRange.getStartPaymentDate());
@@ -854,15 +856,15 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             if(CollectionUtils.isNotEmpty(calenderActivities)){
                 List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(calenderActivities.stream().
                         map(e -> e.getActivityId().toString()).distinct().collect(Collectors.joining(",")));
-                collect = vipGroupActivities.stream().collect(Collectors.groupingBy(e -> e.getId(),
+                collect = vipGroupActivities.stream().collect(Collectors.groupingBy(VipGroupActivity::getId,
                         Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
             }
-            MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(musicGroupPaymentCalender.getId());
+            List<MusicGroupPaymentCalenderMember> calenderMemberList = musicGroupPaymentCalenderMemberService.findByCalenderId(musicGroupPaymentCalender.getId());
             for (String studentId : studentIdStr.split(",")) {
                 if (termCourseDetail != null) {
                     //是否已经预排部分课程
                     List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByMusicGroupId(musicGroup.getId());
-                    if (courseSchedules.size() > 0) {
+                    if (CollectionUtils.isNotEmpty(courseSchedules)) {
                         throw new BizException("操作失败:该乐团存在预排课课程,请优先完成预排课");
                     } else {
                         MusicGroupSchoolTermStudentCourseDetail studentCourseDetail = new MusicGroupSchoolTermStudentCourseDetail();
@@ -886,21 +888,23 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                 //如果是0元那么更新fee表和studentRegistration表
                 if (musicGroupPaymentCalender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0) {
                     // 添加会员有效时长
-                    if (calenderMember != null) {
-                        CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-                        cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId());
-                        cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
-                        cloudTeacherOrder.setType(calenderMember.getPeriod());
-                        cloudTeacherOrder.setStudentId(Integer.parseInt(studentId));
-                        cloudTeacherOrder.setTime(calenderMember.getNum().intValue());
-                        cloudTeacherOrder.setAmount(BigDecimal.ZERO);
-                        cloudTeacherOrder.setStatus(1);
-                        cloudTeacherOrder.setRemark("进行中乐团0元加学生");
-                        cloudTeacherOrder.setMusicGroupId(musicGroup.getId());
-                        cloudTeacherOrderService.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
+                    if (CollectionUtils.isNotEmpty(calenderMemberList)) {
+                        for (MusicGroupPaymentCalenderMember calenderMember : calenderMemberList) {
+                            CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+                            cloudTeacherOrder.setLevel(calenderMember.getMemberRankSettingId());
+                            cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
+                            cloudTeacherOrder.setType(calenderMember.getPeriod());
+                            cloudTeacherOrder.setStudentId(Integer.parseInt(studentId));
+                            cloudTeacherOrder.setTime(calenderMember.getNum().intValue());
+                            cloudTeacherOrder.setAmount(BigDecimal.ZERO);
+                            cloudTeacherOrder.setStatus(1);
+                            cloudTeacherOrder.setRemark("进行中乐团0元加学生");
+                            cloudTeacherOrder.setMusicGroupId(musicGroup.getId());
+                            cloudTeacherOrderService.save(cloudTeacherOrder,calenderMember.getAutoActivationFlag());
+                        }
                     }
                     //添加小课包
-                    if (calenderActivities != null && calenderActivities.size() > 0) {
+                    if (CollectionUtils.isNotEmpty(calenderActivities)) {
                         List<ActivityUserMapper> activityUserMapperList = new ArrayList<>();
                         for (MusicGroupPaymentCalenderActivity calenderActivity : calenderActivities) {
                             ActivityUserMapper activityUserMapper = new ActivityUserMapper();
@@ -950,10 +954,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = musicGroupPaymentCalenderDao.queryAuditList(params);
-            List<Integer> collect = dataList.stream().map(e -> e.getOrganId()).collect(Collectors.toList());
+            List<Integer> collect = dataList.stream().map(MusicGroupPaymentCalenderAuditDto::getOrganId).collect(Collectors.toList());
             collect.removeAll(Collections.singleton(null));
             Map<Integer, String> organNameMap = getMap("organization", "id_", "name_", collect, queryInfo.getTenantId(), Integer.class, String.class);
-            List<Integer> operatorIds = dataList.stream().map(e -> e.getOperator()).collect(Collectors.toList());
+            List<Integer> operatorIds = dataList.stream().map(MusicGroupPaymentCalenderAuditDto::getOperator).collect(Collectors.toList());
             operatorIds.removeAll(Collections.singleton(null));
             Map<Integer, String> realNameMap = getMap("sys_user", "id_", "real_name_", operatorIds, queryInfo.getTenantId(), Integer.class, String.class);
             dataList.forEach(e -> {
@@ -975,7 +979,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         calenderAuditDetailDto.setAuditDto(auditDto);
         //获取缴费周期
         List<MusicGroupPaymentCalender> groupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
-        if (groupPaymentCalenders == null || groupPaymentCalenders.size() == 0) {
+        if (CollectionUtils.isEmpty(groupPaymentCalenders)) {
             throw new BizException("缴费项目异常,请联系管理员");
         }
         calenderAuditDetailDto.setMusicGroupPaymentCalenders(groupPaymentCalenders);
@@ -1058,7 +1062,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                 List<Integer> userIds = Arrays.stream(calender.getStudentIds().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
                 //获取欠费学员列表
                 List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(calender.getMusicGroupId(), userIds,null);
-                if (noPaymentUserIds.size() > 0) {
+                if (CollectionUtils.isNotEmpty(noPaymentUserIds)) {
                     throw new BizException("{} 有欠费的学员不允许创建缴费", musicGroup.getName());
                 }
                 //获取缴费状态在审核中或者已拒绝的缴费项目的学员
@@ -1123,7 +1127,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                 String orderNo = "Y" + idGeneratorService.generatorId("payment");
                 //获取账期金额
                 List<MusicGroupCalenderRefundPeriod> refundPeriods = musicGroupCalenderRefundPeriodService.findByCalenderId(calender.getId());
-                BigDecimal totalAmount = refundPeriods.stream().map(e -> e.getRefundAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal totalAmount = refundPeriods.stream().map(MusicGroupCalenderRefundPeriod::getRefundAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
                 //管乐迷应收订单创建
                 StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
                 studentPaymentOrder.setActualAmount(totalAmount);
@@ -1161,7 +1165,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 
     public void saveSellOrder(List<MusicGroupPaymentCalenderGoods> goods, StudentPaymentOrder studentPaymentOrder) {
         List<SellOrder> sellOrderList = new ArrayList<>();
-        BigDecimal originalTotalAmount = goods.stream().map(e -> e.getTotalPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal originalTotalAmount = goods.stream().map(MusicGroupPaymentCalenderGoods::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
         //获取优惠金额
         BigDecimal totalDiscountAmount = originalTotalAmount.subtract(studentPaymentOrder.getExpectAmount());
         //待分配优惠
@@ -1187,7 +1191,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             for (Integer i = 0; i < calenderGood.getNum(); i++) {
                 List<ComplementGoodsDto> goodsDtoList = JSON.parseArray(calenderGood.getChildGoodsJson(), ComplementGoodsDto.class);
                 //获取总成本
-                BigDecimal totalCostPrice = goodsDtoList.stream().map(e->e.getOrganCostPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal totalCostPrice = goodsDtoList.stream().map(ComplementGoodsDto::getOrganCostPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
                 //待分配金额
                 BigDecimal totalAmount;
                 if(i == calenderGood.getNum() - 1){
@@ -1246,7 +1250,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 
     public void updateSellOrder(List<SellOrder> sellOrderList, StudentPaymentOrder studentPaymentOrder) {
         //获取总价
-        BigDecimal totalCostPrice = sellOrderList.stream().map(e->e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalCostPrice = sellOrderList.stream().map(SellOrder::getExpectAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
         //待分配金额
         BigDecimal waitAmount = studentPaymentOrder.getExpectAmount();
         for (int i = 0; i < sellOrderList.size(); i++) {
@@ -1369,7 +1373,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         
         for (String batchNo : split) {
             List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
-            if (musicGroupPaymentCalenders == null || musicGroupPaymentCalenders.size() == 0) {
+            if (CollectionUtils.isEmpty(musicGroupPaymentCalenders)) {
                 throw new BizException("缴费项目不存在");
             }
             for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) {
@@ -1410,7 +1414,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         if (studentIds == null) {
             studentIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentStudentIds(calenderId);
         }
-        if (studentIds.size() > 0) {
+        if (CollectionUtils.isNotEmpty(studentIds)) {
             String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL_MDAYA);
             StringBuffer memo = new StringBuffer("4?").append(baseUrl).append("/#/musicGroupRenew?calenderId=").append(calenderId).append("&id=").append(musicGroup.getId());
             Map<Integer, String> push = new HashMap<>(studentIds.size());
@@ -1421,7 +1425,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 
             //获取未缴费且不是0元的学员列表
             Map<Integer, String> studentMaps = MapUtil.convertMybatisMap(musicGroupPaymentCalenderDetailDao.queryNoPaymentAndNotZeroStudent(calenderId, studentIds));
-            if (studentMaps.size() > 0) {
+            if (!studentMaps.isEmpty()) {
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_WAIT_RENEW_MESSAGE, studentMaps,
                         null, 0, memo.toString(), null, musicGroup.getName());
             }
@@ -1432,7 +1436,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public void revoke(String batchNo) {
         List<MusicGroupPaymentCalender> calenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
-        if (calenders.size() == 0) {
+        if (CollectionUtils.isEmpty(calenders)) {
             throw new BizException("缴费批次不存在");
         }
         SysUser sysUser = sysUserService.getUser();
@@ -1475,9 +1479,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = musicGroupPaymentCalenderDao.queryCalenderPage(params);
-            Set<Integer> organIdList = dataList.stream().map(e -> e.getOrganId()).collect(Collectors.toSet());
+            Set<Integer> organIdList = dataList.stream().map(MusicGroupPaymentCalenderResultDto::getOrganId).collect(Collectors.toSet());
             Map<Integer, String> organNameMap = getMap("organization", "id_", "name_", organIdList, queryInfo.getTenantId(), Integer.class, String.class);
-            List<Integer> operatorIds = dataList.stream().map(e -> e.getOperator()).collect(Collectors.toList());
+            List<Integer> operatorIds = dataList.stream().map(MusicGroupPaymentCalender::getOperator).collect(Collectors.toList());
             operatorIds.removeAll(Collections.singleton(null));
             Map<Integer, String> realNameMap = getMap("sys_user", "id_", "real_name_", operatorIds, queryInfo.getTenantId(), Integer.class, String.class);
             dataList.forEach(e -> {
@@ -1531,14 +1535,19 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     }
 
     @Override
-    public BigDecimal getMemberAmount(Long calenderId) {
-        return getActualAmount(musicGroupPaymentCalenderMemberService.findByCalenderId(calenderId));
+    public BigDecimal getMemberAmount(List<Long> calenderMemberIdList) {
+        List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberService.findByIds(calenderMemberIdList);
+        if (CollectionUtils.isEmpty(calenderMembers)) {
+            return BigDecimal.ZERO;
+        }
+        //汇总实际金额
+        return calenderMembers.stream().map(MusicGroupPaymentCalenderBase::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
     }
 
     @Override
     public BigDecimal getActivityAmount(List<Long> buyCalenderActivityIdList) {
         List<MusicGroupPaymentCalenderActivity> activityList = musicGroupPaymentCalenderActivityService.findByIds(buyCalenderActivityIdList);
-        return activityList.stream().map(e -> e.getActualAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
+        return activityList.stream().map(MusicGroupPaymentCalenderBase::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
     }
 
     @Override
@@ -1573,7 +1582,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     }
 
     @Override
-    public Object queryUser(MusicGroupPaymentCalenderQueryInfo queryInfo) {
+    public List<Map<String,String>> queryUser(MusicGroupPaymentCalenderQueryInfo queryInfo) {
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
         if ("MUSIC".equals(queryInfo.getType())) {

+ 29 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -465,13 +465,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 	public void importStudentToMusicGroup1(List<MusicGroupPaymentImportDto> importDtos, MusicGroupPaymentCalender calender) throws Exception {
 		String musicGroupId = calender.getMusicGroupId();
 		//查询导入的声部是否正确
-    	List<String> subjectNameList = importDtos.stream().distinct().map(t->t.getSubjectName()).distinct().collect(Collectors.toList());
+    	List<String> subjectNameList = importDtos.stream().distinct().map(MusicGroupPaymentImportDto::getSubjectName).distinct().collect(Collectors.toList());
 
     	List<MusicGroupSubjectPlan> musicGroupSubjectPlanList = musicGroupSubjectPlanDao.getMusicSubjectClassPlan(musicGroupId);
 
     	Map<String,Integer> subjectMap = musicGroupSubjectPlanList.stream().collect(Collectors.toMap(MusicGroupSubjectPlan :: getSubName, MusicGroupSubjectPlan :: getSubjectId));
 
-    	List<String> allSubjectNameList = musicGroupSubjectPlanList.stream().map(t -> t.getSubName()).collect(Collectors.toList());
+    	List<String> allSubjectNameList = musicGroupSubjectPlanList.stream().map(MusicGroupSubjectPlan::getSubName).collect(Collectors.toList());
 
     	for(String subName : subjectNameList){
     		if(!allSubjectNameList.contains(subName)){
@@ -481,10 +481,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		Date now = new Date();
 		Long calenderId = calender.getId();
 		Boolean freeFlag = calender.getCurrentTotalAmount().compareTo(BigDecimal.ZERO) == 0;
-		List<String> phones = importDtos.stream().map(e -> e.getPhone()).collect(Collectors.toList());
+		List<String> phones = importDtos.stream().map(MusicGroupPaymentImportDto::getPhone).collect(Collectors.toList());
         List<BasicUserDto> userList = teacherDao.queryUserByPhones(phones);
 //		List<String> existPhones = studentDao.queryExistStuByPhone(phones);
-		Map<String, BasicUserDto> userDtoMap = userList.stream().collect(Collectors.groupingBy(e -> e.getPhone(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+		Map<String, BasicUserDto> userDtoMap = userList.stream().collect(Collectors.groupingBy(BasicUserDto::getPhone, Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
 		Organization organization = organizationDao.get(calender.getOrganId());
 		//检查用户是否已入团或在其他机构已注册
 		List<StudentRegistration> allList = new ArrayList<>();
@@ -493,7 +493,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		Student student = null;
 		Integer applyNum = 0;
 		MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
-		MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberDao.findByCalenderId(calenderId);
+		List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberDao.findByCalenderId(calenderId);
 		MusicGroupPaymentCalenderRepair calenderRepair = musicGroupPaymentCalenderRepairDao.findByCalenderId(calenderId);
 		List<MusicGroupPaymentCalenderActivity> calenderActivities = musicGroupPaymentCalenderActivityDao.findByCalenderId(calenderId);
 		List<MusicGroupPaymentCalenderCourseSettings> courseSettings = musicGroupPaymentCalenderCourseSettingsDao.queryCalenderCourseSettings(calenderId);
@@ -589,7 +589,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
 			studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
 			studentPaymentOrderService.insert(studentPaymentOrder);
-			List<StudentPaymentOrderDetail> orderDetails = studentRegistrationService.addOrder1(studentPaymentOrder, calender, courseSettings, calenderMember, calenderRepair, calenderActivities);
+			List<StudentPaymentOrderDetail> orderDetails = studentRegistrationService.addOrder1(studentPaymentOrder,
+					calender,
+					courseSettings,
+					calenderMembers,
+					calenderRepair,
+					calenderActivities);
 			studentPaymentRouteOrderService.addRouteOrder(orderNo, calender.getOrganId(), calender.getCurrentTotalAmount());
 			studentPaymentOrderDetailService.addOrderDetailTo1(studentPaymentOrder, musicGroup, studentRegistration,orderDetails);
 		}
@@ -1165,7 +1170,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 					}
 				}
 				MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
-				MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberDao.findByCalenderId(calenderId);
+				List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberDao.findByCalenderId(calenderId);
 				MusicGroupPaymentCalenderRepair calenderRepair = musicGroupPaymentCalenderRepairDao.findByCalenderId(calenderId);
 				List<MusicGroupPaymentCalenderActivity> calenderActivities = musicGroupPaymentCalenderActivityDao.findByCalenderId(calenderId);
 				List<MusicGroupPaymentCalenderCourseSettings> courseSettings = musicGroupPaymentCalenderCourseSettingsDao.queryCalenderCourseSettings(calenderId);
@@ -1195,7 +1200,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 					studentPaymentOrderDao.insert(studentPaymentOrder);
 					StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentPaymentOrder.getUserId(), calender.getMusicGroupId());
 					//支付成功后处理课程、云教练、活动等数据
-					List<StudentPaymentOrderDetail> orderDetails = studentRegistrationService.addOrder1(studentPaymentOrder, calender, courseSettings, calenderMember, calenderRepair, calenderActivities);
+					List<StudentPaymentOrderDetail> orderDetails = studentRegistrationService.addOrder1(studentPaymentOrder,
+							calender,
+							courseSettings,
+							calenderMembers,
+							calenderRepair,
+							calenderActivities);
 					studentPaymentRouteOrderService.addRouteOrder(orderNo, calender.getOrganId(), calender.getCurrentTotalAmount());
 					studentPaymentOrderDetailService.addOrderDetailTo1(studentPaymentOrder, musicGroup, studentRegistration,orderDetails);
 				}
@@ -1213,11 +1223,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     	}
 
     	boolean isGiveAccessories = musicGroup.getIsGiveAccessories();
+		boolean buyCloudTeacher = CollectionUtils.isNotEmpty(registerPayDto.getBuyCalenderMemberId());
 
-        MusicGroupApplyGoodsDto goodsDto = new MusicGroupApplyGoodsDto();
+		MusicGroupApplyGoodsDto goodsDto = new MusicGroupApplyGoodsDto();
         //乐器及打包辅件价格
         List<MusicGroupSubjectGoodsGroup> goodsGroups;
-        if (registerPayDto.getGoodsGroups() != null && registerPayDto.getGoodsGroups().size() > 0) {
+		if (registerPayDto.getGoodsGroups() != null && registerPayDto.getGoodsGroups().size() > 0) {
             String goodsGroupIds = registerPayDto.getGoodsGroups().keySet().stream().map(Object::toString).collect(Collectors.joining(","));
             goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(goodsGroupIds);
             goodsDto.setGoodsGroups(goodsGroups);
@@ -1225,7 +1236,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 Map<String, BigDecimal> groupType = JSONObject.parseObject(goodsGroup.getKitGroupPurchaseTypeJson(), new TypeReference<Map<String, BigDecimal>>() {
                 });
 
-                if(isGiveAccessories && registerPayDto.getBuyCloudTeacher()){
+                if(isGiveAccessories && buyCloudTeacher){
                 	if (goodsGroup.getType().equals(GoodsType.ACCESSORIES)) {
                 		continue;
                 	}
@@ -1248,7 +1259,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 goodsGroup.setGoodsList(goodsService.findGoodsByIds(goodsGroup.getGoodsIdList()));
 
                 //齐齐哈尔走特殊规则
-                if (calender.getOrganId() == 55 && (registerPayDto.getNewCourse() == null || registerPayDto.getNewCourse().size() == 0) && !(registerPayDto.getBuyCloudTeacher() || registerPayDto.getBuyCloudTeacherPlus())) {
+                if (calender.getOrganId() == 55 && (CollectionUtils.isEmpty(registerPayDto.getNewCourse())) && !buyCloudTeacher) {
                     //取商品零售价
                     if (StringUtils.isNotBlank(goodsGroup.getGoodsIdList())) {
                         List<Goods> goodsList = goodsDao.findGoodsByIds(goodsGroup.getGoodsIdList());
@@ -1271,7 +1282,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         List<MusicGroupPaymentCalenderCourseSettings> newCourses;
         //因为前端会传newCourse过来所以这里加了合班缴费判断
         if (calender.getPaymentType() != PaymentType.SPAN_GROUP_CLASS_ADJUST &&
-                calender.getPayUserType() == PayUserType.STUDENT && registerPayDto.getNewCourse() != null && registerPayDto.getNewCourse().size() > 0) {
+                calender.getPayUserType() == PayUserType.STUDENT && CollectionUtils.isNotEmpty(registerPayDto.getNewCourse())) {
             newCourses = musicGroupPaymentCalenderCourseSettingsDao.getCalenderCourseSettings(registerPayDto.getNewCourse());
             for (MusicGroupPaymentCalenderCourseSettings calenderCourseSetting : newCourses) {
                 if (goodsDto.isRemitCourseRFeeFlag()) {
@@ -1284,7 +1295,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         //活动价格
         List<Long> buyCalenderActivityIdList = registerPayDto.getBuyCalenderActivityId();
-        if (buyCalenderActivityIdList != null && buyCalenderActivityIdList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(buyCalenderActivityIdList)) {
             goodsDto.setOrderAmount(goodsDto.getOrderAmount().add(musicGroupPaymentCalenderService.getActivityAmount(buyCalenderActivityIdList)));
         }
         //乐器保养价格
@@ -1292,13 +1303,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             goodsDto.setOrderAmount(goodsDto.getOrderAmount().add(musicGroupPaymentCalenderService.getRepairAmount(calender.getId())));
         }
         //云教练价格和订单
-        if (registerPayDto.getBuyCloudTeacher()) {
-            goodsDto.setOrderAmount(goodsDto.getOrderAmount().add(musicGroupPaymentCalenderService.getMemberAmount(calender.getId())));
+        if (buyCloudTeacher) {
+            goodsDto.setOrderAmount(goodsDto.getOrderAmount().add(musicGroupPaymentCalenderService.getMemberAmount(registerPayDto.getBuyCalenderMemberId())));
         }
         //合班缴费
         List<MusicGroupPaymentCalenderStudentDetail> studentDetails = musicGroupPaymentCalenderStudentDetailDao.findByBatchNoAndUserId(registerPayDto.getBatchNo(), registerPayDto.getUserId());
-        if (studentDetails != null && studentDetails.size() > 0) {
-            goodsDto.setOrderAmount(goodsDto.getOrderAmount().add(studentDetails.stream().map(e -> e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add)));
+        if (CollectionUtils.isNotEmpty(studentDetails)) {
+            goodsDto.setOrderAmount(goodsDto.getOrderAmount().add(studentDetails.stream().map(MusicGroupPaymentCalenderStudentDetail::getCourseCurrentPrice).reduce(BigDecimal.ZERO, BigDecimal::add)));
         }
         return goodsDto;
     }

+ 21 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -11,10 +11,9 @@ import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.service.*;
-import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.common.entity.ImResult;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
@@ -24,6 +23,7 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.web.WebFeignService;
+import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -466,9 +466,11 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Override
     public List<StudentManageBaseInfoOfMusicGroupDto> findStudentMusicGroupsByUserId(Integer userId) {
         List<StudentManageBaseInfoOfMusicGroupDto> musicGroups = studentManageDao.findStudentMusicGroupsByUserId(userId);
+        List<CloudTeacherOrderWrapper.StudentMemberDetail> effectiveCloudTeacherOrder = cloudTeacherOrderService.getEffectiveCloudTeacherOrder(Lists.newArrayList(userId));
         //获取学员报名时所选乐器
         if (musicGroups.size() > 0) {
             for (StudentManageBaseInfoOfMusicGroupDto e : musicGroups) {
+                e.setStudentMemberDetails(effectiveCloudTeacherOrder);
                 List<UserGoodsDto> userGoods = new ArrayList<>();
                 SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(e.getUserId(), e.getMusicGroupId());
                 if (studentLastChange != null) {
@@ -597,10 +599,10 @@ public class StudentManageServiceImpl implements StudentManageService {
         MapUtil.populateMap(params, queryInfo);
         List<MusicGroupStudentsDto> dataList = new ArrayList<>();
         List<StudentRegistration> studentRegistrations = studentRegistrationDao.getMusicGroupStu(queryInfo.getMusicGroupId());
-        if (studentRegistrations.size() == 0) {
+        if (CollectionUtils.isEmpty(studentRegistrations)) {
             return pageInfo;
         }
-        List<Integer> userIds = studentRegistrations.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+        List<Integer> userIds = studentRegistrations.stream().map(StudentRegistration::getUserId).collect(Collectors.toList());
         if (queryInfo.getHasCourse() != null) {
             //有剩余课程的学员
             List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(userIds, "VIP,PRACTICE");
@@ -623,7 +625,7 @@ public class StudentManageServiceImpl implements StudentManageService {
         }
         params.put("userIds", userIds);
         int count = studentManageDao.countMusicGroupStudent(params);
-        if (queryInfo.getIsExport() && count > 50000) {
+        if (queryInfo.isExport() && count > 50000) {
             throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
         }
         pageInfo.setTotal(count);
@@ -643,7 +645,7 @@ public class StudentManageServiceImpl implements StudentManageService {
                     }
                 }
             }
-            List<Integer> collect = dataList.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+            List<Integer> collect = dataList.stream().map(MusicGroupStudentsDto::getUserId).collect(Collectors.toList());
             List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(collect, "VIP,PRACTICE");
             List<SubjectChange> waitPayChange = subjectChangeDao.getMusicGroupWaitPay(queryInfo.getMusicGroupId());
             Map<Integer, List<SubjectChange>> studentWaitPayChange = waitPayChange.stream().collect(Collectors.groupingBy(SubjectChange::getStudentId));
@@ -656,7 +658,16 @@ public class StudentManageServiceImpl implements StudentManageService {
             Map<Integer, List<CloudTeacherOrder>> studentCloudTeacherMap = studentCloudTeacherOrders.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
             Date nowDate = new Date();
             Map<Long, String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(new HashSet<>(collect), null));
-            dataList.forEach(e -> {
+
+            //获取生效中的会员详情列表
+            List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails = cloudTeacherOrderService.getEffectiveCloudTeacherOrder(collect);
+            for (MusicGroupStudentsDto e : dataList) {
+                //汇总学员会员信息
+                if (!CollectionUtils.isEmpty(studentMemberDetails)) {
+                    List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetailList =
+                            studentMemberDetails.stream().filter(s -> s.getStudentId().equals(e.getUserId())).collect(Collectors.toList());
+                    e.setCloudTeacherOrderList(studentMemberDetailList);
+                }
                 //如果会员已过期、是否有未生效的会员
                 if (e.getMemberRankSettingId() == null) {
                     String s = cloudMap.get(e.getUserId().longValue());
@@ -674,7 +685,7 @@ public class StudentManageServiceImpl implements StudentManageService {
                 }
                 if (studentCloudTeacherMap.containsKey(e.getUserId())) {
                     List<CloudTeacherOrder> cloudTeacherOrders = studentCloudTeacherMap.get(e.getUserId());
-                    if (cloudTeacherOrders != null && cloudTeacherOrders.size() > 0) {
+                    if (!CollectionUtils.isEmpty(cloudTeacherOrders)) {
                         BigDecimal cloudAmount = BigDecimal.ZERO;
                         for (CloudTeacherOrder cloudTeacherOrder : cloudTeacherOrders) {
                             if (cloudTeacherOrder.getEndTime() == null || DateUtil.stringToDate(DateUtil.format(cloudTeacherOrder.getEndTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT), DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
@@ -685,14 +696,14 @@ public class StudentManageServiceImpl implements StudentManageService {
                         e.setCloudTeacherAmount(cloudAmount);
                     }
                 }
-            });
+            }
         }
         pageInfo.setRows(dataList);
         return pageInfo;
     }
 
     @Override
-    public Object musicGroupStudentsSum(String musicGroupId) {
+    public Map<String, Object> musicGroupStudentsSum(String musicGroupId) {
         Map<String, Object> resultMap = new HashMap<>(4);
         //乐团在读人数
         resultMap.put("studying", studentManageDao.countStudyNum(musicGroupId));

+ 51 - 41
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -530,7 +530,7 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
                         orderTotalAmount = orderTotalAmount.add(subjectChange.getChangeAccessoriesPrice());
                     }
                 }
-            } else if (isChangeAccessories == false || isChangeMusical == false) {
+            } else if (!isChangeAccessories || !isChangeMusical) {
                 if (subjectChange != null) {
                     if(deliveryStatus != null){
     					if (deliveryStatus == 0 && StringUtils.isNotBlank(subjectChange.getDeliveryBatchNo())) {
@@ -621,8 +621,8 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
             if (spod.getType() == OrderDetailTypeEnum.ACCESSORIES || spod.getType() == OrderDetailTypeEnum.MUSICAL
                     || spod.getType() == OrderDetailTypeEnum.TEACHING) {
                 List<Goods> goods = goodsService.findGoodsByIds(spod.getGoodsIdList());
-                if (goods != null && goods.size() > 0) {
-                    spod.setName(goods.stream().map(t -> t.getName()).collect(Collectors.joining(",")));
+                if (CollectionUtils.isNotEmpty(goods)) {
+                    spod.setName(goods.stream().map(Goods::getName).collect(Collectors.joining(",")));
                 }
             }
         }
@@ -706,7 +706,7 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 
         //活动小课包处理
         List<StudentPaymentOrderDetail> activity = allDetails.stream().filter(o -> o.getType() == PRACTICE || o.getType() == VIP).collect(Collectors.toList());
-        if (activity != null && activity.size() > 0) {
+        if (CollectionUtils.isNotEmpty(activity)) {
             activityUserMapperService.addOrderDetail2Activity(studentPaymentOrder, activity);
         }
 
@@ -727,30 +727,36 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
                 studentRegistration.setHasCloudTeacher(1);
                 //如果是报名订单,要处理云教练费用、以及溢出课费
             }
+            List<StudentPaymentOrderDetail> memberDetailList = allDetails.stream().filter(o -> o.getType() == CLOUD_TEACHER).collect(Collectors.toList());
+            List<Long> calenderMemberIds = memberDetailList.stream().map(StudentPaymentOrderDetail::getStudentInstrumentId).collect(Collectors.toList());
+            List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberDao.findByIds(calenderMemberIds);
             if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
                 //获取云教练溢出费用
-                MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberDao.findByCalenderId(paymentCalenderDetail.getMusicGroupPaymentCalenderId());
-                BigDecimal courseIncome = memberFeeSettingService.getAmount(musicGroup.getOrganId(), 1, calenderMember.getPeriod(),
-                        calenderMember.getNum(), MemberFeeSettingServiceImpl::getIncome);
-                if(calenderMember.getActualAmount().compareTo(courseIncome) > 0){
-                    BigDecimal subtract = calenderMember.getActualAmount().subtract(courseIncome);
-                    //累加充值金额
-                    studentRegistrationDao.updateCourseFee(studentRegistration.getId(),subtract);
-                    //添加日志
-                    StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
-                    studentCourseFeeDetail.setTenantId(tenantId);
-                    studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
-                    studentCourseFeeDetail.setAmount(subtract);
-                    studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(subtract));
-                    studentCourseFeeDetail.setMemo("会员团,购买云教练赠送课费");
-                    studentCourseFeeDetail.setOperator(userId);
-                    studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
+                if (CollectionUtils.isNotEmpty(calenderMembers)) {
+                    for (MusicGroupPaymentCalenderMember calenderMember : calenderMembers) {
+                        BigDecimal courseIncome = memberFeeSettingService.getAmount(musicGroup.getOrganId(), 1, calenderMember.getPeriod(),
+                                calenderMember.getNum(), MemberFeeSettingServiceImpl::getIncome);
+                        if(calenderMember.getActualAmount().compareTo(courseIncome) > 0){
+                            BigDecimal subtract = calenderMember.getActualAmount().subtract(courseIncome);
+                            //累加充值金额
+                            studentRegistrationDao.updateCourseFee(studentRegistration.getId(),subtract);
+                            //添加日志
+                            StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
+                            studentCourseFeeDetail.setTenantId(tenantId);
+                            studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
+                            studentCourseFeeDetail.setAmount(subtract);
+                            studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(subtract));
+                            studentCourseFeeDetail.setMemo("会员团,购买云教练赠送课费");
+                            studentCourseFeeDetail.setOperator(userId);
+                            studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
+                        }
+                    }
                 }
             }
-            BigDecimal cloudTeacherFee = allDetails.stream().filter(o -> o.getType() == CLOUD_TEACHER)
+            BigDecimal cloudTeacherFee = memberDetailList.stream()
                     .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            cloudTeacherOrderService.addOrderDetail2CloudTeacher(studentPaymentOrder, cloudTeacherFee);
+            cloudTeacherOrderService.addOrderDetail2CloudTeacher(studentPaymentOrder, cloudTeacherFee,calenderMembers);
         }
     }
 
@@ -805,7 +811,7 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
 
         //活动小课包处理
         List<StudentPaymentOrderDetail> activity = allDetails.stream().filter(o -> o.getType() == PRACTICE || o.getType() == VIP).collect(Collectors.toList());
-        if (activity != null && activity.size() > 0) {
+        if (CollectionUtils.isNotEmpty(activity)) {
             activityUserMapperService.addOrderDetail2Activity(studentPaymentOrder, activity);
         }
 
@@ -826,30 +832,34 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
                 studentRegistration.setHasCloudTeacher(1);
                 //如果是报名订单,要处理云教练费用、以及溢出课费
             }
+            List<StudentPaymentOrderDetail> memberDetailList = allDetails.stream().filter(o -> o.getType() == CLOUD_TEACHER).collect(Collectors.toList());
+            List<Long> calenderMemberIds = memberDetailList.stream().map(StudentPaymentOrderDetail::getStudentInstrumentId).collect(Collectors.toList());
+            List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberDao.findByIds(calenderMemberIds);
             if(musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
                 //获取云教练溢出费用
-                MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberDao.findByCalenderId(paymentCalenderDetail.getMusicGroupPaymentCalenderId());
-                BigDecimal courseIncome = memberFeeSettingService.getAmount(musicGroup.getOrganId(), 1, calenderMember.getPeriod(),
-                        calenderMember.getNum(), MemberFeeSettingServiceImpl::getIncome);
-                if(calenderMember.getActualAmount().compareTo(courseIncome) > 0){
-                    BigDecimal subtract = calenderMember.getActualAmount().subtract(courseIncome);
-                    //累加充值金额
-                    studentRegistrationDao.updateCourseFee(studentRegistration.getId(),subtract);
-                    //添加日志
-                    StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
-                    studentCourseFeeDetail.setTenantId(tenantId);
-                    studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
-                    studentCourseFeeDetail.setAmount(subtract);
-                    studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(subtract));
-                    studentCourseFeeDetail.setMemo("会员团,购买云教练赠送课费");
-                    studentCourseFeeDetail.setOperator(userId);
-                    studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
+                for (MusicGroupPaymentCalenderMember calenderMember : calenderMembers) {
+                    BigDecimal courseIncome = memberFeeSettingService.getAmount(musicGroup.getOrganId(), 1, calenderMember.getPeriod(),
+                            calenderMember.getNum(), MemberFeeSettingServiceImpl::getIncome);
+                    if(calenderMember.getActualAmount().compareTo(courseIncome) > 0){
+                        BigDecimal subtract = calenderMember.getActualAmount().subtract(courseIncome);
+                        //累加充值金额
+                        studentRegistrationDao.updateCourseFee(studentRegistration.getId(),subtract);
+                        //添加日志
+                        StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
+                        studentCourseFeeDetail.setTenantId(tenantId);
+                        studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
+                        studentCourseFeeDetail.setAmount(subtract);
+                        studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(subtract));
+                        studentCourseFeeDetail.setMemo("会员团,购买云教练赠送课费");
+                        studentCourseFeeDetail.setOperator(userId);
+                        studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
+                    }
                 }
             }
-            BigDecimal cloudTeacherFee = allDetails.stream().filter(o -> o.getType() == CLOUD_TEACHER)
+            BigDecimal cloudTeacherFee = memberDetailList.stream()
                     .map(o -> o.getPrice().subtract(o.getRemitFee() == null ? BigDecimal.ZERO : o.getRemitFee()))
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            cloudTeacherOrderService.addOrderDetail2CloudTeacher(studentPaymentOrder, cloudTeacherFee);
+            cloudTeacherOrderService.addOrderDetail2CloudTeacher(studentPaymentOrder, cloudTeacherFee,calenderMembers);
         }
     }
 

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -817,7 +817,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             if (order.getOrderDetailList() == null) {
                 continue;
             }
-            
+
             BigDecimal organShareProfit = BigDecimal.ZERO;
             for (StudentPaymentOrderDetail studentPaymentOrderDetail : order.getOrderDetailList()) {
                 if (studentPaymentOrderDetail.getGoodsList() == null) {
@@ -827,7 +827,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 String childGoodIds = "";
                 for (Goods goods : studentPaymentOrderDetail.getGoodsList()) {
                     if (StringUtils.isNotBlank(goods.getComplementGoodsIdList())) {
-                        childGoodIds += StringUtils.isNotBlank(childGoodIds) ? "," : "" + goods.getComplementGoodsIdList();
+                        childGoodIds += StringUtils.isNotBlank(childGoodIds) ? "," : goods.getComplementGoodsIdList();
                     }
                 }
                 if (StringUtils.isNotBlank(childGoodIds)) {

+ 43 - 35
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -547,7 +547,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
         MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(studentPaymentOrder.getCalenderId());
 
-        boolean isGiveAccessories = musicGroup.getIsGiveAccessories() == null ? false : musicGroup.getIsGiveAccessories();
+        boolean isGiveAccessories = musicGroup.getIsGiveAccessories() != null && musicGroup.getIsGiveAccessories();
         
         Date date = new Date();
         List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<>();
@@ -556,6 +556,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         List<MusicGroupSubjectGoodsGroup> goodsGroups = goodsDto.getGoodsGroups();
         List<MusicGroupPaymentCalenderCourseSettings> newCourses = goodsDto.getNewCourses();
         BigDecimal remitFee = goodsDto.getRemitFee();
+        Boolean buyCloudTeacher = CollectionUtils.isNotEmpty(registerPayDto.getBuyCalenderMemberId());
         if (CollectionUtils.isNotEmpty(goodsGroups)) {
         	
         	BigDecimal organShareProfit = BigDecimal.ZERO;
@@ -577,9 +578,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
                 BigDecimal goodsPrice = new BigDecimal(0);
                 
-				if (!(type == OrderDetailTypeEnum.ACCESSORIES && (isGiveAccessories && registerPayDto.getBuyCloudTeacher()))) {
+				if (!(type == OrderDetailTypeEnum.ACCESSORIES && (isGiveAccessories && buyCloudTeacher))) {
 
-	                if (studentRegistration.getOrganId() == 55 && (newCourses == null || newCourses.size() == 0) && !registerPayDto.getBuyCloudTeacher()) {
+	                if (studentRegistration.getOrganId() == 55 && (CollectionUtils.isEmpty(newCourses)) && !buyCloudTeacher) {
 	                    //取商品零售价
 	                    if (StringUtils.isNotBlank(goodsGroup.getGoodsIdList())) {
 	                        List<Goods> goodsList = goodsDao.findGoodsByIds(goodsGroup.getGoodsIdList());
@@ -700,21 +701,24 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
 
         //云教练/云教练+  todo  团练宝
-        if (registerPayDto.getBuyCloudTeacher() || (Objects.nonNull(calender) && calender.getPayUserType() == MusicGroupPaymentCalender.PayUserType.SCHOOL)) {
-            MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.findByCalenderId(studentPaymentOrder.getCalenderId());
-            if(Objects.nonNull(calenderMember)){
-                StudentPaymentOrderDetail cloudTeacherOrderDetail = new StudentPaymentOrderDetail();
-                cloudTeacherOrderDetail.setType(OrderDetailTypeEnum.CLOUD_TEACHER);
-                cloudTeacherOrderDetail.setPrice(calenderMember.getActualAmount());
-                if(calender.getPayUserType() == MusicGroupPaymentCalender.PayUserType.SCHOOL){
-                    cloudTeacherOrderDetail.setPrice(BigDecimal.ZERO);
+        if (buyCloudTeacher || (Objects.nonNull(calender) && calender.getPayUserType() == MusicGroupPaymentCalender.PayUserType.SCHOOL)) {
+            List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberService.findByIds(registerPayDto.getBuyCalenderMemberId());
+            if(CollectionUtils.isNotEmpty(calenderMembers)){
+                for (MusicGroupPaymentCalenderMember calenderMember : calenderMembers) {
+                    StudentPaymentOrderDetail cloudTeacherOrderDetail = new StudentPaymentOrderDetail();
+                    cloudTeacherOrderDetail.setType(OrderDetailTypeEnum.CLOUD_TEACHER);
+                    cloudTeacherOrderDetail.setPrice(calenderMember.getActualAmount());
+                    if(calender.getPayUserType() == MusicGroupPaymentCalender.PayUserType.SCHOOL){
+                        cloudTeacherOrderDetail.setPrice(BigDecimal.ZERO);
+                    }
+                    cloudTeacherOrderDetail.setRemitFee(BigDecimal.ZERO);
+                    cloudTeacherOrderDetail.setCreateTime(date);
+                    cloudTeacherOrderDetail.setUpdateTime(date);
+                    cloudTeacherOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+                    cloudTeacherOrderDetail.setIsRenew(0);
+                    cloudTeacherOrderDetail.setStudentInstrumentId(calenderMember.getId());
+                    studentPaymentOrderDetailList.add(cloudTeacherOrderDetail);
                 }
-                cloudTeacherOrderDetail.setRemitFee(BigDecimal.ZERO);
-                cloudTeacherOrderDetail.setCreateTime(date);
-                cloudTeacherOrderDetail.setUpdateTime(date);
-                cloudTeacherOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-                cloudTeacherOrderDetail.setIsRenew(0);
-                studentPaymentOrderDetailList.add(cloudTeacherOrderDetail);
             }
         }
 
@@ -762,7 +766,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         //增加缴费学生数,0元订单不增加报名人数(没买云教练/云教练+的)
         boolean paidZeroFlag = false;
 
-        MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getActualSubjectId());
+        MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(),
+                studentRegistration.getActualSubjectId());
 
         if (studentRegistration.getMusicGroupStatus() != StudentMusicGroupStatusEnum.NORMAL) {
             // 判断之前是否已有订单
@@ -771,16 +776,16 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
             int paidNum = musicOneSubjectClassPlan.getPaidStudentNum() == null ? 0 : musicOneSubjectClassPlan.getPaidStudentNum();
             int paidZeroNum = musicOneSubjectClassPlan.getPaidZeroNum() == null ? 0 : musicOneSubjectClassPlan.getPaidZeroNum();
-            if ((musicGroup.getCourseViewType().equals(CourseViewTypeEnum.MEMBER_FEE) && !registerPayDto.getBuyCloudTeacher() && StringUtils.isBlank(maintenanceGoodsId))) {
+            if ((musicGroup.getCourseViewType().equals(CourseViewTypeEnum.MEMBER_FEE) && !buyCloudTeacher && StringUtils.isBlank(maintenanceGoodsId))) {
                 if (studentRegistration.getPaymentStatus() != YES) {
                     paidZeroFlag = true;
                 }
-                if (studentRegistration.getNoneNeedCloudTeacher().equals(1) && (oldStudentPaymentOrderList == null || oldStudentPaymentOrderList.size() == 0)) {
+                if (studentRegistration.getNoneNeedCloudTeacher().equals(1) && (CollectionUtils.isEmpty(oldStudentPaymentOrderList))) {
                     musicOneSubjectClassPlan.setPaidZeroNum(paidZeroNum + 1);
                     musicOneSubjectClassPlan.setPaidStudentNum(paidNum + 1);
                 }
             } else {
-                if (oldStudentPaymentOrderList == null || oldStudentPaymentOrderList.size() == 0) {
+                if (CollectionUtils.isEmpty(oldStudentPaymentOrderList)) {
                     musicOneSubjectClassPlan.setPaidStudentNum(paidNum + 1);
                 }
             }
@@ -811,7 +816,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     public List<StudentPaymentOrderDetail> addOrder1(StudentPaymentOrder studentPaymentOrder,
                           MusicGroupPaymentCalender calender,
                           List<MusicGroupPaymentCalenderCourseSettings> newCourses,
-                          MusicGroupPaymentCalenderMember calenderMember,
+                          List<MusicGroupPaymentCalenderMember> calenderMembers,
                           MusicGroupPaymentCalenderRepair calenderRepair,
                           List<MusicGroupPaymentCalenderActivity> calenderActivities
                           ){
@@ -865,19 +870,22 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
 
         //云教练/云教练+  todo  团练宝
-        if(Objects.nonNull(calenderMember)){
-            StudentPaymentOrderDetail cloudTeacherOrderDetail = new StudentPaymentOrderDetail();
-            cloudTeacherOrderDetail.setType(OrderDetailTypeEnum.CLOUD_TEACHER);
-            cloudTeacherOrderDetail.setPrice(calenderMember.getActualAmount());
-            if(calender.getPayUserType() == MusicGroupPaymentCalender.PayUserType.SCHOOL){
-                cloudTeacherOrderDetail.setPrice(BigDecimal.ZERO);
-            }
-            cloudTeacherOrderDetail.setRemitFee(BigDecimal.ZERO);
-            cloudTeacherOrderDetail.setCreateTime(date);
-            cloudTeacherOrderDetail.setUpdateTime(date);
-            cloudTeacherOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-            cloudTeacherOrderDetail.setIsRenew(0);
-            studentPaymentOrderDetailList.add(cloudTeacherOrderDetail);
+        if(CollectionUtils.isNotEmpty(calenderMembers)){
+            for (MusicGroupPaymentCalenderMember calenderMember : calenderMembers) {
+                StudentPaymentOrderDetail cloudTeacherOrderDetail = new StudentPaymentOrderDetail();
+                cloudTeacherOrderDetail.setType(OrderDetailTypeEnum.CLOUD_TEACHER);
+                cloudTeacherOrderDetail.setPrice(calenderMember.getActualAmount());
+                if(calender.getPayUserType() == MusicGroupPaymentCalender.PayUserType.SCHOOL){
+                    cloudTeacherOrderDetail.setPrice(BigDecimal.ZERO);
+                }
+                cloudTeacherOrderDetail.setRemitFee(BigDecimal.ZERO);
+                cloudTeacherOrderDetail.setCreateTime(date);
+                cloudTeacherOrderDetail.setUpdateTime(date);
+                cloudTeacherOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+                cloudTeacherOrderDetail.setIsRenew(0);
+                cloudTeacherOrderDetail.setStudentInstrumentId(calenderMember.getId());
+                studentPaymentOrderDetailList.add(cloudTeacherOrderDetail);
+            }
         }
         //添加订单明细
         studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);

+ 35 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java

@@ -14,11 +14,13 @@ import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApplicationExtendCli
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.musicInstrument.CbsMusicalInstrumentWrapper;
 import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
 import com.ym.mec.biz.dal.dao.SysMusicScoreCategoriesDao;
 import com.ym.mec.biz.dal.dao.SysMusicScoreDao;
 import com.ym.mec.biz.dal.dto.ReasonDto;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
@@ -32,6 +34,7 @@ import com.ym.mec.util.collection.MapUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -65,6 +68,12 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
     @Resource
     private InstrumentService instrumentService;
 
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
+
+    @Autowired
+    private MemberRankCategoryMapperService memberRankCategoryMapperService;
+
     @Value("${openfeign-client.app-id:1745637981387108354}")
     public Long applicationId;
 
@@ -326,6 +335,32 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         PageInfo<SysMusicScore> pageInfo = this.queryPage(queryInfo);
         List<SysMusicScore> rows = pageInfo.getRows();
         dealMusicScoreData(rows);
+
+        // 根据用户会员判断是否锁定,免费曲目为试用
+        if (queryInfo.getUserType()!=null && ClientEnum.STUDENT==queryInfo.getUserType()) {
+            // 查询有效的会员
+            List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(queryInfo.getUserId());
+
+            // 获取会员的曲目分类
+            List<MemberRankCategoryMapper> categoryMapperList = memberRankCategoryMapperService.getByMemberRankId(activationVipIds);
+            if (CollectionUtils.isEmpty(categoryMapperList)) {
+                categoryMapperList = new ArrayList<>();
+            }
+            List<Integer> categoryIds = categoryMapperList.stream().map(MemberRankCategoryMapper::getCategoryId).distinct().collect(Collectors.toList());
+
+            // 判断曲目是否在分类中
+            for (SysMusicScore row : rows) {
+                if (categoryIds.contains(row.getCbsMusicCategoriesId())) {
+                    row.setUseStatus("UNLOCK");
+                } else if (StringUtils.isBlank(row.getRankIds())) {
+                    row.setUseStatus("FREE");
+                } else {
+                    row.setUseStatus("LOCK");
+                }
+            }
+        } else {
+            rows.forEach(o->o.setUseStatus("UNLOCK"));
+        }
         return pageInfo;
     }
 

+ 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;
     }
 

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

@@ -0,0 +1,75 @@
+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 = new ArrayList<>();
+        for (TenantMemberRankSetting tenantMemberRankSetting : list) {
+            TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd add = new TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd();
+            add.setMemberRankSettingId(tenantMemberRankSetting.getMemberRankSettingId());
+            add.setType(tenantMemberRankSetting.getType());
+            add.setMemberConfig(JSON.parseObject(tenantMemberRankSetting.getMemberConfig(), TenantMemberRankSettingWrapper.MemberConfig.class));
+            tenantMemberRankSettingAdds.add(add);
+        }
+//        List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> tenantMemberRankSettingAdds = JSON.parseArray(JSON.toJSONString(list), TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd.class);
+        // 学练宝ID集合
+        List<Integer> ids = tenantMemberRankSettingAdds.stream().map(TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd::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;
+    }
+}

+ 41 - 4
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"/>
@@ -48,6 +49,7 @@
         <result column="order_create_time_" property="studentPaymentOrder.createTime"/>
         <result column="name_" property="memberRankSetting.name"/>
         <result column="icon_" property="memberRankSetting.icon"/>
+        <result column="intro_" property="memberRankSetting.intro"/>
         <result column="music_group_id_" property="studentPaymentOrder.musicGroupId"/>
     </resultMap>
 
@@ -61,9 +63,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-->
@@ -231,7 +233,8 @@
     </select>
     
     <select id="queryOrderInfoByOrderId" resultMap="CloudTeacherOrderDto">
-	SELECT cto.*,spo.status_ trans_status_,spo.expect_amount_,mrs.name_,mrs.icon_ FROM cloud_teacher_order cto
+	SELECT cto.*,spo.status_ trans_status_,spo.expect_amount_,mrs.name_,mrs.icon_,mrs.intro_
+	FROM cloud_teacher_order cto
         left join student_payment_order spo on cto.order_id_ = spo.id_
         left join member_rank_setting mrs on mrs.id_ = cto.level_
         where spo.type_ = 'MEMBER' and order_id_ = #{orderId}
@@ -337,6 +340,7 @@
                ,cto.cancel_reason_ as cancelReason
                 ,cto.organ_id_ organId
                 ,cto.create_time_ createTime
+                ,cto.level_ memberRankId
         from cloud_teacher_order cto
         left join student s on cto.student_id_ = s.user_id_
         left join sys_user u on cto.student_id_ = u.id_
@@ -352,6 +356,9 @@
             <if test="musicGroupId != null and musicGroupId != ''">
             	AND sr.music_group_id_ = #{musicGroupId}
             </if>
+            <if test="memberRankId != null">
+                AND cto.level_ = #{memberRankId}
+            </if>
             <if test="queryCondition != null and queryCondition != ''">
                 AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
             </if>
@@ -391,6 +398,9 @@
             <if test="musicGroupId != null and musicGroupId != ''">
             	AND sr.music_group_id_ = #{musicGroupId}
             </if>
+            <if test="memberRankId != null">
+            	AND cto.level_ = #{memberRankId}
+            </if>
             <if test="queryCondition != null and queryCondition != ''">
                 AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
             </if>
@@ -452,7 +462,8 @@
             tor.order_no_ as orderNo,
             tor.trans_no_ as transNo,
             tor.created_time_ as orderTime,
-            cto.pay_amount_ as amount
+            cto.pay_amount_ as amount,
+            cto.level_ as memberRankId
         FROM tenant_order_record tor
         LEFT JOIN cloud_teacher_order cto ON tor.id_ = cto.platform_order_id_
         LEFT JOIN student s ON cto.student_id_ = s.user_id_
@@ -465,6 +476,9 @@
             <if test="orderNo != null and orderNo != ''">
                 AND tor.order_no_ LIKE CONCAT('%', #{orderNo}, '%')
             </if>
+            <if test="memberRankId != null">
+                AND cto.level_ = #{memberRankId}
+            </if>
             <if test="startTime != null">
                 <![CDATA[ AND tor.created_time_ >= #{startTime} ]]>
             </if>
@@ -610,4 +624,27 @@
         </if>
         group by mgpscd.music_group_id_,mgpscd.user_id_ order by mg.organ_id_,mg.id_
     </select>
+
+    <select id="countByMemberRankSettingId" resultType="int">
+        select count(1) from cloud_teacher_order where level_ = #{memberRankSettingId}
+    </select>
+    <select id="getActivationMaxTime" resultType="java.util.Date">
+        select max(end_time_) from cloud_teacher_order where student_id_ = #{studentId} and level_ = #{level} and status_ = 2
+    </select>
+    <select id="queryByUserIds" resultType="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
+        select * from cloud_teacher_order where student_id_ in
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+        <if test="status != null">
+            and status_ = #{status}
+            <if test="status == 2">
+                and end_time_ &gt;= NOW()
+            </if>
+        </if>
+    </select>
+
+    <select id="getActivationVipIds" resultType="java.lang.Integer">
+        select distinct level_ from cloud_teacher_order where student_id_ = #{studentId}  and end_time_ &gt;=now() and status_ = 2
+    </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>

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/MemberRankOrganizationFeeMapperMapper.xml

@@ -120,4 +120,14 @@
 		WHERE organ_id_ = #{organId} AND member_rank_setting_id_ = #{memberRankSettingId}
 		LIMIT 1
 	</select>
+    <select id="queryByOrganId" resultMap="MemberRankOrganizationFeeMapper">
+		SELECT * FROM member_rank_organization_fee_mapper WHERE organ_id_ = #{organId}
+	</select>
+
+	<select id="queryByOrganIds" resultMap="MemberRankOrganizationFeeMapper">
+        SELECT * FROM member_rank_organization_fee_mapper WHERE organ_id_ IN
+        <foreach collection="orgIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+    </select>
 </mapper>

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/MemberRankPrivilegesMapper.xml

@@ -63,4 +63,10 @@
     <select id="hasPrivileges" resultType="java.lang.Boolean">
 		SELECT COUNT(member_privileges_id_) > 0 FROM member_rank_privileges WHERE member_privileges_id_ = #{parentId}
 	</select>
+    <select id="findByRankSettingIds" resultMap="MemberRankPrivileges">
+		SELECT * FROM member_rank_privileges WHERE member_rank_id_ IN
+		<foreach collection="memberRankIds" item="item" open="(" close=")" separator=",">
+			#{item}
+		</foreach>
+	</select>
 </mapper>

+ 61 - 2
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" />
@@ -35,8 +36,8 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MemberRankSetting" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO member_rank_setting (name_,intro_,icon_,is_default_,create_time_,update_time_,operator_,experience_icon_)
-		VALUES(#{name},#{intro},#{icon},#{isDefault},NOW(),NOW(),#{operator},#{experienceIcon})
+		INSERT INTO member_rank_setting (name_,intro_,icon_,is_default_,create_time_,update_time_,operator_,experience_icon_,parent_id_)
+		VALUES(#{name},#{intro},#{icon},#{isDefault},NOW(),NOW(),#{operator},#{experienceIcon},if(#{parentId} is null,0,#{parentId}))
 	</insert>
 
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MemberRankSetting">
@@ -74,15 +75,46 @@
 
 	<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="name !=null and name != ''">
+                AND mrs.name_ LIKE CONCAT('%',#{name},'%')
+            </if>
+            <if test="hasChildren !=null">
+            	<if test="hasChildren == true">
+					AND mrs.parent_id_ != 0
+				</if>
+            </if>
+            <if test="memberIds !=null and memberIds.size > 0">
+            	AND mrs.id_ IN
+				<foreach collection="memberIds" item="id" open="(" close=")" separator=",">
+					#{id}
+				</foreach>
+            </if>
+            <if test="removeIds !=null and removeIds.size > 0">
+            	AND mrs.id_ NOT IN
+                <foreach collection="removeIds" item="id" open="(" close=")" separator=",">
+                    #{id}
+                </foreach>
+            </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 +126,31 @@
 			</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>
+
+	<select id="getNotDelByParentIds" resultMap="MemberRankSetting">
+        SELECT * FROM member_rank_setting WHERE parent_id_ IN
+        <foreach collection="topIds" item="parentId" open="(" close=")" separator=",">
+            #{parentId}
+        </foreach>
+        and del_flag_=0
+    </select>
+
+	<update id="deleteById">
+        UPDATE member_rank_setting SET del_flag_ = 1 WHERE id_ = #{id}
+    </update>
+
+	<select id="getNotDelByIds" resultMap="MemberRankSetting">
+        SELECT * FROM member_rank_setting WHERE id_ IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        and del_flag_=0
+    </select>
 </mapper>

+ 55 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMemberMapper.xml

@@ -40,7 +40,17 @@
 		VALUES(#{calenderId},#{name},#{num},#{period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memberRankSettingId},#{optionalFlag},#{actualAmount},
 		       #{originalAmount},NOW(),NOW(),#{tenantId},#{autoActivationFlag},#{income})
 	</insert>
-	
+	<insert id="batchInsert">
+		INSERT INTO music_group_payment_calender_member (calender_id_,name_,num_,period_,
+		member_rank_setting_id_,optional_flag_,actual_amount_,original_amount_,create_time_,update_time_,tenant_id_,auto_activation_flag_,income_)
+		VALUES
+		<foreach collection="beans" item="item" index="index" separator=",">
+			(#{item.calenderId},#{item.name},#{item.num},#{item.period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			 #{item.memberRankSettingId},#{item.optionalFlag},#{item.actualAmount},
+			#{item.originalAmount},NOW(),NOW(),#{item.tenantId},#{item.autoActivationFlag},#{item.income})
+		</foreach>
+	</insert>
+
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderMember">
 		UPDATE music_group_payment_calender_member <set>
@@ -77,7 +87,44 @@
 		update_time_ = NOW()
 	</set> WHERE id_ = #{id} and tenant_id_ = #{tenantId}
 	</update>
-	
+	<update id="batchUpdate">
+		<foreach collection="beans" item="item" index="index" separator=";">
+			UPDATE music_group_payment_calender_member <set>
+			<if test="item.period != null">
+			period_ = #{item.period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+			<if test="item.memberRankSettingId != null">
+			member_rank_setting_id_ = #{item.memberRankSettingId},
+			</if>
+			<if test="item.num != null">
+			num_ = #{item.num},
+			</if>
+			<if test="item.autoActivationFlag != null">
+				auto_activation_flag_ = #{item.autoActivationFlag},
+			</if>
+			<if test="item.calenderId != null">
+			calender_id_ = #{item.calenderId},
+			</if>
+			<if test="item.optionalFlag != null">
+			optional_flag_ = #{item.optionalFlag},
+			</if>
+			<if test="item.actualAmount != null">
+			actual_amount_ = #{item.actualAmount},
+			</if>
+			<if test="item.originalAmount != null">
+			original_amount_ = #{item.originalAmount},
+			</if>
+			<if test="item.income != null">
+				income_ = #{item.income},
+			</if>
+			<if test="item.name != null">
+			name_ = #{item.name},
+			</if>
+			update_time_ = NOW()
+			</set> WHERE id_ = #{item.id} and tenant_id_ = #{item.tenantId}
+		</foreach>
+	</update>
+
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 		DELETE FROM music_group_payment_calender_member WHERE id_ = #{id} 
@@ -98,4 +145,10 @@
     <select id="findByCalenderId" resultMap="MusicGroupPaymentCalenderMember">
 		SELECT * FROM music_group_payment_calender_member WHERE calender_id_ = #{calenderId}
 	</select>
+    <select id="findByIds" resultMap="MusicGroupPaymentCalenderMember">
+		SELECT * FROM music_group_payment_calender_member WHERE id_ IN
+		<foreach collection="calenderMemberIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+	</select>
 </mapper>

+ 7 - 11
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -494,6 +494,9 @@
                     AND cto.status_ = 1
                 </if>
             </if>
+            <if test="memberRankId != null">
+                AND cto.level_ = #{memberRankId} AND cto.end_time_ > NOW() AND cto.status_ = 2
+            </if>
             <if test="search != null and search != ''">
                 AND (su.id_ = #{search} OR su.username_ LIKE CONCAT("%",#{search},"%") OR su.phone_ LIKE CONCAT("%",#{search},"%"))
             </if>
@@ -585,34 +588,27 @@
         LEFT JOIN subject rs ON rs.id_ = sr.subject_id_
         LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
         LEFT JOIN student stu ON sr.user_id_ = stu.user_id_
+        LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_
         <if test="classGroupId != null">
             LEFT JOIN class_group_student_mapper cgsm ON cgsm.music_group_id_ = sr.music_group_id_
         </if>
-        <if test="hasMember != null">
-            <if test="hasMember == 2">
-                LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_
-            </if>
-        </if>
         <include refid="queryMusicGroupStudentSql"/>
+        GROUP BY sr.id_
         ORDER BY sr.id_ DESC
         <include refid="global.limit"/>
     </select>
 
     <select id="countMusicGroupStudent" resultType="java.lang.Integer">
-        SELECT COUNT(sr.user_id_)
+        SELECT COUNT(DISTINCT sr.user_id_)
         FROM student_registration sr
         LEFT JOIN sys_user su ON sr.user_id_ = su.id_
         LEFT JOIN `subject` s ON s.id_ = sr.actual_subject_id_
         LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
         LEFT JOIN student stu ON sr.user_id_ = stu.user_id_
+        LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_
         <if test="classGroupId != null">
             LEFT JOIN class_group_student_mapper cgsm ON cgsm.music_group_id_ = sr.music_group_id_
         </if>
-        <if test="hasMember != null">
-            <if test="hasMember == 2">
-                LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = sr.user_id_
-            </if>
-        </if>
         <include refid="queryMusicGroupStudentSql"/>
     </select>
 

+ 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>

+ 1 - 1
mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java

@@ -41,7 +41,7 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
 
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
-        syncSaveLog(request, handler);
+//        syncSaveLog(request, handler);
     }
 
     public void syncSaveLog(HttpServletRequest request, Object handler) {

+ 1 - 1
pom.xml

@@ -26,7 +26,7 @@
 		<docker.registry.repository>127.0.0.1:5000</docker.registry.repository>
 		<docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
 		<com.microsvc.toolkit.version>1.0.8-RC1</com.microsvc.toolkit.version>
-		<cbs.version>1.0.19</cbs.version>
+		<cbs.version>1.0.20</cbs.version>
 	</properties>
 
 	<dependencyManagement>