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 61d56a3d..a2a268eb 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 @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import javax.validation.Valid; +import java.util.Date; import java.util.List; /** @@ -30,8 +31,7 @@ public interface DlDriveSchoolStudentService extends IService queryCoachListPage(DlDriveSchoolStudentVO pageReqVO, Page page); /** - * - * @author PQZ - * @date 17:08 2025/2/19 * @param type 时间查询类型(01驾校统招,02教练自招,03自来客户) * @param coachId 教练id * @param startTime 查询时间范围--开始 * @param endTime 查询时间范围--结束 * @return java.util.List - **/ + * @author PQZ + * @date 17:08 2025/2/19 + **/ List indexGetTrainList(String type, Long coachId, String startTime, String endTime); /** - *查自来客户 - * @author PQZ - * @date 11:43 2025/2/20 + * 查自来客户 + * * @param startTimeStr 查询时间范围--开始 * @param endTimeStr 查询时间范围--结束 * @return cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO - **/ - List indexGetFormList( String startTimeStr, String endTimeStr); + * @author PQZ + * @date 11:43 2025/2/20 + **/ + List indexGetFormList(String startTimeStr, String endTimeStr); + + /** + * 更新学员拿证时间 + * + * @param passTime 拿证日期 + * @param userId 学员id + * @param tenantId 租户id + */ + Boolean updateStudentPassAndGradTime(Date passTime, Long userId, String tenantId); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolStudentServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolStudentServiceImpl.java index 9559ce19..baaebeb9 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolStudentServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolStudentServiceImpl.java @@ -4,6 +4,8 @@ import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 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.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.mapper.DlDriveSchoolStudentMapper; import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService; @@ -14,13 +16,16 @@ import cn.iocoder.yudao.module.course.service.ProcessService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Date; import java.util.List; /** @@ -42,7 +47,7 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper() - .eq(DlDriveSchoolStudent::getUserId,userId) + .eq(DlDriveSchoolStudent::getUserId, userId) .orderByDesc(BaseDO::getCreateTime); List list = this.list(queryWrapper); - return list.isEmpty()?null:list.get(0); + return list.isEmpty() ? null : list.get(0); } /** @@ -125,7 +129,7 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl queryListPage(DlDriveSchoolStudentVO pageReqVO, Page page) { - return dlDriveSchoolStudentMapper.queryListPage(pageReqVO,page); + return dlDriveSchoolStudentMapper.queryListPage(pageReqVO, page); } /** @@ -138,10 +142,10 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl getCanExamStudentList(String courseId, Integer subject,String userName) { + public List getCanExamStudentList(String courseId, Integer subject, String userName) { //教练ID Long userId = SecurityFrameworkUtils.getLoginUserId(); - return dlDriveSchoolStudentMapper.selectCanExamStudentList(courseId,userId,subject,userName); + return dlDriveSchoolStudentMapper.selectCanExamStudentList(courseId, userId, subject, userName); } /** @@ -155,7 +159,7 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl pageStaffStudent(DlDriveSchoolStaffVO staffVO, Page page) { - return dlDriveSchoolStudentMapper.pageStaffStudent(staffVO,page); + return dlDriveSchoolStudentMapper.pageStaffStudent(staffVO, page); } /** @@ -172,28 +176,28 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl pageResult = dlDriveSchoolStudentMapper.selectByCoachId(pageReqVO,page); - pageResult.getRecords().forEach(item->{ + IPage pageResult = dlDriveSchoolStudentMapper.selectByCoachId(pageReqVO, page); + pageResult.getRecords().forEach(item -> { //查每个学生的当前所处的科目 - item.setProcess(processService.selectByUserId(item.getUserId(),item.getCoachId())); + item.setProcess(processService.selectByUserId(item.getUserId(), item.getCoachId())); }); return pageResult; } @@ -209,16 +213,17 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl indexGetTrainList(String type, Long coachId, String startTime, String endTime) { - if("03".equals(type)){ + if ("03".equals(type)) { //自来的学生 - return dlDriveSchoolStudentMapper.indexCusStudentList(startTime,endTime); - }else{ - return dlDriveSchoolStudentMapper.indexGetTrainList(type,coachId,startTime,endTime); + return dlDriveSchoolStudentMapper.indexCusStudentList(startTime, endTime); + } else { + return dlDriveSchoolStudentMapper.indexGetTrainList(type, coachId, startTime, endTime); } } /** * 查自来客户 + * * @param startTimeStr 查询时间范围--开始 * @param endTimeStr 查询时间范围--结束 * @return cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO @@ -227,7 +232,31 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl indexGetFormList(String startTimeStr, String endTimeStr) { - return dlDriveSchoolStudentMapper.indexGetFormList(startTimeStr,endTimeStr); + return dlDriveSchoolStudentMapper.indexGetFormList(startTimeStr, endTimeStr); + } + + /** + * 更新学员拿证时间 + * + * @param passTime 拿证日期 + * @param userId 学员id + * @param tenantId 租户id + */ + @TenantIgnore + @Override + public Boolean updateStudentPassAndGradTime(Date passTime, Long userId, String tenantId) { + if (ObjectUtils.isEmpty(passTime) || ObjectUtils.isEmpty(userId) || ObjectUtils.isEmpty(tenantId)) { + return false; + } + // 更新学员拿证时间 + update(Wrappers.lambdaUpdate(DlDriveSchoolStudent.class) + .eq(DlDriveSchoolStudent::getUserId, userId) + .eq(DlDriveSchoolStudent::getTenantId, tenantId) + .set(DlDriveSchoolStudent::getPassTime, passTime) + .eq(DlDriveSchoolStudent::getDeleted, SchoolBaseConstants.COMMON_NO) + .set(DlDriveSchoolStudent::getGradTime, new Date())); + + return true; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/ProcessController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/ProcessController.java index 92f7979f..6fadda34 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/ProcessController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/ProcessController.java @@ -120,8 +120,24 @@ public class ProcessController { @PostMapping("/saveProcess") @Operation(summary = "保存学员课程进度") public CommonResult saveProcess(@RequestBody ProcessAddVO request) { + // 订单id和科目集合不能为空 + if (request.getOrderId() == null || request.getProcessList() == null) { + throw new RuntimeException("订单和科目不能为空"); + } processService.saveProcess(request); return success(true); } + /** + * 通过学员id和课程id查询学员课程进度 + * + * @param userId 学员id + * @param courseId 课程id + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult> + */ + @GetMapping("/getAllByUserIdAndCourseId") + public CommonResult getAllByUserIdAndCourseId(Long userId, String courseId) { + return success(processService.getAllByUserIdAndCourseId(userId, courseId)); + } + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolCourseOrderController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolCourseOrderController.java index c073dfb3..52a7e550 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolCourseOrderController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolCourseOrderController.java @@ -95,4 +95,16 @@ public class SchoolCourseOrderController { return success(true); } + /** + * 快速创建订单 + * + * @param createReqVO 创建信息 + * @return 订单号 + */ + @PostMapping("/fastCreate") + @Operation(summary = "快速创建驾照报名订单") + public CommonResult fastCreateSchoolCourseOrder(@Valid @RequestBody SchoolCourseOrderVO createReqVO) { + return success(schoolCourseOrderService.fastCreateSchoolCourseOrder(createReqVO)); + } + } \ No newline at end of file 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 db6430d1..87562f36 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 @@ -108,6 +108,10 @@ public class SchoolCourseOrder extends TenantBaseDO { * 是否分配教练 0:否 1:是 */ private Integer ifAssignmentCoach; + /** + * 旧订单id + */ + private String oldOrderId; } \ No newline at end of file diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/ProcessService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/ProcessService.java index cdde8725..4f36731d 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/ProcessService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/ProcessService.java @@ -103,7 +103,7 @@ public interface ProcessService extends IService { /** * 保存学员课程进度 * - * @param processes {@link Process} + * @param request {@link Process} */ void saveProcess(ProcessAddVO request); @@ -111,4 +111,12 @@ public interface ProcessService extends IService { * 修改学院课程进度 */ void updateProcess(Process process); + + /** + * 根据用户id和课程id查询所有进度 + * @param userId 用户id + * @param courseId 课程id + * @return java.util.List + */ + List getAllByUserIdAndCourseId(Long userId, String courseId); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCourseOrderService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCourseOrderService.java index d087b841..88750dbb 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCourseOrderService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCourseOrderService.java @@ -63,9 +63,18 @@ public interface SchoolCourseOrderService extends IService { /** * 终止订单 - * @param orderNo 订单号 + * + * @param orderNo 订单号 * @param endReason 终止原因 - * @param endTime 终止时间 + * @param endTime 终止时间 */ void endOrder(String orderNo, String endReason, LocalDateTime endTime); + + /** + * 快速创建订单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + String fastCreateSchoolCourseOrder(SchoolCourseOrderVO createReqVO); } \ No newline at end of file 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 ddd493b9..4963407b 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 @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.course.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.security.core.LoginUser; @@ -282,8 +283,27 @@ public class ProcessServiceImpl extends ServiceImpl impl * @param request {@link ProcessAddVO} */ @Override + @Transactional(rollbackFor = Exception.class) public void saveProcess(ProcessAddVO request) { List processes = BeanUtil.copyToList(request.getProcessList(), Process.class); + // 获取学生id和课程id + String courseId = processes.get(0).getCourseId(); + Long userId = processes.get(0).getUserId(); + // 根据课程id和学生id查询进度 + List list = list(Wrappers.lambdaQuery(Process.class) + .eq(Process::getCourseId, courseId) + .eq(Process::getUserId, userId)); + + //判断传递进来的进度集合中的课程id和教练id和课程id是否与查询出来的一致,如果一致在processes集合中删除 + for (Process process : list) { + processes.removeIf(process1 -> process.getCourseId().equals(process1.getCourseId()) + && process.getCoachId().equals(process1.getCoachId()) + && process.getSubject().equals(process1.getSubject())); + } + + if (CollUtil.isEmpty(processes)) { + return; + } // 校验详细信息 verify(processes); // 保存信息 @@ -314,6 +334,24 @@ public class ProcessServiceImpl extends ServiceImpl impl } + /** + * 根据用户id和课程id查询所有进度 + * + * @param userId 用户id + * @param courseId 课程id + * @return java.util.List + */ + @Override + public List getAllByUserIdAndCourseId(Long userId, String courseId) { + if (null != userId && null != courseId) { + List processList = processMapper.selectList(Wrappers.lambdaQuery(Process.class) + .eq(Process::getUserId, userId) + .eq(Process::getCourseId, courseId)); + return BeanUtil.copyToList(processList, ProcessVO.class); + } + return null; + } + private static void verify(List processes) { for (Process process : processes) { // 校验状态 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 0e53fff0..cc925792 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.course.service.impl; +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; @@ -20,6 +21,7 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.UUID; /** * 驾照报名订单 Service 实现类 @@ -110,4 +112,53 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl and dsp.user_id = #{entity.userId} and dsp.course_id = #{entity.courseId} -order by dsp.create_time desc + ORDER BY + (CASE + WHEN exam_status = '1' AND finance_pass IS NULL THEN 1 -- 优先级最高 + WHEN exam_status = '9' THEN 2 + WHEN status = '1' THEN 2 + ELSE 4 + END), + create_time DESC; -- 再按创建时间降序 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 041f85ca..23072325 100644 --- a/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml @@ -11,9 +11,16 @@