From f881f603f02da015e7c01fbce6dd864aff7eef63 Mon Sep 17 00:00:00 2001
From: Vinjor <vinjorm@gmail.com>
Date: Tue, 25 Feb 2025 15:56:00 +0800
Subject: [PATCH] 1

---
 .../service/impl/DataViewServiceImpl.java     |  34 +++-
 .../impl/DlDriveSchoolCoachServiceImpl.java   | 164 +++++++++++++++++-
 .../yudao/module/base/vo/CoachInfoVO.java     |  13 +-
 .../course/entity/SchoolCommission.java       |   9 +
 .../course/mapper/SchoolCommissionMapper.java |   5 +-
 .../mapper/SchoolCourseOrderMapper.java       |  11 ++
 .../module/jx/domain/DriveSchoolCar.java      |   8 +-
 .../jx/service/IDriveSchoolCarService.java    |   2 +
 .../impl/DriveSchoolCarServiceImpl.java       |  11 ++
 .../mapper/course/SchoolCommissionMapper.xml  |  18 ++
 .../mapper/course/SchoolCourseOrderMapper.xml |  23 +++
 11 files changed, 279 insertions(+), 19 deletions(-)

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 c2aca4f2..dd8cfdde 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
@@ -11,6 +11,9 @@ 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.entity.SchoolCommission;
+import cn.iocoder.yudao.module.course.mapper.SchoolCommissionMapper;
+import cn.iocoder.yudao.module.course.mapper.SchoolCourseOrderMapper;
 import cn.iocoder.yudao.module.course.service.ProcessService;
 import cn.iocoder.yudao.module.exam.mapper.ExamBatchItemMapper;
 import cn.iocoder.yudao.module.exam.service.ExamBatchItemService;
