This commit is contained in:
Lx 2025-07-25 16:29:03 +08:00
parent 4b43a98bef
commit 3a45120903
15 changed files with 275 additions and 66 deletions

View File

@ -26,6 +26,7 @@ import cn.iocoder.yudao.module.train.entity.Train;
import cn.iocoder.yudao.module.train.mapper.TrainMapper;
import cn.iocoder.yudao.module.train.service.IDriveSchoolCoachClockService;
import cn.iocoder.yudao.module.train.service.TrainService;
import cn.iocoder.yudao.module.train.vo.CloakAndTrainCountVO;
import cn.iocoder.yudao.module.train.vo.TrainCarCountVO;
import cn.iocoder.yudao.module.train.vo.TrainStudentCountVO;
import cn.iocoder.yudao.module.train.vo.TrainVO;
@ -434,6 +435,18 @@ public class DataViewServiceImpl implements DataViewService {
trainInfoMap.put("subject2UserNum", trainStudentCount.getSubject2Count());
trainInfoMap.put("subject3UserNum", trainStudentCount.getSubject3Count());
rtnObj.setTrainInfo(trainInfoMap);
/* 实时训练情况*/
CloakAndTrainCountVO todayCarTrainSituation = coachClockService.getTodayTrainSituation();
CloakAndTrainCountVO todayStudentTrainSituation = trainMapper.getTodayTrainSituation(null);
Map<String, Object> todayTrainInfo = new HashMap<>();
todayTrainInfo.put("totalStudentCount", todayStudentTrainSituation.getTotalStudentCount());
todayTrainInfo.put("subject2StudentCount", todayStudentTrainSituation.getSubject2StudentCount());
todayTrainInfo.put("subject3StudentCount", todayStudentTrainSituation.getSubject3StudentCount());
todayTrainInfo.put("totalCarCount", todayCarTrainSituation.getTotalCarCount());
todayTrainInfo.put("subject2CarCount", todayCarTrainSituation.getSubject2CarCount());
todayTrainInfo.put("subject3CarCount", todayCarTrainSituation.getSubject3CarCount());
rtnObj.setTodayTrainInfo(todayTrainInfo);
/*3.考试情况*/
List<ExamBatchItemVO> examBatchItemVOList = examBatchItemMapper.selectByCoachId(coachId, startTimeStr, endTimeStr);
Double subject2Num = 0.0;

View File

@ -17,6 +17,8 @@ public class IndexDataVO {
private Map<String,Object> studentInfo;
/**训练情况*/
private Map<String,Object> trainInfo;
/**实时训练情况*/
private Map<String,Object> todayTrainInfo;
/**考试情况*/
private Map<String,Object> examInfo;
/**财务情况*/

View File

@ -54,4 +54,6 @@ public class DriveSchoolInsurance extends TenantBaseDO
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "保险到期时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date insuranceTime;
private String attachments;
}

View File

@ -175,5 +175,21 @@ public class DriveSchoolCoachClockController {
ExcelUtils.write(response, fileName + ".xlsx", "教练打卡记录", CoachClockExportVO.class, exportData);
}
/**
* 获取当日实时训练情况统计
*/
@GetMapping("/getTodayTrainSituation")
public CommonResult<CloakAndTrainCountVO> getTodayTrainSituation() {
return success(coachClockService.getTodayTrainSituation());
}
/**
* 获取正在训练的车辆信息列表
*/
@GetMapping("/getTodayCarTrainSituation")
public CommonResult<List<DriveSchoolCoachClockVO>> getTodayCarTrainSituation(DriveSchoolCoachClock driveSchoolCoachClock) {
return success(coachClockService.getTodayCarTrainSituation(driveSchoolCoachClock));
}
}

View File

