no message
This commit is contained in:
parent
2f4ad45d4c
commit
4a9e99f69e
@ -31,8 +31,8 @@ public class DataViewController {
|
||||
**/
|
||||
@GetMapping("/getStudentInfo")
|
||||
@Operation(summary = "查询学员详情")
|
||||
public CommonResult<?> selectStudentInfo(@RequestParam("id") Long id) {
|
||||
return success(dataViewService.selectStudentInfo(id));
|
||||
public CommonResult<?> selectStudentInfo(@RequestParam("id") Long id,@RequestParam(value = "coachId",required = false)Long coachId) {
|
||||
return success(dataViewService.selectStudentInfo(id,coachId));
|
||||
}
|
||||
|
||||
}
|
@ -15,6 +15,6 @@ public interface DataViewService {
|
||||
* @param id 学生id
|
||||
* @return cn.iocoder.yudao.module.base.vo.StudentInfoVO
|
||||
**/
|
||||
StudentInfoVO selectStudentInfo(Long id);
|
||||
StudentInfoVO selectStudentInfo(Long id,Long coachId);
|
||||
|
||||
}
|
@ -81,5 +81,13 @@ public interface DlDriveSchoolCoachService extends IService<DlDriveSchoolCoach>
|
||||
*/
|
||||
DlDriveSchoolCoachRespVO getDlDriveSchoolCoach(String id);
|
||||
|
||||
/**
|
||||
* 获得驾校教练---通过user_id查
|
||||
*
|
||||
* @param userId 用户表id
|
||||
* @return 驾校教练
|
||||
*/
|
||||
DlDriveSchoolCoachRespVO getDlDriveSchoolCoachByUserId(Long userId);
|
||||
|
||||
|
||||
}
|
@ -2,10 +2,14 @@ package cn.iocoder.yudao.module.base.service.impl;
|
||||
|
||||
import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent;
|
||||
import cn.iocoder.yudao.module.base.service.DataViewService;
|
||||
import cn.iocoder.yudao.module.base.service.DlDriveSchoolCoachService;
|
||||
import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService;
|
||||
import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachRespVO;
|
||||
import cn.iocoder.yudao.module.base.vo.StudentInfoVO;
|
||||
import cn.iocoder.yudao.module.course.entity.Process;
|
||||
import cn.iocoder.yudao.module.course.service.ProcessService;
|
||||
import cn.iocoder.yudao.module.exam.service.ExamBatchItemService;
|
||||
import cn.iocoder.yudao.module.train.service.TrainService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -16,7 +20,13 @@ public class DataViewServiceImpl implements DataViewService {
|
||||
@Autowired
|
||||
private DlDriveSchoolStudentService studentService;
|
||||
@Autowired
|
||||
private DlDriveSchoolCoachService coachService;
|
||||
@Autowired
|
||||
private ProcessService processService;
|
||||
@Autowired
|
||||
private TrainService trainService;
|
||||
@Autowired
|
||||
private ExamBatchItemService examBatchItemService;
|
||||
|
||||
/**
|
||||
* 查询学员详情
|
||||
@ -27,11 +37,25 @@ public class DataViewServiceImpl implements DataViewService {
|
||||
* @date 14:37 2025/2/8
|
||||
**/
|
||||
@Override
|
||||
public StudentInfoVO selectStudentInfo(Long id) {
|
||||
public StudentInfoVO selectStudentInfo(Long id,Long coachId) {
|
||||
StudentInfoVO studentInfoVO = new StudentInfoVO();
|
||||
//学员主信息
|
||||
DlDriveSchoolStudent student = studentService.getStudentByUserId(id);
|
||||
studentInfoVO.setStudentInfo(student);
|
||||
//当前学习进度
|
||||
Process process = processService.selectByUserId(id);
|
||||
return null;
|
||||
Process process = processService.selectByUserId(id,coachId);
|
||||
studentInfoVO.setProcess(process);
|
||||
//查归属教练信息
|
||||
DlDriveSchoolCoachRespVO coachRespVO = coachService.getDlDriveSchoolCoachByUserId(process.getCoachId());
|
||||
if(null!=coachRespVO){
|
||||
//有教练,查未毕业学员、已毕业学员,区分科目
|
||||
coachRespVO.setDataMap(processService.selectByCoachId(coachRespVO.getUserId()));
|
||||
studentInfoVO.setCoachInfo(coachRespVO);
|
||||
}
|
||||
//查该学生的培训记录
|
||||
studentInfoVO.setTrainList(trainService.selectByUserIdAndCoachId(id,coachId));
|
||||
//查该学生的考试记录
|
||||
studentInfoVO.setExamList(examBatchItemService.selectByUserIdAndCoachId(id, coachId));
|
||||
return studentInfoVO;
|
||||
}
|
||||
}
|
||||
|
@ -180,5 +180,23 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl<DlDriveSchoolCoac
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得驾校教练---通过user_id查
|
||||
*
|
||||
* @param userId 用户表id
|
||||
* @return 驾校教练
|
||||
*/
|
||||
@Override
|
||||
public DlDriveSchoolCoachRespVO getDlDriveSchoolCoachByUserId(Long userId) {
|
||||
LambdaQueryWrapper<DlDriveSchoolCoach> queryWrapper = new LambdaQueryWrapper<DlDriveSchoolCoach>()
|
||||
.eq(DlDriveSchoolCoach::getUserId,userId);
|
||||
List<DlDriveSchoolCoach> list = this.list(queryWrapper);
|
||||
DlDriveSchoolCoachRespVO schoolCoach = null;
|
||||
if(!list.isEmpty()){
|
||||
schoolCoach = BeanUtils.toBean(list.get(0), DlDriveSchoolCoachRespVO.class);
|
||||
}
|
||||
return schoolCoach;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -5,9 +5,12 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Schema(description = "管理后台 - 驾校教练 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class DlDriveSchoolCoachRespVO extends DlDriveSchoolCoach {
|
||||
|
||||
/**教练带教学员数量情况-细分科目2、3未毕业、已毕业数量*/
|
||||
Map<String,Integer> dataMap;
|
||||
}
|
@ -1,10 +1,23 @@
|
||||
package cn.iocoder.yudao.module.base.vo;
|
||||
|
||||
import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent;
|
||||
import cn.iocoder.yudao.module.course.entity.Process;
|
||||
import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO;
|
||||
import cn.iocoder.yudao.module.train.entity.Train;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class StudentInfoVO {
|
||||
/**学生基本信息*/
|
||||
private DlDriveSchoolStudent studentInfo;
|
||||
/**学习进度*/
|
||||
private Process process;
|
||||
/**教练信息*/
|
||||
private DlDriveSchoolCoachRespVO coachInfo;
|
||||
/**训练记录*/
|
||||
private List<Train> trainList;
|
||||
/**考试记录*/
|
||||
private List<ExamBatchItemVO> examList;
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class Process extends TenantBaseDO {
|
||||
/**
|
||||
* 用户(学员)ID
|
||||
*/
|
||||
private Integer userId;
|
||||
private Long userId;
|
||||
/**
|
||||
* 用户(学员)姓名
|
||||
*/
|
||||
@ -50,7 +50,7 @@ public class Process extends TenantBaseDO {
|
||||
/**
|
||||
* 教练ID
|
||||
*/
|
||||
private Integer coachId;
|
||||
private Long coachId;
|
||||
/**
|
||||
* 教练姓名
|
||||
*/
|
||||
|
@ -53,5 +53,5 @@ public interface ProcessMapper extends BaseMapper<Process> {
|
||||
* @param userId 用户id
|
||||
* @return cn.iocoder.yudao.module.course.entity.Process
|
||||
**/
|
||||
Process selectNewMaxByUserId(@Param("userId") Long userId);
|
||||
Process selectNewMaxByUserId(@Param("userId") Long userId,@Param("coachId") Long coachId);
|
||||
}
|
@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 学员课程进度 Service 接口
|
||||
@ -46,9 +47,19 @@ public interface ProcessService extends IService<Process> {
|
||||
* 查学生当下正在学习中的学习进度
|
||||
* @author vinjor-M
|
||||
* @date 16:39 2025/2/8
|
||||
* @param userId TODO
|
||||
* @param userId 用户id
|
||||
* @param coachId 教练id
|
||||
* @return cn.iocoder.yudao.module.course.entity.Process
|
||||
**/
|
||||
Process selectByUserId(Long userId);
|
||||
Process selectByUserId(Long userId,Long coachId);
|
||||
|
||||
/**
|
||||
* 查询教练 每个科目已毕未毕业学生数量
|
||||
* @author vinjor-M
|
||||
* @date 13:52 2025/2/10
|
||||
* @param coachId 教练id
|
||||
* @return java.util.Map<java.lang.String,java.lang.Integer>
|
||||
**/
|
||||
Map<String,Integer> selectByCoachId(Long coachId);
|
||||
|
||||
}
|
||||
|
@ -13,7 +13,8 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
@ -108,9 +109,65 @@ public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> impl
|
||||
* @date 15:18 2025/2/8
|
||||
**/
|
||||
@Override
|
||||
public Process selectByUserId(Long userId) {
|
||||
public Process selectByUserId(Long userId,Long coachId) {
|
||||
return processMapper.selectNewMaxByUserId(userId,coachId);
|
||||
}
|
||||
|
||||
return null;
|
||||
/**
|
||||
* 查询教练 每个科目已毕未毕业学生数量
|
||||
*
|
||||
* @param coachId 教练id
|
||||
* @return java.util.Map<java.lang.String, java.lang.Integer>
|
||||
* @author vinjor-M
|
||||
* @date 13:52 2025/2/10
|
||||
**/
|
||||
@Override
|
||||
public Map<String, Integer> selectByCoachId(Long coachId) {
|
||||
LambdaQueryWrapper<Process> queryWrapper = new LambdaQueryWrapper<Process>()
|
||||
.eq(Process::getCoachId,coachId);
|
||||
List<Process> allList = this.list(queryWrapper);
|
||||
//所有科目二的记录
|
||||
List<Process> subject2List = allList.stream().filter(item->2==item.getSubject()).collect(Collectors.toList());
|
||||
//所有科目三的记录
|
||||
List<Process> subject3List = allList.stream().filter(item->3==item.getSubject()).collect(Collectors.toList());
|
||||
//科目二未毕业学员id
|
||||
Set<Long> subject2No = new HashSet<>();
|
||||
//科目二已毕业学员id
|
||||
Set<Long> subject2Over = new HashSet<>();
|
||||
for (Process item:subject2List){
|
||||
if("2".equals(item.getStatus())){
|
||||
//已完成
|
||||
if("1".equals(item.getExamStatus())){
|
||||
//已通过考试
|
||||
subject2Over.add(item.getUserId());
|
||||
}
|
||||
}else{
|
||||
//未完成
|
||||
subject2No.add(item.getUserId());
|
||||
}
|
||||
}
|
||||
//科目三未毕业学员id
|
||||
Set<Long> subject3No = new HashSet<>();
|
||||
//科目三已毕业学员id
|
||||
Set<Long> subject3Over = new HashSet<>();
|
||||
for (Process item:subject3List){
|
||||
if("2".equals(item.getStatus())){
|
||||
//已完成
|
||||
if("1".equals(item.getExamStatus())){
|
||||
//已通过考试
|
||||
subject3Over.add(item.getUserId());
|
||||
}
|
||||
}else{
|
||||
//未完成
|
||||
subject3No.add(item.getUserId());
|
||||
}
|
||||
}
|
||||
Map<String, Integer> rtnMap= new HashMap<>();
|
||||
rtnMap.put("subject2No",subject2No.size());
|
||||
rtnMap.put("subject2Over",subject2Over.size());
|
||||
rtnMap.put("subject3No",subject3No.size());
|
||||
rtnMap.put("subject3Over",subject3Over.size());
|
||||
return rtnMap;
|
||||
}
|
||||
|
||||
}
|
@ -22,4 +22,6 @@ public interface ExamBatchItemMapper extends BaseMapper<ExamBatchItem> {
|
||||
IPage<ExamBatchItemVO> queryListPage(@Param("entity") ExamBatchVO pageReqVO, Page<ExamBatchItemVO> page);
|
||||
|
||||
List<ExamBatchItemVO> selectByBatchId(@Param("batchId")String batchId);
|
||||
|
||||
List<ExamBatchItemVO> selectByUserIdAndCoachId(@Param("userId")Long userId,@Param("coachId")Long coachId);
|
||||
}
|
@ -40,4 +40,14 @@ public interface ExamBatchItemService extends IService<ExamBatchItem> {
|
||||
* @date 13:48 2025/1/21
|
||||
**/
|
||||
void updateObj(ExamBatchItemVO examBatchVO);
|
||||
|
||||
/**
|
||||
* 根据学生id和教练ID查询考试记录
|
||||
* @author vinjor-M
|
||||
* @date 16:38 2025/2/10
|
||||
* @param userId 学生ID
|
||||
* @param coachId 教练ID,可能为空
|
||||
* @return java.util.List<cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO>
|
||||
**/
|
||||
List<ExamBatchItemVO> selectByUserIdAndCoachId(Long userId,Long coachId);
|
||||
}
|
||||
|
@ -110,23 +110,39 @@ public class ExamBatchItemServiceImpl extends ServiceImpl<ExamBatchItemMapper, E
|
||||
if(examBatchVO.getIfPass()){
|
||||
//考试通过
|
||||
if(process.getSubject()<3){
|
||||
//科目一、二插入一条下一个科目的学习进度
|
||||
Process nextProcess = new Process();
|
||||
nextProcess.setCourseId(process.getCourseId());
|
||||
nextProcess.setCourseName(process.getCourseName());
|
||||
nextProcess.setUserId(process.getUserId());
|
||||
nextProcess.setUserName(process.getUserName());
|
||||
nextProcess.setUserMobile(process.getUserMobile());
|
||||
nextProcess.setCoachId(process.getCoachId());
|
||||
nextProcess.setCoachName(process.getCoachName());
|
||||
nextProcess.setSubject(process.getSubject()+1);
|
||||
nextProcess.setExamNum(process.getExamNum()+1);
|
||||
nextProcess.setStatus("1");
|
||||
nextProcess.setTrainTime((double) 0);
|
||||
processService.save(nextProcess);
|
||||
//科目一、二插入一条,需要查出下一个的学习进度(如果不存在,手动插入一个)
|
||||
Integer nextSubject = process.getSubject()+1;
|
||||
LambdaQueryWrapper<Process> queryWrapper = new LambdaQueryWrapper<Process>()
|
||||
.eq(Process::getCourseId,process.getCourseId())
|
||||
.eq(Process::getUserId,process.getUserId())
|
||||
.eq(Process::getCoachId,process.getCoachId())
|
||||
.eq(Process::getSubject,nextSubject)
|
||||
.eq(Process::getStatus,"0");
|
||||
List<Process> list = processService.list(queryWrapper);
|
||||
if(list.isEmpty()){
|
||||
//插入
|
||||
Process nextProcess = new Process();
|
||||
nextProcess.setCourseId(process.getCourseId());
|
||||
nextProcess.setCourseName(process.getCourseName());
|
||||
nextProcess.setUserId(process.getUserId());
|
||||
nextProcess.setUserName(process.getUserName());
|
||||
nextProcess.setUserMobile(process.getUserMobile());
|
||||
nextProcess.setCoachId(process.getCoachId());
|
||||
nextProcess.setCoachName(process.getCoachName());
|
||||
nextProcess.setSubject(process.getSubject()+1);
|
||||
nextProcess.setExamNum(process.getExamNum()+1);
|
||||
nextProcess.setStatus("1");
|
||||
nextProcess.setTrainTime((double) 0);
|
||||
processService.save(nextProcess);
|
||||
}else{
|
||||
//更新状态为进行中
|
||||
Process nextProcess = list.get(0);
|
||||
nextProcess.setStatus("1");
|
||||
processService.updateById(nextProcess);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
//考试不通过,重新插入一条本科目的学习记录
|
||||
//考试不通过,重新插入一条本科目的学习记录-并改为进行中
|
||||
Process thisProcess = new Process();
|
||||
thisProcess.setCourseId(process.getCourseId());
|
||||
thisProcess.setCourseName(process.getCourseName());
|
||||
@ -164,4 +180,18 @@ public class ExamBatchItemServiceImpl extends ServiceImpl<ExamBatchItemMapper, E
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据学生id和教练ID查询考试记录
|
||||
*
|
||||
* @param userId 学生ID
|
||||
* @param coachId 教练ID,可能为空
|
||||
* @return java.util.List<cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO>
|
||||
* @author vinjor-M
|
||||
* @date 16:38 2025/2/10
|
||||
**/
|
||||
@Override
|
||||
public List<ExamBatchItemVO> selectByUserIdAndCoachId(Long userId, Long coachId) {
|
||||
return examBatchItemMapper.selectByUserIdAndCoachId(userId, coachId);
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.exam.vo;
|
||||
import cn.iocoder.yudao.module.exam.entity.ExamBatchItem;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class ExamBatchItemVO extends ExamBatchItem {
|
||||
/**
|
||||
@ -29,4 +31,21 @@ public class ExamBatchItemVO extends ExamBatchItem {
|
||||
* 本科目累计训练时长
|
||||
*/
|
||||
private Double trainTime;
|
||||
|
||||
/**
|
||||
* 考试开始时间
|
||||
*/
|
||||
private Date startTime;
|
||||
/**
|
||||
* 考试结束时间
|
||||
*/
|
||||
private Date endTime;
|
||||
/**
|
||||
* 考试地址
|
||||
*/
|
||||
private String addr;
|
||||
/**
|
||||
* 考试交通方式
|
||||
*/
|
||||
private String transWay;
|
||||
}
|
||||
|
@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 预约练车 Service 接口
|
||||
*
|
||||
@ -49,4 +51,14 @@ public interface TrainService extends IService<Train> {
|
||||
* @return cn.iocoder.yudao.module.train.entity.Train
|
||||
**/
|
||||
Train getUserTrainData(Long userId,String courseId,Integer subject,String dayStr);
|
||||
|
||||
/**
|
||||
* 查某学生所有培训记录
|
||||
* @author vinjor-M
|
||||
* @date 16:26 2025/2/10
|
||||
* @param userId 学生id
|
||||
* @param coachId 教练id,可能为空
|
||||
* @return java.util.List<cn.iocoder.yudao.module.train.entity.Train>
|
||||
**/
|
||||
List<Train> selectByUserIdAndCoachId(Long userId,Long coachId);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.iocoder.yudao.module.train.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import cn.iocoder.yudao.module.course.entity.Process;
|
||||
import cn.iocoder.yudao.module.course.service.ProcessService;
|
||||
import cn.iocoder.yudao.module.train.entity.Train;
|
||||
@ -101,4 +102,24 @@ public class TrainServiceImpl extends ServiceImpl<TrainMapper, Train> implements
|
||||
List<Train> list = this.list(queryWrapper);
|
||||
return list.isEmpty()?null:list.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查某学生所有培训记录
|
||||
*
|
||||
* @param userId 学生id
|
||||
* @param coachId 教练id,可能为空
|
||||
* @return java.util.List<cn.iocoder.yudao.module.train.entity.Train>
|
||||
* @author vinjor-M
|
||||
* @date 16:26 2025/2/10
|
||||
**/
|
||||
@Override
|
||||
public List<Train> selectByUserIdAndCoachId(Long userId, Long coachId) {
|
||||
LambdaQueryWrapper<Train> queryWrapper = new LambdaQueryWrapper<Train>()
|
||||
.eq(Train::getUserId,userId);
|
||||
if(null!=coachId){
|
||||
queryWrapper.eq(Train::getCoachId,coachId);
|
||||
}
|
||||
queryWrapper.orderByDesc(BaseDO::getCreateTime);
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
}
|
@ -26,6 +26,9 @@
|
||||
dsp.* FROM drive_school_process dsp
|
||||
WHERE
|
||||
dsp.user_id = #{userId}
|
||||
<if test="coachId != null and coachId != ''">
|
||||
AND dsp.coach_id=#{coachId}
|
||||
</if>
|
||||
ORDER BY dsp.`subject` DESC, dsp.create_time DESC LIMIT 1
|
||||
</select>
|
||||
</mapper>
|
||||
|
@ -25,11 +25,31 @@
|
||||
</select>
|
||||
<select id="selectByBatchId" resultType="cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO">
|
||||
SELECT
|
||||
*
|
||||
dseb.*,dss.phone AS userMobile
|
||||
FROM
|
||||
drive_school_exam_batch_item
|
||||
drive_school_exam_batch_item dseb
|
||||
left join drive_school_student dss ON dseb.user_id = dss.user_id AND dss.deleted=0
|
||||
WHERE
|
||||
deleted = 0
|
||||
AND batch_id = #{batchId}
|
||||
dseb.deleted = 0
|
||||
AND dseb.batch_id = #{batchId}
|
||||
</select>
|
||||
<select id="selectByUserIdAndCoachId" resultType="cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO">
|
||||
SELECT
|
||||
dsebi.*,
|
||||
dseb.batch_name,
|
||||
dseb.start_time,
|
||||
dseb.end_time,
|
||||
dseb.`subject`,
|
||||
dseb.addr,
|
||||
dseb.trans_way
|
||||
FROM
|
||||
drive_school_exam_batch_item dsebi
|
||||
LEFT JOIN drive_school_exam_batch dseb ON dsebi.batch_id = dseb.id
|
||||
WHERE
|
||||
dsebi.user_id = #{userId}
|
||||
<if test="coachId != null and coachId != ''">
|
||||
AND dseb.coach_id=#{coachId}
|
||||
</if>
|
||||
ORDER BY dseb.create_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
|
Loading…
Reference in New Issue
Block a user