@@ -46,6 +49,10 @@ public class DataViewServiceImpl implements DataViewService {
     private ExamBatchItemService examBatchItemService;
     @Autowired
     private ExamBatchItemMapper examBatchItemMapper;
+    @Autowired
+    private SchoolCourseOrderMapper courseOrderMapper;
+    @Autowired
+    private SchoolCommissionMapper commissionMapper;
 
     /**
      * 查询学员详情
@@ -156,10 +163,20 @@ public class DataViewServiceImpl implements DataViewService {
             studentInfoMap.put("schoolAmount",schoolAmount);
             studentInfoMap.put("schoolRate",0!=schoolRate?(Double.parseDouble(df.format(schoolRate))*100):0);
             rtnObj.setStudentInfo(studentInfoMap);
-            /*4.财务情况--TODO*/
+            /*4.财务情况--*/
+            //应收
+            Double showedReceive = courseOrderMapper.selectByCoachUserId(coachId,startTimeStr,endTimeStr);
+            //应付
+            List<SchoolCommission> schoolCommissionList = commissionMapper.selectByCoachId(coachId,startTimeStr,endTimeStr);
+            double showedPay =0.0;
+            for (SchoolCommission item:schoolCommissionList){
+                if(null!=item.getCommissionAmount()){
+                    showedPay =showedPay+item.getCommissionAmount().doubleValue();
+                }
+            }
             Map<String,Object> moneyInfoMap = new HashMap<>();
-            moneyInfoMap.put("inAmount",0);
-            moneyInfoMap.put("outAmount",0);
+            moneyInfoMap.put("inAmount",null==showedReceive?0:showedReceive);
+            moneyInfoMap.put("outAmount",showedPay);
             rtnObj.setMoneyInfo(moneyInfoMap);
         }else if("coach".equals(type)){
             //教练查询
@@ -172,9 +189,16 @@ public class DataViewServiceImpl implements DataViewService {
             studentInfoMap.put("overNum",overNum);
             studentInfoMap.put("noOverNum",noOverNum);
             rtnObj.setStudentInfo(studentInfoMap);
-            /*4.财务情况-查教练自己应得的提成-TODO*/
+            /*4.财务情况-查教练自己应得的提成-*/
+            List<SchoolCommission> schoolCommissionList = commissionMapper.selectByCoachId(coachId,startTimeStr,endTimeStr);
+            double showedPay =0.0;
+            for (SchoolCommission item:schoolCommissionList){
+                if(null!=item.getCommissionAmount()){
+                    showedPay =showedPay+item.getCommissionAmount().doubleValue();
+                }
+            }
             Map<String,Object> moneyInfoMap = new HashMap<>();
-            moneyInfoMap.put("money",0);
+            moneyInfoMap.put("money",showedPay);
             rtnObj.setMoneyInfo(moneyInfoMap);
         }
         /*2.训练情况*/
diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCoachServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCoachServiceImpl.java
index 8fc6662e..65627d0a 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCoachServiceImpl.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCoachServiceImpl.java
@@ -1,12 +1,21 @@
 package cn.iocoder.yudao.module.base.service.impl;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.iocoder.yudao.common.SchoolRoleEnum;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCoach;
 import cn.iocoder.yudao.module.base.mapper.DlDriveSchoolCoachMapper;
+import cn.iocoder.yudao.module.base.mapper.DlDriveSchoolStudentMapper;
 import cn.iocoder.yudao.module.base.service.DlDriveSchoolCoachService;
 import cn.iocoder.yudao.module.base.vo.*;
+import cn.iocoder.yudao.module.course.entity.SchoolCommission;
+import cn.iocoder.yudao.module.course.mapper.SchoolCommissionMapper;
+import cn.iocoder.yudao.module.exam.mapper.ExamBatchItemMapper;
+import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO;
+import cn.iocoder.yudao.module.jx.domain.DriveSchoolCar;
+import cn.iocoder.yudao.module.jx.service.IDriveSchoolCarService;
 import cn.iocoder.yudao.module.jx.utils.StringUtils;
 import cn.iocoder.yudao.module.staff.entity.CompanyStaff;
 import cn.iocoder.yudao.module.staff.service.CompanyStaffService;
@@ -15,19 +24,22 @@ import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import cn.iocoder.yudao.module.system.api.user.dto.UserDTO;
+import cn.iocoder.yudao.module.train.mapper.TrainMapper;
+import cn.iocoder.yudao.module.train.vo.TrainVO;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.text.DecimalFormat;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 
 import static cn.iocoder.yudao.common.BaseConstants.PASSWORD_DEFAULT;
 import static cn.iocoder.yudao.framework.common.config.CommonStr.USER_TYPE_STAFF;
@@ -53,6 +65,17 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl<DlDriveSchoolCoac
     private PermissionApi permissionApi;
     @Resource
     private UniqueCodeService uniqueCodeService;
+    @Autowired
+    @Lazy
+    private IDriveSchoolCarService schoolCarService;
+    @Autowired
+    private DlDriveSchoolStudentMapper studentMapper;
+    @Autowired
+    private ExamBatchItemMapper examBatchItemMapper;
+    @Autowired
+    private TrainMapper trainMapper;
+    @Autowired
+    private SchoolCommissionMapper commissionMapper;
 
 
     /**
@@ -242,11 +265,142 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl<DlDriveSchoolCoac
      **/
     @Override
     public CoachInfoVO getCoachById(String id) {
+        DecimalFormat df = new DecimalFormat("#.00");
         CoachInfoVO result = new CoachInfoVO();
+        /*1.教练信息*/
         DlDriveSchoolCoach coach = getById(id);
-        //教练信息
         result.setCoachInfo(coach);
-
+        /*2.车辆信息*/
+        DriveSchoolCar schoolCar = new DriveSchoolCar();
+        if(null!=coach.getUserId()){
+            schoolCar = schoolCarService.selectByCoachId(coach.getUserId());
+            if(null!=schoolCar.getCarRegisterDate()){
+                Long carOld = DateUtil.betweenYear(schoolCar.getCarRegisterDate(),new Date(),true);
+                schoolCar.setCarOld(carOld);
+            }
+        }
+        result.setCar(schoolCar);
+        /*3.统计教练的学生基本信息*/
+        //毕业情况
+        List<DlDriveSchoolStudentVO> studentVOList = studentMapper.selectStudentListCoach(coach.getUserId(),null,null);
+        int overNum = (int) studentVOList.stream().filter(item -> null != item.getGradTime()).count();
+        int noOverNum = studentVOList.size()-overNum;
+        Map<String,Object> studentInfoMap = new HashMap<>();
+        studentInfoMap.put("overNum",overNum);
+        studentInfoMap.put("noOverNum",noOverNum);
+        //考试情况
+        List<ExamBatchItemVO> examBatchItemVOList = examBatchItemMapper.selectByCoachId(coach.getUserId(),null,null);
+        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;
+        }
+        studentInfoMap.put("subject2All",subject2Num);
+        studentInfoMap.put("subject2Pass",subject2PassNum);
+        studentInfoMap.put("subject2Rate",0!=subject2Rate?(Double.parseDouble(df.format(subject2Rate))*100):0);
+        studentInfoMap.put("subject3All",subject3Num);
+        studentInfoMap.put("subject3Pass",subject3PassNum);
+        studentInfoMap.put("subject3Rate",0!=subject3Rate?(Double.parseDouble(df.format(subject3Rate))*100):0);
+        //招生情况
+        List<DlDriveSchoolStudentVO> studentList = studentMapper.selectStudentList(coach.getUserId(), null, null);
+        int coachNum=0;
+        double coachAmount=0;
+        for (DlDriveSchoolStudentVO item:studentList){
+            if("02".equals(item.getSource())){
+                //教练自招
+                coachNum++;
+                coachAmount = coachAmount+item.getPriceAmount();
+            }
+        }
+        studentInfoMap.put("coachNum",coachNum);
+        studentInfoMap.put("coachAmount",coachAmount);
+        //训练情况
+        List<TrainVO> trainList = trainMapper.selectTrainByCondition(coach.getUserId(),null,null);
+        Set<Long> allUserSet = new HashSet<>();
+        Double trainTime = 0.0;
+        for (TrainVO item:trainList){
+            allUserSet.add(item.getUserId());
+            if(null!=item.getTrainTime()){
+                trainTime =trainTime+item.getTrainTime();
+            }
+        }
+        studentInfoMap.put("trainUserNum",allUserSet.size());
+        studentInfoMap.put("trainTime",trainTime);
+        result.setStudentInfoMap(studentInfoMap);
+        /*4.财务情况*/
+        List<SchoolCommission> commissionList = commissionMapper.selectByCoachId(coach.getUserId(),null,null);
+        //科目2当月应付
+        Double subject2MonthShowed = 0.0;
+        //科目2累计已付
+        Double subject2Payed = 0.0;
+        //科目2累计应付
+        Double subject2Showed = 0.0;
+        //科目3当月应付
+        Double subject3MonthShowed = 0.0;
+        //科目3累计已付
+        Double subject3Payed = 0.0;
+        //科目3累计应付
+        Double subject3Showed = 0.0;
+        //当月时间范围
+        // 获取当前月份的开始时间和结束时间
+        DateTime startOfMonth = DateUtil.beginOfMonth(DateUtil.date());
+        DateTime endOfMonth = DateUtil.endOfMonth(DateUtil.date());
+        for (SchoolCommission item:commissionList){
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            String localDateTimeNowStr = item.getCreateTime().format(formatter);
+            DateTime createTime = DateUtil.parse(localDateTimeNowStr);
+            if("2".equals(item.getSubject())){
+               //科目二
+                subject2Showed=subject2Showed+item.getCommissionAmount().doubleValue();
+                if(null!=item.getIfPay() && item.getIfPay()){
+                    subject2Payed=subject2Payed+item.getCommissionAmount().doubleValue();
+                }
+                if(createTime.isAfterOrEquals(startOfMonth) && createTime.isBeforeOrEquals(endOfMonth)){
+                    //在当月内
+                    subject2MonthShowed = subject2MonthShowed+item.getCommissionAmount().doubleValue();
+                }
+            }else if("3".equals(item.getSubject())){
+                //科目三
+                subject3Showed=subject3Showed+item.getCommissionAmount().doubleValue();
+                if(null!=item.getIfPay() && item.getIfPay()){
+                    subject3Payed=subject3Payed+item.getCommissionAmount().doubleValue();
+                }
+                if(createTime.isAfterOrEquals(startOfMonth) && createTime.isBeforeOrEquals(endOfMonth)){
+                    //在当月内
+                    subject3MonthShowed = subject3MonthShowed+item.getCommissionAmount().doubleValue();
+                }
+            }
+        }
+        Map<String,Object> financeMap = new HashMap<>();
+        financeMap.put("subject2MonthShowed",subject2MonthShowed);
+        financeMap.put("subject2Showed",subject2Showed);
+        financeMap.put("subject2Payed",subject2Payed);
+        financeMap.put("subject3MonthShowed",subject3MonthShowed);
+        financeMap.put("subject3Showed",subject3Showed);
+        financeMap.put("subject3Payed",subject3Payed);
+        result.setFinanceMap(financeMap);
         return result;
     }
 
diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/CoachInfoVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/CoachInfoVO.java
index f8a68d61..9448a961 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/CoachInfoVO.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/CoachInfoVO.java
@@ -1,17 +1,20 @@
 package cn.iocoder.yudao.module.base.vo;
 
 import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCoach;
-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 cn.iocoder.yudao.module.jx.domain.DriveSchoolCar;
 import lombok.Data;
 
-import java.util.List;
+import java.util.Map;
 
 @Data
 public class CoachInfoVO {
     /**教练基本信息*/
     private DlDriveSchoolCoach coachInfo;
+    /**教练车辆信息*/
+    private DriveSchoolCar car;
+    /**教练学生信息*/
+    private Map<String,Object> studentInfoMap;
+    /**财务情况*/
+    private Map<String,Object> financeMap;
 
 }
diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolCommission.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolCommission.java
index 38d9ade7..8501ef48 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolCommission.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolCommission.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 提成记录 DO
@@ -67,5 +68,13 @@ public class SchoolCommission extends TenantBaseDO {
      * 审核人姓名
      */
     private String checkName;
+    /**
+     * 是否已付
+     */
+    private Boolean ifPay;
+    /**
+     * 是否已付
+     */
+    private Date payTime;
 
 }
\ No newline at end of file
diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolCommissionMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolCommissionMapper.java
index 5cfa21ea..d56b2f4a 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolCommissionMapper.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolCommissionMapper.java
@@ -1,7 +1,6 @@
 package cn.iocoder.yudao.module.course.mapper;
 
 import cn.iocoder.yudao.module.course.entity.SchoolCommission;
-import cn.iocoder.yudao.module.course.vo.ProcessVO;
 import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -9,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
  *
@@ -28,5 +29,7 @@ public interface SchoolCommissionMapper extends BaseMapper<SchoolCommission> {
      **/
     IPage<SchoolCommissionVO> queryPage(@Param("entity") SchoolCommissionVO entity, Page<SchoolCommissionVO> page);
 
+    List<SchoolCommission> 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/course/mapper/SchoolCourseOrderMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolCourseOrderMapper.java
index 065b35cb..3349d9ad 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolCourseOrderMapper.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolCourseOrderMapper.java
@@ -27,4 +27,15 @@ public interface SchoolCourseOrderMapper extends BaseMapper<SchoolCourseOrder> {
      * @date 10:11 2025/2/25
      **/
     IPage<SchoolCourseOrderVO> queryPage(@Param("entity")SchoolCourseOrderVO entity, Page<SchoolCommissionVO> page);
+
+    /**
+     *
+     * @author vinjor-M
+     * @date 14:38 2025/2/25
+     * @param coachId 教练userId
+     * @param startTime 开始时间
+     * @param endTime 结束时间
+     * @return java.util.List<cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO>
+    **/
+    Double selectByCoachUserId(@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/jx/domain/DriveSchoolCar.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/domain/DriveSchoolCar.java
index 04a07d4e..23f9cbd3 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/domain/DriveSchoolCar.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/domain/DriveSchoolCar.java
@@ -2,11 +2,9 @@ package cn.iocoder.yudao.module.jx.domain;
 
 import cn.iocoder.yudao.annotation.Excel;
 import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
-import cn.iocoder.yudao.module.jx.core.page.TenantBaDO;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -116,4 +114,8 @@ public class DriveSchoolCar extends TenantBaseDO
     private BigDecimal compulsoryIns;
     /** 商业险 */
     private BigDecimal busiIns;
+
+    /** 车龄 */
+    @TableField(exist = false)
+    private Long carOld;
 }
diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/IDriveSchoolCarService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/IDriveSchoolCarService.java
index b601d6e8..55bfb22a 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/IDriveSchoolCarService.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/IDriveSchoolCarService.java
@@ -65,4 +65,6 @@ public interface IDriveSchoolCarService extends IService<DriveSchoolCar>
     public int deleteDriveSchoolCarById(Long id);
 
     String importCars(List<DriveSchoolCar> carsList, boolean updateSupport, String operName) throws Exception;
+
+    DriveSchoolCar selectByCoachId(Long coachId);
 }
diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/impl/DriveSchoolCarServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/impl/DriveSchoolCarServiceImpl.java
index cfbd5362..46646116 100644
--- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/impl/DriveSchoolCarServiceImpl.java
+++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/impl/DriveSchoolCarServiceImpl.java
@@ -1,9 +1,11 @@
 package cn.iocoder.yudao.module.jx.service.impl;
 
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 import cn.iocoder.yudao.module.base.service.DlDriveSchoolCoachService;
 import cn.iocoder.yudao.module.jx.domain.DriveSchoolCar;
 import cn.iocoder.yudao.module.jx.mapper.DriveSchoolCarMapper;
 import cn.iocoder.yudao.module.jx.service.IDriveSchoolCarService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -140,4 +142,13 @@ public class DriveSchoolCarServiceImpl extends ServiceImpl<DriveSchoolCarMapper,
         }
         return "数据已全部导入成功!";
     }