@ -15,10 +15,7 @@ import cn.iocoder.yudao.module.jx.mapper.DriveSchoolCarMapper;
import cn.iocoder.yudao.module.jx.vo.DriveSchoolCarVO;
import cn.iocoder.yudao.module.train.entity.Train;
import cn.iocoder.yudao.module.train.service.TrainService;
import cn.iocoder.yudao.module.train.vo.NoClockInRemindVO;
import cn.iocoder.yudao.module.train.vo.TrainExportVO;
import cn.iocoder.yudao.module.train.vo.TrainStudentCountVO;
import cn.iocoder.yudao.module.train.vo.TrainVO;
import cn.iocoder.yudao.module.train.vo.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
@ -302,4 +299,23 @@ public class TrainController {
// 导出Excel
ExcelUtils.write(response, fileName + ".xlsx", "学员训练记录", TrainExportVO.class, exportData);
}
/**
* 当日正在训练学员统计
*/
@GetMapping("getTodayTrainSituation")
public CommonResult<CloakAndTrainCountVO> getTodayTrainSituation(Train train){
return success(trainService.getTodayTrainSituation(train));
}
/**
* 获取当前正在训练的学员列表
*/
@GetMapping("getTodayStudentTrainSituation")
public CommonResult<IPage<Train>> getTodayStudentTrainSituation(Train train,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize){
Page<Train> page = new Page<>(pageNo, pageSize);
return success(trainService.getTodayStudentTrainSituation(train,page));
}
}

View File

@ -46,4 +46,16 @@ public interface DriveSchoolCoachClockMapper extends BaseMapper<DriveSchoolCoach
CloakAndTrainCountVO getTrainCarCount(@Param("entity") CloakAndTrainCountVO cloakAndTrainCountVO);
/**
* 获取当日实时训练情况
*/
CloakAndTrainCountVO getTodayTrainSituation();
/**
* 获取正在训练的车辆信息
*/
List<DriveSchoolCoachClockVO> getTodayCarTrainSituation(@Param("entity") DriveSchoolCoachClock driveSchoolCoachClock);
}

View File

@ -1,10 +1,7 @@
package cn.iocoder.yudao.module.train.mapper;
import cn.iocoder.yudao.module.train.entity.Train;
import cn.iocoder.yudao.module.train.vo.NoClockInRemindVO;
import cn.iocoder.yudao.module.train.vo.TrainExportVO;
import cn.iocoder.yudao.module.train.vo.TrainStudentCountVO;
import cn.iocoder.yudao.module.train.vo.TrainVO;
import cn.iocoder.yudao.module.train.vo.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -44,4 +41,13 @@ public interface TrainMapper extends BaseMapper<Train> {
*/
IPage<TrainExportVO> getExportList(@Param("entity") TrainExportVO entity, Page<TrainExportVO> page);
/**
* 获取当日实时训练情况
*/
CloakAndTrainCountVO getTodayTrainSituation(@Param("entity") Train train);
/**
* 获取正在训练的学员信息
*/
IPage<Train> getTodayStudentTrainSituation(@Param("entity") Train train, Page<Train> page);
}

View File

@ -83,4 +83,14 @@ public interface IDriveSchoolCoachClockService extends IService<DriveSchoolCoach
List<CoachClockExportVO> getAllCoachClockRecordList(CoachClockExportVO exportVO);
List<CoachClockExportVO> getCoachClockListByRange(CoachClockExportVO exportVO);
/**
* 获取当日实时训练情况统计
*/
CloakAndTrainCountVO getTodayTrainSituation();
/**
* 获取正在训练的车辆信息列表
*/
List<DriveSchoolCoachClockVO> getTodayCarTrainSituation(DriveSchoolCoachClock driveSchoolCoachClock);
}

View File

@ -2,12 +2,14 @@ package cn.iocoder.yudao.module.train.service;
import cn.iocoder.yudao.module.course.vo.CommissionExportVO;
import cn.iocoder.yudao.module.train.entity.Train;
import cn.iocoder.yudao.module.train.vo.CloakAndTrainCountVO;
import cn.iocoder.yudao.module.train.vo.NoClockInRemindVO;
import cn.iocoder.yudao.module.train.vo.TrainExportVO;
import cn.iocoder.yudao.module.train.vo.TrainVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -111,4 +113,15 @@ public interface TrainService extends IService<Train> {
List<TrainExportVO> getTrainList(TrainExportVO exportVO);
List<TrainExportVO> getAllTrainList(TrainExportVO exportVO);
List<TrainExportVO> getTrainListByRange(TrainExportVO exportVO);
/**
* 当日正在训练学员统计
*/
CloakAndTrainCountVO getTodayTrainSituation(Train train);
/**
* 获取当前正在训练的学员信息列表
*/
IPage<Train> getTodayStudentTrainSituation(Train train, Page<Train> page);
}

