This commit is contained in:
Lx 2025-06-18 17:24:30 +08:00
parent e5ff111e8f
commit f20e476027
24 changed files with 585 additions and 8 deletions

View File

@ -265,4 +265,37 @@ public class DlDriveSchoolStudentController {
return success(schoolStudentService.updateChannel(student));
}
/**
* 获取教练已经毕业的学员列表
* @param coachId
* @param courseType
* @return
*/
@GetMapping("/getGradStudentByCoachId")
public CommonResult<IPage<?>> getGradStudentByCourseType(@RequestParam("coachId") String coachId,
@RequestParam(name = "courseType", required = false) String courseType,
@RequestParam(name = "name", required = false) String name,
@RequestParam(name = "sort", required = false) String sort,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<DlDriveSchoolStudent> page = new Page<>(pageNo, pageSize);
return success(schoolStudentService.getGradStudentByCourseType(coachId, courseType, name, sort, page));
}
/**
* 获取教练未毕业的学员列表
* @param coachId
* @param courseType
* @return
*/
@GetMapping("/getNoGradStudentByCoachId")
public CommonResult<IPage<?>> getNoGradStudentByCourseType(@RequestParam("coachId") String coachId,
@RequestParam(name = "courseType", required = false) String courseType,
@RequestParam(name = "name", required = false) String name,
@RequestParam(name = "sort", required = false) String sort,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<DlDriveSchoolStudent> page = new Page<>(pageNo, pageSize);
return success(schoolStudentService.getNoGradStudentByCourseType(coachId, courseType, name, sort, page));
}
}

View File

@ -152,4 +152,13 @@ public interface DlDriveSchoolStudentMapper extends BaseMapper<DlDriveSchoolStud
List<StudentCountVO> indexCusStudentList(String startTime, String endTime);
List<DriveSchoolStudentExportVo> getAll(@Param("entity") DlDriveSchoolStudent query);
/**
* 获取教练已经毕业的学员列表
*/
IPage<DlDriveSchoolStudent> getGradStudentByCourseType(@Param("coachId") String coachId, @Param("courseType") String courseType, @Param("name") String name, @Param("sort") String sort,Page<DlDriveSchoolStudent> page);
/**
* 获取教练已经毕业的学员列表
*/
IPage<DlDriveSchoolStudent> getNoGradStudentByCourseType(@Param("coachId") String coachId, @Param("courseType") String courseType, @Param("name") String name, @Param("sort") String sort,Page<DlDriveSchoolStudent> page);
}

View File

@ -194,4 +194,14 @@ public interface DlDriveSchoolStudentService extends IService<DlDriveSchoolStude
public boolean updateChannel(DlDriveSchoolStudent student);
DlDriveSchoolStudent getStudentByIdNo(String idNo);
/**
* 获取教练已经毕业的学员列表
*/
IPage<DlDriveSchoolStudent> getGradStudentByCourseType(String coachId, String courseType, String name, String sort, Page<DlDriveSchoolStudent> page);
/**
* 获取教练未毕业的学员列表
*/
IPage<DlDriveSchoolStudent> getNoGradStudentByCourseType(String coachId, String courseType, String name, String sort, Page<DlDriveSchoolStudent> page);
}

View File

