刘俊驰 9 months ago
parent
commit
b6c21f9d8e
53 changed files with 979 additions and 971 deletions
  1. 13 130
      mec-application/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  2. 20 2
      mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  3. 10 0
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreAccompanimentController.java
  4. 14 0
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreController.java
  5. 16 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/StudentController.java
  6. 24 7
      mec-application/src/main/java/com/ym/mec/web/controller/ExportController.java
  7. 9 15
      mec-application/src/main/java/com/ym/mec/web/controller/MemberRankSettingController.java
  8. 19 2
      mec-application/src/main/java/com/ym/mec/web/controller/StudentManageController.java
  9. 17 0
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduStudentController.java
  10. 1 1
      mec-application/src/main/resources/exportColumnMapper.ini
  11. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  12. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentMemberTimeDao.java
  13. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java
  14. 7 428
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  15. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentLessonTrainingDetail.java
  16. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentMemberTime.java
  17. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentMemberUpdateLog.java
  18. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreAccompaniment.java
  19. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java
  20. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  21. 3 47
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudCoachPaymentProgramQueryInfo.java
  22. 5 160
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java
  23. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/StudentPaymentOrderVo.java
  24. 46 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/CloudTeacherOrderWrapper.java
  25. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetWrapper.java
  26. 0 3
      mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java
  27. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java
  28. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  29. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentMemberTimeService.java
  30. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentMemberUpdateLogService.java
  31. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  32. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java
  33. 10 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudCoachPaymentProgramServiceImpl.java
  34. 21 75
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  35. 4 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankOrganizationFeeMapperServiceImpl.java
  36. 39 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  37. 6 17
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderMemberServiceImpl.java
  38. 0 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  39. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  40. 98 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonTrainingDetailServiceImpl.java
  41. 175 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  42. 95 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentMemberTimeServiceImpl.java
  43. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentMemberUpdateLogServiceImpl.java
  44. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  45. 20 23
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  46. 44 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java
  47. 42 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java
  48. 3 0
      mec-biz/src/main/resources/config/mybatis/CloudCoachPaymentProgramMapper.xml
  49. 10 13
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  50. 5 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  51. 5 0
      mec-biz/src/main/resources/config/mybatis/StudentMemberTimeMapper.xml
  52. 6 2
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  53. 2 2
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

+ 13 - 130
mec-application/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -22,7 +22,6 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.upload.UploadUtil;
 import io.swagger.annotations.*;
-import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,6 +30,11 @@ import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -164,20 +168,14 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学员基本信息")
     @GetMapping("student/queryUserInfo")
 	public Object queryUserInfo(String platform) {
-		SysUser user = sysUserService.getUser();
-		Student student = studentService.get(user.getId());
-		student.setId(user.getId());
-		student.setUsername(user.getUsername());
-		student.setAvatar(user.getAvatar());
-		student.setPhone(user.getPhone());
-		student.setCurrentClass(user.getCurrentClass());
-		student.setCurrentGrade(user.getCurrentGrade());
-		student.setBirthdate(user.getBirthdate());
-		student.setGender(user.getGender());
-		student.setRealName(user.getRealName());
-		student.setIdCardNo(user.getIdCardNo());
-		student.setImToken(user.getImToken());
-		student.setOrganId(user.getOrganId());
+
+        SysUser user = sysUserService.getUser();
+        // 返回数据
+        Map<String, Object> datas = Maps.newHashMap();
+
+        // 查询学员基本信息
+        Student student = studentManageService.getStudentUserInfo(user.getId(), user, datas);
+        datas.put("student", student);
 
 
         // 注册IM用户Token
@@ -204,9 +202,6 @@ public class StudentManageController extends BaseController {
 			student.setExtSjectNamesMap(subjectList.stream().collect(Collectors.toMap(Subject :: getId, Subject :: getName)));
 		}
 
-		Map<String, Object> datas = new HashMap<String, Object>();
-		datas.put("student", student);
-		
         List<CloudTeacherOrder> dataList = cloudTeacherOrderDao.queryByUserIdAndStatus(user.getId(),1);
         if(dataList != null && dataList.size() > 0){
         	datas.put("isExistPendingMember", true);
@@ -232,119 +227,7 @@ public class StudentManageController extends BaseController {
 		} else {
 			datas.put("userPrivileges", memberRankPrivilegesService.queryByMemberRankId(student.getMemberRankSettingId()));
 		}
-		SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.HOMEWORK_OPEN_FLAG);
-		if (sysConfig == null) {
-			datas.put("homeworkOpenFlag", 0);
-		} else {
-			datas.put("homeworkOpenFlag", Integer.parseInt(sysConfig.getParanValue()));
-		}
-        // 获取会员等级图标
-        MemberRankSetting memberRankSetting = memberRankSettingService.get(student.getMemberRankSettingId());
-        if (memberRankSetting != null) {
-            student.setMemberRankImg(memberRankSetting.getIcon());
-        }
-        //是否是试用会员
-		if(student.getExperienceMemberRankSettingId() == null){
-            datas.put("isExperience", 0);
-        }else {
-            int i = DateUtil.daysBetween(student.getExperienceMembershipEndTime(),student.getMembershipEndTime());
-            if(i > 0){
-                datas.put("isExperience", 0);
-            }else {
-                datas.put("isExperience", 1);
-                if (memberRankSetting != null) {
-                    student.setMemberRankImg(memberRankSetting.getExperienceIcon());
-                }
-            }
-        }
-
-        // 通过学生声部换乐器ID
-        if (StringUtils.isNotBlank(student.getSubjectIdList())) {
-            String subjectId = student.getSubjectIdList();
-            if ("5".equals(student.getSubjectIdList())) {
-                subjectId = "6";
-            } else  if("122".equals(student.getSubjectIdList())){
-                subjectId = "122,121,113,23";
-            }
-            List<Integer> instrumentIdsBySubjectId = instrumentService.getInstrumentIdsBySubjectId(subjectId)
-                .stream().map(Instrument::getId).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(instrumentIdsBySubjectId)) {
-                // 逗号隔开
-                datas.put("instrumentId", StringUtils.join(instrumentIdsBySubjectId, ","));
-            }
-        }
-
-        // 扩展乐器
-        if (student.getExtSjectNamesMap() !=null && !student.getExtSjectNamesMap().isEmpty()) {
-            Set<Integer> integers = student.getExtSjectNamesMap().keySet();
-            Set<Integer> extInstrumentIds = Sets.newConcurrentHashSet();
-            for (Integer integer : integers) {
-                extInstrumentIds.add(integer);
-
-                if ("5".equals(integer.toString())) {
-                    extInstrumentIds.add(6);
-                } else  if("122".equals(integer.toString())){
-                    extInstrumentIds.add(121);
-                    extInstrumentIds.add(113);
-                    extInstrumentIds.add(23);
-                }
-            }
-
-            // 根据声部查询对应乐器信息
-            List<Instrument> instruments = instrumentService.getInstrumentIdsBySubjectId(StringUtils.join(extInstrumentIds, ","));
-            List<Map<String, Object>> extInstrumentNames = Lists.newArrayList();
-            if (CollectionUtils.isNotEmpty(instruments)) {
-
-                Map<Integer, List<Instrument>> collect = instruments.stream().collect(Collectors.groupingBy(Instrument::getSubjectId, Collectors.toList()));
-                for (Map.Entry<Integer, String> entry : student.getExtSjectNamesMap().entrySet()) {
-
-                    // 默认声部映射乐器ID
-                    String instrumentIds = "";
-                    if (collect.containsKey(entry.getKey())) {
-                        instrumentIds = collect.get(entry.getKey()).stream()
-                            .map(Instrument::getId).map(String::valueOf).collect(Collectors.joining(","));
-                    }
-
-                    // 萨克斯乐器,对应中音萨克斯
-                    if (entry.getKey() == 5 || entry.getKey() == 6) {
-
-                        instrumentIds = collect.entrySet().stream()
-                            .filter(x -> x.getKey() == 5 || x.getKey() == 6)
-                            .flatMap(x -> x.getValue().stream())
-                            .map(Instrument::getId)
-                            .map(String::valueOf).collect(Collectors.joining(","));
-                    }
-
-                    // 打击乐器,对应小军鼓,打击乐(键盘),打击乐(键盘+小鼓),打击乐
-                    if (entry.getKey() == 122 || entry.getKey() == 121 || entry.getKey() == 113 || entry.getKey() == 23) {
-
-                        instrumentIds = collect.entrySet().stream()
-                            .filter(x -> x.getKey() == 122 || x.getKey() == 121 || x.getKey() == 113 || x.getKey() == 23)
-                            .flatMap(x -> x.getValue().stream())
-                            .map(Instrument::getId)
-                            .map(String::valueOf).collect(Collectors.joining(","));
-                    }
-                    String finalInstrumentIds = instrumentIds;
-                    extInstrumentNames.add(new HashMap<String, Object>(){{
-                        put("subjectId", entry.getKey());
-                        put("subjectName", entry.getValue());
-                        put("instrumentIds", finalInstrumentIds);
-                    }});
-                }
-
-                /*List<Integer> instrumentIdsBySubjectId = instruments.stream().map(Instrument::getId).collect(Collectors.toList());
-                Map<Integer, InstrumentWrapper.Instrument> mapByIds = instrumentService.getMapByIds(instrumentIdsBySubjectId);
-                mapByIds.forEach((k,v)->{
-                    if (v !=null) {
-                        extInstrumentNamesMap.put(k, v.getName());
-                    }
-                });*/
-            }
-            student.setExtInstrumentNames(extInstrumentNames);
-        }
-
 
-        datas.put("vipInfo", cloudTeacherOrderService.getEffectiveCloudTeacherOrder(Lists.newArrayList(student.getUserId())));
 		return succeed(datas);
 	}
 

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

