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 schoolCommissionList = commissionMapper.selectByCoachId(coachId,startTimeStr,endTimeStr); + double showedPay =0.0; + for (SchoolCommission item:schoolCommissionList){ + if(null!=item.getCommissionAmount()){ + showedPay =showedPay+item.getCommissionAmount().doubleValue(); + } + } Map 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 schoolCommissionList = commissionMapper.selectByCoachId(coachId,startTimeStr,endTimeStr); + double showedPay =0.0; + for (SchoolCommission item:schoolCommissionList){ + if(null!=item.getCommissionAmount()){ + showedPay =showedPay+item.getCommissionAmount().doubleValue(); + } + } Map 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 studentVOList = studentMapper.selectStudentListCoach(coach.getUserId(),null,null); + int overNum = (int) studentVOList.stream().filter(item -> null != item.getGradTime()).count(); + int noOverNum = studentVOList.size()-overNum; + Map studentInfoMap = new HashMap<>(); + studentInfoMap.put("overNum",overNum); + studentInfoMap.put("noOverNum",noOverNum); + //考试情况 + List 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 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 trainList = trainMapper.selectTrainByCondition(coach.getUserId(),null,null); + Set 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 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 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 studentInfoMap; + /**财务情况*/ + private Map 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 { **/ IPage queryPage(@Param("entity") SchoolCommissionVO entity, Page page); + 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/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 { * @date 10:11 2025/2/25 **/ IPage queryPage(@Param("entity")SchoolCourseOrderVO entity, Page page); + + /** + * + * @author vinjor-M + * @date 14:38 2025/2/25 + * @param coachId 教练userId + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return java.util.List + **/ + 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 public int deleteDriveSchoolCarById(Long id); String importCars(List 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 queryWrapper = new LambdaQueryWrapper() + .eq(DriveSchoolCar::getUserId,coachId) + .orderByDesc(BaseDO::getCreateTime); + List 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 @@ order by main.create_time desc + \ 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 @@ and main.user_name like concat('%', #{entity.userName}, '%') + + \ No newline at end of file