瀏覽代碼

会员拆分

zouxuan 8 月之前
父節點
當前提交
37e2fa8317
共有 18 個文件被更改,包括 247 次插入718 次删除
  1. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java
  2. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/ExportController.java
  3. 18 18
      mec-application/src/main/java/com/ym/mec/web/controller/StudentManageController.java
  4. 13 13
      mec-application/src/main/resources/exportColumnMapper.ini
  5. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  6. 7 359
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  7. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherStudent.java
  8. 4 96
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherOrderQueryInfo.java
  9. 4 127
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java
  10. 2 56
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentSignQueryInfo.java
  11. 39 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/CloudTeacherOrderWrapper.java
  12. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  14. 97 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  15. 18 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  16. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  17. 22 1
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  18. 7 11
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

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

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

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

@@ -1233,7 +1233,7 @@ public class ExportController extends BaseController {
     @RequestMapping("export/musicGroupStudent")
     @PreAuthorize("@pcs.hasPermissions('export/musicGroupStudent')")
     public void queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo, HttpServletResponse response) throws IOException {
-        queryInfo.setIsExport(true);
+        queryInfo.setExport(true);
         queryInfo.setPage(1);
         queryInfo.setRows(49999);
         PageInfo<MusicGroupStudentsDto> musicGroupStudentsDtoPageInfo = studentManageService.queryMusicGroupStudent(queryInfo);

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

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

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

@@ -75,7 +75,7 @@ headColumns = ["课程组编号", "课程组名称", "分部", "指导老师", "
 fieldColumns = ["musicGroupId", "courseGroupName", "organName", "teacherName", "settlementStatus.msg", "expectRewardAmount", "settlementDate", "memo"]
 
 [导出学员列表]
-headColumns = ["分部", "学员编号", "学员姓名", "性别", "家长姓名","家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)","所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用云教练", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"]
+headColumns = ["分部", "学员编号", "学员姓名", "性别", "家长姓名","家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)","所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用学练宝", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"]
 fieldColumns = ["organName", "userId", "username", "gender.description", "parentsName", "parentsPhone", "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg","noStartPracticeCourseNum","noStartVipCourseNum", "courseBalance", "balance", "musicGroupName", "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'", "experienceMembershipEndTime","membershipEndTime == null ? '未试用' : membershipDay >= 0 ? membershipDay : '已失效'"]
 
 [导出陪练课列表]
@@ -99,11 +99,11 @@ headColumns = ["分部", "乐团", "商品类型", "商品名称", "型号", "
 fieldColumns = ["brief", "memo", "type.desc", "name", "specification", "sellCount"]
 
 [导出学员采购清单明细]
-headColumns = ["分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "云教练金额", "乐保金额", "订单总价"]
+headColumns = ["分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "学练宝金额", "乐保金额", "订单总价"]
 fieldColumns = ["organName", "musicGroupName", "userId", "username", "subjectName", "musicalName", "kitGroupPurchaseTypeEnum.msg", "musicalAmount", "accessoriesName", "accessoriesAmount", "courseAmount", "cloudTeacherAmount", "maintenanceAmount", "orderAmount"]
 
 [学生详情列表导出]
-headColumns = ["学生姓名", "家长姓名", "年级", "班级", "性别", "服从调剂", "报名专业","实际专业", "联系电话", "学员缴费状态", "乐器购买方式","缴费中/审核中","是否购买云教练"]
+headColumns = ["学生姓名", "家长姓名", "年级", "班级", "性别", "服从调剂", "报名专业","实际专业", "联系电话", "学员缴费状态", "乐器购买方式","缴费中/审核中","是否购买学练宝"]
 fieldColumns = ["studentName", "parentsName", "currentGrade", "currentClass", "gender.description", "isAllowAdjust.msg", "subjectName", "actualSubjectName", "parentsPhone", "paymentStatus.desc", "kitGroupPurchaseTypeEnum.msg","payingStatusStr","hasCloudTeacher==1?'有':'没有'"]
 
 [分页导出教师薪酬列表]
@@ -115,15 +115,15 @@ headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount","balancePaymentAmount","couponRemitFee", "transferFee", "platformFee", "payTime", "organName","memo"]
 
 [订单列表导出1]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额", "课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它", "汇付手续费","平台手续费", "到账时间","关联乐团ID/VIP课ID","课程形态","类型","收费乐团编号","收费乐团","零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额", "课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它", "汇付手续费","平台手续费", "到账时间","关联乐团ID/VIP课ID","课程形态","类型","收费乐团编号","收费乐团","零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount","balancePaymentAmount","couponRemitFee","musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId","groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [订单列表导出2]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它","平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它","平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee",     "musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee",     "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [订单列表汇总导出]
-headColumns = ["分部", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它"]
+headColumns = ["分部", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它"]
 fieldColumns = ["organName", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee","musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee", "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee"]
 
 [学员小课记录导出]
@@ -175,11 +175,11 @@ headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee", "transferFee", "platformFee", "payTime", "organName", "memo"]
 
 [财务管理导出1]
-headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee","musicGroupCourseFee", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [财务管理导出2]
-headColumns = ["序号", "业务分部", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "业务分部", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount" , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee","musicGroupCourseFee", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [老师默认课酬导出]
@@ -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"]
 
 [分部云教练活动统计数据导出]
@@ -339,11 +339,11 @@ headColumns = ["合作单位", "总金额"]
 fieldColumns = ["name", "amount"]
 
 [老师云教练使用数据]
-headColumns = ["分部", "老师姓名", "声部", "课程时长(分)", "课程云教练使用时长(分)", "云教练使用总时长(分)"]
+headColumns = ["分部", "老师姓名", "声部", "课程时长(分)", "课程学练宝使用时长(分)", "学练宝使用总时长(分)"]
 fieldColumns = ["organName", "teacherName", "subjectName", "courseTime", "playTime", "totalPlayTime"]
 
 [oa费用汇总]
-headColumns = ["城市","固定人力成本","房屋","办公","水电物业","变动人力成本","差旅","外部服务","福利","活动","交通","考级","临时场地租赁","通讯","邮递运输","招待费","其他","学员管理费","云教练成本","网络教室成本","业务退费","内部结算","手续费","税费"]
+headColumns = ["城市","固定人力成本","房屋","办公","水电物业","变动人力成本","差旅","外部服务","福利","活动","交通","考级","临时场地租赁","通讯","邮递运输","招待费","其他","学员管理费","学练宝成本","网络教室成本","业务退费","内部结算","手续费","税费"]
 fieldColumns = ["organName", "fixedHumanCost", "house", "office", "mainsProperty","variableHumanCost", "travel","services", "welfare", "activities", "traffic", "certificates", "instrument","communications", "postalTransport", "hospitality", "other", "studentManagementFeeAdjustment","cloudCoachingCost", "network", "refund", "internalSettlement", "commission", "tax"]
 
 [oa费用明细]
@@ -351,7 +351,7 @@ headColumns = ["城市","钉钉流程编号","费用归属学校","申请人","
 fieldColumns = ["organName","batchNo","cooperationOrganName","applyUser","feeProject.desc","type.desc","amount","paymentTime","cause","studentId","currentAmount"]
 
 [经营报表收入汇总]
-headColumns = ["城市","学生指导费课耗收入","承担课程云教练收入","学校课程采买课耗收入","考级","维修费用","乐保费用","其他服务收入","不承担课程云教练收入","团购乐器","团购教辅","大件乐器","其他","服务收入","销售收入"]
+headColumns = ["城市","学生指导费课耗收入","承担课程学练宝收入","学校课程采买课耗收入","考级","维修费用","乐保费用","其他服务收入","不承担课程学练宝收入","团购乐器","团购教辅","大件乐器","其他","服务收入","销售收入"]
 fieldColumns = ["organName","studentGuidanceIncome","cloudCoachIncome","coursePurchaseIncome","examIncome","maintenanceCost","instrumentInsuranceCost","otherServiceIncome","saleCloudCoachIncome","groupPurchaseInstruments","groupPurchaseTeachingAids","largeInstruments","otherIncome","serviceIncome","salesIncome"]
 
 [课程收入明细导出]
@@ -371,7 +371,7 @@ headColumns = ["分部","乐团名称","乐团编号","学员编号","学员姓
 fieldColumns = ["organName","musicGroupName","musicGroupId","studentId","studentName","classroom","comprehensive","high","highOnline","mix","single","trainingMix","trainingSingle"]
 
 [云教练待激活明细]
-headColumns = ["分部","学员编号","学员姓名","手机号","学员声部","云教练类型","数量","缴费金额(元)","状态","取消原因","操作人","操作时间","获得资格时间"]
+headColumns = ["分部","学员编号","学员姓名","手机号","学员声部","学练宝版本","学练宝类型","数量","缴费金额(元)","状态","取消原因","操作人","操作时间","获得资格时间"]
 fieldColumns = ["organName","studentId","name","phone","subjectName","type.msg","time","amount","status == 1 ? '待激活':'已取消'","cancelReason","operatorName","operateTime","createTime"]
 
 [平衡关系-乐团课]

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

@@ -134,4 +134,6 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
     int countByMemberRankSetttingId(@Param("memberRankSettingId") Integer memberRankSettingId);
 
     Date getActivationMaxTime(@Param("studentId") Integer studentId, @Param("level") Integer level);
+
+    List<CloudTeacherOrder> queryByUserIds(@Param("userIds") List<Integer> userIds, @Param("status") Integer status);
 }

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.CloudTeacherAddQueryInfo;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 import org.springframework.transaction.annotation.Transactional;
@@ -124,4 +125,7 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
     CloudTeacherOrder queryByOrderId(Long orderId);
 
     Boolean cancelInactive(CloudTeacherCancel cloudTeacherCancel,Integer tenantId);
+
+    //获取用户生效中的云教练详情列表
+    List<CloudTeacherOrderWrapper.StudentMemberDetail> getEffectiveCloudTeacherOrder(List<Integer> userIds);
 }

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

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

+ 97 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -7,6 +7,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.dto.Mapper;
@@ -16,6 +17,7 @@ import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.ReturnFeeEnum;
 import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -31,10 +33,10 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -46,40 +48,34 @@ import static com.ym.mec.biz.dal.enums.PeriodEnum.*;
 public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTeacherOrder> implements CloudTeacherOrderService {
 
     private static final Logger log = LoggerFactory.getLogger(CloudTeacherOrderServiceImpl.class);
-    @Autowired
+    @Resource
     private CloudTeacherOrderDao cloudTeacherOrderDao;
-    @Autowired
-    private StudentService studentService;
-    @Autowired
-    private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
-    @Autowired
+    @Resource
     private TenantConfigService tenantConfigService;
-    @Autowired
+    @Resource
     private PayService payService;
-    @Autowired
+    @Resource
     private IdGeneratorService idGenerator;
-    @Autowired
+    @Resource
     private TenantOrderRecordService tenantOrderRecordService;
-    @Autowired
+    @Resource
     private SysConfigDao sysConfigDao;
-
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
-
-    @Autowired
+    @Resource
     private EmployeeDao employeeDao;
-
-    @Autowired
+    @Resource
     private SysUserCashAccountLogService sysUserCashAccountLogService;
-
+    @Resource
+    private SysMessageService sysMessageService;
+    @Resource
+    private TenantInfoService tenantInfoService;
+    @Resource
+    private MemberRankSettingDao memberRankSettingDao;
     @Override
     public BaseDAO<Long, CloudTeacherOrder> getDAO() {
         return cloudTeacherOrderDao;
     }
-    @Autowired
-    private SysMessageService sysMessageService;
-    @Autowired
-    private TenantInfoService tenantInfoService;
 
 
     @Override
@@ -138,7 +134,24 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             List<SimpleUserDto> byIds = employeeDao.findByIds(operatorIdList);
             byIds.forEach(next -> empMapById.put(next.getUserId(), next));
         }
+        //获取会员名称
+        List<Integer> memberRankIds = dataList.stream().map(CloudTeacherStudent::getMemberRankId).collect(Collectors.toList());
+        List<MemberRankSetting> memberRankSettings = memberRankSettingDao.selectBatchIds(memberRankIds);
+        List<Integer> parentRankIds = memberRankSettings.stream().map(MemberRankSetting::getParentId).filter(parentId -> parentId != 0).collect(Collectors.toList());
+        List<MemberRankSetting> parentMemberRankSettings = memberRankSettingDao.selectBatchIds(parentRankIds);
+        Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+        Map<Integer, MemberRankSetting> parentMemberRankSettingMap = parentMemberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+        //获取
         for (CloudTeacherStudent cst : dataList) {
+            MemberRankSetting rankSetting = memberRankSettingMap.get(cst.getMemberRankId());
+            if (rankSetting != null) {
+                MemberRankSetting parentRank = parentMemberRankSettingMap.get(rankSetting.getParentId());
+                if (parentRank != null) {
+                    cst.setMemberName(parentRank.getName() + "-" + rankSetting.getName());
+                } else {
+                    cst.setMemberName(rankSetting.getName());
+                }
+            }
             cst.setOrganName(organNameMap.get(cst.getOrganId()));
             if (cst.getOperator() != null) {
                 cst.setOperatorName(empMapById.getOrDefault(cst.getOperator(), new SimpleUserDto()).getUserName());
@@ -196,8 +209,25 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             List<SimpleUserDto> byIds = employeeDao.findByIds(operatorIdList);
             byIds.forEach(next -> empMapById.put(next.getUserId(), next));
         }
+        //获取会员名称
+        List<Integer> memberRankIds = dataList.stream().map(CloudTeacherStudent::getMemberRankId).collect(Collectors.toList());
+        List<MemberRankSetting> memberRankSettings = memberRankSettingDao.selectBatchIds(memberRankIds);
+        List<Integer> parentRankIds = memberRankSettings.stream().map(MemberRankSetting::getParentId).filter(parentId -> parentId != 0).collect(Collectors.toList());
+        List<MemberRankSetting> parentMemberRankSettings = memberRankSettingDao.selectBatchIds(parentRankIds);
+        Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+        Map<Integer, MemberRankSetting> parentMemberRankSettingMap = parentMemberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+
         TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", queryInfo.getTenantId()));
         for (CloudTeacherStudent cst : dataList) {
+            MemberRankSetting rankSetting = memberRankSettingMap.get(cst.getMemberRankId());
+            if (rankSetting != null) {
+                MemberRankSetting parentRank = parentMemberRankSettingMap.get(rankSetting.getParentId());
+                if (parentRank != null) {
+                    cst.setMemberName(parentRank.getName() + "-" + rankSetting.getName());
+                } else {
+                    cst.setMemberName(rankSetting.getName());
+                }
+            }
             cst.setOrganName(organNameMap.get(cst.getOrganId()));
             if (cst.getOperator() != null) {
                 cst.setOperatorName(empMapById.getOrDefault(cst.getOperator(), new SimpleUserDto()).getUserName());
@@ -480,4 +510,49 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
 
         return true;
     }
+
+    @Override
+    public List<CloudTeacherOrderWrapper.StudentMemberDetail> getEffectiveCloudTeacherOrder(List<Integer> userIds) {
+        //获取生效中的会员
+        List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails = new ArrayList<>();
+        List<CloudTeacherOrder> activeCloudTeachers = cloudTeacherOrderDao.queryByUserIds(userIds,2);
+        if (CollectionUtils.isNotEmpty(activeCloudTeachers)) {
+            //获取所有的会员列表
+            List<Integer> memberRankIds = activeCloudTeachers.stream().map(CloudTeacherOrder::getLevel).distinct().collect(Collectors.toList());
+            List<MemberRankSetting> memberRankSettings = memberRankSettingDao.selectBatchIds(memberRankIds);
+            //获取所有父级会员
+            List<Integer> parentRankIds = memberRankSettings.stream().map(MemberRankSetting::getParentId).filter(parentId -> parentId != 0).collect(Collectors.toList());
+            List<MemberRankSetting> parentMemberRankSettings = memberRankSettingDao.selectBatchIds(parentRankIds);
+            Map<Integer, MemberRankSetting> memberRankSettingMap = memberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+            Map<Integer, MemberRankSetting> parentMemberRankSettingMap = parentMemberRankSettings.stream().collect(Collectors.toMap(MemberRankSetting::getId, memberRankSetting -> memberRankSetting));
+            //按学员分组
+            Map<Integer, List<CloudTeacherOrder>> cloudTeacherOrderMap = activeCloudTeachers.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
+            cloudTeacherOrderMap.forEach((k, v) -> {
+                //按会员等级分组,同一个级别的会员,去最大的截止时间
+                Map<Integer, List<CloudTeacherOrder>> memberRankMap = v.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getLevel));
+                memberRankMap.forEach((key, value) -> {
+                    CloudTeacherOrderWrapper.StudentMemberDetail studentMemberDetail = new CloudTeacherOrderWrapper.StudentMemberDetail();
+                    studentMemberDetail.setStudentId(k);
+                    //拼接会员名称
+                    MemberRankSetting rankSetting = memberRankSettingMap.get(key);
+                    if (rankSetting != null) {
+                        MemberRankSetting parentRank = parentMemberRankSettingMap.get(rankSetting.getParentId());
+                        if (parentRank != null) {
+                            studentMemberDetail.setMemberRankName(parentRank.getName() + "-" + rankSetting.getName());
+                        } else {
+                            studentMemberDetail.setMemberRankName(rankSetting.getName());
+                        }
+                    }
+                    //获取最大的截止时间
+                    Date maxTime = value.stream().map(CloudTeacherOrder::getEndTime).max(Date::compareTo).get();
+                    studentMemberDetail.setEndTime(maxTime);
+                    //剩余天数
+                    studentMemberDetail.setRemainingDays(DateUtil.daysBetween(new Date(), maxTime));
+                    studentMemberDetail.setMemberRankId(key);
+                    studentMemberDetails.add(studentMemberDetail);
+                });
+            });
+        }
+        return studentMemberDetails;
+    }
 }

+ 18 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -1,7 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -11,10 +10,9 @@ import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.service.*;
-import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.common.entity.ImResult;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
@@ -597,10 +595,10 @@ public class StudentManageServiceImpl implements StudentManageService {
         MapUtil.populateMap(params, queryInfo);
         List<MusicGroupStudentsDto> dataList = new ArrayList<>();
         List<StudentRegistration> studentRegistrations = studentRegistrationDao.getMusicGroupStu(queryInfo.getMusicGroupId());
-        if (studentRegistrations.size() == 0) {
+        if (CollectionUtils.isEmpty(studentRegistrations)) {
             return pageInfo;
         }
-        List<Integer> userIds = studentRegistrations.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+        List<Integer> userIds = studentRegistrations.stream().map(StudentRegistration::getUserId).collect(Collectors.toList());
         if (queryInfo.getHasCourse() != null) {
             //有剩余课程的学员
             List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(userIds, "VIP,PRACTICE");
@@ -623,7 +621,7 @@ public class StudentManageServiceImpl implements StudentManageService {
         }
         params.put("userIds", userIds);
         int count = studentManageDao.countMusicGroupStudent(params);
-        if (queryInfo.getIsExport() && count > 50000) {
+        if (queryInfo.isExport() && count > 50000) {
             throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
         }
         pageInfo.setTotal(count);
@@ -643,7 +641,7 @@ public class StudentManageServiceImpl implements StudentManageService {
                     }
                 }
             }
-            List<Integer> collect = dataList.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+            List<Integer> collect = dataList.stream().map(MusicGroupStudentsDto::getUserId).collect(Collectors.toList());
             List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(collect, "VIP,PRACTICE");
             List<SubjectChange> waitPayChange = subjectChangeDao.getMusicGroupWaitPay(queryInfo.getMusicGroupId());
             Map<Integer, List<SubjectChange>> studentWaitPayChange = waitPayChange.stream().collect(Collectors.groupingBy(SubjectChange::getStudentId));
@@ -656,7 +654,16 @@ public class StudentManageServiceImpl implements StudentManageService {
             Map<Integer, List<CloudTeacherOrder>> studentCloudTeacherMap = studentCloudTeacherOrders.stream().collect(Collectors.groupingBy(CloudTeacherOrder::getStudentId));
             Date nowDate = new Date();
             Map<Long, String> cloudMap = MapUtil.convertMybatisMap(cloudTeacherOrderService.queryNoStartByUserIds(new HashSet<>(collect), null));
-            dataList.forEach(e -> {
+
+            //获取生效中的会员详情列表
+            List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails = cloudTeacherOrderService.getEffectiveCloudTeacherOrder(collect);
+            for (MusicGroupStudentsDto e : dataList) {
+                //汇总学员会员信息
+                if (!CollectionUtils.isEmpty(studentMemberDetails)) {
+                    List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetailList =
+                            studentMemberDetails.stream().filter(s -> s.getStudentId().equals(e.getUserId())).collect(Collectors.toList());
+                    e.setCloudTeacherOrderList(studentMemberDetailList);
+                }
                 //如果会员已过期、是否有未生效的会员
                 if (e.getMemberRankSettingId() == null) {
                     String s = cloudMap.get(e.getUserId().longValue());
@@ -674,7 +681,7 @@ public class StudentManageServiceImpl implements StudentManageService {
                 }
                 if (studentCloudTeacherMap.containsKey(e.getUserId())) {
                     List<CloudTeacherOrder> cloudTeacherOrders = studentCloudTeacherMap.get(e.getUserId());
-                    if (cloudTeacherOrders != null && cloudTeacherOrders.size() > 0) {
+                    if (!CollectionUtils.isEmpty(cloudTeacherOrders)) {
                         BigDecimal cloudAmount = BigDecimal.ZERO;
                         for (CloudTeacherOrder cloudTeacherOrder : cloudTeacherOrders) {
                             if (cloudTeacherOrder.getEndTime() == null || DateUtil.stringToDate(DateUtil.format(cloudTeacherOrder.getEndTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT), DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
@@ -685,14 +692,14 @@ public class StudentManageServiceImpl implements StudentManageService {
                         e.setCloudTeacherAmount(cloudAmount);
                     }
                 }
-            });
+            }
         }
         pageInfo.setRows(dataList);
         return pageInfo;
     }
 
     @Override
-    public Object musicGroupStudentsSum(String musicGroupId) {
+    public Map<String, Object> musicGroupStudentsSum(String musicGroupId) {
         Map<String, Object> resultMap = new HashMap<>(4);
         //乐团在读人数
         resultMap.put("studying", studentManageDao.countStudyNum(musicGroupId));

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

@@ -827,7 +827,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 String childGoodIds = "";
                 for (Goods goods : studentPaymentOrderDetail.getGoodsList()) {
                     if (StringUtils.isNotBlank(goods.getComplementGoodsIdList())) {
-                        childGoodIds += StringUtils.isNotBlank(childGoodIds) ? "," : "" + goods.getComplementGoodsIdList();
+                        childGoodIds += StringUtils.isNotBlank(childGoodIds) ? "," : goods.getComplementGoodsIdList();
                     }
                 }
                 if (StringUtils.isNotBlank(childGoodIds)) {

+ 22 - 1
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml

@@ -49,6 +49,7 @@
         <result column="order_create_time_" property="studentPaymentOrder.createTime"/>
         <result column="name_" property="memberRankSetting.name"/>
         <result column="icon_" property="memberRankSetting.icon"/>
+        <result column="intro_" property="memberRankSetting.intro"/>
         <result column="music_group_id_" property="studentPaymentOrder.musicGroupId"/>
     </resultMap>
 
@@ -232,7 +233,8 @@
     </select>
     
     <select id="queryOrderInfoByOrderId" resultMap="CloudTeacherOrderDto">
-	SELECT cto.*,spo.status_ trans_status_,spo.expect_amount_,mrs.name_,mrs.icon_ FROM cloud_teacher_order cto
+	SELECT cto.*,spo.status_ trans_status_,spo.expect_amount_,mrs.name_,mrs.icon_,mrs.intro_
+	FROM cloud_teacher_order cto
         left join student_payment_order spo on cto.order_id_ = spo.id_
         left join member_rank_setting mrs on mrs.id_ = cto.level_
         where spo.type_ = 'MEMBER' and order_id_ = #{orderId}
@@ -338,6 +340,7 @@
                ,cto.cancel_reason_ as cancelReason
                 ,cto.organ_id_ organId
                 ,cto.create_time_ createTime
+                ,cto.level_ memberRankId
         from cloud_teacher_order cto
         left join student s on cto.student_id_ = s.user_id_
         left join sys_user u on cto.student_id_ = u.id_
@@ -353,6 +356,9 @@
             <if test="musicGroupId != null and musicGroupId != ''">
             	AND sr.music_group_id_ = #{musicGroupId}
             </if>
+            <if test="memberRankId != null">
+                AND cto.level_ = #{memberRankId}
+            </if>
             <if test="queryCondition != null and queryCondition != ''">
                 AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
             </if>
@@ -392,6 +398,9 @@
             <if test="musicGroupId != null and musicGroupId != ''">
             	AND sr.music_group_id_ = #{musicGroupId}
             </if>
+            <if test="memberRankId != null">
+            	AND cto.level_ = #{memberRankId}
+            </if>
             <if test="queryCondition != null and queryCondition != ''">
                 AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
             </if>
@@ -618,4 +627,16 @@
     <select id="getActivationMaxTime" resultType="java.util.Date">
         select max(end_time_) from cloud_teacher_order where student_id_ = #{studentId} and level_ = #{level} and status_ = 2
     </select>
+    <select id="queryByUserIds" resultType="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
+        select * from cloud_teacher_order where student_id_ in
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+        <if test="status != null">
+            and status_ = #{status}
+            <if test="status == 2">
+                and end_time_ &gt;= NOW()
+            </if>
+        </if>
+    </select>
 </mapper>

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

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