lanan-system/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml
2025-06-27 15:08:32 +08:00

670 lines
25 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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="cn.iocoder.yudao.module.base.mapper.DlDriveSchoolStudentMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="queryListPage" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO">
SELECT
main.*,
dsco.coach_user_name AS coachName
FROM
drive_school_student main
LEFT JOIN drive_school_course_order dsco ON main.user_id = dsco.user_id
<where>
main.deleted = 0
<if test="entity.name != null and entity.name != ''">and main.name like concat('%', #{entity.name}, '%')</if>
<if test="entity.phone != null and entity.phone != ''">and main.phone = #{entity.phone}</if>
<if test="entity.idCard != null and entity.idCard != ''">and main.id_card like concat('%', #{entity.idCard}, '%')</if>
<if test="entity.source != null and entity.source != ''">and main.source = #{entity.source}</if>
</where>
GROUP BY main.user_id
order by main.create_time desc
</select>
<select id="selectCanExamStudentList"
resultType="cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent">
SELECT
dss.*
FROM
drive_school_process dsp
LEFT JOIN drive_school_student dss ON dsp.user_id = dss.user_id
AND dss.deleted = 0
WHERE
dsp.deleted = 0
AND dsp.coach_id = #{coachId}
AND dsp.course_id = #{courseId}
AND dsp.`subject` = #{subject}
<if test="userName!=null and userName!=''">
AND dsp.user_name LIKE CONCAT('%',#{userName},'%')
</if>
AND dsp.`status` = '1'
AND dsp.exam_status IS NULL
GROUP BY
dss.id
ORDER BY
dss.create_time DESC
</select>
<select id="pageStaffStudent" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO">
SELECT
main.id AS id,
main.NAME AS NAME,
main.type AS type,
main.avatar AS avatar,
main.phone AS phone,
main.user_id AS userId,
dsco.course_type,
dsp.`subject`,
dsco.course_name,
dsco.payment_status,
dsco.cashier_confirm,
dsco.pay_type,
dsco.pay_channel,
dsco.cashier_confirm_remark,
dsco.reserve_money,
dsco.rest_money,
dsco.if_end,
dsco.create_time AS enrollTime,
dsco.user_no AS studentIdCard
FROM
drive_school_student main
LEFT JOIN drive_school_course_order dsco ON main.user_id = dsco.user_id
AND dsco.deleted = 0
AND dsco.payment_status IN ( '2', '3', '4', '5' )
AND dsco.if_end = 0
LEFT JOIN drive_school_process dsp ON main.user_id = dsp.user_id
AND dsco.course_id = dsp.course_id
AND dsp.`status` = '1'
WHERE
main.deleted = 0 AND dsco.is_sign = 1
<if test="entity.coachId != null and entity.coachId != ''">
AND dsp.coach_id = #{entity.coachId}
</if>
<if test="entity.sourceCoachId != null and entity.sourceCoachId != ''">
AND main.source_user_id = #{entity.sourceCoachId}
</if>
<if test="entity.name!=null and entity.name!=''">
AND main.name LIKE CONCAT('%',#{entity.name},'%')
</if>
<if test="entity.workName!=null and entity.workName!=''">
AND main.work_name = #{entity.workName}
</if>
<if test="entity.courseType != null and entity.courseType != ''">
AND dsco.course_type = #{entity.courseType}
</if>
<if test="entity.subject != null and entity.subject != ''">
AND dsp.subject = #{entity.subject}
</if>
<if test="entity.startTime!=null and entity.startTime!=''">
AND dsco.create_time &gt;= #{entity.startTime}
</if>
<if test="entity.endTime!=null and entity.endTime!=''">
AND dsco.create_time &lt;= #{entity.endTime}
</if>
<if test="entity.source!=null and entity.source!=''">
AND main.source = #{entity.source}
</if>
<if test="entity.examStatus!=null and entity.examStatus!=''">
AND dsp.exam_status = #{entity.examStatus}
</if>
<if test="entity.rangeTime!=null">
AND dsco.create_time BETWEEN #{entity.rangeTime[0]} AND #{entity.rangeTime[1]}
</if>
<if test="entity.address!=null and entity.address!=''">
AND main.address LIKE CONCAT('%',#{entity.address},'%')
</if>
<if test="entity.age!=null and entity.age!=''">
AND main.id_card IS NOT NULL
AND TIMESTAMPDIFF(YEAR, STR_TO_DATE(SUBSTRING(main.id_card, 7, 8), '%Y%m%d'), CURDATE()) BETWEEN #{entity.age[0]} AND #{entity.age[1]}
</if>
<if test="entity.passDays!=null and entity.passDays!=''">
AND dsco.pass_time IS NOT NULL
AND TIMESTAMPDIFF(DAY, dsco.create_time, dsco.pass_time) = #{entity.passDays}
</if>
GROUP BY
main.id
<choose>
<when test="entity.sort=='asc'">
ORDER BY
dsco.create_time ASC
</when>
<otherwise>
ORDER BY
dsco.create_time DESC
</otherwise>
</choose>
</select>
<select id="selectByCoachId" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO">
SELECT
temp.*
FROM
(
SELECT
dss.*,dsco.id AS orderId,dsco.course_name,dsp.coach_id,dsp.course_id
FROM
drive_school_process dsp
LEFT JOIN drive_school_student dss ON dsp.user_id = dss.user_id
LEFT JOIN drive_school_course_order dsco ON dsp.user_id = dsco.user_id AND dsp.course_id = dsco.course_id
WHERE
dsp.deleted = 0
AND dsco.if_end = 0
AND dsco.deleted = 0
AND dsp.coach_id = #{entity.coachId}
<if test="entity.name != null and entity.name!=''">
AND dss.`name` LIKE CONCAT('%',#{entity.name},'%')
</if>
<if test="entity.startTime!=null and entity.startTime!=''">
AND dss.create_time &gt;= #{entity.startTime}
</if>
<if test="entity.endTime!=null and entity.endTime!=''">
AND dss.create_time &lt;= #{entity.endTime}
</if>
<if test="entity.isGrad != null and entity.isGrad == 'correct'">
AND dsco.grad_time IS NOT NULL
</if>
<if test="entity.isGrad != null and entity.isGrad == 'deny'">
AND dsco.grad_time IS NULL
</if>
AND dss.id IS NOT NULL
ORDER BY
dss.create_time DESC
) temp
GROUP BY
temp.orderId
</select>
<select id="selectByBusinessId" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO">
SELECT
dss.*,dsco.course_type AS courseType
FROM
drive_school_student dss
LEFT JOIN drive_school_course_order dsco ON dss.user_id = dsco.user_id
WHERE
dss.deleted = 0
AND dsco.if_end = 0
AND dsco.deleted = 0
-- AND dsco.payment_status in ( '2', '3', '4', '5' )
-- AND dsco.is_sign = 1
AND dss.id IS NOT NULL
<choose>
<when test="entity.pType == 'yg'">
AND dss.source = '01'
</when>
<when test="entity.pType == 'ywjl'">
AND dss.source = '04'
</when>
</choose>
AND dss.source_user_id = #{entity.coachId}
<if test="entity.name != null and entity.name!=''">
AND dss.`name` LIKE CONCAT('%',#{entity.name},'%')
</if>
<if test="entity.startTime!=null and entity.startTime!=''">
AND dss.create_time &gt;= #{entity.startTime}
</if>
<if test="entity.endTime!=null and entity.endTime!=''">
AND dss.create_time &lt;= #{entity.endTime}
</if>
<if test="entity.courseType!=null and entity.courseType!=''">
AND dsco.course_type = #{entity.courseType}
</if>
<if test="entity.isSign!=null">
AND dsco.is_sign = #{entity.isSign}
</if>
GROUP BY
dss.user_id
<choose>
<when test="entity.sort=='asc'">
ORDER BY
dss.create_time ASC
</when>
<otherwise>
ORDER BY
dss.create_time DESC
</otherwise>
</choose>
</select>
<select id="selectStudentList" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO">
SELECT
dss.* ,SUM(dsco.reserve_money+dsco.rest_money)AS priceAmount
FROM
drive_school_student dss
LEFT JOIN drive_school_course_order dsco ON dss.user_id=dsco.user_id AND dsco.deleted=0 AND dsco.if_end=0 AND dsco.is_sign = 1
WHERE
dss.deleted=0
AND dsco.id IS NOT NULL
<if test="startTime!=null and startTime!=''">
AND dss.create_time &gt;= #{startTime}
</if>
<if test="endTime!=null and endTime!=''">
AND dss.create_time &lt;= #{endTime}
</if>
<if test="coachId!=null and coachId!=''">
AND dss.source_user_id=#{coachId}
</if>
GROUP BY dss.id
</select>
<select id="selectStudentListByOrder" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO">
SELECT dss.*,SUM(dsco.reserve_money+dsco.rest_money)AS priceAmount
FROM drive_school_course_order dsco
LEFT JOIN drive_school_student dss ON dsco.user_id=dss.user_id AND dss.deleted=0
WHERE dsco.deleted=0
<if test="startTime!=null and startTime!=''">
AND dsco.create_time &gt;= #{startTime}
</if>
<if test="endTime!=null and endTime!=''">
AND dsco.create_time &lt;= #{endTime}
</if>
<if test="coachId!=null and coachId!=''">
AND dsco.coach_id=#{coachId}
</if>
GROUP BY dss.id
</select>
<select id="selectStudentListCoach" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO">
SELECT
dss.*,dsco.grad_time AS orderGradTime,dsco.id AS orderId,dsco.course_type AS courseType
FROM
drive_school_process dsp
LEFT JOIN drive_school_student dss ON dsp.user_id = dss.user_id
LEFT JOIN drive_school_course_order dsco ON dsp.user_id = dsco.user_id AND dsp.course_id = dsco.course_id
WHERE
dsp.deleted = 0
AND dsco.if_end = 0
AND dsco.deleted = 0
AND dss.id IS NOT NULL
<if test="coachId != null and coachId != ''">
AND dsp.coach_id = #{coachId}
</if>
<if test="startTime!=null and startTime!=''">
AND dss.create_time &gt;= #{startTime}
</if>
<if test="endTime!=null and endTime!=''">
AND dss.create_time &lt;= #{endTime}
</if>
GROUP BY
dsco.id
<!-- 旧的sql-->
<!-- SELECT-->
<!-- dss.*-->
<!-- FROM-->
<!-- drive_school_process dsp-->
<!-- LEFT JOIN drive_school_student dss ON dsp.user_id = dss.user_id-->
<!-- WHERE-->
<!-- dsp.deleted = 0-->
<!-- AND dss.id IS NOT NULL-->
<!-- <if test="coachId != null and coachId != ''">-->
<!-- AND dsp.coach_id = #{coachId}-->
<!-- </if>-->
<!-- <if test="startTime!=null and startTime!=''">-->
<!-- AND dss.create_time &gt;= #{startTime}-->
<!-- </if>-->
<!-- <if test="endTime!=null and endTime!=''">-->
<!-- AND dss.create_time &lt;= #{endTime}-->
<!-- </if>-->
<!-- GROUP BY-->
<!-- dsp.id-->
</select>
<select id="selectStudentListBusiness" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO">
SELECT
dss.*,dsco.course_type AS courseType
FROM
drive_school_student dss
LEFT JOIN drive_school_course_order dsco ON dss.user_id = dsco.user_id
WHERE
dss.deleted = 0
AND dsco.if_end = 0
AND dsco.deleted = 0
AND dsco.payment_status in ( '2', '3', '4', '5' )
AND dsco.is_sign = 1
AND dss.id IS NOT NULL
AND dss.source = '04'
<if test="coachId != null and coachId != ''">
AND dss.source_user_id = #{coachId}
</if>
<if test="startTime!=null and startTime!=''">
AND dss.create_time &gt;= #{startTime}
</if>
<if test="endTime!=null and endTime!=''">
AND dss.create_time &lt;= #{endTime}
</if>
GROUP BY
dsco.id
</select>
<select id="selectStudentListByBusiness" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentByBusinessVO">
SELECT
dss.*,
-- 使用 MAX/MIN 取任意一个订单信息(不累加)
MAX(dsco.course_type) AS courseType,
MAX(dsco.course_name) AS course_name,
MAX(dsco.payment_status) AS payment_status,
MAX(dsco.is_sign) AS is_sign,
MAX(dsco.reserve_money) AS reserve_money, -- 不累加,只取一个订单的金额
MAX(dsco.rest_money) AS rest_money, -- 不累加,只取一个订单的金额
MAX(dsco.pay_type) AS pay_type
FROM
drive_school_student dss
LEFT JOIN drive_school_course_order dsco
ON dss.user_id = dsco.user_id
AND dsco.deleted = 0
AND dsco.if_end = 0
WHERE
dss.deleted = 0
AND dss.id IS NOT NULL
AND dss.source = '04'
<if test="coachId != null and coachId != ''">
AND dss.source_user_id = #{coachId}
</if>
<if test="startTime != null and startTime != ''">
AND dss.create_time &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND dss.create_time &lt;= #{endTime}
</if>
<if test="isSign == 1">
-- 有至少一条订单已面签
AND dss.user_id IN (
SELECT user_id FROM drive_school_course_order
WHERE is_sign = 1 AND deleted = 0 AND if_end = 0
GROUP BY user_id
)
</if>
<if test="isSign == 0">
-- 没有任何一条订单是已面签的用户
AND dss.user_id NOT IN (
SELECT user_id FROM drive_school_course_order
WHERE is_sign = 1 AND deleted = 0 AND if_end = 0
GROUP BY user_id
)
</if>
GROUP BY dss.user_id -- 按学生分组,确保每个学生只出现一次
</select>
<select id="selectIndexInfoByWorking" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentByBusinessVO">
SELECT
dss.*,
-- 使用 MAX/MIN 取任意一个订单信息(不累加)
MAX(dsco.course_type) AS courseType,
MAX(dsco.course_name) AS course_name,
MAX(dsco.payment_status) AS payment_status,
MAX(dsco.is_sign) AS is_sign,
MAX(dsco.reserve_money) AS reserve_money, -- 不累加,只取一个订单的金额
MAX(dsco.rest_money) AS rest_money, -- 不累加,只取一个订单的金额
MAX(dsco.pay_type) AS pay_type
FROM
drive_school_student dss
LEFT JOIN drive_school_course_order dsco
ON dss.user_id = dsco.user_id
AND dsco.deleted = 0
AND dsco.if_end = 0
WHERE
dss.deleted = 0
AND dss.id IS NOT NULL
AND dss.source = '01'
<if test="coachId != null and coachId != ''">
AND dss.source_user_id = #{coachId}
</if>
<if test="startTime != null and startTime != ''">
AND dss.create_time &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND dss.create_time &lt;= #{endTime}
</if>
<if test="isSign == 1">
-- 有至少一条订单已面签
AND dss.user_id IN (
SELECT user_id FROM drive_school_course_order
WHERE is_sign = 1 AND deleted = 0 AND if_end = 0
GROUP BY user_id
)
</if>
<if test="isSign == 0">
-- 没有任何一条订单是已面签的用户
AND dss.user_id NOT IN (
SELECT user_id FROM drive_school_course_order
WHERE is_sign = 1 AND deleted = 0 AND if_end = 0
GROUP BY user_id
)
</if>
GROUP BY dss.user_id -- 按学生分组,确保每个学生只出现一次
</select>
<select id="selectTrainStudent" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO">
SELECT
dss.*,dsc.type AS courseType,dst.subject
FROM
drive_school_student dss
LEFT JOIN drive_school_train dst ON dss.user_id = dst.user_id AND dst.deleted = 0
LEFT JOIN drive_school_course dsc ON dst.course_id = dsc.id
WHERE
dst.id IS NOT NULL
AND dss.deleted = 0
<if test="coachId != null and coachId != ''">
AND dst.coach_id = #{coachId}
</if>
<if test="courseType != null and courseType != ''">
AND dsc.type = #{courseType}
</if>
<if test="subject != null and subject != ''">
AND dst.subject = #{subject}
</if>
<if test="searchValue != null and searchValue != ''">
AND dss.name LIKE CONCAT('%',#{searchValue},'%')
</if>
<if test="startTime!=null and startTime!=''">
AND dst.create_time &gt;= #{startTime}
</if>
<if test="endTime!=null and endTime!=''">
AND dst.create_time &lt;= #{endTime}
</if>
GROUP BY
dss.id
<choose>
<when test="sort=='asc'">
ORDER BY
dst.create_time ASC
</when>
<otherwise>
ORDER BY
dst.create_time DESC
</otherwise>
</choose>
</select>
<select id="indexGetTrainList" resultType="cn.iocoder.yudao.module.base.vo.StudentCountVO">
SELECT
c.id,
c.user_id AS coachId,
c.image AS image,
c.NAME AS coachName,
c.car_id AS carId,
c.user_id AS userId,
COUNT(DISTINCT s.user_id) AS totalNum,
COUNT(DISTINCT CASE WHEN o.course_type = 'C1' THEN o.user_id END) AS c1Num,
COUNT(DISTINCT CASE WHEN o.course_type = 'C2' THEN o.user_id END) AS c2Num,
COUNT(DISTINCT o.user_id) AS timeTotal
FROM
drive_school_coach c
LEFT JOIN drive_school_student s ON c.user_id = s.source_user_id AND s.deleted=0
<if test="type != null and type != ''">
AND s.source = #{type}
</if>
LEFT JOIN drive_school_course_order o ON s.user_id = o.user_id AND o.payment_status > 1 AND o.deleted=0 AND o.is_sign = 1 AND o.if_end = 0
<if test="startTime != null and startTime != ''">
AND o.create_time &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND o.create_time &lt;= #{endTime}
</if>
WHERE
c.deleted = 0
<if test="coachId != null and coachId != ''">
AND c.user_id = #{coachId}
</if>
<if test="type != null and type != ''">
<choose>
<when test="type=='01'">
AND c.type='yg'
</when>
<when test="type=='02'">
AND c.type='jl'
</when>
<when test="type=='04'">
AND c.type='ywjl'
</when>
</choose>
</if>
GROUP BY
c.id
ORDER BY
totalNum DESC
</select>
<select id="indexGetFormList" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO">
SELECT
main.id AS id,
main.avatar AS avatar,
main.name AS name,
main.phone AS phone,
main.user_id AS userId,
dsco.course_type AS courseType
FROM
drive_school_student main
LEFT JOIN drive_school_course_order dsco ON main.user_id = dsco.user_id
WHERE main.deleted = 0
AND dsco.payment_status > 1
AND main.source='03'
<if test="startTime != null and startTime != ''">
AND dsco.create_time &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND dsco.create_time &lt;= #{endTime}
</if>
</select>
<select id="selectStudentListCount" resultType="cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO">
SELECT
main.id AS id,
dsco.course_type,
dsco.grad_time,
dsco.pass_time
FROM
drive_school_student main
LEFT JOIN drive_school_course_order dsco ON main.user_id = dsco.user_id
AND dsco.deleted = 0
AND dsco.payment_status IN ( '2', '3', '4', '5' )
AND dsco.if_end = 0
LEFT JOIN drive_school_process dsp ON main.user_id = dsp.user_id
AND dsco.course_id = dsp.course_id
AND dsp.`status` = '1'
WHERE
main.deleted = 0
AND dsco.is_sign = 1
GROUP BY
main.id
</select>
<select id="indexCusStudentList" resultType="cn.iocoder.yudao.module.base.vo.StudentCountVO">
</select>
<select id="getAll" resultType="cn.iocoder.yudao.module.base.vo.DriveSchoolStudentExportVo">
SELECT
name,
age,
CASE sex WHEN '0' THEN '男' WHEN '1' THEN '女' ELSE '未知' END AS sex,
phone,
CASE source
WHEN '01' THEN '驾校统招'
WHEN '02' THEN '教练自招'
WHEN '03' THEN '自来客户'
ELSE source
END AS source,
id_card AS idCard,
work_name AS workName,
regist_address AS registAddress,
address,
remark,
driving_student_code AS drivingStudentCode,
DATE_FORMAT(create_time, '%Y-%m-%d') AS createTimeStr
FROM drive_school_student
<where>
deleted = 0
<if test="entity.name != null and entity.name != ''">
AND name LIKE CONCAT('%', #{entity.name}, '%')
</if>
<if test="entity.phone != null and entity.phone != ''">
AND phone = #{entity.phone}
</if>
<if test="entity.idCard != null and entity.idCard != ''">
AND id_card LIKE CONCAT('%', #{entity.idCard}, '%')
</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>