@ -250,8 +250,7 @@ public class DataViewServiceImpl implements DataViewService {
studentInfoMap.put("schoolRate", 0 != schoolRate ? (Double.parseDouble(df.format(schoolRate)) * 100) : 0);
studentInfoMap.put("businessNum", businessNum);
studentInfoMap.put("businessAmount", businessAmount);
// studentInfoMap.put("businessRate", 0 != businessRate ? (Double.parseDouble(df.format(businessRate)) * 100) : 0);
studentInfoMap.put("businessRate", businessRate != 0 ? formatRate(businessRate) : 0);
studentInfoMap.put("businessRate", 0 != businessRate ? (Double.parseDouble(df.format(businessRate)) * 100) : 0);
rtnObj.setStudentInfo(studentInfoMap);
/*4.财务情况--*/
//应收
@ -538,6 +537,7 @@ public class DataViewServiceImpl implements DataViewService {
courseTypeGraduatedCount.forEach((key, count) -> rtnMap.put(key, count));
return rtnMap;
//TODO 需要修改为查询订单表的grad_time pass_time
}
/*public Map<String, Object> getStudentCount() {
List<DlDriveSchoolStaffVO> list = studentMapper.selectStudentListCount();

View File

@ -21,6 +21,8 @@ import cn.iocoder.yudao.module.base.vo.*;
import cn.iocoder.yudao.module.constant.InspectionConstants;
import cn.iocoder.yudao.module.course.entity.SchoolCommission;
import cn.iocoder.yudao.module.course.mapper.SchoolCommissionMapper;
import cn.iocoder.yudao.module.course.service.ProcessService;
import cn.iocoder.yudao.module.course.vo.ProcessVO;
import cn.iocoder.yudao.module.exam.mapper.ExamBatchItemMapper;
import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO;
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
@ -112,6 +114,9 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl<DlDriveSchoolCoac
@Autowired
private RoleService roleService;
@Resource
private ProcessService processService;
/**
* 驾校教练普通员工列表
@ -522,11 +527,14 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl<DlDriveSchoolCoac
/*3.统计教练的学生基本信息*/
//毕业情况
List<DlDriveSchoolStudentVO> studentVOList = studentMapper.selectStudentListCoach(coach.getUserId(),startTimeStr,endTimeStr);
int overNum = (int) studentVOList.stream().filter(item -> null != item.getGradTime()).count();
int overNum = (int) studentVOList.stream().filter(item -> null != item.getOrderGradTime()).count();
int noOverNum = studentVOList.size()-overNum;
Map<String,Object> studentInfoMap = new HashMap<>();
studentInfoMap.put("overNum",overNum);
studentInfoMap.put("noOverNum",noOverNum);
List<ProcessVO> subject2Over = processService.getPassStudentList(coach.getUserId(), 2, startTimeStr, endTimeStr);
List<ProcessVO> subject3Over = processService.getPassStudentList(coach.getUserId(), 3, startTimeStr, endTimeStr);
//考试情况
List<ExamBatchItemVO> examBatchItemVOList = examBatchItemMapper.selectByCoachId(coach.getUserId(),startTimeStr,endTimeStr);
Double subject2Num = 0.0;
@ -562,6 +570,8 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl<DlDriveSchoolCoac
studentInfoMap.put("subject3All",subject3Num);
studentInfoMap.put("subject3Pass",subject3PassNum);
studentInfoMap.put("subject3Rate",0!=subject3Rate?(Double.parseDouble(df.format(subject3Rate))*100):0);
studentInfoMap.put("subject2Over",subject2Over.size());
studentInfoMap.put("subject3Over",subject3Over.size());
//招生情况
List<DlDriveSchoolStudentVO> studentList = studentMapper.selectStudentList(coach.getUserId(), startTimeStr, endTimeStr);
int coachNum=0;

View File

@ -697,4 +697,20 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl<DlDriveSchoolSt
.one();
}
/**
* 获取教练已经毕业的学员列表
*/
@Override
public IPage<DlDriveSchoolStudent> getGradStudentByCourseType(String coachId, String courseType, String name, String sort, Page<DlDriveSchoolStudent> page) {
return dlDriveSchoolStudentMapper.getGradStudentByCourseType(coachId, courseType, name, sort, page);
}
/**
* 获取教练未毕业的学员列表
*/
@Override
public IPage<DlDriveSchoolStudent> getNoGradStudentByCourseType(String coachId, String courseType, String name, String sort, Page<DlDriveSchoolStudent> page) {
return dlDriveSchoolStudentMapper.getNoGradStudentByCourseType(coachId, courseType, name, sort, page);
}
}

View File