@@ -15,6 +15,8 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
+import com.ym.mec.biz.dal.vo.StudentPaymentOrderVo;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -114,6 +116,8 @@ public class StudentOrderController extends BaseController {
     private HfMerchantConfigService hfMerchantConfigService;
     @Autowired
     private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
+    @Autowired
+    private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -334,7 +338,7 @@ public class StudentOrderController extends BaseController {
                 List<Long> activityList = orderDetail1.stream().filter(e -> e.getType() == OrderDetailTypeEnum.VIP
                         || e.getType() == OrderDetailTypeEnum.PRACTICE).map(e -> e.getStudentInstrumentId())
                         .collect(Collectors.toList());
-                if(activityList != null && activityList.size() > 0){
+                if(CollectionUtils.isNotEmpty(activityList)){
                     orderDetail.put("activity", musicGroupPaymentCalenderActivityService.findByActivityIds(activityList,musicGroupRegCalender.getId()));
                 }
             }
@@ -343,6 +347,20 @@ public class StudentOrderController extends BaseController {
             //判断是否是系统收费
             if (musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE) {
                 orderDetail.put("member", cloudTeacherOrderService.queryOrderInfoByOrderId(orderByOrderNo.getId()));
+            }else {
+                List<Long> ids = orderDetail1.stream().filter(e -> e.getType() == OrderDetailTypeEnum.CLOUD_TEACHER).map(StudentPaymentOrderDetail::getStudentInstrumentId).collect(Collectors.toList());
+                if(CollectionUtils.isNotEmpty(ids)){
+                    List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberService.findByIds(ids);
+                    List<CloudTeacherOrderWrapper.StudentMemberOrderDetail> memberOrderDetails = new ArrayList<>();
+                    for (MusicGroupPaymentCalenderMember calenderMember : calenderMembers) {
+                        CloudTeacherOrderWrapper.StudentMemberOrderDetail memberOrderDetail = new CloudTeacherOrderWrapper.StudentMemberOrderDetail();
+                        memberOrderDetail.setMemberRankId(calenderMember.getMemberRankSettingId());
+                        memberOrderDetail.setMemberRankName(calenderMember.getName());
+                        memberOrderDetail.setIntro(calenderMember.getIntro());
+                        memberOrderDetails.add(memberOrderDetail);
+                    }
+                    orderDetail.put("member", memberOrderDetails);
+                }
             }
         } else if (orderByOrderNo.getGroupType().equals(GroupType.VIP) || orderByOrderNo.getGroupType().equals(GroupType.LIVE)) {
             if(orderByOrderNo.getType() == OrderTypeEnum.ACTIVITY){
@@ -911,7 +929,7 @@ public class StudentOrderController extends BaseController {
      * 学生端查询订单详情
      */
     @GetMapping("/queryOrderDetail")
-    public Object queryOrderDetail(String orderNo) {
+    public HttpResponseResult<StudentPaymentOrderVo> queryOrderDetail(String orderNo) {
         return succeed(studentPaymentOrderService.queryOrderDetail(orderNo));
     }
 }

+ 10 - 0
mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreAccompanimentController.java

@@ -2,9 +2,11 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+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.SysMusicScoreAccompanimentService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -13,6 +15,8 @@ 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;
+
 @RequestMapping("${app-config.url.student:}/sysMusicScoreAccompaniment")
 @Api(tags = "曲库服务")
 @RestController
@@ -23,9 +27,15 @@ public class SysMusicScoreAccompanimentController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Resource
+    private SysUserService sysUserService;
+
     @ApiOperation(value = "分页查询")
     @GetMapping("/queryPage")
     public Object queryPage(SysExamSongQueryInfo queryInfo) {
+        // 设置用户ID
+        queryInfo.setUserId(sysUserService.getUserId());
+        queryInfo.setUserType(ClientEnum.STUDENT);
         queryInfo.setType("COMMON");
         if(queryInfo.getClientType() == null){
             queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);

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

@@ -3,12 +3,14 @@ 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.dal.wrapper.MusicSheetWrapper;
 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;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -35,4 +37,16 @@ public class SysMusicScoreController extends BaseController {
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         return succeed(sysMusicScoreService.queryMusicScorePageInfo(queryInfo));
     }
+
+
+    @ApiOperation(value = "分页查询")
+    @GetMapping("/detail/{id}")
+    public Object queryPage2(@PathVariable Integer id) {
+        MusicSheetWrapper.ClientMusicSheetInfoQuery query = new MusicSheetWrapper.ClientMusicSheetInfoQuery();
+        query.setMusicSheetId(id);
+        query.setUserId(sysUserService.getUserId());
+        query.setUserType(ClientEnum.STUDENT);
+
+        return succeed(sysMusicScoreService.queryMusicScoreDetail(query));
+    }
 }

+ 16 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/StudentController.java

@@ -1,6 +1,8 @@
 package com.ym.mec.teacher.controller;
 
+import com.google.common.collect.Maps;
 import com.ym.mec.biz.dal.dto.BaseMapDto;
+import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
@@ -98,6 +100,20 @@ public class StudentController extends BaseController {
         return succeed(studentManageService.findStudentMusicGroupsByUserId(userId));
     }
 
+    @ApiOperation(value = "根据学生ID获取学生信息")
+    @GetMapping("/queryUserInfo")
+    public Object queryUserInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
+
+        // 返回数据
+        Map<String, Object> dataMap = Maps.newHashMap();
+
+        // 查询学员基本信息
+        Student student = studentManageService.getStudentUserInfo(userId, null, dataMap);
+        dataMap.put("student", student);
+
+        return succeed(dataMap);
+    }
+
     @ApiOperation(value = "获取老师关联的学员声部列表")
     @GetMapping("/queryStuSubjectId")
     public HttpResponseResult<List<BaseMapDto>> queryStuSubjectId(){

+ 24 - 7
mec-application/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -230,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);
@@ -341,7 +341,7 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "总成交金额", "总购买人数", "人均购买金额",
                     "20节1v1成交金额", "20节1v1成交人数", "40节1v1成交金额", "40节1v1成交人数", "20节1v2成交金额", "20节1v2成交人数",
-                    "40节1v2成交金额", "40节1v2成交人数", "小组课成交金额", "小组课成交人数", "赠送会员人数"}, new String[]{
+                    "40节1v2成交金额", "40节1v2成交人数", "小组课成交金额", "小组课成交人数", "赠送学练宝人数"}, new String[]{
                     "organName", "totalBuyAmount", "totalBuyNum", "avgBuyAmount", "vip1V120Amount", "vip1V120Num", "vip1V140Amount",
                     "vip1V140Num", "vip1V220Amount", "vip1V220Num", "vip1V240Amount"
                     , "vip1V240Num", "musicTheoryAmount", "musicTheoryNum", "giveMemberNum"}, rows);
@@ -633,7 +633,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学员编号", "学员姓名", "学员声部", "学员状态", "手机号",
-                    "缴费开始日期", "缴费截止日期", "是否开启缴费", "缴费状态", "支付时间", "会员金额", "乐器金额", "课程金额", "辅件金额", "乐保金额", "活动金额"}, new String[]{
+                    "缴费开始日期", "缴费截止日期", "是否开启缴费", "缴费状态", "支付时间", "学练宝金额", "乐器金额", "课程金额", "辅件金额", "乐保金额", "活动金额"}, new String[]{
                     "userId", "sysUser.username", "studentRegistration.subjectName", "studentRegistration.musicGroupStatus.msg", "sysUser.phone",
                     "startPaymentDateMgpc", "deadlinePaymentDateStr", "openFlag.msg", "paymentStatus.desc", "payTime",
                     "cloudAmount", "musicalAmount", "courseAmount", "accessoriesAmount", "maintenanceAmount", "activityAmount"}, rows);
@@ -913,16 +913,33 @@ public class ExportController extends BaseController {
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         queryInfo.setIsExport(true);
         List<StudentManageListDto> rows = studentManageService.findStudentsByOrganId(queryInfo).getRows();
+        for (StudentManageListDto row : rows) {
+            row.setCourseTeacherName(null);
+            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.setCourseTeacherName(remark.toString());
+            }
+        }
         OutputStream outputStream = response.getOutputStream();
         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 ? '否' : '是'",
-                    "membershipEndTime", "membershipEndTime == null ? hasNoStartCloudTeacher ? \"未生效\" : \"未购买\" : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? \"未生效\" : \"会员已过期\"",
-                    "experienceMembershipEndTime", "membershipEndTime == null ? \"未试用\" : membershipDay >= 0 ? membershipDay : \"已失效\""}, rows);
+                    "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "courseTeacherName"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
 

+ 9 - 15
mec-application/src/main/java/com/ym/mec/web/controller/MemberRankSettingController.java

@@ -1,29 +1,17 @@
 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;
@@ -38,8 +26,6 @@ public class MemberRankSettingController extends BaseController {
     @Autowired
     private SysUserService sysUserService;
 
-
-
     @ApiOperation(value = "新增")
     @PostMapping("/add")
     @PreAuthorize("@pcs.hasPermissions('memberRankSetting/add')")
@@ -86,7 +72,6 @@ public class MemberRankSettingController extends BaseController {
         return succeed(memberRankSettingService.queryPage2(queryInfo));
     }
 
-
     @ApiOperation(value = "树状列表")
     @GetMapping("/categoryTree")
     public HttpResponseResult<MemberRankSettingWrapper.Category> queryTree(@RequestParam(required = false) Integer parentMemberId) {
@@ -102,4 +87,13 @@ public class MemberRankSettingController extends BaseController {
         map.put("isDefault",isDefault);
         return succeed(memberRankSettingService.findAll(map));
     }
+
+    @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));
+    }
 }

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

@@ -1,10 +1,12 @@
 package com.ym.mec.web.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Maps;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
@@ -520,8 +522,23 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "修改学员会员时长")
     @PostMapping("/updateStudentMember")
     @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentMember')")
-    public HttpResponseResult updateStudentMember(Integer userId,Date endTime,String memo) throws Exception {
-        studentService.updateStudentMember(userId,endTime,memo,sysUserService.getUserId());
+    public HttpResponseResult updateStudentMember(@RequestBody CloudTeacherOrderWrapper.UpdateStudentMemberDto param) throws Exception {
+        param.setOperatorId(sysUserService.getUserId());
+        studentService.updateStudentMember(param);
         return succeed();
     }
+
+    @ApiOperation(value = "根据学生ID获取学生信息")
+    @GetMapping("/queryUserInfo")
+    public Object queryUserInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
+
+        // 返回数据
+        Map<String, Object> dataMap = Maps.newHashMap();
+
+        // 查询学员基本信息
+        Student student = studentManageService.getStudentUserInfo(userId, null, dataMap);
+        dataMap.put("student", student);
+
+        return succeed(dataMap);
+    }
 }

+ 17 - 0
mec-application/src/main/java/com/ym/mec/web/controller/education/EduStudentController.java

@@ -1,9 +1,11 @@
 package com.ym.mec.web.controller.education;
 
+import com.google.common.collect.Maps;
 import com.ym.mec.biz.dal.dto.BaseMapDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
 import com.ym.mec.biz.dal.dto.StatDto;
 import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.StudentManageService;
@@ -21,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -51,6 +54,20 @@ public class EduStudentController extends BaseController {
         return succeed(studentManageService.findStudentMusicGroupsByUserId(userId));
     }
 