+
+    @Override
+    public DriveSchoolCar selectByCoachId(Long coachId) {
+        LambdaQueryWrapper<DriveSchoolCar> queryWrapper = new LambdaQueryWrapper<DriveSchoolCar>()
+                .eq(DriveSchoolCar::getUserId,coachId)
+                .orderByDesc(BaseDO::getCreateTime);
+        List<DriveSchoolCar> list = this.list(queryWrapper);
+        return list.isEmpty()?null:list.get(0);
+    }
 }
diff --git a/dl-module-jx/src/main/resources/mapper/course/SchoolCommissionMapper.xml b/dl-module-jx/src/main/resources/mapper/course/SchoolCommissionMapper.xml
index e41ec9ef..1ec6ce88 100644
--- a/dl-module-jx/src/main/resources/mapper/course/SchoolCommissionMapper.xml
+++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCommissionMapper.xml
@@ -26,4 +26,22 @@
         </where>
 order by main.create_time desc
     </select>
+    <select id="selectByCoachId" resultType="cn.iocoder.yudao.module.course.entity.SchoolCommission">
+        SELECT
+            dsc.*
+        FROM
+            drive_school_commission dsc
+        WHERE
+            dsc.deleted = 0
+        <if test="coachId != null and coachId != ''">
+            AND dsc.coach_user_id = #{coachId}
+        </if>
+        <if test="startTime!=null and startTime!=''">
+            AND dsc.create_time &gt;= #{startTime}
+        </if>
+        <if test="endTime!=null and endTime!=''">
+            AND dsc.create_time &lt;= #{endTime}
+        </if>
+        ORDER BY dsc.create_time DESC
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml
index 8816c4ae..bc56c24e 100644
--- a/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml
+++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml
@@ -20,4 +20,27 @@
             <if test="entity.userName != null and entity.userName != ''"> and main.user_name like concat('%', #{entity.userName}, '%')</if>
         </where>
     </select>
+    <select id="selectByCoachUserId" resultType="java.lang.Double">
+        SELECT
+        SUM(dsco.reserve_money+dsco.rest_money )
+        FROM
+        drive_school_course_order dsco
+        <if test="coachId != null and coachId != ''">
+            LEFT JOIN drive_school_student dss ON dsco.user_id = dss.user_id
+            AND dss.deleted = 0
+        </if>
+        WHERE
+        dsco.deleted = 0
+        AND dsco.payment_status IN ( '2', '3', '4', '5' )
+        <if test="coachId != null and coachId != ''">
+            AND dss.source_user_id = #{coachId}
+        </if>
+        <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>
+
 </mapper>
\ No newline at end of file