From 79fcb13cc7d6bcaf63b318f0f671d44c6c2b2cb6 Mon Sep 17 00:00:00 2001 From: Lx <935448346@qq.com> Date: Thu, 19 Jun 2025 15:35:33 +0800 Subject: [PATCH] 0619 --- .../base/constant/SchoolBaseConstants.java | 10 +++ .../controller/admin/ProcessController.java | 6 +- .../course/entity/SchoolCommission.java | 8 ++ .../module/course/service/ProcessService.java | 4 +- .../service/impl/ProcessServiceImpl.java | 36 ++++++++- .../impl/SchoolCourseOrderServiceImpl.java | 80 +++++++++++++++++-- .../yudao/module/course/vo/ProcessVO.java | 6 ++ .../impl/StudentScoreInputServiceImpl.java | 36 +++++++++ 8 files changed, 174 insertions(+), 12 deletions(-) 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 8d328333..b19ad58e 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 @@ -150,4 +150,14 @@ public interface SchoolBaseConstants { */ public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_PAY_TO_MEMBER = "学员 %s 订单已支付!"; + /** + * 审核不通过 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_NOT_PASS = "驾校学员 %s ,身份证号:%s,科目 %s 的提成审核未通过,原因:%s 。请查看!"; + + /** + * 待审核 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_WAIT = "驾校学员 %s ,身份证号:%s,科目 %s 的考试已通过,提成待审核,请查看!"; + } 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 06ce88c7..d474b981 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 @@ -142,15 +142,15 @@ public class ProcessController { /** * 财务审核 * - * @param process {@link Process} + * @param processVO {@link Process} * @return cn.iocoder.yudao.framework.common.pojo.CommonResult * @author PQZ * @date 15:23 2025/2/18 **/ @PostMapping("/check") @Operation(summary = "财务审核") - public CommonResult saveSchoolCoach(@Valid @RequestBody Process process) { - processService.checkProcess(process); + public CommonResult saveSchoolCoach(@Valid @RequestBody ProcessVO processVO) { + processService.checkProcess(processVO); return success(true); } 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 7b6f3632..568c084d 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 @@ -48,6 +48,10 @@ public class SchoolCommission extends TenantBaseDO { * 学生姓名 */ private String studentName; + /** + * 学院身份证号 + */ + private String studentIdCard; /** * 提成金额 */ @@ -76,5 +80,9 @@ public class SchoolCommission extends TenantBaseDO { * 支付时间 */ private Date payTime; + /** + * 审核备注 + */ + private String checkRemark; } 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 77088e2a..a5a7b8b8 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 @@ -99,11 +99,11 @@ public interface ProcessService extends IService { /** * 财务审核 * - * @param process {@link Process} + * @param processVO {@link Process} * @author PQZ * @date 15:24 2025/2/18 **/ - void checkProcess(Process process); + void checkProcess(ProcessVO processVO); /** * 保存学员课程进度 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 bd7a64f3..e3c3c8e0 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 @@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; 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.context.TenantContextHolder; import cn.iocoder.yudao.module.base.constant.SchoolBaseConstants; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.mapper.DlDriveSchoolCourseMapper; @@ -33,8 +34,10 @@ import cn.iocoder.yudao.module.exam.mapper.ExamBatchItemMapper; import cn.iocoder.yudao.module.exam.vo.ExamBatchItemNewVO; import cn.iocoder.yudao.module.jx.domain.DriveSchoolDeduct; import cn.iocoder.yudao.module.jx.service.IDriveSchoolDeductService; +import cn.iocoder.yudao.module.system.api.permission.RoleApi; 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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -97,6 +100,9 @@ public class ProcessServiceImpl extends ServiceImpl impl @Resource private SchoolCourseSchemeService schemeService; + @Resource + private RoleApi roleApi; + /** * 教练查自己带教的课程和科目 @@ -343,7 +349,7 @@ public class ProcessServiceImpl extends ServiceImpl impl }*/ @Override @Transactional(rollbackFor = Exception.class) - public void checkProcess(Process process) { + public void checkProcess(ProcessVO process) { // 查询原始数据和当前用户信息 Process oldProcess = getById(process.getId()); Long userId = SecurityFrameworkUtils.getLoginUserId(); @@ -355,6 +361,20 @@ public class ProcessServiceImpl extends ServiceImpl impl return; } + if(!process.getFinancePass()){ + // 审核不通过需要发送站内信通知(姓名、科目、原因、时间、审核人) + Long tenantId = TenantContextHolder.getTenantId(); + List officeStaffList = roleApi.selectUserListByRoleCode(tenantId, "school_staff"); + + if (officeStaffList != null && !officeStaffList.isEmpty()) { + String officeMessage = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_NOT_PASS, process.getUserName(), process.getStudentIdCard(), process.getSubject(), process.getFinanceRemark()); + + for (UserDTO staff : officeStaffList) { + schoolNotifyMessageSendService.sendMessage(staff.getId(), officeMessage, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN, null); + } + } + } + // 查询提成规则 DriveSchoolCourseDeduct deduct = deductService.getOne( Wrappers.lambdaQuery() @@ -375,6 +395,7 @@ public class ProcessServiceImpl extends ServiceImpl impl schoolCommission.setSubject(String.valueOf(oldProcess.getSubject())); schoolCommission.setCheckId(sysUser.getId()); schoolCommission.setCheckName(sysUser.getNickname()); + schoolCommission.setCheckRemark(process.getFinanceRemark()); // 检查是否已存在记录 SchoolCommission existing = schoolCommissionService.getOne( @@ -397,6 +418,7 @@ public class ProcessServiceImpl extends ServiceImpl impl schoolCommission.setId(existing.getId()); schoolCommission.setDeleted(!process.getFinancePass()); schoolCommissionService.removeById(existing.getId()); + } } else if (process.getFinancePass()) { @@ -788,15 +810,27 @@ public class ProcessServiceImpl extends ServiceImpl impl List courseByInfo = schoolCourseOrderService.getCourseByInfo(userId, courseId); BigDecimal studentPay = BigDecimal.ZERO; BigDecimal studentRemainingPay = BigDecimal.ZERO; + String studentIdCard = null; if (!courseByInfo.isEmpty()) { studentPay = courseByInfo.get(0).getReserveMoney() != null ? courseByInfo.get(0).getReserveMoney() : BigDecimal.ZERO; studentRemainingPay = courseByInfo.get(0).getRestMoney() != null ? courseByInfo.get(0).getRestMoney() : BigDecimal.ZERO; + studentIdCard = courseByInfo.get(0).getUserNo() != null ? + courseByInfo.get(0).getUserNo() : null; } processVO.setCoachCommission(deduct); processVO.setStudentPay(studentPay); processVO.setStudentRemainingPay(studentRemainingPay); + processVO.setStudentIdCard(studentIdCard); + List list = this.lambdaQuery() + .eq(Process::getCoachId, processVO.getCoachId()) + .eq(Process::getCourseId, processVO.getCourseId()) + .eq(Process::getUserId, processVO.getUserId()) + .eq(Process::getDeleted, false) + .orderByAsc(Process::getSubject) + .list(); + processVO.setProcessList(list); return processVO; } 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 ddc24c13..6f9b7e48 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 @@ -232,13 +232,81 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl processList = processService.lambdaQuery() .eq(Process::getUserId, oldOrder.getUserId()) - .eq(Process::getCourseId, oldOrder.getCourseId())); + .eq(Process::getCourseId, oldOrder.getCourseId()) + .list(); + + if (!processList.isEmpty()) { + for (Process process : processList) { + // 如果课程变化,更新课程信息 + if (isCourseChanged) { + process.setCourseId(createReqVO.getCourseId()); + process.setCourseName(createReqVO.getCourseName()); + } + // 如果教练变化,更新教练信息 + if (isCoachChanged) { + if (createReqVO.getCoachUserId() != null) { + process.setCoachId(Long.valueOf(createReqVO.getCoachUserId())); + } + process.setCoachName(createReqVO.getCoachUserName()); + } + processService.updateById(process); + } + } } + /*//判断新订单课程与旧订单课程是否一致 + if (!oldOrder.getCourseId().equals(createReqVO.getCourseId())) { + // 查询所有进度 + List processList = processService.lambdaQuery() + .eq(Process::getUserId, oldOrder.getUserId()) + .eq(Process::getCourseId, oldOrder.getCourseId()) + .list(); + + if (!processList.isEmpty()) { + for (Process process : processList) { + // 更新课程ID + process.setCourseId(createReqVO.getCourseId()); + // 更新课程名称 + process.setCourseName(createReqVO.getCourseName()); + // 更新教练ID + process.setCoachId(Long.valueOf(createReqVO.getCoachUserId())); + // 更新教练名称 + process.setCoachName(createReqVO.getCoachUserName()); + processService.updateById(process); + } + } + } + // 如果课程一直,判断教练是否一致 + if (!oldOrder.getCoachUserId().equals(createReqVO.getCoachUserId())) { + // 查询所有进度 + List processList = processService.lambdaQuery() + .eq(Process::getUserId, oldOrder.getUserId()) + .eq(Process::getCourseId, oldOrder.getCourseId()) + .list(); + + if (!processList.isEmpty()) { + for (Process process : processList) { + // 更新教练ID + process.setCoachId(Long.valueOf(createReqVO.getCoachUserId())); + // 更新教练名称 + process.setCoachName(createReqVO.getCoachUserName()); + processService.updateById(process); + } + } + }*/ + //判断新订单课程与旧订单课程是否一致 +// if (!oldOrder.getCourseId().equals(createReqVO.getCourseId())) { +// // 删除学习记录表中的课程记录 +// processService.remove(Wrappers.lambdaQuery(Process.class) +// .eq(Process::getUserId, oldOrder.getUserId()) +// .eq(Process::getCourseId, oldOrder.getCourseId())); +// } SchoolCourseOrder schoolCourseOrder = BeanUtil.copyProperties(oldOrder, SchoolCourseOrder.class); schoolCourseOrder.setOldOrderId(oldOrder.getId()); @@ -254,7 +322,7 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl processList; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/impl/StudentScoreInputServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/impl/StudentScoreInputServiceImpl.java index dbb2c962..ce15d2c4 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/impl/StudentScoreInputServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/service/impl/StudentScoreInputServiceImpl.java @@ -4,7 +4,10 @@ import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; +import cn.iocoder.yudao.module.base.constant.SchoolBaseConstants; +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService; +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.service.ProcessService; @@ -19,12 +22,17 @@ import cn.iocoder.yudao.module.exam.vo.ExamBatchItemNewVO; import cn.iocoder.yudao.module.jx.domain.StudentScoreInput; import cn.iocoder.yudao.module.jx.mapper.StudentScoreInputMapper; import cn.iocoder.yudao.module.jx.service.StudentScoreInputService; +import cn.iocoder.yudao.module.system.api.permission.RoleApi; +import cn.iocoder.yudao.module.system.api.user.dto.UserDTO; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; @Service @@ -50,6 +58,12 @@ public class StudentScoreInputServiceImpl implements StudentScoreInputService { @Autowired private SchoolCourseOrderService schoolCourseOrderService; + @Resource + private RoleApi roleApi; + + @Autowired + private SchoolNotifyMessageSendService schoolNotifyMessageSendService; + /** * 录入学员成绩 */ @@ -69,6 +83,28 @@ public class StudentScoreInputServiceImpl implements StudentScoreInputService { // 如果是科2和科3 需要创建批次信息 if(studentScoreInput.getSubject() == 2 || studentScoreInput.getSubject() == 3){ + + if("1".equals(studentScoreInput.getExamStatus())){ + // 向会计和出纳发送信息 + Long tenantId = TenantContextHolder.getTenantId(); + List kjStaffList = roleApi.selectUserListByRoleCode(tenantId, "kj"); + List cnStaffList = roleApi.selectUserListByRoleCode(tenantId, "cn"); + List allStaffList = new ArrayList<>(); + allStaffList.addAll(kjStaffList); + allStaffList.addAll(cnStaffList); + DlDriveSchoolStudent studentByUserId = dlDriveSchoolStudentService.getStudentByUserId(studentScoreInput.getUserId()); + String studentIdCard = null; + if(studentByUserId != null){ + studentIdCard = studentByUserId.getIdCard(); + } + if (allStaffList != null && !allStaffList.isEmpty()) { + String officeMessage = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_WAIT, studentScoreInput.getUserName(), studentIdCard, studentScoreInput.getSubject()); + for (UserDTO staff : allStaffList) { + schoolNotifyMessageSendService.sendMessage(staff.getId(), officeMessage, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN, null); + } + } + + } // 生成批次信息 ExamBatch examBatch = new ExamBatch(); String timestamp = DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss");