Browse Source

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into saas

yonge 3 years ago
parent
commit
3ac524f194
28 changed files with 257 additions and 147 deletions
  1. 0 3
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysRoleServiceImpl.java
  2. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderMemberDao.java
  3. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantAssetsInfoDao.java
  4. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantCloudCourseRecordDao.java
  5. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CalenderAddStudent.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentBaseCalender.java
  7. 0 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentCalenderDto.java
  8. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderBase.java
  9. 0 24
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantCloudCourseRecord.java
  10. 5 12
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PeriodEnum.java
  11. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderMemberService.java
  12. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantAssetsInfoService.java
  13. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantCloudCourseRecordService.java
  14. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  15. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  16. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderMemberServiceImpl.java
  17. 30 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  18. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSchoolTermCourseDetailServiceImpl.java
  19. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  20. 67 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantAssetsInfoServiceImpl.java
  21. 5 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantCloudCourseRecordServiceImpl.java
  22. 1 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  23. 3 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  24. 16 15
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  25. 20 0
      mec-biz/src/main/resources/config/mybatis/TenantAssetsInfoMapper.xml
  26. 19 11
      mec-biz/src/main/resources/config/mybatis/TenantCloudCourseRecordMapper.xml
  27. 2 16
      mec-web/src/main/java/com/ym/mec/web/controller/TenantAssetsInfoController.java
  28. 27 0
      mec-web/src/main/java/com/ym/mec/web/controller/TenantCloudCourseRecordController.java

+ 0 - 3
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysRoleServiceImpl.java

@@ -1,15 +1,12 @@
 package com.ym.mec.auth.service.impl;
 
 import com.ym.mec.auth.api.entity.SysRole;
-import com.ym.mec.auth.api.entity.SysRoleMenu;
 import com.ym.mec.auth.dal.dao.SysRoleDao;
 import com.ym.mec.auth.dal.dao.SysRoleMenuDao;
 import com.ym.mec.auth.service.SysRoleService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.common.tenant.TenantContextHolder;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

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

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

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ym.mec.biz.dal.entity.TenantAssetsInfo;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -16,5 +17,10 @@ public interface TenantAssetsInfoDao extends BaseMapper<TenantAssetsInfo> {
 
     int insertBatch(@Param("entities") List<TenantAssetsInfo> entities);
 
+    int frozenAmount(BigDecimal frozenAmount);
+
+    int recoverAmount(BigDecimal recoverAmount);
+
+    int deductAmount(BigDecimal deductAmount);
 }
 

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantCloudCourseRecordDao.java

@@ -18,5 +18,6 @@ public interface TenantCloudCourseRecordDao extends BaseMapper<TenantCloudCourse
 
     <T> IPage<T> queryPage(Page<T> page, @Param("param") Map<String, Object> param);
 
+    TenantCloudCourseRecord queryLastRecord(Integer courseId);
 }
 

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CalenderAddStudent.java

@@ -0,0 +1,25 @@
+package com.ym.mec.biz.dal.dto;
+
+//进行中加学员参数拓展
+public class CalenderAddStudent {
+
+    private String classGroupIds;
+
+    private String studentIds;
+
+    public String getClassGroupIds() {
+        return classGroupIds;
+    }
+
+    public void setClassGroupIds(String classGroupIds) {
+        this.classGroupIds = classGroupIds;
+    }
+
+    public String getStudentIds() {
+        return studentIds;
+    }
+
+    public void setStudentIds(String studentIds) {
+        this.studentIds = studentIds;
+    }
+}

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

