From 59811ea2039aa1f2dcc9ec2f5b68b429e32ecd0e Mon Sep 17 00:00:00 2001 From: Vinjor Date: Wed, 19 Feb 2025 09:27:44 +0800 Subject: [PATCH] 1 --- .../controller/admin/DataViewController.java | 22 +++ .../admin/DlDriveSchoolCoachController.java | 14 ++ .../mapper/DlDriveSchoolStudentMapper.java | 20 +++ .../module/base/service/DataViewService.java | 13 +- .../service/impl/DataViewServiceImpl.java | 162 +++++++++++++++++- .../base/vo/DlDriveSchoolStudentVO.java | 2 + .../yudao/module/base/vo/IndexDataVO.java | 22 +++ .../exam/mapper/ExamBatchItemMapper.java | 2 + .../module/train/mapper/TrainMapper.java | 4 +- .../yudao/module/train/vo/TrainVO.java | 4 + .../base/DlDriveSchoolStudentMapper.xml | 42 +++++ .../mapper/exam/ExamBatchItemMapper.xml | 20 +++ .../resources/mapper/train/TrainMapper.xml | 21 ++- 13 files changed, 344 insertions(+), 4 deletions(-) create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/IndexDataVO.java diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DataViewController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DataViewController.java index 315e9e09..2c4a2798 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DataViewController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DataViewController.java @@ -11,6 +11,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.Date; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 数据查询统一方法") @@ -35,4 +37,24 @@ public class DataViewController { return success(dataViewService.selectStudentInfo(id,coachId)); } + /** + * 首页数据统计查询接口 -- + * @author vinjor-M + * @date 14:12 2025/2/14 + * @param type 查询类型(coach-教练查询|admin-管理员查询) + * @param timeType 时间查询类型(all-全部|day-当日|month-当月|more-自定义) + * @param coachId 教练id + * @param startTime 查询时间范围--开始 + * @param endTime 查询时间范围--结束 + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/indexData") + @Operation(summary = "首页数据统计查询接口") + public CommonResult selectIndexInfo(@RequestParam(value = "type") String type, + @RequestParam(value = "timeType") String timeType, + @RequestParam(value = "coachId",required = false) Long coachId, + @RequestParam(value = "startTime",required = false) String startTime, + @RequestParam(value = "endTime",required = false) String endTime) { + return success(dataViewService.selectIndexInfo(type,timeType,coachId,startTime,endTime)); + } } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCoachController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCoachController.java index c4047e05..28a78827 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCoachController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCoachController.java @@ -126,5 +126,19 @@ public class DlDriveSchoolCoachController { return success(dlDriveSchoolCoachService.getCoachById(id)); } + /** + * + * @author vinjor-M + * @date 15:41 2025/2/18 + * @param userId userId + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/getCoachByUserId") + @Operation(summary = "根据userId获得驾校教练信息") + @Parameter(name = "userId", description = "用户id", required = true, example = "1024") + public CommonResult getCoachByUserId(@RequestParam("userId") Long userId) { + return success(dlDriveSchoolCoachService.getDlDriveSchoolCoachByUserId(userId)); + } + } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java index 904a5738..0c8b320d 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java @@ -57,4 +57,24 @@ public interface DlDriveSchoolStudentMapper extends BaseMapper **/ IPage selectByCoachId(@Param("entity") DlDriveSchoolStudentVO pageReqVO, Page page); + + /** + * 查学生列表---驾校层面查询 + * @author vinjor-M + * @date 15:13 2025/2/14 + * @param coachId 教练ID + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return java.util.List + **/ + List selectStudentList(@Param("coachId")Long coachId, @Param("startTime") String startTime, @Param("endTime")String endTime); + + /** + * 教练层面查询自己的学生列表 + * @author vinjor-M + * @date 15:24 2025/2/17 + **/ + List selectStudentListCoach(@Param("coachId")Long coachId, @Param("startTime") String startTime, @Param("endTime")String endTime); + + } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DataViewService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DataViewService.java index b247eb28..bffdc960 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DataViewService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DataViewService.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.base.service; +import cn.iocoder.yudao.module.base.vo.IndexDataVO; import cn.iocoder.yudao.module.base.vo.StudentInfoVO; /** @@ -16,5 +17,15 @@ public interface DataViewService { * @return cn.iocoder.yudao.module.base.vo.StudentInfoVO **/ StudentInfoVO selectStudentInfo(Long id,Long coachId); - + /** + * 首页数据统计查询接口 -- + * @author vinjor-M + * @date 14:12 2025/2/14 + * @param type 查询类型(coach-教练查询|admin-管理员查询) + * @param timeType 时间查询类型(all-全部|day-当日|month-当月|more-自定义) + * @param coachId 教练id + * @param startTime 查询时间范围--开始 + * @param endTime 查询时间范围--结束 + **/ + IndexDataVO selectIndexInfo(String type, String timeType, Long coachId, String startTime, String endTime); } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DataViewServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DataViewServiceImpl.java index 54d50413..5ee5458c 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DataViewServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DataViewServiceImpl.java @@ -1,22 +1,30 @@ package cn.iocoder.yudao.module.base.service.impl; +import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; +import cn.iocoder.yudao.module.base.mapper.DlDriveSchoolStudentMapper; 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.DlDriveSchoolStudentVO; +import cn.iocoder.yudao.module.base.vo.IndexDataVO; 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.mapper.ExamBatchItemMapper; import cn.iocoder.yudao.module.exam.service.ExamBatchItemService; import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO; 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.TrainVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import java.util.List; +import java.text.DecimalFormat; +import java.util.*; @Service @Validated @@ -24,13 +32,19 @@ public class DataViewServiceImpl implements DataViewService { @Autowired private DlDriveSchoolStudentService studentService; @Autowired + private DlDriveSchoolStudentMapper studentMapper; + @Autowired private DlDriveSchoolCoachService coachService; @Autowired private ProcessService processService; @Autowired private TrainService trainService; @Autowired + private TrainMapper trainMapper; + @Autowired private ExamBatchItemService examBatchItemService; + @Autowired + private ExamBatchItemMapper examBatchItemMapper; /** * 查询学员详情 @@ -68,4 +82,150 @@ public class DataViewServiceImpl implements DataViewService { studentInfoVO.setExamList(examList); return studentInfoVO; } + + /** + * 首页数据统计查询接口 -- + * + * @param type 查询类型(coach-教练查询|admin-管理员查询) + * @param timeType 时间查询类型(all-全部|day-当日|month-当月|more-自定义) + * @param coachId 教练id + * @param startTime 查询时间范围--开始 + * @param endTime 查询时间范围--结束 + * @author vinjor-M + * @date 14:12 2025/2/14 + **/ + @Override + public IndexDataVO selectIndexInfo(String type, String timeType, Long coachId, String startTime, String endTime) { + IndexDataVO rtnObj = new IndexDataVO(); + //默认查全部数据 + String startTimeStr = ""; + String endTimeStr = ""; + if("more".equals(timeType)){ + startTimeStr = startTime+" 00:00:01"; + 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"; + } + if("admin".equals(type)){ + //管理员查询 + /*1.招生情况*/ + List studentList = studentMapper.selectStudentList(coachId, startTimeStr, endTimeStr); + Map studentInfoMap = new HashMap<>(); + int coachNum=0; + double coachAmount=0; + int schoolNum=0; + double schoolAmount=0; + for (DlDriveSchoolStudentVO item:studentList){ + if("02".equals(item.getSource())){ + //教练自招 + coachNum++; + coachAmount = coachAmount+item.getPriceAmount(); + }else{ + //驾校统招 + schoolNum++; + schoolAmount = schoolAmount+item.getPriceAmount(); + } + } + studentInfoMap.put("coachNum",coachNum); + studentInfoMap.put("coachAmount",coachAmount); + studentInfoMap.put("schoolNum",schoolNum); + studentInfoMap.put("schoolAmount",schoolAmount); + rtnObj.setStudentInfo(studentInfoMap); + /*4.财务情况--TODO*/ + Map moneyInfoMap = new HashMap<>(); + moneyInfoMap.put("inAmount",0); + moneyInfoMap.put("outAmount",0); + rtnObj.setMoneyInfo(moneyInfoMap); + }else if("coach".equals(type)){ + //教练查询 + /*1.学员情况*/ + List studentVOList = studentMapper.selectStudentListCoach(coachId,startTimeStr,endTimeStr); + int overNum = (int) studentVOList.stream().filter(item -> null != item.getGradTime()).count(); + int noOverNum = studentVOList.size()-overNum; + Map studentInfoMap = new HashMap<>(); + studentInfoMap.put("allNum",studentVOList.size()); + studentInfoMap.put("overNum",overNum); + studentInfoMap.put("noOverNum",noOverNum); + rtnObj.setStudentInfo(studentInfoMap); + /*4.财务情况-查教练自己应得的提成-TODO*/ + Map moneyInfoMap = new HashMap<>(); + moneyInfoMap.put("money",0); + rtnObj.setMoneyInfo(moneyInfoMap); + } + /*2.训练情况*/ + List allTrainList = trainMapper.selectTrainByCondition(coachId,startTimeStr,endTimeStr); + //所有车辆set,目的是去重 + Set allCarSet = new HashSet<>(); + Set subject2CarSet = new HashSet<>(); + Set subject3CarSet = new HashSet<>(); + Set allUserSet = new HashSet<>(); + Set subject2UserSet = new HashSet<>(); + Set subject3UserSet = new HashSet<>(); + for (TrainVO trainVO:allTrainList){ + if(2==trainVO.getSubject()){ + subject2CarSet.add(trainVO.getCarNo()); + allCarSet.add(trainVO.getCarNo()); + subject2UserSet.add(trainVO.getUserId()); + allUserSet.add(trainVO.getUserId()); + }else if(3==trainVO.getSubject()){ + subject3CarSet.add(trainVO.getCarNo()); + allCarSet.add(trainVO.getCarNo()); + subject3UserSet.add(trainVO.getUserId()); + allUserSet.add(trainVO.getUserId()); + } + } + Map trainInfoMap = new HashMap<>(); + trainInfoMap.put("allCarNum",allCarSet.size()); + trainInfoMap.put("subject2CarNum",subject2CarSet.size()); + trainInfoMap.put("subject3CarNum",subject3CarSet.size()); + trainInfoMap.put("allUserNum",allUserSet.size()); + trainInfoMap.put("subject2UserNum",subject2UserSet.size()); + trainInfoMap.put("subject3UserNum",subject3UserSet.size()); + rtnObj.setTrainInfo(trainInfoMap); + /*3.考试情况*/ + List examBatchItemVOList = examBatchItemMapper.selectByCoachId(coachId,startTimeStr,endTimeStr); + Double subject2Num = 0.0; + Double subject3Num = 0.0; + Double subject2PassNum = 0.0; + Double subject3PassNum = 0.0; + for (ExamBatchItemVO exam:examBatchItemVOList){ + if(2==exam.getSubject()){ + subject2Num++; + if(null!=exam.getIfPass() && exam.getIfPass()){ + //考试通过 + subject2PassNum++; + } + }else if(3==exam.getSubject()){ + subject3Num++; + if(null!=exam.getIfPass() && exam.getIfPass()){ + //考试通过 + subject3PassNum++; + } + } + } + double subject2Rate=0; + double subject3Rate=0; + if(0!=subject2Num && 0!=subject2PassNum){ + subject2Rate = subject2PassNum / subject2Num; + } + if(0!=subject3Num && 0!=subject3PassNum){ + subject3Rate = subject3PassNum / subject3Num; + } + DecimalFormat df = new DecimalFormat("#.00"); + Map examInfoMap = new HashMap<>(); + examInfoMap.put("subject2All",subject2Num); + examInfoMap.put("subject2Pass",subject2PassNum); + examInfoMap.put("subject2Rate",0!=subject2Rate?(Double.parseDouble(df.format(subject2Rate))*100):0); + examInfoMap.put("subject3All",subject3Num); + examInfoMap.put("subject3Pass",subject3PassNum); + examInfoMap.put("subject3Rate",0!=subject3Rate?(Double.parseDouble(df.format(subject3Rate))*100):0); + rtnObj.setExamInfo(examInfoMap); + return rtnObj; + } } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java index 647c2d2f..add08774 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java @@ -16,4 +16,6 @@ public class DlDriveSchoolStudentVO extends DlDriveSchoolStudent { private String courseId; /**学习进度*/ private Process process; + /**总金额*/ + private Double priceAmount; } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/IndexDataVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/IndexDataVO.java new file mode 100644 index 00000000..d5ea4091 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/IndexDataVO.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.base.vo; + +import lombok.Data; + +import java.util.Map; + +/** + * app首页数据统计实体 + * @author vinjor-M + * @date 14:15 2025/2/14 +**/ +@Data +public class IndexDataVO { + /**招生情况*/ + private Map studentInfo; + /**训练情况*/ + private Map trainInfo; + /**考试情况*/ + private Map examInfo; + /**财务情况*/ + private Map moneyInfo; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchItemMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchItemMapper.java index 2a839167..80f8fd9f 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchItemMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchItemMapper.java @@ -24,4 +24,6 @@ public interface ExamBatchItemMapper extends BaseMapper { List selectByBatchId(@Param("batchId")String batchId); List selectByUserIdAndCoachId(@Param("userId")Long userId,@Param("coachId")Long coachId); + + List selectByCoachId(@Param("coachId")Long coachId,@Param("startTime")String startTime,@Param("endTime")String endTime); } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/mapper/TrainMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/mapper/TrainMapper.java index ed895f6e..45604819 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/mapper/TrainMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/mapper/TrainMapper.java @@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 练车记录 Mapper * @@ -18,6 +20,6 @@ public interface TrainMapper extends BaseMapper { IPage queryListPage(@Param("entity") TrainVO entity, Page page); - + List selectTrainByCondition(@Param("coachId")Long coachId,@Param("startTime")String startTime,@Param("endTime")String endTime); } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/TrainVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/TrainVO.java index f1ac9327..040fda91 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/TrainVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/TrainVO.java @@ -13,4 +13,8 @@ public class TrainVO extends Train { * 学习课程进度表ID */ private String processId; + /** + * 车牌号 + */ + private String carNo; } diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index 2e46319b..b0168fb6 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -80,4 +80,46 @@ GROUP BY temp.user_id + + \ No newline at end of file diff --git a/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml b/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml index 35359960..c61d9f1e 100644 --- a/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml @@ -52,4 +52,24 @@ ORDER BY dseb.create_time DESC + diff --git a/dl-module-jx/src/main/resources/mapper/train/TrainMapper.xml b/dl-module-jx/src/main/resources/mapper/train/TrainMapper.xml index dd3c0b27..25a35f77 100644 --- a/dl-module-jx/src/main/resources/mapper/train/TrainMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/train/TrainMapper.xml @@ -2,7 +2,7 @@ - + +