Преглед изворни кода

Merge branch 'zouxuan-2022-05-27' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan пре 3 година
родитељ
комит
313b046fdb
17 измењених фајлова са 119 додато и 79 уклоњено
  1. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempLittleArtistTrainingCampUserRelation.java
  2. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CouponDetailTypeEnum.java
  3. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java
  4. 6 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  5. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java
  6. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/TenantOrderRecordEnum.java
  7. 12 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomVo.java
  8. 41 32
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberFeeSettingServiceImpl.java
  10. 7 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  11. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  12. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampUserRelationServiceImpl.java
  13. 4 3
      mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampUserRelationMapper.xml
  14. 6 0
      mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImRoomMessage.java
  15. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/CloudCoachPaymentProgramController.java
  16. 5 5
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  17. 9 9
      mec-web/src/main/resources/exportColumnMapper.ini

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempLittleArtistTrainingCampUserRelation.java

@@ -48,6 +48,10 @@ public class TempLittleArtistTrainingCampUserRelation implements Serializable {
     @ApiModelProperty(value = "创建时间")
     private Date createTime;
 
+    @TableField("apply_time_")
+    @ApiModelProperty(value = "报名时间")
+    private Date applyTime;
+
     public Integer getId() {
         return id;
     }
@@ -96,5 +100,12 @@ public class TempLittleArtistTrainingCampUserRelation implements Serializable {
         this.createTime = createTime;
     }
 
+    public Date getApplyTime() {
+        return applyTime;
+    }
+
+    public void setApplyTime(Date applyTime) {
+        this.applyTime = applyTime;
+    }
 }
 

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