+    @ApiOperation(value = "根据学生ID获取学生信息")
+    @GetMapping("/queryUserInfo")
+    public Object queryUserInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
+
+        // 返回数据
+        Map<String, Object> dataMap = Maps.newHashMap();
+
+        // 查询学员基本信息
+        Student student = studentManageService.getStudentUserInfo(userId, null, dataMap);
+        dataMap.put("student", student);
+
+        return succeed(dataMap);
+    }
+
     @ApiOperation(value = "分部云教练学员数据预览")
     @GetMapping("/organStudentOverView")
     public HttpResponseResult<List<EduOrganStudentDataDto>> organStudentOverView() throws Exception {

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

@@ -243,7 +243,7 @@ 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"]
 
 [分部云教练活动统计数据导出]

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

@@ -409,4 +409,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     //获取合作单位下学员列表
     List<Integer> queryByCoopIds(@Param("coopId") Integer coopId);
+
+    void updateCloudTeacherEndTime(@Param("studentId") Integer studentId);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentMemberTimeDao.java

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.StudentMemberTime;
+
+public interface StudentMemberTimeDao extends BaseMapper<StudentMemberTime> {
+
+}
+

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java

@@ -28,6 +28,9 @@ public class StudentLessonTrainingDetailWrapper {
         @ApiModelProperty("曲目id")
         private Long musicScoreId;
 
+        @ApiModelProperty("课件ID 布置课件视频作业时")
+        private String lessonCoursewareId;
+
         @ApiModelProperty("曲目名称")
         private String musicScoreName;
 
@@ -70,6 +73,10 @@ public class StudentLessonTrainingDetailWrapper {
         @ApiModelProperty("曲目id")
         private Long musicScoreId;
 
+
+        @ApiModelProperty("课件ID 布置课件视频作业时")
+        private String lessonCoursewareId;
+
         @ApiModelProperty("曲目名称")
         private String  musicScoreName;
 
@@ -113,6 +120,9 @@ public class StudentLessonTrainingDetailWrapper {
         private Boolean validFlag = false;
 
         private String memo;
+
+        @ApiModelProperty("使用状态 锁定: LOCK 解锁:UNLOCK")
+        private String useStatus;
         
         public String jsonString() {
             return JSON.toJSONString(this);

+ 7 - 428
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -2,17 +2,17 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.common.enums.UserGenderEnum;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
-/**
- * @Author Joburgess
- * @Date 2019/9/19
- */
+@Data
 public class StudentManageListDto {
 
     @ApiModelProperty(value = "用户ID",required = false)
@@ -85,7 +85,7 @@ public class StudentManageListDto {
 
     private Integer isNewUser;
     
-    private boolean isSignedContract;
+    private Boolean isSignedContract;
 
     private String contractVersions;
 
@@ -135,433 +135,12 @@ public class StudentManageListDto {
 
     private String courseTeacherName;
 
-    public Integer getCourseTeacher() {
-        return courseTeacher;
-    }
-
-    public void setCourseTeacher(Integer courseTeacher) {
-        this.courseTeacher = courseTeacher;
-    }
-
-    public String getCourseTeacherName() {
-        return courseTeacherName;
-    }
-
-    public void setCourseTeacherName(String courseTeacherName) {
-        this.courseTeacherName = courseTeacherName;
-    }
-
-    public String getNormalTeacherName() {
-        return normalTeacherName;
-    }
-
-    public void setNormalTeacherName(String normalTeacherName) {
-        this.normalTeacherName = normalTeacherName;
-    }
-
-    public String getMixTeacherName() {
-        return mixTeacherName;
-    }
-
-    public void setMixTeacherName(String mixTeacherName) {
-        this.mixTeacherName = mixTeacherName;
-    }
-
-    public String getVipTeacherName() {
-        return vipTeacherName;
-    }
-
-    public void setVipTeacherName(String vipTeacherName) {
-        this.vipTeacherName = vipTeacherName;
-    }
-
-    public String getPracticeTeacherName() {
-        return practiceTeacherName;
-    }
-
-    public void setPracticeTeacherName(String practiceTeacherName) {
-        this.practiceTeacherName = practiceTeacherName;
-    }
-
-    public Boolean getRepairFlag() {
-        return repairFlag;
-    }
-
-    public void setRepairFlag(Boolean repairFlag) {
-        this.repairFlag = repairFlag;
-    }
-
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
-    public Integer getRecordUserId() {
-        return recordUserId;
-    }
-
-    public void setRecordUserId(Integer recordUserId) {
-        this.recordUserId = recordUserId;
-    }
-
-    public Boolean getHasNoStartCloudTeacher() {
-        return hasNoStartCloudTeacher;
-    }
-
-    public void setHasNoStartCloudTeacher(Boolean hasNoStartCloudTeacher) {
-        this.hasNoStartCloudTeacher = hasNoStartCloudTeacher;
-    }
-
-    public Integer getMembershipDay() {
-        return membershipDay;
-    }
-
-    public void setMembershipDay(Integer membershipDay) {
-        this.membershipDay = membershipDay;
-    }
-
-    public Integer getExperienceMembershipDay() {
-        return experienceMembershipDay;
-    }
-
-    public void setExperienceMembershipDay(Integer experienceMembershipDay) {
-        this.experienceMembershipDay = experienceMembershipDay;
-    }
-
-    public Date getExperienceMembershipEndTime() {
-        return experienceMembershipEndTime;
-    }
-
-    public void setExperienceMembershipEndTime(Date experienceMembershipEndTime) {
-        this.experienceMembershipEndTime = experienceMembershipEndTime;
-    }
-
-    public Integer getMemberRankSettingId() {
-        return memberRankSettingId;
-    }
-
-    public void setMemberRankSettingId(Integer memberRankSettingId) {
-        this.memberRankSettingId = memberRankSettingId;
-    }
-
-    public Integer getCooperationOrganId() {
-        return cooperationOrganId;
-    }
-
-    public void setCooperationOrganId(Integer cooperationOrganId) {
-        this.cooperationOrganId = cooperationOrganId;
-    }
-
-    public String getCooperationOrganName() {
-        return cooperationOrganName;
-    }
-
-    public void setCooperationOrganName(String cooperationOrganName) {
-        this.cooperationOrganName = cooperationOrganName;
-    }
-
     @ApiModelProperty(value = "剩余VIP课数")
     private Integer noStartVipCourseNum = 0;
 
     @ApiModelProperty(value = "剩余网管课数")
     private Integer noStartPracticeCourseNum = 0;
 
-    public String getActivityCourseDetail() {
-        return activityCourseDetail;
-    }
-
-    public void setActivityCourseDetail(String activityCourseDetail) {
-        this.activityCourseDetail = activityCourseDetail;
-    }
-
-    public String getContractVersions() {
-        return contractVersions;
-    }
-
-    public void setContractVersions(String contractVersions) {
-        this.contractVersions = contractVersions;
-    }
-
-    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 Integer getIsNewUser() {
-        return isNewUser;
-    }
-
-    public void setIsNewUser(Integer isNewUser) {
-        this.isNewUser = isNewUser;
-    }
-
-    public BigDecimal getBalance() {
-        return balance;
-    }
-
-    public void setBalance(BigDecimal balance) {
-        this.balance = balance;
-    }
-
-    public YesOrNoEnum getServiceTag() {
-        return serviceTag;
-    }
-
-    public void setServiceTag(YesOrNoEnum serviceTag) {
-        this.serviceTag = serviceTag;
-    }
-
-    public YesOrNoEnum getOperatingTag() {
-        return operatingTag;
-    }
-
-    public void setOperatingTag(YesOrNoEnum operatingTag) {
-        this.operatingTag = operatingTag;
-    }
-
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
-    public String getMusicGroupName() {
-        return musicGroupName;
-    }
-
-    public void setMusicGroupName(String musicGroupName) {
-        this.musicGroupName = musicGroupName;
-    }
-
-    public String getOrganName() {
-        return organName;
-    }
-
-    public void setOrganName(String organName) {
-        this.organName = organName;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public String getMusicGroupStatus() {
-        return musicGroupStatus;
-    }
-
-    public void setMusicGroupStatus(String musicGroupStatus) {
-        this.musicGroupStatus = musicGroupStatus;
-    }
-
-    public String getVipGroupName() {
-        return vipGroupName;
-    }
-
-    public void setVipGroupName(String vipGroupName) {
-        this.vipGroupName = vipGroupName;
-    }
-
-    public String getVipGroupStatus() {
-        return vipGroupStatus;
-    }
-
-    public void setVipGroupStatus(String vipGroupStatus) {
-        this.vipGroupStatus = vipGroupStatus;
-    }
-
-    public YesOrNoEnum getHasPracticeCourse() {
-        return hasPracticeCourse;
-    }
-
-    public void setHasPracticeCourse(YesOrNoEnum hasPracticeCourse) {
-        this.hasPracticeCourse = hasPracticeCourse;
-    }
-
-    public YesOrNoEnum getHasCourse() {
-        return hasCourse;
-    }
-
-    public void setHasCourse(YesOrNoEnum hasCourse) {
-        this.hasCourse = hasCourse;
-    }
-
-    public String getNation() {
-        return nation;
-    }
-
-    public void setNation(String nation) {
-        this.nation = nation;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public BigDecimal getCourseBalance() {
-        return courseBalance;
-    }
-
-    public void setCourseBalance(BigDecimal courseBalance) {
-        this.courseBalance = courseBalance;
-    }
-
-    public String getCurrentClass() {
-        return currentClass;
-    }
-
-    public void setCurrentClass(String currentClass) {
-        this.currentClass = currentClass;
-    }
-
-    public String getCurrentGrade() {
-        return currentGrade;
-    }
-
-    public void setCurrentGrade(String currentGrade) {
-        this.currentGrade = currentGrade;
-    }
-
-    public Date getBirthdate() {
-        return birthdate;
-    }
-
-    public void setBirthdate(Date birthdate) {
-        this.birthdate = birthdate;
-    }
-
-    public UserGenderEnum getGender() {
-        return gender;
-    }
-
-    public void setGender(UserGenderEnum gender) {
-        this.gender = gender;
-    }
-
-    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 getParentsPhone() {
-        return parentsPhone;
-    }
-
-    public void setParentsPhone(String parentsPhone) {
-        this.parentsPhone = parentsPhone;
-    }
-
-    public String getParentsName() {
-        return parentsName;
-    }
-
-    public void setParentsName(String parentsName) {
-        this.parentsName = parentsName;
-    }
-
-	public YesOrNoEnum getIsActive() {
-		return isActive;
-	}
-
-	public void setIsActive(YesOrNoEnum isActive) {
-		this.isActive = isActive;
-	}
-
-	public String getSubjectIdList() {
-		return subjectIdList;
-	}
-
-	public void setSubjectIdList(String subjectIdList) {
-		this.subjectIdList = subjectIdList;
-	}
-
-	public boolean getIsSignedContract() {
-		return isSignedContract;
-	}
-
-	public void setIsSignedContract(boolean isSignedContract) {
-		this.isSignedContract = isSignedContract;
-	}
-
-    public Integer getCurrentGradeNum() {
-        return currentGradeNum;
-    }
-
-    public void setCurrentGradeNum(Integer currentGradeNum) {
-        this.currentGradeNum = currentGradeNum;
-    }
-
-    public GradeTypeEnum getGradeType() {
-        return gradeType;
-    }
-
-    public void setGradeType(GradeTypeEnum gradeType) {
-        this.gradeType = gradeType;
-    }
-
-    public Integer getNoStartVipCourseNum() {
-        return noStartVipCourseNum;
-    }
-
-    public void setNoStartVipCourseNum(Integer noStartVipCourseNum) {
-        this.noStartVipCourseNum = noStartVipCourseNum;
-    }
-
-    public Integer getNoStartPracticeCourseNum() {
-        return noStartPracticeCourseNum;
-    }
-
-    public void setNoStartPracticeCourseNum(Integer noStartPracticeCourseNum) {
-        this.noStartPracticeCourseNum = noStartPracticeCourseNum;
-    }
-
-	public Date getMembershipEndTime() {
-		return membershipEndTime;
-	}
-
-	public void setMembershipEndTime(Date membershipEndTime) {
-		this.membershipEndTime = membershipEndTime;
-	}
-
-	public String getExtSubjectIds() {
-		return extSubjectIds;
-	}
-
-	public void setExtSubjectIds(String extSubjectIds) {
-		this.extSubjectIds = extSubjectIds;
-	}
+    @ApiModelProperty(value = "学员生效中的云教练",required = false)
+    private List<CloudTeacherOrderWrapper.StudentMemberDetail> cloudTeacherOrderList;
 }

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

@@ -100,4 +100,8 @@ public class StudentLessonTrainingDetail implements Serializable {
 	@TableField(value = "update_time_")
     private Date updateTime;
 
+
+    @ApiModelProperty("课件ID 布置课件视频作业时")
+    @TableField(value = "lesson_courseware_id_")
+    private String lessonCoursewareId;
 }

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentMemberTime.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@ApiModel(value = "student_member_time")
+@Data
+public class StudentMemberTime implements Serializable {
+
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "用户编号")
+    @TableField("student_id_")
+    private Integer studentId;
+
+    @ApiModelProperty(value = "会员编号")
+    @TableField("member_rank_id_")
+    private Integer memberRankId;
+
+    @TableField("end_time_")
+    @ApiModelProperty(value = "截止时间")
+    private Date endTime;
+}
+

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentMemberUpdateLog.java

@@ -4,6 +4,7 @@ package com.ym.mec.biz.dal.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -31,6 +32,26 @@ public class StudentMemberUpdateLog implements Serializable {
     @ApiModelProperty(value = "操作人")
     private Integer operatorId;
 
+    @ApiModelProperty(value = "时长类型 1-天 2-月 3-年")
+    @TableField("type_")
+    private PeriodEnum type;
+
+    @ApiModelProperty(value = "会员等级")
+    @TableField("level_")
+    private Integer level;
+
+    @ApiModelProperty(value = "会员名称")
+    @TableField("name_")
+    private String name;
+
+    @ApiModelProperty(value = "购买时长")
+    @TableField("time_")
+    private Integer time;
+
+    @ApiModelProperty(value = "购买方式,1-自行购买 2-后台添加 3-后台扣减")
+    @TableField("buy_type_")
+    private Integer buyType;
+
     @TableField("old_start_time_")
     @ApiModelProperty(value = "原会员开始时间")
     private Date oldStartTime;

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

@@ -143,6 +143,9 @@ public class SysMusicScoreAccompaniment {
 	@ApiModelProperty("伴奏固定调PDF文件")
 	private String accJianPdfUrl;
 
+	@ApiModelProperty("使用状态 试用: FREE 锁定: LOCK 解锁:UNLOCK")
+	private String useStatus;
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java

@@ -28,8 +28,8 @@ public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum>
     CLASSROOM("CLASSROOM", "课堂课"),
 	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名"),
     MAINTENANCE("MAINTENANCE","乐保服务"),
-    CLOUD_TEACHER("CLOUD_TEACHER","云教练"),
-    CLOUD_TEACHER_PLUS("CLOUD_TEACHER_PLUS","云教练"),
+    CLOUD_TEACHER("CLOUD_TEACHER","学练宝"),
+    CLOUD_TEACHER_PLUS("CLOUD_TEACHER_PLUS","学练宝"),
     THEORY_COURSE("THEORY_COURSE", "小组课"),
     REPAIR("REPAIR", "乐器维修"),
     DIRECTOR_TRAINING_CAMP("DIRECTOR_TRAINING_CAMP", "乐队指导训练营报名"),

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

@@ -36,7 +36,7 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     REPLACEMENT("REPLACEMENT", "乐器置换"),
     DEGREE("DEGREE", "6.1考级活动"),
     ACTIVITY("ACTIVITY", "活动购买"),
-    MEMBER("MEMBER", "会员购买"),
+    MEMBER("MEMBER", "学练宝购买"),
     LIVE_BUY("LIVE_BUY", "直播购物"),
     SCHOOL_GOODS_PURCHASE("SCHOOL_GOODS_PURCHASE","学校商品采购"),
     MALL_BUY("MALL_BUY", "商城购物"),

+ 3 - 47
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudCoachPaymentProgramQueryInfo.java

@@ -1,7 +1,9 @@
 package com.ym.mec.biz.dal.page;
 
 import com.ym.mec.common.page.QueryInfo;
+import lombok.Data;
 
+@Data
 public class CloudCoachPaymentProgramQueryInfo extends QueryInfo {
     private String organId;
 
@@ -15,51 +17,5 @@ public class CloudCoachPaymentProgramQueryInfo extends QueryInfo {
 
     private Integer audit;
 
-    public Integer getAudit() {
-        return audit;
-    }
-
-    public void setAudit(Integer audit) {
-        this.audit = audit;
-    }
-
-    public String getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(String organId) {
-        this.organId = organId;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getPeriod() {
-        return period;
-    }
-
-    public void setPeriod(String period) {
-        this.period = period;
-    }
-
-    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;
-    }
+    private Integer memberRankId;
 }

+ 5 - 160
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentManageQueryInfo.java

@@ -3,13 +3,11 @@ package com.ym.mec.biz.dal.page;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.List;
 
-/**
- * @Author Joburgess
- * @Date 2019/9/19
- */
+@Data
 public class StudentManageQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "部门ID")
@@ -51,161 +49,8 @@ public class StudentManageQueryInfo extends QueryInfo {
     //是否使用过云教练
     private Integer isRecord;
 
-    private Boolean repairFlag;
-
-    public Boolean getRepairFlag() {
-        return repairFlag;
-    }
-
-    public void setRepairFlag(Boolean repairFlag) {
-        this.repairFlag = repairFlag;
-    }
-
-    public Integer getIsRecord() {
-        return isRecord;
-    }
-
-    public void setIsRecord(Integer isRecord) {
-        this.isRecord = isRecord;
-    }
-
-    public Integer getHasMember() {
-        return hasMember;
-    }
-
-    public void setHasMember(Integer hasMember) {
-        this.hasMember = hasMember;
-    }
-
-    private Integer subjectId;
-
-    private String activityCourseType;
-
-    public Integer getTeacherIdForOrgan() {
-        return teacherIdForOrgan;
-    }
-
-    public void setTeacherIdForOrgan(Integer teacherIdForOrgan) {
-        this.teacherIdForOrgan = teacherIdForOrgan;
-    }
-
-    public Integer getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Integer subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public String getActivityCourseType() {
-        return activityCourseType;
-    }
-
-    public void setActivityCourseType(String activityCourseType) {
-        this.activityCourseType = activityCourseType;
-    }
-
-    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 Integer getIsNewUser() {
-        return isNewUser;
-    }
-
-    public void setIsNewUser(Integer isNewUser) {
-        this.isNewUser = isNewUser;
-    }
+    //学练宝版本
+    private Integer memberRankId;
 
-    public Integer getServiceTag() {
-        return serviceTag;
-    }
-
-    public void setServiceTag(Integer serviceTag) {
-        this.serviceTag = serviceTag;
-    }
-
-    public Integer getOperatingTag() {
-        return operatingTag;
-    }
-
-    public void setOperatingTag(Integer operatingTag) {
-        this.operatingTag = operatingTag;
-    }
-
-    public Boolean getIsExport() {
-        return isExport;
-    }
-
-    public void setIsExport(Boolean export) {
-        isExport = export;
-    }
-
-    public List<Integer> getUserIds() {
-        return userIds;
-    }
-
-    public void setUserIds(List<Integer> userIds) {
-        this.userIds = userIds;
-    }
-
-    public String getStudentName() {
-        return studentName;
-    }
-
-    public void setStudentName(String studentName) {
-        this.studentName = studentName;
-    }
-
-    public ClassGroupStudentStatusEnum getStudentStatus() {
-        return studentStatus;
-    }
-
-    public void setStudentStatus(ClassGroupStudentStatusEnum studentStatus) {
-        this.studentStatus = studentStatus;
-    }
-
-    public String getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(String organId) {
-        this.organId = organId;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-	public Boolean getIsActive() {
-		return isActive;
-	}
-
-	public void setIsActive(Boolean isActive) {
-		this.isActive = isActive;
-	}
-
-	public Integer getTeacherId() {
-		return teacherId;
-	}
-
-	public void setTeacherId(Integer teacherId) {
-		this.teacherId = teacherId;
-	}
+    private Boolean repairFlag;
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/StudentPaymentOrderVo.java

@@ -82,6 +82,16 @@ public class StudentPaymentOrderVo {
          */
         private BigDecimal price;
 
+        private Integer detailId;
+
+        public Integer getDetailId() {
+            return detailId;
+        }
+
+        public void setDetailId(Integer detailId) {
+            this.detailId = detailId;
+        }
+
         public String getGoodsName() {
             return goodsName;
         }

+ 46 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/CloudTeacherOrderWrapper.java

@@ -1,18 +1,12 @@
 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 com.baomidou.mybatisplus.annotation.TableField;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 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 {
 
@@ -36,4 +30,48 @@ public class CloudTeacherOrderWrapper {
         @ApiModelProperty("学员编号")
         private Integer studentId;
     }
+
+    @Data
+    @ApiModel("学员会员调整")
+    public static class UpdateStudentMemberDto {
+
+        @ApiModelProperty("会员编号")
+        private Integer memberRankId;
+
+        @ApiModelProperty(value = "时长类型 1-天 2-月 3-年")
+        private PeriodEnum periodType;
+
+        @ApiModelProperty("时长")
+        private Integer number;
+
+        @ApiModelProperty("学员编号")
+        private Integer studentId;
+
+        @ApiModelProperty("操作人")
+        private Integer operatorId;
+
+        @ApiModelProperty("备注")
+        private String memo;
+
+        @ApiModelProperty("2添加、3扣减")
+        private Integer type;
+
+        @ApiModelProperty("是否推送")
+        private Boolean pushFlag;
+    }
+
+
+    @Data
+    @ApiModel("学员会员订单回调详情")
+    public static class StudentMemberOrderDetail {
+
+        @ApiModelProperty("会员编号")
+        private Integer memberRankId;
+
+        @ApiModelProperty("会员名称")
+        private String memberRankName;
+
+        @ApiModelProperty("会员备注")
+        private String intro;
+    }
 }

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

@@ -5,6 +5,7 @@ import com.dayaedu.cbs.common.enums.music.*;
 import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -502,4 +503,29 @@ public class MusicSheetWrapper {
 
     }
 
+    @Data
+    public static class ClientMusicSheetInfo{
+
+        @ApiModelProperty("曲目ID")
+        private Integer musicSheetId;
+
+        @ApiModelProperty("曲目名称")
+        private String musicSheetName;
+
+        @ApiModelProperty("使用状态 试用: FREE 锁定: LOCK 解锁:UNLOCK")
+        private String useStatus;
+    }
+
+    @Data
+    public static class ClientMusicSheetInfoQuery{
+
+        @ApiModelProperty("曲目ID")
+        private Integer musicSheetId;
+
+        @ApiModelProperty("用户ID")
+        private Integer userId;
+
+        @ApiModelProperty("用户类型")
+        private ClientEnum userType;
+    }
 }

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

@@ -128,7 +128,4 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
 
     //获取用户生效中的云教练详情列表
     List<CloudTeacherOrderWrapper.StudentMemberDetail> getEffectiveCloudTeacherOrder(List<Integer> userIds);
-
-    //获取会员全名称
-    Map<Integer,String> queryMemberName(List<Integer> memberRankIds);
 }

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

@@ -11,6 +11,7 @@ import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
+import java.util.Map;
 
 public interface MemberRankSettingService extends BaseService<Integer, MemberRankSetting> {
 
@@ -61,4 +62,11 @@ public interface MemberRankSettingService extends BaseService<Integer, MemberRan
     List<MemberRankSetting> listByIds(List<Integer> ids);
 
     List<MemberRankSettingWrapper.MemberRankSetting> queryTree(String musicGroupId, Integer organId, Integer studentId);
+
+
+    //获取会员全名称
+    Map<Integer,String> queryMemberName(List<Integer> memberRankIds);
+
+    //获取单个会员名称
+    String queryMemberName(Integer memberRankId);
 }

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

@@ -221,4 +221,13 @@ public interface StudentManageService {
     PageInfo<CloudTeacherActiveWapper.Result> cloudTeacherActive(CloudTeacherActiveWapper.Query queryInfo);
 
     CloudTeacherActiveWapper.ResultMap cloudTeacherActiveStatistics(CloudTeacherActiveWapper.Query queryInfo);
+
+    /**
+     * 获取学员信息
+     * @param userId 学员id
+     * @param user 当前用户
+     * @param datas 附加数据
+     * @return 学员信息
+     */
+    Student getStudentUserInfo(Integer userId, SysUser user, Map<String, Object> datas);
 }

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentMemberTimeService.java

@@ -0,0 +1,15 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.StudentMemberTime;
+import com.ym.mec.biz.dal.entity.StudentMemberUpdateLog;
+
+public interface StudentMemberTimeService extends IService<StudentMemberTime> {
+
+    void saveToCloudTeacherOrder(CloudTeacherOrder cloudTeacherOrder);
+
+    void saveToStudentMemberUpdateLog(StudentMemberUpdateLog studentMemberUpdateLog);
+}
+
+

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ym.mec.biz.dal.dao.StudentMemberUpdateLogDao;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.StudentMemberUpdateLog;
 
 /**
@@ -13,5 +14,7 @@ import com.ym.mec.biz.dal.entity.StudentMemberUpdateLog;
 public interface StudentMemberUpdateLogService extends IService<StudentMemberUpdateLog> {
 
     StudentMemberUpdateLogDao getDao();
+
+    void saveToCloudTeacherOrder(CloudTeacherOrder cloudTeacherOrder);
 }
 

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

@@ -14,6 +14,7 @@ import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
@@ -251,7 +252,7 @@ public interface StudentService extends BaseService<Integer, Student> {
     * @author zx
     * @date 2023/5/17 11:25
     */
-    void updateStudentMember(Integer userId, Date endTime,String memo,Integer operatorId);
+    void updateStudentMember(CloudTeacherOrderWrapper.UpdateStudentMemberDto param);
 
     PageInfo<Student> queryBaseInfoByPage(QueryInfo queryInfo);
 

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

@@ -62,4 +62,6 @@ public interface SysMusicScoreService extends BaseService<Integer, SysMusicScore
      */
     CbsMusicSheetWrapper.MusicSheet getCbsMusicSheetByCbsId(Long cbsMusicSheetId);
 
+
+    MusicSheetWrapper.ClientMusicSheetInfo queryMusicScoreDetail(MusicSheetWrapper.ClientMusicSheetInfoQuery id);
 }

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

@@ -2,11 +2,13 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dao.CloudCoachPaymentProgramDao;
+import com.ym.mec.biz.dal.dao.StudentCloudCoachPaymentDetailsDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
-import com.ym.mec.biz.dal.entity.MemberRankSetting;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.page.CloudCoachPaymentProgramQueryInfo;
 import com.ym.mec.biz.service.*;
@@ -37,7 +39,7 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 	@Autowired
 	private MemberFeeSettingService memberFeeSettingService;
 	@Autowired
-	private MemberRankSettingDao memberRankSettingDao;
+	private MemberRankSettingService memberRankSettingService;
 	@Autowired
 	private TenantConfigService tenantConfigService;
 	@Autowired
@@ -61,19 +63,18 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 		PageInfo<CloudCoachPaymentProgram> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
-
 		List<CloudCoachPaymentProgram> dataList = null;
 		int count = this.findCount(params);
 		if (count > 0) {
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());
 			dataList = this.getDAO().queryPage(params);
-			Set<Integer> userIds = dataList.stream().map(e -> e.getOperator()).filter(e -> e != null).collect(Collectors.toSet());
-			userIds.addAll(dataList.stream().map(e -> e.getAudit()).filter(e -> e != null).collect(Collectors.toSet()));
+			Set<Integer> userIds = dataList.stream().map(CloudCoachPaymentProgram::getOperator).filter(Objects::nonNull).collect(Collectors.toSet());
+			userIds.addAll(dataList.stream().map(CloudCoachPaymentProgram::getAudit).filter(Objects::nonNull).collect(Collectors.toSet()));
 			List<SimpleUserDto> usersSimpleInfo = teacherDao.getUsersSimpleInfo(new ArrayList<>(userIds));
-			Map<Integer, SimpleUserDto> userDtoMap = usersSimpleInfo.stream().collect(Collectors.groupingBy(e -> e.getUserId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+			Map<Integer, SimpleUserDto> userDtoMap = usersSimpleInfo.stream().collect(Collectors.groupingBy(SimpleUserDto::getUserId, Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
 
-			List<Long> programIds = dataList.stream().map(e -> e.getId()).collect(Collectors.toList());
+			List<Long> programIds = dataList.stream().map(CloudCoachPaymentProgram::getId).collect(Collectors.toList());
 			Map<Long,String> userNameMap = studentCloudCoachPaymentDetailsDao.queryStudentName(programIds).stream().collect(Collectors.toMap(e -> Long.parseLong(e.get("key").toString()), e -> e.get("value") == null ? "" : e.get("value").toString()));
 			for (CloudCoachPaymentProgram program : dataList) {
 				SimpleUserDto userDto = userDtoMap.get(program.getOperator());
@@ -110,8 +111,7 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 				MemberFeeSettingServiceImpl::getOriginalFee);
 		cloudCoachPaymentProgram.setOriginalAmount(originalFee);
 		//获取会员名称
-		MemberRankSetting memberRankSetting = memberRankSettingDao.get(cloudCoachPaymentProgram.getMemberRankSettingId());
-		cloudCoachPaymentProgram.setName(memberRankSetting.getName());
+		cloudCoachPaymentProgram.setName(memberRankSettingService.queryMemberName(cloudCoachPaymentProgram.getMemberRankSettingId()));
 		cloudCoachPaymentProgram.setUserNum(userIds.size());
 		cloudCoachPaymentProgram.setTenantId(tenantId);
 		//获取缴费状态

+ 21 - 75
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -7,7 +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.StudentDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.dto.Mapper;
@@ -71,7 +71,13 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     @Resource
     private TenantInfoService tenantInfoService;
     @Resource
-    private MemberRankSettingDao memberRankSettingDao;
+    private MemberRankSettingService memberRankSettingService;
+    @Resource
+    private StudentDao studentDao;
+    @Resource
+    private StudentMemberTimeService studentMemberTimeService;
+    @Resource
+    private StudentMemberUpdateLogService studentMemberUpdateLogService;
     @Override
     public BaseDAO<Long, CloudTeacherOrder> getDAO() {
         return cloudTeacherOrderDao;
@@ -90,7 +96,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             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);
+            Map<Integer, String> memberNameMap = memberRankSettingService.queryMemberName(memberRankIds);
             dataList.forEach(e -> e.setMemberName(memberNameMap.get(e.getMemberRankId())));
         }
         if (count == 0) {
@@ -139,22 +145,10 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         }
         //获取会员名称
         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));
+        Map<Integer, String> memberNameMap = memberRankSettingService.queryMemberName(memberRankIds);
         //获取
         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.setMemberName(memberNameMap.get(cst.getMemberRankId()));
             cst.setOrganName(organNameMap.get(cst.getOrganId()));
             if (cst.getOperator() != null) {
                 cst.setOperatorName(empMapById.getOrDefault(cst.getOperator(), new SimpleUserDto()).getUserName());
@@ -214,23 +208,10 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         }
         //获取会员名称
         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));
-
+        Map<Integer, String> memberNameMap = memberRankSettingService.queryMemberName(memberRankIds);
         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.setMemberName(memberNameMap.get(cst.getMemberRankId()));
             cst.setOrganName(organNameMap.get(cst.getOrganId()));
             if (cst.getOperator() != null) {
                 cst.setOperatorName(empMapById.getOrDefault(cst.getOperator(), new SimpleUserDto()).getUserName());
@@ -422,10 +403,6 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     @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();
-//        }
         //获取已激活的云教练最大时间
         Date maxTime = cloudTeacherOrderDao.getActivationMaxTime(cloudTeacherOrder.getStudentId(),cloudTeacherOrder.getLevel());
         if (maxTime != null && maxTime.compareTo(now) > 0) {
@@ -441,7 +418,11 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         }else {
             cloudTeacherOrderDao.update(cloudTeacherOrder);
         }
-//        studentService.updateMemberRank(cloudTeacherOrder.getStudentId(), cloudTeacherOrder.getType(), cloudTeacherOrder.getTime(), 1);
+        //保存学员会员时间
+        studentMemberTimeService.saveToCloudTeacherOrder(cloudTeacherOrder);
+        studentDao.updateCloudTeacherEndTime(cloudTeacherOrder.getStudentId());
+        //保存学员会员调整日志
+        studentMemberUpdateLogService.saveToCloudTeacherOrder(cloudTeacherOrder);
     }
 
     public Date calcCloudTeacherOrderTime(CloudTeacherOrder cloudTeacherOrder, Date startTime) {
@@ -522,12 +503,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         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, String> memberNameMap = memberRankSettingService.queryMemberName(memberRankIds);
             //按学员分组
             Map<Integer, List<CloudTeacherOrder>> cloudTeacherOrderMap = activeCloudTeachers.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
             cloudTeacherOrderMap.forEach((k, v) -> {
@@ -536,16 +512,8 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
                 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());
-                        }
-                    }
+                    //会员名称
+                    studentMemberDetail.setMemberRankName(memberNameMap.get(key));
                     //获取最大的截止时间
                     Date maxTime = value.stream().map(CloudTeacherOrder::getEndTime).max(Date::compareTo).get();
                     studentMemberDetail.setEndTime(maxTime);
@@ -558,26 +526,4 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         }
         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;
-    }
 }

+ 4 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankOrganizationFeeMapperServiceImpl.java

@@ -72,12 +72,10 @@ public class MemberRankOrganizationFeeMapperServiceImpl extends BaseServiceImpl<
 		if(memberFeeSetting == null){
 			throw new BizException("修改失败: 请设置收费标准");
 		}
-		if(!feeMapper.getOrganId().equals(memberRankOrganizationFeeMapper.getOrganId())){
-			MemberRankOrganizationFeeMapper organIdAndRankId = memberRankOrganizationFeeMapperDao.findByOrganIdAndRankId(memberRankOrganizationFeeMapper.getOrganId(), memberRankOrganizationFeeMapper.getMemberRankSettingId());
-			if(organIdAndRankId != null){
-				throw new BizException("修改失败: 该分部学练宝收费标准已存在");
-			}
-		}
+        MemberRankOrganizationFeeMapper organIdAndRankId = memberRankOrganizationFeeMapperDao.findByOrganIdAndRankId(memberRankOrganizationFeeMapper.getOrganId(), memberRankOrganizationFeeMapper.getMemberRankSettingId());
+        if(organIdAndRankId != null && !organIdAndRankId.getId().equals(feeMapper.getId())){
+            throw new BizException("修改失败: 该分部学练宝收费标准已存在");
+        }
 		memberFeeSetting.setId(feeMapper.getMemberFeeSettingId());
 		memberFeeSettingService.update(memberFeeSetting);
 		memberRankOrganizationFeeMapperDao.update(memberRankOrganizationFeeMapper);

+ 39 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -1251,4 +1251,43 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
         queryInfo.setHasChildren(true);
         return this.queryPage2(queryInfo);
     }
+
+
+    @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;
+    }
+
+    @Override
+    public String queryMemberName(Integer memberRankId) {
+        MemberRankSetting memberRankSetting = memberRankSettingDao.get(memberRankId);
+        if(memberRankSetting == null){
+            return "";
+        }
+        String name = memberRankSetting.getName();
+        if(memberRankSetting.getParentId() != 0){
+            MemberRankSetting rankSetting = memberRankSettingDao.get(memberRankSetting.getParentId());
+            if(rankSetting != null){
+                name = rankSetting.getName() + "-" + name;
+            }
+        }
+        return name;
+    }
 }

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

@@ -1,16 +1,15 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderMemberDao;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.CalenderBaseServiceEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.service.MemberFeeSettingService;
+import com.ym.mec.biz.service.MemberRankSettingService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderBaseService;
 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.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
@@ -35,7 +34,7 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
     @Resource
     private MemberFeeSettingService memberFeeSettingService;
     @Resource
-    private MemberRankSettingDao memberRankSettingDao;
+    private MemberRankSettingService memberRankSettingService;
 
     @Override
     public BaseDAO<Long, MusicGroupPaymentCalenderMember> getDAO() {
@@ -84,18 +83,7 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
     public <E> E initBean(E bean) {
         if(bean != null){
             MusicGroupPaymentCalenderMember calenderMember = (MusicGroupPaymentCalenderMember)bean;
-            MemberRankSetting memberRankSetting = memberRankSettingDao.get(calenderMember.getMemberRankSettingId());
-            if(memberRankSetting == null){
-                throw new BizException("会员信息不存在");
-            }
-            String name = memberRankSetting.getName();
-            if(memberRankSetting.getParentId() != 0){
-                MemberRankSetting rankSetting = memberRankSettingDao.get(memberRankSetting.getParentId());
-                if(rankSetting != null){
-                    name = rankSetting.getName() + "-" + name;
-                }
-            }
-            calenderMember.setName(name);
+            calenderMember.setName(memberRankSettingService.queryMemberName(calenderMember.getMemberRankSettingId()));
         }
         return bean;
     }
@@ -109,6 +97,7 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
                 amount = amount.add(memberFeeSettingService.getAmount(musicGroup.getOrganId(), calenderMember.getMemberRankSettingId(),
                         calenderMember.getPeriod(), calenderMember.getNum(), func));
             }
+            return amount;
         }
         return BigDecimal.ZERO;
     }
@@ -133,7 +122,7 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
         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);
