From 166c8503564fe854fb456e9453d48e85129362cb Mon Sep 17 00:00:00 2001 From: weizhong Date: Wed, 20 Aug 2025 16:04:40 +0800 Subject: [PATCH] =?UTF-8?q?=E2=80=9C=E7=8F=AD=E4=B8=BB=E4=BB=BB0820?= =?UTF-8?q?=E8=80=83=E6=A0=B8=E6=95=B0=E6=8D=AE=E6=9B=B4=E6=96=B0=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssessmentApprovalController.java | 146 ++++ .../TeacherAssessmentController.java | 12 + .../AssessmentApprovalIndicatorSubmitBo.java | 35 + .../domain/bo/AssessmentApprovalQueryBo.java | 56 ++ ...AssessmentApprovalSpecialWorkSubmitBo.java | 35 + .../domain/bo/AssessmentApprovalSubmitBo.java | 70 ++ .../bzrkh/domain/bo/BatchApprovalBo.java | 22 + .../domain/vo/AssessmentApprovalDetailVo.java | 111 +++ .../vo/AssessmentApprovalIndicatorVo.java | 82 ++ .../vo/AssessmentApprovalSpecialWorkVo.java | 62 ++ .../bzrkh/domain/vo/AssessmentApprovalVo.java | 163 ++++ .../domain/vo/AssessmentIndicatorScoreVo.java | 5 + .../bzrkh/domain/vo/BmzrAssessmentPlanVo.java | 17 + .../bzrkh/domain/vo/SchemeOptionVo.java | 39 + .../mapper/AssessmentApprovalMapper.java | 133 ++++ .../service/IAssessmentApprovalService.java | 82 ++ .../service/ITeacherAssessmentService.java | 10 + .../impl/AssessmentApprovalServiceImpl.java | 213 ++++++ .../impl/TeacherAssessmentServiceImpl.java | 36 + .../mapper/bzrkh/AssessmentApprovalMapper.xml | 293 +++++++ .../mapper/bzrkh/TeacherAssessmentMapper.xml | 15 +- .../ruoyi-bzrkh/班主任考核审核权限配置.sql | 63 ++ .../班主任考核撤销功能权限配置.sql | 47 ++ docs/开发文档/API/API文档总览.md | 14 - web/src/api/bzrkh/assessmentApproval/index.ts | 108 +++ web/src/api/bzrkh/assessmentApproval/types.ts | 220 ++++++ web/src/api/bzrkh/teacherAssessment/index.ts | 18 +- web/src/api/bzrkh/teacherAssessment/types.ts | 15 + .../assessmentApproval/approvalDialog.vue | 720 ++++++++++++++++++ .../views/bzrkh/assessmentApproval/index.vue | 273 +++++++ .../bzrkh/assessmentApproval/viewDialog.vue | 577 ++++++++++++++ .../views/bzrkh/teacherAssessment/index.vue | 131 +++- .../bzrkh/teacherAssessment/submitDialog.vue | 303 ++++++-- 33 files changed, 3999 insertions(+), 127 deletions(-) create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/controller/AssessmentApprovalController.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalIndicatorSubmitBo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalQueryBo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalSpecialWorkSubmitBo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalSubmitBo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/BatchApprovalBo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalDetailVo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalIndicatorVo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalSpecialWorkVo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalVo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/SchemeOptionVo.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/mapper/AssessmentApprovalMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/IAssessmentApprovalService.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/impl/AssessmentApprovalServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/src/main/resources/mapper/bzrkh/AssessmentApprovalMapper.xml create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/班主任考核审核权限配置.sql create mode 100644 backend/ruoyi-modules/ruoyi-bzrkh/班主任考核撤销功能权限配置.sql create mode 100644 web/src/api/bzrkh/assessmentApproval/index.ts create mode 100644 web/src/api/bzrkh/assessmentApproval/types.ts create mode 100644 web/src/views/bzrkh/assessmentApproval/approvalDialog.vue create mode 100644 web/src/views/bzrkh/assessmentApproval/index.vue create mode 100644 web/src/views/bzrkh/assessmentApproval/viewDialog.vue diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/controller/AssessmentApprovalController.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/controller/AssessmentApprovalController.java new file mode 100644 index 00000000..c0212d60 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/controller/AssessmentApprovalController.java @@ -0,0 +1,146 @@ +package org.dromara.bzrkh.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +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.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.log.enums.BusinessType; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalVo; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalDetailVo; +import org.dromara.bzrkh.domain.vo.SchemeOptionVo; +import org.dromara.bzrkh.domain.bo.AssessmentApprovalQueryBo; +import org.dromara.bzrkh.domain.bo.AssessmentApprovalSubmitBo; +import org.dromara.bzrkh.domain.bo.BatchApprovalBo; +import org.dromara.bzrkh.service.IAssessmentApprovalService; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.excel.utils.ExcelUtil; +import jakarta.servlet.http.HttpServletResponse; + +/** + * 班主任考核审核Controller + * + * @author ruoyi + * @date 2025-01-28 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/bzrkh/assessmentApproval") +public class AssessmentApprovalController extends BaseController { + + private final IAssessmentApprovalService assessmentApprovalService; + + /** + * 查询班主任考核审核列表 + */ + @SaCheckPermission("bzrkh:assessmentApproval:list") + @GetMapping("/list") + public TableDataInfo list(AssessmentApprovalQueryBo bo, PageQuery pageQuery) { + return assessmentApprovalService.queryPageList(bo, pageQuery); + } + + /** + * 获取考核审核详情 + */ + @SaCheckPermission("bzrkh:assessmentApproval:query") + @GetMapping("/detail") + public R getApprovalDetail( + @RequestParam @NotNull(message = "计划ID不能为空") Long planId, + @RequestParam @NotNull(message = "班级ID不能为空") Long classId, + @RequestParam @NotNull(message = "被评价用户ID不能为空") Long evaluatedUserId) { + AssessmentApprovalDetailVo detail = assessmentApprovalService.getApprovalDetail(planId, classId, evaluatedUserId); + return R.ok(detail); + } + + /** + * 提交考核审核 + */ + @SaCheckPermission("bzrkh:assessmentApproval:approve") + @Log(title = "班主任考核审核", businessType = BusinessType.UPDATE) + @PostMapping("/submit") + public R submitApproval(@RequestBody @Validated AssessmentApprovalSubmitBo bo) { + Long approverUserId = LoginHelper.getUserId(); + boolean result = assessmentApprovalService.submitApproval(bo, approverUserId); + return toAjax(result); + } + + /** + * 批量审核通过 + */ + @SaCheckPermission("bzrkh:assessmentApproval:approve") + @Log(title = "班主任考核审核", businessType = BusinessType.UPDATE) + @PostMapping("/batchApprove") + public R batchApprove(@RequestBody BatchApprovalBo bo) { + Long approverUserId = LoginHelper.getUserId(); + boolean result = assessmentApprovalService.batchApprove(bo.getIds(), approverUserId); + return toAjax(result); + } + + /** + * 批量审核拒绝 + */ + @SaCheckPermission("bzrkh:assessmentApproval:approve") + @Log(title = "班主任考核审核", businessType = BusinessType.UPDATE) + @PostMapping("/batchReject") + public R batchReject(@RequestBody BatchRejectBo bo) { + Long approverUserId = LoginHelper.getUserId(); + boolean result = assessmentApprovalService.batchReject(bo.getIds(), bo.getRejectReason(), approverUserId); + return toAjax(result); + } + + /** + * 获取考核方案下拉选项 + */ + @SaCheckPermission("bzrkh:assessmentApproval:list") + @GetMapping("/schemeOptions") + public R> getSchemeOptions() { + List options = assessmentApprovalService.getSchemeOptions(); + return R.ok(options); + } + + /** + * 导出班主任考核审核数据 + */ + @SaCheckPermission("bzrkh:assessmentApproval:export") + @Log(title = "班主任考核审核", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(AssessmentApprovalQueryBo bo, HttpServletResponse response) { + List list = assessmentApprovalService.queryList(bo); + ExcelUtil.exportExcel(list, "班主任考核审核数据", AssessmentApprovalVo.class, response); + } + + /** + * 批量拒绝请求对象 + */ + public static class BatchRejectBo { + @NotEmpty(message = "审核ID列表不能为空") + private List ids; + + @NotBlank(message = "拒绝原因不能为空") + private String rejectReason; + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + public String getRejectReason() { + return rejectReason; + } + + public void setRejectReason(String rejectReason) { + this.rejectReason = rejectReason; + } + } +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/controller/TeacherAssessmentController.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/controller/TeacherAssessmentController.java index ae28a3a5..7dd7ebbb 100644 --- a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/controller/TeacherAssessmentController.java +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/controller/TeacherAssessmentController.java @@ -73,6 +73,18 @@ public class TeacherAssessmentController extends BaseController { return toAjax(result); } + /** + * 撤销考核提交 + */ + @SaCheckPermission("bzrkh:teacherAssessment:withdraw") + @Log(title = "班主任考核管理", businessType = BusinessType.UPDATE) + @PostMapping("/withdraw") + public R withdrawAssessment(@RequestBody TeacherAssessmentSubmitRequest request) { + Long teacherId = LoginHelper.getUserId(); + boolean result = teacherAssessmentService.withdrawAssessment(request.getPlanId(), request.getClassId(), teacherId); + return toAjax(result); + } + /** * 查看考核详情 */ diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalIndicatorSubmitBo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalIndicatorSubmitBo.java new file mode 100644 index 00000000..1a9eb756 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalIndicatorSubmitBo.java @@ -0,0 +1,35 @@ +package org.dromara.bzrkh.domain.bo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 指标审核提交业务对象 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +public class AssessmentApprovalIndicatorSubmitBo { + + /** + * 主键ID + */ + private Long id; + + /** + * 指标ID + */ + private Long indicatorId; + + /** + * 上级评分数 + */ + private BigDecimal superiorScore; + + /** + * 上级评意见 + */ + private String superiorComment; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalQueryBo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalQueryBo.java new file mode 100644 index 00000000..fdf3e40f --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalQueryBo.java @@ -0,0 +1,56 @@ +package org.dromara.bzrkh.domain.bo; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 班主任考核审核查询对象 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class AssessmentApprovalQueryBo extends BaseEntity { + + /** + * 计划名称 + */ + private String planName; + + /** + * 考核方案名称 + */ + private String schemeName; + + /** + * 审核状态(0=待审核 1=审核通过 2=审核不通过) + */ + private String auditStatus; + + /** + * 班级名称 + */ + private String className; + + /** + * 班主任姓名 + */ + private String teacherName; + + /** + * 被评价用户姓名 + */ + private String evaluatedUserName; + + /** + * 学年 + */ + private String academicYear; + + /** + * 学期 + */ + private String semester; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalSpecialWorkSubmitBo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalSpecialWorkSubmitBo.java new file mode 100644 index 00000000..0c8d6ca4 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalSpecialWorkSubmitBo.java @@ -0,0 +1,35 @@ +package org.dromara.bzrkh.domain.bo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 特色工作审核提交业务对象 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +public class AssessmentApprovalSpecialWorkSubmitBo { + + /** + * 主键ID + */ + private Long id; + + /** + * 指标编码 + */ + private String indicatorCode; + + /** + * 上级评分数 + */ + private BigDecimal superiorScore; + + /** + * 上级评意见 + */ + private String superiorComment; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalSubmitBo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalSubmitBo.java new file mode 100644 index 00000000..b2270f19 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/AssessmentApprovalSubmitBo.java @@ -0,0 +1,70 @@ +package org.dromara.bzrkh.domain.bo; + +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 jakarta.validation.constraints.NotNull; +import java.util.List; + +/** + * 考核审核提交业务对象 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class AssessmentApprovalSubmitBo extends BaseEntity { + + /** + * 考核计划ID + */ + @NotNull(message = "考核计划ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long planId; + + /** + * 班级ID + */ + @NotNull(message = "班级ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long classId; + + /** + * 被评价用户ID + */ + @NotNull(message = "被评价用户ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long evaluatedUserId; + + /** + * 班主任常规工作审核数据 + */ + private List routineWorkApproval; + + /** + * 班级管理实效审核数据 + */ + private AssessmentApprovalIndicatorSubmitBo classDeductionApproval; + + /** + * 特色工作审核数据 + */ + private List specialWorkApproval; + + /** + * 上级总体评价 + */ + private String superiorOverallComment; + + /** + * 审核状态 0=待审核 1=审核通过 2=审核不通过 + */ + @NotNull(message = "审核状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String auditStatus; + + /** + * 审核意见 + */ + private String auditComment; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/BatchApprovalBo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/BatchApprovalBo.java new file mode 100644 index 00000000..56a450ff --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/bo/BatchApprovalBo.java @@ -0,0 +1,22 @@ +package org.dromara.bzrkh.domain.bo; + +import lombok.Data; +import jakarta.validation.constraints.NotEmpty; + +import java.util.List; + +/** + * 批量审核业务对象 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +public class BatchApprovalBo { + + /** + * 审核ID列表 + */ + @NotEmpty(message = "审核ID列表不能为空") + private List ids; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalDetailVo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalDetailVo.java new file mode 100644 index 00000000..23fba61a --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalDetailVo.java @@ -0,0 +1,111 @@ +package org.dromara.bzrkh.domain.vo; + +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 考核审核详情视图对象 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +public class AssessmentApprovalDetailVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long id; + + /** + * 考核计划ID + */ + private Long planId; + + /** + * 班级ID + */ + private Long classId; + + /** + * 班级详细信息 + */ + private ClassDetailVo classDetail; + + /** + * 系数信息 + */ + private CoefficientVo coefficient; + + /** + * 班主任常规工作指标列表 - 包含自评和上级评分 + */ + private List routineWorkIndicators; + + /** + * 班级扣分指标 - 班级管理实效 + */ + private AssessmentApprovalIndicatorVo classDeductionIndicator; + + /** + * 特色工作指标列表 + */ + private List specialWorkIndicators; + + /** + * 自我总体评价 + */ + private String selfOverallComment; + + /** + * 上级总体评价 + */ + private String superiorOverallComment; + + /** + * 月考核得分 + */ + private BigDecimal monthlyScore; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 提交时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date submitTime; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新者 + */ + private Long updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalIndicatorVo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalIndicatorVo.java new file mode 100644 index 00000000..4e2b56e7 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalIndicatorVo.java @@ -0,0 +1,82 @@ +package org.dromara.bzrkh.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 审核指标视图对象 - 包含自评和上级评分 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +public class AssessmentApprovalIndicatorVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long id; + + /** + * 指标ID + */ + private Long indicatorId; + + /** + * 指标名称 + */ + private String indicatorName; + + /** + * 指标编码 + */ + private String indicatorCode; + + /** + * 指标描述 + */ + private String description; + + /** + * 指标分值 + */ + private BigDecimal score; + + /** + * 最高分值 + */ + private BigDecimal maxScore; + + // 自评相关 + /** + * 自评分数 + */ + private BigDecimal selfScore; + + /** + * 自评意见 + */ + private String selfComment; + + // 上级评相关 + /** + * 上级评分数 + */ + private BigDecimal superiorScore; + + /** + * 上级评意见 + */ + private String superiorComment; + + /** + * 审核状态 + */ + private String auditStatus; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalSpecialWorkVo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalSpecialWorkVo.java new file mode 100644 index 00000000..5fd3dfac --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalSpecialWorkVo.java @@ -0,0 +1,62 @@ +package org.dromara.bzrkh.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 特色工作审核视图对象 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +public class AssessmentApprovalSpecialWorkVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + private Long id; + + /** + * 指标编码 + */ + private String indicatorCode; + + /** + * 指标名称 + */ + private String indicatorName; + + // 自评相关 + /** + * 自评分数 + */ + private BigDecimal score; + + /** + * 自评意见 + */ + private String selfComment; + + // 上级评相关 + /** + * 上级评分数 + */ + private BigDecimal superiorScore; + + /** + * 上级评意见 + */ + private String superiorComment; + + /** + * 审核状态 + */ + private String auditStatus; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalVo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalVo.java new file mode 100644 index 00000000..d1d4b5f9 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentApprovalVo.java @@ -0,0 +1,163 @@ +package org.dromara.bzrkh.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 班主任考核审核视图对象 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +@ExcelIgnoreUnannotated +public class AssessmentApprovalVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 考核计划ID + */ + private Long planId; + + /** + * 考核计划名称 + */ + @ExcelProperty(value = "计划名称") + private String planName; + + /** + * 考核计划编码 + */ + @ExcelProperty(value = "计划编码") + private String planCode; + + /** + * 考核方案ID + */ + private Long schemeId; + + /** + * 考核方案名称 + */ + @ExcelProperty(value = "考核方案") + private String schemeName; + + /** + * 学年 + */ + @ExcelProperty(value = "学年") + private String academicYear; + + /** + * 学期 + */ + @ExcelProperty(value = "学期") + private String semester; + + /** + * 班级ID + */ + private Long classId; + + /** + * 班级名称 + */ + @ExcelProperty(value = "班级名称") + private String className; + + /** + * 班主任用户ID + */ + private Long teacherId; + + /** + * 班主任姓名 + */ + @ExcelProperty(value = "班主任姓名") + private String teacherName; + + /** + * 被评价用户ID + */ + private Long evaluatedUserId; + + /** + * 被评价用户姓名 + */ + @ExcelProperty(value = "被评价用户姓名") + private String evaluatedUserName; + + /** + * 提交时间 + */ + @ExcelProperty(value = "提交时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date submitTime; + + /** + * 审核状态(0=待审核 1=审核通过 2=审核不通过) + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 审核状态文本 + */ + private String auditStatusText; + + /** + * 自评总分 + */ + @ExcelProperty(value = "自评总分") + private BigDecimal selfScore; + + /** + * 上级评总分 + */ + @ExcelProperty(value = "上级评总分") + private BigDecimal superiorScore; + + /** + * 最终得分 + */ + @ExcelProperty(value = "最终得分") + private BigDecimal finalScore; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 更新者 + */ + private Long updateBy; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentIndicatorScoreVo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentIndicatorScoreVo.java index 814b6720..f3604c19 100644 --- a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentIndicatorScoreVo.java +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/AssessmentIndicatorScoreVo.java @@ -65,6 +65,11 @@ public class AssessmentIndicatorScoreVo implements Serializable { */ private Integer sortOrder; + /** + * 审核状态(0=待审核,1=审核通过,2=审核不通过) + */ + private String auditStatus; + /** * 创建者 */ diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/BmzrAssessmentPlanVo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/BmzrAssessmentPlanVo.java index e17cf556..5fd5a002 100644 --- a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/BmzrAssessmentPlanVo.java +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/BmzrAssessmentPlanVo.java @@ -150,4 +150,21 @@ public class BmzrAssessmentPlanVo implements Serializable { * 删除标志(0代表存在 1代表删除) */ private String deleted; + + /** + * 审核状态(null=未提交,0=已提交待审核,1=审核通过,2=审核不通过) + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 提交时间 + */ + @ExcelProperty(value = "提交时间") + private Date submitTime; + + /** + * 是否已提交(用于前端按钮状态控制) + */ + private Boolean submitted; } \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/SchemeOptionVo.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/SchemeOptionVo.java new file mode 100644 index 00000000..804bcf3c --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/domain/vo/SchemeOptionVo.java @@ -0,0 +1,39 @@ +package org.dromara.bzrkh.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 考核方案选项视图对象 + * + * @author ruoyi + * @date 2025-01-28 + */ +@Data +public class SchemeOptionVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 选项值 + */ + private String value; + + /** + * 选项标签 + */ + private String label; + + /** + * 方案ID + */ + private Long schemeId; + + /** + * 方案编码 + */ + private String schemeCode; +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/mapper/AssessmentApprovalMapper.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/mapper/AssessmentApprovalMapper.java new file mode 100644 index 00000000..756edc94 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/mapper/AssessmentApprovalMapper.java @@ -0,0 +1,133 @@ +package org.dromara.bzrkh.mapper; + +import org.dromara.bzrkh.domain.vo.AssessmentApprovalVo; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalDetailVo; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalIndicatorVo; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalSpecialWorkVo; +import org.dromara.bzrkh.domain.vo.SchemeOptionVo; +import org.dromara.bzrkh.domain.bo.AssessmentApprovalQueryBo; +import org.dromara.bzrkh.domain.BmzrAssessmentScore; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 班主任考核审核Mapper接口 + * + * @author ruoyi + * @date 2025-01-28 + */ +public interface AssessmentApprovalMapper extends BaseMapperPlus { + + /** + * 查询班主任考核审核列表 + * + * @param bo 查询条件 + * @return 班主任考核审核列表 + */ + List queryList(AssessmentApprovalQueryBo bo); + + /** + * 获取考核审核基本信息 + * + * @param planId 计划ID + * @param classId 班级ID + * @param evaluatedUserId 被评价用户ID + * @return 审核基本信息 + */ + AssessmentApprovalDetailVo getApprovalBasicInfo(@Param("planId") Long planId, + @Param("classId") Long classId, + @Param("evaluatedUserId") Long evaluatedUserId); + + /** + * 获取班主任常规工作指标列表 + * + * @param planId 计划ID + * @param classId 班级ID + * @param evaluatedUserId 被评价用户ID + * @return 常规工作指标列表 + */ + List getRoutineWorkIndicators(@Param("planId") Long planId, + @Param("classId") Long classId, + @Param("evaluatedUserId") Long evaluatedUserId); + + /** + * 获取班级扣分指标(班级管理实效) + * + * @param planId 计划ID + * @param classId 班级ID + * @param evaluatedUserId 被评价用户ID + * @return 班级扣分指标 + */ + AssessmentApprovalIndicatorVo getClassDeductionIndicator(@Param("planId") Long planId, + @Param("classId") Long classId, + @Param("evaluatedUserId") Long evaluatedUserId); + + /** + * 获取特色工作指标列表 + * + * @param planId 计划ID + * @param classId 班级ID + * @param evaluatedUserId 被评价用户ID + * @return 特色工作指标列表 + */ + List getSpecialWorkIndicators(@Param("planId") Long planId, + @Param("classId") Long classId, + @Param("evaluatedUserId") Long evaluatedUserId); + + /** + * 更新上级评分和意见 + * + * @param id 分数记录ID + * @param superiorScore 上级评分 + * @param superiorComment 上级评意见 + * @param approverUserId 审核人用户ID + * @return 更新条数 + */ + int updateSuperiorScore(@Param("id") Long id, + @Param("superiorScore") String superiorScore, + @Param("superiorComment") String superiorComment, + @Param("approverUserId") Long approverUserId); + + /** + * 更新审核状态和意见 + * + * @param planId 计划ID + * @param classId 班级ID + * @param evaluatedUserId 被评价用户ID + * @param auditStatus 审核状态 + * @param auditComment 审核意见 + * @param superiorOverallComment 上级总体评价 + * @param approverUserId 审核人用户ID + * @return 更新条数 + */ + int updateAuditStatus(@Param("planId") Long planId, + @Param("classId") Long classId, + @Param("evaluatedUserId") Long evaluatedUserId, + @Param("auditStatus") String auditStatus, + @Param("auditComment") String auditComment, + @Param("superiorOverallComment") String superiorOverallComment, + @Param("approverUserId") Long approverUserId); + + /** + * 批量更新审核状态 + * + * @param ids 审核ID列表 + * @param auditStatus 审核状态 + * @param auditComment 审核意见 + * @param approverUserId 审核人用户ID + * @return 更新条数 + */ + int batchUpdateAuditStatus(@Param("ids") List ids, + @Param("auditStatus") String auditStatus, + @Param("auditComment") String auditComment, + @Param("approverUserId") Long approverUserId); + + /** + * 获取考核方案下拉选项 + * + * @return 方案选项列表 + */ + List getSchemeOptions(); +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/IAssessmentApprovalService.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/IAssessmentApprovalService.java new file mode 100644 index 00000000..e698b468 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/IAssessmentApprovalService.java @@ -0,0 +1,82 @@ +package org.dromara.bzrkh.service; + +import org.dromara.bzrkh.domain.vo.AssessmentApprovalVo; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalDetailVo; +import org.dromara.bzrkh.domain.vo.SchemeOptionVo; +import org.dromara.bzrkh.domain.bo.AssessmentApprovalQueryBo; +import org.dromara.bzrkh.domain.bo.AssessmentApprovalSubmitBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.List; + +/** + * 班主任考核审核Service接口 + * + * @author ruoyi + * @date 2025-01-28 + */ +public interface IAssessmentApprovalService { + + /** + * 查询班主任考核审核列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 班主任考核审核列表 + */ + TableDataInfo queryPageList(AssessmentApprovalQueryBo bo, PageQuery pageQuery); + + /** + * 查询班主任考核审核列表 + * + * @param bo 查询条件 + * @return 班主任考核审核列表 + */ + List queryList(AssessmentApprovalQueryBo bo); + + /** + * 获取考核审核详情 + * + * @param planId 计划ID + * @param classId 班级ID + * @param evaluatedUserId 被评价用户ID + * @return 审核详情 + */ + AssessmentApprovalDetailVo getApprovalDetail(Long planId, Long classId, Long evaluatedUserId); + + /** + * 提交考核审核 + * + * @param bo 审核数据 + * @param approverUserId 审核人用户ID + * @return 是否成功 + */ + boolean submitApproval(AssessmentApprovalSubmitBo bo, Long approverUserId); + + /** + * 批量审核通过 + * + * @param ids 审核ID列表 + * @param approverUserId 审核人用户ID + * @return 是否成功 + */ + boolean batchApprove(List ids, Long approverUserId); + + /** + * 批量审核拒绝 + * + * @param ids 审核ID列表 + * @param rejectReason 拒绝原因 + * @param approverUserId 审核人用户ID + * @return 是否成功 + */ + boolean batchReject(List ids, String rejectReason, Long approverUserId); + + /** + * 获取考核方案下拉选项 + * + * @return 方案选项列表 + */ + List getSchemeOptions(); +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/ITeacherAssessmentService.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/ITeacherAssessmentService.java index 4c057533..ad505a43 100644 --- a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/ITeacherAssessmentService.java +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/ITeacherAssessmentService.java @@ -75,6 +75,16 @@ public interface ITeacherAssessmentService { */ boolean submitAssessmentScore(AssessmentSubmitBo bo, Long teacherId); + /** + * 撤销考核提交 + * + * @param planId 计划ID + * @param classId 班级ID + * @param teacherId 班主任ID + * @return 是否成功 + */ + boolean withdrawAssessment(Long planId, Long classId, Long teacherId); + /** * 测试人数系数计算(临时调试方法) * 用于验证特定人数的系数计算是否正确 diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/impl/AssessmentApprovalServiceImpl.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/impl/AssessmentApprovalServiceImpl.java new file mode 100644 index 00000000..1be403e8 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/impl/AssessmentApprovalServiceImpl.java @@ -0,0 +1,213 @@ +package org.dromara.bzrkh.service.impl; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalVo; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalDetailVo; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalIndicatorVo; +import org.dromara.bzrkh.domain.vo.AssessmentApprovalSpecialWorkVo; +import org.dromara.bzrkh.domain.vo.SchemeOptionVo; +import org.dromara.bzrkh.domain.vo.ClassDetailVo; +import org.dromara.bzrkh.domain.vo.CoefficientVo; +import org.dromara.bzrkh.domain.bo.AssessmentApprovalQueryBo; +import org.dromara.bzrkh.domain.bo.AssessmentApprovalSubmitBo; +import org.dromara.bzrkh.domain.bo.AssessmentApprovalIndicatorSubmitBo; +import org.dromara.bzrkh.domain.bo.AssessmentApprovalSpecialWorkSubmitBo; +import org.dromara.bzrkh.mapper.AssessmentApprovalMapper; +import org.dromara.bzrkh.service.IAssessmentApprovalService; +import org.dromara.bzrkh.service.ITeacherAssessmentService; + +import java.util.List; +import java.util.Date; + +/** + * 班主任考核审核Service业务层处理 + * + * @author ruoyi + * @date 2025-01-28 + */ +@RequiredArgsConstructor +@Service +public class AssessmentApprovalServiceImpl implements IAssessmentApprovalService { + + private final AssessmentApprovalMapper assessmentApprovalMapper; + private final ITeacherAssessmentService teacherAssessmentService; + + @Override + public TableDataInfo queryPageList(AssessmentApprovalQueryBo bo, PageQuery pageQuery) { + Page page = pageQuery.build(); + List list = assessmentApprovalMapper.queryList(bo); + + // 手动分页处理 + int total = list.size(); + int start = (int) ((page.getCurrent() - 1) * page.getSize()); + int end = Math.min(start + (int) page.getSize(), total); + + List pageList = list.subList(start, end); + + page.setRecords(pageList); + page.setTotal(total); + + return TableDataInfo.build(page); + } + + @Override + public List queryList(AssessmentApprovalQueryBo bo) { + return assessmentApprovalMapper.queryList(bo); + } + + @Override + public AssessmentApprovalDetailVo getApprovalDetail(Long planId, Long classId, Long evaluatedUserId) { + // 1. 获取基本信息 + AssessmentApprovalDetailVo detail = assessmentApprovalMapper.getApprovalBasicInfo(planId, classId, evaluatedUserId); + if (detail == null) { + throw new RuntimeException("未找到考核审核数据"); + } + + // 2. 获取班级详细信息和系数信息(复用现有service) + try { + // 使用现有的获取考核详情方法来获取班级信息和系数 + var assessmentDetail = teacherAssessmentService.getAssessmentSubmitDetail(planId, classId, evaluatedUserId); + + ClassDetailVo classDetail = new ClassDetailVo(); + classDetail.setId(assessmentDetail.getClassDetail().getId()); + classDetail.setClassName(assessmentDetail.getClassDetail().getClassName()); + classDetail.setCollegeName(assessmentDetail.getClassDetail().getCollegeName()); + classDetail.setMajorName(assessmentDetail.getClassDetail().getMajorName()); + classDetail.setClassType(assessmentDetail.getClassDetail().getClassType()); + classDetail.setTotalStudentCount(assessmentDetail.getClassDetail().getTotalStudentCount()); + classDetail.setBoardingStudentCount(assessmentDetail.getClassDetail().getBoardingStudentCount()); + detail.setClassDetail(classDetail); + + CoefficientVo coefficient = new CoefficientVo(); + coefficient.setTotalCoefficient(assessmentDetail.getCoefficient().getTotalCoefficient()); + coefficient.setLevelCoefficient(assessmentDetail.getCoefficient().getLevelCoefficient()); + coefficient.setStudentCountCoefficient(assessmentDetail.getCoefficient().getStudentCountCoefficient()); + coefficient.setBoardingCoefficient(assessmentDetail.getCoefficient().getBoardingCoefficient()); + detail.setCoefficient(coefficient); + } catch (Exception e) { + // 如果获取失败,使用默认值 + detail.setClassDetail(new ClassDetailVo()); + detail.setCoefficient(new CoefficientVo()); + } + + // 3. 获取班主任常规工作指标列表 + List routineWorkIndicators = + assessmentApprovalMapper.getRoutineWorkIndicators(planId, classId, evaluatedUserId); + detail.setRoutineWorkIndicators(routineWorkIndicators); + + // 4. 获取班级扣分指标(班级管理实效) + AssessmentApprovalIndicatorVo classDeductionIndicator = + assessmentApprovalMapper.getClassDeductionIndicator(planId, classId, evaluatedUserId); + detail.setClassDeductionIndicator(classDeductionIndicator); + + // 5. 获取特色工作指标列表 + List specialWorkIndicators = + assessmentApprovalMapper.getSpecialWorkIndicators(planId, classId, evaluatedUserId); + detail.setSpecialWorkIndicators(specialWorkIndicators); + + return detail; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean submitApproval(AssessmentApprovalSubmitBo bo, Long approverUserId) { + try { + // 1. 更新班主任常规工作指标的上级评分和意见 + if (bo.getRoutineWorkApproval() != null) { + for (AssessmentApprovalIndicatorSubmitBo indicator : bo.getRoutineWorkApproval()) { + if (indicator.getId() != null) { + assessmentApprovalMapper.updateSuperiorScore( + indicator.getId(), + indicator.getSuperiorScore() != null ? indicator.getSuperiorScore().toString() : null, + indicator.getSuperiorComment(), + approverUserId + ); + } + } + } + + // 2. 更新班级管理实效的上级评分和意见 + if (bo.getClassDeductionApproval() != null && bo.getClassDeductionApproval().getId() != null) { + assessmentApprovalMapper.updateSuperiorScore( + bo.getClassDeductionApproval().getId(), + bo.getClassDeductionApproval().getSuperiorScore() != null ? + bo.getClassDeductionApproval().getSuperiorScore().toString() : null, + bo.getClassDeductionApproval().getSuperiorComment(), + approverUserId + ); + } + + // 3. 更新特色工作指标的上级评分和意见 + if (bo.getSpecialWorkApproval() != null) { + for (AssessmentApprovalSpecialWorkSubmitBo specialWork : bo.getSpecialWorkApproval()) { + if (specialWork.getId() != null) { + assessmentApprovalMapper.updateSuperiorScore( + specialWork.getId(), + specialWork.getSuperiorScore() != null ? specialWork.getSuperiorScore().toString() : null, + specialWork.getSuperiorComment(), + approverUserId + ); + } + } + } + + // 4. 更新审核状态和总体评价 + int result = assessmentApprovalMapper.updateAuditStatus( + bo.getPlanId(), + bo.getClassId(), + bo.getEvaluatedUserId(), + bo.getAuditStatus(), + bo.getAuditComment(), + bo.getSuperiorOverallComment(), + approverUserId + ); + + return result > 0; + } catch (Exception e) { + throw new RuntimeException("提交审核失败: " + e.getMessage(), e); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean batchApprove(List ids, Long approverUserId) { + try { + int result = assessmentApprovalMapper.batchUpdateAuditStatus( + ids, + "1", // 审核通过 + "批量审核通过", + approverUserId + ); + return result > 0; + } catch (Exception e) { + throw new RuntimeException("批量审核通过失败: " + e.getMessage(), e); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean batchReject(List ids, String rejectReason, Long approverUserId) { + try { + int result = assessmentApprovalMapper.batchUpdateAuditStatus( + ids, + "2", // 审核不通过 + rejectReason, + approverUserId + ); + return result > 0; + } catch (Exception e) { + throw new RuntimeException("批量审核拒绝失败: " + e.getMessage(), e); + } + } + + @Override + public List getSchemeOptions() { + return assessmentApprovalMapper.getSchemeOptions(); + } +} \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/impl/TeacherAssessmentServiceImpl.java b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/impl/TeacherAssessmentServiceImpl.java index cc62b1d3..d01befbc 100644 --- a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/impl/TeacherAssessmentServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/java/org/dromara/bzrkh/service/impl/TeacherAssessmentServiceImpl.java @@ -379,6 +379,42 @@ public class TeacherAssessmentServiceImpl implements ITeacherAssessmentService { return result; } + /** + * 撤销考核提交 + * + * @param planId 计划ID + * @param classId 班级ID + * @param teacherId 班主任ID + * @return 是否成功 + */ + @Override + public boolean withdrawAssessment(Long planId, Long classId, Long teacherId) { + try { + // 验证是否有权限撤销(只能撤销自己提交的且状态为待审核的考核) + List savedScores = teacherAssessmentMapper.selectSavedAssessmentScores(planId, teacherId); + if (savedScores == null || savedScores.isEmpty()) { + log.warn("未找到可撤销的考核提交记录,计划ID: {}, 教师ID: {}", planId, teacherId); + return false; + } + + // 检查审核状态,只有待审核状态("0")的才能撤销 + boolean canWithdraw = savedScores.stream().anyMatch(score -> "0".equals(score.getAuditStatus())); + if (!canWithdraw) { + log.warn("考核已审核,无法撤销,计划ID: {}, 教师ID: {}", planId, teacherId); + return false; + } + + // 逻辑删除该计划下该教师的所有评分数据 + teacherAssessmentMapper.deleteAssessmentScoresByPlanAndTeacher(planId, teacherId); + + log.info("成功撤销考核提交,计划ID: {}, 教师ID: {}", planId, teacherId); + return true; + } catch (Exception e) { + log.error("撤销考核提交失败,计划ID: {}, 教师ID: {}", planId, teacherId, e); + return false; + } + } + /** * 测试人数系数计算(临时调试方法) * 可以通过调用这个方法来验证具体人数的系数计算 diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/resources/mapper/bzrkh/AssessmentApprovalMapper.xml b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/resources/mapper/bzrkh/AssessmentApprovalMapper.xml new file mode 100644 index 00000000..6f5e5c6a --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/resources/mapper/bzrkh/AssessmentApprovalMapper.xml @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE bmzr_assessment_score + SET superior_score = #{superiorScore}, + superior_comment = #{superiorComment}, + superior_evaluator_id = #{approverUserId}, + superior_submit_time = NOW(), + update_by = #{approverUserId}, + update_time = NOW() + WHERE id = #{id} + AND deleted = 0 + + + + + UPDATE bmzr_assessment_score + SET audit_status = #{auditStatus}, + superior_overall_comment = #{superiorOverallComment}, + update_by = #{approverUserId}, + update_time = NOW() + WHERE plan_id = #{planId} + AND class_id = #{classId} + AND evaluated_user_id = #{evaluatedUserId} + AND deleted = 0 + + + + + UPDATE bmzr_assessment_score + SET audit_status = #{auditStatus}, + superior_overall_comment = #{auditComment}, + update_by = #{approverUserId}, + update_time = NOW() + WHERE id IN + + #{id} + + AND deleted = 0 + + + + + + \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/resources/mapper/bzrkh/TeacherAssessmentMapper.xml b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/resources/mapper/bzrkh/TeacherAssessmentMapper.xml index 8b8089f2..47c9c923 100644 --- a/backend/ruoyi-modules/ruoyi-bzrkh/src/main/resources/mapper/bzrkh/TeacherAssessmentMapper.xml +++ b/backend/ruoyi-modules/ruoyi-bzrkh/src/main/resources/mapper/bzrkh/TeacherAssessmentMapper.xml @@ -43,6 +43,9 @@ + + + @@ -71,6 +74,7 @@ + @@ -134,9 +138,17 @@ p.create_time, p.update_by, p.update_time, - p.deleted + p.deleted, + score.audit_status as audit_status, + score.self_submit_time as submit_time, + CASE WHEN score.plan_id IS NOT NULL THEN 1 ELSE 0 END as submitted FROM bmzr_assessment_plan p LEFT JOIN bmzr_assessment_scheme s ON p.scheme_id = s.id AND s.deleted = 0 + LEFT JOIN ( + SELECT DISTINCT plan_id, audit_status, self_submit_time + FROM bmzr_assessment_score + WHERE evaluated_user_id = #{teacherId} AND deleted = 0 + ) score ON p.id = score.plan_id WHERE p.deleted = 0 AND p.plan_status = #{planStatus} @@ -256,6 +268,7 @@ s.self_comment, s.self_overall_comment, i.sort_order, + s.audit_status, s.create_by, s.create_time, s.update_by, diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/班主任考核审核权限配置.sql b/backend/ruoyi-modules/ruoyi-bzrkh/班主任考核审核权限配置.sql new file mode 100644 index 00000000..ed3e0ca2 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/班主任考核审核权限配置.sql @@ -0,0 +1,63 @@ +-- ========================================== +-- 班主任考核审核权限配置SQL +-- 版本:V1.0.0 +-- 功能:班主任考核审核相关权限配置 +-- 作者:系统设计 +-- 时间:2025-01-28 +-- 模块:学工管理-班主任考核审核权限配置 +-- ========================================== + +-- 1. 菜单配置 +-- 班主任考核审核菜单 +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES +('班主任考核审核', (SELECT menu_id FROM sys_menu WHERE menu_name = '班主任考核系统' LIMIT 1), 6, 'assessmentApproval', 'bzrkh/assessmentApproval/index', '', '', 1, 0, 'C', '0', '0', 'bzrkh:assessmentApproval:list', 'edit', 103, 1, now(), 1, now(), '班主任考核审核菜单'); + +-- 2. 按钮权限配置 +-- 获取刚插入的菜单ID +SET @assessment_approval_menu_id = LAST_INSERT_ID(); + +-- 班主任考核审核按钮权限 +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query_param, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES +('考核审核查询', @assessment_approval_menu_id, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'bzrkh:assessmentApproval:list', '#', 103, 1, now(), 1, now(), ''), +('考核审核详情', @assessment_approval_menu_id, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'bzrkh:assessmentApproval:query', '#', 103, 1, now(), 1, now(), ''), +('考核审核操作', @assessment_approval_menu_id, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'bzrkh:assessmentApproval:approve', '#', 103, 1, now(), 1, now(), ''), +('考核审核导出', @assessment_approval_menu_id, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'bzrkh:assessmentApproval:export', '#', 103, 1, now(), 1, now(), ''); + +-- 3. 字典配置 +-- 审核状态字典 +INSERT INTO sys_dict_type (dict_name, dict_type, status, create_dept, create_by, create_time, update_by, update_time, remark) VALUES +('班主任考核审核状态', 'bmzr_audit_status', '0', 103, 1, now(), 1, now(), '班主任考核审核状态字典'); + +-- 获取字典类型ID +SET @dict_type_id = LAST_INSERT_ID(); + +-- 审核状态字典数据 +INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_dept, create_by, create_time, update_by, update_time, remark) VALUES +(1, '待审核', '0', 'bmzr_audit_status', '', 'warning', 'Y', '0', 103, 1, now(), 1, now(), '待审核状态'), +(2, '审核通过', '1', 'bmzr_audit_status', '', 'success', 'N', '0', 103, 1, now(), 1, now(), '审核通过状态'), +(3, '审核不通过', '2', 'bmzr_audit_status', '', 'danger', 'N', '0', 103, 1, now(), 1, now(), '审核不通过状态'); + +-- ========================================== +-- 权限字符说明 +-- ========================================== +/* +权限字符列表: +1. bzrkh:assessmentApproval:list - 班主任考核审核查询权限(查看审核列表) +2. bzrkh:assessmentApproval:query - 班主任考核审核详情权限(查看审核详情) +3. bzrkh:assessmentApproval:approve - 班主任考核审核操作权限(审批、批量审批、批量拒绝) +4. bzrkh:assessmentApproval:export - 班主任考核审核导出权限(导出审核数据) + +API接口与权限字符对应关系: +- GET /bzrkh/assessmentApproval/list → bzrkh:assessmentApproval:list +- GET /bzrkh/assessmentApproval/detail → bzrkh:assessmentApproval:query +- POST /bzrkh/assessmentApproval/submit → bzrkh:assessmentApproval:approve +- POST /bzrkh/assessmentApproval/batchApprove → bzrkh:assessmentApproval:approve +- POST /bzrkh/assessmentApproval/batchReject → bzrkh:assessmentApproval:approve +- GET /bzrkh/assessmentApproval/schemeOptions → bzrkh:assessmentApproval:list +- POST /bzrkh/assessmentApproval/export → bzrkh:assessmentApproval:export + +用户角色分配建议: +1. 学工处管理员:拥有所有权限(list、query、approve、export) +2. 学院管理员:拥有查询和审核权限(list、query、approve) +3. 普通审核员:拥有查询权限(list、query) +*/ \ No newline at end of file diff --git a/backend/ruoyi-modules/ruoyi-bzrkh/班主任考核撤销功能权限配置.sql b/backend/ruoyi-modules/ruoyi-bzrkh/班主任考核撤销功能权限配置.sql new file mode 100644 index 00000000..f8521ff5 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-bzrkh/班主任考核撤销功能权限配置.sql @@ -0,0 +1,47 @@ +-- ========================================== +-- 班主任考核撤销功能权限配置 +-- 功能说明:为班主任考核管理新增撤销提交功能的权限配置 +-- 创建时间:2025-01-28 +-- ========================================== + +-- 1. 插入撤销考核权限 +INSERT INTO sys_menu ( + menu_name, parent_id, order_num, path, component, query_param, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark +) VALUES ( + '撤销考核提交', + (SELECT menu_id FROM sys_menu WHERE perms = 'bzrkh:teacherAssessment:list' LIMIT 1), + 4, + '', + '', + '', + '', + 1, + 0, + 'F', + '0', + '0', + 'bzrkh:teacherAssessment:withdraw', + '#', + 103, + 1, + NOW(), + 1, + NOW(), + '班主任考核撤销提交权限' +); + +-- ========================================== +-- 权限字符说明 +-- ========================================== +/* +新增权限字符: +- bzrkh:teacherAssessment:withdraw - 班主任考核撤销权限 + +使用的API接口及对应权限: +- POST /bzrkh/teacherAssessment/withdraw - bzrkh:teacherAssessment:withdraw + +说明: +- 撤销功能只对待审核状态(audit_status='0')的考核有效 +- 撤销后会逻辑删除评分数据,允许重新提交 +- 已审核通过或驳回的考核无法撤销 +*/ \ No newline at end of file diff --git a/docs/开发文档/API/API文档总览.md b/docs/开发文档/API/API文档总览.md index 998068f3..9f356e34 100644 --- a/docs/开发文档/API/API文档总览.md +++ b/docs/开发文档/API/API文档总览.md @@ -17,7 +17,6 @@ - [宿舍管理员授权API](./宿舍管理员授权API.md) - [学生管理员授权关系API](./学生管理员授权关系API.md) - [学生销假管理API](./学生销假管理API.md) -- [逆地理编码API](./逆地理编码API.md) - **新增逆地理编码功能**(2025-01-03) ### 1. 用户认证登录 @@ -83,14 +82,11 @@ | 处理预约申请 | POST | /api/xljk/consultation/appointment/process | 预约管理 | xljk:consultation:appointment:process | | **获取房间床位详细信息** | GET | /dormbed/dormBed/details/room/{roomId} | 宿舍管理 | dormbed:dormBed:query | | **获取宿舍楼床位详细信息** | GET | /dormbed/dormBed/details/building/{buildingId} | 宿舍管理 | dormbed:dormBed:query | -| 获取当前班主任的班级列表 | GET | /classMsg/classMsg/myClassListAsTeacher | 班级信息 | classMsg:classMsg:list | | 记录咨询结果 | POST | /api/xljk/consultation/appointment/record | 预约管理 | xljk:consultation:appointment:record | | 查询未到访记录列表 | GET | /api/xljk/consultation/no-show/list | 预约限制 | xljk:consultation:noshow:list | | 获取未到访记录详情 | GET | /api/xljk/consultation/no-show/{id} | 预约限制 | xljk:consultation:noshow:query | | 解除预约限制 | PUT | /api/xljk/consultation/no-show/{id}/release | 预约限制 | xljk:consultation:noshow:release | | 检查学生是否被限制预约 | GET | /api/xljk/consultation/no-show/check-limitation | 预约限制 | - | -| 逆地理编码 | POST | /system/SysRegion/reverse-geocode | 行政区划 | system:SysRegion:geocode | -| **根据学生ID查询卫生检查信息** | GET | /dormHygieneCheck/dormHygieneCheck/student/{studentId} | 宿舍卫生检查 | dormHygieneCheck:dormHygieneCheck:query | ## 更新历史 @@ -100,8 +96,6 @@ | 2025-07-01 | 1.0 | 初始版本 | 系统管理员 | | 2025-07-15 | 1.1 | 添加心理健康测评API | 张工 | | 2025-07-30 | 1.2 | 添加预约限制功能API | Cursor | -| 2025-01-03 | 1.3 | 添加逆地理编码API | zlwu | -| 2025-01-03 | 1.4 | 添加宿舍卫生检查-根据学生ID查询API | zlwu | **详细文档**: [企业信息管理API.md](./企业信息管理API.md) @@ -141,13 +135,6 @@ ## 🔗 API文档导航 -### 🏠 宿舍管理模块 - -| API文档 | 描述 | 状态 | 更新时间 | -|---------|------|------|----------| -| [宿舍卫生检查API-根据学生ID查询](./宿舍卫生检查API-根据学生ID查询.md) | 根据学生ID查询宿舍卫生检查信息 | ✅ 完成 | 2025-01-03 | -| [宿舍卫生检查API-根据学生ID查询-使用说明](./宿舍卫生检查API-根据学生ID查询-使用说明.md) | 宿舍卫生检查API使用说明 | ✅ 完成 | 2025-01-03 | - ### 👥 学工管理模块 | API文档 | 描述 | 状态 | 更新时间 | @@ -161,5 +148,4 @@ | **[学生考核管理系统API](./学生考核管理系统API.md)** | **学生综合素质测评、违纪处分、奖励加分管理** | **✅ 完成** | **2025-01-27** | | **[学生考核管理系统修改方案](./学生考核管理系统API修改方案.md)** | **基于标准化违纪处分等级的系统升级方案** | **📋 方案** | **2025-01-27** | | **[学生考核管理系统数据库修改影响分析](./学生考核管理系统数据库修改影响分析.md)** | **数据库升级脚本执行的详细影响分析** | **📊 分析** | **2025-01-27** | -- 指标体系管理API.md(新增:支持Excel批量导入、导入模板下载;新增字段:具体指标名称) diff --git a/web/src/api/bzrkh/assessmentApproval/index.ts b/web/src/api/bzrkh/assessmentApproval/index.ts new file mode 100644 index 00000000..4b39ebb0 --- /dev/null +++ b/web/src/api/bzrkh/assessmentApproval/index.ts @@ -0,0 +1,108 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { + AssessmentApprovalQuery, + AssessmentApprovalVO, + AssessmentApprovalDetailVO, + AssessmentApprovalSubmitBO +} from './types'; + +/** + * 查询班主任考核审核列表 + * @param query + * @returns {*} + */ +export const listAssessmentApproval = (query?: AssessmentApprovalQuery): AxiosPromise => { + return request({ + url: '/bzrkh/assessmentApproval/list', + method: 'get', + params: query + }); +}; + +/** + * 获取考核审核详情 + * @param planId 计划ID + * @param classId 班级ID + * @param evaluatedUserId 被评价用户ID + * @returns {*} + */ +export const getAssessmentApprovalDetail = (planId: string | number, classId: string | number, evaluatedUserId: string | number): AxiosPromise => { + return request({ + url: '/bzrkh/assessmentApproval/detail', + method: 'get', + params: { + planId, + classId, + evaluatedUserId + } + }); +}; + +/** + * 提交考核审核 + * @param data 审核数据 + * @returns {*} + */ +export const submitAssessmentApproval = (data: AssessmentApprovalSubmitBO): AxiosPromise => { + return request({ + url: '/bzrkh/assessmentApproval/submit', + method: 'post', + data: data + }); +}; + +/** + * 批量审核通过 + * @param ids 审核ID列表 + * @returns {*} + */ +export const batchApproveAssessment = (ids: (string | number)[]): AxiosPromise => { + return request({ + url: '/bzrkh/assessmentApproval/batchApprove', + method: 'post', + data: { ids } + }); +}; + +/** + * 批量审核拒绝 + * @param ids 审核ID列表 + * @param rejectReason 拒绝原因 + * @returns {*} + */ +export const batchRejectAssessment = (ids: (string | number)[], rejectReason: string): AxiosPromise => { + return request({ + url: '/bzrkh/assessmentApproval/batchReject', + method: 'post', + data: { + ids, + rejectReason + } + }); +}; + +/** + * 获取考核方案下拉选项 + * @returns {*} + */ +export const getAssessmentSchemeOptions = (): AxiosPromise => { + return request({ + url: '/bzrkh/assessmentApproval/schemeOptions', + method: 'get' + }); +}; + +/** + * 导出考核审核数据 + * @param query 查询条件 + * @returns {*} + */ +export const exportAssessmentApproval = (query?: AssessmentApprovalQuery): AxiosPromise => { + return request({ + url: '/bzrkh/assessmentApproval/export', + method: 'post', + data: query, + responseType: 'blob' + }); +}; \ No newline at end of file diff --git a/web/src/api/bzrkh/assessmentApproval/types.ts b/web/src/api/bzrkh/assessmentApproval/types.ts new file mode 100644 index 00000000..261ce075 --- /dev/null +++ b/web/src/api/bzrkh/assessmentApproval/types.ts @@ -0,0 +1,220 @@ +/** + * 班主任考核审核相关类型定义 + */ + +/** + * 审核列表查询参数 + */ +export interface AssessmentApprovalQuery { + pageNum?: number; + pageSize?: number; + planName?: string; + schemeName?: string; + auditStatus?: string; + className?: string; + teacherName?: string; + orderByColumn?: string; + isAsc?: string; +} + +/** + * 审核列表VO + */ +export interface AssessmentApprovalVO { + id?: string | number; + planId?: string | number; + planName?: string; + planCode?: string; + schemeId?: string | number; + schemeName?: string; + academicYear?: string; + semester?: string; + classId?: string | number; + className?: string; + teacherId?: string | number; + teacherName?: string; + evaluatedUserId?: string | number; + evaluatedUserName?: string; + submitTime?: string; + auditStatus?: string; + auditStatusText?: string; + selfScore?: number; + superiorScore?: number; + finalScore?: number; + createTime?: string; +} + +/** + * 审核详情VO - 继承自班主任提交的详情数据 + */ +export interface AssessmentApprovalDetailVO { + id?: string | number; + planId?: string | number; + classId?: string | number; + + /** + * 班级详细信息 + */ + classDetail?: { + id?: string | number; + className?: string; + collegeName?: string; + majorName?: string; + classType?: string; + totalStudentCount?: number; + boardingStudentCount?: number; + }; + + /** + * 系数信息 + */ + coefficient?: { + totalCoefficient?: number; + levelCoefficient?: number; + studentCountCoefficient?: number; + boardingCoefficient?: number; + }; + + /** + * 班主任常规工作指标列表 - 包含自评和上级评分 + */ + routineWorkIndicators?: AssessmentApprovalIndicatorVO[]; + + /** + * 班级扣分指标 - 班级管理实效 + */ + classDeductionIndicator?: AssessmentApprovalIndicatorVO; + + /** + * 特色工作指标列表 + */ + specialWorkIndicators?: AssessmentApprovalSpecialWorkVO[]; + + /** + * 自我总体评价 + */ + selfOverallComment?: string; + + /** + * 上级总体评价 + */ + superiorOverallComment?: string; + + /** + * 月考核得分 + */ + monthlyScore?: number; + + /** + * 审核状态 + */ + auditStatus?: string; + + /** + * 提交时间 + */ + submitTime?: string; +} + +/** + * 审核指标VO - 包含自评和上级评分 + */ +export interface AssessmentApprovalIndicatorVO { + id?: string | number; + indicatorId?: string | number; + indicatorName?: string; + indicatorCode?: string; + description?: string; + score?: number; // 指标分值 + maxScore?: number; + + // 自评相关 + selfScore?: number; + selfComment?: string; + + // 上级评相关 + superiorScore?: number; + superiorComment?: string; + + // 审核状态 + auditStatus?: string; +} + +/** + * 特色工作审核VO + */ +export interface AssessmentApprovalSpecialWorkVO { + id?: string | number; + indicatorCode?: string; + indicatorName?: string; + + // 自评相关 + score?: number; // 自评分数 + selfComment?: string; + + // 上级评相关 + superiorScore?: number; + superiorComment?: string; + + // 审核状态 + auditStatus?: string; +} + +/** + * 审核提交BO + */ +export interface AssessmentApprovalSubmitBO { + planId?: string | number; + classId?: string | number; + evaluatedUserId?: string | number; + + /** + * 班主任常规工作审核数据 + */ + routineWorkApproval?: AssessmentApprovalIndicatorSubmitVO[]; + + /** + * 班级管理实效审核数据 + */ + classDeductionApproval?: AssessmentApprovalIndicatorSubmitVO; + + /** + * 特色工作审核数据 + */ + specialWorkApproval?: AssessmentApprovalSpecialWorkSubmitVO[]; + + /** + * 上级总体评价 + */ + superiorOverallComment?: string; + + /** + * 审核状态 0=待审核 1=审核通过 2=审核不通过 + */ + auditStatus?: string; + + /** + * 审核意见 + */ + auditComment?: string; +} + +/** + * 指标审核提交VO + */ +export interface AssessmentApprovalIndicatorSubmitVO { + id?: string | number; + indicatorId?: string | number; + superiorScore?: number; + superiorComment?: string; +} + +/** + * 特色工作审核提交VO + */ +export interface AssessmentApprovalSpecialWorkSubmitVO { + id?: string | number; + indicatorCode?: string; + superiorScore?: number; + superiorComment?: string; +} \ No newline at end of file diff --git a/web/src/api/bzrkh/teacherAssessment/index.ts b/web/src/api/bzrkh/teacherAssessment/index.ts index cfb85608..6412ce1c 100644 --- a/web/src/api/bzrkh/teacherAssessment/index.ts +++ b/web/src/api/bzrkh/teacherAssessment/index.ts @@ -29,7 +29,7 @@ export const listTeacherClasses = (query?: TeacherClassQuery): AxiosPromise => { return request({ - url: '/bzrkh/assessmentPlan/list', + url: '/bzrkh/teacherAssessment/plans', method: 'get', params: query }); @@ -93,4 +93,20 @@ export const submitAssessmentScore = (data: AssessmentSubmitVO): AxiosPromise => { + return request({ + url: '/bzrkh/teacherAssessment/withdraw', + method: 'post', + data: { + planId, + classId + } + }); }; \ No newline at end of file diff --git a/web/src/api/bzrkh/teacherAssessment/types.ts b/web/src/api/bzrkh/teacherAssessment/types.ts index 44d9d4ab..bb1771bf 100644 --- a/web/src/api/bzrkh/teacherAssessment/types.ts +++ b/web/src/api/bzrkh/teacherAssessment/types.ts @@ -135,6 +135,21 @@ export interface TeacherAssessmentPlanVO { * 备注 */ remark?: string; + + /** + * 审核状态(null=未提交,0=已提交待审核,1=审核通过,2=审核不通过) + */ + auditStatus?: string; + + /** + * 提交时间 + */ + submitTime?: string; + + /** + * 是否已提交(用于前端按钮状态控制) + */ + submitted?: boolean; } export interface TeacherAssessmentPlanQuery { diff --git a/web/src/views/bzrkh/assessmentApproval/approvalDialog.vue b/web/src/views/bzrkh/assessmentApproval/approvalDialog.vue new file mode 100644 index 00000000..021c3309 --- /dev/null +++ b/web/src/views/bzrkh/assessmentApproval/approvalDialog.vue @@ -0,0 +1,720 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/bzrkh/assessmentApproval/index.vue b/web/src/views/bzrkh/assessmentApproval/index.vue new file mode 100644 index 00000000..95f88b65 --- /dev/null +++ b/web/src/views/bzrkh/assessmentApproval/index.vue @@ -0,0 +1,273 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/bzrkh/assessmentApproval/viewDialog.vue b/web/src/views/bzrkh/assessmentApproval/viewDialog.vue new file mode 100644 index 00000000..32c0e361 --- /dev/null +++ b/web/src/views/bzrkh/assessmentApproval/viewDialog.vue @@ -0,0 +1,577 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/bzrkh/teacherAssessment/index.vue b/web/src/views/bzrkh/teacherAssessment/index.vue index 48806f00..c8e2c7b6 100644 --- a/web/src/views/bzrkh/teacherAssessment/index.vue +++ b/web/src/views/bzrkh/teacherAssessment/index.vue @@ -35,15 +35,9 @@
@@ -70,6 +64,15 @@ 未设置 + + +