View File

@ -436,4 +436,21 @@ public class DriveSchoolCoachClockServiceImpl extends ServiceImpl<DriveSchoolCoa
}
/**
* 获取当日实时训练情况
*/
@Override
public CloakAndTrainCountVO getTodayTrainSituation() {
return driveSchoolCoachClockMapper.getTodayTrainSituation();
}
/**
* 获取正在训练的车辆信息
*/
@Override
public List<DriveSchoolCoachClockVO> getTodayCarTrainSituation(DriveSchoolCoachClock driveSchoolCoachClock) {
return driveSchoolCoachClockMapper.getTodayCarTrainSituation(driveSchoolCoachClock);
}
}

View File

@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.course.vo.CommissionExportVO;
import cn.iocoder.yudao.module.train.entity.Train;
import cn.iocoder.yudao.module.train.mapper.TrainMapper;
import cn.iocoder.yudao.module.train.service.TrainService;
import cn.iocoder.yudao.module.train.vo.CloakAndTrainCountVO;
import cn.iocoder.yudao.module.train.vo.NoClockInRemindVO;
import cn.iocoder.yudao.module.train.vo.TrainExportVO;
import cn.iocoder.yudao.module.train.vo.TrainVO;
@ -253,5 +254,20 @@ public class TrainServiceImpl extends ServiceImpl<TrainMapper, Train> implements
return allData;
}
/**
* 当日正在训练学员统计
*/
@Override
public CloakAndTrainCountVO getTodayTrainSituation(Train train) {
return trainMapper.getTodayTrainSituation(train);
}
/**
* 获取当前正在训练的学员信息列表
*/
@Override
public IPage<Train> getTodayStudentTrainSituation(Train train, Page<Train> page) {
return trainMapper.getTodayStudentTrainSituation(train, page);
}
}

View File

@ -24,4 +24,6 @@ public class DriveSchoolCoachClockVO extends DriveSchoolCoachClock {
* 结束时间
*/
private String endTimeStr;
private String studentTotal;
}

View File

@ -19,10 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="creator" column="creator" />
<result property="updateTime" column="update_time" />
<result property="updater" column="updater" />
<result property="attachments" column="attachments" />
</resultMap>
<sql id="selectDriveSchoolInsuranceVo">
select id, user_names, user_id, car_id, user_name,car_no,company, content, money, insurance_time, create_time, creator, update_time, updater from drive_school_insurance
select id, user_names, user_id, car_id, user_name,car_no,company, content, money, insurance_time, create_time, creator, update_time, updater, attachments from drive_school_insurance
</sql>
<select id="selectDriveSchoolInsuranceList" parameterType="cn.iocoder.yudao.module.jx.domain.DriveSchoolInsurance" resultMap="DriveSchoolInsuranceResult">

View File

