From 8f8257ec2e515d06518c415b11fcb303ccf3c672 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Tue, 19 Aug 2025 13:24:20 +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 | 148 +++ .../xskh/domain/XskhDisciplineRevoke.java | 87 ++ .../domain/bo/XskhDisciplineRevokeBo.java | 86 ++ .../domain/vo/XskhDisciplineRevokeVo.java | 125 +++ .../mapper/XskhDisciplineRevokeMapper.java | 23 + .../service/IXskhDisciplineRecordService.java | 5 + .../service/IXskhDisciplineRevokeService.java | 69 ++ .../impl/XskhDisciplineRecordServiceImpl.java | 44 + .../impl/XskhDisciplineRevokeServiceImpl.java | 220 ++++ .../mapper/XskhDisciplineRevokeMapper.xml | 39 + .../xskh/disciplineRecord/disciplineRecord.ts | 13 + .../xskh/disciplineRevoke/disciplineRevoke.ts | 110 ++ web/src/api/xskh/disciplineRevoke/types.ts | 187 ++++ .../RevokeApplicationForm.vue | 955 ++++++++++++++++++ .../RevokeApplicationView.vue | 600 +++++++++++ .../views/xskh/xsDisciplineRecord/index.vue | 93 +- 17 files changed, 2753 insertions(+), 61 deletions(-) create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRevokeController.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/XskhDisciplineRevoke.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhDisciplineRevokeBo.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhDisciplineRevokeVo.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRevokeMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRevokeService.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRevokeServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRevokeMapper.xml create mode 100644 web/src/api/xskh/disciplineRevoke/disciplineRevoke.ts create mode 100644 web/src/api/xskh/disciplineRevoke/types.ts create mode 100644 web/src/views/xskh/xsDisciplineRecord/RevokeApplicationForm.vue create mode 100644 web/src/views/xskh/xsDisciplineRecord/RevokeApplicationView.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 73faed9a..3fde1196 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 @@ -110,4 +110,14 @@ public class XskhDisciplineRecordController extends BaseController { public R> getStudentOptions(@RequestParam(required = false) String keyword) { return R.ok(xskhDisciplineRecordService.getStudentOptions(keyword)); } + + /** + * 查询当前登录学生的违纪处分记录列表 + */ + @SaCheckPermission("disciplineRecord:student:list") + @GetMapping("/my") + public TableDataInfo getMyDisciplineRecords(XskhDisciplineRecordBo bo, + PageQuery pageQuery) { + return xskhDisciplineRecordService.queryMyPageList(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 new file mode 100644 index 00000000..886f18db --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/controller/XskhDisciplineRevokeController.java @@ -0,0 +1,148 @@ +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.XskhDisciplineRevokeVo; +import org.dromara.xskh.domain.bo.XskhDisciplineRevokeBo; +import org.dromara.xskh.service.IXskhDisciplineRevokeService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 违纪处分撤销申请审批 + * + * @author ruoyi + * @date 2025-01-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/disciplineRevoke/disciplineRevoke") +public class XskhDisciplineRevokeController extends BaseController { + + private final IXskhDisciplineRevokeService xskhDisciplineRevokeService; + + /** + * 查询违纪处分撤销申请审批列表 + */ + @SaCheckPermission("disciplineRevoke:disciplineRevoke:list") + @GetMapping("/list") + public TableDataInfo list(XskhDisciplineRevokeBo bo, PageQuery pageQuery) { + return xskhDisciplineRevokeService.queryPageList(bo, pageQuery); + } + + /** + * 导出违纪处分撤销申请审批列表 + */ + @SaCheckPermission("disciplineRevoke:disciplineRevoke:export") + @Log(title = "违纪处分撤销申请审批", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XskhDisciplineRevokeBo bo, HttpServletResponse response) { + List list = xskhDisciplineRevokeService.queryList(bo); + ExcelUtil.exportExcel(list, "违纪处分撤销申请审批", XskhDisciplineRevokeVo.class, response); + } + + /** + * 获取违纪处分撤销申请审批详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("disciplineRevoke:disciplineRevoke:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { + return R.ok(xskhDisciplineRevokeService.queryById(id)); + } + + /** + * 新增违纪处分撤销申请审批 + */ + @SaCheckPermission("disciplineRevoke:disciplineRevoke:add") + @Log(title = "违纪处分撤销申请审批", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XskhDisciplineRevokeBo bo) { + return toAjax(xskhDisciplineRevokeService.insertByBo(bo)); + } + + /** + * 修改违纪处分撤销申请审批 + */ + @SaCheckPermission("disciplineRevoke:disciplineRevoke:edit") + @Log(title = "违纪处分撤销申请审批", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XskhDisciplineRevokeBo bo) { + return toAjax(xskhDisciplineRevokeService.updateByBo(bo)); + } + + /** + * 删除违纪处分撤销申请审批 + * + * @param ids 主键串 + */ + @SaCheckPermission("disciplineRevoke:disciplineRevoke:remove") + @Log(title = "违纪处分撤销申请审批", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { + return toAjax(xskhDisciplineRevokeService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 根据违纪记录ID查询撤销申请记录 + * + * @param disciplineRecordId 违纪记录ID + */ + @SaCheckPermission("disciplineRevoke:student:query") + @GetMapping("/byDisciplineRecord/{disciplineRecordId}") + public R getByDisciplineRecordId( + @NotNull(message = "违纪记录ID不能为空") @PathVariable Long disciplineRecordId) { + return R.ok(xskhDisciplineRevokeService.queryByDisciplineRecordId(disciplineRecordId)); + } + + /** + * 查询当前登录学生的撤销申请列表 + */ + @SaCheckPermission("disciplineRevoke:student:list") + @GetMapping("/my") + public TableDataInfo getMyRevokeApplications(XskhDisciplineRevokeBo bo, + PageQuery pageQuery) { + return xskhDisciplineRevokeService.queryMyPageList(bo, pageQuery); + } + + /** + * 学生申请撤销违纪记录 + */ + @SaCheckPermission("disciplineRevoke:student:apply") + @Log(title = "学生申请撤销违纪记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/apply") + public R applyRevoke(@Validated(AddGroup.class) @RequestBody XskhDisciplineRevokeBo bo) { + return toAjax(xskhDisciplineRevokeService.applyRevoke(bo)); + } + + /** + * 审核撤销申请 + */ + @SaCheckPermission("disciplineRevoke:disciplineRevoke:approve") + @Log(title = "审核撤销申请", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/approve") + public R approveRevoke(@Validated(EditGroup.class) @RequestBody XskhDisciplineRevokeBo bo) { + return toAjax(xskhDisciplineRevokeService.approveRevoke(bo)); + } + +} diff --git a/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/XskhDisciplineRevoke.java b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/XskhDisciplineRevoke.java new file mode 100644 index 00000000..7a010b6e --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/XskhDisciplineRevoke.java @@ -0,0 +1,87 @@ +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.util.Date; + +/** + * 违纪处分撤销申请审批对象 xskh_discipline_revoke + * + * @author ruoyi + * @date 2025-01-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xskh_discipline_revoke") +public class XskhDisciplineRevoke extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 违纪记录ID + */ + private Long disciplineRecordId; + + /** + * 学生ID + */ + private Long studentId; + + /** + * 学生姓名 + */ + private String studentName; + + /** + * 撤销申请原因 + */ + private String revokeReason; + + /** + * 撤销证明材料,附件的oss_id,多个用逗号分隔 + */ + private String revokeEvidence; + + /** + * 申请时间 + */ + private Date applyTime; + + /** + * 状态(1-待审核 2-审核通过 3-审核拒绝) + */ + private String status; + + /** + * 审核人ID + */ + private Long approvalBy; + + /** + * 审核时间 + */ + private Date approvalTime; + + /** + * 审核备注 + */ + private String approvalRemark; + + /** + * 删除标志(0-未删除 1-已删除) + */ + @TableLogic(value = "0", delval = "1") + private Long deleted; + +} 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 new file mode 100644 index 00000000..fe654ec2 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/bo/XskhDisciplineRevokeBo.java @@ -0,0 +1,86 @@ +package org.dromara.xskh.domain.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.xskh.domain.XskhDisciplineRevoke; + +import java.util.Date; + +/** + * 违纪处分撤销申请审批业务对象 xskh_discipline_revoke + * + * @author ruoyi + * @date 2025-01-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XskhDisciplineRevoke.class, reverseConvertGenerate = false) +public class XskhDisciplineRevokeBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 违纪记录ID + */ + @NotNull(message = "违纪记录ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long disciplineRecordId; + + /** + * 学生ID + */ + private Long studentId; + + /** + * 学生姓名 + */ + private String studentName; + + /** + * 撤销申请原因 + */ + @NotBlank(message = "撤销申请原因不能为空", groups = { AddGroup.class, EditGroup.class }) + private String revokeReason; + + /** + * 撤销证明材料,附件的oss_id,多个用逗号分隔 + */ + private String revokeEvidence; + + /** + * 申请时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date applyTime; + + /** + * 状态(1-待审核 2-审核通过 3-审核拒绝) + */ + private String status; + + /** + * 审核人ID + */ + private Long approvalBy; + + /** + * 审核时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date approvalTime; + + /** + * 审核备注 + */ + private String approvalRemark; + +} 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 new file mode 100644 index 00000000..a9ca40ad --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhDisciplineRevokeVo.java @@ -0,0 +1,125 @@ +package org.dromara.xskh.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.xskh.domain.XskhDisciplineRevoke; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 违纪处分撤销申请审批视图对象 xskh_discipline_revoke + * + * @author ruoyi + * @date 2025-01-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XskhDisciplineRevoke.class) +public class XskhDisciplineRevokeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 违纪记录ID + */ + @ExcelProperty(value = "违纪记录ID") + private Long disciplineRecordId; + + /** + * 学生ID + */ + @ExcelProperty(value = "学生ID") + private Long studentId; + + /** + * 学生姓名 + */ + @ExcelProperty(value = "学生姓名") + private String studentName; + + /** + * 撤销申请原因 + */ + @ExcelProperty(value = "撤销申请原因") + private String revokeReason; + + /** + * 撤销证明材料,附件的oss_id,多个用逗号分隔 + */ + @ExcelProperty(value = "撤销证明材料") + private String revokeEvidence; + + /** + * 申请时间 + */ + @ExcelProperty(value = "申请时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date applyTime; + + /** + * 状态(1-待审核 2-审核通过 3-审核拒绝) + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "student_revoke_status") + private String status; + + /** + * 审核人ID + */ + @ExcelProperty(value = "审核人ID") + private Long approvalBy; + + /** + * 审核时间 + */ + @ExcelProperty(value = "审核时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date approvalTime; + + /** + * 审核备注 + */ + @ExcelProperty(value = "审核备注") + private String approvalRemark; + + /** + * 创建者 + */ + @ExcelProperty(value = "创建者") + private Long createBy; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新者 + */ + @ExcelProperty(value = "更新者") + private Long updateBy; + + /** + * 更新时间 + */ + @ExcelProperty(value = "更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + +} 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 new file mode 100644 index 00000000..94077c16 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/mapper/XskhDisciplineRevokeMapper.java @@ -0,0 +1,23 @@ +package org.dromara.xskh.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.xskh.domain.XskhDisciplineRevoke; +import org.dromara.xskh.domain.vo.XskhDisciplineRevokeVo; + +/** + * 违纪处分撤销申请审批Mapper接口 + * + * @author ruoyi + * @date 2025-01-03 + */ +public interface XskhDisciplineRevokeMapper extends BaseMapperPlus { + + /** + * 根据违纪记录ID查询撤销申请记录 + * + * @param disciplineRecordId 违纪记录ID + * @return 撤销申请记录 + */ + XskhDisciplineRevokeVo selectByDisciplineRecordId(Long disciplineRecordId); + +} 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 41ee1a3c..07ca7d34 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 @@ -51,4 +51,9 @@ public interface IXskhDisciplineRecordService { * 查询学生选项列表(用于下拉框) */ List getStudentOptions(String keyword); + + /** + * 查询当前登录学生的违纪处分记录列表 + */ + TableDataInfo queryMyPageList(XskhDisciplineRecordBo bo, PageQuery pageQuery); } 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 new file mode 100644 index 00000000..4d79cf44 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/IXskhDisciplineRevokeService.java @@ -0,0 +1,69 @@ +package org.dromara.xskh.service; + +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.xskh.domain.bo.XskhDisciplineRevokeBo; +import org.dromara.xskh.domain.vo.XskhDisciplineRevokeVo; + +import java.util.Collection; +import java.util.List; + +/** + * 违纪处分撤销申请审批Service接口 + * + * @author ruoyi + * @date 2025-01-03 + */ +public interface IXskhDisciplineRevokeService { + + /** + * 查询违纪处分撤销申请审批 + */ + XskhDisciplineRevokeVo queryById(Long id); + + /** + * 查询违纪处分撤销申请审批列表 + */ + TableDataInfo queryPageList(XskhDisciplineRevokeBo bo, PageQuery pageQuery); + + /** + * 查询违纪处分撤销申请审批列表 + */ + List queryList(XskhDisciplineRevokeBo bo); + + /** + * 新增违纪处分撤销申请审批 + */ + Boolean insertByBo(XskhDisciplineRevokeBo bo); + + /** + * 修改违纪处分撤销申请审批 + */ + Boolean updateByBo(XskhDisciplineRevokeBo bo); + + /** + * 校验并批量删除违纪处分撤销申请审批信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据违纪记录ID查询撤销申请记录 + */ + XskhDisciplineRevokeVo queryByDisciplineRecordId(Long disciplineRecordId); + + /** + * 查询当前登录学生的撤销申请列表 + */ + TableDataInfo queryMyPageList(XskhDisciplineRevokeBo bo, PageQuery pageQuery); + + /** + * 学生申请撤销违纪记录 + */ + Boolean applyRevoke(XskhDisciplineRevokeBo bo); + + /** + * 审核撤销申请 + */ + Boolean approveRevoke(XskhDisciplineRevokeBo bo); + +} 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 7d20bf76..69248e07 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 @@ -9,6 +9,7 @@ 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.dromara.common.satoken.utils.LoginHelper; import org.dromara.xskh.domain.XskhDisciplineRecord; import org.dromara.xskh.domain.bo.XskhDisciplineRecordBo; import org.dromara.xskh.domain.vo.XskhDisciplineRecordVo; @@ -143,4 +144,47 @@ public class XskhDisciplineRecordServiceImpl implements IXskhDisciplineRecordSer public List getStudentOptions(String keyword) { return baseMapper.selectStudentOptions(keyword); } + + /** + * 查询当前登录学生的违纪处分记录列表 + */ + @Override + public TableDataInfo queryMyPageList(XskhDisciplineRecordBo bo, PageQuery pageQuery) { + // 获取当前登录用户的学生ID + Long currentUserId = LoginHelper.getUserId(); + + // 构建查询条件,强制只查询当前学生的记录 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + + // 通过当前登录用户ID查询对应的学生记录,这里需要根据实际情况调整查询逻辑 + // 假设用户表中的ID就是学生ID,或者需要通过其他方式获取学生ID + lqw.eq(XskhDisciplineRecord::getStudentId, currentUserId); + + // 可选的其他查询条件(保持原有的查询逻辑,但学生ID已固定) + lqw.like(StringUtils.isNotBlank(bo.getStudentNo()), XskhDisciplineRecord::getStudentNo, bo.getStudentNo()); + lqw.like(StringUtils.isNotBlank(bo.getStudentName()), XskhDisciplineRecord::getStudentName, + bo.getStudentName()); + lqw.eq(bo.getCollegeId() != null, XskhDisciplineRecord::getCollegeId, bo.getCollegeId()); + lqw.like(StringUtils.isNotBlank(bo.getCollegeName()), XskhDisciplineRecord::getCollegeName, + bo.getCollegeName()); + lqw.eq(bo.getMajorId() != null, XskhDisciplineRecord::getMajorId, bo.getMajorId()); + lqw.like(StringUtils.isNotBlank(bo.getMajorName()), XskhDisciplineRecord::getMajorName, bo.getMajorName()); + lqw.eq(bo.getClassId() != null, XskhDisciplineRecord::getClassId, bo.getClassId()); + lqw.like(StringUtils.isNotBlank(bo.getClassName()), XskhDisciplineRecord::getClassName, bo.getClassName()); + lqw.eq(bo.getDisciplineTypeId() != null, XskhDisciplineRecord::getDisciplineTypeId, bo.getDisciplineTypeId()); + lqw.like(StringUtils.isNotBlank(bo.getDisciplineTypeName()), XskhDisciplineRecord::getDisciplineTypeName, + bo.getDisciplineTypeName()); + lqw.eq(bo.getDisciplineDate() != null, XskhDisciplineRecord::getDisciplineDate, bo.getDisciplineDate()); + lqw.like(StringUtils.isNotBlank(bo.getDisciplineReason()), XskhDisciplineRecord::getDisciplineReason, + bo.getDisciplineReason()); + lqw.like(StringUtils.isNotBlank(bo.getDisciplineContent()), XskhDisciplineRecord::getDisciplineContent, + bo.getDisciplineContent()); + lqw.eq(bo.getScoreDeduction() != null, XskhDisciplineRecord::getScoreDeduction, bo.getScoreDeduction()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XskhDisciplineRecord::getStatus, bo.getStatus()); + + lqw.orderByDesc(XskhDisciplineRecord::getCreateTime); + + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } } 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 new file mode 100644 index 00000000..2df9ad89 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/service/impl/XskhDisciplineRevokeServiceImpl.java @@ -0,0 +1,220 @@ +package org.dromara.xskh.service.impl; + +import cn.hutool.core.bean.BeanUtil; +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.dromara.common.satoken.utils.LoginHelper; +import org.dromara.xskh.domain.XskhDisciplineRevoke; +import org.dromara.xskh.domain.bo.XskhDisciplineRevokeBo; +import org.dromara.xskh.domain.vo.XskhDisciplineRevokeVo; +import org.dromara.xskh.domain.vo.XskhDisciplineRecordVo; +import org.dromara.xskh.mapper.XskhDisciplineRevokeMapper; +import org.dromara.xskh.service.IXskhDisciplineRevokeService; +import org.dromara.xskh.service.IXskhDisciplineRecordService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 违纪处分撤销申请审批Service业务层处理 + * + * @author ruoyi + * @date 2025-01-03 + */ +@RequiredArgsConstructor +@Service +public class XskhDisciplineRevokeServiceImpl implements IXskhDisciplineRevokeService { + + private final XskhDisciplineRevokeMapper baseMapper; + private final IXskhDisciplineRecordService disciplineRecordService; + + /** + * 查询违纪处分撤销申请审批 + */ + @Override + public XskhDisciplineRevokeVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 查询违纪处分撤销申请审批列表 + */ + @Override + public TableDataInfo queryPageList(XskhDisciplineRevokeBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询违纪处分撤销申请审批列表 + */ + @Override + public List queryList(XskhDisciplineRevokeBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XskhDisciplineRevokeBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getDisciplineRecordId() != null, XskhDisciplineRevoke::getDisciplineRecordId, + bo.getDisciplineRecordId()); + lqw.eq(bo.getStudentId() != null, XskhDisciplineRevoke::getStudentId, bo.getStudentId()); + lqw.like(StringUtils.isNotBlank(bo.getStudentName()), XskhDisciplineRevoke::getStudentName, + bo.getStudentName()); + lqw.like(StringUtils.isNotBlank(bo.getRevokeReason()), XskhDisciplineRevoke::getRevokeReason, + bo.getRevokeReason()); + lqw.eq(bo.getApplyTime() != null, XskhDisciplineRevoke::getApplyTime, bo.getApplyTime()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XskhDisciplineRevoke::getStatus, bo.getStatus()); + lqw.eq(bo.getApprovalBy() != null, XskhDisciplineRevoke::getApprovalBy, bo.getApprovalBy()); + lqw.eq(bo.getApprovalTime() != null, XskhDisciplineRevoke::getApprovalTime, bo.getApprovalTime()); + lqw.like(StringUtils.isNotBlank(bo.getApprovalRemark()), XskhDisciplineRevoke::getApprovalRemark, + bo.getApprovalRemark()); + lqw.orderByDesc(XskhDisciplineRevoke::getCreateTime); + return lqw; + } + + /** + * 新增违纪处分撤销申请审批 + */ + @Override + public Boolean insertByBo(XskhDisciplineRevokeBo bo) { + XskhDisciplineRevoke add = MapstructUtils.convert(bo, XskhDisciplineRevoke.class); + validEntityBeforeSave(add); + + // 设置默认值 + if (StringUtils.isBlank(add.getStatus())) { + add.setStatus("1"); // 默认待审核 + } + if (add.getApplyTime() == null) { + add.setApplyTime(new Date()); + } + + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改违纪处分撤销申请审批 + */ + @Override + public Boolean updateByBo(XskhDisciplineRevokeBo bo) { + XskhDisciplineRevoke update = MapstructUtils.convert(bo, XskhDisciplineRevoke.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(XskhDisciplineRevoke entity) { + // TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除违纪处分撤销申请审批 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * 根据违纪记录ID查询撤销申请记录 + */ + @Override + public XskhDisciplineRevokeVo queryByDisciplineRecordId(Long disciplineRecordId) { + return baseMapper.selectByDisciplineRecordId(disciplineRecordId); + } + + /** + * 查询当前登录学生的撤销申请列表 + */ + @Override + public TableDataInfo queryMyPageList(XskhDisciplineRevokeBo bo, PageQuery pageQuery) { + // 获取当前登录用户的学生ID + Long currentUserId = LoginHelper.getUserId(); + + // 构建查询条件,强制只查询当前学生的记录 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(XskhDisciplineRevoke::getStudentId, currentUserId); + + // 可选的其他查询条件 + lqw.eq(bo.getDisciplineRecordId() != null, XskhDisciplineRevoke::getDisciplineRecordId, + bo.getDisciplineRecordId()); + lqw.like(StringUtils.isNotBlank(bo.getRevokeReason()), XskhDisciplineRevoke::getRevokeReason, + bo.getRevokeReason()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), XskhDisciplineRevoke::getStatus, bo.getStatus()); + + lqw.orderByDesc(XskhDisciplineRevoke::getCreateTime); + + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 学生申请撤销违纪记录 + */ + @Override + public Boolean applyRevoke(XskhDisciplineRevokeBo bo) { + // 获取当前登录用户的学生ID + Long currentUserId = LoginHelper.getUserId(); + + // 检查该违纪记录是否已经有撤销申请 + XskhDisciplineRevokeVo existingRevoke = queryByDisciplineRecordId(bo.getDisciplineRecordId()); + if (existingRevoke != null) { + throw new RuntimeException("该违纪记录已有撤销申请,不能重复申请"); + } + + // 查询违纪记录,获取学生信息 + XskhDisciplineRecordVo disciplineRecord = disciplineRecordService.queryById(bo.getDisciplineRecordId()); + if (disciplineRecord == null) { + throw new RuntimeException("违纪记录不存在"); + } + + // 验证当前用户是否有权限撤销该记录(检查是否是该记录的学生) + if (!currentUserId.equals(disciplineRecord.getStudentId())) { + throw new RuntimeException("您只能申请撤销自己的违纪记录"); + } + + // 设置学生信息 + bo.setStudentId(currentUserId); + bo.setStudentName(disciplineRecord.getStudentName()); + bo.setDisciplineRecordId(bo.getDisciplineRecordId()); + bo.setStatus("1"); // 待审核 + bo.setApplyTime(new Date()); + + return insertByBo(bo); + } + + /** + * 审核撤销申请 + */ + @Override + public Boolean approveRevoke(XskhDisciplineRevokeBo bo) { + // 获取当前登录用户ID作为审核人 + Long currentUserId = LoginHelper.getUserId(); + + bo.setApprovalBy(currentUserId); + bo.setApprovalTime(new Date()); + + return updateByBo(bo); + } + +} 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 new file mode 100644 index 00000000..3c527ec7 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/XskhDisciplineRevokeMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, discipline_record_id, student_id, student_name, revoke_reason, revoke_evidence, apply_time, status, approval_by, approval_time, approval_remark, create_by, create_time, create_dept, update_by, update_time, deleted, tenant_id from xskh_discipline_revoke + + + + + diff --git a/web/src/api/xskh/disciplineRecord/disciplineRecord.ts b/web/src/api/xskh/disciplineRecord/disciplineRecord.ts index 6d5c2332..09193abf 100644 --- a/web/src/api/xskh/disciplineRecord/disciplineRecord.ts +++ b/web/src/api/xskh/disciplineRecord/disciplineRecord.ts @@ -73,3 +73,16 @@ export const getStudentOptions = (keyword?: string): AxiosPromise => { + return request({ + url: '/disciplineRecord/disciplineRecord/my', + method: 'get', + params: query + }); +}; diff --git a/web/src/api/xskh/disciplineRevoke/disciplineRevoke.ts b/web/src/api/xskh/disciplineRevoke/disciplineRevoke.ts new file mode 100644 index 00000000..b545c849 --- /dev/null +++ b/web/src/api/xskh/disciplineRevoke/disciplineRevoke.ts @@ -0,0 +1,110 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { DisciplineRevokeVO, DisciplineRevokeForm, DisciplineRevokeQuery } from './types'; + +/** + * 查询违纪处分撤销申请审批列表 + * @param query + * @returns {*} + */ +export const listDisciplineRevoke = (query?: DisciplineRevokeQuery): AxiosPromise => { + return request({ + url: '/disciplineRevoke/disciplineRevoke/list', + method: 'get', + params: query + }); +}; + +/** + * 查询违纪处分撤销申请审批详细 + * @param id + */ +export const getDisciplineRevoke = (id: string | number): AxiosPromise => { + return request({ + url: '/disciplineRevoke/disciplineRevoke/' + id, + method: 'get' + }); +}; + +/** + * 新增违纪处分撤销申请审批 + * @param data + */ +export const addDisciplineRevoke = (data: DisciplineRevokeForm) => { + return request({ + url: '/disciplineRevoke/disciplineRevoke', + method: 'post', + data: data + }); +}; + +/** + * 修改违纪处分撤销申请审批 + * @param data + */ +export const updateDisciplineRevoke = (data: DisciplineRevokeForm) => { + return request({ + url: '/disciplineRevoke/disciplineRevoke', + method: 'put', + data: data + }); +}; + +/** + * 删除违纪处分撤销申请审批 + * @param id + */ +export const delDisciplineRevoke = (id: string | number | Array) => { + return request({ + url: '/disciplineRevoke/disciplineRevoke/' + id, + method: 'delete' + }); +}; + +/** + * 根据违纪记录ID查询撤销申请记录 + * @param disciplineRecordId 违纪记录ID + */ +export const getDisciplineRevokeByRecordId = (disciplineRecordId: string | number): AxiosPromise => { + return request({ + url: '/disciplineRevoke/disciplineRevoke/byDisciplineRecord/' + disciplineRecordId, + method: 'get' + }); +}; + +/** + * 查询当前登录学生的撤销申请列表 + * @param query + * @returns {*} + */ +export const listMyDisciplineRevoke = (query?: DisciplineRevokeQuery): AxiosPromise => { + return request({ + url: '/disciplineRevoke/disciplineRevoke/my', + method: 'get', + params: query + }); +}; + +/** + * 学生申请撤销违纪记录 + * @param data + */ +export const applyDisciplineRevoke = (data: DisciplineRevokeForm) => { + return request({ + url: '/disciplineRevoke/disciplineRevoke/apply', + method: 'post', + data: data + }); +}; + +/** + * 审核撤销申请 + * @param data + */ +export const approveDisciplineRevoke = (data: DisciplineRevokeForm) => { + return request({ + url: '/disciplineRevoke/disciplineRevoke/approve', + method: 'put', + data: data + }); +}; diff --git a/web/src/api/xskh/disciplineRevoke/types.ts b/web/src/api/xskh/disciplineRevoke/types.ts new file mode 100644 index 00000000..716f0e2b --- /dev/null +++ b/web/src/api/xskh/disciplineRevoke/types.ts @@ -0,0 +1,187 @@ +import { PageQuery } from '@/types/base'; + +export interface DisciplineRevokeVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 违纪记录ID + */ + disciplineRecordId: string | number; + + /** + * 学生ID + */ + studentId: string | number; + + /** + * 学生姓名 + */ + studentName: string; + + /** + * 撤销申请原因 + */ + revokeReason: string; + + /** + * 撤销证明材料,附件的oss_id,多个用逗号分隔 + */ + revokeEvidence: string; + + /** + * 申请时间 + */ + applyTime: string; + + /** + * 状态(1-待审核 2-审核通过 3-审核拒绝) + */ + status: string; + + /** + * 审核人ID + */ + approvalBy: string | number; + + /** + * 审核时间 + */ + approvalTime: string; + + /** + * 审核备注 + */ + approvalRemark: string; + + /** + * 创建者 + */ + createBy: string | number; + + /** + * 创建时间 + */ + createTime: string; + + /** + * 更新者 + */ + updateBy: string | number; + + /** + * 更新时间 + */ + updateTime: string; +} + +export interface DisciplineRevokeForm { + /** + * 主键ID + */ + id?: string | number; + + /** + * 违纪记录ID + */ + disciplineRecordId?: string | number; + + /** + * 学生ID + */ + studentId?: string | number; + + /** + * 学生姓名 + */ + studentName?: string; + + /** + * 撤销申请原因 + */ + revokeReason?: string; + + /** + * 撤销证明材料,附件的oss_id,多个用逗号分隔 + */ + revokeEvidence?: string; + + /** + * 申请时间 + */ + applyTime?: string; + + /** + * 状态(1-待审核 2-审核通过 3-审核拒绝) + */ + status?: string; + + /** + * 审核人ID + */ + approvalBy?: string | number; + + /** + * 审核时间 + */ + approvalTime?: string; + + /** + * 审核备注 + */ + approvalRemark?: string; +} + +export interface DisciplineRevokeQuery extends PageQuery { + /** + * 违纪记录ID + */ + disciplineRecordId?: string | number; + + /** + * 学生ID + */ + studentId?: string | number; + + /** + * 学生姓名 + */ + studentName?: string; + + /** + * 撤销申请原因 + */ + revokeReason?: string; + + /** + * 申请时间 + */ + applyTime?: string; + + /** + * 状态(1-待审核 2-审核通过 3-审核拒绝) + */ + status?: string; + + /** + * 审核人ID + */ + approvalBy?: string | number; + + /** + * 审核时间 + */ + approvalTime?: string; + + /** + * 审核备注 + */ + approvalRemark?: string; + + /** + * 其他参数 + */ + params?: any; +} diff --git a/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationForm.vue b/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationForm.vue new file mode 100644 index 00000000..1dc646a3 --- /dev/null +++ b/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationForm.vue @@ -0,0 +1,955 @@ + + + + + diff --git a/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationView.vue b/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationView.vue new file mode 100644 index 00000000..95ec0317 --- /dev/null +++ b/web/src/views/xskh/xsDisciplineRecord/RevokeApplicationView.vue @@ -0,0 +1,600 @@ + + + + + diff --git a/web/src/views/xskh/xsDisciplineRecord/index.vue b/web/src/views/xskh/xsDisciplineRecord/index.vue index 507bed9e..e02fd33e 100644 --- a/web/src/views/xskh/xsDisciplineRecord/index.vue +++ b/web/src/views/xskh/xsDisciplineRecord/index.vue @@ -39,36 +39,6 @@ @@ -92,7 +62,7 @@ - + @@ -130,18 +101,26 @@ + + + + + +