@ -31,6 +31,7 @@ import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -198,4 +199,35 @@ public class ProcessController {
public CommonResult<Boolean> updateCoachForScoreInput(String id, Long coachId, String coachName){
return success(processService.updateCoachForScoreInput(id, coachId, coachName));
}
/**
* 已毕业学员统计
*/
@GetMapping("/getGraduateStudent")
public CommonResult<?> getGraduateStudent(String courseType){
return success(processService.getGraduateStudent(courseType));
}
/**
* 未毕业学员统计
*/
@GetMapping("/getNoGraduateStudent")
public CommonResult<?> getNoGraduateStudent(String courseType){
return success(processService.getNoGraduateStudent(courseType));
}
/**
* 获取 科目二/ 通过学员
*/
@GetMapping("/getPassStudent")
public CommonResult<IPage<?>> getPassStudent(@RequestParam("subject") int subject,
@RequestParam("coachId") Long coachId,
@RequestParam(name = "courseType", required = false) String courseType,
@RequestParam(name = "name", required = false) String name,
@RequestParam(name = "sort", required = false) String sort,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize){
Page<ProcessVO> page = new Page<>(pageNo, pageSize);
return success(processService.getPassStudent(coachId, subject, courseType, name, sort, page));
}
}

View File

@ -97,6 +97,10 @@ public class SchoolCourseOrder extends TenantBaseDO {
* 是否已面签 0 1
*/
private Integer isSign;
/**
* 面签时间
*/
private LocalDateTime signTime;
/**
* 尾款
*/

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.course.mapper;
import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent;
import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachPageReqVO;
import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachRespVO;
import cn.iocoder.yudao.module.course.entity.Process;
@ -92,4 +93,17 @@ public interface ProcessMapper extends BaseMapper<Process> {
ExamBatch getBatchForProcess(@Param("entity") Process entity);
/**
* 已毕业学员统计
*/
List<Process> getGraduateStudent(String courseType);
List<Process> getNoGraduateStudent(String courseType);
/**
*
*/
IPage<ProcessVO> getPassStudent(@Param("coachId")Long coachId, @Param("subject")int subject, @Param("courseType") String courseType, @Param("name") String name, @Param("sort") String sort,Page<ProcessVO> page);
List<ProcessVO> getPassStudentList(@Param("coachId")Long coachId, @Param("subject")int subject, @Param("startTime") String startTime, @Param("endTime")String endTime);
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.course.service;
import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent;
import cn.iocoder.yudao.module.course.entity.Process;
import cn.iocoder.yudao.module.course.vo.ProcessAndExamBatchVO;
import cn.iocoder.yudao.module.course.vo.ProcessNewVO;
@ -153,4 +154,20 @@ public interface ProcessService extends IService<Process> {
* 在录入成绩出修改教练
*/
Boolean updateCoachForScoreInput(String id, Long coachId, String coachName);
/**
* 已毕业学员统计
*/
List<Map<String, Object>> getGraduateStudent(String courseType);
/**
* 未毕业学员统计
*/
List<Map<String, Object>> getNoGraduateStudent(String courseType);
/**
* 获取 科目二/ 通过学员
*/
IPage<ProcessVO> getPassStudent(Long coachId, int subject, String courseType, String name, String sort, Page<ProcessVO> page);
List<ProcessVO> getPassStudentList(Long coachId, int subject, String startTime, String endTime);
}

View File

@ -858,6 +858,114 @@ public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> impl
return false;
}
}
/**
* 已毕业学员统计
*/
@Override
public List<Map<String, Object>> getGraduateStudent(String courseType) {
List<Process> rawList = processMapper.getGraduateStudent(courseType);
Map<Long, Map<String, Object>> resultMap = new HashMap<>();
for (Process row : rawList) {
Long coachId = row.getCoachId();
String coachName = row.getCoachName();
String courseTypeVal = row.getCourseType();
String images = row.getImages();
Long userId = row.getUserId();
// 先确保教练一定加入 map
Map<String, Object> coachMap = resultMap.computeIfAbsent(coachId, k -> {
Map<String, Object> m = new HashMap<>();
m.put("coachId", coachId);
m.put("coachName", coachName);
m.put("studentCount", 0);
m.put("images", images);
return m;
});
// 有学员才进行统计
if (userId != null) {
// 统计总数
int count = (int) coachMap.get("studentCount");
coachMap.put("studentCount", count + 1);
// 统计各课程类型数量
if (courseTypeVal != null) {
String key = courseTypeVal + "Num";
int typeCount = (int) coachMap.getOrDefault(key, 0);
coachMap.put(key, typeCount + 1);
}
}
}
// 按照总数倒序排序
return resultMap.values().stream()
.sorted((a, b) -> ((Integer) b.get("studentCount")).compareTo((Integer) a.get("studentCount")))
.collect(Collectors.toList());
}
/**
* 未毕业学员统计
*/
@Override
public List<Map<String, Object>> getNoGraduateStudent(String courseType) {
List<Process> rawList = processMapper.getNoGraduateStudent(courseType);
Map<Long, Map<String, Object>> resultMap = new HashMap<>();
for (Process row : rawList) {
Long coachId = row.getCoachId();
String coachName = row.getCoachName();
String courseTypeVal = row.getCourseType();
String images = row.getImages();
Long userId = row.getUserId();
// 先确保教练一定加入 map
Map<String, Object> coachMap = resultMap.computeIfAbsent(coachId, k -> {
Map<String, Object> m = new HashMap<>();
m.put("coachId", coachId);
m.put("coachName", coachName);
m.put("studentCount", 0);
m.put("images", images);
return m;
});
// 有学员才进行统计
if (userId != null) {
// 统计总数
int count = (int) coachMap.get("studentCount");
coachMap.put("studentCount", count + 1);
// 统计各课程类型数量
if (courseTypeVal != null) {
String key = courseTypeVal + "Num";
int typeCount = (int) coachMap.getOrDefault(key, 0);
coachMap.put(key, typeCount + 1);
}
}
}
// 按照总数倒序排序
return resultMap.values().stream()
.sorted((a, b) -> ((Integer) b.get("studentCount")).compareTo((Integer) a.get("studentCount")))
.collect(Collectors.toList());
}
/**
* 获取 科目二/ 通过学员
*/
@Override
public IPage<ProcessVO> getPassStudent(Long coachId, int subject, String courseType, String name, String sort, Page<ProcessVO> page) {
return processMapper.getPassStudent(coachId, subject, courseType, name, sort, page);
}
@Override
public List<ProcessVO> getPassStudentList(Long coachId, int subject, String startTime, String endTime) {
return processMapper.getPassStudentList(coachId, subject, startTime, endTime);
}
/**
* 生成32位uuid
*/
@ -866,4 +974,6 @@ public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> impl
return uuid.toString().replace("-", "");
}
}