@ -109,50 +109,50 @@
totalCount DESC
</select>
<!-- <select id="trainClockByCar" resultType="cn.iocoder.yudao.module.train.vo.TrainCarCountVO">
SELECT
dscc.user_name,
dscc.car_id,
dscc.car_no,
COUNT(*) AS totalCount,
SUM(CASE WHEN dscc.subject = 2 THEN 1 ELSE 0 END) AS subject2Count,
SUM(CASE WHEN dscc.subject = 3 THEN 1 ELSE 0 END) AS subject3Count,
SUM(dscc.train_time) AS trainTimeCount,
COUNT(dst.coach_clock_id) AS studentCount,
SUM(CASE WHEN dscc.subject = 2 THEN dscc.train_time ELSE 0 END) AS subject2TrainTime,
SUM(CASE WHEN dscc.subject = 3 THEN dscc.train_time ELSE 0 END) AS subject3TrainTime
FROM
drive_school_coach_clock dscc
LEFT JOIN
drive_school_car car ON dscc.car_id = car.id AND car.deleted = 0
LEFT JOIN
drive_school_train dst ON dst.coach_clock_id = dscc.id AND dst.deleted = 0
WHERE
dscc.deleted = 0
AND dscc.subject IN (2, 3)
<if test="entity.userId != null">
AND dscc.user_id = #{entity.userId}
</if>
<if test="entity.carNo != null and entity.carNo != '' ">
AND dscc.car_no = #{entity.carNo}
</if>
<if test="entity.subject != null">
AND dscc.subject = #{entity.subject}
</if>
<if test="entity.courseType != null and entity.courseType != '' ">
AND car.course_type = #{entity.courseType}
</if>
<if test="entity.trainDayStartTime != null and entity.trainDayStartTime != '' ">
AND dscc.train_day &gt;= #{entity.trainDayStartTime}
</if>
<if test="entity.trainDayEndTime != null and entity.trainDayEndTime != '' ">
AND dscc.train_day &lt;= #{entity.trainDayEndTime}
</if>
GROUP BY
dscc.car_no, dscc.car_id, dscc.user_name
ORDER BY
totalCount DESC
</select>-->
<!-- <select id="trainClockByCar" resultType="cn.iocoder.yudao.module.train.vo.TrainCarCountVO">
SELECT
dscc.user_name,
dscc.car_id,
dscc.car_no,
COUNT(*) AS totalCount,
SUM(CASE WHEN dscc.subject = 2 THEN 1 ELSE 0 END) AS subject2Count,
SUM(CASE WHEN dscc.subject = 3 THEN 1 ELSE 0 END) AS subject3Count,
SUM(dscc.train_time) AS trainTimeCount,
COUNT(dst.coach_clock_id) AS studentCount,
SUM(CASE WHEN dscc.subject = 2 THEN dscc.train_time ELSE 0 END) AS subject2TrainTime,
SUM(CASE WHEN dscc.subject = 3 THEN dscc.train_time ELSE 0 END) AS subject3TrainTime
FROM
drive_school_coach_clock dscc
LEFT JOIN
drive_school_car car ON dscc.car_id = car.id AND car.deleted = 0
LEFT JOIN
drive_school_train dst ON dst.coach_clock_id = dscc.id AND dst.deleted = 0
WHERE
dscc.deleted = 0
AND dscc.subject IN (2, 3)
<if test="entity.userId != null">
AND dscc.user_id = #{entity.userId}
</if>
<if test="entity.carNo != null and entity.carNo != '' ">
AND dscc.car_no = #{entity.carNo}
</if>
<if test="entity.subject != null">
AND dscc.subject = #{entity.subject}
</if>
<if test="entity.courseType != null and entity.courseType != '' ">
AND car.course_type = #{entity.courseType}
</if>
<if test="entity.trainDayStartTime != null and entity.trainDayStartTime != '' ">
AND dscc.train_day &gt;= #{entity.trainDayStartTime}
</if>
<if test="entity.trainDayEndTime != null and entity.trainDayEndTime != '' ">
AND dscc.train_day &lt;= #{entity.trainDayEndTime}
</if>
GROUP BY
dscc.car_no, dscc.car_id, dscc.user_name
ORDER BY
totalCount DESC
</select>-->
<select id="selectCoachClockIdsByCarId" resultType="cn.iocoder.yudao.module.train.entity.DriveSchoolCoachClock">
SELECT
@ -183,7 +183,7 @@
</select>
<select id="noClockInRemind" resultType="cn.iocoder.yudao.module.train.entity.DriveSchoolCoachClock">
SELECT user_id,tenant_id
SELECT user_id, tenant_id
FROM drive_school_coach_clock
WHERE
DATE (create_time) = CURDATE()
@ -195,18 +195,18 @@
<select id="coachClockExport" resultType="cn.iocoder.yudao.module.train.vo.CoachClockExportVO">
SELECT
id,
user_name AS coachName,
user_mobile AS coachPhone,
car_no,
subject,
addr,
train_day,
start_time,
start_remark,
end_time,
end_remark,
train_time,
id,
user_name AS coachName,
user_mobile AS coachPhone,
car_no,
subject,
addr,
train_day,
start_time,
start_remark,
end_time,
end_remark,
train_time,
start_images,
end_images
FROM drive_school_coach_clock
@ -291,4 +291,49 @@
AND train_day &lt;= #{entity.trainEndTimeStr}
</if>
</select>
<select id="getTodayTrainSituation" resultType="cn.iocoder.yudao.module.train.vo.CloakAndTrainCountVO">
SELECT COALESCE(COUNT(*), 0) AS totalCarCount,
COALESCE(SUM(CASE WHEN subject = 2 THEN 1 ELSE 0 END), 0) AS subject2CarCount,
COALESCE(SUM(CASE WHEN subject = 3 THEN 1 ELSE 0 END), 0) AS subject3CarCount
FROM drive_school_coach_clock
WHERE train_day = CURDATE()
AND DATE (start_time) = CURDATE()
AND end_time IS NULL
AND deleted = 0
</select>
<select id="getTodayCarTrainSituation" resultType="cn.iocoder.yudao.module.train.vo.DriveSchoolCoachClockVO">
SELECT
dscc.*,
COALESCE(COUNT(dst.coach_clock_id), 0) AS studentTotal
FROM
drive_school_coach_clock dscc
LEFT JOIN
drive_school_train dst ON dst.coach_clock_id = dscc.id AND dst.deleted = 0
WHERE
dscc.train_day = CURDATE()
AND DATE(dscc.start_time) = CURDATE()
AND dscc.end_time IS NULL
AND dscc.deleted = 0
<if test="entity.subject != null and entity.subject != '' ">
AND subject = #{entity.subject}
</if>
GROUP BY
dscc.id
</select>
<!--<select id="getTodayCarTrainSituation" resultType="cn.iocoder.yudao.module.train.entity.DriveSchoolCoachClock">
SELECT *
FROM drive_school_coach_clock
WHERE train_day = CURDATE()
AND DATE (start_time) = CURDATE()
AND end_time IS NULL
AND deleted = 0
<if test="entity.subject != null and entity.subject != '' ">
AND subject = #{entity.subject}
</if>
</select>-->
</mapper>

