From ccc7cffdf12650e1794f615bc61483051a51e4eb Mon Sep 17 00:00:00 2001 From: Lx <935448346@qq.com> Date: Mon, 26 May 2025 15:28:27 +0800 Subject: [PATCH 01/16] 0526 --- .../iocoder/yudao/common/SchoolRoleEnum.java | 7 +- .../service/impl/ApiAppLoginServiceImpl.java | 5 + .../module/constant/InspectionConstants.java | 10 + .../module/constant/InspectionFileEnum.java | 5 +- .../controller/InspectionFileController.java | 9 + .../service/IInspectionFileService.java | 2 + .../impl/InspectionFileServiceImpl.java | 41 ++ .../admin/DlDriveSchoolCoachController.java | 137 +++++- .../admin/DlDriveSchoolStudentController.java | 57 ++- .../base/entity/DlDriveSchoolCoach.java | 8 +- .../base/entity/DlDriveSchoolCourse.java | 6 + .../base/entity/DlDriveSchoolStudent.java | 5 + .../base/mapper/DlDriveSchoolCoachMapper.java | 12 +- .../mapper/DlDriveSchoolStudentMapper.java | 7 + .../service/DlDriveSchoolCoachService.java | 47 ++ .../DlDriveSchoolCourseDeductService.java | 3 + .../service/DlDriveSchoolStudentService.java | 20 + .../service/impl/DataViewServiceImpl.java | 32 ++ .../impl/DlDriveSchoolCoachServiceImpl.java | 421 ++++++++++++++++++ .../DlDriveSchoolCourseDeductServiceImpl.java | 8 + .../impl/DlDriveSchoolCourseServiceImpl.java | 2 +- .../impl/DlDriveSchoolStudentServiceImpl.java | 202 ++++++++- .../module/base/vo/CoachStaffSaveVo.java | 104 +++++ .../module/base/vo/DlDriveSchoolCoachVO.java | 9 +- .../module/base/vo/DlDriveSchoolStaffVO.java | 2 + .../base/vo/DriveSchoolStudentExportVo.java | 148 ++++++ .../module/base/vo/ImportSchoolStaffVo.java | 31 ++ .../base/vo/SchoolStaffImportExcelVO.java | 66 +++ .../controller/admin/ProcessController.java | 54 ++- .../service/SchoolCourseOrderService.java | 1 + .../impl/SchoolCourseOrderServiceImpl.java | 16 + .../yudao/module/course/vo/ProcessVO.java | 11 + .../impl/StudentScoreInputServiceImpl.java | 4 +- .../mapper/base/DlDriveSchoolCoachMapper.xml | 65 ++- .../base/DlDriveSchoolStudentMapper.xml | 100 ++++- .../mapper/jx/DriveSchoolCarMapper.xml | 8 +- .../admin/permission/RoleController.java | 9 + .../dal/mysql/permission/UserRoleMapper.java | 1 + .../service/permission/RoleService.java | 1 + .../service/permission/RoleServiceImpl.java | 6 + .../main/resources/mapper/UserRoleMapper.xml | 38 ++ 41 files changed, 1690 insertions(+), 30 deletions(-) create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/CoachStaffSaveVo.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DriveSchoolStudentExportVo.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/ImportSchoolStaffVo.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/SchoolStaffImportExcelVO.java diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/common/SchoolRoleEnum.java b/dl-module-base/src/main/java/cn/iocoder/yudao/common/SchoolRoleEnum.java index 6da65e7a..fe442cf3 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/common/SchoolRoleEnum.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/common/SchoolRoleEnum.java @@ -22,7 +22,12 @@ public enum SchoolRoleEnum { /** * 驾校教练 */ - COACH("instructor","驾校教练"); + COACH("instructor","驾校教练"), + /** + * 驾校业务经理 + */ + BUSINESS("school_business", "驾校业务经理"); + /** * 角色code diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/staff/service/impl/ApiAppLoginServiceImpl.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/staff/service/impl/ApiAppLoginServiceImpl.java index 39aab7c8..eaa22ea5 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/staff/service/impl/ApiAppLoginServiceImpl.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/staff/service/impl/ApiAppLoginServiceImpl.java @@ -206,6 +206,11 @@ public class ApiAppLoginServiceImpl implements ApiAppLoginService { flag = true; thisRoleCodeList.add(SchoolRoleEnum.COACH.getCode()); thisRoleNameList.add(SchoolRoleEnum.COACH.getName()); + } else if (roleCodeList.contains(SchoolRoleEnum.BUSINESS.getCode())) { + //驾校教练 + flag = true; + thisRoleCodeList.add(SchoolRoleEnum.BUSINESS.getCode()); + thisRoleNameList.add(SchoolRoleEnum.BUSINESS.getName()); } user.setRoleCodes(String.join(",", thisRoleCodeList)); user.setRoleNames(String.join(",", thisRoleNameList)); diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/constant/InspectionConstants.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/constant/InspectionConstants.java index adf60091..9e1ec15d 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/constant/InspectionConstants.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/constant/InspectionConstants.java @@ -43,6 +43,16 @@ public class InspectionConstants { */ public static final String INSPECTION_STAFF_EQUIPMENT_KEY = "equipment"; + /** + * key的类型为员工 + */ + public static final String DRIVE_SCHOOL_STAFF_KEY = "coach"; + + /** + * key的类型为设备 + */ + public static final String DRIVE_SCHOOL_STUDENT_KEY = "student"; + /** * 检测接车订单表-没有接车 */ diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/constant/InspectionFileEnum.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/constant/InspectionFileEnum.java index 70740464..5e14e475 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/constant/InspectionFileEnum.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/constant/InspectionFileEnum.java @@ -11,7 +11,10 @@ import lombok.Getter; @Getter public enum InspectionFileEnum { FOLDER("staff", "员工文件夹"), - FILE("equipment", "设备文件夹"); + FILE("equipment", "设备文件夹"), + COACH("coach", "驾校员工文件夹"), + student("student","驾校学员文件夹"); + private final String type; private final String desc; diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionFileController.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionFileController.java index f5836d18..c432600b 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionFileController.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionFileController.java @@ -210,4 +210,13 @@ public class InspectionFileController extends BaseController { public CommonResult queryTreeFolder(){ return success(inspectionFileService.queryTreeFolder()); } + + /** + * 查询文件夹树 + * @return + */ + @GetMapping("/queryTreeFolderForJx") + public CommonResult queryTreeFolderForJx(){ + return success(inspectionFileService.queryTreeFolderForJx()); + } } diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/IInspectionFileService.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/IInspectionFileService.java index 31da83a1..2090d7e8 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/IInspectionFileService.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/IInspectionFileService.java @@ -115,10 +115,12 @@ public interface IInspectionFileService extends IService { * @return 文件夹id */ Long addFolder(String folderName, String key); + Long addFolderForJx(String folderName, String key); /** * 查询文件夹树 * @return 文件夹树 */ List queryTreeFolder(); + List queryTreeFolderForJx(); } diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionFileServiceImpl.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionFileServiceImpl.java index 8c4349a5..59eb4009 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionFileServiceImpl.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionFileServiceImpl.java @@ -425,6 +425,36 @@ public class InspectionFileServiceImpl extends ServiceImpl().eq(InspectionFile::getDefaultKey, key)); + + //如果默认文件夹为空就新建 + if (fatherFolder == null) { + fatherFolder = new InspectionFile(); + fatherFolder.setFileName(InspectionFileEnum.getDescByType(key)); + fatherFolder.setType(InspectionConstants.INSPECTION_FOLDER); + fatherFolder.setDefaultKey(key); + fatherFolder.setServicePackageId("jiaxiao"); + baseMapper.insert(fatherFolder); + fatherFolder.setFileCode(fatherFolder.getId() + ","); + baseMapper.updateById(fatherFolder); + } + + InspectionFile inspectionFile = new InspectionFile(); + inspectionFile.setFatherId(fatherFolder.getId()); + inspectionFile.setFileName(folderName + InspectionConstants.INSPECTION_FOLDER_SUFFIX); + inspectionFile.setType(InspectionConstants.INSPECTION_FOLDER); + inspectionFile.setIsStaffFile(InspectionConstants.INSPECTION_IS_STAFF_FILE); + inspectionFile.setServicePackageId("jiaxiao"); + baseMapper.insert(inspectionFile); + inspectionFile.setFileCode(inspectionFile.getId() + ","); + baseMapper.updateById(inspectionFile); + + return inspectionFile.getId(); + } + /** * 查询文件夹树 * @@ -441,6 +471,17 @@ public class InspectionFileServiceImpl extends ServiceImpl queryTreeFolderForJx() { + //查询出所有文件夹 + List inspectionFiles = baseMapper.selectList(new LambdaQueryWrapper() + .eq(InspectionFile::getType, InspectionConstants.INSPECTION_FOLDER).eq(InspectionFile::getServicePackageId,"jiaxiao") + .orderBy(false, false, InspectionFile::getCreateTime)); + + //组成属性结构 + return buildTree(inspectionFiles); + } + /** * 构建树形结构 * 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 9f1db9ad..8fec8ff9 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 @@ -1,13 +1,20 @@ package cn.iocoder.yudao.module.base.controller.admin; +import cn.hutool.core.lang.Assert; +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCoach; +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.service.DlDriveSchoolCoachService; -import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachPageReqVO; -import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachRespVO; -import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachSaveReqVO; +import cn.iocoder.yudao.module.base.vo.*; +import cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo; +import cn.iocoder.yudao.module.inspection.vo.StaffImportExcelVO; +import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; +import cn.iocoder.yudao.module.system.service.permission.RoleService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; @@ -15,14 +22,19 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.annotation.security.PermitAll; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.util.List; +import java.io.IOException; +import java.util.*; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.excel.core.util.ExcelUtils.exportBlankTemplate; @Tag(name = "管理后台 - 驾校教练") @RestController @@ -33,6 +45,9 @@ public class DlDriveSchoolCoachController { @Resource private DlDriveSchoolCoachService dlDriveSchoolCoachService; + @Resource + private RoleService roleService; + /** * 驾校教练、普通员工列表 * @@ -66,6 +81,20 @@ public class DlDriveSchoolCoachController { return success(dlDriveSchoolCoachService.listSchoolCoach(pageReqVO)); } + /** + * 不分页获取驾校人员信息 + * + * @param pageReqVO {@link DlDriveSchoolCoachPageReqVO} + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult> + * @author PQZ + * @date 14:25 2025/2/7 + **/ + @GetMapping("/listPeople") + @Operation(summary = "不分页获取教练信息") + public CommonResult> listSchoolPeople(DlDriveSchoolCoachPageReqVO pageReqVO) { + return success(dlDriveSchoolCoachService.listSchoolPeople(pageReqVO)); + } + /** * 保存驾校教练 * @@ -141,4 +170,104 @@ public class DlDriveSchoolCoachController { public CommonResult getCoachByUserId(@RequestParam("userId") Long userId) { return success(dlDriveSchoolCoachService.getDlDriveSchoolCoachByUserId(userId)); } + + /** + * 获取检测员工详情 + * + * @param id + * @return + */ + @GetMapping("/getOnInternal") + public CommonResult getOnInternal(Long id) { + return success(dlDriveSchoolCoachService.getOnInternal(id)); + } + + @PutMapping("/update") + public CommonResult update(@RequestBody CoachStaffSaveVo coachStaffSaveVo) { + Assert.notNull(coachStaffSaveVo.getUserId(), "员工id不能为空"); + return success(dlDriveSchoolCoachService.edit(coachStaffSaveVo)); + } + + /** + * 新增驾校员工 + * + * @param coachStaffSaveVo + * @return + */ + @PostMapping("/saveNew") + public CommonResult saveNew(@RequestBody CoachStaffSaveVo coachStaffSaveVo) { + + return success(dlDriveSchoolCoachService.saveCoachStaff(coachStaffSaveVo)); + } + + /** + * 新增文件夹 + * @param userId 用户id + * @return + */ + @PostMapping("/addFolder") + public CommonResult addFolder(@RequestBody Long userId) { + return success(dlDriveSchoolCoachService.addFolder(userId)); + } + + /** + * 导入 + */ + @PostMapping("/import") + public CommonResult importUser(@RequestParam("file") MultipartFile file) { + try { + List list = ExcelUtils.read(file, SchoolStaffImportExcelVO.class); + Map map = dlDriveSchoolCoachService.importStaff(list); + return success(map); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } + + /** + * 模板 + * + * @param response + * @throws IOException + */ + @GetMapping("/get-import-template") + public void importTemplate(HttpServletResponse response) throws IOException { + String[] head = {"员工姓名", "岗位", "身份证号码", "年龄", "电话号码", "性别", "教龄", "车牌号", "居住地址", "户籍地址", "个人简介"}; + + // 下拉框列及选项:列索引 -> 下拉框选项 + Map dropdownColumns = new HashMap<>(); + + + //查询岗位 + RoleDO roleDO = new RoleDO(); + roleDO.setServicePackageId("jiaxiao"); + List roleDOS = roleService.pageByQuery(roleDO); + + String[] roles = roleDOS.stream() + .map(RoleDO::getName) + .toArray(String[]::new); + + dropdownColumns.put(1, roles); + String[] genders = {"男", "女"}; + dropdownColumns.put(5, genders); + + List> exampleDataList = Arrays.asList( + Arrays.asList("测试员工", "岗位是下拉框选择", "xxxxxxxxxxxxxxxxx", "年龄", "电话号码", "性别", "教龄", "车牌号", "居住地址", "户籍地址", "个人简介") + ); + + List textColumns = Collections.singletonList(3); + + // 导出空白模板到Excel + exportBlankTemplate(response, "staff_template.xlsx", "员工信息", head, dropdownColumns, true, exampleDataList, textColumns); + } + + @GetMapping("/export") + @ApiAccessLog(operateType = EXPORT) + public void exportUserList(SchoolStaffImportExcelVO query, + HttpServletResponse response) throws IOException { + List list = dlDriveSchoolCoachService.getAll(query); + // 输出 Excel + ExcelUtils.write(response, "员工数据.xls", "数据", SchoolStaffImportExcelVO.class, + list); + } } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java index 3a2ab82c..1dd1e8f4 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java @@ -1,9 +1,15 @@ package cn.iocoder.yudao.module.base.controller.admin; import cn.hutool.core.date.DateUtil; +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO; +import cn.iocoder.yudao.module.base.vo.DriveSchoolStudentExportVo; +import cn.iocoder.yudao.module.inspection.query.InspectionStaffQuery; +import cn.iocoder.yudao.module.inspection.vo.InspectionStaffExportVo; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; @@ -14,10 +20,13 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.util.List; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 驾校学员") @@ -65,6 +74,12 @@ public class DlDriveSchoolStudentController { return success(schoolStudentService.queryStudentById(id)); } + @GetMapping("/getByUserId") + @Operation(summary = "获得驾校学员") + public CommonResult getDlDriveSchoolStudent(@RequestParam("id") Long id) { + return success(schoolStudentService.getStudentByUserId(id)); + } + /** * 分页获取学员列表 * @@ -114,6 +129,21 @@ public class DlDriveSchoolStudentController { return success(schoolStudentService.queryCoachListPage(pageReqVO, page)); } + /** + * 业务经理查自己招生列表 + * + * @author vinjor-M + * @date 17:20 2025/2/12 + **/ + @GetMapping("/myStudentBusinessPage") + @Operation(summary = "业务经理查自己招生列表") + public CommonResult> myStudentBusinessPage(@Valid DlDriveSchoolStudentVO pageReqVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo, pageSize); + return success(schoolStudentService.queryBusinessListPage(pageReqVO, page)); + } + /** * @param type 时间查询类型(01驾校统招,02教练自招,03自来客户) * @param timeType 时间查询类型(all-全部|day-当日|month-当月|more-自定义) @@ -156,7 +186,7 @@ public class DlDriveSchoolStudentController { /** * 查询自来学生列表 * @author PQZ - * @date 11:41 2025/2/20 + * @date 11:41 2025/2/20 * @param timeType 时间查询类型(all-全部|day-当日|month-当月|more-自定义) * @param startTime 查询时间范围--开始 * @param endTime 查询时间范围--结束 @@ -204,5 +234,26 @@ public class DlDriveSchoolStudentController { return success(schoolStudentService.queryStudentByUniqueCode(uniqueCode)); } - -} \ No newline at end of file + + /** + * 新增文件夹 + * @param userId 用户id + * @return + */ + @PostMapping("/addFolder") + public CommonResult addFolder(@RequestBody Long userId) { + return success(schoolStudentService.addFolder(userId)); + } + + + @GetMapping("/export") + @ApiAccessLog(operateType = EXPORT) + public void exportUserList(DlDriveSchoolStudent query, + HttpServletResponse response) throws IOException { + List list = schoolStudentService.getAll(query); + // 输出 Excel + ExcelUtils.write(response, "学员数据.xls", "数据", DriveSchoolStudentExportVo.class, + list); + } + +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCoach.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCoach.java index 0175136d..e73def07 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCoach.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCoach.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.base.entity; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; @@ -94,5 +95,10 @@ public class DlDriveSchoolCoach extends TenantBaseDO { * 其他证件 */ private String otherPhoto; + /** + * 文件夹id + */ + private Long folderId; -} \ No newline at end of file + +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCourse.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCourse.java index a9c45261..f8127318 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCourse.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCourse.java @@ -86,4 +86,10 @@ public class DlDriveSchoolCourse extends TenantBaseDO { * 课程详情 */ private String details; + + /**是否开启课程*/ + private String ifDisplay; + + /**是否开启课程*/ + private String ageGroup; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolStudent.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolStudent.java index fe84ed10..cfc3a326 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolStudent.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolStudent.java @@ -119,4 +119,9 @@ public class DlDriveSchoolStudent extends TenantBaseDO { */ private String drivingStudentCode; + /** + * 文件夹id + */ + private Long folderId; + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolCoachMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolCoachMapper.java index 47c4c432..25d3f080 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolCoachMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolCoachMapper.java @@ -1,15 +1,17 @@ package cn.iocoder.yudao.module.base.mapper; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCoach; -import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachPageReqVO; -import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachRespVO; -import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO; +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; +import cn.iocoder.yudao.module.base.vo.*; +import cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; 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 * @@ -44,4 +46,8 @@ public interface DlDriveSchoolCoachMapper extends BaseMapper * 根据邀请码查询教练信息 */ DlDriveSchoolCoach getCoachByUniqueCode(@Param("uniqueCode") String uniqueCode); + + CoachStaffSaveVo getOnInternal(Long id); + + List getAll(@Param("entity") SchoolStaffImportExcelVO query); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java index 11610f48..cee4726e 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java @@ -3,7 +3,10 @@ package cn.iocoder.yudao.module.base.mapper; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO; +import cn.iocoder.yudao.module.base.vo.DriveSchoolStudentExportVo; import cn.iocoder.yudao.module.base.vo.StudentCountVO; +import cn.iocoder.yudao.module.inspection.query.InspectionStaffQuery; +import cn.iocoder.yudao.module.inspection.vo.InspectionStaffExportVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -66,6 +69,7 @@ public interface DlDriveSchoolStudentMapper extends BaseMapper selectByCoachId(@Param("entity") DlDriveSchoolStudentVO pageReqVO, Page page); + IPage selectByBusinessId(@Param("entity") DlDriveSchoolStudentVO pageReqVO, Page page); /** * 查学生列表---驾校层面查询 @@ -98,6 +102,7 @@ public interface DlDriveSchoolStudentMapper extends BaseMapper selectStudentListCoach(@Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime); + List selectStudentListBusiness(@Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime); /** * app首页查询训练学员---指定条件下 @@ -146,4 +151,6 @@ public interface DlDriveSchoolStudentMapper extends BaseMapper **/ List indexCusStudentList(String startTime, String endTime); + + List getAll(@Param("entity") DlDriveSchoolStudent query); } 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 aae9d385..fc465d13 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 @@ -1,7 +1,10 @@ package cn.iocoder.yudao.module.base.service; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCoach; +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.vo.*; +import cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo; +import cn.iocoder.yudao.module.inspection.vo.StaffImportExcelVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -9,6 +12,7 @@ import org.apache.ibatis.annotations.Param; import javax.validation.Valid; import java.util.List; +import java.util.Map; /** * 驾校教练 Service 接口 @@ -38,6 +42,7 @@ public interface DlDriveSchoolCoachService extends IService **/ List listSchoolCoach(DlDriveSchoolCoachPageReqVO pageReqVO); List listSchoolCoachApp(DlDriveSchoolCoachPageReqVO pageReqVO); + List listSchoolPeople(DlDriveSchoolCoachPageReqVO pageReqVO); /** * @param staffVO {@link DlDriveSchoolStaffVO} @@ -104,6 +109,48 @@ public interface DlDriveSchoolCoachService extends IService * 根据邀请码查询教练信息 */ DlDriveSchoolCoach getCoachByUniqueCode(String uniqueCode); + CoachStaffSaveVo getOnInternal(Long id); + + /** + * 编辑驾校员工 + * + * @param coachStaffSaveVo + * @return + */ + boolean edit(CoachStaffSaveVo coachStaffSaveVo); + + /** + * 保存驾校员工 + * + * @param coachStaffSaveVo + * @return + */ + Long saveCoachStaff(CoachStaffSaveVo coachStaffSaveVo); + + /** + * 添加文件夹 + * + * @param userId 用户id + * @return 文件夹id + */ + Long addFolder(Long userId); + + /** + * 导入检测员工 + * + * @param list 检测员工 + * @return + */ + Map importStaff(List list); + + + /** + * 获取所有学员信息 + * + * @param query + * @return + */ + List getAll(SchoolStaffImportExcelVO query); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCourseDeductService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCourseDeductService.java index 003a4247..c90466c0 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCourseDeductService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DlDriveSchoolCourseDeductService.java @@ -40,4 +40,7 @@ public interface DlDriveSchoolCourseDeductService extends IService queryCoachListPage(DlDriveSchoolStudentVO pageReqVO, Page page); + IPage queryBusinessListPage(DlDriveSchoolStudentVO pageReqVO, Page page); /** * @param type 时间查询类型(01驾校统招,02教练自招,03自来客户) @@ -162,4 +166,20 @@ public interface DlDriveSchoolStudentService extends IService getAll(DlDriveSchoolStudent query); } 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 18684503..7f9b0025 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 @@ -260,10 +260,42 @@ public class DataViewServiceImpl implements DataViewService { List studentVOList = studentMapper.selectStudentListCoach(coachId,startTimeStr,endTimeStr); int overNum = (int) studentVOList.stream().filter(item -> null != item.getOrderGradTime()).count(); int noOverNum = studentVOList.size()-overNum; + // 按 courseType(C1/C2)统计 + long c1Total = studentVOList.stream().filter(item -> "C1".equals(item.getCourseType())).count(); + long c2Total = studentVOList.stream().filter(item -> "C2".equals(item.getCourseType())).count(); Map studentInfoMap = new HashMap<>(); studentInfoMap.put("allNum",studentVOList.size()); studentInfoMap.put("overNum",overNum); studentInfoMap.put("noOverNum",noOverNum); + studentInfoMap.put("c1Total", c1Total); + studentInfoMap.put("c2Total", c2Total); + rtnObj.setStudentInfo(studentInfoMap); + /*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",showedPay); + rtnObj.setMoneyInfo(moneyInfoMap); + }else if("business".equals(type)){ + //业务经理查询 + /*1.招生情况*/ + List studentVOList = studentMapper.selectStudentListBusiness(coachId,startTimeStr,endTimeStr); + int overNum = (int) studentVOList.stream().filter(item -> null != item.getOrderGradTime()).count(); + int noOverNum = studentVOList.size()-overNum; + // 按 courseType(C1/C2)统计 + long c1Total = studentVOList.stream().filter(item -> "C1".equals(item.getCourseType())).count(); + long c2Total = studentVOList.stream().filter(item -> "C2".equals(item.getCourseType())).count(); + Map studentInfoMap = new HashMap<>(); + studentInfoMap.put("allNum",studentVOList.size()); + studentInfoMap.put("overNum",overNum); + studentInfoMap.put("noOverNum",noOverNum); + studentInfoMap.put("c1Total", c1Total); + studentInfoMap.put("c2Total", c2Total); rtnObj.setStudentInfo(studentInfoMap); /*4.财务情况-查教练自己应得的提成-*/ List schoolCommissionList = commissionMapper.selectByCoachId(coachId,startTimeStr,endTimeStr); 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 5c7b1d8c..3b7087df 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,21 +1,35 @@ package cn.iocoder.yudao.module.base.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.ObjectUtil; 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.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCoach; +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; 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.constant.InspectionConstants; 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.infra.dal.dataobject.file.FileDO; +import cn.iocoder.yudao.module.inspection.entity.InspectionFile; +import cn.iocoder.yudao.module.inspection.entity.InspectionStaff; +import cn.iocoder.yudao.module.inspection.service.IInspectionFileService; +import cn.iocoder.yudao.module.inspection.vo.ImportStaffVo; +import cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo; +import cn.iocoder.yudao.module.inspection.vo.StaffImportExcelVO; import cn.iocoder.yudao.module.jx.domain.DriveSchoolCar; import cn.iocoder.yudao.module.jx.service.IDriveSchoolCarService; import cn.iocoder.yudao.module.jx.utils.StringUtils; @@ -26,10 +40,18 @@ 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.system.api.user.dto.UserRoleDTO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; +import cn.iocoder.yudao.module.system.service.permission.RoleService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; 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.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; @@ -42,6 +64,7 @@ import javax.annotation.Resource; import java.text.DecimalFormat; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.stream.Collectors; import static cn.iocoder.yudao.common.BaseConstants.PASSWORD_DEFAULT; import static cn.iocoder.yudao.framework.common.config.CommonStr.USER_TYPE_STAFF; @@ -60,6 +83,8 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl + * @author PQZ + * @date 14:26 2025/2/7 + **/ + @Override + public List listSchoolPeople(DlDriveSchoolCoachPageReqVO pageReqVO) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(BaseDO::getDeleted, 0); + if (StringUtils.isNotEmpty(pageReqVO.getName())) { + lambdaQueryWrapper.like(DlDriveSchoolCoach::getName, pageReqVO.getName()); + } + return list(lambdaQueryWrapper); + } + /** * @param staffVO {@link DlDriveSchoolStaffVO} @@ -183,6 +234,8 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl userRoleDTOS = permissionService.userRoleDTOList(Collections.singletonList(id)); + coachStaffSaveVo.setRoleIds(userRoleDTOS.stream() + .filter(role -> "jiaxiao".equals(role.getServicePackageId())) + .map(UserRoleDTO::getRoleId) + .collect(Collectors.toList())); + //将驾驶证类型转为数组 + /*if (ObjectUtil.isNotEmpty(coachStaffSaveVo.getDriverLicenseType())) { + coachStaffSaveVo.setDriverLicenseTypeArr(Arrays.asList(inspectionStaffSaveVo.getDriverLicenseType().split(","))); + }*/ + //查询文件表文件夹id是否存在 + if (ObjectUtil.isNotEmpty(coachStaffSaveVo.getFolderId())) { + InspectionFile folder = inspectionFileService.getOne(Wrappers.lambdaQuery().eq(InspectionFile::getId, coachStaffSaveVo.getFolderId())); + if (ObjectUtil.isNull(folder)) { + coachStaffSaveVo.setFolderId(null); + } + } + return coachStaffSaveVo; + } + + + /** + * 编辑检测员工 + * + * @param coachStaffSaveVo + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean edit(CoachStaffSaveVo coachStaffSaveVo) { + //更新system_users主表 + UserSaveReqVO userDTO = BeanUtil.copyProperties(coachStaffSaveVo, UserSaveReqVO.class); + userDTO.setId(coachStaffSaveVo.getUserId()); + userService.updateUser(userDTO); + + + //查询员工子表是否存在数据 + DlDriveSchoolCoach staff = this.getOne(Wrappers.lambdaQuery().eq(DlDriveSchoolCoach::getUserId, coachStaffSaveVo.getUserId())); + if (ObjectUtil.isNull(staff)) { + staff = new DlDriveSchoolCoach(); + BeanUtil.copyProperties(coachStaffSaveVo, staff); + //新增 + this.save(staff); + } else { + //更新检测员工子表 + String id = staff.getId(); + System.out.println("复制前 staff ID: " + staff.getId()); + BeanUtil.copyProperties(coachStaffSaveVo, staff); + System.out.println("复制后 staff ID: " + staff.getId()); + staff.setId(id); + this.updateById(staff); + } + + //查询文件夹 + DlDriveSchoolCoach staff1 = this.getOne(Wrappers.lambdaQuery().eq(DlDriveSchoolCoach::getUserId, coachStaffSaveVo.getUserId())); + if (CollUtil.isNotEmpty(coachStaffSaveVo.getFileList())) { + addFile(coachStaffSaveVo.getFileList(), coachStaffSaveVo.getNickname(), staff1.getFolderId(), staff1.getUserId()); + } + + return true; + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Long saveCoachStaff(CoachStaffSaveVo coachStaffSaveVo) { + //新增system_users主表 + UserSaveReqVO userDTO = BeanUtil.copyProperties(coachStaffSaveVo, UserSaveReqVO.class); + userDTO.setId(coachStaffSaveVo.getUserId()); + //获取当前人的租户id + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + userDTO.setTenantId(loginUser.getTenantId()); + Long userId = userService.createUser(userDTO); + +// //查询检测基础员工角色 +// List role = roleService.getRoleListByCodesTenant(Collections.singletonList(InspectionConstants.INSPECTION_BASE_STAFF_ROLE)); +// +// if (ObjectUtil.isNull(role)) { +// throw new RuntimeException("检测基础员工角色不存在"); +// } +// +// Set roleIds = role.stream().map(RoleDO::getId).collect(Collectors.toSet()); +// //设置角色为检测基础员工 +// permissionService.assignUserRole(userId, roleIds); + +// DlDriveSchoolCoach dlDriveSchoolCoach = BeanUtil.copyProperties(coachStaffSaveVo, DlDriveSchoolCoach.class); + DlDriveSchoolCoach dlDriveSchoolCoach = new DlDriveSchoolCoach(); + dlDriveSchoolCoach.setUserId(userId); + dlDriveSchoolCoach.setName(coachStaffSaveVo.getNickname()); + dlDriveSchoolCoach.setCarId(coachStaffSaveVo.getCarId()); + dlDriveSchoolCoach.setPhone(coachStaffSaveVo.getMobile()); + dlDriveSchoolCoach.setIdNumber(coachStaffSaveVo.getIdNumber()); + dlDriveSchoolCoach.setRegAddress(coachStaffSaveVo.getRegAddress()); + dlDriveSchoolCoach.setAddress(coachStaffSaveVo.getAddress()); + dlDriveSchoolCoach.setSeniority(coachStaffSaveVo.getSeniority()); + dlDriveSchoolCoach.setInstructorDesc(coachStaffSaveVo.getInstructorDesc()); + dlDriveSchoolCoach.setAge(coachStaffSaveVo.getAge()); + dlDriveSchoolCoach.setSex(coachStaffSaveVo.getSex()); + dlDriveSchoolCoach.setType(coachStaffSaveVo.getType()); + //新增检测员工子表 + this.save(dlDriveSchoolCoach); + if (ObjectUtil.isNotEmpty(coachStaffSaveVo.getFileList())) { + addFile(coachStaffSaveVo.getFileList(), coachStaffSaveVo.getNickname(), null, coachStaffSaveVo.getUserId()); + } + return dlDriveSchoolCoach.getUserId(); + } + + + /** + * 添加文件夹 + * + * @param userId 用户id + * @return 文件夹id + */ + @Override + public Long addFolder(Long userId) { + AdminUserDO user = userService.getUser(userId); + if (ObjectUtil.isNotEmpty(user)) { + Long folderId = inspectionFileService.addFolderForJx(user.getNickname(), InspectionConstants.DRIVE_SCHOOL_STAFF_KEY); + + //查询员工子表是否存在数据 + DlDriveSchoolCoach staff = this.getOne(Wrappers.lambdaQuery().eq(DlDriveSchoolCoach::getUserId, userId)); + if (ObjectUtil.isNull(staff)) { + staff = new DlDriveSchoolCoach(); + staff.setUserId(userId); + staff.setFolderId(folderId); + //新增 + this.save(staff); + } else { + //修改文件夹id + this.update(Wrappers.lambdaUpdate().eq(DlDriveSchoolCoach::getUserId, userId).set(DlDriveSchoolCoach::getFolderId, folderId)); + } + return folderId; + } else { + log.error("用户不存在"); + return null; + } + } + + + public void addFile(List fileList, String nickname, Long fatherId, Long userId) { + if (ObjectUtil.isEmpty(fatherId)) { + //添加文件夹 + InspectionFile inspectionFile = new InspectionFile(); + inspectionFile.setFileName(nickname + InspectionConstants.INSPECTION_FOLDER_SUFFIX); + inspectionFile.setType(InspectionConstants.INSPECTION_FOLDER); + inspectionFile.setServicePackageId("jiaxiao"); + fatherId = inspectionFileService.insertInspectionFile(inspectionFile).getId(); + + //更新员工子表中的文件夹id + this.update(Wrappers.lambdaUpdate() + .eq(DlDriveSchoolCoach::getUserId, userId) + .set(DlDriveSchoolCoach::getFolderId, fatherId)); + } else { + + //删除文件下的所有文件 + inspectionFileService.remove(Wrappers.lambdaQuery() + .eq(InspectionFile::getFatherId, fatherId) + .eq(InspectionFile::getType, InspectionConstants.INSPECTION_FILE) + .eq(InspectionFile::getIsStaffFile, InspectionConstants.INSPECTION_IS_STAFF_FILE)); + } + + //添加文件 + List fileDOList = new ArrayList<>(); + for (FileDO fileDO : fileList) { + InspectionFile file = new InspectionFile(); + file.setFileName(removeFileExtension(fileDO.getName())); + file.setFilePath(fileDO.getUrl()); + file.setType(InspectionConstants.INSPECTION_FILE); + file.setFatherId(fatherId); + file.setIsStaffFile(InspectionConstants.INSPECTION_IS_STAFF_FILE); + file.setServicePackageId("jiaxiao"); + fileDOList.add(file); + } + + //批量插入文件 + inspectionFileService.insertBatchInspectionFile(fileDOList); + } + + /** + * 去除文件名中的后缀 + * + * @param filename + * @return + */ + public String removeFileExtension(String filename) { + if (filename == null) { + return null; // 或者你可以选择返回一个空字符串,取决于你的业务需求 + } + int lastDotIndex = filename.lastIndexOf('.'); + if (lastDotIndex == -1) { + return filename; // 如果没有找到点,则返回原文件名 + } + return filename.substring(0, lastDotIndex); + } + + /** + * 导入检测员工 + * + * @param list 检测员工 + * @return + */ + @Override + public Map importStaff(List list) { + if (CollUtil.isEmpty(list)) { + throw new RuntimeException("导入数据为空"); + } + Map resultMap = new HashMap<>(); + + //校验信息 + ImportSchoolStaffVo importStaffVo = validImportStaff(list); + + //保存用户信息 + int saveNum = saveImportStaff(importStaffVo.getSuccessList()); + resultMap.put("saveNum", saveNum); + resultMap.put("failList", importStaffVo.getFailList()); + resultMap.put("successList", importStaffVo.getSuccessList()); + return resultMap; + } + + /** + * 保存检测员工 + * + * @param successList + * @return + */ + private int saveImportStaff(List successList) { + //将员工插入主表 + Map users = new HashMap<>(); + Map folderMap = new HashMap<>(); + for (SchoolStaffImportExcelVO schoolStaffImportExcelVO : successList) { + UserSaveReqVO createReqVO = new UserSaveReqVO(); + createReqVO.setUsername(schoolStaffImportExcelVO.getMobile()); + createReqVO.setMobile(schoolStaffImportExcelVO.getMobile()); + createReqVO.setNickname(schoolStaffImportExcelVO.getNickname()); + createReqVO.setPassword("123456"); + + Long userId = userService.createUser(createReqVO); + users.put(schoolStaffImportExcelVO.getMobile(), userId); + //创建员工文件夹 + Long folderId = addFolder(userId); + folderMap.put(userId, folderId); + //修改文件夹id + this.update(Wrappers.lambdaUpdate().eq(DlDriveSchoolCoach::getUserId, userId).set(DlDriveSchoolCoach::getFolderId, folderId)); + } + + + //插入检测员工子表 + List dlDriveSchoolCoachList = new ArrayList<>(); + for (SchoolStaffImportExcelVO schoolStaffImportExcelVO : successList) { + Long userId = users.get(schoolStaffImportExcelVO.getMobile()); + DlDriveSchoolCoach dlDriveSchoolCoach = BeanUtil.copyProperties(schoolStaffImportExcelVO, DlDriveSchoolCoach.class); + dlDriveSchoolCoach.setName(schoolStaffImportExcelVO.getNickname()); + dlDriveSchoolCoach.setPhone(schoolStaffImportExcelVO.getMobile()); + dlDriveSchoolCoach.setUserId(userId); + dlDriveSchoolCoach.setFolderId(folderMap.get(userId)); + dlDriveSchoolCoachList.add(dlDriveSchoolCoach); + + permissionService.assignUserRole(userId, Collections.singleton(schoolStaffImportExcelVO.getRoleId())); + this.update(dlDriveSchoolCoach, Wrappers.lambdaUpdate().eq(DlDriveSchoolCoach::getUserId, userId)); + } +// this.saveBatch(dlDriveSchoolCoachList); + return successList.size(); + } + + /** + * 验证导入员工数据 + * + * @param list + * @return + */ + private ImportSchoolStaffVo validImportStaff(List list) { + List successList = new ArrayList<>(); + List failList = new ArrayList<>(); + + //查询检测角色 + RoleDO roleDO = new RoleDO(); + roleDO.setServicePackageId("jiaxiao"); + List roleDOS = roleService.pageByQuery(roleDO); + Map roleMap = roleDOS.stream().collect(Collectors.toMap(RoleDO::getName, RoleDO::getId)); + + //根据手机号查询员工 + List list1 = userService.list(Wrappers.lambdaQuery().in(AdminUserDO::getMobile, list.stream().map(SchoolStaffImportExcelVO::getMobile).collect(Collectors.toList()))); + Map mobileMap = list1.stream().collect(Collectors.toMap(AdminUserDO::getMobile, AdminUserDO::getId)); + + //判断第一条数据是否是测试数据 + if (ObjectUtil.isNotEmpty(list)) { + if ("测试员工".equals(list.get(0).getNickname())) { + list.remove(0); + } + } + for (SchoolStaffImportExcelVO staffImportExcelVO : list) { + if (ObjectUtil.isNull(staffImportExcelVO)) { + continue; + } + //判断员工姓名是否为空 + if (ObjectUtil.isEmpty(staffImportExcelVO.getNickname())) { + staffImportExcelVO.setReason("员工姓名不能为空"); + failList.add(staffImportExcelVO); + continue; + } + // 判断手机号是否为空 + if (ObjectUtil.isEmpty(staffImportExcelVO.getMobile())) { + staffImportExcelVO.setReason("员工" + staffImportExcelVO.getNickname() + "手机号不能为空"); + failList.add(staffImportExcelVO); + continue; + } + //判断手机号是否存在 + if (ObjectUtil.isNotEmpty(mobileMap.get(staffImportExcelVO.getMobile()))) { + staffImportExcelVO.setReason("员工" + staffImportExcelVO.getNickname() + "的手机号已存在"); + failList.add(staffImportExcelVO); + continue; + } + //如果身份证存在验证身份证是否正确 + if (ObjectUtil.isNotEmpty(staffImportExcelVO.getIdNumber())) { + if (!IdcardUtil.isValidCard(staffImportExcelVO.getIdNumber())) { + staffImportExcelVO.setReason("员工" + staffImportExcelVO.getNickname() + "身份证格式不正确"); + failList.add(staffImportExcelVO); + continue; + } + } + //判断员工角色是否为空 + if (ObjectUtil.isEmpty(staffImportExcelVO.getRoleName())) { + staffImportExcelVO.setReason("员工" + staffImportExcelVO.getNickname() + "员工角色不能为空"); + failList.add(staffImportExcelVO); + continue; + } + String sex = staffImportExcelVO.getSex(); + if (ObjectUtil.isNotEmpty(sex)) { + sex = sex.trim(); + if ("男".equals(sex)) { + staffImportExcelVO.setSex("0"); + } else if ("女".equals(sex)) { + staffImportExcelVO.setSex("1"); + } else { + staffImportExcelVO.setSex(null); + } + } + String roleName = staffImportExcelVO.getRoleName(); + if(ObjectUtil.isNotEmpty(roleName)){ + roleName = roleName.trim(); + if("教练".equals(roleName)){ + staffImportExcelVO.setType("jl"); + } else if ("业务经理".equals(roleName)) { + staffImportExcelVO.setType("ywjl"); + }else { + staffImportExcelVO.setType("yg"); + } + } + //查询员工角色对应id + Long roleId = roleMap.get(staffImportExcelVO.getRoleName()); + staffImportExcelVO.setRoleId(roleId); + + successList.add(staffImportExcelVO); + } + ImportSchoolStaffVo importStaffVo = new ImportSchoolStaffVo(); + importStaffVo.setSuccessList(successList); + importStaffVo.setFailList(failList); + return importStaffVo; + } + + @Override + public List getAll(SchoolStaffImportExcelVO query) { + return baseMapper.getAll(query); + } } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseDeductServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseDeductServiceImpl.java index 51541958..5fbb3d3a 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseDeductServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/impl/DlDriveSchoolCourseDeductServiceImpl.java @@ -74,4 +74,12 @@ public class DlDriveSchoolCourseDeductServiceImpl extends ServiceImpl queryList(DlDriveSchoolCourseVO courseVO) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(BaseDO::getDeleted, 0); + lambdaQueryWrapper.eq(BaseDO::getDeleted, 0).eq(DlDriveSchoolCourse::getIfDisplay,"0"); if (StringUtils.isNotEmpty(courseVO.getName())) { lambdaQueryWrapper.like(DlDriveSchoolCourse::getName, courseVO.getName()); } 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 b754c441..ca3ce21e 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 @@ -19,17 +19,24 @@ import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService; import cn.iocoder.yudao.module.base.service.SchoolNotifyMessageSendService; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO; +import cn.iocoder.yudao.module.base.vo.DriveSchoolStudentExportVo; import cn.iocoder.yudao.module.base.vo.StudentCountVO; +import cn.iocoder.yudao.module.constant.InspectionConstants; import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.service.ProcessService; import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; +import cn.iocoder.yudao.module.inspection.entity.InspectionFile; +import cn.iocoder.yudao.module.inspection.service.IInspectionFileService; import cn.iocoder.yudao.module.jx.domain.DriveSchoolCourseOrder; import cn.iocoder.yudao.module.jx.utils.uuid.UUID; import cn.iocoder.yudao.module.staff.service.UniqueCodeService; 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.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -38,6 +45,7 @@ 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.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -86,6 +94,12 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl process.getStatus().equals("2")); +// boolean flag = list.stream().allMatch(process -> process.getStatus().equals("2")); + boolean flag = list.stream() + .filter(process -> process.getSubject() == 2 || process.getSubject() == 3) + .allMatch(process -> "2".equals(process.getStatus())); if (flag) { newProcess = list.stream().max(Comparator.comparing(Process::getSubject)).orElse(null); } else { @@ -359,6 +376,72 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl + * @author PQZ + * @date 10:41 2025/1/18 + **/ + @Override + public IPage queryBusinessListPage(DlDriveSchoolStudentVO pageReqVO, Page page) { + //默认查全部数据 + String startTimeStr = ""; + String endTimeStr = ""; + if ("more".equals(pageReqVO.getTimeType())) { + if (StringUtils.isNotEmpty(pageReqVO.getStartTime())) { + startTimeStr = pageReqVO.getStartTime() + " 00:00:01"; + } + if (StringUtils.isNotEmpty(pageReqVO.getEndTime())) { + endTimeStr = pageReqVO.getEndTime() + " 23:59:59"; + } + } else if ("month".equals(pageReqVO.getTimeType())) { + //当月 + startTimeStr = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 00:00:01"; + endTimeStr = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 23:59:59"; + } else if ("day".equals(pageReqVO.getTimeType())) { + //当天 + startTimeStr = DateUtil.formatDate(DateUtil.date()) + " 00:00:01"; + endTimeStr = DateUtil.formatDate(DateUtil.date()) + " 23:59:59"; + } + pageReqVO.setStartTime(startTimeStr); + pageReqVO.setStartTime(endTimeStr); + IPage pageResult = dlDriveSchoolStudentMapper.selectByBusinessId(pageReqVO, page); + /*pageResult.getRecords().forEach(item -> { + //查每个学生的当前所处的科目 + List list = processService.list(Wrappers.lambdaQuery() + .eq(Process::getUserId, item.getUserId()) + .eq(Process::getCoachId, item.getCoachId()) + .eq(Process::getCourseId, item.getCourseId()) + .orderByDesc(Process::getCreateTime)); + + Process newProcess = new Process(); + if (CollUtil.isNotEmpty(list)) { + // 查询正在进行的课程 + newProcess = list.stream().filter(process -> process.getStatus().equals("1")).findFirst().orElse(null); + if (ObjectUtil.isNotEmpty(newProcess)) { + item.setProcess(newProcess); + } else { + // 判断所有进度是否都是已完成 +// boolean flag = list.stream().allMatch(process -> process.getStatus().equals("2")); + boolean flag = list.stream() + .filter(process -> process.getSubject() == 2 || process.getSubject() == 3) + .allMatch(process -> "2".equals(process.getStatus())); + if (flag) { + newProcess = list.stream().max(Comparator.comparing(Process::getSubject)).orElse(null); + } else { + newProcess = list.stream().min(Comparator.comparing(Process::getSubject)).orElse(null); + } + } + } + + item.setProcess(newProcess); + });*/ + return pageResult; + } + /** * @param type 时间查询类型(01驾校统招,02教练自招,03自来客户) * @param coachId 教练id @@ -470,5 +553,122 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpllambdaQuery().eq(DlDriveSchoolStudent::getUserId, userId)); + if (ObjectUtil.isNull(staff)) { + staff = new DlDriveSchoolStudent(); + staff.setUserId(userId); + staff.setFolderId(folderId); + //新增 + this.save(staff); + } else { + //修改文件夹id + this.update(Wrappers.lambdaUpdate().eq(DlDriveSchoolStudent::getUserId, userId).set(DlDriveSchoolStudent::getFolderId, folderId)); + } + return folderId; + } else { + log.error("用户不存在"); + return null; + } + } + + /*@Override + public Long addFolder(Long userId) { + AdminUserDO user = userService.getUser(userId); + if (ObjectUtil.isNotEmpty(user)) { + Long folderId = inspectionFileService.addFolderForJx(user.getNickname(), InspectionConstants.DRIVE_SCHOOL_STUDENT_KEY); + + //查询员工子表是否存在数据 + DlDriveSchoolStudent staff = this.getOne(Wrappers.lambdaQuery().eq(DlDriveSchoolStudent::getUserId, userId)); + if (ObjectUtil.isNull(staff)) { + staff = new DlDriveSchoolStudent(); + staff.setUserId(userId); + staff.setFolderId(folderId); + //新增 + this.save(staff); + } else { + //修改文件夹id + this.update(Wrappers.lambdaUpdate().eq(DlDriveSchoolStudent::getUserId, userId).set(DlDriveSchoolStudent::getFolderId, folderId)); + } + return folderId; + } else { + log.error("用户不存在"); + return null; + } + }*/ + + public void addFile(List fileList, String nickname, Long fatherId, Long userId) { + if (ObjectUtil.isEmpty(fatherId)) { + //添加文件夹 + InspectionFile inspectionFile = new InspectionFile(); + inspectionFile.setFileName(nickname + InspectionConstants.INSPECTION_FOLDER_SUFFIX); + inspectionFile.setType(InspectionConstants.INSPECTION_FOLDER); + inspectionFile.setServicePackageId("jiaxiao"); + fatherId = inspectionFileService.insertInspectionFile(inspectionFile).getId(); + + //更新员工子表中的文件夹id + this.update(Wrappers.lambdaUpdate() + .eq(DlDriveSchoolStudent::getUserId, userId) + .set(DlDriveSchoolStudent::getFolderId, fatherId)); + } else { + + //删除文件下的所有文件 + inspectionFileService.remove(Wrappers.lambdaQuery() + .eq(InspectionFile::getFatherId, fatherId) + .eq(InspectionFile::getType, InspectionConstants.INSPECTION_FILE) + .eq(InspectionFile::getIsStaffFile, InspectionConstants.INSPECTION_IS_STAFF_FILE)); + } + + //添加文件 + List fileDOList = new ArrayList<>(); + for (FileDO fileDO : fileList) { + InspectionFile file = new InspectionFile(); + file.setFileName(removeFileExtension(fileDO.getName())); + file.setFilePath(fileDO.getUrl()); + file.setType(InspectionConstants.INSPECTION_FILE); + file.setFatherId(fatherId); + file.setIsStaffFile(InspectionConstants.INSPECTION_IS_STAFF_FILE); + file.setServicePackageId("jiaxiao"); + fileDOList.add(file); + } + + //批量插入文件 + inspectionFileService.insertBatchInspectionFile(fileDOList); + } + + /** + * 去除文件名中的后缀 + * + * @param filename + * @return + */ + public String removeFileExtension(String filename) { + if (filename == null) { + return null; // 或者你可以选择返回一个空字符串,取决于你的业务需求 + } + int lastDotIndex = filename.lastIndexOf('.'); + if (lastDotIndex == -1) { + return filename; // 如果没有找到点,则返回原文件名 + } + return filename.substring(0, lastDotIndex); + } + + + @Override + public List getAll(DlDriveSchoolStudent query) { + return baseMapper.getAll(query); + } } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/CoachStaffSaveVo.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/CoachStaffSaveVo.java new file mode 100644 index 00000000..9e89e78a --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/CoachStaffSaveVo.java @@ -0,0 +1,104 @@ +package cn.iocoder.yudao.module.base.vo; + +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCoach; +import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.util.List; +@Data +public class CoachStaffSaveVo extends DlDriveSchoolCoach { + + /** + * 员工编号 + */ + @ExcelIgnore + private String id; + /** + * 用户账号 + */ + @ExcelProperty("员工账号") + private String username; + /** + * 用户昵称 + */ + @ExcelProperty("员工名称") + private String nickname; + /** + * 用户类型 + */ + @ExcelIgnore + private String userType; + /** + * 备注 + */ + @ExcelIgnore + private String remark; + + /** + * 部门编号 + */ + @ExcelIgnore + private Long deptId; + /** + * 用户手机号码 + */ + @ExcelProperty("手机号") + private String mobile; + /** + * 用户密码 + */ + @ExcelIgnore + private String password; + /** + * 用户头像 + */ + @ExcelIgnore + private String avatar; + + /** + * 用户性别 + **/ + @ExcelIgnore + private String sex; + + /** + * 用户性别 + */ + @ExcelProperty(value = "用户性别") + private String sexStr; + + /** + * 用户状态 + */ + @ExcelIgnore + private Integer status; + + /** + * 用户状态 + */ + @ExcelProperty("状态") + private String statusStr; + + /** + * 用户邮箱 + */ + @ExcelProperty("邮箱") + private String email; + + /** + * 驾驶证类型集合 + */ + private List driverLicenseTypeArr; + + /** + * 文件集合 + */ + private List fileList; + + /** + * 角色集合 + */ + private List roleIds; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolCoachVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolCoachVO.java index 9507a9a4..190724fe 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolCoachVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolCoachVO.java @@ -1,11 +1,12 @@ package cn.iocoder.yudao.module.base.vo; +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolCoach; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Schema(description = "管理后台 - 驾校教练新增/修改 Request VO") @Data -public class DlDriveSchoolCoachVO { +public class DlDriveSchoolCoachVO extends DlDriveSchoolCoach { /**教练id*/ private String coachId; /**教练姓名*/ @@ -14,4 +15,8 @@ public class DlDriveSchoolCoachVO { private String coachPhone; /**任教科目*/ private String subject; -} \ No newline at end of file + /** + * 角色名称 多个角色以逗号隔开 + */ + private String roleNames; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java index 6773b3bc..825b0c9d 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java @@ -53,4 +53,6 @@ public class DlDriveSchoolStaffVO { private String startTime; /**查询时间范围--结束*/ private String endTime; + /**是否合格*/ + private String examStatus; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DriveSchoolStudentExportVo.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DriveSchoolStudentExportVo.java new file mode 100644 index 00000000..6d6cd841 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DriveSchoolStudentExportVo.java @@ -0,0 +1,148 @@ +package cn.iocoder.yudao.module.base.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * @Description: 检测员工导出vo + * @Author: 86187 + * @Date: 2025/01/23 17:51 + * @Version: 1.0 + */ +@Data +public class DriveSchoolStudentExportVo { + /** + * 姓名 + */ + @ExcelProperty("姓名") + private String name; + /** + * 头像 + */ + @ExcelIgnore + private String avatar; + /** + * 年龄 + */ + @ExcelProperty("年龄") + private Integer age; + /** + * 性别 + */ + @ExcelProperty(value = "性别") + private String sex; + /** + * 联系电话 + */ + @ExcelProperty(value = "电话") + private String phone; + /** + * 来源(01驾校统招,02教练自招,03自来客户) + */ + @ExcelProperty("来源") + private String source; + /** + * 来源id + */ + @ExcelIgnore + private Long sourceUserId; + /** + * 身份证号 + */ + @TableField("id_card") + @ExcelProperty("身份证号") + private String idCard; + /** + * 工作单位 + */ + @TableField("work_name") + @ExcelProperty("工作单位") + private String workName; + /** + * 户籍地址 + */ + @TableField("regist_address") + @ExcelProperty("户籍地址") + private String registAddress; + /** + * 家庭住址 + */ + @ExcelProperty("家庭住址") + private String address; + /** + * 人员类型(暂留) + */ + @ExcelIgnore + private String type; + /** + * 备注 + */ + @ExcelProperty("备注") + private String remark; + /** + * 用户id + */ + @ExcelIgnore + private Long userId; + /** + * 证件照 + */ + @ExcelIgnore + private String idPhoto; + /** + * 生活照 + */ + @ExcelIgnore + private String lifePhoto; + /** + * 其他照片 + */ + @ExcelIgnore + private String otherPhoto; + /** + * 拿证时间 + */ + @ExcelIgnore + private String passTime; + /** + * 毕业时间 + */ + @ExcelIgnore + private String gradTime; + /** + * 唯一码 + */ + @ExcelIgnore + @TableField("unique_code") +// @ExcelProperty("唯一码") + private String uniqueCode; + + /** + * 体检报告 + */ + @ExcelIgnore + private String examinationReport; + + /** + * 学员编码 + */ + @TableField("driving_student_code") + @ExcelProperty("学员编号") + private String drivingStudentCode; + + /** + * 文件夹id + */ + @ExcelIgnore + private Long folderId; + + @ExcelProperty("报名时间") + private String createTimeStr; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/ImportSchoolStaffVo.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/ImportSchoolStaffVo.java new file mode 100644 index 00000000..82369060 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/ImportSchoolStaffVo.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.base.vo; + +import cn.iocoder.yudao.module.inspection.vo.StaffImportExcelVO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description: 导入检测员工返回对象 + * @Author: 86187 + * @Date: 2025/02/13 11:46 + * @Version: 1.0 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ImportSchoolStaffVo { + /** + * 导入成功的集合 + */ + private List successList; + + /** + * 导入失败的集合 + */ + private List failList; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/SchoolStaffImportExcelVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/SchoolStaffImportExcelVO.java new file mode 100644 index 00000000..db410ee2 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/SchoolStaffImportExcelVO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.base.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * @Description: 检测员工Excel + * @Author: 86187 + * @Date: 2025/01/22 17:23 + * @Version: 1.0 + */ +@Data +@Accessors(chain = false) // 禁用链式调用 +@AllArgsConstructor +@NoArgsConstructor +public class SchoolStaffImportExcelVO { + + @ExcelProperty(value = "员工姓名", index = 0) + private String nickname; + + @ExcelProperty(value ="岗位", index = 1) + private String roleName; + + @ExcelProperty(value ="身份证号码", index = 2) + private String idNumber; + + @ExcelProperty(value ="年龄", index = 3) + private String age; + + @ExcelProperty(value ="电话号码", index = 4) + private String mobile; + + @ExcelProperty(value ="性别", index = 5) + private String sex; + + @ExcelProperty(value = "教龄", index = 6) + private String seniority; + + @ExcelProperty(value ="车牌号", index = 7) + private String carId; + + @ExcelProperty(value ="居住地址", index = 8) + private String address; + + @ExcelProperty(value ="户籍地址", index = 9) + private String regAddress; + + @ExcelProperty(value ="个人简介", index = 10) + private String instructorDesc; + + @ExcelIgnore + private String reason; + + @ExcelIgnore + private String type; + + /** + * 角色id + */ + @ExcelIgnore + private Long roleId; +} 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 f042738f..acf93387 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 @@ -3,19 +3,22 @@ package cn.iocoder.yudao.module.course.controller.admin; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; +import cn.iocoder.yudao.module.base.entity.DriveSchoolCourseDeduct; +import cn.iocoder.yudao.module.base.service.DlDriveSchoolCourseDeductService; import cn.iocoder.yudao.module.base.service.DlDriveSchoolCourseService; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCourseVO; import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.service.ProcessService; -import cn.iocoder.yudao.module.course.vo.ProcessAddVO; -import cn.iocoder.yudao.module.course.vo.ProcessAndExamBatchVO; -import cn.iocoder.yudao.module.course.vo.ProcessNewVO; -import cn.iocoder.yudao.module.course.vo.ProcessVO; +import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; +import cn.iocoder.yudao.module.course.vo.*; +import cn.iocoder.yudao.module.jx.domain.DriveSchoolDeduct; +import cn.iocoder.yudao.module.jx.service.IDriveSchoolDeductService; import com.baomidou.mybatisplus.core.metadata.IPage; 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.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -23,6 +26,7 @@ import javax.annotation.Resource; import javax.annotation.security.PermitAll; import javax.validation.Valid; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -37,6 +41,15 @@ public class ProcessController { @Resource private ProcessService processService; + @Autowired + private DlDriveSchoolCourseDeductService driveSchoolCourseDeductService; + + @Autowired + private IDriveSchoolDeductService driveSchoolDeductService; + + @Resource + private SchoolCourseOrderService schoolCourseOrderService; + @@ -100,7 +113,38 @@ public class ProcessController { @Operation(summary = "通过id 查询学员进度课程") @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult getDlDriveSchoolCoach(@RequestParam("id") String id) { - return success(BeanUtils.toBean(processService.getById(id), ProcessVO.class)); + ProcessVO processVO = BeanUtils.toBean(processService.getById(id), ProcessVO.class); + Long coachId = processVO.getCoachId(); + Integer subject = processVO.getSubject(); + Long userId = processVO.getUserId(); + String courseId = processVO.getCourseId(); + BigDecimal deduct = BigDecimal.ZERO; + DriveSchoolCourseDeduct courseDeduct = driveSchoolCourseDeductService.getDeductByCourseIdAndSubject(courseId, subject); + if (courseDeduct != null) { + if (courseDeduct.getDeduct() != null) { + deduct = courseDeduct.getDeduct(); + } + else if (courseDeduct.getCourseSubject() != null) { + DriveSchoolDeduct schoolDeduct = driveSchoolDeductService.queryBySubject(courseDeduct.getCourseSubject()); + if (schoolDeduct != null && schoolDeduct.getDeduct() != null) { + deduct = schoolDeduct.getDeduct(); + } + } + } + List courseByInfo = schoolCourseOrderService.getCourseByInfo(userId, courseId); + BigDecimal studentPay = BigDecimal.ZERO; + BigDecimal studentRemainingPay = BigDecimal.ZERO; + 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; + } + processVO.setCoachCommission(deduct); + processVO.setStudentPay(studentPay); + processVO.setStudentRemainingPay(studentRemainingPay); + + return success(processVO); } @GetMapping("/getProcessAndBatch") 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 75a339e0..5a219119 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 @@ -93,6 +93,7 @@ public interface SchoolCourseOrderService extends IService { * @return List */ List getCourseByLoginUser(Long loginUserId); + List getCourseByInfo(Long userId, String courseId); /** * 报名之后发送对应消息 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 f1b5e027..ebe87640 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 @@ -207,6 +207,22 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl + */ + @Override + public List getCourseByInfo(Long userId, String courseId) { + List list = list(Wrappers.lambdaQuery(SchoolCourseOrder.class) + .eq(SchoolCourseOrder::getUserId, userId) + .eq(SchoolCourseOrder::getCourseId, courseId) + .eq(SchoolCourseOrder::getIfEnd, SchoolBaseConstants.COMMON_NO) + .eq(SchoolCourseOrder::getIfAssignmentCoach, SchoolBaseConstants.SCHOOL_COURSE_ORDER_IS_ASSIGN_COACH)); + return BeanUtil.copyToList(list, SchoolCourseOrderVO.class); + } + /** * 报名之后发送对应消息 */ diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessVO.java index abfc95f0..a5da6ce4 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessVO.java @@ -2,6 +2,9 @@ package cn.iocoder.yudao.module.course.vo; import cn.iocoder.yudao.module.course.entity.Process; import lombok.Data; +import org.apache.poi.hpsf.Decimal; + +import java.math.BigDecimal; /** * 驾校-学员课程进度 DO @@ -17,4 +20,12 @@ public class ProcessVO extends Process { /** 更新人姓名 */ private String updateName; + /** 学员缴纳金额*/ + private BigDecimal studentPay; + + /** 教练提成*/ + private BigDecimal coachCommission; + + /** 学生尾款*/ + private BigDecimal studentRemainingPay; } 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 9b33a627..dbb2c962 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 @@ -99,7 +99,7 @@ public class StudentScoreInputServiceImpl implements StudentScoreInputService { // 更新批次通过率 examBatchItemServiceImpl.updateBatchPassRate(examBatch.getId()); } - /*if(studentScoreInput.getSubject() == 4 && "1".equals(studentScoreInput.getExamStatus())){ + if(studentScoreInput.getSubject() == 4 && "1".equals(studentScoreInput.getExamStatus())){ // 修改订单表的拿证时间 schoolCourseOrderService.update(Wrappers.lambdaUpdate(SchoolCourseOrder.class) .eq(SchoolCourseOrder::getCourseId, studentScoreInput.getCourseId()) @@ -119,7 +119,7 @@ public class StudentScoreInputServiceImpl implements StudentScoreInputService { .eq(SchoolCourseOrder::getIfEnd, false) .eq(SchoolCourseOrder::getIfAssignmentCoach, true) .set(SchoolCourseOrder::getGradTime, studentScoreInput.getExamTime())); - }*/ + } // 修改下一课程状态 this.updateNextSubjectStatus(studentScoreInput); } 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 f9b66a1a..07c7f3cf 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml @@ -57,6 +57,69 @@ + + + + diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index b9b8d99b..79abefe1 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -19,6 +19,8 @@ main.deleted = 0 and main.name like concat('%', #{entity.name}, '%') + and main.phone = #{entity.phone} + and main.id_card like concat('%', #{entity.idCard}, '%') GROUP BY main.user_id order by main.create_time desc @@ -62,11 +64,12 @@ AND dsco.deleted = 0 AND dsco.payment_status IN ( '2', '3', '4', '5' ) AND dsco.if_end = 0 + LEFT JOIN drive_school_process dsp ON main.user_id = dsp.user_id AND dsco.course_id = dsp.course_id AND dsp.`status` = '1' WHERE - main.deleted = 0 + main.deleted = 0 AND dsco.is_sign = 1 AND dsp.coach_id = #{entity.coachId} @@ -91,6 +94,9 @@ AND main.source = #{entity.source} + + AND dsp.exam_status = #{entity.examStatus} + GROUP BY main.id @@ -136,6 +142,34 @@ GROUP BY temp.orderId + + + + + diff --git a/dl-module-jx/src/main/resources/mapper/jx/DriveSchoolCarMapper.xml b/dl-module-jx/src/main/resources/mapper/jx/DriveSchoolCarMapper.xml index 589ab474..a5ad8457 100644 --- a/dl-module-jx/src/main/resources/mapper/jx/DriveSchoolCarMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/jx/DriveSchoolCarMapper.xml @@ -42,9 +42,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" deleted = 0 and brand = #{entity.brand} and car_model = #{entity.carModel} - and car_no = #{entity.carNo} + + and car_no like concat('%', #{entity.carNo}, '%') and course_type = #{entity.courseType} - and car_photo = #{entity.carPhoto} + and car_photo = #{entity.carPhoto} and car_register_date = #{entity.carRegisterDate} and inspection_date = #{entity.inspectionDate} and user_name like concat('%', #{entity.userName}, '%') @@ -55,7 +56,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and outline_date = #{entity.outlineDate} and repair_date = #{entity.repairDate} - order by create_time desc +-- order by create_time desc + ORDER BY create_time DESC, id DESC + + + 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 c2012c5d..39a141e3 100644 --- a/dl-module-jx/src/main/resources/mapper/train/TrainMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/train/TrainMapper.xml @@ -34,7 +34,7 @@ + SELECT *FROM drive_school_contract WHERE user_id = #{userId} AND deleted = 0 ORDER BY id DESC LIMIT 1 + From d5053744eed9dadf37b06d42c3a82f85a5e05ae8 Mon Sep 17 00:00:00 2001 From: Lx <935448346@qq.com> Date: Wed, 28 May 2025 17:14:39 +0800 Subject: [PATCH 04/16] 0528 --- .../admin/DlDriveSchoolCoachController.java | 11 +++++ .../admin/DlDriveSchoolStudentController.java | 9 ++++ .../base/entity/DlDriveSchoolCoach.java | 9 ---- .../base/entity/DlDriveSchoolStudent.java | 8 +++- .../base/mapper/DlDriveSchoolCoachMapper.java | 2 + .../service/DlDriveSchoolCoachService.java | 2 + .../service/DlDriveSchoolStudentService.java | 10 +++++ .../impl/DlDriveSchoolCoachServiceImpl.java | 5 +++ .../impl/DlDriveSchoolStudentServiceImpl.java | 17 +++++++- .../module/base/vo/BusinessRecordVO.java | 29 +++++++++++++ .../base/vo/DlDriveSchoolStudentVO.java | 2 + .../mapper/base/DlDriveSchoolCoachMapper.xml | 41 +++++++++++++++++++ .../base/DlDriveSchoolStudentMapper.xml | 7 ++++ .../resources/mapper/course/ProcessMapper.xml | 18 +++++++- 14 files changed, 156 insertions(+), 14 deletions(-) create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordVO.java 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 8fec8ff9..ba9fcef4 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 @@ -270,4 +270,15 @@ public class DlDriveSchoolCoachController { ExcelUtils.write(response, "员工数据.xls", "数据", SchoolStaffImportExcelVO.class, list); } + + /** + * 业务经理招生信息 + */ + @GetMapping("/getBusinessManager") + public CommonResult> getBusinessManager(BusinessRecordVO businessRecordVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo, pageSize); + return success(dlDriveSchoolCoachService.getBusinessManager(businessRecordVO, page)); + } } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java index 1dd1e8f4..de9028d1 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java @@ -256,4 +256,13 @@ public class DlDriveSchoolStudentController { list); } + + /** + * 修改学员来源 + */ + @PostMapping("/updateChannel") + public CommonResult updateChannel(@RequestBody DlDriveSchoolStudent student) { + return success(schoolStudentService.updateChannel(student)); + } + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCoach.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCoach.java index 5354b389..7fdb6e2d 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCoach.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolCoach.java @@ -101,15 +101,6 @@ public class DlDriveSchoolCoach extends TenantBaseDO { */ private Long folderId; - /** - * 提成 - */ - private Decimal commission; - - /** - * 银行卡号 - */ - private String bankCardId; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolStudent.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolStudent.java index cfc3a326..89f116b9 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolStudent.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/entity/DlDriveSchoolStudent.java @@ -49,13 +49,17 @@ public class DlDriveSchoolStudent extends TenantBaseDO { */ private String phone; /** - * 来源(01驾校统招,02教练自招,03自来客户) + * 渠道(来源)(01驾校统招,02教练自招,03自来客户,04业务经理统招) */ private String source; /** - * 来源id + * 渠道id(来源id) */ private Long sourceUserId; + /** + * 来源(手动填写) + */ + private String channel; /** * 身份证号 */ diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolCoachMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolCoachMapper.java index 25d3f080..21497080 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolCoachMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolCoachMapper.java @@ -50,4 +50,6 @@ public interface DlDriveSchoolCoachMapper extends BaseMapper CoachStaffSaveVo getOnInternal(Long id); List getAll(@Param("entity") SchoolStaffImportExcelVO query); + + IPage getBusinessManager(@Param("entity") BusinessRecordVO businessRecordVO, Page page); } 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 fc465d13..42a8095c 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 @@ -152,5 +152,7 @@ public interface DlDriveSchoolCoachService extends IService */ List getAll(SchoolStaffImportExcelVO query); + IPage getBusinessManager(BusinessRecordVO businessRecordVO, Page page); + } 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 d4d81079..e50f6e6e 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.base.service; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO; @@ -10,11 +11,15 @@ import cn.iocoder.yudao.module.inspection.vo.InspectionStaffExportVo; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import javax.validation.Valid; import java.util.Date; import java.util.List; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + /** * 驾校学员 Service 接口 * @@ -182,4 +187,9 @@ public interface DlDriveSchoolStudentService extends IService getAll(DlDriveSchoolStudent query); + + /** + * 修改学员来源 + */ + public boolean updateChannel(DlDriveSchoolStudent student); } 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 3b7087df..44909993 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 @@ -860,4 +860,9 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl getAll(SchoolStaffImportExcelVO query) { return baseMapper.getAll(query); } + + @Override + public IPage getBusinessManager(BusinessRecordVO businessRecordVO, Page page) { + return dlDriveSchoolCoachMapper.getBusinessManager(businessRecordVO, page); + } } 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 ca3ce21e..880e80b4 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 @@ -341,7 +341,7 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl pageResult = dlDriveSchoolStudentMapper.selectByCoachId(pageReqVO, page); pageResult.getRecords().forEach(item -> { //查每个学生的当前所处的科目 @@ -407,7 +407,7 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl pageResult = dlDriveSchoolStudentMapper.selectByBusinessId(pageReqVO, page); /*pageResult.getRecords().forEach(item -> { //查每个学生的当前所处的科目 @@ -671,4 +671,17 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl 0; + } + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordVO.java new file mode 100644 index 00000000..fbe3c2a9 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/BusinessRecordVO.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.base.vo; + +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import lombok.Data; +import org.apache.poi.hpsf.Decimal; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class BusinessRecordVO extends TenantBaseDO { + private String name; + private String phone; + private String idCard; + private Integer age; + private String sex; + private String channel; + private String courseName; + private String coachUserName; + private BigDecimal reserveMoney; + private BigDecimal restMoney; + private String paymentStatus; + private String payType; + private Integer isSign; + private String businessName; + private String businessPhone; + private LocalDateTime createTime; + +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java index 50f3dfdf..4a549277 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java @@ -31,6 +31,8 @@ public class DlDriveSchoolStudentVO extends DlDriveSchoolStudent { private String startTime; /**查询时间范围--结束*/ private String endTime; + /**是否毕业*/ + private String isGrad; /**订单表中的毕业时间*/ private String orderGradTime; /**课程名称*/ 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 07c7f3cf..4870433f 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml @@ -122,4 +122,45 @@ group by su.id order by su.nickname + + + diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index 26923777..c9789861 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -21,6 +21,7 @@ and main.name like concat('%', #{entity.name}, '%') and main.phone = #{entity.phone} and main.id_card like concat('%', #{entity.idCard}, '%') + and main.source = #{entity.source} GROUP BY main.user_id order by main.create_time desc @@ -135,6 +136,12 @@ AND dss.create_time <= #{entity.endTime} + + AND dsco.grad_time IS NOT NULL + + + AND dsco.grad_time IS NULL + AND dss.id IS NOT NULL ORDER BY dss.create_time DESC diff --git a/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml b/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml index ef204d0d..ff2a942a 100644 --- a/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml @@ -58,7 +58,23 @@ and dsp.name like concat('%', #{entity.courseName}, '%') and dsp.user_id = #{entity.userId} and dsp.course_id = #{entity.courseId} - AND RIGHT(dss.id_card, 4) = RIGHT(#{entity.studentIdCard}, 4) + + + + + + AND dss.id_card = #{entity.studentIdCard} + + + + AND RIGHT(dss.id_card, 4) = #{entity.studentIdCard} + + + + AND dss.id_card LIKE concat('%', #{entity.studentIdCard}, '%') + + + ORDER BY (CASE From bb1bfee430665f50009988b8d0eabea446781200 Mon Sep 17 00:00:00 2001 From: Lx <935448346@qq.com> Date: Tue, 3 Jun 2025 16:22:52 +0800 Subject: [PATCH 05/16] 0603 --- .../controller/admin/DataViewController.java | 24 +- .../admin/DlDriveSchoolCoachController.java | 9 + .../mapper/DlDriveSchoolStudentMapper.java | 6 +- .../module/base/service/DataViewService.java | 3 +- .../service/DlDriveSchoolCoachService.java | 1 + .../service/impl/DataViewServiceImpl.java | 281 +++++++++++------- .../impl/DlDriveSchoolCoachServiceImpl.java | 160 ++++++++++ .../vo/DlDriveSchoolStudentByBusinessVO.java | 60 ++++ .../base/vo/DlDriveSchoolStudentVO.java | 4 + ...hoolStudentCommissionRecordController.java | 61 ++++ .../entity/SchoolStudentCommissionRecord.java | 72 +++++ .../SchoolStudentCommissionRecordMapper.java | 10 + .../SchoolStudentCommissionRecordService.java | 44 +++ ...oolStudentCommissionRecordServiceImpl.java | 53 ++++ .../vo/SchoolStudentCommissionRecordVO.java | 24 ++ .../base/DlDriveSchoolStudentMapper.xml | 44 ++- .../SchoolStudentCommissionRecordMapper.xml | 4 + 17 files changed, 749 insertions(+), 111 deletions(-) create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentByBusinessVO.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolStudentCommissionRecordController.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolStudentCommissionRecord.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolStudentCommissionRecordMapper.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolStudentCommissionRecordService.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolStudentCommissionRecordServiceImpl.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolStudentCommissionRecordVO.java create mode 100644 dl-module-jx/src/main/resources/mapper/course/SchoolStudentCommissionRecordMapper.xml diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DataViewController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DataViewController.java index 71a0fca8..ddfa1755 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DataViewController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DataViewController.java @@ -56,6 +56,28 @@ public class DataViewController { return success(dataViewService.selectIndexInfo(type,timeType,coachId,startTime,endTime)); } + /** + * 业务经理首页数据统计查询接口 -- + * @author vinjor-M + * @date 14:12 2025/2/14 + * @param type 查询类型(coach-教练查询|admin-管理员查询) + * @param timeType 时间查询类型(all-全部|day-当日|month-当月|more-自定义) + * @param coachId 教练id + * @param startTime 查询时间范围--开始 + * @param endTime 查询时间范围--结束 + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/indexDataByBusiness") + @Operation(summary = "首页数据统计查询接口") + public CommonResult selectIndexInfoByBusiness(@RequestParam(value = "type") String type, + @RequestParam(value = "timeType") String timeType, + @RequestParam(value = "coachId",required = false) Long coachId, + @RequestParam(value = "startTime",required = false) String startTime, + @RequestParam(value = "endTime",required = false) String endTime, + @RequestParam(value = "isSign",required = false) Integer isSign) { + return success(dataViewService.selectIndexInfoByBusiness(type,timeType,coachId,startTime,endTime, isSign)); + } + /** * 查询学生总数 * @author vinjor-M @@ -66,4 +88,4 @@ public class DataViewController { public CommonResult getStudentCount() { return success(dataViewService.getStudentCount()); } -} \ No newline at end of file +} 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 ba9fcef4..61170a74 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 @@ -157,6 +157,15 @@ public class DlDriveSchoolCoachController { return success(dlDriveSchoolCoachService.getCoachById(id)); } + @GetMapping("/getCoachByIdAndTime") + @Operation(summary = "获得驾校教练") + public CommonResult appGetCoachByIdAndTime(@RequestParam("id") String id, + @RequestParam(value = "timeType") String timeType, + @RequestParam(value = "startTime",required = false) String startTime, + @RequestParam(value = "endTime",required = false) String endTime) { + return success(dlDriveSchoolCoachService.getCoachByIdAndTime(id,timeType,startTime,endTime)); + } + /** * * @author vinjor-M diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java index cee4726e..c8b26acd 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java @@ -1,10 +1,7 @@ package cn.iocoder.yudao.module.base.mapper; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; -import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO; -import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO; -import cn.iocoder.yudao.module.base.vo.DriveSchoolStudentExportVo; -import cn.iocoder.yudao.module.base.vo.StudentCountVO; +import cn.iocoder.yudao.module.base.vo.*; import cn.iocoder.yudao.module.inspection.query.InspectionStaffQuery; import cn.iocoder.yudao.module.inspection.vo.InspectionStaffExportVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -103,6 +100,7 @@ public interface DlDriveSchoolStudentMapper extends BaseMapper selectStudentListCoach(@Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime); List selectStudentListBusiness(@Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime); + List selectStudentListByBusiness(@Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("isSign") Integer isSign); /** * app首页查询训练学员---指定条件下 diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DataViewService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DataViewService.java index 73052669..fc52d07a 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DataViewService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/service/DataViewService.java @@ -30,6 +30,7 @@ public interface DataViewService { * @param endTime 查询时间范围--结束 **/ IndexDataVO selectIndexInfo(String type, String timeType, Long coachId, String startTime, String endTime); + IndexDataVO selectIndexInfoByBusiness(String type, String timeType, Long coachId, String startTime, String endTime, Integer isSign); /** * 查询学生总数 @@ -38,4 +39,4 @@ public interface DataViewService { * @return java.util.Map **/ Map getStudentCount(); -} \ No newline at end of file +} 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 42a8095c..27303692 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 @@ -104,6 +104,7 @@ public interface DlDriveSchoolCoachService extends IService * @return cn.iocoder.yudao.module.base.vo.CoachInfoVO **/ CoachInfoVO getCoachById(String id); + CoachInfoVO getCoachByIdAndTime(String id, String timeType, String startTime, String endTime); /** * 根据邀请码查询教练信息 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 7f9b0025..78d46af6 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 @@ -21,6 +21,7 @@ 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.TrainVO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -67,7 +68,7 @@ public class DataViewServiceImpl implements DataViewService { * @date 14:37 2025/2/8 **/ @Override - public StudentInfoVO selectStudentInfo(Long id,Long coachId) { + public StudentInfoVO selectStudentInfo(Long id, Long coachId) { StudentInfoVO studentInfoVO = new StudentInfoVO(); // 学员主信息 @@ -185,132 +186,132 @@ public class DataViewServiceImpl implements DataViewService { //默认查全部数据 String startTimeStr = ""; String endTimeStr = ""; - if("more".equals(timeType)){ - if(StringUtils.isNotEmpty(startTime)){ - startTimeStr = startTime+" 00:00:01"; + if ("more".equals(timeType)) { + if (StringUtils.isNotEmpty(startTime)) { + startTimeStr = startTime + " 00:00:01"; } - if(StringUtils.isNotEmpty(endTime)) { + if (StringUtils.isNotEmpty(endTime)) { endTimeStr = endTime + " 23:59:59"; } - }else if("month".equals(timeType)){ + } else if ("month".equals(timeType)) { //当月 - startTimeStr = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 00:00:01"; - endTimeStr = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 23:59:59"; - }else if("day".equals(timeType)){ + startTimeStr = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 00:00:01"; + endTimeStr = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 23:59:59"; + } else if ("day".equals(timeType)) { //当天 - startTimeStr = DateUtil.formatDate(DateUtil.date())+" 00:00:01"; - endTimeStr = DateUtil.formatDate(DateUtil.date())+" 23:59:59"; + startTimeStr = DateUtil.formatDate(DateUtil.date()) + " 00:00:01"; + endTimeStr = DateUtil.formatDate(DateUtil.date()) + " 23:59:59"; } - if("admin".equals(type)){ + if ("admin".equals(type)) { //管理员查询 /*1.招生情况*/ List studentList = studentMapper.selectStudentList(coachId, startTimeStr, endTimeStr); - Map studentInfoMap = new HashMap<>(); - int coachNum=0; - double coachAmount=0; - int schoolNum=0; - double schoolAmount=0; - for (DlDriveSchoolStudentVO item:studentList){ - if("02".equals(item.getSource())){ + Map studentInfoMap = new HashMap<>(); + int coachNum = 0; + double coachAmount = 0; + int schoolNum = 0; + double schoolAmount = 0; + for (DlDriveSchoolStudentVO item : studentList) { + if ("02".equals(item.getSource())) { //教练自招 coachNum++; - coachAmount = coachAmount+item.getPriceAmount(); - }else{ + coachAmount = coachAmount + item.getPriceAmount(); + } else { //驾校统招 schoolNum++; - schoolAmount = schoolAmount+item.getPriceAmount(); + schoolAmount = schoolAmount + item.getPriceAmount(); } } - int allNum = coachNum+schoolNum; - double coachRate=0; - double schoolRate=0; - if(allNum>0){ - if(coachNum>0){ - coachRate = (double)coachNum / allNum; + int allNum = coachNum + schoolNum; + double coachRate = 0; + double schoolRate = 0; + if (allNum > 0) { + if (coachNum > 0) { + coachRate = (double) coachNum / allNum; } - if(schoolNum>0){ - schoolRate = (double)schoolNum / allNum; + if (schoolNum > 0) { + schoolRate = (double) schoolNum / allNum; } } studentInfoMap.put("coachNum", new BigDecimal(coachNum).setScale(2, RoundingMode.HALF_UP)); studentInfoMap.put("coachAmount", new BigDecimal(coachAmount).setScale(2, RoundingMode.HALF_UP)); - studentInfoMap.put("coachRate",0!=coachRate?(Double.parseDouble(df.format(coachRate))*100):0); - studentInfoMap.put("schoolNum",schoolNum); - studentInfoMap.put("schoolAmount",schoolAmount); - studentInfoMap.put("schoolRate",0!=schoolRate?(Double.parseDouble(df.format(schoolRate))*100):0); + studentInfoMap.put("coachRate", 0 != coachRate ? (Double.parseDouble(df.format(coachRate)) * 100) : 0); + studentInfoMap.put("schoolNum", schoolNum); + studentInfoMap.put("schoolAmount", schoolAmount); + studentInfoMap.put("schoolRate", 0 != schoolRate ? (Double.parseDouble(df.format(schoolRate)) * 100) : 0); rtnObj.setStudentInfo(studentInfoMap); /*4.财务情况--*/ //应收 - Double showedReceive = courseOrderMapper.selectByCoachUserId(coachId,startTimeStr,endTimeStr); + 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(); + 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",null==showedReceive?0:showedReceive); - moneyInfoMap.put("outAmount",showedPay); + Map moneyInfoMap = new HashMap<>(); + moneyInfoMap.put("inAmount", null == showedReceive ? 0 : showedReceive); + moneyInfoMap.put("outAmount", showedPay); rtnObj.setMoneyInfo(moneyInfoMap); - }else if("coach".equals(type)){ + } else if ("coach".equals(type)) { //教练查询 /*1.学员情况*/ - List studentVOList = studentMapper.selectStudentListCoach(coachId,startTimeStr,endTimeStr); + List studentVOList = studentMapper.selectStudentListCoach(coachId, startTimeStr, endTimeStr); int overNum = (int) studentVOList.stream().filter(item -> null != item.getOrderGradTime()).count(); - int noOverNum = studentVOList.size()-overNum; + int noOverNum = studentVOList.size() - overNum; // 按 courseType(C1/C2)统计 long c1Total = studentVOList.stream().filter(item -> "C1".equals(item.getCourseType())).count(); long c2Total = studentVOList.stream().filter(item -> "C2".equals(item.getCourseType())).count(); - Map studentInfoMap = new HashMap<>(); - studentInfoMap.put("allNum",studentVOList.size()); - studentInfoMap.put("overNum",overNum); - studentInfoMap.put("noOverNum",noOverNum); + Map studentInfoMap = new HashMap<>(); + studentInfoMap.put("allNum", studentVOList.size()); + studentInfoMap.put("overNum", overNum); + studentInfoMap.put("noOverNum", noOverNum); studentInfoMap.put("c1Total", c1Total); studentInfoMap.put("c2Total", c2Total); rtnObj.setStudentInfo(studentInfoMap); /*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(); + 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",showedPay); + Map moneyInfoMap = new HashMap<>(); + moneyInfoMap.put("money", showedPay); rtnObj.setMoneyInfo(moneyInfoMap); - }else if("business".equals(type)){ + } else if ("business".equals(type)) { //业务经理查询 /*1.招生情况*/ - List studentVOList = studentMapper.selectStudentListBusiness(coachId,startTimeStr,endTimeStr); + List studentVOList = studentMapper.selectStudentListBusiness(coachId, startTimeStr, endTimeStr); int overNum = (int) studentVOList.stream().filter(item -> null != item.getOrderGradTime()).count(); - int noOverNum = studentVOList.size()-overNum; + int noOverNum = studentVOList.size() - overNum; // 按 courseType(C1/C2)统计 long c1Total = studentVOList.stream().filter(item -> "C1".equals(item.getCourseType())).count(); long c2Total = studentVOList.stream().filter(item -> "C2".equals(item.getCourseType())).count(); - Map studentInfoMap = new HashMap<>(); - studentInfoMap.put("allNum",studentVOList.size()); - studentInfoMap.put("overNum",overNum); - studentInfoMap.put("noOverNum",noOverNum); + Map studentInfoMap = new HashMap<>(); + studentInfoMap.put("allNum", studentVOList.size()); + studentInfoMap.put("overNum", overNum); + studentInfoMap.put("noOverNum", noOverNum); studentInfoMap.put("c1Total", c1Total); studentInfoMap.put("c2Total", c2Total); rtnObj.setStudentInfo(studentInfoMap); /*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(); + 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",showedPay); + Map moneyInfoMap = new HashMap<>(); + moneyInfoMap.put("money", showedPay); rtnObj.setMoneyInfo(moneyInfoMap); } /*2.训练情况*/ - List allTrainList = trainMapper.selectTrainByCondition(coachId,startTimeStr,endTimeStr); + List allTrainList = trainMapper.selectTrainByCondition(coachId, startTimeStr, endTimeStr); //所有车辆set,目的是去重 Set allCarSet = new HashSet<>(); Set subject2CarSet = new HashSet<>(); @@ -318,67 +319,120 @@ public class DataViewServiceImpl implements DataViewService { Set allUserSet = new HashSet<>(); Set subject2UserSet = new HashSet<>(); Set subject3UserSet = new HashSet<>(); - for (TrainVO trainVO:allTrainList){ - if(2==trainVO.getSubject()){ + for (TrainVO trainVO : allTrainList) { + if (2 == trainVO.getSubject()) { subject2CarSet.add(trainVO.getCarNo()); allCarSet.add(trainVO.getCarNo()); subject2UserSet.add(trainVO.getUserId()); allUserSet.add(trainVO.getUserId()); - }else if(3==trainVO.getSubject()){ + } else if (3 == trainVO.getSubject()) { subject3CarSet.add(trainVO.getCarNo()); allCarSet.add(trainVO.getCarNo()); subject3UserSet.add(trainVO.getUserId()); allUserSet.add(trainVO.getUserId()); } } - Map trainInfoMap = new HashMap<>(); - trainInfoMap.put("allCarNum",allCarSet.size()); - trainInfoMap.put("subject2CarNum",subject2CarSet.size()); - trainInfoMap.put("subject3CarNum",subject3CarSet.size()); - trainInfoMap.put("allUserNum",allUserSet.size()); - trainInfoMap.put("subject2UserNum",subject2UserSet.size()); - trainInfoMap.put("subject3UserNum",subject3UserSet.size()); + Map trainInfoMap = new HashMap<>(); + trainInfoMap.put("allCarNum", allCarSet.size()); + trainInfoMap.put("subject2CarNum", subject2CarSet.size()); + trainInfoMap.put("subject3CarNum", subject3CarSet.size()); + trainInfoMap.put("allUserNum", allUserSet.size()); + trainInfoMap.put("subject2UserNum", subject2UserSet.size()); + trainInfoMap.put("subject3UserNum", subject3UserSet.size()); rtnObj.setTrainInfo(trainInfoMap); /*3.考试情况*/ - List examBatchItemVOList = examBatchItemMapper.selectByCoachId(coachId,startTimeStr,endTimeStr); + List examBatchItemVOList = examBatchItemMapper.selectByCoachId(coachId, startTimeStr, endTimeStr); Double subject2Num = 0.0; Double subject3Num = 0.0; Double subject2PassNum = 0.0; Double subject3PassNum = 0.0; - for (ExamBatchItemVO exam:examBatchItemVOList){ - if(2==exam.getSubject()){ + for (ExamBatchItemVO exam : examBatchItemVOList) { + if (2 == exam.getSubject()) { subject2Num++; - if(null!=exam.getIfPass() && exam.getIfPass()){ + if (null != exam.getIfPass() && exam.getIfPass()) { //考试通过 subject2PassNum++; } - }else if(3==exam.getSubject()){ + } else if (3 == exam.getSubject()) { subject3Num++; - if(null!=exam.getIfPass() && exam.getIfPass()){ + if (null != exam.getIfPass() && exam.getIfPass()) { //考试通过 subject3PassNum++; } } } - double subject2Rate=0; - double subject3Rate=0; - if(0!=subject2Num && 0!=subject2PassNum){ + double subject2Rate = 0; + double subject3Rate = 0; + if (0 != subject2Num && 0 != subject2PassNum) { subject2Rate = subject2PassNum / subject2Num; } - if(0!=subject3Num && 0!=subject3PassNum){ + if (0 != subject3Num && 0 != subject3PassNum) { subject3Rate = subject3PassNum / subject3Num; } - Map examInfoMap = new HashMap<>(); - examInfoMap.put("subject2All",subject2Num); - examInfoMap.put("subject2Pass",subject2PassNum); - examInfoMap.put("subject2Rate",0!=subject2Rate?(Double.parseDouble(df.format(subject2Rate))*100):0); - examInfoMap.put("subject3All",subject3Num); - examInfoMap.put("subject3Pass",subject3PassNum); - examInfoMap.put("subject3Rate",0!=subject3Rate?(Double.parseDouble(df.format(subject3Rate))*100):0); + Map examInfoMap = new HashMap<>(); + examInfoMap.put("subject2All", subject2Num); + examInfoMap.put("subject2Pass", subject2PassNum); + examInfoMap.put("subject2Rate", 0 != subject2Rate ? (Double.parseDouble(df.format(subject2Rate)) * 100) : 0); + examInfoMap.put("subject3All", subject3Num); + examInfoMap.put("subject3Pass", subject3PassNum); + examInfoMap.put("subject3Rate", 0 != subject3Rate ? (Double.parseDouble(df.format(subject3Rate)) * 100) : 0); rtnObj.setExamInfo(examInfoMap); return rtnObj; } + + @Override + public IndexDataVO selectIndexInfoByBusiness(String type, String timeType, Long coachId, String startTime, String endTime, Integer isSign) { + IndexDataVO rtnObj = new IndexDataVO(); + DecimalFormat df = new DecimalFormat("#.00"); + //默认查全部数据 + String startTimeStr = ""; + String endTimeStr = ""; + if ("more".equals(timeType)) { + if (StringUtils.isNotEmpty(startTime)) { + startTimeStr = startTime + " 00:00:01"; + } + if (StringUtils.isNotEmpty(endTime)) { + endTimeStr = endTime + " 23:59:59"; + } + } else if ("month".equals(timeType)) { + //当月 + startTimeStr = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 00:00:01"; + endTimeStr = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 23:59:59"; + } else if ("day".equals(timeType)) { + //当天 + startTimeStr = DateUtil.formatDate(DateUtil.date()) + " 00:00:01"; + endTimeStr = DateUtil.formatDate(DateUtil.date()) + " 23:59:59"; + } + //业务经理查询 + /*1.招生情况*/ + List studentVOList = studentMapper.selectStudentListByBusiness(coachId, startTimeStr, endTimeStr,isSign); + int overNum = (int) studentVOList.stream().filter(item -> null != item.getOrderGradTime()).count(); + int noOverNum = studentVOList.size() - overNum; + // 按 courseType(C1/C2)统计 + long c1Total = studentVOList.stream().filter(item -> "C1".equals(item.getCourseType())).count(); + long c2Total = studentVOList.stream().filter(item -> "C2".equals(item.getCourseType())).count(); + Map studentInfoMap = new HashMap<>(); + studentInfoMap.put("allNum", studentVOList.size()); + studentInfoMap.put("overNum", overNum); + studentInfoMap.put("noOverNum", noOverNum); + studentInfoMap.put("c1Total", c1Total); + studentInfoMap.put("c2Total", c2Total); + rtnObj.setStudentInfo(studentInfoMap); + /*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", showedPay); + rtnObj.setMoneyInfo(moneyInfoMap);*/ + return rtnObj; + } + /** * 查询学生总数 * @@ -388,17 +442,38 @@ public class DataViewServiceImpl implements DataViewService { **/ @Override public Map getStudentCount() { - List list= studentMapper.selectStudentListCount(); + List list = studentMapper.selectStudentListCount(); Map rtnMap = new HashMap<>(); - rtnMap.put("all",list.size()); + rtnMap.put("all", list.size()); //按courseType分组 Map> map = list.stream() .filter(item -> item.getCourseType() != null) // 过滤掉 courseType 为 null 的元素 .collect(Collectors.groupingBy(DlDriveSchoolStaffVO::getCourseType)); - for (String key:map.keySet()){ - rtnMap.put(key,map.get(key).size()); + for (String key : map.keySet()) { + rtnMap.put(key, map.get(key).size()); } + + // 已毕业人数(gradTime 不为 null) + Long graduatedCount = courseOrderMapper.selectCount( + new LambdaQueryWrapper() + .eq(SchoolCourseOrder::getIfEnd, false) + .in(SchoolCourseOrder::getPaymentStatus, Arrays.asList(2, 3, 4, 5)) + .eq(SchoolCourseOrder::getIsSign, 1) + .isNotNull(SchoolCourseOrder::getGradTime) + ); + + // 未毕业人数(gradTime 为 null) + Long notGraduatedCount = courseOrderMapper.selectCount( + new LambdaQueryWrapper() + .eq(SchoolCourseOrder::getIfEnd, false) + .in(SchoolCourseOrder::getPaymentStatus, Arrays.asList(2, 3, 4, 5)) + .eq(SchoolCourseOrder::getIsSign, 1) + .isNull(SchoolCourseOrder::getGradTime) + ); + + rtnMap.put("graduated", graduatedCount); + rtnMap.put("notGraduated", notGraduatedCount); return rtnMap; } } 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 44909993..2323bb2b 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 @@ -483,6 +483,166 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl studentVOList = studentMapper.selectStudentListCoach(coach.getUserId(),startTimeStr,endTimeStr); + 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(),startTimeStr,endTimeStr); + 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(), startTimeStr, endTimeStr); + 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(),startTimeStr,endTimeStr); + 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(),startTimeStr,endTimeStr); + //科目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/DlDriveSchoolStudentByBusinessVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentByBusinessVO.java new file mode 100644 index 00000000..b42fef8d --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentByBusinessVO.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.base.vo; + +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; +import cn.iocoder.yudao.module.course.entity.Process; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 驾校学员 Response VO") +@Data +@ExcelIgnoreUnannotated +public class DlDriveSchoolStudentByBusinessVO extends DlDriveSchoolStudent { + /**教练ID*/ + private Long coachId; + /**教练姓名*/ + private String coachName; + /**教练ID*/ + private String courseId; + /**学习进度*/ + private Process process; + /**总金额*/ + private Double priceAmount; + /**课程类型*/ + private String courseType; + /**科目*/ + private Integer subject; + /**是否支付*/ + private String paymentStatus; + /**是否终止*/ + private String ifEnd; + /**终止原因*/ + private String endReason; + /**订单金额*/ + private BigDecimal reserveMoney; + /**尾款金额*/ + private BigDecimal restMoney; + /**支付类型*/ + private String payType; + + /**时间查询类型(all-全部|day-当日|month-当月|more-自定义)*/ + private String timeType; + /**查询时间范围--开始*/ + private String startTime; + /**查询时间范围--结束*/ + private String endTime; + /**是否毕业*/ + private String isGrad; + /**订单表中的毕业时间*/ + private String orderGradTime; + /**课程名称*/ + private String courseName; + /**订单ID*/ + private String orderId; + /**排序方式:asc desc*/ + private String sort; + /**是否面签*/ + private Integer isSign; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java index 4a549277..8c178655 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStudentVO.java @@ -6,6 +6,8 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; + @Schema(description = "管理后台 - 驾校学员 Response VO") @Data @ExcelIgnoreUnannotated @@ -41,4 +43,6 @@ public class DlDriveSchoolStudentVO extends DlDriveSchoolStudent { private String orderId; /**排序方式:asc desc*/ private String sort; + /**是否面签*/ + private Integer isSign; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolStudentCommissionRecordController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolStudentCommissionRecordController.java new file mode 100644 index 00000000..adf6847a --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolStudentCommissionRecordController.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.course.controller.admin; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.course.entity.SchoolStudentCommissionRecord; +import cn.iocoder.yudao.module.course.service.SchoolStudentCommissionRecordService; +import cn.iocoder.yudao.module.course.vo.SchoolStudentCommissionRecordVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@RestController +@RequestMapping("/commissionRecord") +@Validated +public class SchoolStudentCommissionRecordController { + @Autowired + private SchoolStudentCommissionRecordService commissionRecordService; + + + @PostMapping("/create") + public CommonResult createRecord(@RequestBody SchoolStudentCommissionRecord record) { + + return success(commissionRecordService.createRecord(record)); + } + + @PutMapping("/update") + public CommonResult updateRecord(@RequestBody SchoolStudentCommissionRecord record) { + return success(commissionRecordService.updateRecord(record)); + } + + @DeleteMapping("/delete") + public CommonResult deleteRecord(@RequestParam("id") Long id) { + return success(commissionRecordService.deleteRecord(id)); + } + + @GetMapping("/get") + public CommonResult getRecord(@RequestParam("id") Long id) { + SchoolStudentCommissionRecord record = commissionRecordService.getRecordById(id); + return success(record); + } + + @GetMapping("/list-by-student") + public CommonResult> getRecordsByStudentId(@RequestParam("studentId") Long studentId) { + List list = commissionRecordService.getRecordsByStudentId(studentId); + return success(list); + } + + @GetMapping("/list-by-coach") + public CommonResult> getRecordsByCoachId(@RequestParam("coachId") Long coachId) { + List list = commissionRecordService.getRecordsByCoachId(coachId); + return success(list); + } + + @PutMapping("/update-grant-status") + public CommonResult updateGrantStatus(@RequestBody SchoolStudentCommissionRecord reqVO) { + return success(commissionRecordService.updateGrantStatus(reqVO.getId(), reqVO.getIsGrant())); + } +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolStudentCommissionRecord.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolStudentCommissionRecord.java new file mode 100644 index 00000000..f5cd710c --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/SchoolStudentCommissionRecord.java @@ -0,0 +1,72 @@ +package cn.iocoder.yudao.module.course.entity; + +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * 学员各科目提成记录表 + */ +@TableName("drive_school_commission_record") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SchoolStudentCommissionRecord extends TenantBaseDO { + + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_UUID) + private Long id; + + /** + * 课程id + */ + private String courseId; + + /** + * 课程名称 + */ + private String courseName; + + /** + * 科目 + */ + private String courseSubject; + + /** + * 学员id + */ + private Long studentId; + + /** + * 学员姓名 + */ + private String studentName; + + /** + * 教练id + */ + private Long coachId; + + /** + * 教练姓名 + */ + private String coachName; + + /** + * 科目提成金额 + */ + private BigDecimal subjectCommission; + + /** + * 是否发放 + */ + private Integer isGrant; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolStudentCommissionRecordMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolStudentCommissionRecordMapper.java new file mode 100644 index 00000000..1315fa98 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/SchoolStudentCommissionRecordMapper.java @@ -0,0 +1,10 @@ +package cn.iocoder.yudao.module.course.mapper; + +import cn.iocoder.yudao.module.course.entity.SchoolStudentCommissionRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface SchoolStudentCommissionRecordMapper extends BaseMapper { +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolStudentCommissionRecordService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolStudentCommissionRecordService.java new file mode 100644 index 00000000..479952eb --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolStudentCommissionRecordService.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.course.service; + +import cn.iocoder.yudao.module.course.entity.SchoolStudentCommissionRecord; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +public interface SchoolStudentCommissionRecordService extends IService { + + /** + * 创建学员提成记录 + */ + boolean createRecord(SchoolStudentCommissionRecord record); + + /** + * 更新学员提成记录 + */ + boolean updateRecord(SchoolStudentCommissionRecord record); + + /** + * 删除学员提成记录 + */ + boolean deleteRecord(Long id); + + /** + * 根据ID获取学员提成记录 + */ + SchoolStudentCommissionRecord getRecordById(Long id); + + /** + * 获取学员的所有提成记录 + */ + List getRecordsByStudentId(Long studentId); + + /** + * 获取教练的所有提成记录 + */ + List getRecordsByCoachId(Long coachId); + + /** + * 更新提成发放状态 + */ + boolean updateGrantStatus(Long id, Integer isGrant); +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolStudentCommissionRecordServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolStudentCommissionRecordServiceImpl.java new file mode 100644 index 00000000..927bee38 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolStudentCommissionRecordServiceImpl.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.course.service.impl; + +import cn.iocoder.yudao.module.course.entity.SchoolStudentCommissionRecord; +import cn.iocoder.yudao.module.course.mapper.SchoolStudentCommissionRecordMapper; +import cn.iocoder.yudao.module.course.service.SchoolStudentCommissionRecordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class SchoolStudentCommissionRecordServiceImpl extends ServiceImpl implements SchoolStudentCommissionRecordService { + + @Override + public boolean createRecord(SchoolStudentCommissionRecord record) { + return save(record); + } + + @Override + public boolean updateRecord(SchoolStudentCommissionRecord record) { + return updateById(record); + } + + @Override + public boolean deleteRecord(Long id) { + return removeById(id); + } + + @Override + public SchoolStudentCommissionRecord getRecordById(Long id) { + return getById(id); + } + + @Override + public List getRecordsByStudentId(Long studentId) { + return lambdaQuery().eq(SchoolStudentCommissionRecord::getStudentId, studentId).list(); + } + + @Override + public List getRecordsByCoachId(Long coachId) { + return lambdaQuery().eq(SchoolStudentCommissionRecord::getCoachId, coachId).list(); + } + + @Override + public boolean updateGrantStatus(Long id, Integer isGrant) { + SchoolStudentCommissionRecord record = new SchoolStudentCommissionRecord(); + record.setId(id); + record.setIsGrant(isGrant); + return updateById(record); + } +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolStudentCommissionRecordVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolStudentCommissionRecordVO.java new file mode 100644 index 00000000..335b6369 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolStudentCommissionRecordVO.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.course.vo; + +import java.math.BigDecimal; + +public class SchoolStudentCommissionRecordVO { + + private String courseId; + + private String courseName; + + private String courseSubject; + + private Long studentId; + + private String studentName; + + private Long coachId; + + private String coachName; + + private BigDecimal subjectCommission; + + private Integer isGrant; +} diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index c9789861..21abcd4d 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -160,8 +160,8 @@ dss.deleted = 0 AND dsco.if_end = 0 AND dsco.deleted = 0 - AND dsco.payment_status in ( '2', '3', '4', '5' ) - AND dsco.is_sign = 1 +-- AND dsco.payment_status in ( '2', '3', '4', '5' ) +-- AND dsco.is_sign = 1 AND dss.id IS NOT NULL AND dss.source = '04' AND dss.source_user_id = #{entity.coachId} @@ -177,6 +177,9 @@ AND dsco.course_type = #{entity.courseType} + + AND dsco.is_sign = #{entity.isSign} + GROUP BY dss.user_id @@ -296,6 +299,43 @@ GROUP BY dsco.id + + + - + SELECT + main.id AS id, + main.NAME AS NAME, + main.type AS type, + main.avatar AS avatar, + main.phone AS phone, + main.user_id AS userId, + dsco.course_type, + dsp.`subject` + FROM + drive_school_student main + LEFT JOIN drive_school_course_order dsco ON main.user_id = dsco.user_id + AND dsco.deleted = 0 + AND dsco.payment_status IN ( '2', '3', '4', '5' ) + AND dsco.if_end = 0 - LEFT JOIN drive_school_process dsp ON main.user_id = dsp.user_id - AND dsco.course_id = dsp.course_id - AND dsp.`status` = '1' - WHERE - main.deleted = 0 AND dsco.is_sign = 1 - - AND dsp.coach_id = #{entity.coachId} - - - AND main.source_user_id = #{entity.sourceCoachId} - - - AND main.name LIKE CONCAT('%',#{entity.name},'%') - - - AND dsco.course_type = #{entity.courseType} - - - AND dsp.subject = #{entity.subject} - - - AND dsco.create_time >= #{entity.startTime} - - - AND dsco.create_time <= #{entity.endTime} - - - AND main.source = #{entity.source} - - - AND dsp.exam_status = #{entity.examStatus} - - GROUP BY - main.id - - - ORDER BY - dsco.create_time ASC - - - ORDER BY - dsco.create_time DESC - - - + LEFT JOIN drive_school_process dsp ON main.user_id = dsp.user_id + AND dsco.course_id = dsp.course_id + AND dsp.`status` = '1' + WHERE + main.deleted = 0 AND dsco.is_sign = 1 + + AND dsp.coach_id = #{entity.coachId} + + + AND main.source_user_id = #{entity.sourceCoachId} + + + AND main.name LIKE CONCAT('%',#{entity.name},'%') + + + AND dsco.course_type = #{entity.courseType} + + + AND dsp.subject = #{entity.subject} + + + AND dsco.create_time >= #{entity.startTime} + + + AND dsco.create_time <= #{entity.endTime} + + + AND main.source = #{entity.source} + + + AND dsp.exam_status = #{entity.examStatus} + + + AND dsco.create_time BETWEEN #{entity.rangeTime[0]} AND #{entity.rangeTime[1]} + + + AND main.address LIKE CONCAT('%',#{entity.address},'%') + + + AND main.id_card IS NOT NULL + AND TIMESTAMPDIFF(YEAR, STR_TO_DATE(SUBSTRING(main.id_card, 7, 8), '%Y%m%d'), CURDATE()) BETWEEN #{entity.age[0]} AND #{entity.age[1]} + + + AND dsco.pass_time IS NOT NULL + AND TIMESTAMPDIFF(DAY, dsco.create_time, dsco.pass_time) = #{entity.passDays} + + GROUP BY + main.id + + + ORDER BY + dsco.create_time ASC + + + ORDER BY + dsco.create_time DESC + + + + + SELECT - main.*, - dsc.name AS courseName, - dsc.type AS courseType + main.*, + dsc.name AS courseName, + dsc.type AS courseType FROM - drive_school_commission main - LEFT JOIN drive_school_course dsc ON main.course_id = dsc.id AND dsc.deleted = 0 + drive_school_commission main + LEFT JOIN drive_school_course dsc ON main.course_id = dsc.id AND dsc.deleted = 0 main.deleted = 0 - and main.coach_name like concat('%', #{entity.coachName}, '%') - and main.student_name like concat('%', #{entity.studentName}, '%') - and main.check_name like concat('%', #{entity.checkName}, '%') - and dsc.name like concat('%', #{entity.courseName}, '%') + and main.coach_name like concat('%', + #{entity.coachName}, '%') + + and main.student_name like concat('%', + #{entity.studentName}, '%') + + and main.check_name like concat('%', + #{entity.checkName}, '%') + + and dsc.name like concat('%', + #{entity.courseName}, '%') + -order by main.create_time desc + 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 fd368700..185fda61 100644 --- a/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml @@ -92,4 +92,30 @@ ORDER BY create_time DESC LIMIT 1 + + + INSERT INTO system_users (username, + password, + status, + nickname, + user_age, + sex, + mobile, + id_card, + id_card_image, + create_time, + deleted) + VALUES (#{username}, + #{password}, + #{status}, + #{nickname}, + #{userAge}, + #{sex}, + #{mobile}, + #{idCard}, + #{idCardImage}, + #{createTime}, + #{deleted}) + + From 412897e5aceb2fffb29a8b89c7ad0ee5826ae55b Mon Sep 17 00:00:00 2001 From: Lx <935448346@qq.com> Date: Fri, 6 Jun 2025 17:32:16 +0800 Subject: [PATCH 08/16] 0606 --- .../admin/DlDriveSchoolCoachController.java | 9 +++ .../service/DlDriveSchoolCoachService.java | 1 + .../service/impl/DataViewServiceImpl.java | 12 ++++ .../impl/DlDriveSchoolCoachServiceImpl.java | 52 ++++++++++++++ .../impl/DlDriveSchoolStudentServiceImpl.java | 3 + .../impl/SchoolCourseOrderServiceImpl.java | 4 +- .../controller/admin/ExamBatchController.java | 3 +- .../admin/ExamBatchItemController.java | 13 +++- .../app/AppExamBatchController.java | 2 + .../exam/mapper/ExamBatchItemMapper.java | 1 + .../exam/service/ExamBatchItemService.java | 2 + .../impl/ExamBatchItemServiceImpl.java | 38 +++++++++++ .../yudao/module/exam/vo/ExamBatchVO.java | 10 +++ .../mapper/base/DlDriveSchoolCoachMapper.xml | 6 ++ .../base/DlDriveSchoolStudentMapper.xml | 50 +++++++++----- .../mapper/exam/ExamBatchItemMapper.xml | 67 +++++++++++++++++++ 16 files changed, 252 insertions(+), 21 deletions(-) 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 61170a74..13777ca0 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 @@ -166,6 +166,15 @@ public class DlDriveSchoolCoachController { return success(dlDriveSchoolCoachService.getCoachByIdAndTime(id,timeType,startTime,endTime)); } + @GetMapping("/getBusinessByIdAndTime") + @Operation(summary = "获得驾校业务经理") + public CommonResult getBusinessByIdAndTime(@RequestParam("id") String id, + @RequestParam(value = "timeType") String timeType, + @RequestParam(value = "startTime",required = false) String startTime, + @RequestParam(value = "endTime",required = false) String endTime) { + return success(dlDriveSchoolCoachService.getBusinessByIdAndTime(id,timeType,startTime,endTime)); + } + /** * * @author vinjor-M 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 27303692..571f20bc 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 @@ -105,6 +105,7 @@ public interface DlDriveSchoolCoachService extends IService **/ CoachInfoVO getCoachById(String id); CoachInfoVO getCoachByIdAndTime(String id, String timeType, String startTime, String endTime); + CoachInfoVO getBusinessByIdAndTime(String id, String timeType, String startTime, String endTime); /** * 根据邀请码查询教练信息 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 78d46af6..dbae2943 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 @@ -211,11 +211,16 @@ public class DataViewServiceImpl implements DataViewService { double coachAmount = 0; int schoolNum = 0; double schoolAmount = 0; + int businessNum = 0; + double businessAmount = 0; for (DlDriveSchoolStudentVO item : studentList) { if ("02".equals(item.getSource())) { //教练自招 coachNum++; coachAmount = coachAmount + item.getPriceAmount(); + } else if ("04".equals(item.getSource())) { + businessNum++; + businessAmount = businessAmount + item.getPriceAmount(); } else { //驾校统招 schoolNum++; @@ -225,6 +230,7 @@ public class DataViewServiceImpl implements DataViewService { int allNum = coachNum + schoolNum; double coachRate = 0; double schoolRate = 0; + double businessRate = 0; if (allNum > 0) { if (coachNum > 0) { coachRate = (double) coachNum / allNum; @@ -232,6 +238,9 @@ public class DataViewServiceImpl implements DataViewService { if (schoolNum > 0) { schoolRate = (double) schoolNum / allNum; } + if (businessNum > 0) { + businessRate = (double) businessNum / allNum; + } } studentInfoMap.put("coachNum", new BigDecimal(coachNum).setScale(2, RoundingMode.HALF_UP)); studentInfoMap.put("coachAmount", new BigDecimal(coachAmount).setScale(2, RoundingMode.HALF_UP)); @@ -239,6 +248,9 @@ public class DataViewServiceImpl implements DataViewService { studentInfoMap.put("schoolNum", schoolNum); studentInfoMap.put("schoolAmount", schoolAmount); studentInfoMap.put("schoolRate", 0 != schoolRate ? (Double.parseDouble(df.format(schoolRate)) * 100) : 0); + studentInfoMap.put("businessNum", businessNum); + studentInfoMap.put("businessAmount", businessAmount); + studentInfoMap.put("businessRate", 0 != businessRate ? (Double.parseDouble(df.format(businessRate)) * 100) : 0); rtnObj.setStudentInfo(studentInfoMap); /*4.财务情况--*/ //应收 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 2323bb2b..319ba0e0 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 @@ -643,6 +643,58 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl studentVOList = studentMapper.selectStudentListBusiness(coach.getUserId(),startTimeStr,endTimeStr); + 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 studentList = studentMapper.selectStudentList(coach.getUserId(), startTimeStr, endTimeStr); + int coachNum=0; + double coachAmount=0; + for (DlDriveSchoolStudentVO item:studentList){ + if("04".equals(item.getSource())){ + //教练自招 + coachNum++; + coachAmount = coachAmount+item.getPriceAmount(); + } + } + studentInfoMap.put("coachNum",coachNum); + studentInfoMap.put("coachAmount",coachAmount); + result.setStudentInfoMap(studentInfoMap); + return result; + } + /** * 根据邀请码查询教练信息 */ 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 c76eb703..bbe1ffc2 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 @@ -456,6 +456,9 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl> batchItemListByCoach(ExamBatchVO examBatchVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo,pageSize); + return success(examBatchItemService.batchItemListByCoach(examBatchVO, page)); + } + +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/controller/app/AppExamBatchController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/controller/app/AppExamBatchController.java index 8c81c9b1..ea205ad0 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/controller/app/AppExamBatchController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/controller/app/AppExamBatchController.java @@ -64,4 +64,6 @@ public class AppExamBatchController { examBatchItemService.updateObjNew(examBatchVO); return success(true); } + + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchItemMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchItemMapper.java index 83681a38..661e9ba1 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchItemMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchItemMapper.java @@ -32,4 +32,5 @@ public interface ExamBatchItemMapper extends BaseMapper { List selectExamByUserIdAndCoachId(@Param("userId") Long userId, @Param("coachId") Long coachId); List listJoinBatchByIds(@Param("examIds") List examIds); + IPage batchItemListByCoach(@Param("entity") ExamBatchVO examBatchVO, Page page); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchItemService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchItemService.java index 3d96fe02..f0d4b708 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchItemService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchItemService.java @@ -84,4 +84,6 @@ public interface ExamBatchItemService extends IService { * @return */ List listJoinBatchByIds(List examIds); + + IPage batchItemListByCoach(ExamBatchVO examBatchVO, Page page); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchItemServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchItemServiceImpl.java index db027106..4f700e6c 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchItemServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchItemServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.exam.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.base.constant.SchoolBaseConstants; import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService; @@ -365,4 +366,41 @@ public class ExamBatchItemServiceImpl extends ServiceImpl batchItemListByCoach(ExamBatchVO examBatchVO, Page page) { + if (examBatchVO == null) { + return null; + } + String startTimeStr = ""; + String endTimeStr = ""; + String startTime = examBatchVO.getStartTimeSearch(); + String endTime = examBatchVO.getEndTimeSearch(); + String timeType = examBatchVO.getTimeType(); + if("more".equals(timeType)){ + if(org.apache.commons.lang3.StringUtils.isNotEmpty(startTime)){ + startTimeStr = startTime+" 00:00:01"; + } + if(org.apache.commons.lang3.StringUtils.isNotEmpty(endTime)) { + endTimeStr = endTime + " 23:59:59"; + } + }else if("month".equals(timeType)){ + //当月 + startTimeStr = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 00:00:01"; + endTimeStr = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 23:59:59"; + }else if("day".equals(timeType)){ + //当天 + startTimeStr = DateUtil.formatDate(DateUtil.date())+" 00:00:01"; + endTimeStr = DateUtil.formatDate(DateUtil.date())+" 23:59:59"; + } + examBatchVO.setStartTimeSearch(startTimeStr); + examBatchVO.setEndTimeSearch(endTimeStr); + return baseMapper.batchItemListByCoach(examBatchVO, page); + } } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchVO.java index 51bba21e..bc99855d 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchVO.java @@ -28,4 +28,14 @@ public class ExamBatchVO extends ExamBatch { * 查询时间区间-结束 */ private String endTimeSearch; + + /** + * 通过人数 + */ + private Integer passCount; + /** + * 学生人数 + */ + private Integer studentCount; + } 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 4870433f..855c026c 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolCoachMapper.xml @@ -160,6 +160,12 @@ AND (dss.phone LIKE CONCAT('%', #{entity.phone}, '%') OR dsc.phone LIKE CONCAT('%', #{entity.phone}, '%')) + + AND dsco.is_sign = #{entity.isSign} + + + AND dsco.payment_status = #{entity.paymentStatus} + ORDER BY dsco.create_time DESC diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index 3167e398..ecf74f55 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -317,37 +317,50 @@ + + From 691c3f3220510805aaeab9846a691a8abff2ed72 Mon Sep 17 00:00:00 2001 From: Lihx Date: Sun, 8 Jun 2025 15:57:00 +0800 Subject: [PATCH 09/16] 0608 --- .../service/impl/DataViewServiceImpl.java | 41 ++++++++++++++++++- .../module/base/vo/DlDriveSchoolStaffVO.java | 4 ++ .../base/DlDriveSchoolStudentMapper.xml | 4 +- .../resources/mapper/course/ProcessMapper.xml | 2 + 4 files changed, 49 insertions(+), 2 deletions(-) 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 dbae2943..4406eaf6 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 @@ -457,6 +457,45 @@ public class DataViewServiceImpl implements DataViewService { List list = studentMapper.selectStudentListCount(); Map rtnMap = new HashMap<>(); rtnMap.put("all", list.size()); + + // 按 courseType 分组 + Map> courseTypeMap = list.stream() + .filter(item -> item.getCourseType() != null) + .collect(Collectors.groupingBy(DlDriveSchoolStaffVO::getCourseType)); + + // 统计各 courseType 的总人数 + for (String courseType : courseTypeMap.keySet()) { + rtnMap.put(courseType, courseTypeMap.get(courseType).size()); + } + + // 按毕业状态分组(gradTime 是否为空) + Map> graduatedMap = list.stream() + .filter(item -> item.getCourseType() != null) + .collect(Collectors.groupingBy( + item -> item.getGradTime() != null ? "graduated" : "notGraduated" + )); + + // 统计总毕业/未毕业人数 + rtnMap.put("graduated", graduatedMap.getOrDefault("graduated", Collections.emptyList()).size()); + rtnMap.put("notGraduated", graduatedMap.getOrDefault("notGraduated", Collections.emptyList()).size()); + + // 按 courseType + 毕业状态分组(例如:C1_graduated, C2_notGraduated) + Map courseTypeGraduatedCount = list.stream() + .filter(item -> item.getCourseType() != null) + .collect(Collectors.groupingBy( + item -> item.getCourseType() + "_" + (item.getGradTime() != null ? "graduated" : "notGraduated"), + Collectors.counting() + )); + + // 将 courseType + 毕业状态的统计结果放入 rtnMap + courseTypeGraduatedCount.forEach((key, count) -> rtnMap.put(key, count)); + + return rtnMap; + } + /*public Map getStudentCount() { + List list = studentMapper.selectStudentListCount(); + Map rtnMap = new HashMap<>(); + rtnMap.put("all", list.size()); //按courseType分组 Map> map = list.stream() .filter(item -> item.getCourseType() != null) // 过滤掉 courseType 为 null 的元素 @@ -487,5 +526,5 @@ public class DataViewServiceImpl implements DataViewService { rtnMap.put("graduated", graduatedCount); rtnMap.put("notGraduated", notGraduatedCount); return rtnMap; - } + }*/ } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java index e5af0125..a63a7114 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java @@ -64,4 +64,8 @@ public class DlDriveSchoolStaffVO { private List age; /**拿证天数*/ private Integer passDays; + /**毕业时间*/ + private Date gradTime; + /**拿证时间*/ + private Date passTime; } diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index ecf74f55..48a6266c 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -476,7 +476,9 @@ + + diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index 48a6266c..7deafeca 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -177,7 +177,14 @@ -- AND dsco.payment_status in ( '2', '3', '4', '5' ) -- AND dsco.is_sign = 1 AND dss.id IS NOT NULL - AND dss.source = '04' + + + AND dss.source = '01' + + + AND dss.source = '04' + + AND dss.source_user_id = #{entity.coachId} AND dss.`name` LIKE CONCAT('%',#{entity.name},'%') @@ -363,6 +370,55 @@ GROUP BY dss.user_id -- 按学生分组,确保每个学生只出现一次 + + + + + UPDATE drive_school_course_deduct + SET deleted = 1 + WHERE scheme_id = #{schemeId} + + + + INSERT INTO drive_school_course_deduct + (deduct, course_id, scheme_id, course_subject, tenant_id, creator, create_time) + VALUES + + (#{item.deduct}, #{item.courseId}, #{item.schemeId}, #{item.courseSubject}, + #{item.tenantId}, #{item.creator}, #{item.createTime}) + + diff --git a/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml b/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml index 269fd1a7..8c4f85b5 100644 --- a/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml @@ -55,7 +55,7 @@ dsp.deleted = 0 and dsp.coach_name like concat('%', #{entity.coachName}, '%') and dsp.user_name like concat('%', #{entity.userName}, '%') - and dsp.name like concat('%', #{entity.courseName}, '%') + and dsp.course_name like concat('%', #{entity.courseName}, '%') and dsp.user_id = #{entity.userId} and dsp.course_id = #{entity.courseId} and dsp.subject = #{entity.subject} @@ -100,7 +100,7 @@ dsp.deleted = 0 AND dsp.subject in (2,3) and dsp.coach_name like concat('%', #{entity.coachName}, '%') and dsp.user_name like concat('%', #{entity.userName}, '%') - and dsp.name like concat('%', #{entity.courseName}, '%') + and dsp.course_name like concat('%', #{entity.courseName}, '%') and dsp.user_id = #{entity.userId} and dsp.course_id = #{entity.courseId} and dsp.exam_status = #{entity.examStatus} @@ -157,22 +157,47 @@ + + + + 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 185fda61..b9168b0a 100644 --- a/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml @@ -118,4 +118,24 @@ #{deleted}) + + + + diff --git a/dl-module-jx/src/main/resources/mapper/course/SchoolCourseSchemeMapper.xml b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseSchemeMapper.xml new file mode 100644 index 00000000..e593fb45 --- /dev/null +++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseSchemeMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + 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 16e64739..6c16ba7e 100644 --- a/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml @@ -225,4 +225,10 @@ ORDER BY student_count DESC--> + + From e5ff111e8fee671016a33e391d496170e1c31cd1 Mon Sep 17 00:00:00 2001 From: Lx <935448346@qq.com> Date: Fri, 13 Jun 2025 18:06:46 +0800 Subject: [PATCH 11/16] 0613-1 --- .../module/base/service/impl/DataViewServiceImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 3978ebc1..fb4af103 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 @@ -250,7 +250,8 @@ public class DataViewServiceImpl implements DataViewService { studentInfoMap.put("schoolRate", 0 != schoolRate ? (Double.parseDouble(df.format(schoolRate)) * 100) : 0); studentInfoMap.put("businessNum", businessNum); studentInfoMap.put("businessAmount", businessAmount); - studentInfoMap.put("businessRate", 0 != businessRate ? (Double.parseDouble(df.format(businessRate)) * 100) : 0); +// studentInfoMap.put("businessRate", 0 != businessRate ? (Double.parseDouble(df.format(businessRate)) * 100) : 0); + studentInfoMap.put("businessRate", businessRate != 0 ? formatRate(businessRate) : 0); rtnObj.setStudentInfo(studentInfoMap); /*4.财务情况--*/ //应收 @@ -392,7 +393,12 @@ public class DataViewServiceImpl implements DataViewService { return rtnObj; } - + private Double formatRate(double rate) { + return BigDecimal.valueOf(rate) + .multiply(BigDecimal.valueOf(100)) // 转为百分比 + .setScale(2, RoundingMode.HALF_UP) // 四舍五入保留两位小数 + .doubleValue(); // 转为 Double 存入 Map + } @Override public IndexDataVO selectIndexInfoByBusiness(String type, String timeType, Long coachId, String startTime, String endTime, Integer isSign) { IndexDataVO rtnObj = new IndexDataVO(); From f20e47602775ec4c594c83bf92517df952a7a80d Mon Sep 17 00:00:00 2001 From: Lx <935448346@qq.com> Date: Wed, 18 Jun 2025 17:24:30 +0800 Subject: [PATCH 12/16] 0618 --- .../admin/DlDriveSchoolStudentController.java | 33 ++++++ .../mapper/DlDriveSchoolStudentMapper.java | 9 ++ .../service/DlDriveSchoolStudentService.java | 10 ++ .../service/impl/DataViewServiceImpl.java | 4 +- .../impl/DlDriveSchoolCoachServiceImpl.java | 12 +- .../impl/DlDriveSchoolStudentServiceImpl.java | 16 +++ .../controller/admin/ProcessController.java | 32 +++++ .../course/entity/SchoolCourseOrder.java | 4 + .../module/course/mapper/ProcessMapper.java | 14 +++ .../module/course/service/ProcessService.java | 17 +++ .../service/impl/ProcessServiceImpl.java | 110 ++++++++++++++++++ .../impl/SchoolCourseOrderServiceImpl.java | 18 +++ .../yudao/module/course/vo/ProcessVO.java | 5 + .../controller/admin/ExamBatchController.java | 19 +++ .../module/exam/mapper/ExamBatchMapper.java | 5 +- .../module/exam/service/ExamBatchService.java | 6 + .../service/impl/ExamBatchServiceImpl.java | 29 ++++- .../yudao/module/exam/vo/ExamBatchNewVO.java | 34 ++++++ .../yudao/module/exam/vo/ExamBatchVO.java | 7 ++ .../base/DlDriveSchoolStudentMapper.xml | 63 ++++++++++ .../resources/mapper/course/ProcessMapper.xml | 92 +++++++++++++++ .../mapper/course/SchoolCourseOrderMapper.xml | 1 + .../mapper/exam/ExamBatchItemMapper.xml | 7 +- .../resources/mapper/exam/ExamBatchMapper.xml | 46 ++++++++ 24 files changed, 585 insertions(+), 8 deletions(-) create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchNewVO.java diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java index de9028d1..42aa8d49 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolStudentController.java @@ -265,4 +265,37 @@ public class DlDriveSchoolStudentController { return success(schoolStudentService.updateChannel(student)); } + /** + * 获取教练已经毕业的学员列表 + * @param coachId + * @param courseType + * @return + */ + @GetMapping("/getGradStudentByCoachId") + public CommonResult> getGradStudentByCourseType(@RequestParam("coachId") String coachId, + @RequestParam(name = "courseType", required = false) String courseType, + @RequestParam(name = "name", required = false) String name, + @RequestParam(name = "sort", required = false) String sort, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo, pageSize); + return success(schoolStudentService.getGradStudentByCourseType(coachId, courseType, name, sort, page)); + } + + /** + * 获取教练未毕业的学员列表 + * @param coachId + * @param courseType + * @return + */ + @GetMapping("/getNoGradStudentByCoachId") + public CommonResult> getNoGradStudentByCourseType(@RequestParam("coachId") String coachId, + @RequestParam(name = "courseType", required = false) String courseType, + @RequestParam(name = "name", required = false) String name, + @RequestParam(name = "sort", required = false) String sort, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo, pageSize); + return success(schoolStudentService.getNoGradStudentByCourseType(coachId, courseType, name, sort, page)); + } } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java index 62d048ad..57c34541 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/mapper/DlDriveSchoolStudentMapper.java @@ -152,4 +152,13 @@ public interface DlDriveSchoolStudentMapper extends BaseMapper indexCusStudentList(String startTime, String endTime); List getAll(@Param("entity") DlDriveSchoolStudent query); + + /** + * 获取教练已经毕业的学员列表 + */ + IPage getGradStudentByCourseType(@Param("coachId") String coachId, @Param("courseType") String courseType, @Param("name") String name, @Param("sort") String sort,Page page); + /** + * 获取教练已经毕业的学员列表 + */ + IPage getNoGradStudentByCourseType(@Param("coachId") String coachId, @Param("courseType") String courseType, @Param("name") String name, @Param("sort") String sort,Page page); } 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 ff56fa28..aa593cff 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 @@ -194,4 +194,14 @@ public interface DlDriveSchoolStudentService extends IService getGradStudentByCourseType(String coachId, String courseType, String name, String sort, Page page); + + /** + * 获取教练未毕业的学员列表 + */ + IPage getNoGradStudentByCourseType(String coachId, String courseType, String name, String sort, Page page); } 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 fb4af103..57f1f24a 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 @@ -250,8 +250,7 @@ public class DataViewServiceImpl implements DataViewService { studentInfoMap.put("schoolRate", 0 != schoolRate ? (Double.parseDouble(df.format(schoolRate)) * 100) : 0); studentInfoMap.put("businessNum", businessNum); studentInfoMap.put("businessAmount", businessAmount); -// studentInfoMap.put("businessRate", 0 != businessRate ? (Double.parseDouble(df.format(businessRate)) * 100) : 0); - studentInfoMap.put("businessRate", businessRate != 0 ? formatRate(businessRate) : 0); + studentInfoMap.put("businessRate", 0 != businessRate ? (Double.parseDouble(df.format(businessRate)) * 100) : 0); rtnObj.setStudentInfo(studentInfoMap); /*4.财务情况--*/ //应收 @@ -538,6 +537,7 @@ public class DataViewServiceImpl implements DataViewService { courseTypeGraduatedCount.forEach((key, count) -> rtnMap.put(key, count)); return rtnMap; + //TODO 需要修改为查询订单表的grad_time 和 pass_time } /*public Map getStudentCount() { List list = studentMapper.selectStudentListCount(); 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 319ba0e0..00faf0de 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 @@ -21,6 +21,8 @@ import cn.iocoder.yudao.module.base.vo.*; import cn.iocoder.yudao.module.constant.InspectionConstants; import cn.iocoder.yudao.module.course.entity.SchoolCommission; import cn.iocoder.yudao.module.course.mapper.SchoolCommissionMapper; +import cn.iocoder.yudao.module.course.service.ProcessService; +import cn.iocoder.yudao.module.course.vo.ProcessVO; import cn.iocoder.yudao.module.exam.mapper.ExamBatchItemMapper; import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO; import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO; @@ -112,6 +114,9 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl studentVOList = studentMapper.selectStudentListCoach(coach.getUserId(),startTimeStr,endTimeStr); - int overNum = (int) studentVOList.stream().filter(item -> null != item.getGradTime()).count(); + int overNum = (int) studentVOList.stream().filter(item -> null != item.getOrderGradTime()).count(); int noOverNum = studentVOList.size()-overNum; Map studentInfoMap = new HashMap<>(); studentInfoMap.put("overNum",overNum); studentInfoMap.put("noOverNum",noOverNum); + List subject2Over = processService.getPassStudentList(coach.getUserId(), 2, startTimeStr, endTimeStr); + List subject3Over = processService.getPassStudentList(coach.getUserId(), 3, startTimeStr, endTimeStr); + //考试情况 List examBatchItemVOList = examBatchItemMapper.selectByCoachId(coach.getUserId(),startTimeStr,endTimeStr); Double subject2Num = 0.0; @@ -562,6 +570,8 @@ public class DlDriveSchoolCoachServiceImpl extends ServiceImpl studentList = studentMapper.selectStudentList(coach.getUserId(), startTimeStr, endTimeStr); int coachNum=0; 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 bbe1ffc2..87043605 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 @@ -697,4 +697,20 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl getGradStudentByCourseType(String coachId, String courseType, String name, String sort, Page page) { + return dlDriveSchoolStudentMapper.getGradStudentByCourseType(coachId, courseType, name, sort, page); + } + + /** + * 获取教练未毕业的学员列表 + */ + @Override + public IPage getNoGradStudentByCourseType(String coachId, String courseType, String name, String sort, Page page) { + return dlDriveSchoolStudentMapper.getNoGradStudentByCourseType(coachId, courseType, name, sort, page); + } + } 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 eeaacc3e..06ce88c7 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 @@ -31,6 +31,7 @@ import javax.validation.Valid; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -198,4 +199,35 @@ public class ProcessController { public CommonResult updateCoachForScoreInput(String id, Long coachId, String coachName){ return success(processService.updateCoachForScoreInput(id, coachId, coachName)); } + + /** + * 已毕业学员统计 + */ + @GetMapping("/getGraduateStudent") + public CommonResult getGraduateStudent(String courseType){ + return success(processService.getGraduateStudent(courseType)); + } + + /** + * 未毕业学员统计 + */ + @GetMapping("/getNoGraduateStudent") + public CommonResult getNoGraduateStudent(String courseType){ + return success(processService.getNoGraduateStudent(courseType)); + } + + /** + * 获取 科目二/三 通过学员 + */ + @GetMapping("/getPassStudent") + public CommonResult> getPassStudent(@RequestParam("subject") int subject, + @RequestParam("coachId") Long coachId, + @RequestParam(name = "courseType", required = false) String courseType, + @RequestParam(name = "name", required = false) String name, + @RequestParam(name = "sort", required = false) String sort, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize){ + Page page = new Page<>(pageNo, pageSize); + return success(processService.getPassStudent(coachId, subject, courseType, name, sort, page)); + } } 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 744bfca0..ee9f7611 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 @@ -97,6 +97,10 @@ public class SchoolCourseOrder extends TenantBaseDO { * 是否已面签 0:否 1: 是 */ private Integer isSign; + /** + * 面签时间 + */ + private LocalDateTime signTime; /** * 尾款 */ diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/ProcessMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/ProcessMapper.java index 7dd40200..c3030f67 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/ProcessMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/ProcessMapper.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.course.mapper; +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachPageReqVO; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachRespVO; import cn.iocoder.yudao.module.course.entity.Process; @@ -92,4 +93,17 @@ public interface ProcessMapper extends BaseMapper { ExamBatch getBatchForProcess(@Param("entity") Process entity); + /** + * 已毕业学员统计 + */ + List getGraduateStudent(String courseType); + List getNoGraduateStudent(String courseType); + + /** + * + */ + IPage getPassStudent(@Param("coachId")Long coachId, @Param("subject")int subject, @Param("courseType") String courseType, @Param("name") String name, @Param("sort") String sort,Page page); + List getPassStudentList(@Param("coachId")Long coachId, @Param("subject")int subject, @Param("startTime") String startTime, @Param("endTime")String endTime); + + } 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 0db8c05f..77088e2a 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.course.service; +import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.vo.ProcessAndExamBatchVO; import cn.iocoder.yudao.module.course.vo.ProcessNewVO; @@ -153,4 +154,20 @@ public interface ProcessService extends IService { * 在录入成绩出修改教练 */ Boolean updateCoachForScoreInput(String id, Long coachId, String coachName); + + /** + * 已毕业学员统计 + */ + List> getGraduateStudent(String courseType); + + /** + * 未毕业学员统计 + */ + List> getNoGraduateStudent(String courseType); + + /** + * 获取 科目二/三 通过学员 + */ + IPage getPassStudent(Long coachId, int subject, String courseType, String name, String sort, Page page); + List getPassStudentList(Long coachId, int subject, String startTime, String endTime); } 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 4d3ae6f9..bd7a64f3 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 @@ -858,6 +858,114 @@ public class ProcessServiceImpl extends ServiceImpl impl return false; } } + + /** + * 已毕业学员统计 + */ + @Override + public List> getGraduateStudent(String courseType) { + List rawList = processMapper.getGraduateStudent(courseType); + + Map> resultMap = new HashMap<>(); + + for (Process row : rawList) { + Long coachId = row.getCoachId(); + String coachName = row.getCoachName(); + String courseTypeVal = row.getCourseType(); + String images = row.getImages(); + Long userId = row.getUserId(); + + // 先确保教练一定加入 map + Map coachMap = resultMap.computeIfAbsent(coachId, k -> { + Map m = new HashMap<>(); + m.put("coachId", coachId); + m.put("coachName", coachName); + m.put("studentCount", 0); + m.put("images", images); + return m; + }); + + // 有学员才进行统计 + if (userId != null) { + // 统计总数 + int count = (int) coachMap.get("studentCount"); + coachMap.put("studentCount", count + 1); + + // 统计各课程类型数量 + if (courseTypeVal != null) { + String key = courseTypeVal + "Num"; + int typeCount = (int) coachMap.getOrDefault(key, 0); + coachMap.put(key, typeCount + 1); + } + } + } + + // 按照总数倒序排序 + return resultMap.values().stream() + .sorted((a, b) -> ((Integer) b.get("studentCount")).compareTo((Integer) a.get("studentCount"))) + .collect(Collectors.toList()); + } + + /** + * 未毕业学员统计 + */ + @Override + public List> getNoGraduateStudent(String courseType) { + List rawList = processMapper.getNoGraduateStudent(courseType); + + Map> resultMap = new HashMap<>(); + + for (Process row : rawList) { + Long coachId = row.getCoachId(); + String coachName = row.getCoachName(); + String courseTypeVal = row.getCourseType(); + String images = row.getImages(); + Long userId = row.getUserId(); + + // 先确保教练一定加入 map + Map coachMap = resultMap.computeIfAbsent(coachId, k -> { + Map m = new HashMap<>(); + m.put("coachId", coachId); + m.put("coachName", coachName); + m.put("studentCount", 0); + m.put("images", images); + return m; + }); + + // 有学员才进行统计 + if (userId != null) { + // 统计总数 + int count = (int) coachMap.get("studentCount"); + coachMap.put("studentCount", count + 1); + + // 统计各课程类型数量 + if (courseTypeVal != null) { + String key = courseTypeVal + "Num"; + int typeCount = (int) coachMap.getOrDefault(key, 0); + coachMap.put(key, typeCount + 1); + } + } + } + + // 按照总数倒序排序 + return resultMap.values().stream() + .sorted((a, b) -> ((Integer) b.get("studentCount")).compareTo((Integer) a.get("studentCount"))) + .collect(Collectors.toList()); + } + + /** + * 获取 科目二/三 通过学员 + */ + @Override + public IPage getPassStudent(Long coachId, int subject, String courseType, String name, String sort, Page page) { + return processMapper.getPassStudent(coachId, subject, courseType, name, sort, page); + } + + @Override + public List getPassStudentList(Long coachId, int subject, String startTime, String endTime) { + return processMapper.getPassStudentList(coachId, subject, startTime, endTime); + } + /** * 生成32位uuid */ @@ -866,4 +974,6 @@ public class ProcessServiceImpl extends ServiceImpl impl return uuid.toString().replace("-", ""); } + + } 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 8bec23be..ddc24c13 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 @@ -88,6 +88,7 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl getStudentByCoachId(@RequestParam("subject") int subject, + @RequestParam(name ="coachId", required = false) Long coachId, + @RequestParam(name = "ifPass", required = false) String ifPass, + @RequestParam(name = "name", required = false) String name, + @RequestParam(name = "sort", required = false) String sort, + @RequestParam(name = "timeType", required = false) String timeType, + @RequestParam(name = "startTime", required = false) String startTime, + @RequestParam(name = "endTime", required = false) String endTime, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo,pageSize); + return success(examBatchService.getStudentByCoachId(subject, coachId, ifPass, name, sort, timeType, startTime, endTime, page)); + } + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchMapper.java index 1e194219..11145f83 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchMapper.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.exam.mapper; import cn.iocoder.yudao.module.exam.entity.ExamBatch; +import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -18,4 +19,6 @@ public interface ExamBatchMapper extends BaseMapper { IPage queryListPage(@Param("entity") ExamBatchVO entity, Page page); -} \ No newline at end of file + IPage getStudentByCoachId(@Param("subject") int subject, @Param("coachId")Long coachId, @Param("ifPass")String ifPass, @Param("name")String name, @Param("sort")String sort, @Param("startTime") String startTime, @Param("endTime") String endTime, Page page); + +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchService.java index 332d2404..799a455d 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.exam.service; import cn.iocoder.yudao.module.exam.entity.ExamBatch; +import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -38,4 +39,9 @@ public interface ExamBatchService extends IService { * @return cn.iocoder.yudao.module.exam.vo.ExamBatchVO **/ ExamBatchVO selectOneById(String id); + + /** + * 某一教练学员通过和未通过列表 + */ + IPage getStudentByCoachId(int subject, Long coachId, String ifPass, String name, String sort, String timeType, String startTime, String endTime, Page page); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchServiceImpl.java index 056e0600..b0f30ad9 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchServiceImpl.java @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.exam.mapper.ExamBatchMapper; import cn.iocoder.yudao.module.exam.service.ExamBatchItemService; import cn.iocoder.yudao.module.exam.service.ExamBatchService; import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO; +import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -146,4 +147,30 @@ public class ExamBatchServiceImpl extends ServiceImpl getStudentByCoachId(int subject, Long coachId, String ifPass, String name, String sort, String timeType, String startTime, String endTime, Page page) { + String startTimeStr = ""; + String endTimeStr = ""; + if("more".equals(timeType)){ + if(StringUtils.isNotEmpty(startTime)){ + startTimeStr = startTime+" 00:00:01"; + } + if(StringUtils.isNotEmpty(endTime)) { + endTimeStr = endTime + " 23:59:59"; + } + }else if("month".equals(timeType)){ + //当月 + startTimeStr = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 00:00:01"; + endTimeStr = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 23:59:59"; + }else if("day".equals(timeType)){ + //当天 + startTimeStr = DateUtil.formatDate(DateUtil.date())+" 00:00:01"; + endTimeStr = DateUtil.formatDate(DateUtil.date())+" 23:59:59"; + } + return examBatchMapper.getStudentByCoachId(subject,coachId,ifPass,name,sort,startTimeStr,endTimeStr,page); + } + +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchNewVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchNewVO.java new file mode 100644 index 00000000..f3ceb2b5 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchNewVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.exam.vo; + +import cn.iocoder.yudao.module.exam.entity.ExamBatch; +import lombok.Data; + +import java.util.Date; + +@Data +public class ExamBatchNewVO extends ExamBatch { + + /** + * 学员姓名 + */ + private String name; + + /** + * 学员头像 + */ + private String avatar; + + /** + * 学员id + */ + private Long userId; + /** + * 学员手机号 + */ + private String phone; + + /** + * 考试时间 + */ + private Date startTime; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchVO.java index bc99855d..f98ce3fc 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchVO.java @@ -38,4 +38,11 @@ public class ExamBatchVO extends ExamBatch { */ private Integer studentCount; + /** + * 教练头像 + */ + private String image; + + + } diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index 7deafeca..6e3e2c10 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -529,6 +529,7 @@ AND dsco.create_time <= #{endTime} + + + + + + + + + diff --git a/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml b/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml index 8c4f85b5..a116b575 100644 --- a/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml @@ -200,4 +200,96 @@ + + + + + + + + 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 b9168b0a..aa758f60 100644 --- a/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml @@ -28,6 +28,7 @@ and main.user_id = #{entity.userId} and main.payment_status = #{entity.paymentStatus} and main.if_end = #{entity.ifEnd} + and main.coach_user_name = #{entity.coachUserName} order by main.create_time desc 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 6c16ba7e..34100309 100644 --- a/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/exam/ExamBatchItemMapper.xml @@ -163,6 +163,7 @@ SELECT c.user_id AS coach_id, c.name AS coach_name, + c.image, COUNT(i.id) AS student_count, SUM(CASE WHEN i.if_pass = 1 THEN 1 ELSE 0 END) AS pass_count, ROUND( @@ -179,15 +180,15 @@ LEFT JOIN drive_school_exam_batch_item i ON i.batch_id = b.id AND i.deleted = 0 - AND i.create_time >= #{entity.startTimeSearch} + AND b.start_time >= #{entity.startTimeSearch} - AND i.create_time <= #{entity.endTimeSearch} + AND b.start_time <= #{entity.endTimeSearch} WHERE c.deleted = 0 - AND c.id = #{entity.coachId} + AND c.user_id = #{entity.coachId} GROUP BY c.id, c.name diff --git a/dl-module-jx/src/main/resources/mapper/exam/ExamBatchMapper.xml b/dl-module-jx/src/main/resources/mapper/exam/ExamBatchMapper.xml index a9046d13..11e64dca 100644 --- a/dl-module-jx/src/main/resources/mapper/exam/ExamBatchMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/exam/ExamBatchMapper.xml @@ -27,4 +27,50 @@ ORDER BY dseb.create_time DESC + + 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 13/16] 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"); From 2016d8db9c8fa34bbfcaebfab92ccc793989f629 Mon Sep 17 00:00:00 2001 From: Lx <935448346@qq.com> Date: Mon, 23 Jun 2025 17:34:00 +0800 Subject: [PATCH 14/16] 0623 --- .../base/constant/SchoolBaseConstants.java | 5 + .../DlDriveSchoolCourseDeductController.java | 1 + .../service/impl/DataViewServiceImpl.java | 25 ++- .../impl/DlDriveSchoolStudentServiceImpl.java | 1 - .../module/base/vo/DlDriveSchoolStaffVO.java | 23 +++ .../yudao/module/base/vo/StudentCountVO.java | 2 + .../admin/SchoolCommissionController.java | 50 ++++-- .../admin/SchoolCourseOrderController.java | 33 ++++ .../yudao/module/course/entity/Process.java | 11 +- .../course/entity/SchoolCommission.java | 26 +++ .../course/entity/SchoolCourseOrder.java | 13 ++ .../course/mapper/SchoolCommissionMapper.java | 11 +- .../mapper/SchoolCourseOrderMapper.java | 11 ++ .../service/SchoolCommissionService.java | 22 +++ .../service/SchoolCourseOrderService.java | 18 +++ .../service/impl/ProcessServiceImpl.java | 26 ++- .../impl/SchoolCommissionServiceImpl.java | 80 ++++++++++ .../impl/SchoolCourseOrderServiceImpl.java | 102 ++++++++++++ .../yudao/module/course/vo/ProcessVO.java | 5 + .../module/course/vo/SchoolCommissionVO.java | 10 +- .../module/course/vo/SchoolCourseOrderVO.java | 20 +++ .../impl/StudentScoreInputServiceImpl.java | 9 ++ .../base/DlDriveSchoolStudentMapper.xml | 14 +- .../mapper/course/SchoolCommissionMapper.xml | 49 ++++++ .../mapper/course/SchoolCourseOrderMapper.xml | 151 +++++++++++++++++- 25 files changed, 696 insertions(+), 22 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 b19ad58e..0715cac7 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 @@ -160,4 +160,9 @@ public interface SchoolBaseConstants { */ public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_WAIT = "驾校学员 %s ,身份证号:%s,科目 %s 的考试已通过,提成待审核,请查看!"; + /** + * 审核通过 + */ + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_PASS = "驾校教练 %s 的学员 %s ,身份证号:%s,科目 %s 的提成审核已通过,请查看!"; + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCourseDeductController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCourseDeductController.java index f9066cf1..18c0d949 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCourseDeductController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/controller/admin/DlDriveSchoolCourseDeductController.java @@ -44,4 +44,5 @@ public class DlDriveSchoolCourseDeductController { driveSchoolCourseDeductService.add(list); return CommonResult.ok(); } + } 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 57f1f24a..09ae84b0 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 @@ -255,17 +255,28 @@ public class DataViewServiceImpl implements DataViewService { /*4.财务情况--*/ //应收 Double showedReceive = courseOrderMapper.selectByCoachUserId(coachId, startTimeStr, endTimeStr); + // 已确认收款 + Double showedIsConfirmedReceive = courseOrderMapper.selectByCoachUserIdIsConfirmed(coachId, startTimeStr, endTimeStr); //应付 List schoolCommissionList = commissionMapper.selectByCoachId(coachId, startTimeStr, endTimeStr); double showedPay = 0.0; + double showedPayIsPaid = 0.0; for (SchoolCommission item : schoolCommissionList) { if (null != item.getCommissionAmount()) { - showedPay = showedPay + item.getCommissionAmount().doubleValue(); +// showedPay = showedPay + item.getCommissionAmount().doubleValue(); + double amount = item.getCommissionAmount().doubleValue(); + showedPay += amount; + + if (Boolean.TRUE.equals(item.getIfPay())) { + showedPayIsPaid += amount; + } } } Map moneyInfoMap = new HashMap<>(); moneyInfoMap.put("inAmount", null == showedReceive ? 0 : showedReceive); moneyInfoMap.put("outAmount", showedPay); + moneyInfoMap.put("confirmedReceive", null == showedIsConfirmedReceive ? 0 : showedIsConfirmedReceive); + moneyInfoMap.put("showedPayIsPaid", showedPayIsPaid); rtnObj.setMoneyInfo(moneyInfoMap); } else if ("coach".equals(type)) { //教练查询 @@ -323,8 +334,11 @@ public class DataViewServiceImpl implements DataViewService { rtnObj.setMoneyInfo(moneyInfoMap); } /*2.训练情况*/ - List allTrainList = trainMapper.selectTrainByCondition(coachId, startTimeStr, endTimeStr); +// List allTrainList = trainMapper.selectTrainByCondition(coachId, startTimeStr, endTimeStr); //所有车辆set,目的是去重 + List allTrainList = Optional.ofNullable( + trainMapper.selectTrainByCondition(coachId, startTimeStr, endTimeStr) + ).orElse(Collections.emptyList()); Set allCarSet = new HashSet<>(); Set subject2CarSet = new HashSet<>(); Set subject3CarSet = new HashSet<>(); @@ -332,6 +346,13 @@ public class DataViewServiceImpl implements DataViewService { Set subject2UserSet = new HashSet<>(); Set subject3UserSet = new HashSet<>(); for (TrainVO trainVO : allTrainList) { + if (trainVO == null + || trainVO.getSubject() == null + || trainVO.getCarNo() == null + || trainVO.getUserId() == null + || trainVO.getCourseId() == null) { + continue; + } if (2 == trainVO.getSubject()) { subject2CarSet.add(trainVO.getCarNo()); allCarSet.add(trainVO.getCarNo()); 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 87043605..62379c39 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 @@ -457,7 +457,6 @@ public class DlDriveSchoolStudentServiceImpl extends ServiceImpl getSchoolCommission(@RequestParam("id") String id) { -//// SchoolCommissionDO schoolCommission = schoolCommissionService.getSchoolCommission(id); -// return success(BeanUtils.toBean(schoolCommission, SchoolCommissionRespVO.class)); -// } -// + @GetMapping("/get") + @Operation(summary = "获得提成记录") + public CommonResult getSchoolCommission(@RequestParam("id") String id) { + return success(schoolCommissionService.getSchoolCommissionById(id)); + } + /** + * 出纳审核提成记录 + * @param schoolCommissionVO + * @return + */ + @PutMapping("/cashierConfirm") + public CommonResult cashierConfirm(@RequestBody SchoolCommissionVO schoolCommissionVO) { + boolean b = schoolCommissionService.cashierConfirm(schoolCommissionVO); + return success(b); + } + + + /** + * 教练提成合计列表 + */ + @GetMapping("/getCoachTotalCommission") + public CommonResult> getCoachTotalCommission(SchoolCommissionVO schoolCommissionVO){ + return success(schoolCommissionService.getCoachTotalCommission(schoolCommissionVO)); + } + + /** + * 教练提成信息列表 + */ + @GetMapping("/getCommissionListByCoachId") + public CommonResult> getCommissionListByCoachId(SchoolCommissionVO schoolCommissionVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize){ + Page page = new Page<>(pageNo, pageSize); + return success(schoolCommissionService.getCommissionListByCoachId(schoolCommissionVO, page)); + } } 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 703aa23b..d011c202 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 @@ -159,6 +159,39 @@ public class SchoolCourseOrderController { return success(schoolCourseOrderService.getOrderCountBySchemeId(schemeId)); } + /** + * 根据教练id获取对应招生 + */ + @GetMapping("getOrderByCoachId") + public CommonResult> getOrderByCoachId(SchoolCourseOrderVO pageReqVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize){ + Page page = new Page<>(pageNo, pageSize); + return success(schoolCourseOrderService.getOrderByCoachId(pageReqVO, page)); + } + + /** + * 获取教练的订单总金额 + * @param pageReqVO + * @return + */ + @GetMapping("getCoachMoney") + public CommonResult> getCoachMoney(SchoolCourseOrderVO pageReqVO){ + return success(schoolCourseOrderService.getCoachMoney(pageReqVO)); + } + + /** + * 获取教练的订单明细 + * @param pageReqVO + * @return + */ + @GetMapping("getOrderMoneyByCoachId") + public CommonResult> getOrderMoneyByCoachId(SchoolCourseOrderVO pageReqVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize){ + Page page = new Page<>(pageNo, pageSize); + return success(schoolCourseOrderService.getOrderMoneyByCoachId(pageReqVO, page)); + } } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/Process.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/Process.java index d3d20724..62a483fc 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/Process.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/entity/Process.java @@ -104,4 +104,13 @@ public class Process extends TenantBaseDO { */ private String courseType; -} \ No newline at end of file + /** + * 成绩录入人 + */ + private String inputName; + /** + * 成绩录入人id + */ + private Long inputUserId; + +} 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 568c084d..f964cf1d 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.time.LocalDateTime; import java.util.Date; /** @@ -85,4 +86,29 @@ public class SchoolCommission extends TenantBaseDO { */ private String checkRemark; + /** + * 出纳确认日期 + */ + private LocalDateTime cashierConfirmTime; + + /** + * 出纳确认备注 + */ + private String cashierConfirmRemark; + + /** + * 证明材料 + */ + private String images; + + /** + * 确认人姓名 + */ + private String cashierName; + + /** + * 确认人id + */ + private Long cashierUserId; + } 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 ee9f7611..5760f5ec 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 @@ -146,5 +146,18 @@ public class SchoolCourseOrder extends TenantBaseDO { */ private String schemeId; + /** + * 出纳确认是否到账 + */ + private String cashierConfirm; + + /** + * 出纳确认备注 + */ + private String cashierConfirmRemark; + + /** 订单备注 */ + private String orderRemark; + } 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 d56b2f4a..3bad0436 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 @@ -31,5 +31,14 @@ public interface SchoolCommissionMapper extends BaseMapper { List selectByCoachId(@Param("coachId")Long coachId,@Param("startTime")String startTime,@Param("endTime")String endTime); + SchoolCommissionVO getSchoolCommissionById(@Param("id") String id); -} \ No newline at end of file + /** + * 教练提成合计列表 + */ + List getCoachTotalCommission(@Param("entity") SchoolCommissionVO entity); + + IPage getCommissionListByCoachId(@Param("entity") SchoolCommissionVO entity, Page page); + + +} 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 c4e65d3b..d6fcd1c5 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 @@ -11,6 +11,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 * @@ -41,6 +43,7 @@ public interface SchoolCourseOrderMapper extends BaseMapper { * @return java.util.List **/ Double selectByCoachUserId(@Param("coachId")Long coachId,@Param("startTime")String startTime,@Param("endTime")String endTime); + Double selectByCoachUserIdIsConfirmed(@Param("coachId")Long coachId,@Param("startTime")String startTime,@Param("endTime")String endTime); /** 学员订单信息 */ @@ -59,4 +62,12 @@ public interface SchoolCourseOrderMapper extends BaseMapper { * 查询是否有订单使用该提成方案 */ Integer getOrderCountBySchemeId(@Param("schemeId") String schemeId); + + /** + * 根据教练id获取对应招生 + */ + IPage getOrderByCoachId(@Param("entity")SchoolCourseOrderVO entity, Page page); + + List getCoachMoney(@Param("entity")SchoolCourseOrderVO entity); + IPage getOrderMoneyByCoachId(@Param("entity")SchoolCourseOrderVO entity, Page page); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCommissionService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCommissionService.java index 23d33afb..432b4e90 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCommissionService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCommissionService.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 提成记录 Service 接口 * @@ -35,4 +37,24 @@ public interface SchoolCommissionService extends IService { */ boolean exists(SchoolCommission entity); + /** + * 根据id获取提成记录详细信息 + */ + SchoolCommissionVO getSchoolCommissionById(String id); + + /** + * 出纳审核提成记录 + */ + boolean cashierConfirm(SchoolCommissionVO schoolCommissionVO); + + /** + * 教练提成合计列表 + */ + List getCoachTotalCommission(SchoolCommissionVO schoolCommissionVO); + + /** + * 教练提成列表 + */ + IPage getCommissionListByCoachId(SchoolCommissionVO schoolCommissionVO, Page page); + } 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 a60e02cd..6ddff0af 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 @@ -125,4 +125,22 @@ public interface SchoolCourseOrderService extends IService { */ Integer getOrderCountBySchemeId(String schemeId); + /** + * 根据教练id获取对应招生 + */ + IPage getOrderByCoachId(SchoolCourseOrderVO pageReqVO, Page page); + + /** + * 获取教练的订单总金额 + * @param pageReqVO + * @return + */ + List getCoachMoney(SchoolCourseOrderVO pageReqVO); + /** + * 获取教练的订单明细 + * @param pageReqVO + * @return + */ + IPage getOrderMoneyByCoachId(SchoolCourseOrderVO pageReqVO, Page page); + } 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 e3c3c8e0..c96c3fc6 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 @@ -376,26 +376,27 @@ public class ProcessServiceImpl extends ServiceImpl impl } // 查询提成规则 - DriveSchoolCourseDeduct deduct = deductService.getOne( + /*DriveSchoolCourseDeduct deduct = deductService.getOne( Wrappers.lambdaQuery() .eq(DriveSchoolCourseDeduct::getCourseId, process.getCourseId()) .eq(DriveSchoolCourseDeduct::getCourseSubject, process.getSubject()) - ); + );*/ // 如果存在提成规则 - if (deduct != null) { + if (process.getCoachCommission() != null) { // 构建提成记录对象 SchoolCommission schoolCommission = new SchoolCommission(); schoolCommission.setCoachUserId(oldProcess.getCoachId()); schoolCommission.setCoachName(oldProcess.getCoachName()); schoolCommission.setStudentId(oldProcess.getUserId()); schoolCommission.setStudentName(oldProcess.getUserName()); - schoolCommission.setCommissionAmount(deduct.getDeduct()); + schoolCommission.setCommissionAmount(process.getCoachCommission()); schoolCommission.setCourseId(oldProcess.getCourseId()); schoolCommission.setSubject(String.valueOf(oldProcess.getSubject())); schoolCommission.setCheckId(sysUser.getId()); schoolCommission.setCheckName(sysUser.getNickname()); schoolCommission.setCheckRemark(process.getFinanceRemark()); + schoolCommission.setStudentIdCard(process.getStudentIdCard()); // 检查是否已存在记录 SchoolCommission existing = schoolCommissionService.getOne( @@ -422,6 +423,18 @@ public class ProcessServiceImpl extends ServiceImpl impl } } else if (process.getFinancePass()) { + + Long tenantId = TenantContextHolder.getTenantId(); + List officeStaffList = roleApi.selectUserListByRoleCode(tenantId, "cn"); + + if (officeStaffList != null && !officeStaffList.isEmpty()) { + String officeMessage = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_PASS, process.getCoachName(), process.getUserName(), process.getStudentIdCard(), process.getSubject()); + + for (UserDTO staff : officeStaffList) { + schoolNotifyMessageSendService.sendMessage(staff.getId(), officeMessage, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN, null); + } + } + // 仅审核通过时新增记录 schoolCommission.setDeleted(false); schoolCommissionService.save(schoolCommission); @@ -811,6 +824,7 @@ public class ProcessServiceImpl extends ServiceImpl impl BigDecimal studentPay = BigDecimal.ZERO; BigDecimal studentRemainingPay = BigDecimal.ZERO; String studentIdCard = null; + String cashierConfirm = null; if (!courseByInfo.isEmpty()) { studentPay = courseByInfo.get(0).getReserveMoney() != null ? courseByInfo.get(0).getReserveMoney() : BigDecimal.ZERO; @@ -818,11 +832,15 @@ public class ProcessServiceImpl extends ServiceImpl impl courseByInfo.get(0).getRestMoney() : BigDecimal.ZERO; studentIdCard = courseByInfo.get(0).getUserNo() != null ? courseByInfo.get(0).getUserNo() : null; + cashierConfirm = courseByInfo.get(0).getCashierConfirm()!= null? + courseByInfo.get(0).getCashierConfirm() : null; + } processVO.setCoachCommission(deduct); processVO.setStudentPay(studentPay); processVO.setStudentRemainingPay(studentRemainingPay); processVO.setStudentIdCard(studentIdCard); + processVO.setCashierConfirm(cashierConfirm); 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/SchoolCommissionServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCommissionServiceImpl.java index e66092ac..bcf2ea7a 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCommissionServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCommissionServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.course.service.impl; +import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.course.entity.SchoolCommission; import cn.iocoder.yudao.module.course.mapper.SchoolCommissionMapper; @@ -10,6 +11,7 @@ import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; 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.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -17,6 +19,8 @@ import org.springframework.validation.annotation.Validated; import cn.iocoder.yudao.framework.common.exception.ServiceException; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; /** * 提成记录 Service 实现类 @@ -81,4 +85,80 @@ public class SchoolCommissionServiceImpl extends ServiceImpl getCoachTotalCommission(SchoolCommissionVO schoolCommissionVO) { + String startTime = ""; + String endTime = ""; + if ("more".equals(schoolCommissionVO.getTimeType())) { + if (StringUtils.isNotEmpty(schoolCommissionVO.getStartTimeStr())) { + startTime = schoolCommissionVO.getStartTimeStr() + " 00:00:01"; + } + if (StringUtils.isNotEmpty(schoolCommissionVO.getEndTimeStr())) { + endTime = schoolCommissionVO.getEndTimeStr() + " 23:59:59"; + } + } else if ("month".equals(schoolCommissionVO.getTimeType())) { + //当月 + startTime = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 00:00:01"; + endTime = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 23:59:59"; + } else if ("day".equals(schoolCommissionVO.getTimeType())) { + //当天 + startTime = DateUtil.formatDate(DateUtil.date()) + " 00:00:01"; + endTime = DateUtil.formatDate(DateUtil.date()) + " 23:59:59"; + } + schoolCommissionVO.setStartTimeStr(startTime); + schoolCommissionVO.setEndTimeStr(endTime); + return schoolCommissionMapper.getCoachTotalCommission(schoolCommissionVO); + } + + /** + * 教练提成列表 + */ + @Override + public IPage getCommissionListByCoachId(SchoolCommissionVO schoolCommissionVO, Page page) { + String startTime = ""; + String endTime = ""; + if ("more".equals(schoolCommissionVO.getTimeType())) { + if (StringUtils.isNotEmpty(schoolCommissionVO.getStartTimeStr())) { + startTime = schoolCommissionVO.getStartTimeStr() + " 00:00:01"; + } + if (StringUtils.isNotEmpty(schoolCommissionVO.getEndTimeStr())) { + endTime = schoolCommissionVO.getEndTimeStr() + " 23:59:59"; + } + } else if ("month".equals(schoolCommissionVO.getTimeType())) { + //当月 + startTime = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 00:00:01"; + endTime = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 23:59:59"; + } else if ("day".equals(schoolCommissionVO.getTimeType())) { + //当天 + startTime = DateUtil.formatDate(DateUtil.date()) + " 00:00:01"; + endTime = DateUtil.formatDate(DateUtil.date()) + " 23:59:59"; + } + schoolCommissionVO.setStartTimeStr(startTime); + schoolCommissionVO.setEndTimeStr(endTime); + return schoolCommissionMapper.getCommissionListByCoachId(schoolCommissionVO, page); + } } 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 6f9b7e48..36ec46b6 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,10 +1,12 @@ package cn.iocoder.yudao.module.course.service.impl; import cn.hutool.core.bean.BeanUtil; +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.DlDriveSchoolCourse; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.service.DlDriveSchoolCourseService; import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService; @@ -12,9 +14,11 @@ import cn.iocoder.yudao.module.base.service.SchoolNotifyMessageSendService; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO; import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; +import cn.iocoder.yudao.module.course.entity.SchoolCourseScheme; import cn.iocoder.yudao.module.course.mapper.SchoolCourseOrderMapper; import cn.iocoder.yudao.module.course.service.ProcessService; import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; +import cn.iocoder.yudao.module.course.service.SchoolCourseSchemeService; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderBusinessVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; @@ -30,6 +34,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 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.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -37,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; @@ -72,6 +78,9 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl getOrderByCoachId(SchoolCourseOrderVO pageReqVO, Page page) { + String startTime = ""; + String endTime = ""; + if ("more".equals(pageReqVO.getTimeType())) { + if (StringUtils.isNotEmpty(pageReqVO.getStartTimeStr())) { + startTime = pageReqVO.getStartTimeStr() + " 00:00:01"; + } + if (StringUtils.isNotEmpty(pageReqVO.getEndTimeStr())) { + endTime = pageReqVO.getEndTimeStr() + " 23:59:59"; + } + } else if ("month".equals(pageReqVO.getTimeType())) { + //当月 + startTime = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 00:00:01"; + endTime = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 23:59:59"; + } else if ("day".equals(pageReqVO.getTimeType())) { + //当天 + startTime = DateUtil.formatDate(DateUtil.date()) + " 00:00:01"; + endTime = DateUtil.formatDate(DateUtil.date()) + " 23:59:59"; + } + pageReqVO.setStartTimeStr(startTime); + pageReqVO.setEndTimeStr(endTime); + return schoolCourseOrderMapper.getOrderByCoachId(pageReqVO, page); + } + + /** + * 获取教练的订单总金额 + * @param pageReqVO + * @return + */ + @Override + public List getCoachMoney(SchoolCourseOrderVO pageReqVO) { + String startTime = ""; + String endTime = ""; + if ("more".equals(pageReqVO.getTimeType())) { + if (StringUtils.isNotEmpty(pageReqVO.getStartTimeStr())) { + startTime = pageReqVO.getStartTimeStr() + " 00:00:01"; + } + if (StringUtils.isNotEmpty(pageReqVO.getEndTimeStr())) { + endTime = pageReqVO.getEndTimeStr() + " 23:59:59"; + } + } else if ("month".equals(pageReqVO.getTimeType())) { + //当月 + startTime = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 00:00:01"; + endTime = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 23:59:59"; + } else if ("day".equals(pageReqVO.getTimeType())) { + //当天 + startTime = DateUtil.formatDate(DateUtil.date()) + " 00:00:01"; + endTime = DateUtil.formatDate(DateUtil.date()) + " 23:59:59"; + } + pageReqVO.setStartTimeStr(startTime); + pageReqVO.setEndTimeStr(endTime); + return schoolCourseOrderMapper.getCoachMoney(pageReqVO); + } + + /** + * 获取教练的订单明细 + * @param pageReqVO + * @return + */ + @Override + public IPage getOrderMoneyByCoachId(SchoolCourseOrderVO pageReqVO, Page page) { + String startTime = ""; + String endTime = ""; + if ("more".equals(pageReqVO.getTimeType())) { + if (StringUtils.isNotEmpty(pageReqVO.getStartTimeStr())) { + startTime = pageReqVO.getStartTimeStr() + " 00:00:01"; + } + if (StringUtils.isNotEmpty(pageReqVO.getEndTimeStr())) { + endTime = pageReqVO.getEndTimeStr() + " 23:59:59"; + } + } else if ("month".equals(pageReqVO.getTimeType())) { + //当月 + startTime = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 00:00:01"; + endTime = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()), "yyyy-MM-dd") + " 23:59:59"; + } else if ("day".equals(pageReqVO.getTimeType())) { + //当天 + startTime = DateUtil.formatDate(DateUtil.date()) + " 00:00:01"; + endTime = DateUtil.formatDate(DateUtil.date()) + " 23:59:59"; + } + pageReqVO.setStartTimeStr(startTime); + pageReqVO.setEndTimeStr(endTime); + return schoolCourseOrderMapper.getOrderMoneyByCoachId(pageReqVO, page); + } + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessVO.java index 9dfe62cb..3ccfcb51 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessVO.java @@ -39,4 +39,9 @@ public class ProcessVO extends Process { * 学习进度 */ private List processList; + + /** + * 出纳确认情况 + */ + private String cashierConfirm; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolCommissionVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolCommissionVO.java index a9b54e17..8d2ecdec 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolCommissionVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolCommissionVO.java @@ -16,4 +16,12 @@ public class SchoolCommissionVO extends SchoolCommission { /**课程类型*/ private String courseType; -} \ No newline at end of file + /**开始时间 */ + private String startTimeStr; + /**结束时间 */ + private String endTimeStr; + + /**时间类型 */ + private String timeType; + +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolCourseOrderVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolCourseOrderVO.java index 1aff2584..3c8c9f6c 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolCourseOrderVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/SchoolCourseOrderVO.java @@ -5,6 +5,8 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.Date; + @Schema(description = "管理后台 - 驾照报名订单 Response VO") @Data @ExcelIgnoreUnannotated @@ -21,4 +23,22 @@ public class SchoolCourseOrderVO extends SchoolCourseOrder { * 课程类型 */ private String type; + + /** 渠道 */ + private String source; + + /** 开始时间*/ + private String startTimeStr; + + /** 结束时间*/ + private String endTimeStr; + + /**时间类型*/ + private String timeType; + + /**排序方式*/ + private String sort; + + /** 总金额 */ + private Double totalPrice; } 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 ce15d2c4..add4c6c9 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 @@ -23,6 +23,8 @@ 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.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.toolkit.Wrappers; import org.springframework.beans.factory.annotation.Autowired; @@ -64,12 +66,17 @@ public class StudentScoreInputServiceImpl implements StudentScoreInputService { @Autowired private SchoolNotifyMessageSendService schoolNotifyMessageSendService; + @Resource + private AdminUserApi userApi; + /** * 录入学员成绩 */ @Override @Transactional(rollbackFor = Exception.class) public void scoreInput(StudentScoreInput studentScoreInput) { + Long userId = SecurityFrameworkUtils.getLoginUserId(); + AdminUserRespDTO sysUser = userApi.getUser(userId); // 获取当前进度信息,设置考试成绩等信息 ProcessVO processVO = BeanUtils.toBean(processService.getById(studentScoreInput.getProcessId()), ProcessVO.class); processVO.setExamStatus(studentScoreInput.getExamStatus()); @@ -79,6 +86,8 @@ public class StudentScoreInputServiceImpl implements StudentScoreInputService { processVO.setStatus(studentScoreInput.getStatus()); processVO.setImages(studentScoreInput.getImages()); processVO.setRemark(studentScoreInput.getRemark()); + processVO.setInputName(sysUser.getNickname()); + processVO.setInputUserId(sysUser.getId()); processService.updateById(processVO); // 如果是科2和科3 需要创建批次信息 diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index 6e3e2c10..8690dd11 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -58,7 +58,18 @@ main.phone AS phone, main.user_id AS userId, dsco.course_type, - dsp.`subject` + dsp.`subject`, + dsco.course_name, + dsco.payment_status, + dsco.cashier_confirm, + dsco.pay_type, + dsco.pay_channel, + dsco.cashier_confirm_remark, + dsco.reserve_money, + dsco.rest_money, + dsco.if_end, + dsco.create_time AS enrollTime, + dsco.user_no AS studentIdCard FROM drive_school_student main LEFT JOIN drive_school_course_order dsco ON main.user_id = dsco.user_id @@ -463,6 +474,7 @@ + + + + + + + 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 aa758f60..ca57b523 100644 --- a/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml @@ -58,6 +58,7 @@ order by main.create_time desc + + + - + INSERT INTO system_users (username, password, @@ -139,4 +164,126 @@ WHERE scheme_id=#{schemeId} AND deleted = 0 + + + + + + + + From c7b9f62dab15ac0b86fe6788e4bbcddc15666e35 Mon Sep 17 00:00:00 2001 From: Lx <935448346@qq.com> Date: Fri, 27 Jun 2025 15:08:32 +0800 Subject: [PATCH 15/16] 0627 --- .../base/constant/SchoolBaseConstants.java | 6 +- .../service/impl/DataViewServiceImpl.java | 36 ++++ .../module/base/vo/DlDriveSchoolStaffVO.java | 2 + .../yudao/module/base/vo/StudentInfoVO.java | 4 + .../controller/admin/ProcessController.java | 43 +++++ .../admin/SchoolCommissionController.java | 92 ++++++++++ .../admin/SchoolCourseOrderController.java | 60 ++++++- .../course/entity/SchoolCommission.java | 2 +- .../course/entity/SchoolCourseOrder.java | 5 + .../module/course/mapper/ProcessMapper.java | 3 + .../course/mapper/SchoolCommissionMapper.java | 3 +- .../mapper/SchoolCourseOrderMapper.java | 3 + .../module/course/service/ProcessService.java | 11 +- .../service/SchoolCommissionService.java | 7 + .../service/SchoolCourseOrderService.java | 11 +- .../service/impl/ProcessServiceImpl.java | 61 ++++++- .../impl/SchoolCommissionServiceImpl.java | 42 +++++ .../impl/SchoolCourseOrderServiceImpl.java | 53 +++++- .../module/course/vo/CommissionExportVO.java | 83 +++++++++ .../module/course/vo/CourseOrderExportVO.java | 157 ++++++++++++++++++ .../module/course/vo/ProcessExportVO.java | 69 ++++++++ .../controller/admin/ExamBatchController.java | 9 + .../module/exam/mapper/ExamBatchMapper.java | 2 + .../module/exam/service/ExamBatchService.java | 2 + .../service/impl/ExamBatchServiceImpl.java | 34 ++++ .../module/exam/vo/ExamBatchItemNewVO.java | 7 + .../impl/StudentScoreInputServiceImpl.java | 2 +- .../base/DlDriveSchoolStudentMapper.xml | 3 + .../resources/mapper/course/ProcessMapper.xml | 125 ++++++++++++++ .../mapper/course/SchoolCommissionMapper.xml | 61 +++++++ .../mapper/course/SchoolCourseOrderMapper.xml | 108 +++++++++++- .../resources/mapper/exam/ExamBatchMapper.xml | 39 ++++- 32 files changed, 1111 insertions(+), 34 deletions(-) create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/CommissionExportVO.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/CourseOrderExportVO.java create mode 100644 dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessExportVO.java 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 0715cac7..b09a2a04 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 @@ -153,16 +153,16 @@ public interface SchoolBaseConstants { /** * 审核不通过 */ - 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_NOT_PASS = "驾校学员 %s ,身份证号:%s,课程:%s,科目 %s 的提成审核未通过,原因:%s 。请查看!"; /** * 待审核 */ - public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_WAIT = "驾校学员 %s ,身份证号:%s,科目 %s 的考试已通过,提成待审核,请查看!"; + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_WAIT = "驾校学员 %s ,身份证号:%s,课程:%s,科目 %s 的考试已通过,提成待审核,请查看!"; /** * 审核通过 */ - public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_PASS = "驾校教练 %s 的学员 %s ,身份证号:%s,科目 %s 的提成审核已通过,请查看!"; + public static final String SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_PASS = "驾校教练 %s 的学员 %s ,身份证号:%s,课程:%s,科目 %s 的提成审核已通过,请查看!"; } 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 09ae84b0..851c1139 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 @@ -2,18 +2,22 @@ package cn.iocoder.yudao.module.base.service.impl; import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; +import cn.iocoder.yudao.module.base.entity.DriveSchoolCourseDeduct; import cn.iocoder.yudao.module.base.mapper.DlDriveSchoolStudentMapper; import cn.iocoder.yudao.module.base.service.DataViewService; import cn.iocoder.yudao.module.base.service.DlDriveSchoolCoachService; +import cn.iocoder.yudao.module.base.service.DlDriveSchoolCourseDeductService; import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService; import cn.iocoder.yudao.module.base.vo.*; import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.entity.SchoolCommission; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; +import cn.iocoder.yudao.module.course.entity.SchoolCourseScheme; import cn.iocoder.yudao.module.course.mapper.ProcessMapper; 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.course.service.SchoolCourseSchemeService; import cn.iocoder.yudao.module.exam.mapper.ExamBatchItemMapper; import cn.iocoder.yudao.module.exam.service.ExamBatchItemService; import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO; @@ -27,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; @@ -58,6 +63,10 @@ public class DataViewServiceImpl implements DataViewService { private SchoolCourseOrderMapper courseOrderMapper; @Autowired private SchoolCommissionMapper commissionMapper; + @Resource + private DlDriveSchoolCourseDeductService driveSchoolCourseDeductService; + @Resource + private SchoolCourseSchemeService schoolCourseSchemeService; /** * 查询学员详情 @@ -79,6 +88,33 @@ public class DataViewServiceImpl implements DataViewService { SchoolCourseOrder orderInfo = courseOrderMapper.getOrderInfo(id); studentInfoVO.setStudentOrderInfo(orderInfo); + // 学员提成信息 + if(orderInfo != null ){ + List deductList = new ArrayList<>(); + if(orderInfo.getSchemeId() != null){ + deductList = driveSchoolCourseDeductService.lambdaQuery() + .eq(DriveSchoolCourseDeduct::getCourseId, orderInfo.getCourseId()) + .eq(DriveSchoolCourseDeduct::getSchemeId, orderInfo.getSchemeId()) + .eq(DriveSchoolCourseDeduct::getDeleted, false) + .list(); + + }else{ + SchoolCourseScheme defaultScheme = schoolCourseSchemeService.lambdaQuery() + .eq(SchoolCourseScheme::getCourseId, orderInfo.getCourseId()) + .eq(SchoolCourseScheme::getIsDefault, true) + .eq(SchoolCourseScheme::getDeleted, false) + .one(); + if(defaultScheme != null){ + deductList = driveSchoolCourseDeductService.lambdaQuery() + .eq(DriveSchoolCourseDeduct::getCourseId, orderInfo.getCourseId()) + .eq(DriveSchoolCourseDeduct::getSchemeId, defaultScheme.getId()) + .eq(DriveSchoolCourseDeduct::getDeleted, false) + .list(); + } + } + studentInfoVO.setCourseDeductList(deductList); + } + // 当前学习进度 Process process = processService.selectByUserId(id, coachId); studentInfoVO.setProcess(process); diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java index 183e832d..47ec13ac 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/DlDriveSchoolStaffVO.java @@ -94,4 +94,6 @@ public class DlDriveSchoolStaffVO { private String cashierConfirmRemark; /**报名时间*/ private Date enrollTime; + /**工作性质 */ + private String workName; } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/StudentInfoVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/StudentInfoVO.java index 1bc58c04..10c5e252 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/StudentInfoVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/base/vo/StudentInfoVO.java @@ -1,8 +1,10 @@ package cn.iocoder.yudao.module.base.vo; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; +import cn.iocoder.yudao.module.base.entity.DriveSchoolCourseDeduct; import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; +import cn.iocoder.yudao.module.course.entity.SchoolCourseScheme; import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO; import cn.iocoder.yudao.module.train.entity.Train; import lombok.Data; @@ -15,6 +17,8 @@ public class StudentInfoVO { private DlDriveSchoolStudent studentInfo; /**学员订单信息*/ private SchoolCourseOrder studentOrderInfo; + /**学员提成信息 */ + private List courseDeductList; /**学习进度*/ private Process process; /**学习进度列表*/ 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 d474b981..98adda5c 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 @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.course.controller.admin; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.base.entity.DriveSchoolCourseDeduct; @@ -26,10 +27,13 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.annotation.security.PermitAll; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -230,4 +234,43 @@ public class ProcessController { Page page = new Page<>(pageNo, pageSize); return success(processService.getPassStudent(coachId, subject, courseType, name, sort, page)); } + + @GetMapping("/getProcessExportData") + public CommonResult> getProcessExportData(ProcessExportVO exportVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo, pageSize); + return success(processService.getProcessExportData(exportVO, page)); + } + + @GetMapping("/export") + public void exportCommission(ProcessExportVO exportVO, HttpServletResponse response) throws IOException { + // 1. 校验导出类型 + if (exportVO.getExportType() == null || !Arrays.asList("current", "all", "range").contains(exportVO.getExportType())) { + throw new IllegalArgumentException("无效的导出类型: " + exportVO.getExportType()); + } + + // 2. 根据不同类型查询数据 + List exportData; + String fileName = "学员进度记录"; + + switch (exportVO.getExportType()) { + case "current": + exportData = processService.getProcessList(exportVO); + fileName += "_第" + exportVO.getPageNo() + "页"; + break; + case "all": + exportData = processService.getAllProcessList(exportVO); + fileName += "_全部数据"; + break; + case "range": + exportData = processService.getProcessListByRange(exportVO); + fileName += "_" + exportVO.getStartPage() + "-" + exportVO.getEndPage() + "页"; + break; + default: + throw new IllegalArgumentException("无效的导出类型: " + exportVO.getExportType()); + } + // 4. 导出Excel + ExcelUtils.write(response, fileName + ".xlsx", "学员进度记录", ProcessExportVO.class, exportData); + } } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolCommissionController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolCommissionController.java index a262319f..56b810af 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolCommissionController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/controller/admin/SchoolCommissionController.java @@ -2,9 +2,11 @@ package cn.iocoder.yudao.module.course.controller.admin; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.base.vo.DriveSchoolCourseDeductVO; import cn.iocoder.yudao.module.course.entity.SchoolCommission; import cn.iocoder.yudao.module.course.service.SchoolCommissionService; +import cn.iocoder.yudao.module.course.vo.CommissionExportVO; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -15,8 +17,11 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; +import java.util.Arrays; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -94,4 +99,91 @@ public class SchoolCommissionController { return success(schoolCommissionService.getCommissionListByCoachId(schoolCommissionVO, page)); } + /** + * 前端获取数据getList() + * @param commissionExportVO + * @param pageNo + * @param pageSize + * @return + */ + @GetMapping("/allCommissionPage") + public CommonResult> getAllCommissionPage(CommissionExportVO commissionExportVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize){ + Page page = new Page<>(pageNo, pageSize); + return success(schoolCommissionService.getAllCommissionPage(commissionExportVO, page)); + } + + /** + * 导出数据(支持三种模式) + * @param exportVO 包含导出类型(exportType)、分页参数等 + */ + /*@GetMapping("/export") + public void exportCommission(CommissionExportVO exportVO, HttpServletResponse response) throws IOException { + // 1. 根据不同类型查询数据 + List exportData; + String fileName = "提成记录"; + + switch (exportVO.getExportType()) { + case "current": // 导出当前页 + exportData = schoolCommissionService.getCommissionList(exportVO); + fileName += "_第" + exportVO.getPageNo() + "页"; + break; + case "all": // 导出全部数据 + exportData = schoolCommissionService.getAllCommissionList(exportVO); + fileName += "_全部数据"; + break; + case "range": // 导出自定义范围 + exportData = schoolCommissionService.getCommissionListByRange(exportVO); + fileName += "_" + exportVO.getStartPage() + "-" + exportVO.getEndPage() + "页"; + break; + default: + throw new IllegalArgumentException("无效的导出类型: " + exportVO.getExportType()); + } + for (int i = 0; i < exportData.size(); i++) { + exportData.get(i).setSerialNumber(i + 1); + } + ExcelUtils.write(response, fileName + ".xlsx", "提成记录", CommissionExportVO.class, exportData); + }*/ + @GetMapping("/export") + public void exportCommission(CommissionExportVO exportVO, HttpServletResponse response) throws IOException { + // 1. 校验导出类型 + if (exportVO.getExportType() == null || !Arrays.asList("current", "all", "range").contains(exportVO.getExportType())) { + throw new IllegalArgumentException("无效的导出类型: " + exportVO.getExportType()); + } + + // 2. 根据不同类型查询数据 + List exportData; + String fileName = "提成记录"; + int offset = 0; // 序号偏移量(用于分页连续) + + switch (exportVO.getExportType()) { + case "current": + exportData = schoolCommissionService.getCommissionList(exportVO); + fileName += "_第" + exportVO.getPageNo() + "页"; + offset = (exportVO.getPageNo() - 1) * exportVO.getPageSize(); // 计算分页偏移 + break; + case "all": + exportData = schoolCommissionService.getAllCommissionList(exportVO); + fileName += "_全部数据"; + break; + case "range": + exportData = schoolCommissionService.getCommissionListByRange(exportVO); + fileName += "_" + exportVO.getStartPage() + "-" + exportVO.getEndPage() + "页"; + offset = (exportVO.getStartPage() - 1) * exportVO.getPageSize(); // 自定义范围偏移 + break; + default: + throw new IllegalArgumentException("无效的导出类型: " + exportVO.getExportType()); + } + + // 3. 设置序号(考虑分页偏移) + if (exportData != null && !exportData.isEmpty()) { + for (int i = 0; i < exportData.size(); i++) { + exportData.get(i).setSerialNumber(offset + i + 1); // 确保序号连续 + } + } + + // 4. 导出Excel + ExcelUtils.write(response, fileName + ".xlsx", "提成记录", CommissionExportVO.class, exportData); + } } 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 d011c202..a1a60cd8 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 @@ -6,10 +6,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; -import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; -import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderBusinessVO; -import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderExportVO; -import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; +import cn.iocoder.yudao.module.course.vo.*; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; @@ -23,6 +20,7 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; +import java.util.Arrays; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -194,4 +192,58 @@ public class SchoolCourseOrderController { } + /** + * 获取导出数据列表 + */ + @GetMapping("/getOrderExportData") + public CommonResult> getOrderExportData(CourseOrderExportVO exportVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo, pageSize); + return success(schoolCourseOrderService.getOrderExportData(exportVO, page)); + } + + + @GetMapping("/export") + public void exportCommission(CourseOrderExportVO exportVO, HttpServletResponse response) throws IOException { + // 1. 校验导出类型 + if (exportVO.getExportType() == null || !Arrays.asList("current", "all", "range").contains(exportVO.getExportType())) { + throw new IllegalArgumentException("无效的导出类型: " + exportVO.getExportType()); + } + + // 2. 根据不同类型查询数据 + List exportData; + String fileName = "学员记录"; + int offset = 0; // 序号偏移量(用于分页连续) + + switch (exportVO.getExportType()) { + case "current": + exportData = schoolCourseOrderService.getOrderList(exportVO); + fileName += "_第" + exportVO.getPageNo() + "页"; + offset = (exportVO.getPageNo() - 1) * exportVO.getPageSize(); // 计算分页偏移 + break; + case "all": + exportData = schoolCourseOrderService.getAllOrderList(exportVO); + fileName += "_全部数据"; + break; + case "range": + exportData = schoolCourseOrderService.getOrderListByRange(exportVO); + fileName += "_" + exportVO.getStartPage() + "-" + exportVO.getEndPage() + "页"; + offset = (exportVO.getStartPage() - 1) * exportVO.getPageSize(); // 自定义范围偏移 + break; + default: + throw new IllegalArgumentException("无效的导出类型: " + exportVO.getExportType()); + } + + // 3. 设置序号(考虑分页偏移) + if (exportData != null && !exportData.isEmpty()) { + for (int i = 0; i < exportData.size(); i++) { + exportData.get(i).setSerialNumber(offset + i + 1); // 确保序号连续 + } + } + + // 4. 导出Excel + ExcelUtils.write(response, fileName + ".xlsx", "学员记录", CourseOrderExportVO.class, exportData); + } + } 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 f964cf1d..3a2f66e7 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 @@ -80,7 +80,7 @@ public class SchoolCommission extends TenantBaseDO { /** * 支付时间 */ - private Date payTime; + private LocalDateTime payTime; /** * 审核备注 */ 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 5760f5ec..01a191c1 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 @@ -159,5 +159,10 @@ public class SchoolCourseOrder extends TenantBaseDO { /** 订单备注 */ private String orderRemark; + /** + * 缴费日期 + */ + private Date payFeesTime; + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/ProcessMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/ProcessMapper.java index c3030f67..451d33dd 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/ProcessMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/mapper/ProcessMapper.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachPageReqVO; import cn.iocoder.yudao.module.base.vo.DlDriveSchoolCoachRespVO; import cn.iocoder.yudao.module.course.entity.Process; import cn.iocoder.yudao.module.course.vo.ProcessAndExamBatchVO; +import cn.iocoder.yudao.module.course.vo.ProcessExportVO; import cn.iocoder.yudao.module.course.vo.ProcessVO; import cn.iocoder.yudao.module.exam.entity.ExamBatch; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -105,5 +106,7 @@ public interface ProcessMapper extends BaseMapper { IPage getPassStudent(@Param("coachId")Long coachId, @Param("subject")int subject, @Param("courseType") String courseType, @Param("name") String name, @Param("sort") String sort,Page page); List getPassStudentList(@Param("coachId")Long coachId, @Param("subject")int subject, @Param("startTime") String startTime, @Param("endTime")String endTime); + IPage getProcessExportData (@Param("entity") ProcessExportVO entity, Page page); + } 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 3bad0436..2deebc43 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,6 +1,7 @@ package cn.iocoder.yudao.module.course.mapper; import cn.iocoder.yudao.module.course.entity.SchoolCommission; +import cn.iocoder.yudao.module.course.vo.CommissionExportVO; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -40,5 +41,5 @@ public interface SchoolCommissionMapper extends BaseMapper { IPage getCommissionListByCoachId(@Param("entity") SchoolCommissionVO entity, Page page); - + IPage getCommissionListExport(@Param("entity") CommissionExportVO entity, Page page); } 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 d6fcd1c5..7b97e45e 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 @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.course.mapper; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; +import cn.iocoder.yudao.module.course.vo.CourseOrderExportVO; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderBusinessVO; import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; @@ -70,4 +71,6 @@ public interface SchoolCourseOrderMapper extends BaseMapper { List getCoachMoney(@Param("entity")SchoolCourseOrderVO entity); IPage getOrderMoneyByCoachId(@Param("entity")SchoolCourseOrderVO entity, Page page); + + IPage getOrderExportData(@Param("entity")CourseOrderExportVO entity, Page page); } 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 a5a7b8b8..652d3980 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 @@ -2,11 +2,8 @@ package cn.iocoder.yudao.module.course.service; import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent; import cn.iocoder.yudao.module.course.entity.Process; -import cn.iocoder.yudao.module.course.vo.ProcessAndExamBatchVO; -import cn.iocoder.yudao.module.course.vo.ProcessNewVO; +import cn.iocoder.yudao.module.course.vo.*; import cn.iocoder.yudao.module.exam.vo.ExamVO; -import cn.iocoder.yudao.module.course.vo.ProcessAddVO; -import cn.iocoder.yudao.module.course.vo.ProcessVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -170,4 +167,10 @@ public interface ProcessService extends IService { */ IPage getPassStudent(Long coachId, int subject, String courseType, String name, String sort, Page page); List getPassStudentList(Long coachId, int subject, String startTime, String endTime); + + IPage getProcessExportData(ProcessExportVO exportVO, Page page); + + public List getProcessList(ProcessExportVO exportVO); + public List getAllProcessList(ProcessExportVO exportVO); + public List getProcessListByRange(ProcessExportVO exportVO); } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCommissionService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCommissionService.java index 432b4e90..8791366a 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCommissionService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/SchoolCommissionService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.course.service; import cn.iocoder.yudao.module.course.entity.SchoolCommission; +import cn.iocoder.yudao.module.course.vo.CommissionExportVO; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -57,4 +58,10 @@ public interface SchoolCommissionService extends IService { */ IPage getCommissionListByCoachId(SchoolCommissionVO schoolCommissionVO, Page page); + IPage getAllCommissionPage(CommissionExportVO exportVO,Page page); + + public List getCommissionList(CommissionExportVO exportVO); + public List getAllCommissionList(CommissionExportVO exportVO); + public List getCommissionListByRange(CommissionExportVO exportVO); + } 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 6ddff0af..b622f59a 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 @@ -1,9 +1,7 @@ package cn.iocoder.yudao.module.course.service; import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder; -import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; -import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderBusinessVO; -import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; +import cn.iocoder.yudao.module.course.vo.*; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -143,4 +141,11 @@ public interface SchoolCourseOrderService extends IService { */ IPage getOrderMoneyByCoachId(SchoolCourseOrderVO pageReqVO, Page page); + + IPage getOrderExportData(CourseOrderExportVO exportVO, Page page); + + List getOrderList(CourseOrderExportVO exportVO); + List getAllOrderList(CourseOrderExportVO exportVO); + List getOrderListByRange(CourseOrderExportVO exportVO); + } 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 c96c3fc6..7d3a5e17 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 @@ -52,6 +52,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -138,9 +139,16 @@ public class ProcessServiceImpl extends ServiceImpl impl Long userId = SecurityFrameworkUtils.getLoginUserId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .eq(Process::getCoachId, userId) - .eq(Process::getCourseId, process.getCourseId()) - .eq(Process::getSubject, process.getSubject()); - if (StringUtils.isNotEmpty(process.getUserName())) { + .notIn(Process::getSubject, Arrays.asList(1, 4)); + /*.eq(Process::getCourseId, process.getCourseId()) + .eq(Process::getSubject, process.getSubject());*/ + if (process != null && process.getCourseId() != null) { + queryWrapper.eq(Process::getCourseId, process.getCourseId()); + } + if (process != null && process.getSubject() != null) { + queryWrapper.eq(Process::getSubject, process.getSubject()); + } + if (process != null && StringUtils.isNotEmpty(process.getUserName())) { queryWrapper.like(Process::getUserName, process.getUserName()); } //状态等于1-训练中的 @@ -367,7 +375,7 @@ public class ProcessServiceImpl extends ServiceImpl impl 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()); + String officeMessage = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_NOT_PASS, process.getUserName(), process.getStudentIdCard(), process.getCourseName(), process.getSubject(), process.getFinanceRemark()); for (UserDTO staff : officeStaffList) { schoolNotifyMessageSendService.sendMessage(staff.getId(), officeMessage, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN, null); @@ -428,13 +436,15 @@ public class ProcessServiceImpl extends ServiceImpl impl List officeStaffList = roleApi.selectUserListByRoleCode(tenantId, "cn"); if (officeStaffList != null && !officeStaffList.isEmpty()) { - String officeMessage = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_PASS, process.getCoachName(), process.getUserName(), process.getStudentIdCard(), process.getSubject()); + String officeMessage = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_PASS, process.getCoachName(), process.getUserName(), process.getStudentIdCard(), process.getCourseName(), process.getSubject()); for (UserDTO staff : officeStaffList) { schoolNotifyMessageSendService.sendMessage(staff.getId(), officeMessage, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN, null); } } - + // 将当前日期时间设置为发放时间 + schoolCommission.setPayTime(LocalDateTime.now()); + schoolCommission.setIfPay(true); // 仅审核通过时新增记录 schoolCommission.setDeleted(false); schoolCommissionService.save(schoolCommission); @@ -1018,6 +1028,45 @@ public class ProcessServiceImpl extends ServiceImpl impl return processMapper.getPassStudentList(coachId, subject, startTime, endTime); } + @Override + public IPage getProcessExportData(ProcessExportVO exportVO, Page page) { + return processMapper.getProcessExportData(exportVO, page); + } + + @Override + public List getProcessList(ProcessExportVO exportVO) { + // 分页查询当前页 + Page page = new Page<>(exportVO.getPageNo(), exportVO.getPageSize()); + IPage result = processMapper.getProcessExportData(exportVO, page); + return result.getRecords(); + } + + @Override + public List getAllProcessList(ProcessExportVO exportVO) { + // 不分页查询全部数据 + Page page = new Page<>(1, Integer.MAX_VALUE); + IPage result = processMapper.getProcessExportData(exportVO, page); + return result.getRecords(); + } + + @Override + public List getProcessListByRange(ProcessExportVO exportVO) { + List allData = new ArrayList<>(); + + // 循环查询指定范围内的数据 + for (int i = exportVO.getStartPage(); i <= exportVO.getEndPage(); i++) { + Page page = new Page<>(i, exportVO.getPageSize()); + IPage result = processMapper.getProcessExportData(exportVO, page); + allData.addAll(result.getRecords()); + + // 如果已经到达最后一页,提前结束循环 + if (i >= result.getPages()) { + break; + } + } + return allData; + } + /** * 生成32位uuid */ diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCommissionServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCommissionServiceImpl.java index bcf2ea7a..7fd7a509 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCommissionServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/service/impl/SchoolCommissionServiceImpl.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.course.entity.SchoolCommission; import cn.iocoder.yudao.module.course.mapper.SchoolCommissionMapper; import cn.iocoder.yudao.module.course.service.SchoolCommissionService; +import cn.iocoder.yudao.module.course.vo.CommissionExportVO; import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; @@ -19,6 +20,7 @@ import org.springframework.validation.annotation.Validated; import cn.iocoder.yudao.framework.common.exception.ServiceException; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -161,4 +163,44 @@ public class SchoolCommissionServiceImpl extends ServiceImpl getAllCommissionPage(CommissionExportVO exportVO, Page page) { + return schoolCommissionMapper.getCommissionListExport(exportVO, page); + } + + + @Override + public List getCommissionList(CommissionExportVO exportVO) { + // 分页查询当前页 + Page page = new Page<>(exportVO.getPageNo(), exportVO.getPageSize()); + IPage result = schoolCommissionMapper.getCommissionListExport(exportVO, page); + return result.getRecords(); + } + + @Override + public List getAllCommissionList(CommissionExportVO exportVO) { + // 不分页查询全部数据 + Page page = new Page<>(1, Integer.MAX_VALUE); // 查询所有 + IPage result = schoolCommissionMapper.getCommissionListExport(exportVO, page); + return result.getRecords(); + } + + @Override + public List getCommissionListByRange(CommissionExportVO exportVO) { + List allData = new ArrayList<>(); + + // 循环查询指定范围内的数据 + for (int i = exportVO.getStartPage(); i <= exportVO.getEndPage(); i++) { + Page page = new Page<>(i, exportVO.getPageSize()); + IPage result = schoolCommissionMapper.getCommissionListExport(exportVO, page); + allData.addAll(result.getRecords()); + + // 如果已经到达最后一页,提前结束循环 + if (i >= result.getPages()) { + break; + } + } + return allData; + } } 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 36ec46b6..88c69d43 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 @@ -19,9 +19,7 @@ import cn.iocoder.yudao.module.course.mapper.SchoolCourseOrderMapper; import cn.iocoder.yudao.module.course.service.ProcessService; import cn.iocoder.yudao.module.course.service.SchoolCourseOrderService; import cn.iocoder.yudao.module.course.service.SchoolCourseSchemeService; -import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO; -import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderBusinessVO; -import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO; +import cn.iocoder.yudao.module.course.vo.*; 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; @@ -46,9 +44,7 @@ import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; -import java.util.UUID; +import java.util.*; /** * 驾照报名订单 Service 实现类 @@ -200,13 +196,13 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl q.eq(Process::getStatus, SchoolBaseConstants.PROCESS_STATUS_NOT_START) - .or() + .or() .eq(Process::getStatus, SchoolBaseConstants.PROCESS_STATUS_IN_PROGRESS)) - ); + );*/ DlDriveSchoolStudent studentByUserId = schoolStudentService.getStudentByUserId(Long.valueOf(schoolCourseOrder.getUserId())); if (studentByUserId != null) { @@ -637,4 +633,43 @@ public class SchoolCourseOrderServiceImpl extends ServiceImpl getOrderExportData(CourseOrderExportVO exportVO, Page page) { + return schoolCourseOrderMapper.getOrderExportData(exportVO, page); + } + + @Override + public List getOrderList(CourseOrderExportVO exportVO) { + // 分页查询当前页 + Page page = new Page<>(exportVO.getPageNo(), exportVO.getPageSize()); + IPage result = schoolCourseOrderMapper.getOrderExportData(exportVO, page); + return result.getRecords(); + } + + @Override + public List getAllOrderList(CourseOrderExportVO exportVO) { + // 不分页查询全部数据 + Page page = new Page<>(1, Integer.MAX_VALUE); // 查询所有 + IPage result = schoolCourseOrderMapper.getOrderExportData(exportVO, page); + return result.getRecords(); + } + + @Override + public List getOrderListByRange(CourseOrderExportVO exportVO) { + List allData = new ArrayList<>(); + + // 循环查询指定范围内的数据 + for (int i = exportVO.getStartPage(); i <= exportVO.getEndPage(); i++) { + Page page = new Page<>(i, exportVO.getPageSize()); + IPage result = schoolCourseOrderMapper.getOrderExportData(exportVO, page); + allData.addAll(result.getRecords()); + + // 如果已经到达最后一页,提前结束循环 + if (i >= result.getPages()) { + break; + } + } + return allData; + } + } diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/CommissionExportVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/CommissionExportVO.java new file mode 100644 index 00000000..92389732 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/CommissionExportVO.java @@ -0,0 +1,83 @@ +package cn.iocoder.yudao.module.course.vo; + +import cn.iocoder.yudao.annotation.Excel; +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.format.DateTimeFormat; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +import java.util.Date; + +@Data +public class CommissionExportVO { + + @ExcelProperty(value = " ", index = 0) + @ColumnWidth(8) + private Integer serialNumber; + + @ExcelIgnore + private Long coachId; + + @ExcelProperty(value = "教练", index = 1) + private String coachName; + + @ExcelProperty(value = "教练身份证号", index = 2) + private String coachIdCard; + + @ExcelIgnore + private Long studentId; + + @ExcelProperty(value = "学员", index = 3) + private String studentName; + + @ExcelProperty(value = "学员身份证号", index = 4) + private String studentIdCard; + + @ExcelIgnore + private String courseId; + + @ExcelProperty(value = "课程名称", index = 5) + private String courseName; + + @ExcelProperty(value = "课程类型", index = 6) + private String courseType; + + @ExcelProperty(value = "科目", index = 7) + private String subject; + + @ExcelProperty(value = "提成金额(元)", index = 8) + private String commissionAmount; + + @ExcelProperty(value = "审核人", index = 9) + private String checkName; + + @ExcelProperty(value = "审核时间", index = 10) + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + @ColumnWidth(20) + private Date createTime; + + @ExcelProperty(value = "备注", index = 11) + private String checkRemark; + + @ExcelIgnore + private String startTimeStr; + @ExcelIgnore + private String endTimeStr; + + // 分页参数 + @ExcelIgnore + private Integer pageNo = 1; + @ExcelIgnore + private Integer pageSize = 10; + + // 导出类型:all(全部)、current(当前页)、range(自定义范围) + @ExcelIgnore + private String exportType; + + // 自定义范围参数 + @ExcelIgnore + private Integer startPage; + @ExcelIgnore + private Integer endPage; +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/CourseOrderExportVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/CourseOrderExportVO.java new file mode 100644 index 00000000..86b90c30 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/CourseOrderExportVO.java @@ -0,0 +1,157 @@ +package cn.iocoder.yudao.module.course.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.format.DateTimeFormat; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +@Data +public class CourseOrderExportVO { + + @ExcelProperty(value = " ", index = 0) + @ColumnWidth(8) + private Integer serialNumber; + + @ExcelIgnore + private Long studentId; + + @ExcelProperty(value = "学员姓名", index = 1) + private String studentName; + + @ExcelProperty(value = "学员身份证号", index = 2) + private String studentIdCard; + + @ExcelProperty(value = "学员手机号", index = 3) + private String studentPhone; + + @ExcelProperty(value = "学员报名时间", index = 4) + @DateTimeFormat("yyyy-MM-dd") + private Date signUpTime; + + @ExcelIgnore + private Long courseId; + + @ExcelProperty(value = "课程名称", index = 5) + private String courseName; + + @ExcelProperty(value = "课程类型", index = 6) + private String courseType; + + @ExcelProperty(value = "缴费金额", index = 7) + private BigDecimal reserveMoney; + + @ExcelProperty(value = "缴费时间", index = 8) + @DateTimeFormat("yyyy-MM-dd") + private Date payFeesTime; + + @ExcelProperty(value = "订单备注", index = 9) + private String orderRemark; + +// @ExcelProperty(value = "是否已面签", index = 13) + @ExcelIgnore + private Integer isSign; + + @ExcelProperty(value = "是否已面签", index = 10) + private String isSignDisplay; + + @ExcelProperty(value = "面签时间", index = 11) + private LocalDateTime signTime; + + @ExcelIgnore + private Long coachId; + + @ExcelProperty(value = "科目二教练", index = 12) + private String subject2CoachName; + + @ExcelProperty(value = "科目二提成(预提)", index = 13) + private String subject2Deduct; + + @ExcelProperty(value = "科目三教练", index = 14) + private String subject3CoachName; + + @ExcelProperty(value = "科目三提成(预提)", index = 15) + private String subject3Deduct; + + @ExcelProperty(value = "出纳是否确认收款", index = 16) + private String cashierConfirmDisplay; + + @ExcelIgnore + private Integer cashierConfirm; + + @ExcelProperty(value = "出纳确认时间", index = 17) + private Date cashierConfirmTime; + + @ExcelProperty(value = "出纳备注", index = 18) + private String cashierConfirmRemark; + + /** + * 订单状态 0:待支付 1:已取消 :2:已支付(已报名) 3:待面签 4:已面签 5:已完成 6:申请退款 7:退款中 8:退款成功 + */ + @ExcelIgnore + private String paymentStatus; + + /** + * 支付类型 1:定金 2:全款 + */ + @ExcelIgnore + private String payType; + + @ExcelIgnore + private Integer subject; + + @ExcelIgnore + private String signUpStartTimeStr; + @ExcelIgnore + private String signUpEndTimeStr; + + @ExcelIgnore + private String payFeesStartTimeStr; + @ExcelIgnore + private String payFeesEndTimeStr; + + @ExcelIgnore + private String cashierConfirmStartTimeStr; + @ExcelIgnore + private String cashierConfirmEndTimeStr; + + // 分页参数 + @ExcelIgnore + private Integer pageNo = 1; + @ExcelIgnore + private Integer pageSize = 10; + + // 导出类型:all(全部)、current(当前页)、range(自定义范围) + @ExcelIgnore + private String exportType; + + // 自定义范围参数 + @ExcelIgnore + private Integer startPage; + @ExcelIgnore + private Integer endPage; + + + + public String getIsSignDisplay() { + return isSign != null && isSign == 1 ? "是" : "否"; + } + + public String getCashierConfirmDisplay() { + if (cashierConfirm == null) { + return "待确认"; + } + switch (cashierConfirm) { + case 0: + return "未到账"; + case 1: + return "已到账"; + default: + return "未知状态"; + } + } +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessExportVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessExportVO.java new file mode 100644 index 00000000..5ff17f44 --- /dev/null +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/course/vo/ProcessExportVO.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.module.course.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +@Data +public class ProcessExportVO { + + @ExcelProperty(value = "学员姓名", index = 0) + private String studentName; + + @ExcelProperty(value = "学员身份证号", index = 1) + private String studentIdCard; + + @ExcelProperty(value = "学员手机号", index = 2) + private String studentPhone; + + @ExcelIgnore + private String courseId; + + @ExcelProperty(value = "课程名称", index = 3) + private String courseName; + + @ExcelProperty(value = "课程类型", index = 4) + private String courseType; + + @ExcelIgnore + private Long coachId; + + @ExcelProperty(value = "缴费日期", index = 5) + private String payFeesTime; + + @ExcelProperty(value = "科目一状态", index = 6) + private String subject1Status; + + @ExcelProperty(value = "科目二状态", index = 7) + private String subject2Status; + + @ExcelProperty(value = "科目三状态", index = 8) + private String subject3Status; + + @ExcelProperty(value = "科目四状态", index = 9) + private String subject4Status; + + @ExcelIgnore + private String payFeesStartTimeStr; + @ExcelIgnore + private String payFeesEndTimeStr; + + + // 分页参数 + @ExcelIgnore + private Integer pageNo = 1; + @ExcelIgnore + private Integer pageSize = 10; + + // 导出类型:all(全部)、current(当前页)、range(自定义范围) + @ExcelIgnore + private String exportType; + + // 自定义范围参数 + @ExcelIgnore + private Integer startPage; + @ExcelIgnore + private Integer endPage; + + +} diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/controller/admin/ExamBatchController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/controller/admin/ExamBatchController.java index 27693465..cd16c413 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/controller/admin/ExamBatchController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/controller/admin/ExamBatchController.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.exam.controller.admin; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.exam.service.ExamBatchService; +import cn.iocoder.yudao.module.exam.vo.ExamBatchItemNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchVO; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -34,6 +35,14 @@ public class ExamBatchController { return success(examBatchService.queryListPage(pageReqVO,page)); } + @GetMapping("/newPage") + public CommonResult> getPageNew(ExamBatchVO pageReqVO, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo,pageSize); + return success(examBatchService.queryListPageNew(pageReqVO,page)); + } + @PostMapping("/create") @Operation(summary = "送考") public CommonResult createObj( @RequestBody ExamBatchVO examBatchVO) { diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchMapper.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchMapper.java index 11145f83..454256ee 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchMapper.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/mapper/ExamBatchMapper.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.exam.mapper; import cn.iocoder.yudao.module.exam.entity.ExamBatch; +import cn.iocoder.yudao.module.exam.vo.ExamBatchItemNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -18,6 +19,7 @@ import org.apache.ibatis.annotations.Param; public interface ExamBatchMapper extends BaseMapper { IPage queryListPage(@Param("entity") ExamBatchVO entity, Page page); + IPage queryListPageNew(@Param("entity") ExamBatchVO entity, Page page); IPage getStudentByCoachId(@Param("subject") int subject, @Param("coachId")Long coachId, @Param("ifPass")String ifPass, @Param("name")String name, @Param("sort")String sort, @Param("startTime") String startTime, @Param("endTime") String endTime, Page page); diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchService.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchService.java index 799a455d..50eae318 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchService.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/ExamBatchService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.exam.service; import cn.iocoder.yudao.module.exam.entity.ExamBatch; +import cn.iocoder.yudao.module.exam.vo.ExamBatchItemNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchVO; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -22,6 +23,7 @@ public interface ExamBatchService extends IService { * @param page TODO **/ IPage queryListPage(ExamBatchVO pageReqVO, Page page); + IPage queryListPageNew(ExamBatchVO pageReqVO, Page page); /** * 送考 diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchServiceImpl.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchServiceImpl.java index b0f30ad9..bb24569e 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchServiceImpl.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/service/impl/ExamBatchServiceImpl.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.exam.entity.ExamBatchItem; import cn.iocoder.yudao.module.exam.mapper.ExamBatchMapper; import cn.iocoder.yudao.module.exam.service.ExamBatchItemService; import cn.iocoder.yudao.module.exam.service.ExamBatchService; +import cn.iocoder.yudao.module.exam.vo.ExamBatchItemNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchNewVO; import cn.iocoder.yudao.module.exam.vo.ExamBatchVO; @@ -89,6 +90,39 @@ public class ExamBatchServiceImpl extends ServiceImpl queryListPageNew(ExamBatchVO pageReqVO, Page page) { + if(StringUtils.isEmpty(pageReqVO.getTimeType())){ + //不是首页过来的,那么代表是教练自己查自己的所有考试记录 + Long userId = SecurityFrameworkUtils.getLoginUserId(); + pageReqVO.setCoachId(userId); + }else { + //首页过来的,默认查全部的数据 + String startTimeStr = ""; + String endTimeStr = ""; + if("more".equals(pageReqVO.getTimeType())){ + if(StringUtils.isNotEmpty(pageReqVO.getStartTimeSearch())){ + startTimeStr = pageReqVO.getStartTimeSearch()+" 00:00:01"; + } + if(StringUtils.isNotEmpty(pageReqVO.getEndTimeSearch())) { + endTimeStr = pageReqVO.getEndTimeSearch() + " 23:59:59"; + } + }else if("month".equals(pageReqVO.getTimeType())){ + //当月 + startTimeStr = DateUtil.format(DateUtil.beginOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 00:00:01"; + endTimeStr = DateUtil.format(DateUtil.endOfMonth(DateUtil.date()),"yyyy-MM-dd")+" 23:59:59"; + }else if("day".equals(pageReqVO.getTimeType())){ + //当天 + startTimeStr = DateUtil.formatDate(DateUtil.date())+" 00:00:01"; + endTimeStr = DateUtil.formatDate(DateUtil.date())+" 23:59:59"; + } + pageReqVO.setStartTimeSearch(startTimeStr); + pageReqVO.setEndTimeSearch(endTimeStr); + } +// IPage rtnList = ; + return examBatchMapper.queryListPageNew(pageReqVO, page); + } + /** * 送考 * diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchItemNewVO.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchItemNewVO.java index d8c1ad5b..4d449750 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchItemNewVO.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/exam/vo/ExamBatchItemNewVO.java @@ -75,4 +75,11 @@ public class ExamBatchItemNewVO extends ExamBatchItem { private String batchId; private String batchItemId; + + private String avatar; + + + private Long totalCount; + private Long passedCount; + private Long unpassedCount; } 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 add4c6c9..e8350c81 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 @@ -107,7 +107,7 @@ public class StudentScoreInputServiceImpl implements StudentScoreInputService { 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()); + String officeMessage = String.format(SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TEMPLATE_MEMBER_AUDIT_WAIT, studentScoreInput.getUserName(), studentIdCard, studentScoreInput.getCoachName(), studentScoreInput.getSubject()); for (UserDTO staff : allStaffList) { schoolNotifyMessageSendService.sendMessage(staff.getId(), officeMessage, SchoolBaseConstants.SCHOOL_NOTIFY_MESSAGE_TYPE_ADMIN, null); } diff --git a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml index 8690dd11..49684e6a 100644 --- a/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/base/DlDriveSchoolStudentMapper.xml @@ -91,6 +91,9 @@ AND main.name LIKE CONCAT('%',#{entity.name},'%') + + AND main.work_name = #{entity.workName} + AND dsco.course_type = #{entity.courseType} diff --git a/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml b/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml index a116b575..d8ca04b7 100644 --- a/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/ProcessMapper.xml @@ -292,4 +292,129 @@ + + 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 720ca67c..abe53610 100644 --- a/dl-module-jx/src/main/resources/mapper/course/SchoolCommissionMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCommissionMapper.xml @@ -101,4 +101,65 @@ AND dsc.create_time <= #{entity.endTimeStr} + + 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 ca57b523..335a0972 100644 --- a/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/course/SchoolCourseOrderMapper.xml @@ -262,7 +262,7 @@ + + diff --git a/dl-module-jx/src/main/resources/mapper/exam/ExamBatchMapper.xml b/dl-module-jx/src/main/resources/mapper/exam/ExamBatchMapper.xml index 11e64dca..ef62d5cc 100644 --- a/dl-module-jx/src/main/resources/mapper/exam/ExamBatchMapper.xml +++ b/dl-module-jx/src/main/resources/mapper/exam/ExamBatchMapper.xml @@ -28,13 +28,50 @@ ORDER BY dseb.create_time DESC + + +