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 1/4] 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 4/4] 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