View File

@ -208,4 +208,42 @@
</if>
ORDER BY train_day DESC
</select>
<select id="getTodayTrainSituation" resultType="cn.iocoder.yudao.module.train.vo.CloakAndTrainCountVO">
SELECT
COALESCE ( COUNT(*), 0 ) AS totalStudentCount,
COALESCE ( SUM( CASE WHEN SUBJECT = 2 THEN 1 ELSE 0 END ), 0 ) AS subject2StudentCount,
COALESCE ( SUM( CASE WHEN SUBJECT = 3 THEN 1 ELSE 0 END ), 0 ) AS subject3StudentCount
FROM
drive_school_train
WHERE
DATE ( create_time ) = CURDATE()
AND DATE ( start_time ) = CURDATE()
AND end_time IS NULL
AND user_id IS NOT NULL
AND deleted = 0
<if test="entity.userName != null and entity.userName != '' ">
AND user_name like concat('%',#{entity.userName},'%')
</if>
<if test="entity.subject != null">
AND subject = #{entity.subject}
</if>
</select>
<select id="getTodayStudentTrainSituation" resultType="cn.iocoder.yudao.module.train.entity.Train">
SELECT *
FROM drive_school_train
WHERE
DATE (create_time) = CURDATE()
AND DATE (start_time) = CURDATE()
AND end_time IS NULL
AND user_id IS NOT NULL
AND deleted = 0
<if test="entity.userName != null and entity.userName != ''">
AND user_name like concat('%',#{entity.userName},'%')
</if>
<if test="entity.subject != null">
AND subject = #{entity.subject}
</if>
</select>
</mapper>