@@ -47,6 +47,17 @@ public class MusicGroupPaymentBaseCalender {
 	@ApiModelProperty(value = "乐团课程信息", required = false)
 	private List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettingsList;
 
+	@ApiModelProperty(value = "进行中加学员拓展信息", required = false)
+	private CalenderAddStudent calenderAddStudent;
+
+	public CalenderAddStudent getCalenderAddStudent() {
+		return calenderAddStudent;
+	}
+
+	public void setCalenderAddStudent(CalenderAddStudent calenderAddStudent) {
+		this.calenderAddStudent = calenderAddStudent;
+	}
+
 	public List<MusicGroupPaymentCalenderActivity> getCalenderActivityList() {
 		return calenderActivityList;
 	}

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

@@ -78,16 +78,6 @@ public class MusicGroupPaymentCalenderDto extends BaseEntity {
 		this.memberRankSettingId = memberRankSettingId;
 	}
 
-	private Boolean autoCreate = false;
-
-	public Boolean getAutoCreate() {
-		return autoCreate;
-	}
-
-	public void setAutoCreate(Boolean autoCreate) {
-		this.autoCreate = autoCreate;
-	}
-
 	@ApiModelProperty(value = "跨团合并时缴费项目中学员的缴费明细")
 	private List<MusicGroupPaymentCalenderStudentDetail> musicGroupPaymentCalenderStudentDetails;
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderBase.java

@@ -1,11 +1,12 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
 import java.util.Date;
 
-public class MusicGroupPaymentCalenderBase {
+public class MusicGroupPaymentCalenderBase extends BaseEntity {
     private long id;
 
     @ApiModelProperty(value = "数量", required = false)

+ 0 - 24
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantCloudCourseRecord.java

@@ -48,14 +48,6 @@ public class TenantCloudCourseRecord implements Serializable {
     @ApiModelProperty(value = "创建时间")
     private Date createdTime;
 
-    @TableField("updated_by_")
-    @ApiModelProperty(value = "更新人")
-    private Integer updatedBy;
-
-    @TableField("updated_time_")
-    @ApiModelProperty(value = "更新时间")
-    private Date updatedTime;
-
     private static final long serialVersionUID = 1L;
 
     public Integer getId() {
@@ -114,21 +106,5 @@ public class TenantCloudCourseRecord implements Serializable {
         this.createdTime = createdTime;
     }
 
-    public Integer getUpdatedBy() {
-        return updatedBy;
-    }
-
-    public void setUpdatedBy(Integer updatedBy) {
-        this.updatedBy = updatedBy;
-    }
-
-    public Date getUpdatedTime() {
-        return updatedTime;
-    }
-
-    public void setUpdatedTime(Date updatedTime) {
-        this.updatedTime = updatedTime;
-    }
-
 }
 

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

@@ -5,22 +5,15 @@ import com.ym.mec.common.enums.BaseEnum;
 /**
  * 周期
  */
-public enum PeriodEnum implements BaseEnum<Integer, PeriodEnum> {
-	DAY(1,"日"), MONTH(2,"月"), QUARTERLY(3,"季度"), YEAR_HALF(4,"半年"), YEAR(5,"年");
-
-	private Integer code;
+public enum PeriodEnum implements BaseEnum<String, PeriodEnum> {
+	DAY("日"), MONTH("月"), QUARTERLY("季度"), YEAR_HALF("半年"), YEAR("年");
 
 	private String msg;
 
-	PeriodEnum(Integer code,String msg) {
-		this.code = code;
+	PeriodEnum(String msg) {
 		this.msg = msg;
 	}
 
-	public void setCode(Integer code) {
-		this.code = code;
-	}
-
 	public String getMsg() {
 		return msg;
 	}
@@ -30,7 +23,7 @@ public enum PeriodEnum implements BaseEnum<Integer, PeriodEnum> {
 	}
 
 	@Override
-	public Integer getCode() {
-		return this.code;
+	public String getCode() {
+		return name();
 	}
 }

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

@@ -9,5 +9,5 @@ public interface MusicGroupPaymentCalenderMemberService extends BaseService<Long
 
     void deleteByCalenderId(Long calenderId);
 
-    List<MusicGroupPaymentCalenderMember> findByCalenderId(Long calenderId);
+    MusicGroupPaymentCalenderMember findByCalenderId(Long calenderId);
 }

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

@@ -14,6 +14,10 @@ import java.util.List;
  */
 public interface TenantAssetsInfoService extends IService<TenantAssetsInfo> {
 
-    void courseDeductionRules(List<CourseSchedule> dto);
+    void courseFrozenAmount(List<CourseSchedule> dto);
+
+    void courseRecoverAmount(Integer courseId);
+
+    void courseDeductAmount(Integer courseId);
 }
 

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

@@ -17,5 +17,7 @@ public interface TenantCloudCourseRecordService extends IService<TenantCloudCour
 
     PageInfo<TenantCloudCourseRecordVo> queryPage(Map<String,Object> param);
 
+    TenantCloudCourseRecord queryLastRecord(Integer courseId);
+
 }
 

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

@@ -4597,7 +4597,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         paymentCalenderDto.setPaymentType(SPAN_GROUP_CLASS_ADJUST);
         //生成缴费项目
         paymentCalenderDto.setMasterTotalPrice(masterTotalPrice);
-        paymentCalenderDto.setIsGiveMusicNetwork(false);
+//        paymentCalenderDto.setIsGiveMusicNetwork(false);
         paymentCalenderDto.setStudentIds(StringUtils.join(studentIds, ","));
         musicGroupPaymentCalenderService.create(paymentCalenderDto);
         //记录申请信息

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

@@ -1881,6 +1881,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if (CollectionUtils.isEmpty(courseSchedules)) {
             return false;
         }
+        //
+
         List<String> classDates = courseSchedules.stream().map(courseSchedule -> DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy-MM-dd"))
                 .collect(Collectors.toList());
 

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

@@ -128,7 +128,7 @@ public class MusicGroupPaymentCalenderMemberServiceImpl extends BaseServiceImpl<
     }
 
     @Override
-    public List<MusicGroupPaymentCalenderMember> findByCalenderId(Long calenderId) {
+    public MusicGroupPaymentCalenderMember findByCalenderId(Long calenderId) {
         return musicGroupPaymentCalenderMemberDao.findByCalenderId(calenderId);
     }
 }

+ 30 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -192,14 +192,11 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		if (musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE && musicGroupPaymentDateRangeList.size() > 1) {
 			throw new BizException("创建缴费失败:会员收费乐团不支持多周期缴费");
 		}
-		//是否自动创建
-		if(!musicGroupPaymentCalenderDto.getAutoCreate()){
-			// 所有缴费项目已完成排课才能创建下一个缴费项目
-			String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,musicGroupPaymentCalenderDto.getIgnoreBatchNoList());
-			if (StringUtils.isNoneBlank(orignBatchNo)) {
-				if(StringUtils.isEmpty(musicGroupPaymentCalenderDto.getBatchNo()) || !musicGroupPaymentCalenderDto.getBatchNo().equals(orignBatchNo)){
-					throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作");
-				}
+		// 所有缴费项目已完成排课才能创建下一个缴费项目
+		String organBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,musicGroupPaymentCalenderDto.getIgnoreBatchNoList());
+		if (StringUtils.isNoneBlank(organBatchNo)) {
+			if(StringUtils.isEmpty(musicGroupPaymentCalenderDto.getBatchNo()) || !musicGroupPaymentCalenderDto.getBatchNo().equals(organBatchNo)){
+				throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作");
 			}
 		}
 
@@ -679,7 +676,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 
 	@Override
 	public Object getDetail(Long id) {
-		Map<String, Object> result = new HashMap<>(6);
+		Map<String, Object> result = new HashMap<>(9);
 		//获取缴费项目详情
 		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(id);
 		//统计预计缴费人数
@@ -688,15 +685,36 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		Map<Long, Long> actualNumMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.countActualNum(id));
 		calender.setActualNum(actualNumMap.get(id) == null ? 0 : actualNumMap.get(id).intValue());
 		calender.setExpectNum(expectNumMap.get(id) == null ? 0 : expectNumMap.get(id).intValue());
+
+		if(calender.getOrganId() != null){
+			Organization organization = organizationDao.get(calender.getOrganId());
+			calender.setOrganName(organization.getName());
+		}
+		if (StringUtils.isNotEmpty(calender.getMusicGroupId())){
+			MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
+			calender.setMusicGroupName(musicGroup.getName());
+		}
 		result.put("calender", calender);
 		//汇总收款金额
 		BigDecimal sumActualAmount = musicGroupPaymentCalenderDetailDao.sumActualAmount(id);
 		result.put("sumActualAmount", sumActualAmount);
-		//收费标准名称
-//		String name = musicGroupPaymentCalenderDao.getCalenderSettingsName(id);
-//		result.put("calenderSettingsName", name);
+		//进行中加学员
+		if(calender.getPaymentType() == ADD_STUDENT){
+			try {
+				String studentIds = calender.getStudentIds();
+				if(StringUtils.isNotEmpty(studentIds)){
+					SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(studentIds));
+					result.put("phone",sysUser.getPhone());
+					result.put("username",sysUser.getUsername());
+				}
+			}catch (Exception e){
+				e.printStackTrace();
+			}
+		}
 		//课程
 		result.put("course", musicGroupPaymentCalenderCourseSettingsService.queryCalenderCourseSettings(id));
+		//获取跨团合班学员缴费详情
+		result.put("musicMerger",musicGroupPaymentCalenderStudentDetailDao.findByBatchNo(calender.getBatchNo()));
 		//乐保
 		result.put("repair",musicGroupPaymentCalenderRepairService.findByCalenderId(id));
 		//会员信息

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

@@ -237,7 +237,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 			}
 		}
 
-		Date date = new Date();
+		/*Date date = new Date();
 		//会员结束前15天自动创建乐团续费(默认提前15天)
 		String autoCreateMemberRenew = sysTenantConfigService.getTenantConfigValue(SysConfigService.AUTO_CREATE_MEMBER_RENEW,tenantId);
 		if(StringUtils.isNotEmpty(autoCreateMemberRenew)){
@@ -306,7 +306,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 							"STUDENT",memberName,autoCreateMemberRenew);
 				}
 			}
-		}
+		}*/
 	}
 
 	private MusicGroupSchoolTermCourseDetail getCourseDetail(MusicGroupSchoolTermCourseDetail courseDetail){

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

@@ -966,7 +966,9 @@ public class StudentServeServiceImpl implements StudentServeService {
         LocalDate monDayDate = localDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
         LocalDate sunDayDate = localDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
 
+        //课后作业
         Set<Integer> hss = studentCourseHomeworkDao.checkStudentHaveHomeworkInDateRange(monDayDate.toString(), sunDayDate.toString(), studentIds);
+        //课外训练
         Set<Integer> ess = extracurricularExercisesReplyDao.checkStudentHaveExercisesInDateRange(monDayDate.toString(), sunDayDate.toString(), studentIds);
         for (Integer studentId : studentIds) {
             if(!hss.contains(studentId)&&!ess.contains(studentId)){

+ 67 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantAssetsInfoServiceImpl.java

@@ -16,8 +16,6 @@ import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.yqpay.DateUtils;
 import org.apache.commons.collections.CollectionUtils;
-import org.redisson.api.RBucket;
-import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,7 +27,6 @@ import java.math.MathContext;
 import java.math.RoundingMode;
 import java.text.ParseException;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -49,8 +46,53 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private TenantCloudCourseRecordService tenantCloudCourseRecordService;
-    @Autowired
-    private RedissonClient redissonClient;
+
+    /**
+     * 扣除冻结的金额
+     *
+     * @param courseId 课程id
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void courseDeductAmount(Integer courseId){
+        TenantCloudCourseRecord lastRecord = checkLastRecord(courseId);
+        //写入流水
+        lastRecord.setDeductState(1);
+        tenantCloudCourseRecordService.save(lastRecord);
+        if (baseMapper.deductAmount(lastRecord.getAmount()) != 1) {
+            throw new BizException("解除冻结金额失败!");
+        }
+    }
+
+    /**
+     * 恢复/取消 冻结的金额
+     *
+     * @param courseId 课程id
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void courseRecoverAmount(Integer courseId) {
+        TenantCloudCourseRecord lastRecord = checkLastRecord(courseId);
+        //写入流水
+        lastRecord.setDeductState(2);
+        tenantCloudCourseRecordService.save(lastRecord);
+        //解除冻结金额,恢复余额
+        if (baseMapper.recoverAmount(lastRecord.getAmount()) != 1) {
+            throw new BizException("解除冻结金额失败!");
+        }
+    }
+
+    private TenantCloudCourseRecord checkLastRecord(Integer courseId) {
+        TenantCloudCourseRecord lastRecord = tenantCloudCourseRecordService.queryLastRecord(courseId);
+        //判断是否是冻结的状态
+        if (Objects.nonNull(lastRecord) && lastRecord.getDeductState() != 0) {
+            //只有冻结的才能取消冻结 或者 扣费
+            throw new BizException("该课程非线上课!");
+        }
+        lastRecord.setCreatedBy(getUserId());
+        lastRecord.setCreatedTime(new Date());
+        return lastRecord;
+    }
 
     /**
      * 排课扣费计算
@@ -59,16 +101,9 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void courseDeductionRules(List<CourseSchedule> dto) {
+    public void courseFrozenAmount(List<CourseSchedule> dto) {
         Integer tenantId = TenantContextHolder.getTenantId();
 
-        //防止重复点击 加锁
-        String key = "Tenant_Course_Deduct:" + tenantId;
-        RBucket<Object> bucket = redissonClient.getBucket(key);
-        //原子操作 抢锁成功为true
-        if (!bucket.trySet(tenantId, 1L, TimeUnit.MINUTES)) {
-            throw new BizException("有人正在排课请勿同时操作!");
-        }
         //校验课程 筛选出线上课
         dto = getOnlineCourse(dto);
         if (CollectionUtils.isEmpty(dto)) {
@@ -78,29 +113,33 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
         TenantAssetsInfo assetsInfo = this.getOne(new WrapperUtil<TenantAssetsInfo>()
                 .hasEq("tenant_id_", tenantId).queryWrapper());
         if (Objects.isNull(assetsInfo)) {
-            throw new BizException("未查询到该机构的账户资产信息!");
+            throw new BizException("未查询到该账户资产信息!");
         }
 
         //获取云教室规则  String人数-BigDecimal每分钟扣费标准
         Map<String, BigDecimal> rule = getRule(tenantId);
         BigDecimal frozenAmount = BigDecimal.ZERO;
 
-        for (CourseSchedule course : dto) {//获取总人数 ,+1是算上老师
+        for (CourseSchedule course : dto) {
+            TenantCloudCourseRecord lastRecord = tenantCloudCourseRecordService.queryLastRecord(course.getId().intValue());
+            if (Objects.nonNull(lastRecord) && lastRecord.getDeductState() == 0) {
+                //该课程id最后一条记录也是冻结状态
+                throw new BizException("该课程已是线上课!");
+            }
+
+            //获取总人数 ,+1是算上老师
             Integer totalPeople = course.getStudentNum() + 1;
             //获取每分钟扣费标准
             BigDecimal minutePrice = rule.get(String.valueOf(totalPeople));
             if (Objects.isNull(minutePrice)) {
-                throw new BizException("该机构未设置 " + totalPeople + " 人(含老师)的课程收费标准,请前往机构产品设置中确认该人数的设置是否存在!");
+                //没有这个扣费标准
+                throw new BizException("课程人数已达上限,请联系教务老师!");
             }
             //计算总上课时间
             BigDecimal courseDate = getCourseDate(course);
             //课程单价 = 每分钟扣费标准 * 总上课时间
             BigDecimal coursePrice = minutePrice.multiply(courseDate, new MathContext(2, RoundingMode.HALF_UP));
             frozenAmount = frozenAmount.add(coursePrice);
-            //判断余额是否足够
-            if (assetsInfo.getBalance().compareTo(frozenAmount) < 0) {
-                throw new BizException("余额不足!");
-            }
 
             //写入流水
             TenantCloudCourseRecord record = new TenantCloudCourseRecord();
@@ -113,10 +152,12 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
             tenantCloudCourseRecordService.save(record);
         }
 
-        assetsInfo.setBalance(assetsInfo.getBalance().subtract(frozenAmount));
-        assetsInfo.setFrozenAmount(frozenAmount.add(assetsInfo.getFrozenAmount()));
-        this.updateById(assetsInfo);
-        bucket.delete();
+        //直接修改余额,利用数据库的规则来防ABA的出现
+        if (baseMapper.frozenAmount(frozenAmount) != 1) {
+            //可能是余额不足
+            throw new BizException("线上课预约火爆,请联系教务老师!");
+        }
+
     }
 
     private List<CourseSchedule> getOnlineCourse(List<CourseSchedule> dto) {
@@ -133,13 +174,13 @@ public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao
         TenantConfig tenantConfig = tenantConfigService.getOne(new WrapperUtil<TenantConfig>()
                 .hasEq("tenant_id_", tenantId).queryWrapper());
         if (Objects.isNull(tenantConfig)) {
-            throw new BizException("未查询到机构云教室规则信息!");
+            throw new BizException("未查询到云教室规则信息!");
         }
         return Optional.ofNullable(tenantConfig.getConfig())
                 .map(c -> JSON.parseObject(c, TenantConfigDetail.class))
                 .map(TenantConfigDetail::getCloud_room_rule)
                 .map(CloudRoomRule::getCloud_room_config)
-                .orElseThrow(() -> new BizException("未查询到机构云教室规则!"));
+                .orElseThrow(() -> new BizException("未查询到云教室规则!"));
     }
 
     private BigDecimal getCourseDate(CourseSchedule course) {

+ 5 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantCloudCourseRecordServiceImpl.java

@@ -25,18 +25,17 @@ public class TenantCloudCourseRecordServiceImpl extends ServiceImpl<TenantCloudC
 
     private final static Logger logger = LoggerFactory.getLogger(TenantCloudCourseRecordServiceImpl.class);
 
-
     @Override
     public PageInfo<TenantCloudCourseRecordVo> queryPage(Map<String, Object> param) {
         Page<TenantCloudCourseRecordVo> pageInfo = PageUtil.getPageInfo(param);
         pageInfo.setAsc("a.created_time_");
-        if (param.containsKey("startDate")) {
-            String startDate = String.valueOf(param.get("startDate"));
-        }
-//        "classDate  startTime endTime"
-
         return PageUtil.pageInfo(baseMapper.queryPage(pageInfo, param));
 
     }
+
+    @Override
+    public TenantCloudCourseRecord queryLastRecord(Integer courseId) {
+        return baseMapper.queryLastRecord(courseId);
+    }
 }
 

+ 1 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -41,8 +41,7 @@
         <result column="payment_pattern_" property="paymentPattern"/>
         <result column="is_classroom_lessons_" property="isClassroomLessons"/>
         <result column="cloud_teacher_type_" property="cloudTeacherType"/>
-        <result column="course_view_type_" property="courseViewType"
-                typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="course_view_type_" property="courseViewType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="is_show_record_of_student_" property="isShowRecordOfStudent"/>
         <result column="musical_instruments_provide_status_" property="musicalInstrumentsProvideStatus"/>
         <result column="member_course_show_flag_" property="memberCourseShowFlag"/>

+ 3 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml

@@ -372,8 +372,9 @@
 		WHERE mgpc.batch_no_ = #{batchNo}
 	</select>
 	<select id="sumActualAmount" resultType="java.math.BigDecimal">
-		SELECT SUM(mgpcd.actual_amount_) FROM music_group_payment_calender_detail mgpcd
-		WHERE mgpcd.music_group_payment_calender_id_ = #{id}
+		SELECT SUM(spo.actual_amount_) FROM music_group_payment_calender_detail mgpcd
+		LEFT JOIN student_payment_order spo ON spo.id_ = mgpcd.payment_order_id_
+		WHERE mgpcd.music_group_payment_calender_id_ = #{id} AND spo.status_ = 'SUCCESS'
 	</select>
 	<select id="findByCalenderIdAndUserId" resultMap="MusicGroupPaymentCalenderDetail">
 		SELECT * FROM music_group_payment_calender_detail WHERE music_group_payment_calender_id_ = #{calenderId} AND user_id_ = #{userId} LIMIT 1

+ 16 - 15
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml

@@ -10,6 +10,7 @@
         <result column="id_" property="id"/>
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="tenant_id_" property="tenantId"/>
+        <result column="organ_id_" property="organId"/>
         <result column="music_group_organization_course_settings_id_" property="musicGroupOrganizationCourseSettingId"/>
         <result column="pay_user_type_" property="payUserType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="start_payment_date_" property="startPaymentDate"/>
@@ -32,15 +33,15 @@
         <result column="attribute1_" property="attribute1"/>
         <result column="attribute2_" property="attribute2"/>
         <result column="student_ids_" property="studentIds"/>
-<!--        <result column="member_payment_amount_" property="memberPaymentAmount"/>-->
-<!--        <result column="original_member_payment_amount_" property="originalMemberPaymentAmount"/>-->
-<!--        <result column="member_rank_setting_id_" property="memberRankSettingId"/>-->
-<!--        <result column="member_valid_date_" property="memberValidDate"/>-->
-<!--        <result column="member_period_" property="memberPeriod" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>-->
-<!--        <result column="member_optional_flag_" property="memberOptionalFlag"/>-->
-<!--        <result column="music_repair_num_" property="musicRepairNum"/>-->
-<!--        <result column="music_repair_actual_price_" property="musicRepairActualPrice"/>-->
-<!--        <result column="music_repair_optional_flag_" property="musicRepairOptionalFlag"/>-->
+        <result column="member_payment_amount_" property="memberPaymentAmount"/>
+        <result column="original_member_payment_amount_" property="originalMemberPaymentAmount"/>
+        <result column="member_rank_setting_id_" property="memberRankSettingId"/>
+        <result column="member_valid_date_" property="memberValidDate"/>
+        <result column="member_period_" property="memberPeriod" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="member_optional_flag_" property="memberOptionalFlag"/>
+        <result column="music_repair_num_" property="musicRepairNum"/>
+        <result column="music_repair_actual_price_" property="musicRepairActualPrice"/>
+        <result column="music_repair_optional_flag_" property="musicRepairOptionalFlag"/>
         <result column="current_total_amount_" property="currentTotalAmount"/>
         <result column="original_total_amount_" property="originalTotalAmount"/>
     </resultMap>
@@ -64,14 +65,14 @@
         payment_pattern_,payment_type_,payment_amount_,batch_no_,audit_memo_,operator_,attribute1_,
          attribute2_,student_ids_,member_payment_amount_,member_rank_setting_id_,member_valid_date_
          ,original_member_payment_amount_,member_period_,member_optional_flag_,
-         music_repair_num_,music_repair_actual_price_,music_repair_optional_flag_,current_total_amount_,original_total_amount_,tenant_id_)
+         music_repair_num_,music_repair_actual_price_,music_repair_optional_flag_,current_total_amount_,original_total_amount_,tenant_id_,organ_id_)
         VALUES(#{musicGroupId},#{musicGroupOrganizationCourseSettingId},#{payUserType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{rejectReason},#{startPaymentDate},#{deadlinePaymentDate},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{expectNum},#{actualNum},#{memo},#{isGiveMusicNetwork},now(),now(),
         #{paymentValidStartDate},#{paymentValidEndDate},#{paymentPattern},#{paymentType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{paymentAmount},#{batchNo},#{auditMemo},#{operator},#{attribute1},#{attribute2},#{studentIds},
                #{memberPaymentAmount},#{memberRankSettingId},#{memberValidDate},#{originalMemberPaymentAmount},#{memberPeriod,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-               #{memberOptionalFlag},#{musicRepairNum},#{musicRepairActualPrice},#{musicRepairOptionalFlag},#{currentTotalAmount},#{originalTotalAmount},#{tenantId})
+               #{memberOptionalFlag},#{musicRepairNum},#{musicRepairActualPrice},#{musicRepairOptionalFlag},#{currentTotalAmount},#{originalTotalAmount},#{tenantId},#{organId})
     </insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender" useGeneratedKeys="true"
@@ -81,7 +82,7 @@
         actual_num_,memo_,is_give_music_network_,create_time_,update_time_,payment_valid_start_date_,payment_valid_end_date_,payment_pattern_,payment_amount_,
         payment_type_,batch_no_,audit_memo_,operator_,attribute1_,attribute2_,student_ids_,
          member_payment_amount_,member_rank_setting_id_,member_valid_date_,original_member_payment_amount_,member_period_
-        ,member_optional_flag_,music_repair_num_,music_repair_actual_price_,music_repair_optional_flag_,current_total_amount_,original_total_amount_,tenant_id_)
+        ,member_optional_flag_,music_repair_num_,music_repair_actual_price_,music_repair_optional_flag_,current_total_amount_,original_total_amount_,tenant_id_,organ_id_)
         VALUES
         <foreach collection="list" item="item" index="index" separator=",">
         (#{item.musicGroupId},#{item.musicGroupOrganizationCourseSettingId},#{item.payUserType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.rejectReason},#{item.startPaymentDate},#{item.deadlinePaymentDate},#{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -89,7 +90,8 @@
         #{item.paymentValidStartDate},#{item.paymentValidEndDate},#{item.paymentPattern},#{item.paymentAmount},#{item.paymentType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{item.batchNo},#{item.auditMemo},#{item.operator},#{item.attribute1},#{item.attribute2},
          #{item.studentIds},#{item.memberPaymentAmount},#{item.memberRankSettingId},#{item.memberValidDate},#{item.originalMemberPaymentAmount},#{item.memberPeriod,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            #{item.memberOptionalFlag},#{item.musicRepairNum},#{item.musicRepairActualPrice},#{item.musicRepairOptionalFlag},#{item.currentTotalAmount},#{item.originalTotalAmount},#{tenantId})
+            #{item.memberOptionalFlag},#{item.musicRepairNum},#{item.musicRepairActualPrice},#{item.musicRepairOptionalFlag},
+         #{item.currentTotalAmount},#{item.originalTotalAmount},#{item.tenantId},#{item.organId})
         </foreach>
     </insert>
 
@@ -721,7 +723,6 @@
 
     <resultMap id="MusicGroupPaymentCalenderResultDto" type="com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderResultDto"
                extends="MusicGroupPaymentCalender">
-        <result column="organ_id_" property="organId"/>
         <result column="music_group_name_" property="musicGroupName"/>
         <result column="operator_name_" property="operatorName"/>
     </resultMap>
@@ -730,7 +731,7 @@
         mgpc.start_payment_date_,mgpc.deadline_payment_date_,mgpc.status_,mgpc.expect_num_,
         mgpc.actual_num_,mgpc.memo_,mgpc.create_time_,mgpc.update_time_,
         mgpc.payment_pattern_,mgpc.payment_type_,mgpc.batch_no_,mgpc.audit_memo_,mgpc.operator_,mgpc.attribute1_,
-        mgpc.attribute2_,mgpc.student_ids_,mgpc.current_total_amount_,mgpc.original_total_amount_,mg.name_ music_group_name_,mg.organ_id_
+        mgpc.attribute2_,mgpc.student_ids_,mgpc.current_total_amount_,mgpc.original_total_amount_,mg.name_ music_group_name_,mgpc.organ_id_
         FROM music_group_payment_calender mgpc
         LEFT JOIN music_group mg ON mg.id_ = mgpc.music_group_id_
         <include refid="queryCalenderPageSql"/>

+ 20 - 0
mec-biz/src/main/resources/config/mybatis/TenantAssetsInfoMapper.xml

@@ -25,4 +25,24 @@
         </foreach>
     </insert>
 
+    <update id="frozenAmount" parameterType="decimal">
+        update tenant_assets_info
+        set balance_       = balance_ - #{frozenAmount},
+            frozen_amount_ = frozen_amount_ + #{frozenAmount}
+        where balance_  <![CDATA[ >= ]]> #{frozenAmount}
+    </update>
+
+    <update id="recoverAmount" parameterType="decimal">
+        update tenant_assets_info
+        set balance_       = balance_ + #{recoverAmount},
+            frozen_amount_ = frozen_amount_ - #{recoverAmount}
+        where frozen_amount_  <![CDATA[ >= ]]> #{recoverAmount}
+    </update>
+
+    <update id="deductAmount" parameterType="decimal">
+        update tenant_assets_info
+        set frozen_amount_ = frozen_amount_ - #{deductAmount}
+        where frozen_amount_  <![CDATA[ >= ]]> #{deductAmount}
+    </update>
+
 </mapper>

+ 19 - 11
mec-biz/src/main/resources/config/mybatis/TenantCloudCourseRecordMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ym.mec.biz.dal.com.ym.mec.biz.dal.dao.TenantCloudCourseRecordDao">
+<mapper namespace="com.ym.mec.biz.dal.dao.TenantCloudCourseRecordDao">
 
     <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.TenantCloudCourseRecord">
         <id column="id_" jdbcType="INTEGER" property="id"/>
@@ -10,13 +10,11 @@
         <result column="amount_" jdbcType="VARCHAR" property="amount"/>
         <result column="created_by_" jdbcType="INTEGER" property="createdBy"/>
         <result column="created_time_" jdbcType="TIMESTAMP" property="createdTime"/>
-        <result column="updated_by_" jdbcType="INTEGER" property="updatedBy"/>
-        <result column="updated_time_" jdbcType="TIMESTAMP" property="updatedTime"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id_
-        , tenant_id_, course_id_, deduct_state_, amount_, created_by_, created_time_, updated_by_, updated_time_
+        , tenant_id_, course_id_, deduct_state_, amount_, created_by_, created_time_
     </sql>
 
     <select id="queryPage" parameterType="map" resultType="com.ym.mec.biz.dal.vo.TenantCloudCourseRecordVo">
@@ -53,6 +51,9 @@
             <if test="param.type != null ">
                 AND b.type_ = #{param.type}
             </if>
+            <if test="param.orgId != null ">
+                AND o.id_= #{param.orgId}
+            </if>
             <if test="param.teacherName != null ">
                 AND s.real_name_ = #{param.teacherName}
             </if>
@@ -65,16 +66,23 @@
             <if test="param.deductState != null ">
                 AND a.deduct_state_ = #{param.deductState}
             </if>
-            <if test="param.classDate != null ">
-                AND b.class_date_ = #{param.classDate}
-            </if>
-            <if test="param.startTime != null">
-                AND b.start_class_time_ <![CDATA[ >= ]]>  #{param.startTime}
+            <if test="param.startDate != null">
+                AND b.class_date_ <![CDATA[ >= ]]>  #{param.startDate}
             </if>
-            <if test="param.endTime != null ">
-                AND b.`end_class_time_` <![CDATA[ <= ]]>  #{param.endTime}
+            <if test="param.endDate != null ">
+                AND b.`class_date_` <![CDATA[ <= ]]>  #{param.endDate}
             </if>
         </where>
     </select>
 
+    <select id="queryLastRecord" parameterType="integer" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from
+        tenant_cloud_course_record
+        where course_id_=#{courseId}
+        order by created_time_ desc
+        limit 1
+    </select>
+
 </mapper>

+ 2 - 16
mec-web/src/main/java/com/ym/mec/web/controller/TenantAssetsInfoController.java

@@ -1,16 +1,11 @@
 package com.ym.mec.web.controller;
 
-
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.TenantAssetsInfo;
 import com.ym.mec.biz.service.TenantAssetsInfoService;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.web.bind.annotation.*;
 import com.ym.mec.common.controller.BaseController;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import java.util.List;
 
 /**
  * 机构资产信息(TenantAssetsInfo)表控制层
@@ -27,14 +22,5 @@ public class TenantAssetsInfoController extends BaseController {
     @Resource
     private TenantAssetsInfoService tenantAssetsInfoService;
 
-    @ApiOperation("修改机构启用停用状态")
-    @GetMapping(value = "/ops/{id}")
-//    @PreAuthorize("@pcs.hasPermissions('tenantInfo/opsState')")
-    public Object opsState() {
-        tenantAssetsInfoService.courseDeductionRules(null);
-        return succeed();
-    }
-
-
 }
 

+ 27 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TenantCloudCourseRecordController.java

@@ -3,10 +3,17 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.service.TenantCloudCourseRecordService;
 import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.Map;
 
 /**
  * 机构云教室课程扣费记录(TenantCloudCourseRecord)表控制层
@@ -23,5 +30,25 @@ public class TenantCloudCourseRecordController extends BaseController {
     @Resource
     private TenantCloudCourseRecordService tenantCloudCourseRecordService;
 
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "关键字"),
+            @ApiImplicitParam(name = "type", dataType = "String", value = "课程类型"),
+            @ApiImplicitParam(name = "teacherName", dataType = "String", value = "上课教师名称"),
+            @ApiImplicitParam(name = "teacherId", dataType = "Integer", value = "上课教师id"),
+            @ApiImplicitParam(name = "status", dataType = "String", value = "课程状态"),
+            @ApiImplicitParam(name = "deductState", dataType = "Integer", value = "扣费状态 0冻结 1扣费 2取消冻结"),
+            @ApiImplicitParam(name = "startDate", dataType = "String", value = "课程开始日期-年月日"),
+            @ApiImplicitParam(name = "endDate", dataType = "String", value = "课程结束日期-年月日"),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("分页查询")
+    @PostMapping(value = "/queryPage")
+//    @PreAuthorize("@pcs.hasPermissions('tenantCloudCourseRecord/queryPage')")
+    public Object queryPage(@RequestBody Map<String, Object> param) {
+        return succeed(tenantCloudCourseRecordService.queryPage(param));
+    }
+
 }