| | |
| | | import com.github.pagehelper.PageHelper |
| | | import org.springframework.stereotype.Service |
| | | import tk.mybatis.mapper.entity.Example |
| | | import java.time.LocalDateTime |
| | | import java.util.* |
| | | import javax.servlet.http.HttpServletResponse |
| | | |
| | |
| | | return evaluationMapper.selectByExample(example) |
| | | } |
| | | |
| | | override fun getHistoryPoint(userId: String, page: Int, per_page: Int, response: HttpServletResponse): List<AssessmentGradeVo> { |
| | | override fun getHistoryPoint(userId: String, page: Int, per_page: Int, platform:String?, response: HttpServletResponse): List<AssessmentGradeVo> { |
| | | val userInfo = userinfoMapper.selectByPrimaryKey(userId) ?: return emptyList() |
| | | |
| | | // FIXME: 2022/11/8 临时添加过度功能,提供微信小程序前端汽修类型的场景单独的评估清单 ,场景类型为 -7 |
| | | var sceneType = userInfo.extension2 |
| | | if (platform == "weixin" && sceneType == SceneType.VehicleRepair.value.toString()) { |
| | | sceneType = "-7" |
| | | } |
| | | //评分规则下的分级、等级颜色及等级评语 |
| | | val pointLevel = mutableListOf<Pair<Int, Int>>() |
| | | val evaluateLevel = mutableListOf<String>() |
| | | val creditTexts = mutableListOf<String>() |
| | | val levelColors = mutableListOf<String>() |
| | | val rule = evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply { |
| | | createCriteria().andEqualTo("scensetypeid", userInfo.extension2) |
| | | createCriteria().andEqualTo("scensetypeid", sceneType) |
| | | .andEqualTo("ruletype", "0") |
| | | }) |
| | | if (rule.isNotEmpty()) { |
| | |
| | | resultList.add(AssessmentGradeVo().apply { |
| | | this.userId = userId |
| | | userRealName = userInfo.realname |
| | | sceneType = userInfo.extension2?.toIntOrNull() ?: SceneType.NoType.value |
| | | this.sceneType = userInfo.extension2?.toIntOrNull() ?: SceneType.NoType.value |
| | | tPGuid = it.guid |
| | | tPRuleGuid = it.stguid |
| | | totalPoint = it.resultscorebef?.toInt() ?: 0 |
| | |
| | | override fun getCreditInfo(userId: String): CreditInfoVo { |
| | | val userinfo = userinfoMapper.selectByPrimaryKey(userId) |
| | | val baseInfo = baseInfoMapper.selectByPrimaryKey(userId) |
| | | ?: return CreditInfoVo( |
| | | userId, userinfo.realname,userinfo.extension2?.toIntOrNull() ?: SceneType.NoType.value) |
| | | val company = companyMapper.selectByPrimaryKey(baseInfo.ciGuid) |
| | | |
| | | |
| | | val result = CreditInfoVo( |
| | | userId, |
| | | baseInfo.biName, |
| | | baseInfo?.biName, |
| | | userinfo.extension2?.toIntOrNull() ?: SceneType.NoType.value, |
| | | baseInfo.ciName, |
| | | baseInfo.biManagementCompany, |
| | | baseInfo.biContact, |
| | | baseInfo.biTelephone, |
| | | baseInfo.biAddress, |
| | | district = company.ciDistrictName, |
| | | town = company.ciTownName |
| | | baseInfo?.ciName, |
| | | baseInfo?.biManagementCompany, |
| | | baseInfo?.biContact, |
| | | baseInfo?.biTelephone, |
| | | baseInfo?.biAddress, |
| | | district = company?.ciDistrictName, |
| | | town = company?.ciTownName |
| | | ) |
| | | |
| | | val rule = evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply { |
| | |
| | | }).takeIf { it.isNotEmpty() }?.get(0) ?: return result |
| | | |
| | | val overallEvaluation = overallEvaluationMapper.selectByExample(Example(OverallEvaluation::class.java).apply { |
| | | createCriteria().andEqualTo("biGuid", baseInfo.biGuid) |
| | | createCriteria().andEqualTo("biGuid", baseInfo?.biGuid) |
| | | orderBy("oePublishTime").desc() |
| | | }).takeIf { it.isNotEmpty() }?.get(0) ?: return result |
| | | |
| | |
| | | |
| | | override fun uploadScore(userId: String, period: String, ruleId: String?, itemList: List<Pair<String, String>>): Boolean { |
| | | val userinfo = userinfoMapper.selectByPrimaryKey(userId) ?: return false |
| | | var sceneType = userinfo.extension2 |
| | | |
| | | // FIXME: 2022/11/8 临时添加过度功能,提供微信小程序前端汽修类型的场景单独的评估清单 ,场景类型为 -7 |
| | | if (sceneType == SceneType.VehicleRepair.value.toString()) { |
| | | sceneType = "-7" |
| | | } |
| | | |
| | | //该场景类型下的总得分规则 |
| | | val tRule = evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply { |
| | | createCriteria().andEqualTo("scensetypeid", userinfo.extension2) |
| | | createCriteria().andEqualTo("scensetypeid", sceneType) |
| | | .andEqualTo("ruletype", AssessmentRuleType.Total.value) |
| | | .andIsNull("tasktypeid") |
| | | }).takeIf { it.isNotEmpty() }?.get(0) |
| | |
| | | // } |
| | | |
| | | val ruleList = evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply { |
| | | createCriteria().andEqualTo("scensetypeid", userinfo.extension2) |
| | | createCriteria().andEqualTo("scensetypeid", sceneType) |
| | | .andNotEqualTo("ruletype", AssessmentRuleType.Total.value) |
| | | .andIsNull("tasktypeid") |
| | | }).forEach {rule-> |
| | |
| | | //总得分 |
| | | var totalScore = 0 |
| | | |
| | | //根据上传的选择的条目,生成对应的评分记录 |
| | | itemList.forEach { |
| | | for (s in subRules) { |
| | | if (s.guid == it.first) { |
| | |
| | | } |
| | | } |
| | | } while (fatherId?.isNotBlank() == true) |
| | | |
| | | totalScore += it.second.toInt() |
| | | break |
| | | } |
| | | } |
| | |
| | | //总分 |
| | | var maxScore = 0 |
| | | subRules.forEach subRules@{s -> |
| | | if (s.ertype == 2) { |
| | | //计算应得总分,basic_score:表示基础分,计算在应得总分内;addition_score表示加分,不计算在内 |
| | | if (s.ertype == 2 && s.extension1 != "addition_score") { |
| | | maxScore += s.maxscore ?: 0 |
| | | } |
| | | //规则已经打分完毕,则跳过 |
| | | itemEvaluationList.forEach {i -> |
| | | if (i.esrguid == s.guid) { |
| | | //如果是最大的2级评估规则,计算已获得的总分 |
| | | if (s.ertype == 2) { |
| | | totalScore += i.value?.toInt() ?: 0 |
| | | } |
| | | return@subRules |
| | | } |
| | | } |
| | | //否则新增一条未扣分的记录 |
| | | //否则如果前端允许不用全部评分,新增一条未评分的记录 |
| | | itemEvaluationList.add(Itemevaluation().apply { |
| | | ieguid = UUIDGenerator.generate16ShortUUID() |
| | | iguid = userId |
| | |
| | | } |
| | | |
| | | override fun getDetail(userId: String, period: String): GradeDetailVo { |
| | | val list = period.split("-") |
| | | val endM = list[1].toInt() |
| | | val list2 = list[0].split("/") |
| | | val year = list2[0].toInt() |
| | | val startM = list2[1].toInt() |
| | | val st = LocalDateTime.of(year, startM, 1, 0, 0, 0, 0) |
| | | val et = LocalDateTime.of(year, endM, 1, 0, 0, 0, 0).plusMonths(1) |
| | | |
| | | val result = GradeDetailVo() |
| | | |
| | | val userinfo = userinfoMapper.selectByPrimaryKey(userId) ?: return result |
| | | var sceneType = userinfo.extension2 |
| | | // FIXME: 2022/11/8 临时添加过度功能,提供微信小程序前端汽修类型的场景单独的评估清单 ,场景类型为 -7 |
| | | if (sceneType == SceneType.VehicleRepair.value.toString()) { |
| | | sceneType = "-7" |
| | | } |
| | | |
| | | //该场景类型下的所有得分规则 |
| | | var rule0: Evaluationrule? = null |
| | | val rule1List = mutableListOf<Evaluationrule>() |
| | | evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply { |
| | | createCriteria().andEqualTo("scensetypeid", userinfo.extension2) |
| | | and(createCriteria().orIsNull("tasktypeid").orNotEqualTo("tasktypeid", 1)) |
| | | }).forEach { |
| | | if (it.ruletype == AssessmentRuleType.Total.value.toString()) { |
| | | rule0 = it |
| | | } else { |
| | | rule1List.add(it) |
| | | } |
| | | } |
| | | if (rule0 == null) return result |
| | | // var rule0: Evaluationrule? = null |
| | | // val rule1List = mutableListOf<Evaluationrule>() |
| | | // evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply { |
| | | // createCriteria().andEqualTo("scensetypeid", sceneType) |
| | | // and(createCriteria().orIsNull("tasktypeid").orNotEqualTo("tasktypeid", 1)) |
| | | // }).forEach { |
| | | // if (it.ruletype == AssessmentRuleType.Total.value.toString()) { |
| | | // rule0 = it |
| | | // } else { |
| | | // rule1List.add(it) |
| | | // } |
| | | // } |
| | | // if (rule0 == null) return result |
| | | //得分解读和得分详情 |
| | | evaluationMapper.selectByExample(Example(Evaluation::class.java).apply { |
| | | createCriteria().andEqualTo("iguid", userId) |
| | | .andEqualTo("ertype", AssessmentRuleType.Total.value.toByte()) |
| | | .andEqualTo("scensename", period) |
| | | }).takeIf { it.isNotEmpty() }?.get(0)?.let { |
| | | rule0?.apply { |
| | | val pointLevel = mutableListOf<Pair<Int, Int>>() |
| | | val evaluateLevel = mutableListOf<String>() |
| | | val creditTexts = mutableListOf<String>() |
| | | val levelColors = mutableListOf<String>() |
| | | extension1?.split("#")?.forEach { |
| | | val pStr = it.split(",") |
| | | pointLevel.add(Pair(pStr[0].toInt(), pStr[1].toInt())) |
| | | } |
| | | extension2?.split("#")?.forEach { |
| | | evaluateLevel.add(it) |
| | | } |
| | | extension3?.split("#")?.forEach { |
| | | creditTexts.add(it) |
| | | } |
| | | remark?.split(";")?.forEach { |
| | | levelColors.add(it) |
| | | } |
| | | // .andEqualTo("ertype", AssessmentRuleType.Total.value.toByte()) |
| | | and( |
| | | createCriteria().orEqualTo("scensename", period) |
| | | .orBetween("createdate", st, et) |
| | | ) |
| | | }).forEach {e -> |
| | | val rule = evaluationruleMapper.selectByPrimaryKey(e.stguid) |
| | | //总分规则,生成总体评价 |
| | | if (rule.ruletype == AssessmentRuleType.Total.value.toString()) { |
| | | rule?.apply { |
| | | val pointLevel = mutableListOf<Pair<Int, Int>>() |
| | | val evaluateLevel = mutableListOf<String>() |
| | | val creditTexts = mutableListOf<String>() |
| | | val levelColors = mutableListOf<String>() |
| | | extension1?.split("#")?.forEach { |
| | | val pStr = it.split(",") |
| | | pointLevel.add(Pair(pStr[0].toInt(), pStr[1].toInt())) |
| | | } |
| | | extension2?.split("#")?.forEach { |
| | | evaluateLevel.add(it) |
| | | } |
| | | extension3?.split("#")?.forEach { |
| | | creditTexts.add(it) |
| | | } |
| | | remark?.split(";")?.forEach { |
| | | levelColors.add(it) |
| | | } |
| | | |
| | | val l = getEvaluationLevel(it.resultscorebef?.toInt() |
| | | ?: 0, pointLevel, evaluateLevel, creditTexts, levelColors) |
| | | result.apply { |
| | | creditText = l["creditText"] |
| | | |
| | | score = it.resultscorebef?.toInt() ?: 0 |
| | | rank = it.promissednum |
| | | level = l["evaluateLevel"] |
| | | this.period = it.scensename |
| | | time = it.createdate |
| | | val l = getEvaluationLevel(e.resultscorebef?.toInt() |
| | | ?: 0, pointLevel, evaluateLevel, creditTexts, levelColors) |
| | | result.apply { |
| | | creditText = l["creditText"] |
| | | score = e.resultscorebef?.toInt() ?: 0 |
| | | rank = e.promissednum |
| | | level = l["evaluateLevel"] |
| | | this.period = period |
| | | time = e.createdate |
| | | // color = l["color"] |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //分类别的得分(每个评分表的评分大项的得分)和失分条目 |
| | | val ruleMap = result.loseScore |
| | | rule1List.forEach { |
| | | val evaluation = evaluationMapper.selectByExample(Example(Evaluation::class.java).apply { |
| | | createCriteria().andEqualTo("iguid", userId) |
| | | .andEqualTo("ertype", it.ruletype) |
| | | .andEqualTo("scensename", period) |
| | | }).takeIf { it.isNotEmpty() }?.get(0)?.let {e -> |
| | | //具体评估表 |
| | | else { |
| | | val subRules = evaluationsubruleMapper.selectByExample(Example(Evaluationsubrule::class.java).apply { |
| | | createCriteria().andEqualTo("erguid", it.guid) |
| | | createCriteria().andEqualTo("erguid", rule.guid) |
| | | }) |
| | | val itemEvaluations = itemevaluationService.getItemEvaluationList(e.guid!!) |
| | | |
| | | val ruleMap = result.loseScore |
| | | //分类别的得分(每个评分表的评分大项的得分)和失分条目 |
| | | itemEvaluations.sortedBy { it.ertype }.forEach {item -> |
| | | when (item.ertype) { |
| | | //分类别的得分 |
| | |
| | | for (s in subRules) { |
| | | if (s.guid == item.esrguid) { |
| | | val d = |
| | | Triple( |
| | | item.name ?: "", |
| | | if ((item.value?.toInt() ?: 0) < 0) { |
| | | item . value ?: "0" |
| | | } else { |
| | | (item.value?.toInt() ?: 0).minus(s.maxscore ?: 0).toString() |
| | | }, |
| | | s.remark ?: "" |
| | | ) |
| | | Triple( |
| | | item.name ?: "", |
| | | // if ((item.value?.toInt() ?: 0) < 0) { |
| | | // item.value ?: "0" |
| | | // } else { |
| | | // (item.value?.toInt() ?: 0).minus(s.maxscore ?: 0).toString() |
| | | // }, |
| | | item.value ?: "0", |
| | | s.remark ?: "" |
| | | ) |
| | | val rule3Name = s.fathername |
| | | for (s1 in subRules) { |
| | | if (s1.itemname == rule3Name) { |
| | | val rule2Name = s1.fathername |
| | | val rule2Name = |
| | | //父id为空,说明此4级评估项直接附属于2级评估项 |
| | | if (s1.fathername.isNullOrBlank()) { |
| | | ruleMap[rule3Name]?.put(rule3Name, mutableListOf()) |
| | | rule3Name |
| | | } else { |
| | | s1.fathername |
| | | } |
| | | ruleMap[rule2Name]?.get(rule3Name)?.add(d) |
| | | break |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | return result |
| | | } |
| | | |
| | | /** |
| | | * 根据上传的子规则扣分情况,生产子项得分记录 |
| | | * 根据上传的子规则扣分情况,生成子项得分记录 |
| | | * @param rule 总规则 |
| | | * @param eGuid 总分记录id |
| | | * @param userId 用户id |
| | |
| | | var result: Pair<String?, String?> = Pair(null, null) |
| | | var exist = false |
| | | for (i in itemEvaluationList) { |
| | | //记录已存在,说明是父项的评分规则下的某个子项的一部分扣分,扣分累加 |
| | | //记录已存在,说明是父项的评分规则下的某个子项的一部分扣分,扣分累加,并且不能超过父项的上限 |
| | | if (subRule.guid == i.esrguid) { |
| | | i.value = i.value?.toInt()?.plus(score.toInt())?.toString() |
| | | val s = i.value?.toInt()?.plus(score.toInt()) ?: 0 |
| | | //加分模式 |
| | | if (subRule.extension2 == "add_mode") { |
| | | if (s > (subRule.maxscore ?: 0)) { |
| | | i.value = subRule.maxscore?.toString() ?: "0" |
| | | } else { |
| | | i.value = s.toString() |
| | | } |
| | | } |
| | | //默认情况为减分模式 |
| | | else { |
| | | //允许扣除的分数最小值(负数) |
| | | val min = subRule.minscore?.minus(subRule.maxscore ?: 0) ?: 0 |
| | | if (s < min) { |
| | | i.value = min.toString() |
| | | } else { |
| | | i.value = s.toString() |
| | | } |
| | | } |
| | | result = Pair(subRule.fatherid, i.value) |
| | | exist = true |
| | | break |
| | |
| | | } |
| | | } else { |
| | | for (i in pointLevel.indices) { |
| | | if (score in pointLevel[i].first..pointLevel[i].second) { |
| | | if (score in pointLevel[i].first..pointLevel[i].second || |
| | | (i == pointLevel.size - 1 && score > pointLevel[i].second)) { |
| | | result["color"] = levelColors[i % levelColors.size] |
| | | result["creditText"] = creditTexts[i % creditTexts.size] |
| | | result["evaluateLevel"] = evaluateLevel[i % evaluateLevel.size] |