“0901班主任考核计算公式调整”

This commit is contained in:
weizhong committed 2025-09-01 17:13:59 +08:00
1 parent 0c0ca0ee7c
commit 933f39d79b
9 files changed
+110 -57

No files matched your search

@@ -72,7 +72,7 @@ public class AssessmentApprovalDetailVo implements Serializable {
private String superiorOverallComment;
/**
* 月考核得分
* 考核得分
*/
private BigDecimal monthlyScore;
@@ -47,7 +47,7 @@ public class AssessmentDetailVo implements Serializable {
private List<SpecialWorkIndicatorVo> specialWorkIndicators;
/**
* 月考核得分
* 考核得分
*/
private BigDecimal monthlyScore;
@@ -426,7 +426,7 @@ public class AssessmentApprovalServiceImpl implements IAssessmentApprovalService
AssessmentDetailVo detailVo = teacherAssessmentService.getAssessmentSubmitDetail(
approval.getPlanId(), approval.getClassId(), approval.getEvaluatedUserId());
// 计算月考核得分
// 计算考核得分
Double monthlyScore = calculateMonthlyScore(detailVo, approval);
ScoreRankingVo ranking = new ScoreRankingVo();
@@ -469,7 +469,7 @@ public class AssessmentApprovalServiceImpl implements IAssessmentApprovalService
}
/**
* 计算月考核得分
* 计算考核得分
*/
private Double calculateMonthlyScore(AssessmentDetailVo detailVo, AssessmentApprovalVo approval) {
// 总系数(K)
@@ -523,10 +523,29 @@ public class AssessmentApprovalServiceImpl implements IAssessmentApprovalService
}
}
// 月考核得分 = 总系数(K)* (班主任常规工作评分 - 按班级扣分50%计的分值 + 特色工作评分)
// 注意:班级扣分是减法,因为它是扣分项
BigDecimal monthlyScore = totalCoefficient.multiply(
BigDecimal.valueOf(routineWorkTotal - deductionHalf + specialWorkTotal));
// 判断是否为自评模式(如果没有上级评分,则为自评模式)
boolean isSelfEvaluationMode = scoreDetail.getClassDeductionScore() != null &&
scoreDetail.getClassDeductionScore().getSuperiorScore() == null;
// 检查是否有实际评分数据(避免空白状态显示50分)
boolean hasAnyScore = routineWorkTotal > 0 || deductionHalf > 0 || specialWorkTotal > 0;
BigDecimal monthlyScore;
if (!hasAnyScore || totalCoefficient.compareTo(BigDecimal.ZERO) == 0) {
// 没有评分数据时返回0
monthlyScore = BigDecimal.ZERO;
} else if (isSelfEvaluationMode) {
// 自评模式:修正后的考核得分公式 = 总系数(K)* ((班主任常规工作评分 + 班级扣分项满分值) - 按班级扣分50%计的分值 + 特色工作评分)
// 班级扣分项满分值(固定50分)- 仅在有评分数据时计算
double classDeductionMaxScore = 50.0;
monthlyScore = totalCoefficient.multiply(
BigDecimal.valueOf((routineWorkTotal + classDeductionMaxScore) - deductionHalf + specialWorkTotal));
} else {
// 审核模式:考核得分 = 总系数(K)* (班主任常规工作评分 - 按班级扣分50%计的分值 + 特色工作评分)
// 注意:班级扣分是减法,因为它是扣分项
monthlyScore = totalCoefficient.multiply(
BigDecimal.valueOf(routineWorkTotal - deductionHalf + specialWorkTotal));
}
return monthlyScore.setScale(2, RoundingMode.HALF_UP).doubleValue();
}
@@ -124,7 +124,19 @@
- 计算公式:K = K1 * (K2 + K3)
### 2. 月考核得分计算
- 计算公式:总系数(K)* (班主任常规工作自评分之和 - 按班级扣分50%计的分值 + 特色工作总分值)
#### 自评模式(修正后公式)
- 计算公式:总系数(K)* ((班主任常规工作自评分之和 + 班级扣分项满分值) - 按班级扣分50%计的分值 + 特色工作总分值)
- 班级扣分项满分值:固定50分(来自指标设置)
- 修正原因:确保基础分值不受扣分影响,提高计算结果的合理性
#### 审核模式(保持不变)
- 计算公式:总系数(K)* (班主任常规工作上级评分之和 + 班级管理实效上级评分 + 特色工作上级评分之和)
#### 公式变化对比
- **修正前**:K × (常规工作自评分 - 班级扣分50% + 特色工作总分)
- **修正后**:K × ((常规工作自评分 + 50) - 班级扣分50% + 特色工作总分)
- **关键变化**:新增班级扣分项满分值(50分)确保基础分值
### 3. 数据存储逻辑
1. 先逻辑删除该计划下该教师的历史评分数据
+1 -1
View File
@@ -2186,7 +2186,7 @@ DROP TABLE IF EXISTS `rs_overseas_record_status_backup`;
CREATE TABLE `rs_overseas_record_status_backup` (
`record_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '记录ID',
`completion_status` char(1) DEFAULT '0' COMMENT '完成状态:0-进行中,1-已完成,2-提前结束',
`old_status_text` varchar(12) CHARACTER SET latin1 NOT NULL DEFAULT '',
`old_status_text` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '原状态文本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
@@ -249,17 +249,17 @@
</el-table>
</el-card>
<!-- 7. 月考核得分卡片 -->
<!-- 7. 考核得分卡片 -->
<el-card shadow="never" class="info-card">
<template #header>
<div class="card-header">
<span>月考核得分</span>
<span>考核得分</span>
</div>
</template>
<el-form :model="monthlyScoreForm" label-width="100px" class="monthly-score-form">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="月考核得分">
<el-form-item label="考核得分">
<el-input :value="calculateMonthlyScore().toFixed(2)" readonly style="width: 100%; text-align: center" />
</el-form-item>
</el-col>
@@ -360,7 +360,7 @@ const managementEffectivenessForm = reactive({
superiorComment: ''
});
// 月考核得分表单
// 考核得分表单
const monthlyScoreForm = reactive({
selfOverallComment: '',
superiorOverallComment: ''
@@ -404,7 +404,7 @@ const formatNumber = (value?: number | string, precision = 4) => {
return numValue.toFixed(precision);
};
/** 计算月考核得分 */
/** 计算考核得分 */
const calculateMonthlyScore = () => {
// 总系数(K)
const totalCoefficient = approvalDetail.value?.coefficient?.totalCoefficient || 0;
@@ -418,7 +418,7 @@ const calculateMonthlyScore = () => {
// 特色工作上级评分之和(使用上级评分,而非自评分)
const specialWorkTotal = specialWorkScores.value.reduce((sum, item) => sum + (item.superiorScore || 0), 0);
// 月考核得分 = 总系数(K)* (班主任常规工作上级评分之和 + 班级管理实效上级评分 + 特色工作上级评分之和)
// 考核得分 = 总系数(K)* (班主任常规工作上级评分之和 + 班级管理实效上级评分 + 特色工作上级评分之和)
return totalCoefficient * (routineWorkTotal + managementEffectivenessScore + specialWorkTotal);
};
@@ -490,25 +490,27 @@ const loadApprovalDetail = async () => {
managementEffectivenessForm.classDeduction = Number(indicator.selfScore) || 0;
managementEffectivenessForm.classDeductionHalf = (Number(indicator.selfScore) || 0) * 0.5;
managementEffectivenessForm.selfComment = indicator.selfComment || '';
// 上级评分默认使用按班级扣分50%计的分值
// 上级评分默认使用50分-按班级扣分50%计的分值
const classDeductionHalf = (Number(indicator.selfScore) || 0) * 0.5;
managementEffectivenessForm.superiorScore = Number(indicator.superiorScore) || classDeductionHalf;
const defaultSuperiorScore = 50 - classDeductionHalf;
managementEffectivenessForm.superiorScore = Number(indicator.superiorScore) || defaultSuperiorScore;
managementEffectivenessForm.superiorComment = indicator.superiorComment || '';
console.log('班级管理实效数据初始化:', {
班级扣分: managementEffectivenessForm.classDeduction,
扣分50计: managementEffectivenessForm.classDeductionHalf,
自评意见: managementEffectivenessForm.selfComment,
上级评分: managementEffectivenessForm.superiorScore,
上级意见: managementEffectivenessForm.superiorComment
上级意见: managementEffectivenessForm.superiorComment,
默认上级评分计算: `50 - ${classDeductionHalf} = ${defaultSuperiorScore}`
});
} else {
// 如果没有找到班级扣分指标,设置默认值
managementEffectivenessForm.classDeduction = 0;
managementEffectivenessForm.classDeductionHalf = 0;
managementEffectivenessForm.selfComment = '';
managementEffectivenessForm.superiorScore = 0; // 默认为0
managementEffectivenessForm.superiorScore = 50; // 默认为满分50分
managementEffectivenessForm.superiorComment = '';
console.warn('班级管理实效数据为空,使用默认值');
console.warn('班级管理实效数据为空,使用默认值,上级评分默认为满分50分');
}
// 初始化特色工作数据 - 确保包含所有必要字段
@@ -541,10 +543,10 @@ const loadApprovalDetail = async () => {
console.warn('特色工作数据为空或格式错误');
}
// 初始化月考核得分数据
// 初始化考核得分数据
monthlyScoreForm.selfOverallComment = approvalDetail.value?.selfOverallComment || '';
monthlyScoreForm.superiorOverallComment = approvalDetail.value?.superiorOverallComment || '';
console.log('月考核得分数据初始化:', {
console.log('考核得分数据初始化:', {
自我总体评价: monthlyScoreForm.selfOverallComment,
上级总体评价: monthlyScoreForm.superiorOverallComment,
计算得分: calculateMonthlyScore().toFixed(2)
@@ -202,17 +202,17 @@
</el-table>
</el-card>
<!-- 7. 月考核得分卡片 -->
<!-- 7. 考核得分卡片 -->
<el-card shadow="never" class="info-card">
<template #header>
<div class="card-header">
<span>月考核得分</span>
<span>考核得分</span>
</div>
</template>
<el-form label-width="100px" class="monthly-score-form">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="月考核得分">
<el-form-item label="考核得分">
<el-input :value="calculateMonthlyScore().toFixed(2)" readonly style="width: 100%; text-align: center" />
</el-form-item>
</el-col>
@@ -259,7 +259,7 @@
</el-tooltip>
</div>
</el-descriptions-item>
<el-descriptions-item label="月考核得分">
<el-descriptions-item label="考核得分">
{{ calculateMonthlyScore().toFixed(2) }}分
</el-descriptions-item>
<el-descriptions-item label="审批时间">
@@ -343,7 +343,7 @@ const managementEffectivenessData = reactive({
superiorComment: ''
});
// 月考核得分数据
// 考核得分数据
const monthlyScoreData = reactive({
selfOverallComment: '',
superiorOverallComment: ''
@@ -409,7 +409,7 @@ const formatNumber = (value?: number | string, precision = 4) => {
return numValue.toFixed(precision);
};
/** 计算月考核得分 */
/** 计算考核得分 */
const calculateMonthlyScore = () => {
// 总系数(K)
const totalCoefficient = viewDetail.value?.coefficient?.totalCoefficient || 0;
@@ -423,7 +423,7 @@ const calculateMonthlyScore = () => {
// 特色工作上级评分之和(查看界面显示最终审批结果,使用上级评分)
const specialWorkTotal = specialWorkScores.value.reduce((sum, item) => sum + (item.superiorScore || 0), 0);
// 月考核得分 = 总系数(K)* (班主任常规工作上级评分之和 + 班级管理实效上级评分 + 特色工作上级评分之和)
// 考核得分 = 总系数(K)* (班主任常规工作上级评分之和 + 班级管理实效上级评分 + 特色工作上级评分之和)
return totalCoefficient * (routineWorkTotal + managementEffectivenessScore + specialWorkTotal);
};
@@ -431,7 +431,7 @@ const calculateMonthlyScore = () => {
const calculateEvaluationLevel = () => {
const score = calculateMonthlyScore();
console.log('=== 📊 评价等级计算调试 ===');
console.log('💯 月考核得分:', score);
console.log('💯 考核得分:', score);
console.log('📈 是否有统计数据:', !!evaluationStats.value);
console.log('👤 当前用户ID:', currentRow.value?.evaluatedUserId);
@@ -683,10 +683,10 @@ const loadViewDetail = async () => {
console.warn('特色工作数据为空或格式错误');
}
// 初始化月考核得分数据
// 初始化考核得分数据
monthlyScoreData.selfOverallComment = viewDetail.value?.selfOverallComment || '';
monthlyScoreData.superiorOverallComment = viewDetail.value?.superiorOverallComment || '';
console.log('月考核得分数据初始化:', {
console.log('考核得分数据初始化:', {
自我总体评价: monthlyScoreData.selfOverallComment,
上级总体评价: monthlyScoreData.superiorOverallComment,
计算得分: calculateMonthlyScore().toFixed(2)
@@ -280,17 +280,17 @@
</el-form>
</el-card>
<!-- 7. 月考核得分卡片 -->
<!-- 7. 考核得分卡片 -->
<el-card shadow="never" class="info-card">
<template #header>
<div class="card-header">
<span>月考核得分</span>
<span>考核得分</span>
</div>
</template>
<el-form :model="monthlyScoreForm" label-width="100px" class="monthly-score-form">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="月考核得分">
<el-form-item label="考核得分">
<el-input :value="calculateMonthlyScore().toFixed(2)" readonly style="width: 100%; text-align: center" />
</el-form-item>
</el-col>
@@ -455,7 +455,7 @@ const specialWorkForm = reactive({
totalScore: 0
});
// 月考核得分表单
// 考核得分表单
const monthlyScoreForm = reactive({
overallComment: ''
});
@@ -509,7 +509,7 @@ const calculateTotalSpecialScore = () => {
(specialWorkForm.score1 || 0) + (specialWorkForm.score2 || 0) + (specialWorkForm.score3 || 0) + (specialWorkForm.score4 || 0);
};
/** 计算月考核得分 */
/** 计算考核得分 */
const calculateMonthlyScore = () => {
// 总系数(K)
const totalCoefficient = assessmentDetail.value?.coefficient?.totalCoefficient || 0;
@@ -523,8 +523,18 @@ const calculateMonthlyScore = () => {
// 特色工作总分值
const specialWorkTotal = specialWorkForm.totalScore || 0;
// 月考核得分 = 总系数(K)* (班主任常规工作自评分之和 - 按班级扣分50%计的分值 + 特色工作总分值)
return totalCoefficient * (routineWorkTotal - deductionHalf + specialWorkTotal);
// 检查是否有实际评分数据(避免空白状态显示50分)
const hasAnyScore = routineWorkTotal > 0 || deductionHalf > 0 || specialWorkTotal > 0;
if (!hasAnyScore || totalCoefficient === 0) {
return 0; // 没有评分数据时显示0
}
// 班级扣分项满分值(固定50分)- 仅在有评分数据时计算
const classDeductionMaxScore = 50;
// 修正后的考核得分公式 = 总系数(K)* ((班主任常规工作自评分之和 + 班级扣分项满分值) - 按班级扣分50%计的分值 + 特色工作总分值)
return totalCoefficient * ((routineWorkTotal + classDeductionMaxScore) - deductionHalf + specialWorkTotal);
};
/** 打开弹窗 */
@@ -609,7 +619,7 @@ const loadAssessmentDetail = async () => {
// 确保特色工作总分重新计算
calculateTotalSpecialScore();
// 初始化月考核得分数据
// 初始化考核得分数据
monthlyScoreForm.overallComment = assessmentDetail.value?.overallComment || '';
// 详细的调试信息:验证数据是否正确加载
@@ -978,7 +988,7 @@ defineExpose({
}
}
/* 月考核得分表单样式优化 */
/* 考核得分表单样式优化 */
:deep(.monthly-score-form) {
.el-form-item__label {
text-align: center;
@@ -256,17 +256,17 @@
</template>
</el-card>
<!-- 7. 月考核得分卡片 -->
<!-- 7. 考核得分卡片 -->
<el-card shadow="never" class="info-card">
<template #header>
<div class="card-header">
<span>月考核得分</span>
<span>考核得分</span>
</div>
</template>
<!-- 提交模式:简单显示 -->
<template v-if="viewMode === 'submit'">
<el-descriptions :column="1" border>
<el-descriptions-item label="月考核得分">
<el-descriptions-item label="考核得分">
<div class="monthly-score">{{ formatNumber(calculateMonthlyScore(), 2) }}</div>
</el-descriptions-item>
<el-descriptions-item label="总体评价">
@@ -279,7 +279,7 @@
<el-form label-width="100px" class="monthly-score-form">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="月考核得分">
<el-form-item label="考核得分">
<el-input :value="calculateMonthlyScore().toFixed(2)" readonly style="width: 100%; text-align: center; height: 24px;" />
</el-form-item>
</el-col>
@@ -325,7 +325,7 @@
</el-tooltip>
</div>
</el-descriptions-item>
<el-descriptions-item label="月考核得分">
<el-descriptions-item label="考核得分">
{{ calculateMonthlyScore().toFixed(2) }}分
</el-descriptions-item>
<el-descriptions-item label="审批时间">
@@ -556,12 +556,12 @@ const specialWorkForm = reactive({
totalScore: 0
});
// 月考核得分表单(只读)
// 考核得分表单(只读)
const monthlyScoreForm = reactive({
overallComment: ''
});
// 审批模式下的月考核得分数据
// 审批模式下的考核得分数据
const approvalMonthlyScoreData = reactive({
selfOverallComment: '',
superiorOverallComment: ''
@@ -632,7 +632,7 @@ const formatNumber = (value?: number | string, precision = 4) => {
return numValue.toFixed(precision);
};
/** 计算月考核得分 */
/** 计算考核得分 */
const calculateMonthlyScore = () => {
if (viewMode.value === 'approval') {
// 审批模式:使用上级评分计算
@@ -648,7 +648,7 @@ const calculateMonthlyScore = () => {
// 特色工作上级评分之和
const specialWorkTotal = approvalSpecialWorkScores.value.reduce((sum, item) => sum + (item.superiorScore || 0), 0);
// 月考核得分 = 总系数(K)* (班主任常规工作上级评分之和 + 班级管理实效上级评分 + 特色工作上级评分之和)
// 考核得分 = 总系数(K)* (班主任常规工作上级评分之和 + 班级管理实效上级评分 + 特色工作上级评分之和)
return totalCoefficient * (routineWorkTotal + managementEffectivenessScore + specialWorkTotal);
} else {
// 提交模式:使用自评分计算
@@ -664,8 +664,18 @@ const calculateMonthlyScore = () => {
// 特色工作总分值
const specialWorkTotal = specialWorkForm.totalScore || 0;
// 月考核得分 = 总系数(K)* (班主任常规工作自评分之和 - 按班级扣分50%计的分值 + 特色工作总分值)
return totalCoefficient * (routineWorkTotal - deductionHalf + specialWorkTotal);
// 检查是否有实际评分数据(避免空白状态显示50分)
const hasAnyScore = routineWorkTotal > 0 || deductionHalf > 0 || specialWorkTotal > 0;
if (!hasAnyScore || totalCoefficient === 0) {
return 0; // 没有评分数据时显示0
}
// 班级扣分项满分值(固定50分)- 仅在有评分数据时计算
const classDeductionMaxScore = 50;
// 修正后的考核得分公式 = 总系数(K)* ((班主任常规工作自评分之和 + 班级扣分项满分值) - 按班级扣分50%计的分值 + 特色工作总分值)
return totalCoefficient * ((routineWorkTotal + classDeductionMaxScore) - deductionHalf + specialWorkTotal);
}
};
@@ -673,7 +683,7 @@ const calculateMonthlyScore = () => {
const calculateEvaluationLevel = () => {
const score = calculateMonthlyScore();
console.log('=== 📊 评价等级计算调试 ===');
console.log('💯 月考核得分:', score);
console.log('💯 考核得分:', score);
console.log('📈 是否有统计数据:', !!evaluationStats.value);
if (evaluationStats.value) {
@@ -899,10 +909,10 @@ const loadApprovalDetail = async () => {
console.log('审批模式 - 特色工作数据初始化完成,条目数量:', approvalSpecialWorkScores.value.length);
}
// 初始化月考核得分数据
// 初始化考核得分数据
approvalMonthlyScoreData.selfOverallComment = approvalDetail.value?.selfOverallComment || '';
approvalMonthlyScoreData.superiorOverallComment = approvalDetail.value?.superiorOverallComment || '';
console.log('审批模式 - 月考核得分数据初始化完成');
console.log('审批模式 - 考核得分数据初始化完成');
// 获取评价等级统计数据
try {
@@ -976,7 +986,7 @@ const loadAssessmentDetail = async () => {
specialWorkForm.totalScore =
(specialWorkForm.score1 || 0) + (specialWorkForm.score2 || 0) + (specialWorkForm.score3 || 0) + (specialWorkForm.score4 || 0);
// 初始化月考核得分数据
// 初始化考核得分数据
monthlyScoreForm.overallComment = assessmentDetail.value?.overallComment || '';
console.log('=== 查看考核数据加载完成 ===');