瀏覽代碼

会员拆分

zouxuan 8 月之前
父節點
當前提交
88cff501b2

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

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

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

+ 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", "商城购物"),

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

+ 4 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.dao.*;
 import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
@@ -72,6 +69,8 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     private TenantInfoService tenantInfoService;
     @Resource
     private MemberRankSettingDao memberRankSettingDao;
+    @Resource
+    private StudentDao studentDao;
     @Override
     public BaseDAO<Long, CloudTeacherOrder> getDAO() {
         return cloudTeacherOrderDao;
@@ -441,7 +440,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         }else {
             cloudTeacherOrderDao.update(cloudTeacherOrder);
         }
-//        studentService.updateMemberRank(cloudTeacherOrder.getStudentId(), cloudTeacherOrder.getType(), cloudTeacherOrder.getTime(), 1);
+        studentDao.updateCloudTeacherEndTime(cloudTeacherOrder.getStudentId());
     }
 
     public Date calcCloudTeacherOrderTime(CloudTeacherOrder cloudTeacherOrder, Date startTime) {

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

@@ -23,7 +23,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;
@@ -162,9 +161,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 +176,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 +186,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 +198,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)){

+ 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

+ 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