diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/constant/SchoolBaseConstants.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/constant/SchoolBaseConstants.java index b09a2a04..4f94d5fd 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/constant/SchoolBaseConstants.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/constant/SchoolBaseConstants.java @@ -165,4 +165,9 @@ public interface SchoolBaseConstants { */ public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_PASS = "驾校教练 %s 的学员 %s ,身份证号:%s,课程:%s,科目 %s 的提成审核已通过,请查看!"; + /** + * 提醒教练未打卡学员信息 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_NOT_ATTENDANCE = "您有 %s 位学员未进行离场打卡 ,学员为: %s ,不要忘记离场打卡哟!"; + } 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 496c8271..bdfd0471 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 @@ -323,6 +323,11 @@ public class DlDriveSchoolCoachController { return success(dlDriveSchoolCoachService.getBusinessRecordExportData(exportVO, page)); } + @GetMapping("/getBusinessRecordExportCount") + public CommonResult getBusinessRecordExportCount(BusinessRecordExportVO exportVO) { + return success(dlDriveSchoolCoachService.getBusinessRecordExportCount(exportVO)); + } + /** * 导出 * @param exportVO diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCoachService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCoachService.java index 7d660879..bec10b9d 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCoachService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCoachService.java @@ -162,6 +162,7 @@ public interface DlDriveSchoolCoachService extends IService * 获取导出数据列表 */ IPage getBusinessRecordExportData(BusinessRecordExportVO reqVO, Page page); + BusinessRecordExportCountVO getBusinessRecordExportCount(BusinessRecordExportVO reqVO); /** * 导出的三种形式 * @param exportVO 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 eba4455d..03e36120 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 @@ -1226,6 +1226,32 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl page = new Page<>(1, Integer.MAX_VALUE); +// reqVO.setIsSign(1); + reqVO.setIfEnd("0"); + + IPage allData = this.getBusinessRecordExportData(reqVO, page); + List records = allData.getRecords(); + + BusinessRecordExportCountVO result = new BusinessRecordExportCountVO(); + + result.setTotalPeople(records.size()); + + BigDecimal totalAmount = records.stream() + .map(record -> record.getReserveMoney() != null ? record.getReserveMoney() : BigDecimal.ZERO) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + BigDecimal totalSubsidy = records.stream() + .map(record -> record.getSubsidy() != null ? record.getSubsidy() : BigDecimal.ZERO) + .reduce(BigDecimal.ZERO, BigDecimal::add); + result.setTotalAmount(totalAmount); + result.setTotalSubsidy(totalSubsidy); + + return result; + } + /** * 导出的三种形式 */ @@ -1234,7 +1260,20 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl page = new Page<>(exportVO.getPageNo(), exportVO.getPageSize()); IPage result = dlDriveSchoolCoachMapper.getBusinessRecordExportData(exportVO, page); - return result.getRecords(); + List records = result.getRecords(); + + // 计算提成 + for (BusinessRecordExportVO record : records) { + BigDecimal deduct = BigDecimal.ZERO; + if(record.getScheme() != null){ + deduct = schemeService.getSchemeById(record.getScheme(), 0); + }else{ + deduct = schemeService.getCourseDeduct(record.getCourseId(), 0); + } + record.setSubsidy(deduct); + } + + return records; } @Override @@ -1242,7 +1281,20 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl page = new Page<>(1, Integer.MAX_VALUE); IPage result = dlDriveSchoolCoachMapper.getBusinessRecordExportData(exportVO, page); - return result.getRecords(); + List records = result.getRecords(); + + // 计算提成 + for (BusinessRecordExportVO record : records) { + BigDecimal deduct = BigDecimal.ZERO; + if(record.getScheme() != null){ + deduct = schemeService.getSchemeById(record.getScheme(), 0); + }else{ + deduct = schemeService.getCourseDeduct(record.getCourseId(), 0); + } + record.setSubsidy(deduct); + } + + return records; } @Override @@ -1253,7 +1305,20 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl page = new Page<>(i, exportVO.getPageSize()); IPage result = dlDriveSchoolCoachMapper.getBusinessRecordExportData(exportVO, page); - allData.addAll(result.getRecords()); + List records = result.getRecords(); + + // 计算提成 + for (BusinessRecordExportVO record : records) { + BigDecimal deduct = BigDecimal.ZERO; + if(record.getScheme() != null){ + deduct = schemeService.getSchemeById(record.getScheme(), 0); + }else{ + deduct = schemeService.getCourseDeduct(record.getCourseId(), 0); + } + record.setSubsidy(deduct); + } + + allData.addAll(records); if (i >= result.getPages()) { break; diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordExportCountVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordExportCountVO.java new file mode 100644 index 00000000..3438cf7a --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordExportCountVO.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.base.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class BusinessRecordExportCountVO { + + private BigDecimal totalAmount; + + private BigDecimal totalSubsidy; + + private Integer totalPeople; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordExportVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordExportVO.java index 95ac24c6..869e3f25 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordExportVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordExportVO.java @@ -46,6 +46,8 @@ public class BusinessRecordExportVO { @ExcelIgnore private Integer isSign; + @ExcelIgnore + private String ifEnd; @ExcelProperty(value = "面签时间", index = 9) private String signTimeStr; diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolCourseOrder.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolCourseOrder.java index 18ee94fb..4cb0037f 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolCourseOrder.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolCourseOrder.java @@ -174,5 +174,16 @@ public class SchoolCourseOrder extends TenantBaseDO { */ private String paymentAccount; + /** + * 优惠金额 + */ + private BigDecimal discount; + + + /** + * 实付金额 + */ + private BigDecimal actualPayment; + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/ProcessServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/ProcessServiceImpl.java index c91de88c..6ec6cd86 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/ProcessServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/ProcessServiceImpl.java @@ -836,8 +836,12 @@ public class ProcessServiceImpl extends ServiceImpl impl List courseByInfo = schoolCourseOrderService.getCourseByInfo(userId, courseId); BigDecimal studentPay = BigDecimal.ZERO; BigDecimal studentRemainingPay = BigDecimal.ZERO; + BigDecimal discount = BigDecimal.ZERO; + BigDecimal actualPayment = BigDecimal.ZERO; String studentIdCard = null; String cashierConfirm = null; + String orderRemark = null; + String cashierConfirmRemark = null; if (!courseByInfo.isEmpty()) { studentPay = courseByInfo.get(0).getReserveMoney() != null ? courseByInfo.get(0).getReserveMoney() : BigDecimal.ZERO; @@ -847,13 +851,34 @@ public class ProcessServiceImpl extends ServiceImpl impl courseByInfo.get(0).getUserNo() : null; cashierConfirm = courseByInfo.get(0).getCashierConfirm()!= null? courseByInfo.get(0).getCashierConfirm() : null; - + orderRemark = courseByInfo.get(0).getOrderRemark()!= null? + courseByInfo.get(0).getOrderRemark() : null; + discount = courseByInfo.get(0).getDiscount() != null ? + courseByInfo.get(0).getDiscount() : BigDecimal.ZERO; + actualPayment = courseByInfo.get(0).getActualPayment() != null ? + courseByInfo.get(0).getActualPayment() : BigDecimal.ZERO; + cashierConfirmRemark = courseByInfo.get(0).getCashierConfirmRemark()!= null? + courseByInfo.get(0).getCashierConfirmRemark() : null; } processVO.setCoachCommission(deduct); processVO.setStudentPay(studentPay); + processVO.setDiscount(discount); + processVO.setActualPayment(actualPayment); processVO.setStudentRemainingPay(studentRemainingPay); processVO.setStudentIdCard(studentIdCard); processVO.setCashierConfirm(cashierConfirm); + processVO.setOrderRemark(orderRemark); + processVO.setCashierConfirmRemark(cashierConfirmRemark); + + DlDriveSchoolStudent studentByUserId = dlDriveSchoolStudentService.getStudentByUserId(userId); + if(studentByUserId != null){ + if(studentByUserId.getChannel() != null){ + processVO.setChannel(studentByUserId.getChannel()); + } + if(studentByUserId.getSource() != null){ + processVO.setSource(studentByUserId.getSource()); + } + } List list = this.lambdaQuery() .eq(Process::getCoachId, processVO.getCoachId()) .eq(Process::getCourseId, processVO.getCourseId()) diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCourseOrderServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCourseOrderServiceImpl.java index 9e5c138b..68132c97 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCourseOrderServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCourseOrderServiceImpl.java @@ -328,8 +328,8 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl { IPage queryTrainListPage(@Param("entity") TrainVO pageReqVO, @Param("page") Page page); List listJoinBatchByIds(@Param("trainIds") List trainIds); -} \ No newline at end of file + + List noClockInRemind(); +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/TrainService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/TrainService.java index 3865afce..0bb91444 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/TrainService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/TrainService.java @@ -84,4 +84,9 @@ public interface TrainService extends IService { * @return */ List listJoinBatchByIds(List trainIds); + + /** + * 提醒教练未打卡学员信息 + */ + void noClockInRemind(); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/impl/TrainServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/impl/TrainServiceImpl.java index b5bb0273..c6b95749 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/impl/TrainServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/impl/TrainServiceImpl.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.course.service.ProcessService; 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.NoClockInRemindVO; import cn.iocoder.yudao.module.train.vo.TrainVO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -165,4 +166,22 @@ public class TrainServiceImpl extends ServiceImpl implements if (CollUtil.isEmpty(trainIds)) return null; return trainMapper.listJoinBatchByIds(trainIds); } -} \ No newline at end of file + + /** + * 提醒教练未打卡学员信息 + */ + @Override + public void noClockInRemind() { + List noClockInRemindVOList = trainMapper.noClockInRemind(); + for (NoClockInRemindVO noClockInRemindVO : noClockInRemindVOList) { + Long coachId = noClockInRemindVO.getCoachId(); + String studentCount = noClockInRemindVO.getStudentCount(); + String studentNames = noClockInRemindVO.getStudentNames(); + Long tenantId = noClockInRemindVO.getTenantId(); + String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_NOT_ATTENDANCE, studentCount, studentNames); + schoolNotifyMessageSendService.sendMessage(coachId, message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN, tenantId); + } + } + + +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/NoClockInRemindVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/NoClockInRemindVO.java new file mode 100644 index 00000000..85319595 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/NoClockInRemindVO.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.train.vo; + +import lombok.Data; + +@Data +public class NoClockInRemindVO { + + /** + * 教练id + */ + private Long coachId; + + /** + * 教练姓名 + */ + private String coachName; + + /** + * 学员数量 + */ + private String studentCount; + + /** + * 全部学员名称 + */ + private String studentNames; + + private Long tenantId; +} diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml index 25d62ccc..816c779e 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml @@ -222,7 +222,8 @@ dsc.name AS businessName, dsc.phone AS businessPhone, dsco.create_time, - dsc.image + dsc.image, + dsco.scheme_id AS scheme from drive_school_student dss LEFT JOIN drive_school_course_order dsco ON dss.user_id = dsco.user_id 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 447195b2..02d816c0 100644 --- a/dl-module-jx/src/main/resources/mapper/course/SchoolCommissionMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCommissionMapper.xml @@ -166,7 +166,7 @@ - order BY dsc.create_time DESC + ORDER BY dsc.create_time DESC @@ -312,6 +337,9 @@ dsco.cashier_confirm_time, dss.source, dsco.payment_account, + dsco.sign_time, + dsco.discount, + dsco.actual_payment, MAX(CASE WHEN dsp.subject = 2 THEN COALESCE(dsp.coach_name, '') END) AS subject2CoachName, MAX(CASE WHEN dscd.course_subject = 2 THEN COALESCE(dscd.deduct, 0) END) AS subject2Deduct, MAX(CASE WHEN dsp.subject = 3 THEN COALESCE(dsp.coach_name, '') END) AS subject3CoachName, @@ -381,6 +409,16 @@ + + + + AND dsco.discount > 0 + + + AND (dsco.discount = 0 or dsco.discount IS NULL) + + + AND dss.source = #{entity.source} @@ -406,13 +444,19 @@ dsco.user_no, dsco.user_phone, dsco.create_time, + dsco.is_sign, dsco.pay_fees_time, dsco.reserve_money, dsco.course_name, dsco.course_type, dsco.order_remark, dsco.cashier_confirm, - dsco.cashier_confirm_remark + dsco.cashier_confirm_remark, + dsco.cashier_confirm_time, + dss.source, + dsco.payment_account, + dsco.sign_time + ORDER BY dsco.create_time DESC, dsco.user_id @@ -422,6 +466,8 @@ SELECT COUNT(DISTINCT dss.user_id) AS studentCount, SUM(dsco.reserve_money) AS totalAmount, + SUM(dsco.discount) AS totalDiscount, + SUM(dsco.actual_payment) AS totalActualPayment, SUM(IFNULL(sub.subject2Deduct, 0)) AS subject2DeductTotal, SUM(IFNULL(sub.subject3Deduct, 0)) AS subject3DeductTotal FROM drive_school_student dss @@ -521,6 +567,16 @@ + + + + AND dsco.discount > 0 + + + AND (dsco.discount = 0 or dsco.discount IS NULL) + + + 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 39a141e3..3110824d 100644 --- a/dl-module-jx/src/main/resources/mapper/train/TrainMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/train/TrainMapper.xml @@ -85,4 +85,21 @@ #{trainId} + + + diff --git a/yudao-server/src/main/java/cn/iocoder/yudao/server/YudaoServerApplication.java b/yudao-server/src/main/java/cn/iocoder/yudao/server/YudaoServerApplication.java index 75124921..091f290b 100644 --- a/yudao-server/src/main/java/cn/iocoder/yudao/server/YudaoServerApplication.java +++ b/yudao-server/src/main/java/cn/iocoder/yudao/server/YudaoServerApplication.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; /** * 项目的启动类