From 603858b53b4f8bf02e5903e4933526ee7b040416 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Wed, 20 Aug 2025 00:17:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XskhDisciplineRecordController.java | 10 + .../XskhDisciplineRevokeController.java | 21 + .../XskhRewardRecordController.java | 133 +++ .../dromara/xskh/domain/XskhRewardRecord.java | 152 +++ .../domain/bo/XskhDisciplineRevokeBo.java | 5 + .../xskh/domain/bo/XskhRewardRecordBo.java | 129 +++ .../domain/vo/XskhDisciplineRevokeVo.java | 25 + .../xskh/domain/vo/XskhRewardRecordVo.java | 154 +++ .../xskh/domain/vo/XskhStudentOptionVo.java | 3 +- .../mapper/XskhDisciplineRecordMapper.java | 15 + .../mapper/XskhDisciplineRevokeMapper.java | 15 + .../xskh/mapper/XskhRewardRecordMapper.java | 25 + .../service/IXskhDisciplineRecordService.java | 14 + .../service/IXskhDisciplineRevokeService.java | 10 + .../service/IXskhRewardRecordService.java | 95 ++ .../impl/XskhDisciplineRecordServiceImpl.java | 25 + .../impl/XskhDisciplineRevokeServiceImpl.java | 41 + .../impl/XskhRewardRecordServiceImpl.java | 195 ++++ .../mapper/XskhDisciplineRecordMapper.xml | 31 + .../mapper/XskhDisciplineRevokeMapper.xml | 45 +- .../mapper/xskh/XskhRewardRecordMapper.xml | 104 ++ .../学生考核管理/学生奖励记录字典数据.sql | 24 + .../学生考核管理/学生考核管理数据库模型.sql | 1 + web/src/api/xskh/disciplineRevoke/types.ts | 5 + web/src/api/xskh/rewardRecord/rewardRecord.ts | 92 ++ web/src/api/xskh/rewardRecord/types.ts | 211 ++++ web/src/api/xskh/rewardType/rewardType.ts | 79 ++ web/src/api/xskh/rewardType/types.ts | 79 ++ .../ClassDisciplineRecord.vue | 195 ++++ .../RevokeApplicationApproval.vue | 315 ++++++ .../xskh/classTeacherDiscipline/index.vue | 43 + .../disciplineRecord/DisciplineRecordForm.vue | 2 +- .../xskh/rewardRecord/RewardRecordForm.vue | 980 ++++++++++++++++++ web/src/views/xskh/rewardRecord/index.vue | 289 ++++++ .../RevokeApplicationView.vue | 40 +- 35 files changed, 3576 insertions(+), 26 deletions(-) create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhRewardRecordController.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/XskhRewardRecord.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhRewardRecordBo.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhRewardRecordVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhRewardRecordMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhRewardRecordService.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhRewardRecordServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/xskh/XskhRewardRecordMapper.xml create mode 100644 docs/设计文档/database/学生考核管理/学生奖励记录字典数据.sql create mode 100644 web/src/api/xskh/rewardRecord/rewardRecord.ts create mode 100644 web/src/api/xskh/rewardRecord/types.ts create mode 100644 web/src/api/xskh/rewardType/rewardType.ts create mode 100644 web/src/api/xskh/rewardType/types.ts create mode 100644 web/src/views/xskh/classTeacherDiscipline/ClassDisciplineRecord.vue create mode 100644 web/src/views/xskh/classTeacherDiscipline/RevokeApplicationApproval.vue create mode 100644 web/src/views/xskh/classTeacherDiscipline/index.vue create mode 100644 web/src/views/xskh/rewardRecord/RewardRecordForm.vue create mode 100644 web/src/views/xskh/rewardRecord/index.vue diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRecordController.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRecordController.java index 3fde1196..adc60050 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRecordController.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRecordController.java @@ -120,4 +120,14 @@ public class XskhDisciplineRecordController extends BaseController { PageQuery pageQuery) { return xskhDisciplineRecordService.queryMyPageList(bo, pageQuery); } + + /** + * 查询班主任班级的违纪处分记录列表(班主任专用) + */ + @SaCheckPermission("disciplineRecord:classTeacher:list") + @GetMapping("/classTeacherList") + public TableDataInfo getClassTeacherDisciplineRecords(XskhDisciplineRecordBo bo, + PageQuery pageQuery) { + return xskhDisciplineRecordService.queryClassTeacherPageList(bo, pageQuery); + } } diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRevokeController.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRevokeController.java index 886f18db..5739870a 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRevokeController.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRevokeController.java @@ -145,4 +145,25 @@ public class XskhDisciplineRevokeController extends BaseController { return toAjax(xskhDisciplineRevokeService.approveRevoke(bo)); } + /** + * 查询班主任班级的违纪撤销申请列表(班主任专用) + */ + @SaCheckPermission("disciplineRevoke:classTeacher:list") + @GetMapping("/classTeacherList") + public TableDataInfo getClassTeacherRevokeApplications(XskhDisciplineRevokeBo bo, + PageQuery pageQuery) { + return xskhDisciplineRevokeService.queryClassTeacherPageList(bo, pageQuery); + } + + /** + * 班主任审核撤销申请 + */ + @SaCheckPermission("disciplineRevoke:classTeacher:approve") + @Log(title = "班主任审核撤销申请", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/classTeacherApprove") + public R classTeacherApproveRevoke(@Validated(EditGroup.class) @RequestBody XskhDisciplineRevokeBo bo) { + return toAjax(xskhDisciplineRevokeService.classTeacherApproveRevoke(bo)); + } + } diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhRewardRecordController.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhRewardRecordController.java new file mode 100644 index 00000000..e8b342f2 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhRewardRecordController.java @@ -0,0 +1,133 @@ +package org.dromara.xskh.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.xskh.domain.vo.XskhRewardRecordVo; +import org.dromara.xskh.domain.bo.XskhRewardRecordBo; +import org.dromara.xskh.domain.vo.XskhStudentOptionVo; +import org.dromara.xskh.service.IXskhRewardRecordService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 学生奖励记录 + * + * @author ruoyi + * @date 2025-01-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/rewardRecord/rewardRecord") +public class XskhRewardRecordController extends BaseController { + + private final IXskhRewardRecordService xskhRewardRecordService; + + /** + * 查询学生奖励记录列表 + */ + @SaCheckPermission("rewardRecord:rewardRecord:list") + @GetMapping("/list") + public TableDataInfo list(XskhRewardRecordBo bo, PageQuery pageQuery) { + return xskhRewardRecordService.queryPageList(bo, pageQuery); + } + + /** + * 导出学生奖励记录列表 + */ + @SaCheckPermission("rewardRecord:rewardRecord:export") + @Log(title = "学生奖励记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XskhRewardRecordBo bo, HttpServletResponse response) { + List list = xskhRewardRecordService.queryList(bo); + ExcelUtil.exportExcel(list, "学生奖励记录", XskhRewardRecordVo.class, response); + } + + /** + * 获取学生奖励记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("rewardRecord:rewardRecord:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { + return R.ok(xskhRewardRecordService.queryById(id)); + } + + /** + * 新增学生奖励记录 + */ + @SaCheckPermission("rewardRecord:rewardRecord:add") + @Log(title = "学生奖励记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XskhRewardRecordBo bo) { + return toAjax(xskhRewardRecordService.insertByBo(bo)); + } + + /** + * 修改学生奖励记录 + */ + @SaCheckPermission("rewardRecord:rewardRecord:edit") + @Log(title = "学生奖励记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XskhRewardRecordBo bo) { + return toAjax(xskhRewardRecordService.updateByBo(bo)); + } + + /** + * 删除学生奖励记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("rewardRecord:rewardRecord:remove") + @Log(title = "学生奖励记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { + return toAjax(xskhRewardRecordService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 查询学生选项列表(用于下拉框) + */ + @SaCheckPermission("rewardRecord:rewardRecord:query") + @GetMapping("/studentOptions") + public R> getStudentOptions(@RequestParam(required = false) String keyword) { + return R.ok(xskhRewardRecordService.getStudentOptions(keyword)); + } + + /** + * 查询当前登录学生的奖励记录列表 + */ + @SaCheckPermission("rewardRecord:student:list") + @GetMapping("/my") + public TableDataInfo getMyRewardRecords(XskhRewardRecordBo bo, + PageQuery pageQuery) { + return xskhRewardRecordService.queryMyPageList(bo, pageQuery); + } + + /** + * 查询班主任班级的奖励记录列表(班主任专用) + */ + @SaCheckPermission("rewardRecord:classTeacher:list") + @GetMapping("/classTeacherList") + public TableDataInfo getClassTeacherRewardRecords(XskhRewardRecordBo bo, + PageQuery pageQuery) { + return xskhRewardRecordService.queryClassTeacherPageList(bo, pageQuery); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/XskhRewardRecord.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/XskhRewardRecord.java new file mode 100644 index 00000000..ec988d22 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/XskhRewardRecord.java @@ -0,0 +1,152 @@ +package org.dromara.xskh.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.tenant.core.TenantEntity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 学生奖励记录对象 xskh_reward_record + * + * @author ruoyi + * @date 2025-01-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xskh_reward_record") +public class XskhRewardRecord extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 学生ID + */ + private Long studentId; + + /** + * 学号 + */ + private String studentNo; + + /** + * 学生姓名 + */ + private String studentName; + + /** + * 学院ID + */ + private Long collegeId; + + /** + * 学院名称 + */ + private String collegeName; + + /** + * 专业ID + */ + private Long majorId; + + /** + * 专业名称 + */ + private String majorName; + + /** + * 班级ID + */ + private Long classId; + + /** + * 班级名称 + */ + private String className; + + /** + * 奖励类型ID + */ + private Long rewardTypeId; + + /** + * 奖励类型名称 + */ + private String rewardTypeName; + + /** + * 奖励日期 + */ + private Date rewardDate; + + /** + * 奖励内容 + */ + private String rewardContent; + + /** + * 加分分值 + */ + private BigDecimal scoreAddition; + + /** + * 附件OSS文件ID,多个用逗号分隔 + */ + private String attachmentOssIds; + + /** + * 状态(1-生效 2-撤销) + */ + private String status; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 创建部门 + */ + @TableField(fill = FieldFill.INSERT) + private Long createDept; + + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updateBy; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic(value = "0", delval = "1") + private Integer deleted; + + /** + * 租户编号 + */ + private String tenantId; +} diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhDisciplineRevokeBo.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhDisciplineRevokeBo.java index fe654ec2..0b0eb85d 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhDisciplineRevokeBo.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhDisciplineRevokeBo.java @@ -40,6 +40,11 @@ public class XskhDisciplineRevokeBo extends BaseEntity { */ private Long studentId; + /** + * 学生学号(查询条件用) + */ + private String studentNo; + /** * 学生姓名 */ diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhRewardRecordBo.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhRewardRecordBo.java new file mode 100644 index 00000000..f9c2c827 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhRewardRecordBo.java @@ -0,0 +1,129 @@ +package org.dromara.xskh.domain.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.core.validate.QueryGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import io.github.linpeilie.annotations.AutoMapper; +import org.dromara.xskh.domain.XskhRewardRecord; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 学生奖励记录业务对象 xskh_reward_record + * + * @author ruoyi + * @date 2025-01-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XskhRewardRecord.class, reverseConvertGenerate = false) +public class XskhRewardRecordBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 学生ID + */ + @NotNull(message = "学生ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long studentId; + + /** + * 学号 + */ + @NotBlank(message = "学号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String studentNo; + + /** + * 学生姓名 + */ + @NotBlank(message = "学生姓名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String studentName; + + /** + * 学院ID + */ + @NotNull(message = "学院ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long collegeId; + + /** + * 学院名称 + */ + @NotBlank(message = "学院名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String collegeName; + + /** + * 专业ID + */ + @NotNull(message = "专业ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long majorId; + + /** + * 专业名称 + */ + @NotBlank(message = "专业名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String majorName; + + /** + * 班级ID + */ + @NotNull(message = "班级ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long classId; + + /** + * 班级名称 + */ + @NotBlank(message = "班级名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String className; + + /** + * 奖励类型ID + */ + @NotNull(message = "奖励类型ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long rewardTypeId; + + /** + * 奖励类型名称 + */ + @NotBlank(message = "奖励类型名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String rewardTypeName; + + /** + * 奖励日期 + */ + @NotNull(message = "奖励日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date rewardDate; + + /** + * 奖励内容 + */ + @NotBlank(message = "奖励内容不能为空", groups = { AddGroup.class, EditGroup.class }) + private String rewardContent; + + /** + * 加分分值 + */ + @NotNull(message = "加分分值不能为空", groups = { AddGroup.class, EditGroup.class }) + @DecimalMin(value = "0.0", message = "加分分值不能小于0", groups = { AddGroup.class, EditGroup.class }) + @DecimalMax(value = "999.99", message = "加分分值不能大于999.99", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal scoreAddition; + + /** + * 附件OSS文件ID,多个用逗号分隔 + */ + private String attachmentOssIds; + + /** + * 状态(1-生效 2-撤销) + */ + @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; +} diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhDisciplineRevokeVo.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhDisciplineRevokeVo.java index a9ca40ad..17ae3452 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhDisciplineRevokeVo.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhDisciplineRevokeVo.java @@ -51,6 +51,25 @@ public class XskhDisciplineRevokeVo implements Serializable { @ExcelProperty(value = "学生姓名") private String studentName; + /** + * 学生学号(关联查询) + */ + @ExcelProperty(value = "学生学号") + private String studentNo; + + /** + * 违纪类型名称(关联查询) + */ + @ExcelProperty(value = "违纪类型") + private String disciplineTypeName; + + /** + * 违纪日期(关联查询) + */ + @ExcelProperty(value = "违纪日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date disciplineDate; + /** * 撤销申请原因 */ @@ -83,6 +102,12 @@ public class XskhDisciplineRevokeVo implements Serializable { @ExcelProperty(value = "审核人ID") private Long approvalBy; + /** + * 审核人姓名(关联查询) + */ + @ExcelProperty(value = "审核人姓名") + private String approvalByName; + /** * 审核时间 */ diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhRewardRecordVo.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhRewardRecordVo.java new file mode 100644 index 00000000..0ae7a7b3 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhRewardRecordVo.java @@ -0,0 +1,154 @@ +package org.dromara.xskh.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.xskh.domain.XskhRewardRecord; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 学生奖励记录视图对象 xskh_reward_record + * + * @author ruoyi + * @date 2025-01-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XskhRewardRecord.class) +public class XskhRewardRecordVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 学生ID + */ + @ExcelProperty(value = "学生ID") + private Long studentId; + + /** + * 学号 + */ + @ExcelProperty(value = "学号") + private String studentNo; + + /** + * 学生姓名 + */ + @ExcelProperty(value = "学生姓名") + private String studentName; + + /** + * 学院ID + */ + @ExcelProperty(value = "学院ID") + private Long collegeId; + + /** + * 学院名称 + */ + @ExcelProperty(value = "学院名称") + private String collegeName; + + /** + * 专业ID + */ + @ExcelProperty(value = "专业ID") + private Long majorId; + + /** + * 专业名称 + */ + @ExcelProperty(value = "专业名称") + private String majorName; + + /** + * 班级ID + */ + @ExcelProperty(value = "班级ID") + private Long classId; + + /** + * 班级名称 + */ + @ExcelProperty(value = "班级名称") + private String className; + + /** + * 奖励类型ID + */ + @ExcelProperty(value = "奖励类型ID") + private Long rewardTypeId; + + /** + * 奖励类型名称 + */ + @ExcelProperty(value = "奖励类型名称") + private String rewardTypeName; + + /** + * 奖励日期 + */ + @ExcelProperty(value = "奖励日期") + private Date rewardDate; + + /** + * 奖励内容 + */ + @ExcelProperty(value = "奖励内容") + private String rewardContent; + + /** + * 加分分值 + */ + @ExcelProperty(value = "加分分值") + private BigDecimal scoreAddition; + + /** + * 附件OSS文件ID,多个用逗号分隔 + */ + @ExcelProperty(value = "附件OSS文件ID") + private String attachmentOssIds; + + /** + * 状态(1-生效 2-撤销) + */ + @ExcelProperty(value = "状态") + private String status; + + /** + * 创建者 + */ + @ExcelProperty(value = "创建者") + private Long createBy; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新者 + */ + @ExcelProperty(value = "更新者") + private Long updateBy; + + /** + * 更新时间 + */ + @ExcelProperty(value = "更新时间") + private Date updateTime; +} diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhStudentOptionVo.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhStudentOptionVo.java index ac60c7f2..0cc7893e 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhStudentOptionVo.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhStudentOptionVo.java @@ -6,7 +6,7 @@ import java.io.Serial; import java.io.Serializable; /** - * 学生考核-学生选项视图对象,用于下拉框选择 + * 学生选项视图对象 * * @author ruoyi * @date 2025-01-03 @@ -61,5 +61,4 @@ public class XskhStudentOptionVo implements Serializable { * 班级名称 */ private String className; - } diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRecordMapper.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRecordMapper.java index 76f93aed..78800ae9 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRecordMapper.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRecordMapper.java @@ -1,7 +1,10 @@ package org.dromara.xskh.mapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.xskh.domain.XskhDisciplineRecord; +import org.dromara.xskh.domain.bo.XskhDisciplineRecordBo; import org.dromara.xskh.domain.vo.XskhDisciplineRecordVo; import org.dromara.xskh.domain.vo.XskhStudentOptionVo; @@ -23,4 +26,16 @@ public interface XskhDisciplineRecordMapper extends BaseMapperPlus selectStudentOptions(String keyword); + /** + * 查询班主任班级的违纪处分记录列表(班主任专用) + * + * @param page 分页参数 + * @param bo 查询条件 + * @param classTeacherId 班主任ID + * @return 分页查询结果 + */ + Page selectClassTeacherVoPage(@Param("page") Page page, + @Param("bo") XskhDisciplineRecordBo bo, + @Param("classTeacherId") Long classTeacherId); + } diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRevokeMapper.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRevokeMapper.java index 94077c16..236bba85 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRevokeMapper.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRevokeMapper.java @@ -1,7 +1,10 @@ package org.dromara.xskh.mapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.xskh.domain.XskhDisciplineRevoke; +import org.dromara.xskh.domain.bo.XskhDisciplineRevokeBo; import org.dromara.xskh.domain.vo.XskhDisciplineRevokeVo; /** @@ -20,4 +23,16 @@ public interface XskhDisciplineRevokeMapper extends BaseMapperPlus selectClassTeacherVoPage(@Param("page") Page page, + @Param("bo") XskhDisciplineRevokeBo bo, + @Param("classTeacherId") Long classTeacherId); + } diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhRewardRecordMapper.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhRewardRecordMapper.java new file mode 100644 index 00000000..1c9fccf8 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhRewardRecordMapper.java @@ -0,0 +1,25 @@ +package org.dromara.xskh.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.xskh.domain.XskhRewardRecord; +import org.dromara.xskh.domain.vo.XskhRewardRecordVo; +import org.dromara.xskh.domain.vo.XskhStudentOptionVo; + +import java.util.List; + +/** + * 学生奖励记录Mapper接口 + * + * @author ruoyi + * @date 2025-01-03 + */ +public interface XskhRewardRecordMapper extends BaseMapperPlus { + + /** + * 查询学生选项列表(用于下拉框) + * + * @param keyword 搜索关键词 + * @return 学生选项列表 + */ + List selectStudentOptions(String keyword); +} diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRecordService.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRecordService.java index 07ca7d34..d018f636 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRecordService.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRecordService.java @@ -56,4 +56,18 @@ public interface IXskhDisciplineRecordService { * 查询当前登录学生的违纪处分记录列表 */ TableDataInfo queryMyPageList(XskhDisciplineRecordBo bo, PageQuery pageQuery); + + /** + * 查询班主任班级的违纪处分记录列表(班主任专用) + */ + TableDataInfo queryClassTeacherPageList(XskhDisciplineRecordBo bo, PageQuery pageQuery); + + /** + * 更新违纪记录状态 + * + * @param id 违纪记录ID + * @param status 新状态(1-生效 2-已撤销) + * @return 更新结果 + */ + Boolean updateDisciplineRecordStatus(Long id, String status); } diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRevokeService.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRevokeService.java index 4d79cf44..f35b1bd8 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRevokeService.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRevokeService.java @@ -66,4 +66,14 @@ public interface IXskhDisciplineRevokeService { */ Boolean approveRevoke(XskhDisciplineRevokeBo bo); + /** + * 查询班主任班级的违纪撤销申请列表(班主任专用) + */ + TableDataInfo queryClassTeacherPageList(XskhDisciplineRevokeBo bo, PageQuery pageQuery); + + /** + * 班主任审核撤销申请 + */ + Boolean classTeacherApproveRevoke(XskhDisciplineRevokeBo bo); + } diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhRewardRecordService.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhRewardRecordService.java new file mode 100644 index 00000000..5749d957 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhRewardRecordService.java @@ -0,0 +1,95 @@ +package org.dromara.xskh.service; + +import org.dromara.xskh.domain.vo.XskhRewardRecordVo; +import org.dromara.xskh.domain.bo.XskhRewardRecordBo; +import org.dromara.xskh.domain.vo.XskhStudentOptionVo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 学生奖励记录Service接口 + * + * @author ruoyi + * @date 2025-01-03 + */ +public interface IXskhRewardRecordService { + + /** + * 查询学生奖励记录 + * + * @param id 学生奖励记录主键 + * @return 学生奖励记录 + */ + XskhRewardRecordVo queryById(Long id); + + /** + * 查询学生奖励记录列表 + * + * @param bo 学生奖励记录 + * @param pageQuery 分页参数 + * @return 学生奖励记录集合 + */ + TableDataInfo queryPageList(XskhRewardRecordBo bo, PageQuery pageQuery); + + /** + * 查询学生奖励记录列表 + * + * @param bo 学生奖励记录 + * @return 学生奖励记录集合 + */ + List queryList(XskhRewardRecordBo bo); + + /** + * 新增学生奖励记录 + * + * @param bo 学生奖励记录 + * @return 结果 + */ + Boolean insertByBo(XskhRewardRecordBo bo); + + /** + * 修改学生奖励记录 + * + * @param bo 学生奖励记录 + * @return 结果 + */ + Boolean updateByBo(XskhRewardRecordBo bo); + + /** + * 校验并批量删除学生奖励记录信息 + * + * @param ids 需要删除的学生奖励记录主键集合 + * @param isValid 是否检验,true-删除前校验,false-不校验 + * @return 结果 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 查询学生选项列表(用于下拉框) + * + * @param keyword 搜索关键词 + * @return 学生选项列表 + */ + List getStudentOptions(String keyword); + + /** + * 查询当前登录学生的奖励记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 分页结果 + */ + TableDataInfo queryMyPageList(XskhRewardRecordBo bo, PageQuery pageQuery); + + /** + * 查询班主任班级的奖励记录列表(班主任专用) + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 分页结果 + */ + TableDataInfo queryClassTeacherPageList(XskhRewardRecordBo bo, PageQuery pageQuery); +} diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRecordServiceImpl.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRecordServiceImpl.java index 69248e07..afd9bf33 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRecordServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRecordServiceImpl.java @@ -187,4 +187,29 @@ public class XskhDisciplineRecordServiceImpl implements IXskhDisciplineRecordSer Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } + + /** + * 查询班主任班级的违纪处分记录列表(班主任专用) + */ + @Override + public TableDataInfo queryClassTeacherPageList(XskhDisciplineRecordBo bo, + PageQuery pageQuery) { + // 获取当前登录用户ID(班主任ID) + Long currentUserId = LoginHelper.getUserId(); + + // 调用mapper中的专用查询方法 + Page result = baseMapper.selectClassTeacherVoPage(pageQuery.build(), bo, currentUserId); + return TableDataInfo.build(result); + } + + /** + * 更新违纪记录状态 + */ + @Override + public Boolean updateDisciplineRecordStatus(Long id, String status) { + XskhDisciplineRecord record = new XskhDisciplineRecord(); + record.setId(id); + record.setStatus(status); + return baseMapper.updateById(record) > 0; + } } diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRevokeServiceImpl.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRevokeServiceImpl.java index 2df9ad89..755167c6 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRevokeServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRevokeServiceImpl.java @@ -217,4 +217,45 @@ public class XskhDisciplineRevokeServiceImpl implements IXskhDisciplineRevokeSer return updateByBo(bo); } + /** + * 查询班主任班级的违纪撤销申请列表(班主任专用) + */ + @Override + public TableDataInfo queryClassTeacherPageList(XskhDisciplineRevokeBo bo, + PageQuery pageQuery) { + // 获取当前登录用户ID(班主任ID) + Long currentUserId = LoginHelper.getUserId(); + + // 调用mapper中的专用查询方法 + Page result = baseMapper.selectClassTeacherVoPage(pageQuery.build(), bo, currentUserId); + return TableDataInfo.build(result); + } + + /** + * 班主任审核撤销申请 + */ + @Override + public Boolean classTeacherApproveRevoke(XskhDisciplineRevokeBo bo) { + // 获取当前登录用户ID作为审核人 + Long currentUserId = LoginHelper.getUserId(); + + bo.setApprovalBy(currentUserId); + bo.setApprovalTime(new Date()); + + // 更新撤销申请状态 + Boolean updateResult = updateByBo(bo); + + // 如果撤销申请审批通过(状态为2),则同步更新违纪记录状态为已撤销 + if (updateResult && "2".equals(bo.getStatus())) { + // 根据撤销申请ID查询完整信息以获取违纪记录ID + XskhDisciplineRevokeVo revokeInfo = queryById(bo.getId()); + if (revokeInfo != null && revokeInfo.getDisciplineRecordId() != null) { + // 更新违纪记录状态为2-已撤销 + disciplineRecordService.updateDisciplineRecordStatus(revokeInfo.getDisciplineRecordId(), "2"); + } + } + + return updateResult; + } + } diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhRewardRecordServiceImpl.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhRewardRecordServiceImpl.java new file mode 100644 index 00000000..9ab05330 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhRewardRecordServiceImpl.java @@ -0,0 +1,195 @@ +package org.dromara.xskh.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.stereotype.Service; +import org.dromara.xskh.domain.bo.XskhRewardRecordBo; +import org.dromara.xskh.domain.vo.XskhRewardRecordVo; +import org.dromara.xskh.domain.vo.XskhStudentOptionVo; +import org.dromara.xskh.domain.XskhRewardRecord; +import org.dromara.xskh.mapper.XskhRewardRecordMapper; +import org.dromara.xskh.service.IXskhRewardRecordService; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 学生奖励记录Service业务层处理 + * + * @author ruoyi + * @date 2025-01-03 + */ +@RequiredArgsConstructor +@Service +public class XskhRewardRecordServiceImpl implements IXskhRewardRecordService { + + private final XskhRewardRecordMapper baseMapper; + + /** + * 查询学生奖励记录 + * + * @param id 学生奖励记录主键 + * @return 学生奖励记录 + */ + @Override + public XskhRewardRecordVo queryById(Long id) { + XskhRewardRecord xskhRewardRecord = baseMapper.selectById(id); + return MapstructUtils.convert(xskhRewardRecord, XskhRewardRecordVo.class); + } + + /** + * 查询学生奖励记录列表 + * + * @param bo 学生奖励记录 + * @return 学生奖励记录 + */ + @Override + public TableDataInfo queryPageList(XskhRewardRecordBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询学生奖励记录列表 + * + * @param bo 学生奖励记录 + * @return 学生奖励记录 + */ + @Override + public List queryList(XskhRewardRecordBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XskhRewardRecordBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getStudentId() != null, XskhRewardRecord::getStudentId, bo.getStudentId()); + lqw.like(StringUtils.isNotBlank(bo.getStudentNo()), XskhRewardRecord::getStudentNo, bo.getStudentNo()); + lqw.like(StringUtils.isNotBlank(bo.getStudentName()), XskhRewardRecord::getStudentName, bo.getStudentName()); + lqw.eq(bo.getCollegeId() != null, XskhRewardRecord::getCollegeId, bo.getCollegeId()); + lqw.like(StringUtils.isNotBlank(bo.getCollegeName()), XskhRewardRecord::getCollegeName, bo.getCollegeName()); + lqw.eq(bo.getMajorId() != null, XskhRewardRecord::getMajorId, bo.getMajorId()); + lqw.like(StringUtils.isNotBlank(bo.getMajorName()), XskhRewardRecord::getMajorName, bo.getMajorName()); + lqw.eq(bo.getClassId() != null, XskhRewardRecord::getClassId, bo.getClassId()); + lqw.like(StringUtils.isNotBlank(bo.getClassName()), XskhRewardRecord::getClassName, bo.getClassName()); + lqw.eq(bo.getRewardTypeId() != null, XskhRewardRecord::getRewardTypeId, bo.getRewardTypeId()); + lqw.like(StringUtils.isNotBlank(bo.getRewardTypeName()), XskhRewardRecord::getRewardTypeName, + bo.getRewardTypeName()); + lqw.eq(bo.getRewardDate() != null, XskhRewardRecord::getRewardDate, bo.getRewardDate()); + lqw.like(StringUtils.isNotBlank(bo.getRewardContent()), XskhRewardRecord::getRewardContent, + bo.getRewardContent()); + lqw.eq(bo.getScoreAddition() != null, XskhRewardRecord::getScoreAddition, bo.getScoreAddition()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XskhRewardRecord::getStatus, bo.getStatus()); + lqw.eq(bo.getCreateBy() != null, XskhRewardRecord::getCreateBy, bo.getCreateBy()); + lqw.eq(bo.getCreateTime() != null, XskhRewardRecord::getCreateTime, bo.getCreateTime()); + lqw.eq(bo.getUpdateBy() != null, XskhRewardRecord::getUpdateBy, bo.getUpdateBy()); + lqw.eq(bo.getUpdateTime() != null, XskhRewardRecord::getUpdateTime, bo.getUpdateTime()); + return lqw; + } + + /** + * 新增学生奖励记录 + * + * @param bo 学生奖励记录 + * @return 结果 + */ + @Override + public Boolean insertByBo(XskhRewardRecordBo bo) { + XskhRewardRecord add = MapstructUtils.convert(bo, XskhRewardRecord.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改学生奖励记录 + * + * @param bo 学生奖励记录 + * @return 结果 + */ + @Override + public Boolean updateByBo(XskhRewardRecordBo bo) { + XskhRewardRecord update = MapstructUtils.convert(bo, XskhRewardRecord.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + * + * @param entity 实体类数据 + */ + private void validEntityBeforeSave(XskhRewardRecord entity) { + // TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除学生奖励记录 + * + * @param ids 需要删除的学生奖励记录主键 + * @param isValid 是否检验,true-删除前校验,false-不校验 + * @return 结果 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * 查询学生选项列表(用于下拉框) + * + * @param keyword 搜索关键词 + * @return 学生选项列表 + */ + @Override + public List getStudentOptions(String keyword) { + return baseMapper.selectStudentOptions(keyword); + } + + /** + * 查询当前登录学生的奖励记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 分页结果 + */ + @Override + public TableDataInfo queryMyPageList(XskhRewardRecordBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + // TODO: 添加当前登录学生ID的查询条件 + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询班主任班级的奖励记录列表(班主任专用) + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 分页结果 + */ + @Override + public TableDataInfo queryClassTeacherPageList(XskhRewardRecordBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + // TODO: 添加班主任班级的查询条件 + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } +} diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRecordMapper.xml b/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRecordMapper.xml index b555aec9..2560797a 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRecordMapper.xml +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRecordMapper.xml @@ -67,4 +67,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" limit 50 + + diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRevokeMapper.xml b/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRevokeMapper.xml index 3c527ec7..8bb249b0 100644 --- a/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRevokeMapper.xml +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRevokeMapper.xml @@ -30,10 +30,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/xskh/XskhRewardRecordMapper.xml b/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/xskh/XskhRewardRecordMapper.xml new file mode 100644 index 00000000..84602385 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/xskh/XskhRewardRecordMapper.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, student_id, student_no, student_name, college_id, college_name, major_id, major_name, class_id, class_name, reward_type_id, reward_type_name, reward_date, reward_content, score_addition, attachment_oss_ids, status, create_by, create_time, create_dept, update_by, update_time, deleted, tenant_id from xskh_reward_record + + + + + + + + + diff --git a/docs/设计文档/database/学生考核管理/学生奖励记录字典数据.sql b/docs/设计文档/database/学生考核管理/学生奖励记录字典数据.sql new file mode 100644 index 00000000..660c361a --- /dev/null +++ b/docs/设计文档/database/学生考核管理/学生奖励记录字典数据.sql @@ -0,0 +1,24 @@ +-- ===================================================== +-- 学生奖励记录字典数据 +-- 创建时间: 2025-01-03 +-- 描述: 学生奖励记录相关字典数据 +-- ===================================================== + +-- 1. 学生奖励记录状态字典 +INSERT INTO `sys_dict_type` (`id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES +(1010, '学生奖励记录状态', 'student_reward_status', '0', 1, NOW(), NULL, NULL, '学生奖励记录状态'); + +INSERT INTO `sys_dict_data` (`id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES +(10030, 1, '生效', '1', 'student_reward_status', '', 'success', 'Y', '0', 1, NOW(), NULL, NULL, '奖励记录生效'), +(10031, 2, '撤销', '2', 'student_reward_status', '', 'info', 'N', '0', 1, NOW(), NULL, NULL, '奖励记录已撤销'); + +-- 2. 奖励类型示例数据 +INSERT INTO `xskh_reward_type` (`id`, `type_code`, `type_name`, `description`, `status`, `sort_order`, `create_by`, `create_time`, `create_dept`, `update_by`, `update_time`, `deleted`, `tenant_id`) VALUES +(1001, 'ACADEMIC_EXCELLENCE', '学术优秀奖', '在学术方面表现优秀的学生', '0', 1, 1, NOW(), 103, NULL, NULL, 0, '000000'), +(1002, 'SPORTS_ACHIEVEMENT', '体育成就奖', '在体育方面取得突出成就的学生', '0', 2, 1, NOW(), 103, NULL, NULL, 0, '000000'), +(1003, 'ARTISTIC_TALENT', '艺术才能奖', '在艺术方面有特殊才能的学生', '0', 3, 1, NOW(), 103, NULL, NULL, 0, '000000'), +(1004, 'LEADERSHIP', '领导能力奖', '在学生工作中表现突出的学生', '0', 4, 1, NOW(), 103, NULL, NULL, 0, '000000'), +(1005, 'VOLUNTEER_SERVICE', '志愿服务奖', '在志愿服务中表现积极的学生', '0', 5, 1, NOW(), 103, NULL, NULL, 0, '000000'), +(1006, 'INNOVATION', '创新实践奖', '在创新实践方面有突出表现的学生', '0', 6, 1, NOW(), 103, NULL, NULL, 0, '000000'), +(1007, 'MORAL_EXCELLENCE', '品德优秀奖', '在品德方面表现优秀的学生', '0', 7, 1, NOW(), 103, NULL, NULL, 0, '000000'), +(1008, 'PROGRESS', '进步奖', '在学习或品德方面有明显进步的学生', '0', 8, 1, NOW(), 103, NULL, NULL, 0, '000000'); \ No newline at end of file diff --git a/docs/设计文档/database/学生考核管理/学生考核管理数据库模型.sql b/docs/设计文档/database/学生考核管理/学生考核管理数据库模型.sql index fc991671..b136c3c4 100644 --- a/docs/设计文档/database/学生考核管理/学生考核管理数据库模型.sql +++ b/docs/设计文档/database/学生考核管理/学生考核管理数据库模型.sql @@ -129,6 +129,7 @@ CREATE TABLE `xskh_reward_record` ( `reward_date` date NOT NULL COMMENT '奖励日期', `reward_content` varchar(500) NOT NULL COMMENT '奖励内容', `score_addition` decimal(5,2) DEFAULT 0.00 COMMENT '加分分值', + `attachment_oss_ids` varchar(1000) DEFAULT NULL COMMENT '附件OSS文件ID,多个用逗号分隔(申请材料、证明文件等)', `status` char(1) DEFAULT '1' COMMENT '状态(1-生效 2-撤销)', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', diff --git a/web/src/api/xskh/disciplineRevoke/types.ts b/web/src/api/xskh/disciplineRevoke/types.ts index 716f0e2b..d24c8cbf 100644 --- a/web/src/api/xskh/disciplineRevoke/types.ts +++ b/web/src/api/xskh/disciplineRevoke/types.ts @@ -46,6 +46,11 @@ export interface DisciplineRevokeVO { */ approvalBy: string | number; + /** + * 审核人姓名 + */ + approvalByName: string; + /** * 审核时间 */ diff --git a/web/src/api/xskh/rewardRecord/rewardRecord.ts b/web/src/api/xskh/rewardRecord/rewardRecord.ts new file mode 100644 index 00000000..006eafad --- /dev/null +++ b/web/src/api/xskh/rewardRecord/rewardRecord.ts @@ -0,0 +1,92 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { XskhRewardRecordVo, XskhRewardRecordBo, XskhRewardRecordQuery, XskhRewardRecordForm } from './types'; + +/** + * 查询学生奖励记录列表 + * @param query + * @returns + */ +export function listRewardRecord(query: XskhRewardRecordQuery): AxiosPromise> { + return request({ + url: '/rewardRecord/rewardRecord/list', + method: 'get', + params: query + }); +} + +/** + * 查询学生奖励记录详细 + * @param id + * @returns + */ +export function getRewardRecord(id: string | number): AxiosPromise> { + return request({ + url: '/rewardRecord/rewardRecord/' + id, + method: 'get' + }); +} + +/** + * 新增学生奖励记录 + * @param data + * @returns + */ +export function addRewardRecord(data: XskhRewardRecordForm): AxiosPromise> { + return request({ + url: '/rewardRecord/rewardRecord', + method: 'post', + data: data + }); +} + +/** + * 修改学生奖励记录 + * @param data + * @returns + */ +export function updateRewardRecord(data: XskhRewardRecordForm): AxiosPromise> { + return request({ + url: '/rewardRecord/rewardRecord', + method: 'put', + data: data + }); +} + +/** + * 删除学生奖励记录 + * @param ids + * @returns + */ +export function delRewardRecord(ids: string | string[] | number | number[]): AxiosPromise> { + return request({ + url: '/rewardRecord/rewardRecord/' + ids, + method: 'delete' + }); +} + +/** + * 导出学生奖励记录 + * @param query + * @returns + */ +export function exportRewardRecord(query: XskhRewardRecordQuery): AxiosPromise { + return request({ + url: '/rewardRecord/rewardRecord/export', + method: 'post', + data: query + }); +} + +/** + * 获取学生选项列表(用于下拉框) + * @param keyword + * @returns + */ +export function getStudentOptions(keyword?: string): AxiosPromise> { + return request({ + url: '/rewardRecord/rewardRecord/studentOptions', + method: 'get', + params: { keyword } + }); +} diff --git a/web/src/api/xskh/rewardRecord/types.ts b/web/src/api/xskh/rewardRecord/types.ts new file mode 100644 index 00000000..28dbce7c --- /dev/null +++ b/web/src/api/xskh/rewardRecord/types.ts @@ -0,0 +1,211 @@ +import { BaseEntity } from '@/types/axios'; + +/** + * 学生奖励记录对象 + */ +export interface XskhRewardRecordVo extends BaseEntity { + /** 主键ID */ + id?: string | number; + /** 学生ID */ + studentId?: string | number; + /** 学号 */ + studentNo?: string; + /** 学生姓名 */ + studentName?: string; + /** 学院ID */ + collegeId?: string | number; + /** 学院名称 */ + collegeName?: string; + /** 专业ID */ + majorId?: string | number; + /** 专业名称 */ + majorName?: string; + /** 班级ID */ + classId?: string | number; + /** 班级名称 */ + className?: string; + /** 奖励类型ID */ + rewardTypeId?: string | number; + /** 奖励类型名称 */ + rewardTypeName?: string; + /** 奖励日期 */ + rewardDate?: string; + /** 奖励内容 */ + rewardContent?: string; + /** 加分分值 */ + scoreAddition?: number; + /** 附件OSS文件ID,多个用逗号分隔 */ + attachmentOssIds?: string; + /** 状态(1-生效 2-撤销) */ + status?: string; + /** 创建者 */ + createBy?: string | number; + /** 创建时间 */ + createTime?: string; + /** 更新者 */ + updateBy?: string | number; + /** 更新时间 */ + updateTime?: string; +} + +/** + * 学生奖励记录业务对象 + */ +export interface XskhRewardRecordBo extends BaseEntity { + /** 主键ID */ + id?: string | number; + /** 学生ID */ + studentId?: string | number; + /** 学号 */ + studentNo?: string; + /** 学生姓名 */ + studentName?: string; + /** 学院ID */ + collegeId?: string | number; + /** 学院名称 */ + collegeName?: string; + /** 专业ID */ + majorId?: string | number; + /** 专业名称 */ + majorName?: string; + /** 班级ID */ + classId?: string | number; + /** 班级名称 */ + className?: string; + /** 奖励类型ID */ + rewardTypeId?: string | number; + /** 奖励类型名称 */ + rewardTypeName?: string; + /** 奖励日期 */ + rewardDate?: string; + /** 奖励内容 */ + rewardContent?: string; + /** 加分分值 */ + scoreAddition?: number; + /** 附件OSS文件ID,多个用逗号分隔 */ + attachmentOssIds?: string; + /** 状态(1-生效 2-撤销) */ + status?: string; + /** 创建者 */ + createBy?: string | number; + /** 创建时间 */ + createTime?: string; + /** 更新者 */ + updateBy?: string | number; + /** 更新时间 */ + updateTime?: string; +} + +/** + * 学生奖励记录查询对象 + */ +export interface XskhRewardRecordQuery extends BaseEntity { + /** 当前页码 */ + pageNum?: number; + /** 每页数量 */ + pageSize?: number; + /** 学生ID */ + studentId?: string | number; + /** 学号 */ + studentNo?: string; + /** 学生姓名 */ + studentName?: string; + /** 学院ID */ + collegeId?: string | number; + /** 学院名称 */ + collegeName?: string; + /** 专业ID */ + majorId?: string | number; + /** 专业名称 */ + majorName?: string; + /** 班级ID */ + classId?: string | number; + /** 班级名称 */ + className?: string; + /** 奖励类型ID */ + rewardTypeId?: string | number; + /** 奖励类型名称 */ + rewardTypeName?: string; + /** 奖励日期 */ + rewardDate?: string; + /** 奖励内容 */ + rewardContent?: string; + /** 加分分值 */ + scoreAddition?: number; + /** 状态(1-生效 2-撤销) */ + status?: string; + /** 创建者 */ + createBy?: string | number; + /** 创建时间 */ + createTime?: string; + /** 更新者 */ + updateBy?: string | number; + /** 更新时间 */ + updateTime?: string; + /** 请求参数 */ + params?: any; +} + +/** + * 学生奖励记录表单对象 + */ +export interface XskhRewardRecordForm extends BaseEntity { + /** 主键ID */ + id?: string | number; + /** 学生ID */ + studentId?: string | number; + /** 学号 */ + studentNo?: string; + /** 学生姓名 */ + studentName?: string; + /** 学院ID */ + collegeId?: string | number; + /** 学院名称 */ + collegeName?: string; + /** 专业ID */ + majorId?: string | number; + /** 专业名称 */ + majorName?: string; + /** 班级ID */ + classId?: string | number; + /** 班级名称 */ + className?: string; + /** 奖励类型ID */ + rewardTypeId?: string | number; + /** 奖励类型名称 */ + rewardTypeName?: string; + /** 奖励日期 */ + rewardDate?: string; + /** 奖励内容 */ + rewardContent?: string; + /** 加分分值 */ + scoreAddition?: number; + /** 附件OSS文件ID,多个用逗号分隔 */ + attachmentOssIds?: string; + /** 状态(1-生效 2-撤销) */ + status?: string; +} + +/** + * 学生选项VO + */ +export interface XskhStudentOptionVO { + /** 学生ID */ + id: string | number; + /** 学号 */ + studentNo: string; + /** 学生姓名 */ + name: string; + /** 学院ID */ + collegeId: string | number; + /** 学院名称 */ + collegeName: string; + /** 专业ID */ + majorId: string | number; + /** 专业名称 */ + majorName: string; + /** 班级ID */ + classId: string | number; + /** 班级名称 */ + className: string; +} diff --git a/web/src/api/xskh/rewardType/rewardType.ts b/web/src/api/xskh/rewardType/rewardType.ts new file mode 100644 index 00000000..e4953bb4 --- /dev/null +++ b/web/src/api/xskh/rewardType/rewardType.ts @@ -0,0 +1,79 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { XskhRewardTypeVo, XskhRewardTypeBo, XskhRewardTypeQuery } from './types'; + +/** + * 查询奖励类型列表 + * @param query + * @returns + */ +export function listRewardType(query: XskhRewardTypeQuery): AxiosPromise> { + return request({ + url: '/rewardType/rewardType/list', + method: 'get', + params: query + }); +} + +/** + * 查询奖励类型详细 + * @param id + * @returns + */ +export function getRewardType(id: string | number): AxiosPromise> { + return request({ + url: '/rewardType/rewardType/' + id, + method: 'get' + }); +} + +/** + * 新增奖励类型 + * @param data + * @returns + */ +export function addRewardType(data: XskhRewardTypeBo): AxiosPromise> { + return request({ + url: '/rewardType/rewardType', + method: 'post', + data: data + }); +} + +/** + * 修改奖励类型 + * @param data + * @returns + */ +export function updateRewardType(data: XskhRewardTypeBo): AxiosPromise> { + return request({ + url: '/rewardType/rewardType', + method: 'put', + data: data + }); +} + +/** + * 删除奖励类型 + * @param ids + * @returns + */ +export function delRewardType(ids: string | string[] | number | number[]): AxiosPromise> { + return request({ + url: '/rewardType/rewardType/' + ids, + method: 'delete' + }); +} + +/** + * 导出奖励类型 + * @param query + * @returns + */ +export function exportRewardType(query: XskhRewardTypeQuery): AxiosPromise { + return request({ + url: '/rewardType/rewardType/export', + method: 'post', + data: query + }); +} diff --git a/web/src/api/xskh/rewardType/types.ts b/web/src/api/xskh/rewardType/types.ts new file mode 100644 index 00000000..b130ff2a --- /dev/null +++ b/web/src/api/xskh/rewardType/types.ts @@ -0,0 +1,79 @@ +import { BaseEntity } from '@/types/axios'; + +/** + * 奖励类型对象 + */ +export interface XskhRewardTypeVo extends BaseEntity { + /** 主键ID */ + id?: string | number; + /** 类型编码 */ + typeCode?: string; + /** 类型名称 */ + typeName?: string; + /** 类型说明 */ + description?: string; + /** 状态(0-正常 1-停用) */ + status?: string; + /** 排序号 */ + sortOrder?: number; + /** 创建者 */ + createBy?: string | number; + /** 创建时间 */ + createTime?: string; + /** 更新者 */ + updateBy?: string | number; + /** 更新时间 */ + updateTime?: string; +} + +/** + * 奖励类型业务对象 + */ +export interface XskhRewardTypeBo extends BaseEntity { + /** 主键ID */ + id?: string | number; + /** 类型编码 */ + typeCode?: string; + /** 类型名称 */ + typeName?: string; + /** 类型说明 */ + description?: string; + /** 状态(0-正常 1-停用) */ + status?: string; + /** 排序号 */ + sortOrder?: number; + /** 创建者 */ + createBy?: string | number; + /** 创建时间 */ + createTime?: string; + /** 更新者 */ + updateBy?: string | number; + /** 更新时间 */ + updateTime?: string; +} + +/** + * 奖励类型查询对象 + */ +export interface XskhRewardTypeQuery extends BaseEntity { + /** 当前页码 */ + pageNum?: number; + /** 每页数量 */ + pageSize?: number; + /** 类型编码 */ + typeCode?: string; + /** 类型名称 */ + typeName?: string; + /** 状态(0-正常 1-停用) */ + status?: string; + /** 创建者 */ + createBy?: string | number; + /** 创建时间 */ + createTime?: string; + /** 更新者 */ + updateBy?: string | number; + /** 更新时间 */ + updateTime?: string; + /** 请求参数 */ + params?: any; +} diff --git a/web/src/views/xskh/classTeacherDiscipline/ClassDisciplineRecord.vue b/web/src/views/xskh/classTeacherDiscipline/ClassDisciplineRecord.vue new file mode 100644 index 00000000..6fb422f5 --- /dev/null +++ b/web/src/views/xskh/classTeacherDiscipline/ClassDisciplineRecord.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/web/src/views/xskh/classTeacherDiscipline/RevokeApplicationApproval.vue b/web/src/views/xskh/classTeacherDiscipline/RevokeApplicationApproval.vue new file mode 100644 index 00000000..53d53204 --- /dev/null +++ b/web/src/views/xskh/classTeacherDiscipline/RevokeApplicationApproval.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/web/src/views/xskh/classTeacherDiscipline/index.vue b/web/src/views/xskh/classTeacherDiscipline/index.vue new file mode 100644 index 00000000..8ae651f1 --- /dev/null +++ b/web/src/views/xskh/classTeacherDiscipline/index.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/web/src/views/xskh/disciplineRecord/DisciplineRecordForm.vue b/web/src/views/xskh/disciplineRecord/DisciplineRecordForm.vue index 5008a38f..0928dd69 100644 --- a/web/src/views/xskh/disciplineRecord/DisciplineRecordForm.vue +++ b/web/src/views/xskh/disciplineRecord/DisciplineRecordForm.vue @@ -467,7 +467,7 @@ const handleStudentChange = (studentId: string | number) => { /** 加载违纪处分类型 */ const loadDisciplineTypes = async () => { try { - const res = await listDisciplineType({ pageNum: 1, pageSize: 1000 }); + const res = await listDisciplineType({ pageNum: 1, pageSize: 1000, status: '0' }); // 只查询生效的数据 disciplineTypeOptions.value = res.data?.rows || res.rows || []; } catch (error) { console.error('加载违纪处分类型失败:', error); diff --git a/web/src/views/xskh/rewardRecord/RewardRecordForm.vue b/web/src/views/xskh/rewardRecord/RewardRecordForm.vue new file mode 100644 index 00000000..259c81ba --- /dev/null +++ b/web/src/views/xskh/rewardRecord/RewardRecordForm.vue @@ -0,0 +1,980 @@ + + + + + diff --git a/web/src/views/xskh/rewardRecord/index.vue b/web/src/views/xskh/rewardRecord/index.vue new file mode 100644 index 00000000..78510d59 --- /dev/null +++ b/web/src/views/xskh/rewardRecord/index.vue @@ -0,0 +1,289 @@ + + + + + diff --git a/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationView.vue b/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationView.vue index 95ec0317..70e1ab62 100644 --- a/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationView.vue +++ b/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationView.vue @@ -8,36 +8,36 @@ -
{{ disciplineRecord.studentNo }}
+
{{ disciplineRecord?.studentNo || '' }}
-
{{ disciplineRecord.studentName }}
+
{{ disciplineRecord?.studentName || '' }}
-
{{ disciplineRecord.collegeName }}
+
{{ disciplineRecord?.collegeName || '' }}
-
{{ disciplineRecord.majorName }}
+
{{ disciplineRecord?.majorName || '' }}
-
{{ disciplineRecord.className }}
+
{{ disciplineRecord?.className || '' }}
-
{{ disciplineRecord.disciplineTypeName }}
+
{{ disciplineRecord?.disciplineTypeName || '' }}
-
{{ disciplineRecord.disciplineDate }}
+
{{ disciplineRecord?.disciplineDate || '' }}
-
{{ disciplineRecord.scoreDeduction }}
+
{{ disciplineRecord?.scoreDeduction || '' }}
- +
@@ -47,7 +47,7 @@ -
{{ disciplineRecord.disciplineReason }}
+
{{ disciplineRecord?.disciplineReason || '' }}
@@ -55,13 +55,13 @@ -
{{ disciplineRecord.disciplineContent }}
+
{{ disciplineRecord?.disciplineContent || '' }}
- +
@@ -102,22 +102,22 @@ -
{{ revokeData.applyTime }}
+
{{ revokeData?.applyTime || '' }}
- +
- +
{{ revokeData.approvalTime }}
- -
{{ revokeData.approvalBy }}
+ +
{{ revokeData.approvalByName }}
@@ -125,12 +125,12 @@ -
{{ revokeData.revokeReason }}
+
{{ revokeData?.revokeReason || '' }}
- +
{{ revokeData.approvalRemark }}
@@ -139,7 +139,7 @@
- +