@@ -35,7 +35,7 @@ public enum CouponDetailTypeEnum {
     //VIP = vip课 VIP +乐理课 THEORY_COURSE
     VIP("VIP", "VIP"),
     //会员开通,团练宝   CLOUD_TEACHER  CLOUD_TEACHER_PLUS
-    MEMBER("MEMBER", "团练宝"),
+    MEMBER("MEMBER", "云教练"),
     //全类都可以使用
     FULLCOUPON("FULLCOUPON", "全类券");
 

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java

@@ -73,15 +73,15 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     //活跃用户统计
     ORGAN_TOTAL_STUDENT_NUM("ORGAN_TOTAL_STUDENT_NUM", "分部学员总数", false, false),
     CLOUD_STUDY_LIVELY_STUDENT_NUM("CLOUD_STUDY_LIVELY_STUDENT_NUM", "活跃用户", false, false),
-    CLOUD_STUDY_DAY_USE_STUDENT_NUM("CLOUD_STUDY_DAY_USE_STUDENT_NUM", "团练宝使用用户", false, false),
-    CLOUD_STUDY_NEW_STUDENT_NUM("CLOUD_STUDY_NEW_STUDENT_NUM", "团练宝新增用户", false, false),
-    CLOUD_NEW_STUDENT_NUM("CLOUD_NEW_STUDENT_NUM", "团练宝新用户人数", false, false),
+    CLOUD_STUDY_DAY_USE_STUDENT_NUM("CLOUD_STUDY_DAY_USE_STUDENT_NUM", "云教练使用用户", false, false),
+    CLOUD_STUDY_NEW_STUDENT_NUM("CLOUD_STUDY_NEW_STUDENT_NUM", "云教练新增用户", false, false),
+    CLOUD_NEW_STUDENT_NUM("CLOUD_NEW_STUDENT_NUM", "云教练新用户人数", false, false),
     MEMBER_STUDENT_NUM("MEMBER_STUDENT_NUM", "会员数量", false, false),
     EXPERIENCE_MEMBER_STUDENT_NUM("EXPERIENCE_MEMBER_STUDENT_NUM", "试用会员数量", false, false),
     NEW_MEMBER_STUDENT_NUM("NEW_MEMBER_STUDENT_NUM", "新增会员数量", false, false),
 
-    CLOUD_STUDY_TRAIN_NUM("CLOUD_STUDY_TRAIN_NUM", "团练宝训练次数", false, false),
-    CLOUD_STUDY_TRAIN_TIME("CLOUD_STUDY_TRAIN_TIME", "团练宝训练时长", false, false),
+    CLOUD_STUDY_TRAIN_NUM("CLOUD_STUDY_TRAIN_NUM", "云教练训练次数", false, false),
+    CLOUD_STUDY_TRAIN_TIME("CLOUD_STUDY_TRAIN_TIME", "云教练训练时长", false, false),
 
     //小课数据统计
     STUDENT_VIP_ORDER_NUM("STUDENT_VIP_ORDER_NUM", "学员vip课订单数量", false, false),

+ 6 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -190,21 +190,21 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     BACKSTAGE_STUDENT_APPLY_WITHDRAW("BACKSTAGE_STUDENT_APPLY_WITHDRAW", "学员申请提现"),
     CHILDREN_DAY_NOTICE_PUSH("CHILDREN_DAY_NOTICE_PUSH", "技能评测考级报名推送"),
     CHILDREN_DAY_NOTICE_MSG("CHILDREN_DAY_NOTICE_MSG", "技能评测考级报名短信"),
-    NO_BUY_CLOUD_TEACHER_MSG("NO_BUY_CLOUD_TEACHER_MSG", "未购买买团练宝短信"),
+    NO_BUY_CLOUD_TEACHER_MSG("NO_BUY_CLOUD_TEACHER_MSG", "未购买买云教练短信"),
 
     OA_NOTICE_PUSH("OA_NOTICE_PUSH", "待审批提醒"),
     OA_CC_NOTICE_PUSH("OA_CC_NOTICE_PUSH", "审批抄送提醒"),
     OA_END_NOTICE_PUSH("OA_END_NOTICE_PUSH", "审批结束提醒"),
 
-    //团练宝
-    TRAIN_NO_RANK_STUDENT_PUSH("TRAIN_NO_RANK_STUDENT_PUSH", "团练宝训练提醒"),
-    TRAIN_RANK_STUDENT_PUSH("TRAIN_RANK_STUDENT_PUSH", "团练宝训练提醒"),
-    NO_TRAIN_STUDENT_PUSH("NO_TRAIN_STUDENT_PUSH", "团练宝训练提醒"),
+    //云教练
+    TRAIN_NO_RANK_STUDENT_PUSH("TRAIN_NO_RANK_STUDENT_PUSH", "云教练训练提醒"),
+    TRAIN_RANK_STUDENT_PUSH("TRAIN_RANK_STUDENT_PUSH", "云教练训练提醒"),
+    NO_TRAIN_STUDENT_PUSH("NO_TRAIN_STUDENT_PUSH", "云教练训练提醒"),
 
     COUPON_STOCK_WARNING("COUPON_STOCK_WARNING", "优惠券库存预警"),
 
     APP_REDEMPTION_CODE("APP_REDEMPTION_CODE", "兑换码分配量预警"),
-    CLOUD_TEACHER_ORDER_SUCCESS("CLOUD_TEACHER_ORDER_SUCCESS", "团练宝激活成功"),
+    CLOUD_TEACHER_ORDER_SUCCESS("CLOUD_TEACHER_ORDER_SUCCESS", "云教练激活成功"),
 
     EMAIL_TENANT_ACTIVATION_SUCCESSFUL("EMAIL_TENANT_ACTIVATION_SUCCESSFUL",   "开通成功"),
     EMAIL_TENANT_RENEWAL_SUCCESSFUL("EMAIL_TENANT_RENEWAL_SUCCESSFUL", "续费成功"),

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

@@ -27,8 +27,8 @@ public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum>
     CLASSROOM("CLASSROOM", "课堂课"),
 	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名"),
     MAINTENANCE("MAINTENANCE","乐保服务"),
-    CLOUD_TEACHER("CLOUD_TEACHER","团练宝"),
-    CLOUD_TEACHER_PLUS("CLOUD_TEACHER_PLUS","团练宝"),
+    CLOUD_TEACHER("CLOUD_TEACHER","云教练"),
+    CLOUD_TEACHER_PLUS("CLOUD_TEACHER_PLUS","云教练"),
     THEORY_COURSE("THEORY_COURSE", "乐理课");
 
     private String code;

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

@@ -3,7 +3,7 @@ package com.ym.mec.biz.dal.enums;
 public enum TenantOrderRecordEnum {
     TENANT_OPEN("TENANT_OPEN","机构开通缴费"),
     TENANT_RENEW("TENANT_RENEW","机构续费"),
-    CLOUD_TEACHER("CLOUD_TEACHER","激活团练宝"),
+    CLOUD_TEACHER("CLOUD_TEACHER","激活云教练"),
     TENANT_RECHARGE("TENANT_RECHARGE","机构充值");
 
     private String code;

+ 12 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomVo.java

@@ -74,11 +74,12 @@ public class ImLiveBroadcastRoomVo implements Serializable {
     @ApiModelProperty(value = "是否在首页推广 0否 1是 - 每个机构只能有一个直播间在首页推广")
     private Integer popularize;
 
-    /**
-     * 是否预约过该直播间 0否 1是
-     */
+    @ApiModelProperty(value = "是否预约过该直播间 0否 1是")
     private Integer reserve;
 
+    @ApiModelProperty(value = "当前登录人是否是黑名单用户 0否 1是")
+    private Integer blacklistFlag = 0;
+
     @ApiModelProperty(value = "点赞数")
     private Integer likeNum;
     @ApiModelProperty(value = "当前观看人数")
@@ -275,5 +276,13 @@ public class ImLiveBroadcastRoomVo implements Serializable {
     public void setReserve(Integer reserve) {
         this.reserve = reserve;
     }
+
+    public Integer getBlacklistFlag() {
+        return blacklistFlag;
+    }
+
+    public void setBlacklistFlag(Integer blacklistFlag) {
+        this.blacklistFlag = blacklistFlag;
+    }
 }
 

+ 41 - 32
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -225,11 +225,15 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void update(ImLiveBroadcastRoomDto dto) {
+        Date now = new Date();
+        if (now.getTime() > dto.getLiveStartTime().getTime()) {
+            throw new BizException("设置的直播开始时间不能小于当前时间");
+        }
         ImLiveBroadcastRoom obj = this.getById(dto.getId());
         BeanUtils.copyProperties(dto, obj);
         obj.setRoomConfig(JSONObject.toJSONString(dto.getRoomConfig()));
         obj.setUpdatedBy(getSysUser().getId());
-        obj.setUpdatedTime(new Date());
+        obj.setUpdatedTime(now);
         log.info("update room  >>>  :{}", JSONObject.toJSONString(obj));
         this.updateById(obj);
     }
@@ -326,6 +330,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         Map<String, Object> param = new HashMap<>();
         param.put("tenantId", TenantContextHolder.getTenantId());
         param.put("popularize", 1);
+        param.put("liveState", 1);
         List<ImLiveBroadcastRoomVo> list = baseMapper.queryPage(param);
         if (CollectionUtils.isNotEmpty(list)) {
             return list.get(0);
@@ -338,11 +343,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      * 销毁主讲人退出超过30分钟的直播间
      */
     public void destroyExpiredLiveRoom() {
-        //查询已经开始并且没有删除及销毁的直播间
-        List<ImLiveBroadcastRoom> list = this.list(new WrapperUtil<ImLiveBroadcastRoom>()
-                .hasEq("live_state_", 1)
-                .hasEq("room_state_", 0)
-                .queryWrapper());
+        //查询状态是 未开始和已开始 的直播间
+        List<ImLiveBroadcastRoom> list = this.list(Wrappers.<ImLiveBroadcastRoom>lambdaQuery()
+                .in(ImLiveBroadcastRoom::getLiveState, 0, 1)
+                .eq(ImLiveBroadcastRoom::getRoomState, 0));
         if (CollectionUtils.isEmpty(list)) {
             return;
         }
@@ -365,35 +369,35 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
     private void destroyExpiredLiveRoom(Date now, ImLiveBroadcastRoom room, int expiredMinute) {
         log.error("roomDestroy destroyExpiredLiveRoom >>>> now {} roomInfo : {} expiredMinute:{}", now, JSONObject.toJSONString(room), expiredMinute);
+        //过期时间 = LiveStartTime + expiredMinute
+        Date expiredTime = DateUtil.addMinutes(room.getLiveStartTime(), expiredMinute);
+        //当前时间 小于 过期时间 则不销毁
+        if (now.getTime() <= expiredTime.getTime()) {
+            return;
+        }
         //获取直播间主讲人信息
         RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, room.getSpeakerId().toString()));
         if (speakerCache.isExists()) {
             RoomSpeakerInfo speakerInfo = speakerCache.get();
-            //过期时间= 房间正式开始时间+expiredMinute 分钟
-            Date expiredTime = DateUtil.addMinutes(room.getLiveStartTime(), expiredMinute);
-            //先决条件 当前时间 大于(创建房间时填入的开播时间 + 设置的过期分钟数)
-            if (now.getTime() >= expiredTime.getTime()) {
-
-                //1.主播没有进入房间,则直接销毁房间
-                if (Objects.isNull(speakerInfo.getJoinRoomTime())) {
-                    log.info("roomDestroy not joinRoom >>>> cache : {}", JSONObject.toJSONString(test(room.getRoomUid())));
-                    roomDestroy(room);
-                    return;
-                }
+            //1.主播没有进入房间,则直接销毁房间
+            if (Objects.isNull(speakerInfo.getJoinRoomTime())) {
+                log.info("roomDestroy not joinRoom >>>> cache : {}", JSONObject.toJSONString(test(room.getRoomUid())));
+                roomDestroy(room);
+                return;
+            }
 
-                //如果主播已经进入了房间 就判断是否退出过房间
-                if (Objects.nonNull(speakerInfo.getExitRoomTime())) {
-                    //如果退出过房间 判断退出时间是否大于进入时
-                    if (speakerInfo.getExitRoomTime().getTime() > speakerInfo.getJoinRoomTime().getTime()) {
-                        //如果退出时间大于进入时间,就将退出时间+expiredMinute分钟
-                        Date exitExpiredTime = DateUtil.addMinutes(speakerInfo.getExitRoomTime(), expiredMinute);
-                        if (now.getTime() >= exitExpiredTime.getTime()) {
-                            log.info("roomDestroy exitExpiredTime >>>> cache : {}", JSONObject.toJSONString(test(room.getRoomUid())));
-                            roomDestroy(room);
-                        }
+            //2.已知主播已进入了房间 就判断是否退出过房间
+            if (Objects.nonNull(speakerInfo.getExitRoomTime())) {
+                //如果退出时间 大于 进入时间,则证明退出后再也没有进入房间
+                if (speakerInfo.getExitRoomTime().getTime() > speakerInfo.getJoinRoomTime().getTime()) {
+                    //最终过期时间 =  退出时间+expiredMinute过期时间
+                    Date exitExpiredTime = DateUtil.addMinutes(speakerInfo.getExitRoomTime(), expiredMinute);
+                    //现在时间 大于等于 最终过期时间 则证明退出后至少30分钟没进入过房间
+                    if (now.getTime() >= exitExpiredTime.getTime()) {
+                        log.info("roomDestroy exitExpiredTime >>>> cache : {}", JSONObject.toJSONString(test(room.getRoomUid())));
+                        roomDestroy(room);
                     }
                 }
-
             }
         }
     }
@@ -897,6 +901,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             });
         }, 2, 1, TimeUnit.MINUTES);
         if (!b) {
+            try {
+                Thread.sleep(200L);
+            } catch (InterruptedException e) {
+                log.error("asyncOpsLiveLookTime error: {}", e.getMessage());
+            }
             this.asyncOpsLiveLookTime(roomUid, type, now);
         }
     }
@@ -907,7 +916,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     public void createLiveRoom() {
         RBucket<Object> createLock = redissonClient.getBucket("IM:LIVE_ROOM_CREATE_LOCK");
-        if (!createLock.trySet(1,1, TimeUnit.MINUTES)) {
+        if (!createLock.trySet(1, 1, TimeUnit.MINUTES)) {
             return;
         }
         Date now = new Date();
@@ -1234,7 +1243,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      * @param unit     时间单位
      * @return true 锁成功  false 锁失败
      */
-    public boolean runIfLockCanGet(final String lockName, Runnable runnable, final long waitTime, final long timeout, TimeUnit unit) {
+    private boolean runIfLockCanGet(final String lockName, Runnable runnable, final long waitTime, final long timeout, TimeUnit unit) {
         RLock lock = redissonClient.getLock(lockName);
         if (Objects.isNull(lock)) {
             log.info("runIfLockCanGet lock is null lockName : {}", lockName);
@@ -1251,7 +1260,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             }
         } catch (Exception e) {
             log.error("runIfLockCanGet error lockName : {}", lockName, e);
-            throw new RuntimeException("runIfLockCanGet error lockName :" + lockName, e);
+            throw new BizException("runIfLockCanGet error lockName :" + lockName, e);
         } finally {
             this.unlock(lock);
         }
@@ -1260,7 +1269,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     /**
      * 解锁
      */
-    public void unlock(RLock lock) {
+    private void unlock(RLock lock) {
         if (lock.getHoldCount() != 0) {
             lock.unlock();
         }

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

@@ -63,7 +63,7 @@ public class MemberFeeSettingServiceImpl extends BaseServiceImpl<Integer, Member
                 throw new BizException("请选择正确的会员有效期");
         }
         if (Objects.isNull(amount)) {
-            throw new BizException("未设置团练宝的价格");
+            throw new BizException("未设置云教练的价格");
         }
         return amount;
     }

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

@@ -145,22 +145,22 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult buy(MemberPayParamDto memberPayParamDto) throws Exception {
-        logger.info("团练宝购买:memberPayParamDto:{} ", memberPayParamDto);
+        logger.info("云教练购买:memberPayParamDto:{} ", memberPayParamDto);
         Long paymentId = memberPayParamDto.getPaymentId();
         CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(paymentId);
         if (cloudCoachPaymentProgram == null) {
-            throw new BizException("团练宝缴费订单不存在,请联系指导老师");
+            throw new BizException("云教练缴费订单不存在,请联系指导老师");
         }
         if (cloudCoachPaymentProgram.getStatus() != CloudCoachPaymentProgram.StatusEnum.OPEN) {
-            throw new BizException("当前团练宝缴费订单状态不允许缴费");
+            throw new BizException("当前云教练缴费订单状态不允许缴费");
         }
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         StudentCloudCoachPaymentDetails cloudCoachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(paymentId, sysUser.getId());
         if (cloudCoachPaymentDetails == null) {
-            throw new BizException("您不在当前团练宝缴费项目中,请联系指导老师");
+            throw new BizException("您不在当前云教练缴费项目中,请联系指导老师");
         }
         if (cloudCoachPaymentDetails.getPaymentStatus() == 1) {
-            throw new BizException("当前团练宝订单已支付,感谢您的支持");
+            throw new BizException("当前云教练订单已支付,感谢您的支持");
         }
         //判断用户是否已存在订单
         List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.queryByDealStatus(paymentId.toString(), OrderTypeEnum.MEMBER, DealStatusEnum.ING);
@@ -198,7 +198,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult buy1(MemberPayParamDto memberPayParamDto) throws Exception {
-        logger.info("团练宝购买:memberPayParamDto:{} ", memberPayParamDto);
+        logger.info("云教练购买:memberPayParamDto:{} ", memberPayParamDto);
         SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).orElseThrow(() -> new BizException("用户信息不存在"));
         //判断用户是否已存在订单
         StudentPaymentOrder memberIngOrder = studentPaymentOrderService.getMemberIngOrder(OrderTypeEnum.MEMBER, DealStatusEnum.ING);
@@ -218,7 +218,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
         StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(memberPayParamDto.getCouponIdList(), actualAmount, true, checkCoupon);
         studentPaymentOrder.setUserId(sysUser.getId());
         studentPaymentOrder.setOrganId(sysUser.getOrganId());
-        studentPaymentOrder.setMemo("学员团练宝购买");
+        studentPaymentOrder.setMemo("学员云教练购买");
         studentPaymentOrder.setGroupType(GroupType.MEMBER);
         Map<String, Object> result = getMap(memberPayParamDto.getAmount(), memberPayParamDto.getUseBalancePayment(),studentPaymentOrder);
         //生产团练宝订单

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

@@ -1873,7 +1873,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             for (StudentPaymentOrder studentPaymentOrder : studentPaymentOrderList) {
                 if (StringUtils.equals("205", studentPaymentOrder.getPaymentAccountNo())) {
                     studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
-                    studentPaymentOrder.setMemo("团练宝审核拒绝");
+                    studentPaymentOrder.setMemo("云教练审核拒绝");
                     updateList.add(studentPaymentOrder);
                     studentPaymentOrderService.quitCouponAndBalance(studentPaymentOrder);
                 }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampUserRelationDao;
+import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCampUserRelation;
 import com.ym.mec.biz.dal.vo.TempCampUserQualificationsVo;
 import com.ym.mec.biz.service.SysConfigService;
@@ -20,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
@@ -59,7 +61,7 @@ public class TempLittleArtistTrainingCampUserRelationServiceImpl extends Service
     public void add(Integer campId) {
         SysUser user = getUser();
         RBucket<Object> addCamp = redissonClient.getBucket("TEMP:CAMP_ADD:" + user.getId());
-        if (!addCamp.trySet(1,10, TimeUnit.SECONDS)) {
+        if (!addCamp.trySet(1, 10, TimeUnit.SECONDS)) {
             throw new BizException("正在登记训练营,请勿重复提交");
         }
         TempLittleArtistTrainingCampUserRelation one = this.getOne(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
@@ -82,6 +84,7 @@ public class TempLittleArtistTrainingCampUserRelationServiceImpl extends Service
         this.update(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaUpdate()
                 .set(TempLittleArtistTrainingCampUserRelation::getActivityId, campId)
                 .set(TempLittleArtistTrainingCampUserRelation::getState, TempLittleArtistTrainingCampUserRelation.APPLY)
+                .set(TempLittleArtistTrainingCampUserRelation::getApplyTime, new Date())
                 .eq(TempLittleArtistTrainingCampUserRelation::getUserId, user.getId()));
         addCamp.delete();
     }
@@ -115,6 +118,7 @@ public class TempLittleArtistTrainingCampUserRelationServiceImpl extends Service
         this.setValue("temp_little_artist_training_camp_content", vo::setContent);
         this.setValue("temp_little_artist_training_camp_title", vo::setCampTitle);
         this.setValue("temp_little_artist_training_camp_url", vo::setUrl);
+        this.setValue(SysConfigService.BASE_API_URL, (a) -> vo.setUrl(a + vo.getUrl()));
 
         vo.setCampId(relation.getActivityId());
         vo.setUserName(user.getUsername());

+ 4 - 3
mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampUserRelationMapper.xml

@@ -8,20 +8,21 @@
         <result column="im_group_id_" jdbcType="VARCHAR" property="imGroupId"/>
         <result column="state_" jdbcType="VARCHAR" property="state"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="apply_time_" jdbcType="TIMESTAMP" property="applyTime"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id_
-        , activity_id_, user_id_, im_group_id_, state_, create_time_
+        , activity_id_, user_id_, im_group_id_, state_, create_time_,apply_time_
     </sql>
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCampUserRelation">
         insert into temp_little_artist_training_camp_user_relation(activity_id_, user_id_, im_group_id_, state_,
-        create_time_)
+        create_time_,apply_time_)
         values
         <foreach collection="entities" item="entity" separator=",">
-            (#{entity.activityId}, #{entity.userId}, #{entity.imGroupId}, #{entity.state}, #{entity.createTime})
+            (#{entity.activityId}, #{entity.userId}, #{entity.imGroupId}, #{entity.state}, #{entity.createTime},#{entity.applyTime})
         </foreach>
     </insert>
 

+ 6 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImRoomMessage.java

@@ -18,6 +18,12 @@ public class ImRoomMessage extends BaseMessage {
     //objectName 类型-商品变更
     public static final String LIVE_GOODS_CHANGE = "DY:LIVE_GOODS_CHANGE";
 
+    //objectName 类型-在黑名单中添加该用户
+    public static final String BLOCK_BLACK_USER = "RC:BLOCK_BLACK_USER";
+
+    //objectName 类型-在黑名单中解除该用户
+    public static final String UNBLOCK_BLACK_USER = "RC:UNBLOCK_BLACK_USER";
+
     /**
      * <p>必传
      * 消息类型

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

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

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

@@ -903,7 +903,7 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "学员姓名", "性别", "家长姓名",
                     "家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)",
-                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用团练宝", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"}, new String[]{
+                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用云教练", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"}, new String[]{
                     "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 ? '否' : '是'",
@@ -1100,7 +1100,7 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "团练宝金额", "乐保金额", "订单总价"}, new String[]{
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "云教练金额", "乐保金额", "订单总价"}, new String[]{
                     "organName", "musicGroupName", "userId", "username", "subjectName", "musicalName", "kitGroupPurchaseTypeEnum.msg",
                     "musicalAmount", "accessoriesName", "accessoriesAmount", "courseAmount", "cloudTeacherAmount", "maintenanceAmount", "orderAmount"}, musicalList);
             response.setContentType("application/octet-stream");
@@ -1161,7 +1161,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学生姓名", "家长姓名", "年级", "班级", "性别", "服从调剂", "报名专业",
-                    "实际专业", "联系电话", "学员缴费状态", "乐器购买方式","缴费中/审核中","是否购买团练宝"}, new String[]{
+                    "实际专业", "联系电话", "学员缴费状态", "乐器购买方式","缴费中/审核中","是否购买云教练"}, new String[]{
                     "studentName", "parentsName", "currentGrade", "currentClass", "gender.description",
                     "isAllowAdjust.msg", "subjectName", "actualSubjectName", "parentsPhone", "paymentStatus.desc",
                     "kitGroupPurchaseTypeEnum.msg","payingStatusStr","hasCloudTeacher==1?'有':'没有'"}, studentApplyDetail);
@@ -1534,7 +1534,7 @@ public class ExportController extends BaseController {
         OutputStream ouputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(
-                    new String[]{"布置时间", "截至时间", "训练标题", "老师名字", "分部", "学生姓名", "学生编号", "提交训练", "提交训练时间", "是否评价", "是否有vip", "及时评价", "是否团练宝布置"},
+                    new String[]{"布置时间", "截至时间", "训练标题", "老师名字", "分部", "学生姓名", "学生编号", "提交训练", "提交训练时间", "是否评价", "是否有vip", "及时评价", "是否云教练布置"},
                     new String[]{"createTime", "expireDate", "title", "teacherName", "organName",
                             "user.username", "userId", "statusStr", "submitTime", "isRepliedStr", "existVipCourseStr", "isRepliedTimelyStr", "musicScoreId"}, rows);
             response.setContentType("application/octet-stream");
@@ -2753,7 +2753,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             String[] header = {"学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "指导老师", "声部", "是否有小课",
-                    "训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否团练宝活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"};
+                    "训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否云教练活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"};
             String[] body = {"studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?\"是\":\"否\"", "enable?\"是\":\"否\"",
                             "cloudStudyUseTime+\"分钟\"", "cloudStudyRunningDays+\"天\"", "musicGroupNames", "educationName", "schoolNames",
                             "teacherName", "subjectName", "hasVipGroup>0?\"是\":\"否\"", "cloudStudyUseNum+\"次\"", "cloudStudyUseDays+\"天\"",

+ 9 - 9
mec-web/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?'有':'没有'"]
 
 [分页导出教师薪酬列表]
@@ -111,15 +111,15 @@ headColumns = ["用户编号", "用户名", "手机号", "课程类型", "实际
 fieldColumns = ["userId", "username", "phone", "type.msg", "name", "actualSalary", "subsidy", "settlementTime", "teacherRole.msg"]
 
 [订单列表导出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", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId","groupType.desc","typeDesc.msg","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", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee",     "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc.msg","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [订单列表汇总导出]
-headColumns = ["分部", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它"]
+headColumns = ["分部", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它"]
 fieldColumns = ["organName", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee","musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee"]
 
 [学员小课记录导出]
@@ -171,11 +171,11 @@ headColumns = ["分部", "单位编号", "单位名称", "是否启用","乐团
 fieldColumns = ["organization.name", "id", "name", "isEnable == true ? '是':'否'", "realName", "isEnable == true ? '开启' : '未开启'"]
 
 [财务管理导出1]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc.msg","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", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc.msg","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [老师默认课酬导出]
@@ -243,7 +243,7 @@ headColumns = ["排名", "分部", "学员总数", "活跃人数", "活跃人数
 fieldColumns = ["index", "organName", "totalStudentNum", "cloudStudyLivelyStudentNum", "cloudStudyLivelyStudentDuty+'%'", "cloudStudyUseStudentNum", "newCloudStudyStudentNum", "cloudStudyUseStudentDuty+'%'", "vipStudentNum", "vipStudentDuty+'%'", "newMemberStudentNum"]
 
 [分部云教练学员训练数据导出]
-headColumns = ["学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "指导老师", "声部", "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否团练宝活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
+headColumns = ["学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "指导老师", "声部", "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否云教练活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
 fieldColumns = ["studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'", "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames",         "teacherName", "subjectName", "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"]
 
 [分部云教练活动统计数据导出]