View File

@ -88,6 +88,7 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl<SchoolCourseOrderM
SchoolCourseOrder updateObj = BeanUtils.toBean(updateReqVO, SchoolCourseOrder.class);
if(updateReqVO.getIsSign() != null){
this.sendMessage(updateReqVO);
this.updateSignTime(updateReqVO);
}
schoolCourseOrderMapper.updateById(updateObj);
}
@ -119,6 +120,23 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl<SchoolCourseOrderM
}
/**
* 更新面签时间
* @param updateReqVO
*/
public void updateSignTime(SchoolCourseOrderVO updateReqVO){
SchoolCourseOrder schoolCourseOrder = schoolCourseOrderMapper.selectById(updateReqVO.getId());
if(updateReqVO.getIsSign() == 1 && schoolCourseOrder != null && schoolCourseOrder.getIsSign() == 0){
schoolCourseOrder.setSignTime(LocalDateTime.now());
schoolCourseOrderMapper.updateById(schoolCourseOrder);
}
if(updateReqVO.getIsSign() == 0 && schoolCourseOrder != null && schoolCourseOrder.getIsSign() == 1){
schoolCourseOrder.setSignTime(null);
schoolCourseOrderMapper.updateById(schoolCourseOrder);
}
}
@Override
public void deleteSchoolCourseOrder(String id) {
// 删除

View File

@ -28,4 +28,9 @@ public class ProcessVO extends Process {
/** 学生尾款*/
private BigDecimal studentRemainingPay;
/** 学员姓名 */
private String name;
/** 学员头像 */
private String avatar;
}

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.exam.controller.admin;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.exam.service.ExamBatchService;
import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO;
import cn.iocoder.yudao.module.exam.vo.ExamBatchVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -46,4 +47,22 @@ public class ExamBatchController {
return success(examBatchService.selectOneById(id));
}
/**
* 某一教练学员通过和未通过列表
*/
@GetMapping("/getStudentByCoachId")
public CommonResult<?> getStudentByCoachId(@RequestParam("subject") int subject,
@RequestParam(name ="coachId", required = false) Long coachId,
@RequestParam(name = "ifPass", required = false) String ifPass,
@RequestParam(name = "name", required = false) String name,
@RequestParam(name = "sort", required = false) String sort,
@RequestParam(name = "timeType", required = false) String timeType,
@RequestParam(name = "startTime", required = false) String startTime,
@RequestParam(name = "endTime", required = false) String endTime,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<ExamBatchNewVO> page = new Page<>(pageNo,pageSize);
return success(examBatchService.getStudentByCoachId(subject, coachId, ifPass, name, sort, timeType, startTime, endTime, page));
}
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.exam.mapper;
import cn.iocoder.yudao.module.exam.entity.ExamBatch;
import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO;
import cn.iocoder.yudao.module.exam.vo.ExamBatchVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -18,4 +19,6 @@ public interface ExamBatchMapper extends BaseMapper<ExamBatch> {
IPage<ExamBatchVO> queryListPage(@Param("entity") ExamBatchVO entity, Page<ExamBatchVO> page);
}
IPage<ExamBatchNewVO> getStudentByCoachId(@Param("subject") int subject, @Param("coachId")Long coachId, @Param("ifPass")String ifPass, @Param("name")String name, @Param("sort")String sort, @Param("startTime") String startTime, @Param("endTime") String endTime, Page<ExamBatchNewVO> page);
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.exam.service;
import cn.iocoder.yudao.module.exam.entity.ExamBatch;
import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO;
import cn.iocoder.yudao.module.exam.vo.ExamBatchVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -38,4 +39,9 @@ public interface ExamBatchService extends IService<ExamBatch> {
* @return cn.iocoder.yudao.module.exam.vo.ExamBatchVO
**/
ExamBatchVO selectOneById(String id);
/**
* 某一教练学员通过和未通过列表
*/
IPage<ExamBatchNewVO> getStudentByCoachId(int subject, Long coachId, String ifPass, String name, String sort, String timeType, String startTime, String endTime, Page<ExamBatchNewVO> page);
}

View File

@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.exam.mapper.ExamBatchMapper;
import cn.iocoder.yudao.module.exam.service.ExamBatchItemService;
import cn.iocoder.yudao.module.exam.service.ExamBatchService;
import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO;
import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO;
import cn.iocoder.yudao.module.exam.vo.ExamBatchVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -146,4 +147,30 @@ public class ExamBatchServiceImpl extends ServiceImpl<ExamBatchMapper, ExamBatch
return examBatchVO;
}
}
/**
* 某一教练学员通过和未通过列表
*/
@Override
public IPage<ExamBatchNewVO> getStudentByCoachId(int subject, Long coachId, String ifPass, String name, String sort, String timeType, String startTime, String endTime, Page<ExamBatchNewVO> page) {
String startTimeStr = "";
String endTimeStr = "";
if("more".equals(timeType)){
if(StringUtils.isNotEmpty(startTime)){
startTimeStr = startTime+" 00:00:01";
}
if(StringUtils.isNotEmpty(endTime)) {
endTimeStr = endTime + " 23:59:59";
}
}else if("month".equals(timeType)){
//当月
startTimeStr = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 00:00:01";
endTimeStr = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 23:59:59";
}else if("day".equals(timeType)){
//当天
startTimeStr = DateUtil.formatDate(DateUtil.date())+" 00:00:01";
endTimeStr = DateUtil.formatDate(DateUtil.date())+" 23:59:59";
}
return examBatchMapper.getStudentByCoachId(subject,coachId,ifPass,name,sort,startTimeStr,endTimeStr,page);
}
}

