♥️作者:小宋1021
🤵♂️个人主页:小宋1021主页
♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!!
🎈🎈加油! 加油! 加油! 加油
🎈欢迎评论 💬点赞👍🏻 收藏 📂加关注+!
目录
后端
实体类:
CancleClassRespVO
controller
CancleClassMapper
xml文件
CancleClassService
实现类
前端
index.vue
ClassCkeck.vue
index.ts(api)
axios.index.ts
目的:多表联查
数据库:学员表(study_student) 字段:学生姓名(sts_student_name)、手机号(sts_phone)
班级管理(teach_class_manage)字段:班级名称(teach_class_manage)、id(id)
教师管理(hr_teacher_manage)字段:教师姓名(teacher_name)
课程管理(teach_course_manage)字段 :课程名称(course_name)
中间表:
班级管理-关联课程教师(teach_class_manage_course) 字段:class_id、course_id、teacher_id
班级管理-关联学员(teach_class_manage_student) 字段:class_id、student_id
数据关系:班级课程多对多,班级学员多对多
要查出如下字段:
package com.todod.education.module.study.dal.dataobject.cancleclass; import lombok.*; import java.util.*; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import com.todod.education.framework.mybatis.core.dataobject.BaseDO; /** * 消课记录 DO * * @author 平台管理员 */ @TableName("study_cancle_class") @KeySequence("study_cancle_class_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor public class CancleClassDO extends BaseDO { /** * 主键id */ @TableId private Long id; /** * 学员id */ private Long studentId; /** * 班级id */ private Long classId; /** * 课程id */ private Long courseId; /** * 学员姓名 */ @TableField(exist = false) private String stsStudentName; /** * 手机号 */ @TableField(exist = false) private String stsPhone; /** * 班级名称 */ @TableField(exist = false) private String className; /** * 班级类型 */ @TableField(exist = false) private String classType; /** * 所报课程 */ @TableField(exist = false) private String courseName; /** * 授课教师 */ @TableField(exist = false) private String teacherName; /** * 上课时间 */ private LocalDateTime classTime; /** * 消课人 */ private String cancelClassPerson; /** * 消课时间 */ private LocalDateTime cancelClassTime; /** * 实到人数 */ private Integer arrivedNum; /** * 应到人数 */ private Integer arrivingNum; /** * 点名操作人员 */ private String rollCallPerson; /** * 点名时间 */ private LocalDateTime rollCallTime; /** * 操作人 */ private String operaName; /** * 操作时间 */ private LocalDateTime operaTime; /** * 操作类型 */ private String operaType; /** * 操作说明 */ private String operaExplain; }
package com.todod.education.module.study.controller.admin.cancleclass.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.util.*; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 消课记录 Response VO") @Data @ExcelIgnoreUnannotated public class CancleClassRespVO { @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18505") private Long id; @Schema(description = "学员id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18505") private Long studentId; @Schema(description = "班级id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18505") private Long classId; @Schema(description = "课程id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18505") private Long courseId; @Schema(description = "学员姓名", example = "芋艿") private String stsStudentName; @Schema(description = "手机号") private String stsPhone; @Schema(description = "班级名称", example = "李四") @ExcelProperty("班级名称") private String className; @Schema(description = "班级类型", example = "1") @ExcelProperty("班级类型") private String classType; @Schema(description = "所报课程") @ExcelProperty("所报课程") private String courseName; @Schema(description = "上课时间") @ExcelProperty("上课时间") private LocalDateTime classTime; @Schema(description = "授课教师") @ExcelProperty("授课教师") private String teacherName; @Schema(description = "消课人") @ExcelProperty("消课人") private String cancelClassPerson; @Schema(description = "消课时间") @ExcelProperty("消课时间") private LocalDateTime cancelClassTime; @Schema(description = "创建时间") @ExcelProperty("创建时间") private LocalDateTime createTime; @Schema(description = "操作人", example = "王五") private String operaName; @Schema(description = "操作时间") private LocalDateTime operaTime; @Schema(description = "操作类型", example = "2") private String operaType; @Schema(description = "操作说明") private String operaExplain; @Schema(description = "实到人数") private Integer arrivedNum; @Schema(description = "应到人数") private Integer arrivingNum; @Schema(description = "点名操作人员") private String rollCallPerson; @Schema(description = "点名时间") private LocalDateTime rollCallTime; }
@Tag(name = "管理后台 - 消课记录") @RestController @RequestMapping("/study/cancle-class") @Validated public class CancleClassController { @Resource private CancleClassService cancleClassService; @GetMapping("/get") @Operation(summary = "获得消课记录") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('study:cancle-class:query')") public CommonResult getCancleClass(@RequestParam("id") Long id) { CancleClassDO cancleClass = cancleClassService.getCancleClass(id); return success(BeanUtils.toBean(cancleClass, CancleClassRespVO.class)); } @GetMapping("/findByIds") public List findUsersByIds(@RequestParam Long id) { return cancleClassService.selectCheck(id); } @GetMapping("/get2") @Operation(summary = "获得消课记录2") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('study:cancle-class:query')") public CommonResult getCancleClass2(@RequestParam("id") Long id) { CancleClassDO cancleClass = cancleClassService.getCancleClass2(id); return success(BeanUtils.toBean(cancleClass, CancleClassRespVO.class)); } @GetMapping("/page") @Operation(summary = "获得消课记录分页") @PreAuthorize("@ss.hasPermission('study:cancle-class:query')") public CommonResult> getCancleClassPage(@Valid CancleClassPageReqVO pageReqVO) { PageResult pageResult = cancleClassService.getCancleClassPage(pageReqVO); return success(BeanUtils.toBean(pageResult, CancleClassRespVO.class)); } @GetMapping("/page2") @Operation(summary = "获得消课记录分页2") @PreAuthorize("@ss.hasPermission('study:cancle-class:query')") public CommonResult> getCancleClassPage2(@Valid CancleClassPageReqVO pageReqVO) { PageResult pageResult = cancleClassService.getCancleClassPage2(pageReqVO); return success(BeanUtils.toBean(pageResult, CancleClassRespVO.class)); } }
package com.todod.education.module.study.dal.mysql.cancleclass; import java.util.*; import com.baomidou.mybatisplus.core.metadata.IPage; import com.todod.education.framework.common.pojo.PageResult; import com.todod.education.framework.mybatis.core.query.LambdaQueryWrapperX; import com.todod.education.framework.mybatis.core.mapper.BaseMapperX; import com.todod.education.module.study.controller.admin.entranceexam.vo.EntranceExamPageReqVO; import com.todod.education.module.study.dal.dataobject.cancleclass.CancleClassDO; import com.todod.education.module.study.dal.dataobject.entranceexam.EntranceExamDO; import org.apache.ibatis.annotations.Mapper; import com.todod.education.module.study.controller.admin.cancleclass.vo.*; import org.apache.ibatis.annotations.Param; /** * 消课记录 Mapper * * @author 平台管理员 */ @Mapper public interface CancleClassMapper extends BaseMapperX { default PageResult selectPage(CancleClassPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(CancleClassDO::getClassName, reqVO.getClassName()) .betweenIfPresent(CancleClassDO::getClassTime, reqVO.getClassTime()) .betweenIfPresent(CancleClassDO::getCancelClassTime, reqVO.getCancelClassTime()) .betweenIfPresent(CancleClassDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(CancleClassDO::getId)); } IPage fetchPageResults(IPage page, @Param("queryEntry") CancleClassPageReqVO pageReqVO); List selectCheck(@Param("id") Long id); }
package com.todod.education.module.study.service.cancleclass; import java.util.*; import jakarta.validation.*; import com.todod.education.module.study.controller.admin.cancleclass.vo.*; import com.todod.education.module.study.dal.dataobject.cancleclass.CancleClassDO; import com.todod.education.framework.common.pojo.PageResult; import com.todod.education.framework.common.pojo.PageParam; /** * 消课记录 Service 接口 * * @author 平台管理员 */ public interface CancleClassService { /** * 获得消课记录 * * @param id 编号 * @return 消课记录 */ CancleClassDO getCancleClass(Long id); /** * 获得消课记录 * * @param id 编号 * @return 消课记录 */ CancleClassDO getCancleClass2(Long id); /** * 获得消课记录分页 * * @param pageReqVO 分页查询 * @return 消课记录分页 */ PageResult getCancleClassPage(CancleClassPageReqVO pageReqVO); /** * 获得消课记录分页2 * * @param pageReqVO 分页查询 * @return 消课记录分页 */ PageResult getCancleClassPage2(CancleClassPageReqVO pageReqVO); List selectCheck(Long id); }
package com.todod.education.module.study.service.cancleclass; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.service.impl.DiffParseFunction; import com.mzt.logapi.starter.annotation.LogRecord; import com.todod.education.module.study.controller.admin.monthexam.vo.MonthExamPageReqVO; import com.todod.education.module.study.controller.admin.plan.vo.PlanSaveReqVO; import com.todod.education.module.study.dal.dataobject.monthexam.MonthExamDO; import com.todod.education.module.study.dal.dataobject.plan.PlanDO; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; import com.todod.education.module.study.controller.admin.cancleclass.vo.*; import com.todod.education.module.study.dal.dataobject.cancleclass.CancleClassDO; import com.todod.education.framework.common.pojo.PageResult; import com.todod.education.framework.common.pojo.PageParam; import com.todod.education.framework.common.util.object.BeanUtils; import com.todod.education.module.study.dal.mysql.cancleclass.CancleClassMapper; import static com.todod.education.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.todod.education.module.study.enums.ErrorCodeConstants.*; import static com.todod.education.module.system.enums.LogRecordConstants.*; /** * 消课记录 Service 实现类 * * @author 平台管理员 */ @Service @Validated public class CancleClassServiceImpl implements CancleClassService { @Resource private CancleClassMapper cancleClassMapper; @Override public CancleClassDO getCancleClass(Long id) { return cancleClassMapper.selectById(id); } @Override public CancleClassDO getCancleClass2(Long id) { return cancleClassMapper.selectById(id); } @Override public PageResult getCancleClassPage(CancleClassPageReqVO pageReqVO) { return cancleClassMapper.selectPage(pageReqVO); } @Override public PageResult getCancleClassPage2(CancleClassPageReqVO pageReqVO) { IPage page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); cancleClassMapper.fetchPageResults(page, pageReqVO); return new PageResult<>(page.getRecords(), page.getTotal()); } @Override public List selectCheck(Long id) { return cancleClassMapper.selectCheck(id); } }
搜索 重置 发送课时核对 要为所选中的学员发送课时记录么 发送成功 取消 确认 消课 详情 日志
import request from '@/config/axios' // 消课记录 VO export interface CancleClassVO { id: number // 主键id className: string // 班级名称 classType: string // 班级类型 reportCourse: string // 所报课程 classTime: Date // 上课时间 classTeacher: string // 授课教师 cancelClassPerson: string // 消课人 cancelClassTime: Date // 消课时间 studentName: string // 学员姓名 phone: string // 手机号 arrivedNum: number // 实到人数 arrivingNum: number // 应到人数 rollCallPerson: string // 点名操作人员 rollCallTime: Date // 店面时间 operaName: string // 操作人 operaTime: Date // 操作时间 operaType: string // 操作类型 operaExplain: string // 操作说明 } // 消课记录 API export const CancleClassApi = { // 查询消课记录分页 getCancleClassPage: async (params: any) => { return await request.get({ url: `/study/cancle-class/page`, params }) }, // 查询消课记录分页 getCancleClassPage2: async (params: any) => { return await request.get({ url: `/study/cancle-class/page2`, params }) }, // 查询消课记录详情 getCancleClass: async (id: number) => { return await request.get({ url: `/study/cancle-class/get?id=` + id }) }, // 查询消课记录详情 getCancleClass2: async (id: number) => { return await request.get({ url: `/study/cancle-class/get2?id=` + id }) }, // 查询消课记录详情 getCancleClassDetail: async (id: number) => { return await request.gets({ url: `/study/cancle-class/findByIds?id=` + id }) }, // 新增消课记录 createCancleClass: async (data: CancleClassVO) => { return await request.post({ url: `/study/cancle-class/create`, data }) }, // 修改消课记录 updateCancleClass: async (data: CancleClassVO) => { return await request.put({ url: `/study/cancle-class/update`, data }) }, // 删除消课记录 deleteCancleClass: async (id: number) => { return await request.delete({ url: `/study/cancle-class/delete?id=` + id }) }, // 导出消课记录 Excel exportCancleClass: async (params) => { return await request.download({ url: `/study/cancle-class/export-excel`, params }) }, }
import { service } from './service' import { config } from './config' const { default_headers } = config const request = (option: any) => { const { url, method, params, data, headersType, responseType, ...config } = option return service({ url: url, method, params, data, ...config, responseType: responseType, headers: { 'Content-Type': headersType || default_headers } }) } export default { get: async (option: any) => { const res = await request({ method: 'GET', ...option }) return res.data as unknown as T }, gets: async (option: any) => { const res = await request({ method: 'GET', ...option }) return res as unknown as T }, post: async (option: any) => { const res = await request({ method: 'POST', ...option }) return res.data as unknown as T }, postOriginal: async (option: any) => { const res = await request({ method: 'POST', ...option }) return res }, delete: async (option: any) => { const res = await request({ method: 'DELETE', ...option }) return res.data as unknown as T }, put: async (option: any) => { const res = await request({ method: 'PUT', ...option }) return res.data as unknown as T }, download: async (option: any) => { const res = await request({ method: 'GET', responseType: 'blob', ...option }) return res as unknown as Promise }, upload: async (option: any) => { option.headersType = 'multipart/form-data' const res = await request({ method: 'POST', ...option }) return res as unknown as Promise }, download1: async (option: any) => { const res = await request({ method: 'POST', responseType: 'blob', ...option }) return res as unknown as Promise } }
上一篇:【数据结构】稀疏数组
下一篇:Mongodb的复合通配符索引