+            List<MemberRankSetting> memberRankSettingList = memberRankSettingService.listByIds(memberIds);
             Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettingList.stream().collect(Collectors.toMap(MemberRankSetting::getId, e -> e));
             calenderMembers.forEach(e -> {
                 MemberRankSetting memberRankSetting = memberRankSettingMap.get(e.getMemberRankSettingId());
@@ -162,7 +151,7 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
         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);
+            List<MemberRankSetting> memberRankSettingList = memberRankSettingService.listByIds(memberIds);
             Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettingList.stream().collect(Collectors.toMap(MemberRankSetting::getId, e -> e));
             calenderMembers.forEach(e -> {
                 MemberRankSetting memberRankSetting = memberRankSettingMap.get(e.getMemberRankSettingId());

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

@@ -416,8 +416,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         if (CollectionUtils.isNotEmpty(calenderMemberList)) {
             for (MusicGroupPaymentCalenderMember calenderMember : calenderMemberList) {
                 calenderMember = musicGroupPaymentCalenderMemberService.initBean(calenderMember);
-                calenderMember.setActualAmount(memberActualAmount);
-                calenderMember.setOriginalAmount(memberOriginalAmount);
                 calenderMember.setCalenderId(calenderId);
             }
             musicGroupPaymentCalenderMemberService.batchInsert(calenderMemberList);

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

@@ -908,7 +908,9 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
 
     @Override
     public List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> findStudentHomeworkCourseware(CourseHomeworkWrapper.StudentCourseHomeworkQuery query) {
-        return studentLessonTrainingDetailService.getBaseLessonTrainingDetail(query.getCourseScheduleId().longValue(), query.getType(), query.getUserId(),"VIDEO");
+        List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> detailList = studentLessonTrainingDetailService.getBaseLessonTrainingDetail(query.getCourseScheduleId().longValue(), query.getType(), query.getUserId(), "VIDEO");
+        studentLessonTrainingDetailService.updateMusicScoreName(detailList);
+        return detailList;
     }
 
     /**

+ 98 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentLessonTrainingDetailServiceImpl.java

@@ -4,8 +4,11 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayaedu.cbs.openfeign.client.CoursewareFeignService;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsMaterialWrapper;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.CourseHomeworkDao;
 import com.ym.mec.biz.dal.dao.StudentLessonTrainingDetailMapper;
 import com.ym.mec.biz.dal.dao.SubjectDao;
@@ -16,13 +19,12 @@ import com.ym.mec.biz.dal.dto.StudentSubjectDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.StandardEnum;
-import com.ym.mec.biz.service.ExtracurricularExercisesService;
-import com.ym.mec.biz.service.StudentLessonTrainingDetailService;
-import com.ym.mec.biz.service.SubjectService;
+import com.ym.mec.biz.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -51,6 +53,14 @@ public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentL
     @Resource
     private CoursewareFeignService coursewareFeignService;
 
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
+
+    @Autowired
+    private MemberRankCategoryMapperService memberRankCategoryMapperService;
+
+    @Autowired
+    private MemberRankCourseTypeMapperService memberRankCourseTypeMapperService;
     /**
      * 查询详情
      * @param id 详情ID
@@ -205,6 +215,30 @@ public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentL
                 .distinct()
                 .collect(Collectors.toList());
         if(CollectionUtils.isNotEmpty(musicScoreIdList)){
+
+            // 按用户分组,查询用户VIP信息
+            List<Long> collect = studentLessonTrainingDetails.stream()
+                .filter(x -> "MUSIC_SCORE".equals(x.getHomeworkType()))
+                .map(StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail::getUserId)
+                .filter(Objects::nonNull)
+                .distinct().collect(Collectors.toList());
+
+            Map<Integer, List<Integer>> userVipMap = Maps.newConcurrentMap();
+            collect.parallelStream().forEach(userId -> {
+                // 查询有效的会员
+                List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(userId.intValue());
+
+                // 获取会员的曲目分类
+                List<MemberRankCategoryMapper> categoryMapperList = memberRankCategoryMapperService.getByMemberRankId(activationVipIds);
+                if (CollectionUtils.isEmpty(categoryMapperList)) {
+                    categoryMapperList = Lists.newArrayList();
+                }
+                List<Integer> categoryIds = categoryMapperList.stream().map(MemberRankCategoryMapper::getCategoryId).distinct().collect(Collectors.toList());
+                // 设置用户VIP可查看曲目分类
+                userVipMap.put(userId.intValue(), categoryIds);
+            });
+
+            // 查询曲目信息
             List<SysMusicScore> scoreList = sysMusicScoreDao.findByIds(musicScoreIdList.stream().map(String::valueOf).collect(Collectors.joining(",")));
             if(CollectionUtils.isNotEmpty(scoreList)){
                 Map<Integer, SysMusicScore> musicScoreMap = scoreList.stream().collect(Collectors.toMap(SysMusicScore::getId, Function.identity()));
@@ -215,12 +249,33 @@ public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentL
                             if(sysMusicScore.getShowFlag() == 1 && sysMusicScore.getDelFlag() == 0){
                                 studentLessonTrainingDetail.setValidFlag(true);
                             }
+
+                            // 免费曲目也可以直接访问
+                            if (StringUtils.isBlank(sysMusicScore.getRankIds())) {
+                                studentLessonTrainingDetail.setUseStatus("FREE");
+                            }
+
+                            // 用户VIP可查看曲目分类
+                            if (Objects.nonNull(studentLessonTrainingDetail.getUserId())
+                                && userVipMap.containsKey(studentLessonTrainingDetail.getUserId().intValue())) {
+
+                                // 设置默认不可以查看
+                                List<Integer> categoryIds = userVipMap.get(studentLessonTrainingDetail.getUserId().intValue());
+                                if (categoryIds.contains(sysMusicScore.getCbsMusicCategoriesId())
+                                    || StringUtils.isBlank(sysMusicScore.getRankIds())) {
+                                    // 免费曲目,已购买曲目可直接查看
+                                    studentLessonTrainingDetail.setUseStatus("UNLOCK");
+                                } else {
+                                    studentLessonTrainingDetail.setUseStatus("LOCK");
+                                }
+                            }
                             studentLessonTrainingDetail.setMusicScoreName(sysMusicScore.getName());
                         }
                     }
                 }
             }
         }
+
         //课件素材编号列表
         List<Long> materialList = studentLessonTrainingDetails.stream()
                 .filter(o->"VIDEO".equals(o.getHomeworkType()))
@@ -254,6 +309,46 @@ public class StudentLessonTrainingDetailServiceImpl extends ServiceImpl<StudentL
                 }
             }
         }
+        // 判断课件
+        Map<Integer, List<Integer>> userVipMap = Maps.newConcurrentMap();
+        studentLessonTrainingDetails.parallelStream().forEach(o -> {
+            if (o.getUserId() == null) {
+                return;
+            }
+            // 查询有效的会员
+            List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(o.getUserId().intValue());
+
+            // 获取会员的曲目分类
+
+            List<MemberRankCourseTypeMapper> courseTypeMapperList = memberRankCourseTypeMapperService.getByMemberRankId(activationVipIds);
+            if (CollectionUtils.isEmpty(courseTypeMapperList)) {
+                courseTypeMapperList = Lists.newArrayList();
+            }
+            List<Integer> categoryIds = courseTypeMapperList.stream().map(MemberRankCourseTypeMapper::getCourseType)
+                .distinct().map(Integer::parseInt).collect(Collectors.toList());
+            // 设置用户VIP可查看曲目分类
+            userVipMap.put(o.getUserId().intValue(), categoryIds);
+        });
+        for (StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail studentLessonTrainingDetail : studentLessonTrainingDetails) {
+            if (studentLessonTrainingDetail.getUserId() == null) {
+                return;
+            }
+            if ("VIDEO".equals(studentLessonTrainingDetail.getHomeworkType()) && StringUtils.isNotBlank(studentLessonTrainingDetail.getLessonCoursewareId())) {
+                List<Integer> courseTypeIds = userVipMap.get(studentLessonTrainingDetail.getUserId().intValue());
+                if (CollectionUtils.isEmpty(courseTypeIds)) {
+                    courseTypeIds = new ArrayList<>();
+                }
+                if (courseTypeIds.contains(Integer.parseInt(studentLessonTrainingDetail.getLessonCoursewareId()))) {
+                    studentLessonTrainingDetail.setUseStatus("UNLOCK");
+                } else {
+                    studentLessonTrainingDetail.setUseStatus("LOCK");
+                }
+            } else if ("VIDEO".equals(studentLessonTrainingDetail.getHomeworkType())){
+                studentLessonTrainingDetail.setUseStatus("UNLOCK");
+            }
+        }
+
+
     }
 
 

+ 175 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -23,7 +24,6 @@ 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;
@@ -122,6 +122,12 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Autowired
     private SubjectService subjectService;
 
+    @Autowired
+    private MemberRankSettingService memberRankSettingService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
         PageInfo<StudentManageListDto> pageInfo = new PageInfo<StudentManageListDto>(queryInfo.getPage(), queryInfo.getRows());
@@ -162,9 +168,9 @@ public class StudentManageServiceImpl implements StudentManageService {
             }else{
             	dataList.addAll(studentManageDao.findStudentsByOrganId(params));
             }
-            Set<Integer> userIds = dataList.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
-            List<Integer> organIds = dataList.stream().map(e -> e.getOrganId()).distinct().collect(Collectors.toList());
-            List<Integer> courseTeacherIds = dataList.stream().map(e -> e.getCourseTeacher()).distinct().collect(Collectors.toList());
+            Set<Integer> userIds = dataList.stream().map(StudentManageListDto::getUserId).collect(Collectors.toSet());
+            List<Integer> organIds = dataList.stream().map(StudentManageListDto::getOrganId).distinct().collect(Collectors.toList());
+            List<Integer> courseTeacherIds = dataList.stream().map(StudentManageListDto::getCourseTeacher).distinct().collect(Collectors.toList());
             organIds.removeAll(Collections.singleton(null));
             courseTeacherIds.removeAll(Collections.singleton(null));
             List<SysUserCashAccount> accounts = sysUserCashAccountDao.findByUserIds(userIds);
@@ -177,7 +183,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             if(!CollectionUtils.isEmpty(accounts)){
                 accountMap = accounts.stream().collect(Collectors.groupingBy(SysUserCashAccount::getUserId, Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
             }
-            List<String> subjectIds = dataList.stream().map(e -> e.getSubjectIdList()).distinct().collect(Collectors.toList());
+            List<String> subjectIds = dataList.stream().map(StudentManageListDto::getSubjectIdList).distinct().collect(Collectors.toList());
             subjectIds.removeAll(Collections.singleton(null));
             Map<String, String> subjectMap = new HashMap<>();
             Map<Integer, String> courseTeacherNameMap = new HashMap<>();
@@ -187,7 +193,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             if(!CollectionUtils.isEmpty(courseTeacherIds)){
                 courseTeacherNameMap = sysConfigService.getMap("sys_user", "id_", "real_name_", courseTeacherIds, queryInfo.getTenantId(), Integer.class, String.class);
             }
-            List<Integer> cooIds = dataList.stream().map(e -> e.getCooperationOrganId()).distinct().collect(Collectors.toList());
+            List<Integer> cooIds = dataList.stream().map(StudentManageListDto::getCooperationOrganId).distinct().collect(Collectors.toList());
             cooIds.removeAll(Collections.singleton(null));
             Map<Integer, String> cooMap = new HashMap<>();
             if(!CollectionUtils.isEmpty(cooIds)) {
@@ -199,7 +205,15 @@ public class StudentManageServiceImpl implements StudentManageService {
             if(!CollectionUtils.isEmpty(mappers)){
                 mappersMap = mappers.stream().collect(Collectors.groupingBy(StudentTeacherMapperDto::getStudentId));
             }
+            //获取生效中的会员详情列表
+            List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails = cloudTeacherOrderService.getEffectiveCloudTeacherOrder(new ArrayList<>(userIds));
             for (StudentManageListDto dto : dataList) {
+                //汇总学员会员信息
+                if (!CollectionUtils.isEmpty(studentMemberDetails)) {
+                    List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetailList =
+                            studentMemberDetails.stream().filter(s -> s.getStudentId().equals(dto.getUserId())).collect(Collectors.toList());
+                    dto.setCloudTeacherOrderList(studentMemberDetailList);
+                }
                 if(!CollectionUtils.isEmpty(organMap)){
                     Organization organization = organMap.get(dto.getOrganId());
                     if(Objects.nonNull(organization)){
@@ -1251,4 +1265,159 @@ public class StudentManageServiceImpl implements StudentManageService {
         resultMap.setStatistics(statistics);
         return resultMap;
     }
+
+    /**
+     * 获取学员信息
+     * @param userId 学员id
+     * @param user 用户信息
+     * @param datas 附加数据
+     * @return 学员信息
+     */
+    @Override
+    public Student getStudentUserInfo(Integer userId, SysUser user, Map<String, Object> datas) {
+
+        // 获取学员信息
+        if (Objects.isNull(user)) {
+            user = teacherDao.getUser(userId);
+
+            if (Objects.isNull(user)) {
+                throw new BizException("学员信息不存在");
+            }
+        }
+
+        // 基本信息填充
+        Student student = studentService.get(user.getId());
+        student.setId(user.getId());
+        student.setUsername(user.getUsername());
+        student.setAvatar(user.getAvatar());
+        student.setPhone(user.getPhone());
+        student.setCurrentClass(user.getCurrentClass());
+        student.setCurrentGrade(user.getCurrentGrade());
+        student.setBirthdate(user.getBirthdate());
+        student.setGender(user.getGender());
+        student.setRealName(user.getRealName());
+        student.setIdCardNo(user.getIdCardNo());
+        student.setImToken(user.getImToken());
+        student.setOrganId(user.getOrganId());
+
+        // 学员其他基础信息
+        SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.HOMEWORK_OPEN_FLAG);
+        if (sysConfig == null) {
+            datas.put("homeworkOpenFlag", 0);
+        } else {
+            datas.put("homeworkOpenFlag", Integer.parseInt(sysConfig.getParanValue()));
+        }
+
+        // 获取会员等级图标
+        MemberRankSetting memberRankSetting = memberRankSettingService.get(student.getMemberRankSettingId());
+        if (memberRankSetting != null) {
+            student.setMemberRankImg(memberRankSetting.getIcon());
+        }
+
+        //是否是试用会员
+        if(student.getExperienceMemberRankSettingId() == null){
+            datas.put("isExperience", 0);
+        }else {
+            int i = DateUtil.daysBetween(student.getExperienceMembershipEndTime(),student.getMembershipEndTime());
+            if(i > 0){
+                datas.put("isExperience", 0);
+            }else {
+                datas.put("isExperience", 1);
+                if (memberRankSetting != null) {
+                    student.setMemberRankImg(memberRankSetting.getExperienceIcon());
+                }
+            }
+        }
+
+        // 学员会员信息
+        datas.put("vipInfo", cloudTeacherOrderService.getEffectiveCloudTeacherOrder(Lists.newArrayList(student.getUserId())));
+
+
+        // 通过学生声部换乐器ID
+        if (StringUtils.isNotBlank(student.getSubjectIdList())) {
+            String subjectId = student.getSubjectIdList();
+            if ("5".equals(student.getSubjectIdList())) {
+                subjectId = "6";
+            } else  if("122".equals(student.getSubjectIdList())){
+                subjectId = "122,121,113,23";
+            }
+            List<Integer> instrumentIdsBySubjectId = instrumentService.getInstrumentIdsBySubjectId(subjectId)
+                .stream().map(Instrument::getId).collect(Collectors.toList());
+            if (!CollectionUtils.isEmpty(instrumentIdsBySubjectId)) {
+                // 逗号隔开
+                datas.put("instrumentId", StringUtils.join(instrumentIdsBySubjectId, ","));
+            }
+        }
+
+        // 扩展乐器
+        if (student.getExtSjectNamesMap() !=null && !student.getExtSjectNamesMap().isEmpty()) {
+            Set<Integer> integers = student.getExtSjectNamesMap().keySet();
+            Set<Integer> extInstrumentIds = Sets.newConcurrentHashSet();
+            for (Integer integer : integers) {
+                extInstrumentIds.add(integer);
+
+                if ("5".equals(integer.toString())) {
+                    extInstrumentIds.add(6);
+                } else  if("122".equals(integer.toString())){
+                    extInstrumentIds.add(121);
+                    extInstrumentIds.add(113);
+                    extInstrumentIds.add(23);
+                }
+            }
+
+            // 根据声部查询对应乐器信息
+            List<Instrument> instruments = instrumentService.getInstrumentIdsBySubjectId(StringUtils.join(extInstrumentIds, ","));
+            List<Map<String, Object>> extInstrumentNames = Lists.newArrayList();
+            if (!CollectionUtils.isEmpty(instruments)) {
+
+                Map<Integer, List<Instrument>> collect = instruments.stream().collect(Collectors.groupingBy(Instrument::getSubjectId, Collectors.toList()));
+                for (Map.Entry<Integer, String> entry : student.getExtSjectNamesMap().entrySet()) {
+
+                    // 默认声部映射乐器ID
+                    String instrumentIds = "";
+                    if (collect.containsKey(entry.getKey())) {
+                        instrumentIds = collect.get(entry.getKey()).stream()
+                            .map(Instrument::getId).map(String::valueOf).collect(Collectors.joining(","));
+                    }
+
+                    // 萨克斯乐器,对应中音萨克斯
+                    if (entry.getKey() == 5 || entry.getKey() == 6) {
+
+                        instrumentIds = collect.entrySet().stream()
+                            .filter(x -> x.getKey() == 5 || x.getKey() == 6)
+                            .flatMap(x -> x.getValue().stream())
+                            .map(Instrument::getId)
+                            .map(String::valueOf).collect(Collectors.joining(","));
+                    }
+
+                    // 打击乐器,对应小军鼓,打击乐(键盘),打击乐(键盘+小鼓),打击乐
+                    if (entry.getKey() == 122 || entry.getKey() == 121 || entry.getKey() == 113 || entry.getKey() == 23) {
+
+                        instrumentIds = collect.entrySet().stream()
+                            .filter(x -> x.getKey() == 122 || x.getKey() == 121 || x.getKey() == 113 || x.getKey() == 23)
+                            .flatMap(x -> x.getValue().stream())
+                            .map(Instrument::getId)
+                            .map(String::valueOf).collect(Collectors.joining(","));
+                    }
+                    String finalInstrumentIds = instrumentIds;
+                    extInstrumentNames.add(new HashMap<String, Object>(){{
+                        put("subjectId", entry.getKey());
+                        put("subjectName", entry.getValue());
+                        put("instrumentIds", finalInstrumentIds);
+                    }});
+                }
+
+                /*List<Integer> instrumentIdsBySubjectId = instruments.stream().map(Instrument::getId).collect(Collectors.toList());
+                Map<Integer, InstrumentWrapper.Instrument> mapByIds = instrumentService.getMapByIds(instrumentIdsBySubjectId);
+                mapByIds.forEach((k,v)->{
+                    if (v !=null) {
+                        extInstrumentNamesMap.put(k, v.getName());
+                    }
+                });*/
+            }
+            student.setExtInstrumentNames(extInstrumentNames);
+        }
+
+        return student;
+    }
 }

+ 95 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentMemberTimeServiceImpl.java

@@ -0,0 +1,95 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.dao.StudentMemberTimeDao;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.StudentMemberTime;
+import com.ym.mec.biz.dal.entity.StudentMemberUpdateLog;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
+import com.ym.mec.biz.service.StudentMemberTimeService;
+import com.ym.mec.util.date.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+@Service("studentMemberTimeService")
+public class StudentMemberTimeServiceImpl extends ServiceImpl<StudentMemberTimeDao, StudentMemberTime> implements StudentMemberTimeService {
+
+    private final static Logger log = LoggerFactory.getLogger(StudentMemberTimeServiceImpl.class);
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveToCloudTeacherOrder(CloudTeacherOrder cloudTeacherOrder) {
+        StudentMemberTime one = this.lambdaQuery().eq(StudentMemberTime::getMemberRankId, cloudTeacherOrder.getLevel()).last("limit 1").one();
+        if (one == null) {
+            one = new StudentMemberTime();
+            one.setMemberRankId(cloudTeacherOrder.getLevel());
+            one.setStudentId(cloudTeacherOrder.getStudentId());
+            one.setEndTime(cloudTeacherOrder.getEndTime());
+            this.save(one);
+        }else {
+            one.setEndTime(cloudTeacherOrder.getEndTime());
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveToStudentMemberUpdateLog(StudentMemberUpdateLog studentMemberUpdateLog) {
+        StudentMemberTime one = this.lambdaQuery().eq(StudentMemberTime::getMemberRankId, studentMemberUpdateLog.getLevel()).last("limit 1").one();
+        //扣减
+        Date now = new Date();
+        if(studentMemberUpdateLog.getBuyType() == 3){
+            if (one == null) {
+                throw new RuntimeException("会员信息不存在");
+            }
+            studentMemberUpdateLog.setOldEndTime(one.getEndTime());
+            if (one.getEndTime().after(now)) {
+                studentMemberUpdateLog.setOldEndTime(one.getEndTime());
+                one.setEndTime(addDays(one.getEndTime(), -studentMemberUpdateLog.getTime(), studentMemberUpdateLog.getType()));
+                this.updateById(one);
+            }else {
+                throw new RuntimeException("会员已过期");
+            }
+        }else {
+            if (one == null) {
+                one = new StudentMemberTime();
+                one.setMemberRankId(studentMemberUpdateLog.getLevel());
+                one.setStudentId(studentMemberUpdateLog.getStudentId());
+                one.setEndTime(addDays(now, studentMemberUpdateLog.getTime(), studentMemberUpdateLog.getType()));
+                this.save(one);
+            }else {
+                if (one.getEndTime().after(now)) {
+                    studentMemberUpdateLog.setOldEndTime(one.getEndTime());
+                    one.setEndTime(addDays(one.getEndTime(), studentMemberUpdateLog.getTime(), studentMemberUpdateLog.getType()));
+                }else {
+                    studentMemberUpdateLog.setOldEndTime(now);
+                    one.setEndTime(addDays(now, studentMemberUpdateLog.getTime(), studentMemberUpdateLog.getType()));
+                }
+                this.updateById(one);
+            }
+        }
+        studentMemberUpdateLog.setNewEndTime(one.getEndTime());
+    }
+
+    private Date addDays(Date endTime, int time, PeriodEnum type) {
+        switch (type) {
+            case DAY:
+                return DateUtil.addDays(endTime, time);
+            case MONTH:
+                return DateUtil.addMonths(endTime, time);
+            case QUARTERLY:
+                return DateUtil.addMonths(endTime, time * 3);
+            case YEAR_HALF:
+                return DateUtil.addMonths(endTime, time * 6);
+            case YEAR:
+                return DateUtil.addYears(endTime, time);
+            default:
+                return endTime;
+        }
+    }
+}
+

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentMemberUpdateLogServiceImpl.java

@@ -2,11 +2,13 @@ package com.ym.mec.biz.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.StudentMemberUpdateLogDao;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.StudentMemberUpdateLog;
 import com.ym.mec.biz.service.StudentMemberUpdateLogService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 学员云教练时长修改记录(StudentMemberUpdateLog)表服务实现类
@@ -24,5 +26,20 @@ public class StudentMemberUpdateLogServiceImpl extends ServiceImpl<StudentMember
             return this.baseMapper;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveToCloudTeacherOrder(CloudTeacherOrder cloudTeacherOrder) {
+        StudentMemberUpdateLog studentMemberUpdateLog = new StudentMemberUpdateLog();
+        studentMemberUpdateLog.setStudentId(cloudTeacherOrder.getStudentId());
+        studentMemberUpdateLog.setMemo(cloudTeacherOrder.getRemark());
+        studentMemberUpdateLog.setType(cloudTeacherOrder.getType());
+        studentMemberUpdateLog.setLevel(cloudTeacherOrder.getLevel());
+        studentMemberUpdateLog.setTime(cloudTeacherOrder.getTime());
+        studentMemberUpdateLog.setBuyType(1);
+        studentMemberUpdateLog.setOldEndTime(cloudTeacherOrder.getStartTime());
+        studentMemberUpdateLog.setNewEndTime(cloudTeacherOrder.getEndTime());
+        this.save(studentMemberUpdateLog);
+    }
+
 }
 

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

@@ -148,6 +148,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
     @Resource
     private MusicGroupPaymentCalenderAddressService musicGroupPaymentCalenderAddressService;
+    @Resource
+    private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
     @Override
@@ -820,6 +822,13 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
             BigDecimal organShareProfit = BigDecimal.ZERO;
             for (StudentPaymentOrderDetail studentPaymentOrderDetail : order.getOrderDetailList()) {
+                if(studentPaymentOrderDetail.getType() == OrderDetailTypeEnum.CLOUD_TEACHER){
+                    //获取名称
+                    MusicGroupPaymentCalenderMember calenderMember = musicGroupPaymentCalenderMemberService.get(studentPaymentOrderDetail.getStudentInstrumentId());
+                    if(calenderMember != null){
+                        studentPaymentOrderDetail.setName(calenderMember.getName());
+                    }
+                }
                 if (studentPaymentOrderDetail.getGoodsList() == null) {
                     continue;
                 }

+ 20 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -14,6 +14,7 @@ import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.mapper.SchoolActivityMapper;
 import com.ym.mec.biz.dal.mapper.StudentPlusMapper;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.dal.wrapper.SchoolActivityWrapper;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.biz.service.*;
@@ -64,7 +65,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     private PracticeGroupDao practiceGroupDao;
     @Autowired
-    private MemberRankSettingDao memberRankSettingDao;
+    private MemberRankSettingService memberRankSettingService;
     @Autowired
     private SysConfigDao sysConfigDao;
     @Autowired
@@ -124,6 +125,8 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     private StudentService studentService;
     @Autowired
     private SysUserService sysUserService;
+    @Autowired
+    private StudentMemberTimeService studentMemberTimeService;
 
     @Override
     public BaseDAO<Integer, Student> getDAO() {
@@ -492,14 +495,14 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateMemberExperience(String studentIds, Integer rankId, Date endTime) {
+        if(StringUtils.isEmpty(studentIds)){
+            throw new BizException("请选择学员");
+        }
         //会员是否存在
-        MemberRankSetting memberRankSetting = memberRankSettingDao.get(rankId);
+        MemberRankSetting memberRankSetting = memberRankSettingService.get(rankId);
         if(memberRankSetting == null){
             throw new BizException("会员信息不存在");
         }
-        if(StringUtils.isEmpty(studentIds)){
-            throw new BizException("请选择学员");
-        }
         //学员是否有会员
         List<Integer> studentIdList = Arrays.stream(studentIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
         List<Student> studentList = studentDao.findByStudentIds(studentIdList);
@@ -1640,30 +1643,24 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateStudentMember(Integer userId, Date endTime,String memo,Integer operatorId) {
+    public void updateStudentMember(CloudTeacherOrderWrapper.UpdateStudentMemberDto param) {
+        Integer userId = param.getStudentId();
         Student student = studentDao.get(userId);
         if(Objects.isNull(student)){
             throw new BizException("学员信息不存在");
         }
         StudentMemberUpdateLog studentMemberUpdateLog = new StudentMemberUpdateLog();
         studentMemberUpdateLog.setStudentId(userId);
-        studentMemberUpdateLog.setOldStartTime(student.getMembershipStartTime());
-        studentMemberUpdateLog.setOldEndTime(student.getMembershipEndTime());
-        studentMemberUpdateLog.setMemo(memo);
-        studentMemberUpdateLog.setOperatorId(operatorId);
-        Date now = new Date();
-        if (endTime == null || endTime.compareTo(now) < 0){
-            studentDao.cleanMember(userId);
-        }else {
-            if(student.getMembershipStartTime() == null){
-                student.setMembershipStartTime(now);
-            }
-            student.setMemberRankSettingId(1);
-            student.setMembershipEndTime(endTime);
-            studentDao.updateStudentMember(student);
-            studentMemberUpdateLog.setNewStartTime(student.getMembershipStartTime());
-            studentMemberUpdateLog.setNewEndTime(student.getMembershipEndTime());
-        }
+        studentMemberUpdateLog.setMemo(param.getMemo());
+        studentMemberUpdateLog.setOperatorId(param.getOperatorId());
+        studentMemberUpdateLog.setType(param.getPeriodType());
+        studentMemberUpdateLog.setLevel(param.getMemberRankId());
+        studentMemberUpdateLog.setTime(param.getNumber());
+        studentMemberUpdateLog.setBuyType(param.getType());
+        //保存学员会员时间
+        studentMemberTimeService.saveToStudentMemberUpdateLog(studentMemberUpdateLog);
+        studentDao.updateCloudTeacherEndTime(userId);
+        studentMemberUpdateLog.setName(memberRankSettingService.queryMemberName(param.getMemberRankId()));
         //添加修改日志
         studentMemberUpdateLogDao.insert(studentMemberUpdateLog);
     }

+ 44 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java

@@ -3,11 +3,14 @@ package com.ym.mec.biz.service.impl;
 
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.MemberRankCategoryMapperService;
 import com.ym.mec.biz.service.SysMusicScoreAccompanimentService;
 import com.ym.mec.biz.service.SysMusicScoreService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -18,6 +21,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 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 javax.annotation.Resource;
@@ -36,6 +40,13 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 	private SysMusicScoreService sysMusicScoreService;
 	@Resource
 	private InstrumentService instrumentService;
+
+	@Autowired
+	private CloudTeacherOrderDao cloudTeacherOrderDao;
+
+	@Autowired
+	private MemberRankCategoryMapperService memberRankCategoryMapperService;
+
 	@Override
 	public BaseDAO<String, SysMusicScoreAccompaniment> getDAO() {
 		return sysMusicScoreAccompanimentDao;
@@ -108,6 +119,8 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 				record.setId(accompaniment.getExamSongId().toString());
 				record.setExamSongId(accompaniment.getExamSongId());
 				record.setMusicSheetType(musicSheetApplication.getMusicSheetType().getCode());
+				record.setDefaultScoreRender(musicSheetApplication.getDefaultScoreRender());
+				record.setIsScoreRender(musicSheetApplication.getIsScoreRender());
 				record.setExamSongName(musicSheetApplication.getName());
 				record.setDefaultScoreRender(musicSheetApplication.getDefaultScoreRender());
 				record.setIsScoreRender(musicSheetApplication.getIsScoreRender());
@@ -347,7 +360,37 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 		}
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
-        return this.queryAccPage(params);
+		List<SysMusicScoreAccompaniment> accompaniments = this.queryAccPage(params);
+
+		// 根据用户会员判断是否锁定,免费曲目为试用
+		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 (SysMusicScoreAccompaniment row : accompaniments) {
+				if (categoryIds.contains(row.getCategoriesId())) {
+					row.setUseStatus("UNLOCK");
+				} else if (StringUtils.isBlank(row.getRankIds())) {
+					row.setUseStatus("FREE");
+				} else {
+					row.setUseStatus("LOCK");
+				}
+			}
+		} else {
+			for (SysMusicScoreAccompaniment item : accompaniments) {
+				item.setUseStatus("UNLOCK");
+			}
+		}
+
+		return accompaniments;
     }
 
 	@Override

+ 42 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java

@@ -350,10 +350,10 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
 
             // 判断曲目是否在分类中
             for (SysMusicScore row : rows) {
-                if (categoryIds.contains(row.getCbsMusicCategoriesId())) {
-                    row.setUseStatus("UNLOCK");
-                } else if (StringUtils.isBlank(row.getRankIds())) {
+                if (StringUtils.isBlank(row.getRankIds())) {
                     row.setUseStatus("FREE");
+                } else if (categoryIds.contains(row.getCbsMusicCategoriesId())) {
+                    row.setUseStatus("UNLOCK");
                 } else {
                     row.setUseStatus("LOCK");
                 }
@@ -478,6 +478,45 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         }
     }
 
+    @Override
+    public MusicSheetWrapper.ClientMusicSheetInfo queryMusicScoreDetail(MusicSheetWrapper.ClientMusicSheetInfoQuery query) {
+        MusicSheetWrapper.ClientMusicSheetInfo clientMusicSheetInfo = new MusicSheetWrapper.ClientMusicSheetInfo();
+
+        SysMusicScore sysMusicScore = get(query.getMusicSheetId());
+
+        if (sysMusicScore == null) {
+            throw new BizException("曲目不存在");
+        }
+        clientMusicSheetInfo.setMusicSheetId(sysMusicScore.getId());
+        clientMusicSheetInfo.setMusicSheetName(sysMusicScore.getName());
+        // 根据用户会员判断是否锁定,免费曲目为试用
+        if (query.getUserType()!=null && ClientEnum.STUDENT==query.getUserType()) {
+            // 查询有效的会员
+            List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(query.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());
+
+            // 判断曲目是否在分类中
+                if (StringUtils.isBlank(sysMusicScore.getRankIds())) {
+                    clientMusicSheetInfo.setUseStatus("FREE");
+                } else if (categoryIds.contains(sysMusicScore.getCbsMusicCategoriesId())) {
+                    clientMusicSheetInfo.setUseStatus("UNLOCK");
+                } else {
+                    clientMusicSheetInfo.setUseStatus("LOCK");
+                }
+        } else {
+            clientMusicSheetInfo.setUseStatus("UNLOCK");
+        }
+
+        return clientMusicSheetInfo;
+
+    }
+
     private void syncMusicSheet(SysMusicScore record) {
         List<SysMusicScoreAccompaniment> list = sysMusicScoreAccompanimentDao.findByMusicScoreId(record.getId());
 

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/CloudCoachPaymentProgramMapper.xml

@@ -124,6 +124,9 @@
 			<if test="tenantId != null">
 				AND ccpp.tenant_id_ = #{tenantId}
 			</if>
+			<if test="memberRankId != null">
+				AND ccpp.member_rank_setting_id_ = #{memberRankId}
+			</if>
             <if test="audit != null">
                 AND ccpp.audit_ = #{audit}
             </if>

+ 10 - 13
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -149,20 +149,16 @@
     <select id="findStudentsByOrganId" resultMap="studentManageListDto">
         SELECT s.`user_id_`,s.repair_flag_ ,su.`username_` ,su.`phone_` parents_phone_,s.ext_subject_ids_,
         sut.name_ real_name_,su.`gender_` , su.organ_id_,su.avatar_,CASE s.service_tag_ WHEN 2 THEN 0 ELSE s.service_tag_ END service_tag_ ,s.`operating_tag_` ,
-        s.care_package_, s.come_on_package_,su.birthdate_,s.subject_id_list_,s.current_grade_num_,s.current_class_,s.member_rank_setting_id_,
-        CASE WHEN su.password_ IS NULL THEN FALSE ELSE TRUE END isActive_,s.is_new_user_,
-        s.membership_end_time_,CASE WHEN sut.user_id_ IS NULL THEN 0 ELSE 1 END is_signed_contract_,
-        s.cooperation_organ_id_,s.activity_course_detail_,s.experience_membership_end_time_,
-        DATEDIFF(s.experience_membership_end_time_,NOW()) experience_membership_day_,DATEDIFF(s.membership_end_time_,NOW()) membership_day_,
+        s.care_package_, s.come_on_package_,su.birthdate_,s.subject_id_list_,s.current_grade_num_,s.current_class_,
+        CASE WHEN su.password_ IS NULL THEN FALSE ELSE TRUE END isActive_,s.is_new_user_,CASE WHEN sut.user_id_ IS NULL THEN 0 ELSE 1 END is_signed_contract_,
+        s.cooperation_organ_id_,s.activity_course_detail_,
         smcr.user_id_ record_user_id_,s.course_teacher_,org.name_ as organ_name_
 		FROM `student` s LEFT JOIN `sys_user` su ON s.`user_id_` = su.`id_`
 		LEFT JOIN sys_user_tsign sut ON sut.user_id_ = s.user_id_
         LEFT JOIN organization org ON su.organ_id_ = org.id_
         LEFT JOIN (SELECT DISTINCT user_id_ FROM sys_music_compare_record) smcr ON smcr.user_id_ = s.user_id_
-        <if test="hasMember != null">
-            <if test="hasMember == 2">
-                LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_
-            </if>
+        <if test="(hasMember != null and hasMember == 2) or memberRankId != null">
+            LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_
         </if>
         <include refid="findStudentsByOrganIdSql"/>
         GROUP BY su.id_
@@ -226,6 +222,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="teacherId != null">
                 AND s.user_id_ IN (select distinct student_id_ from student_teacher_mapper where teacher_id_ = #{teacherId})
             </if>
@@ -251,10 +250,8 @@
         SELECT COUNT(DISTINCT su.id_)
         FROM `student` s
         LEFT JOIN `sys_user` su on s.`user_id_` = su.`id_`
-        <if test="hasMember != null">
-            <if test="hasMember == 2">
-                LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_
-            </if>
+        <if test="(hasMember != null and hasMember == 2) or memberRankId != null">
+            LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_
         </if>
         <if test="isRecord != null">
             LEFT JOIN (SELECT DISTINCT user_id_ FROM sys_music_compare_record) smcr ON smcr.user_id_ = s.user_id_

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

@@ -1107,6 +1107,11 @@
             #{id}
         </foreach>
     </update>
+    <update id="updateCloudTeacherEndTime">
+        update student set membership_end_time_ =
+        (select MAX(end_time_) from cloud_teacher_order where status_ = 2 AND end_time_ >= NOW() AND student_id_ = #{studentId})
+        where user_id_ = #{studentId};
+    </update>
 
     <select id="queryStudent" resultMap="Student">
         SELECT s.*,su.username_,su.phone_,o.name_ organ_name_,sb.name_ subject_name_ FROM student s

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/StudentMemberTimeMapper.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.dao.TempDirectorTrainingCampDetailDao">
+
+</mapper>

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -1098,6 +1098,7 @@
             <result column="detail_type_" property="type"/>
             <result column="detail_price_" property="price"/>
             <result column="detail_kit_group_purchase_type_" property="kitGroupPurchaseType"/>
+            <result column="studentInstrumentId" property="studentInstrumentId"/>
             <collection property="goodsList" ofType="com.ym.mec.biz.dal.entity.Goods">
                 <result column="goods_id" property="id"/>
                 <result column="goods_name" property="name"/>
@@ -1108,7 +1109,8 @@
     <select id="getUserApplyOrders" resultMap="applyOrderAndDetail" parameterType="map">
         SELECT spo.*,spod.id_ detail_id_,spod.type_ detail_type_,spod.price_
         detail_price_,spod.kit_group_purchase_type_ detail_kit_group_purchase_type_,
-        g.id_ goods_id, g.name_ goods_name,g.complement_goods_id_list_ complementGoodsIdList
+        g.id_ goods_id, g.name_ goods_name,g.complement_goods_id_list_ complementGoodsIdList,
+        spod.student_instrument_id_ studentInstrumentId
         FROM student_payment_order spo
         LEFT JOIN student_payment_order_detail spod on spo.id_ = spod.payment_order_id_
         LEFT JOIN goods g on FIND_IN_SET(g.id_,spod.goods_id_list_)
@@ -1175,6 +1177,7 @@
         <collection property="list" ofType="com.ym.mec.biz.dal.vo.StudentPaymentOrderVo$StudentPaymentDetailVo">
             <result column="goodsName" property="goodsName"/>
             <result column="price" property="price"/>
+            <result column="detailId" property="detailId"/>
         </collection>
     </resultMap>
 
@@ -1209,7 +1212,8 @@
                a.pay_time_ as payTime,
                a.trans_no_ as transNo,
                b.type_                            as goodsName,
-               ifnull(b.price_, 0)                as price
+               ifnull(b.price_, 0)                as price,
+               b.id_ as detailId
         from student_payment_order as a
                  left join
              student_payment_order_detail as b on a.id_ = b.payment_order_id_

+ 2 - 2
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -253,12 +253,12 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 
     @Override
     public void memberEndAutoQuitMusic() {
-        logger.error("会员到期自动退团");
+        logger.error("学练宝到期自动退团");
     }
 
     @Override
     public void cleanStudentMember() {
-        logger.error("学员会员到期状态更新");
+        logger.error("学员学练宝到期状态更新");
     }
 
     @Override