package cn.flightfeather.supervision.business.autooutput.score
|
|
import cn.flightfeather.supervision.business.autooutput.datasource.AopDataSource
|
import cn.flightfeather.supervision.common.utils.DateUtil
|
import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
|
import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
|
import cn.flightfeather.supervision.domain.ds1.mapper.ProblemlistMapper
|
import org.springframework.beans.factory.annotation.Autowired
|
import tk.mybatis.mapper.entity.Example
|
import kotlin.math.abs
|
|
/**
|
* 自动评分条目
|
*/
|
abstract class ScoreItem() {
|
|
//自动评分条目id
|
abstract var id: String
|
//自动评分条目名称
|
abstract var name:String
|
//最大分值
|
var maxScore: Int = 0
|
//最小分值(默认0分)
|
var minScore: Int = 0
|
|
val dateUtil = DateUtil()
|
// 评分项是否豁免不扣分
|
var exemption = false
|
|
lateinit var evaluationScene: AopDataSource.EvaluationScene
|
|
private var rulePair: Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>? = null
|
|
@Autowired
|
lateinit var problemlistMapper: ProblemlistMapper
|
|
/**
|
* 只执行特殊扣分逻辑
|
*/
|
fun execute(evaluationScene: AopDataSource.EvaluationScene) {
|
this.evaluationScene = evaluationScene
|
if (!exemption && !evaluationScene.noRecord()) {
|
getRule(evaluationScene.rules.value)
|
calScore()
|
}
|
}
|
|
/**
|
* 获取评分规则
|
*/
|
private fun getRule(eList: MutableList<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>?) {
|
if (eList == null) return
|
for (e in eList) {
|
if (e.first.guid == id) {
|
rulePair = e
|
e.first.maxscore?.let { maxScore = it }
|
e.first.minscore?.let { minScore = it }
|
e.second.sortBy { it.displayid }
|
break
|
}
|
}
|
}
|
|
/**
|
* 根据系统外获取的信息,进行扣分判定。返回需要扣分的条目序号
|
* @param size 传入评分条目的数量,评分条目按照一定规则进行排序
|
* @return 返回需要扣分的评分条目的序号
|
*/
|
abstract fun otherProblem(size: Int): Int?
|
|
/**
|
* 自动评分计算逻辑
|
*/
|
fun calScore() {
|
if (rulePair?.second == null || rulePair?.second?.isEmpty() == true) {
|
println("${name}: 评分条目为空,不做评分")
|
return
|
}
|
|
otherProblem(rulePair?.second!!.size)?.let {i-> rulePair?.second!![i].getScore() }
|
|
ScoreUtil.subRuleCal(rulePair)
|
}
|
|
/**
|
* 减分模式下,计算具体选项的得分
|
*/
|
fun Evaluationsubrule2.getScore() {
|
extension1 = (0 - (maxscore ?: 0)).toString()
|
}
|
}
|