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 15630795..62834153 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 @@ -74,4 +74,39 @@ public interface SchoolBaseConstants { * 驾校消息模板:分配教练通知 */ public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_ASSIGN_COACH= "已为您分配教练,科目一教练:%s,科目二教练:%s,科目三教练:%s,科目四教练:%s"; + + /** + * 驾校消息模板:课程终止 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_COURSE_END= "您的课程%s已终止"; + + /** + * 驾校消息模板:学员预约训练 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_RESERVE_TRAIN= "学员%s预约了%s %s %s%s的训练"; + + /** + * 驾校消息模板:教练审核预约结果 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_COACH_RESERVE_RESULT= "您预约的%s %s %s%s的训练教练已%s"; + + /** + * 驾校消息模板:学员到场打卡发送消息 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_ATTENDANCE= "您在%s已到达%s打卡%s%s的训练"; + + /** + * 驾校消息模板:学员结束打卡发送消息 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_END_ATTENDANCE= "您在%s已结束%s%s的训练,本次训练时长%s分钟,累计训练时长%s分钟"; + + /** + * 驾校消息模板:学员提交考试批次 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_EXAM_BATCH= "教练给您提交了%s%s的考试,考试时间为:%s - %s,考试地址为:%s"; + + /** + * 驾校消息模板:学员拿出驾驶证祝福语 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_DRIVER_LICENSE= "恭喜您在%s已领取驾驶证,祝您驾得愉快"; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolStudentService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolStudentService.java index 79c1002d..7414b1f2 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolStudentService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolStudentService.java @@ -148,7 +148,8 @@ public interface DlDriveSchoolStudentService extends IService impl processes.get(3).getCoachName()); // 发送消息给学员 - schoolNotifyMessageSendService.sendMessage(userId, message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_MEMBER); + schoolNotifyMessageSendService.sendMessage(userId, message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_MEMBER, null); } @@ -363,7 +363,7 @@ public class ProcessServiceImpl extends ServiceImpl impl .set(Process::getStatus, 2)); } - if(process.getSubject() == 1 && process.getExamStatus().equals("1")){ + if (process.getSubject() == 1 && process.getExamStatus().equals("1")) { update(Wrappers.lambdaUpdate(Process.class) .eq(Process::getUserId, process.getUserId()) .eq(Process::getSubject, 2) @@ -371,8 +371,8 @@ public class ProcessServiceImpl extends ServiceImpl impl .eq(Process::getDeleted, SchoolBaseConstants.COMMON_NO) .set(Process::getStatus, SchoolBaseConstants.PROCESS_STATUS_IN_PROGRESS)); } - if(process.getSubject() == 4 && process.getExamStatus().equals("1")){ - dlDriveSchoolStudentService.updateStudentPassAndGradTime(process.getExamTime(),process.getUserId(),process.getTenantId()); + if (process.getSubject() == 4 && process.getExamStatus().equals("1")) { + dlDriveSchoolStudentService.updateStudentPassAndGradTime(process.getExamTime(), process.getUserId(), process.getCourseId(), process.getTenantId()); } } @@ -397,6 +397,7 @@ public class ProcessServiceImpl extends ServiceImpl impl /** * 根据userId查询考试列表 + * * @param userId 用户id */ @Override @@ -416,6 +417,7 @@ public class ProcessServiceImpl extends ServiceImpl impl /** * 根据userId查询考试列表 + * * @param userId 用户id */ @Override 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 185ef80c..309fade2 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 @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.base.constant.SchoolBaseConstants; +import cn.iocoder.yudao.module.base.service.SchoolNotifyMessageSendService; import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.mapper.SchoolCourseOrderMapper; @@ -15,6 +16,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -39,6 +41,9 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl queryPage(Page page, SchoolCourseOrderVO pageReqVO) { - return schoolCourseOrderMapper.queryPage(pageReqVO,page); + return schoolCourseOrderMapper.queryPage(pageReqVO, page); } @Override public IPage queryPageNew(Page page, SchoolCourseOrderVO pageReqVO) { @@ -110,11 +115,18 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl q.eq(Process::getStatus, SchoolBaseConstants.PROCESS_STATUS_NOT_START) .or() .eq(Process::getStatus, SchoolBaseConstants.PROCESS_STATUS_IN_PROGRESS)) ); + // 准备消息内容 + String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_COURSE_END, schoolCourseOrder.getCourseName()); + + // 发送消息给学员 + schoolNotifyMessageSendService.sendMessage(Long.valueOf(schoolCourseOrder.getUserId()), message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_MEMBER, null); + } /** diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolFeedbackServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolFeedbackServiceImpl.java index d047b478..43e05bb0 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolFeedbackServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolFeedbackServiceImpl.java @@ -28,6 +28,8 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; +import static cn.iocoder.yudao.module.base.utils.DriveSchoolBaseUtil.getSubjectStr; + /** * 反馈Service业务层处理 * @@ -77,7 +79,8 @@ public class SchoolFeedbackServiceImpl extends ServiceImpl queryPage(Page page, SchoolFeedBackVO request) { // 1. 分页查询原始数据 IPage pageList = this.page(page, Wrappers.lambdaQuery(SchoolFeedBack.class) - .eq(ObjectUtil.isNotEmpty(request.getUserId()), SchoolFeedBack::getUserId, request.getUserId())); + .eq(ObjectUtil.isNotEmpty(request.getUserId()), SchoolFeedBack::getUserId, request.getUserId()) + .orderByDesc(SchoolFeedBack::getCreateTime)); // 2. 提取训练和考试的ID集合 List trainIds = pageList.getRecords().stream() @@ -111,11 +114,15 @@ public class SchoolFeedbackServiceImpl extends ServiceImpl voList = pageList.getRecords().stream().map(item -> { SchoolFeedBackVO vo = BeanUtil.copyProperties(item, SchoolFeedBackVO.class); if (SchoolBaseConstants.EVALUATE_TYPE_TRAIN.equals(item.getEvaluateType())) { + // 设置标题 vo.setBusiName(getSubjectStr(trainMap.get(item.getBusiId()).getSubject()) + "训练"); + // 设置课程类型和教练名 vo.setCourseType(trainMap.get(item.getBusiId()).getCourseType()); vo.setCoachName(trainMap.get(item.getBusiId()).getCoachName()); } else if (SchoolBaseConstants.EVALUATE_TYPE_EXAM.equals(item.getEvaluateType())) { + // 设置标题 vo.setBusiName(getSubjectStr(examMap.get(item.getBusiId()).getSubject()) + "考试"); + // 设置课程类型和教练名 vo.setCourseType(examMap.get(item.getBusiId()).getCourseType()); vo.setCoachName(examMap.get(item.getBusiId()).getCoachName()); } @@ -129,22 +136,4 @@ public class SchoolFeedbackServiceImpl extends ServiceImpl userIdList = examBatchVO.getItemList().stream().map(ExamBatchItem::getUserId).collect(Collectors.toList()); processMapper.updateProcessBatch(userIdList,examBatchVO.getCourseId(),examBatchVO.getSubject(),examBatchVO.getCoachId()); + + // 准备信息内容 + String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_EXAM_BATCH, examBatchVO.getCourseName(), getSubjectStr(examBatchVO.getSubject()), DateUtil.format(examBatchVO.getStartTime(), "yyyy-MM-dd HH:mm:ss"), DateUtil.format(examBatchVO.getEndTime(), "yyyy-MM-dd HH:mm:ss"), examBatchVO.getAddr()); + + itemList.forEach(item->{ + // 发送消息 + schoolNotifyMessageSendService.sendMessage(item.getUserId(), message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_MEMBER, null); + }); } /** diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/controller/admin/ReservationCourseController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/controller/admin/ReservationCourseController.java index 0572cd6f..fb753e36 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/controller/admin/ReservationCourseController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/controller/admin/ReservationCourseController.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.train.controller.admin; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.base.constant.SchoolBaseConstants; +import cn.iocoder.yudao.module.base.service.SchoolNotifyMessageSendService; import cn.iocoder.yudao.module.train.entity.ReservationCourse; import cn.iocoder.yudao.module.train.service.ReservationCourseService; import cn.iocoder.yudao.module.train.vo.ReservationCourseVO; @@ -18,6 +20,7 @@ import javax.annotation.Resource; import javax.validation.Valid; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.module.base.utils.DriveSchoolBaseUtil.getSubjectStr; @Tag(name = "管理后台 - 预约练车") @RestController @@ -28,28 +31,40 @@ public class ReservationCourseController { @Resource private ReservationCourseService reservationCourseService; + @Resource + private SchoolNotifyMessageSendService schoolNotifyMessageSendService; + @GetMapping("/page") @Operation(summary = "获得预约练车分页") public CommonResult> getPage(ReservationCourseVO pageReqVO, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { - Page page = new Page<>(pageNo,pageSize); - if("my".equals(pageReqVO.getSelectType())){ + Page page = new Page<>(pageNo, pageSize); + if ("my".equals(pageReqVO.getSelectType())) { //查自己的 Long userId = SecurityFrameworkUtils.getLoginUserId(); pageReqVO.setCoachId(userId); } //查未取消的 pageReqVO.setIfCancel(false); - return success(reservationCourseService.queryListPage(pageReqVO,page)); + return success(reservationCourseService.queryListPage(pageReqVO, page)); } @PutMapping("/update") @Operation(summary = "审核预约练车") - public CommonResult updateReservationCourse(@Valid @RequestBody ReservationCourseVO updateReqVO) { + public CommonResult updateReservationCourse(@RequestBody ReservationCourseVO updateReqVO) { reservationCourseService.updateById(updateReqVO); + + //通过id查询预约记录 + ReservationCourse createObj = reservationCourseService.getById(updateReqVO.getId()); + + // 准备内容 + String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_COACH_RESERVE_RESULT, createObj.getReservDay(), createObj.getReservTime(), createObj.getCourseName(), getSubjectStr(createObj.getSubject()), reservatStatusStr(updateReqVO.getStatus())); + + // 发送消息 + schoolNotifyMessageSendService.sendMessage(createObj.getUserId(), message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_MEMBER, createObj.getTenantId()); return success(true); } @@ -72,11 +87,12 @@ public class ReservationCourseController { /** * 根据学生userId查询学生信息及当天的预约记录 - * @author vinjor-M - * @date 17:25 2025/1/16 + * * @param userId 学生userId * @return cn.iocoder.yudao.framework.common.pojo.CommonResult - **/ + * @author vinjor-M + * @date 17:25 2025/1/16 + **/ @GetMapping("/getUserInfoAndReservation") @Operation(summary = "根据学生userId查询学生信息及当天的预约记录") @Parameter(name = "id", description = "学生userId", required = true, example = "1024") @@ -84,7 +100,15 @@ public class ReservationCourseController { @RequestParam("courseId") String courseId, @RequestParam("type") String type, @RequestParam("subject") Integer subject) { - return success(reservationCourseService.getUserInfoAndReservation(userId,courseId,subject,type)); + return success(reservationCourseService.getUserInfoAndReservation(userId, courseId, subject, type)); + } + + public String reservatStatusStr(Boolean status) { + if (!status) { + return "拒绝"; + } else{ + return "通过"; + } } } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/controller/app/AppReservationCourseController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/controller/app/AppReservationCourseController.java index fbd714cd..cae58bed 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/controller/app/AppReservationCourseController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/controller/app/AppReservationCourseController.java @@ -2,6 +2,12 @@ package cn.iocoder.yudao.module.train.controller.app; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; +import cn.iocoder.yudao.module.base.constant.SchoolBaseConstants; +import cn.iocoder.yudao.module.base.service.DlDriveSchoolCoachService; +import cn.iocoder.yudao.module.base.service.SchoolNotifyMessageSendService; +import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachRespVO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.train.entity.ReservationCourse; import cn.iocoder.yudao.module.train.service.ReservationCourseService; import cn.iocoder.yudao.module.train.vo.ReservationCourseVO; @@ -10,12 +16,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.module.base.utils.DriveSchoolBaseUtil.getSubjectStr; @Tag(name = "小程序 - 预约练车") @RestController @@ -26,22 +35,34 @@ public class AppReservationCourseController { @Resource private ReservationCourseService reservationCourseService; + @Resource + private SchoolNotifyMessageSendService schoolNotifyMessageSendService; + @GetMapping("/page") @Operation(summary = "获得预约练车分页") + @TenantIgnore public CommonResult> getPage(ReservationCourseVO pageReqVO, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { - Page page = new Page<>(pageNo,pageSize); + Page page = new Page<>(pageNo, pageSize); Long userId = SecurityFrameworkUtils.getLoginUserId(); pageReqVO.setUserId(userId); - return success(reservationCourseService.queryListPage(pageReqVO,page)); + return success(reservationCourseService.queryListPage(pageReqVO, page)); } @PutMapping("/create") @Operation(summary = "预约练车") - public CommonResult createReservationCourse( @RequestBody ReservationCourse createObj) { + @TenantIgnore + @Transactional + public CommonResult createReservationCourse(@RequestBody @Validated ReservationCourse createObj) { reservationCourseService.save(createObj); + + // 准备消息内容 + String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_RESERVE_TRAIN, createObj.getUserName(), createObj.getReservDay(), createObj.getReservTime(), createObj.getCourseName(), getSubjectStr(createObj.getSubject())); + + // 发送消息 + schoolNotifyMessageSendService.sendMessage(createObj.getCoachId(), message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN, createObj.getTenantId()); return success(true); } @@ -70,5 +91,4 @@ public class AppReservationCourseController { return success(reservationCourseService.getById(id)); } - } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/entity/ReservationCourse.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/entity/ReservationCourse.java index 66a675a0..d02f81fa 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/entity/ReservationCourse.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/entity/ReservationCourse.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; +import javax.validation.constraints.NotBlank; + /** * 预约练车 DO * @@ -51,10 +53,12 @@ public class ReservationCourse extends TenantBaseDO { /** * 预约日期 yyyy-MM-dd */ + @NotBlank(message = "预约日期不能为空") private String reservDay; /** * 时间段(字典:school_reserv_time)09:00-10:00 */ + @NotBlank(message = "预约时间不能为空") private String reservTime; /** * 科目(1-科目一;2-科目二;3科目三;4科目四) diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/ReservationCourseService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/ReservationCourseService.java index 7e8022bd..d87b4553 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/ReservationCourseService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/service/ReservationCourseService.java @@ -17,21 +17,23 @@ public interface ReservationCourseService extends IService { /** * 分页查询 + * + * @param pageReqVO TODO + * @param page TODO + * @return com.baomidou.mybatisplus.core.metadata.IPage * @author vinjor-M * @date 15:05 2025/1/14 - * @param pageReqVO TODO - * @param page TODO - * @return com.baomidou.mybatisplus.core.metadata.IPage - **/ + **/ IPage queryListPage(ReservationCourseVO pageReqVO, Page page); /** * 根据学生userId查询学生信息及当天的预约记录 + * + * @param userId + * @return java.util.Map * @author vinjor-M * @date 17:27 2025/1/16 - * @param userId - * @return java.util.Map - **/ - Map getUserInfoAndReservation(Long userId,String courseId,Integer subject,String type); + **/ + Map getUserInfoAndReservation(Long userId, String courseId, Integer subject, String type); } 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 d2e8ac8f..b5bb0273 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 @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.train.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.base.constant.SchoolBaseConstants; +import cn.iocoder.yudao.module.base.service.SchoolNotifyMessageSendService; import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.service.ProcessService; import cn.iocoder.yudao.module.train.entity.Train; @@ -17,9 +19,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.Date; import java.util.List; +import static cn.iocoder.yudao.module.base.utils.DriveSchoolBaseUtil.getSubjectStr; + /** * 预约练车 Service 实现类 @@ -33,6 +38,8 @@ public class TrainServiceImpl extends ServiceImpl implements @Autowired @Lazy private ProcessService processService; + @Resource + private SchoolNotifyMessageSendService schoolNotifyMessageSendService; /** * 分页查询 @@ -72,6 +79,11 @@ public class TrainServiceImpl extends ServiceImpl implements public void createObj(TrainVO trainVO) { trainVO.setTrainDay(DateUtil.format(new Date(), "yyyy-MM-dd")); this.save(trainVO); + + // 准备消息内容 + String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_ATTENDANCE, DateUtil.format(trainVO.getStartTime(), "yyyy-MM-dd HH:mm:ss"), trainVO.getAddr(), trainVO.getCourseName(), getSubjectStr(trainVO.getSubject())); + + schoolNotifyMessageSendService.sendMessage(trainVO.getUserId(), message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_MEMBER, null); } /** @@ -92,6 +104,11 @@ public class TrainServiceImpl extends ServiceImpl implements process.setId(trainVO.getProcessId()); process.setTrainTime(allTrainTime); processService.updateById(process); + + // 准备消息内容 + String message = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_END_ATTENDANCE, DateUtil.format(trainVO.getEndTime(), "yyyy-MM-dd HH:mm:ss"), trainVO.getCourseName(), getSubjectStr(trainVO.getSubject()), trainVO.getTrainTime(), trainVO.getAllTrainTime()); + + schoolNotifyMessageSendService.sendMessage(trainVO.getUserId(), message, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_MEMBER, null); } /** diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/ReservationCourseVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/ReservationCourseVO.java index c6032dda..7076965d 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/ReservationCourseVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/train/vo/ReservationCourseVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.train.vo; import cn.iocoder.yudao.module.train.entity.ReservationCourse; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; @Data @@ -26,4 +27,16 @@ public class ReservationCourseVO extends ReservationCourse { * 用户性别-学员 */ private String userSex; + /** + * 状态字符串 + */ + private String statusStr; + /** + * 科目字符串 + */ + private String subjectStr; + /** + * 课程类型 + */ + private String courseType; } 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 82dd763a..ad5c2409 100644 --- a/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml @@ -143,10 +143,13 @@ dseb.`subject`, dseb.addr, dseb.trans_way, - dseb.coach_id + dseb.coach_id, + dseb.coach_name, + dsc.type AS courseType FROM drive_school_exam_batch_item dsebi LEFT JOIN drive_school_exam_batch dseb ON dsebi.batch_id = dseb.id + LEFT JOIN drive_school_course dsc ON dseb.course_id = dsc.id WHERE dsebi.id IN diff --git a/dl-module-jx/src/main/resources/mapper/train/ReservationCourseMapper.xml b/dl-module-jx/src/main/resources/mapper/train/ReservationCourseMapper.xml index f3eda1dc..aaa4156f 100644 --- a/dl-module-jx/src/main/resources/mapper/train/ReservationCourseMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/train/ReservationCourseMapper.xml @@ -6,7 +6,19 @@