View File

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.exam.vo;
import cn.iocoder.yudao.module.exam.entity.ExamBatch;
import lombok.Data;
import java.util.Date;
@Data
public class ExamBatchNewVO extends ExamBatch {
/**
* 学员姓名
*/
private String name;
/**
* 学员头像
*/
private String avatar;
/**
* 学员id
*/
private Long userId;
/**
* 学员手机号
*/
private String phone;
/**
* 考试时间
*/
private Date startTime;
}

View File

@ -38,4 +38,11 @@ public class ExamBatchVO extends ExamBatch {
*/
private Integer studentCount;
/**
* 教练头像
*/
private String image;
}

View File

@ -529,6 +529,7 @@
AND dsco.create_time &lt;= #{endTime}
</if>
</select>
<select id="selectStudentListCount" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO">
SELECT
main.id AS id,
@ -588,4 +589,66 @@
</if>
</where>
</select>
<!-- 获取教练已经毕业的学员列表-->
<select id="getGradStudentByCourseType" resultType="cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent">
SELECT
dss.*
FROM drive_school_process dsp
INNER JOIN drive_school_coach dsc ON dsc.user_id = dsp.coach_id AND dsc.deleted = 0
INNER JOIN drive_school_student dss ON dsp.user_id = dss.user_id AND dss.deleted = 0
WHERE
dsp.subject = 3
AND dsp.exam_status = '1'
AND dsp.deleted = 0
AND dsc.user_id = #{coachId}
<if test="courseType != null and courseType != ''">
AND dsp.course_type = #{courseType}
</if>
<if test="name != null and name != ''">
AND dss.name LIKE CONCAT('%', #{name}, '%')
</if>
<choose>
<when test="sort=='asc'">
ORDER BY
dss.create_time ASC
</when>
<otherwise>
ORDER BY
dss.create_time DESC
</otherwise>
</choose>
</select>
<!-- 获取教练已经毕业的学员列表-->
<select id="getNoGradStudentByCourseType" resultType="cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent">
SELECT
dss.*
FROM drive_school_process dsp
INNER JOIN drive_school_coach dsc ON dsc.user_id = dsp.coach_id AND dsc.deleted = 0
INNER JOIN drive_school_student dss ON dsp.user_id = dss.user_id AND dss.deleted = 0
WHERE
dsp.subject = 3
AND (dsp.exam_status != '1' OR dsp.exam_status IS NULL)
AND dsp.deleted = 0
AND dsc.user_id = #{coachId}
<if test="courseType != null and courseType != ''">
AND dsp.course_type = #{courseType}
</if>
<if test="name != null and name != ''">
AND dss.name LIKE CONCAT('%', #{name}, '%')
</if>
<choose>
<when test="sort=='asc'">
ORDER BY
dss.create_time ASC
</when>
<otherwise>
ORDER BY
dss.create_time DESC
</otherwise>
</choose>
</select>
</mapper>

View File

@ -200,4 +200,96 @@
</select>
<select id="getGraduateStudent" resultType="cn.iocoder.yudao.module.course.entity.Process">
SELECT
dsc.user_id AS coach_id,
dsc.name AS coach_name,
dsp.course_type,
dsp.user_id,
dsc.image AS images
FROM drive_school_coach dsc
LEFT JOIN drive_school_process dsp
ON dsc.user_id = dsp.coach_id
AND dsp.deleted = 0
AND dsp.exam_status = 1
AND dsp.subject = 3
<if test="courseType != null and courseType != ''">
AND dsp.course_type = #{courseType}
</if>
<where>
dsc.deleted = 0
AND dsc.type = 'jl'
</where>
</select>
<select id="getNoGraduateStudent" resultType="cn.iocoder.yudao.module.course.entity.Process">
SELECT
dsc.user_id AS coach_id,
dsc.name AS coach_name,
dsp.course_type,
dsp.user_id,
dsc.image AS images
FROM drive_school_coach dsc
LEFT JOIN drive_school_process dsp
ON dsc.user_id = dsp.coach_id
AND dsp.deleted = 0
AND (dsp.exam_status != '1' OR dsp.exam_status IS NULL)
AND dsp.subject = 3
<if test="courseType != null and courseType != ''">
AND dsp.course_type = #{courseType}
</if>
<where>
dsc.deleted = 0
AND dsc.type = 'jl'
</where>
</select>
<select id="getPassStudent" resultType="cn.iocoder.yudao.module.course.vo.ProcessVO">
SELECT
dss.user_id,
dss.name,
dss.avatar
FROM drive_school_process dsp
LEFT JOIN drive_school_student dss ON dsp.user_id = dss.user_id AND dss.deleted = 0
WHERE dsp.subject = #{subject}
AND dsp.coach_id = #{coachId}
AND dsp.deleted = 0
AND dsp.exam_status = 1
<if test="courseType != null and courseType != ''">
AND dsp.course_type = #{courseType}
</if>
<if test="name != null and name != ''">
AND dss.name LIKE CONCAT('%', #{name}, '%')
</if>
<choose>
<when test="sort=='asc'">
ORDER BY
dss.create_time ASC
</when>
<otherwise>
ORDER BY
dss.create_time DESC
</otherwise>
</choose>
</select>
<select id="getPassStudentList" resultType="cn.iocoder.yudao.module.course.vo.ProcessVO">
SELECT
dss.user_id,
dss.name,
dss.avatar
FROM drive_school_process dsp
LEFT JOIN drive_school_student dss ON dsp.user_id = dss.user_id AND dss.deleted = 0
WHERE dsp.subject = #{subject}
AND dsp.coach_id = #{coachId}
AND dsp.deleted = 0
AND dsp.exam_status = 1
<if test="startTime!=null and startTime!=''">
AND dsp.exam_time &gt;= #{startTime}
</if>
<if test="endTime!=null and endTime!=''">
AND dsp.exam_time &lt;= #{endTime}
</if>
</select>
</mapper>

View File

@ -28,6 +28,7 @@
<if test="entity.userId != null and entity.userId != ''"> and main.user_id = #{entity.userId}</if>
<if test="entity.paymentStatus != null and entity.paymentStatus != ''"> and main.payment_status = #{entity.paymentStatus}</if>
<if test="entity.ifEnd != null and entity.ifEnd != ''"> and main.if_end = #{entity.ifEnd}</if>
<if test="entity.coachUserName != null and entity.coachUserName != ''"> and main.coach_user_name = #{entity.coachUserName}</if>
</where>
order by main.create_time desc
</select>

View File

@ -163,6 +163,7 @@
SELECT
c.user_id AS coach_id,
c.name AS coach_name,
c.image,
COUNT(i.id) AS student_count,
SUM(CASE WHEN i.if_pass = 1 THEN 1 ELSE 0 END) AS pass_count,
ROUND(
@ -179,15 +180,15 @@
LEFT JOIN drive_school_exam_batch_item i
ON i.batch_id = b.id AND i.deleted = 0
<if test="entity.startTimeSearch != null and entity.startTimeSearch != '' ">
AND i.create_time &gt;= #{entity.startTimeSearch}
AND b.start_time &gt;= #{entity.startTimeSearch}
</if>
<if test="entity.endTimeSearch != null and entity.endTimeSearch != '' ">
AND i.create_time &lt;= #{entity.endTimeSearch}
AND b.start_time &lt;= #{entity.endTimeSearch}
</if>
WHERE
c.deleted = 0
<if test="entity.coachId != null">
AND c.id = #{entity.coachId}
AND c.user_id = #{entity.coachId}
</if>
GROUP BY
c.id, c.name

View File

@ -27,4 +27,50 @@
</if>
ORDER BY dseb.create_time DESC
</select>
<select id="getStudentByCoachId" resultType="cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO">
SELECT
dss.name,
dss.user_id,
dss.avatar,
dss.phone,
dseb.start_time
FROM
drive_school_coach dsc
INNER JOIN
drive_school_exam_batch dseb
ON dseb.coach_id = dsc.user_id
AND dseb.deleted = 0
AND dseb.subject = #{subject}
INNER JOIN
drive_school_exam_batch_item dsebi
ON dsebi.batch_id = dseb.id
AND dsebi.deleted = 0
AND dsebi.if_pass = #{ifPass}
INNER JOIN
drive_school_student dss
ON dsebi.user_id = dss.user_id
WHERE
<if test="coachId != null">
dsc.user_id = #{coachId}
</if>
<if test="startTime != null and startTime != '' ">
AND dseb.start_time &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != '' ">
AND dseb.start_time &lt;= #{endTime}
</if>
<if test="name != null and name != ''">
AND dss.name LIKE CONCAT('%', #{name}, '%')
</if>
ORDER BY
<choose>
<when test="sort == 'asc'">
dseb.start_time ASC
</when>
<otherwise>
dseb.start_time DESC
</otherwise>
</choose>
</select>
</mapper>