feiyu02
2022-06-28 5670e4a15fba292ef5f8fb90e96072de976bb621
1. 中小企业守法自助相关接口更新
已修改16个文件
已添加4个文件
860 ■■■■■ 文件已修改
src/main/kotlin/cn/flightfeather/supervision/domain/entity/LedgerRecord.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationService.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationsubruleService.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/EvaluationServiceImpl.kt 366 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/EvaluationsubruleServiceImpl.kt 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/LedgerServiceImpl.kt 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/UserinfoServiceImpl.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/LedgerService.kt 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AssessmentGradeVo.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/CopyLedgerVo.kt 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/EvaluationVo.kt 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/GradeDetailVo.kt 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/LedgerCheckVo.kt 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/LedgerSubTypeVo.kt 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationController.kt 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationsubruleController.kt 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/web/LedgerController.kt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LedgerRecordMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LedgerSubTypeMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/domain/entity/LedgerRecord.java
@@ -43,7 +43,7 @@
    private Byte lrEasubmitkind;
    @Column(name = "LR_VerifierID")
    private Integer lrVerifierid;
    private String lrVerifierid;
    @Column(name = "LR_VerifierRealName")
    private String lrVerifierrealname;
@@ -243,14 +243,14 @@
    /**
     * @return LR_VerifierID
     */
    public Integer getLrVerifierid() {
    public String getLrVerifierid() {
        return lrVerifierid;
    }
    /**
     * @param lrVerifierid
     */
    public void setLrVerifierid(Integer lrVerifierid) {
    public void setLrVerifierid(String lrVerifierid) {
        this.lrVerifierid = lrVerifierid;
    }
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationService.kt
@@ -4,6 +4,7 @@
import cn.flightfeather.supervision.lightshare.vo.AssessmentGradeVo
import cn.flightfeather.supervision.lightshare.vo.AssessmentSearchCondition
import cn.flightfeather.supervision.lightshare.vo.CreditInfoVo
import cn.flightfeather.supervision.lightshare.vo.GradeDetailVo
import javax.servlet.http.HttpServletResponse
@@ -27,4 +28,8 @@
    fun getAssessments(userId: String, condition: AssessmentSearchCondition, page: Int, perPage: Int, response: HttpServletResponse): List<AssessmentGradeVo>
    fun autoScore(year: Int, month: Int, sceneType: Int, response: HttpServletResponse): HttpServletResponse
    fun uploadScore(userId: String, period: String, ruleId: String?, itemList: List<Pair<String, String>>): Boolean
    fun getDetail(userId: String, period: String): GradeDetailVo
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationsubruleService.kt
@@ -1,6 +1,7 @@
package cn.flightfeather.supervision.lightshare.service
import cn.flightfeather.supervision.domain.entity.Evaluationsubrule
import cn.flightfeather.supervision.lightshare.vo.EvaluationVo
interface EvaluationsubruleService {
@@ -16,4 +17,6 @@
    fun findByRuleId(erguid: String): List<Evaluationsubrule>
    fun getScore(userId:String, time: String):List<EvaluationVo>
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/EvaluationServiceImpl.kt
@@ -1,18 +1,18 @@
package cn.flightfeather.supervision.lightshare.service.Impl
import cn.flightfeather.supervision.common.score.AutoScore
import cn.flightfeather.supervision.domain.entity.Company
import cn.flightfeather.supervision.domain.entity.Evaluation
import cn.flightfeather.supervision.domain.entity.Evaluationrule
import cn.flightfeather.supervision.domain.entity.OverallEvaluation
import cn.flightfeather.supervision.domain.entity.*
import cn.flightfeather.supervision.domain.enumeration.AssessmentRuleType
import cn.flightfeather.supervision.domain.enumeration.SceneType
import cn.flightfeather.supervision.domain.mapper.*
import cn.flightfeather.supervision.infrastructure.utils.DateUtil
import cn.flightfeather.supervision.infrastructure.utils.UUIDGenerator
import cn.flightfeather.supervision.lightshare.service.EvaluationService
import cn.flightfeather.supervision.lightshare.service.ItemevaluationService
import cn.flightfeather.supervision.lightshare.vo.AssessmentGradeVo
import cn.flightfeather.supervision.lightshare.vo.AssessmentSearchCondition
import cn.flightfeather.supervision.lightshare.vo.CreditInfoVo
import cn.flightfeather.supervision.lightshare.vo.GradeDetailVo
import com.github.pagehelper.PageHelper
import org.springframework.stereotype.Service
import tk.mybatis.mapper.entity.Example
@@ -23,11 +23,13 @@
class EvaluationServiceImpl(
        val evaluationMapper: EvaluationMapper,
        val evaluationruleMapper: EvaluationruleMapper,
        val evaluationsubruleMapper: EvaluationsubruleMapper,
        val userinfoMapper: UserinfoMapper,
        val baseInfoMapper: BaseInfoMapper,
        val companyMapper: CompanyMapper,
        val overallEvaluationMapper: OverallEvaluationMapper,
        val autoScore: AutoScore
        val autoScore: AutoScore,
        val itemevaluationService: ItemevaluationService
) : EvaluationService {
    override fun findOne(id: String): Evaluation = evaluationMapper.selectByPrimaryKey(id)
@@ -75,13 +77,39 @@
    override fun getHistoryPoint(userId: String, page: Int, per_page: Int, response: HttpServletResponse): List<AssessmentGradeVo> {
        val userInfo = userinfoMapper.selectByPrimaryKey(userId) ?: return emptyList()
        //评分规则下的分级、等级颜色及等级评语
        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)
                .andEqualTo("ruletype", "0")
        })
        if (rule.isNotEmpty()) {
            val r = rule[0]
            r.extension1?.split("#")?.forEach {
                val pStr = it.split(",")
                pointLevel.add(Pair(pStr[0].toInt(), pStr[1].toInt()))
            }
            r.extension2?.split("#")?.forEach {
                evaluateLevel.add(it)
            }
            r.extension3?.split("#")?.forEach {
                creditTexts.add(it)
            }
            r.remark?.split(";")?.forEach {
                levelColors.add(it)
            }
        }
        val example = Example(Evaluation::class.java).apply {
            createCriteria().andEqualTo("iguid", userId)
                    .andEqualTo("ertype", AssessmentRuleType.Total.value.toByte())
            //根据评估人的类型进行筛选,自评和官方评分分开排名
            and(createCriteria().orIsNull("evaluatorrealname")
                    .orEqualTo("evaluatorrealname", 0))
            orderBy("updatedate").desc()
            orderBy("createdate").desc()
        }
        val counts = evaluationMapper.selectCountByExample(example)
        val totalPage = Math.ceil(counts.toDouble() / per_page.toDouble()).toInt()
@@ -100,9 +128,13 @@
                tPGuid = it.guid
                tPRuleGuid = it.stguid
                totalPoint = it.resultscorebef?.toInt() ?: 0
                level = getEvaluationLevel(tPRuleGuid, totalPoint)
                val l = getEvaluationLevel(totalPoint, pointLevel, evaluateLevel, creditTexts, levelColors)
                level = l["evaluateLevel"]
                color = l["color"]
                creditText = l["creditText"]
                rank = it.promissednum ?: 1
                updateDate = it.updatedate
                updateDate = it.createdate
                period = it.scensename
            })
        }
@@ -202,7 +234,7 @@
                    tPGuid = it["tPGuid"] as String?
                    tPRuleGuid = it["tPRuleGuid"] as String?
                    totalPoint = (it["totalPoint"] as String?)?.toIntOrNull() ?: 0
                    level = getEvaluationLevel(tPRuleGuid, totalPoint)
                    level = getEvaluationLevel(totalPoint)["evaluateLevel"]
                    rank = (it["rank"] as Int?) ?: -1
                    updateDate = it["updateDate"] as Date?
                })
@@ -220,18 +252,317 @@
        return response
    }
    override fun uploadScore(userId: String, period: String, ruleId: String?, itemList: List<Pair<String, String>>): Boolean {
        val userinfo = userinfoMapper.selectByPrimaryKey(userId) ?: return false
        //该场景类型下的总得分规则
        val tRule = evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
            createCriteria().andEqualTo("scensetypeid", userinfo.extension2)
                .andEqualTo("ruletype", AssessmentRuleType.Total.value)
                .andIsNull("tasktypeid")
        }).takeIf { it.isNotEmpty() }?.get(0)
        var totalPoint = 0
        var tEvaluation = Evaluation()
        //上传的得分规则
//        var rule = Evaluationrule()
//        val subRules:List<Evaluationsubrule> = if (ruleId != null) {
//            rule = evaluationruleMapper.selectByPrimaryKey(ruleId)
//            evaluationsubruleMapper.selectByExample(Example(Evaluationsubrule::class.java).apply {
//                createCriteria().andEqualTo("erguid", ruleId)
//            })
//        }
        val ruleList = evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
            createCriteria().andEqualTo("scensetypeid", userinfo.extension2)
                    .andNotEqualTo("ruletype", AssessmentRuleType.Total.value)
                .andIsNull("tasktypeid")
        }).forEach {rule->
            val subRules = evaluationsubruleMapper.selectByExample(Example(Evaluationsubrule::class.java).apply {
                createCriteria().andEqualTo("erguid", rule.guid)
            })
            if (subRules.isEmpty()) return@forEach
            //总分记录
            val evaluation = Evaluation().apply { guid = UUIDGenerator.generate16ShortUUID() }
            //具体项得分记录
            val itemEvaluationList = mutableListOf<Itemevaluation>()
            //总得分
            var totalScore = 0
            itemList.forEach {
                for (s in subRules) {
                    if (s.guid == it.first) {
                        var fatherId: String?
                        var subRule = s
                        var score = it.second
                        do {
                            val result = calculateScore(rule, evaluation.guid!!, userId, subRule, score, itemEvaluationList)
                            fatherId = result.first
                            for (s in subRules) {
                                if (s.guid == fatherId) {
                                    subRule = s
                                    score = result.second ?: "0"
                                    break
                                }
                            }
                        } while (fatherId?.isNotBlank() == true)
                        totalScore += it.second.toInt()
                        break
                    }
                }
            }
            //总分
            var maxScore = 0
            subRules.forEach subRules@{s ->
                if (s.ertype == 2) {
                    maxScore += s.maxscore ?: 0
                }
                //规则已经打分完毕,则跳过
                itemEvaluationList.forEach {i ->
                    if (i.esrguid == s.guid) {
                        return@subRules
                    }
                }
                //否则新增一条未扣分的记录
                itemEvaluationList.add(Itemevaluation().apply {
                    ieguid = UUIDGenerator.generate16ShortUUID()
                    iguid = userId
                    sguid = evaluation.guid
                    erguid = rule.guid
                    rulename = rule.rulename
                    ruletype = rule.ruletype?.toInt()
                    ertype = s.ertype
                    esrguid = s.guid
                    name = s.itemname
                    value = "0"
                    extension1 = "false"
                })
            }
            //计算总分
            evaluation.apply {
                iguid = userId
                stguid = rule.guid
                scensetypeid = userinfo.extension2?.toByte()
                ertype = rule.ruletype?.toByte()
                scensename = period
                evaluatorguid = userId
                evaluatorusername = userinfo.acountname
                evaluatorrealname = "0"
                resultscorebef = (maxScore + totalScore).toString()
                createdate = Date()
                updatedate = Date()
            }
            save(evaluation)
            itemevaluationService.savelist(itemEvaluationList)
            tEvaluation = evaluation
            totalPoint += evaluation.resultscorebef?.toInt() ?: 0
        }
        //计算所有表的总分
        tRule?.let {
            tEvaluation.apply {
                guid = UUIDGenerator.generate16ShortUUID()
                stguid = it.guid
                ertype = it.ruletype?.toByte()
                resultscorebef = totalPoint.toString()
            }
            save(tEvaluation)
        }
        return true
    }
    override fun getDetail(userId: String, period: String): GradeDetailVo {
        val result = GradeDetailVo()
        val userinfo = userinfoMapper.selectByPrimaryKey(userId) ?: return result
        //该场景类型下的所有得分规则
        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
        //得分解读和得分详情
        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)
                }
                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
//                    color = l["color"]
                }
            }
        }
        //分类别的得分(每个评分表的评分大项的得分)和失分条目
        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 ->
                val subRules = evaluationsubruleMapper.selectByExample(Example(Evaluationsubrule::class.java).apply {
                    createCriteria().andEqualTo("erguid", it.guid)
                })
                val itemEvaluations = itemevaluationService.getItemEvaluationList(e.guid!!)
                itemEvaluations.forEach {item ->
                    when (item.ertype) {
                        //分类别的得分
                        2 -> {
                            for (s in subRules) {
                                if (s.guid == item.esrguid) {
                                    val score = if ((item.value?.toInt() ?: 0) <= 0) {
                                        s.maxscore?.plus(item.value?.toInt() ?: 0)
                                    } else {
                                        item.value?.toInt() ?: 0
                                    }
                                    result.classScore.add(Triple(item.name ?: "", s.maxscore?.toString()?:"0", score.toString()))
                                    break
                                }
                            }
                        }
                        //失分条目
                        4 -> {
                            if ((item.value?.toInt() ?: 0) != 0 && item.extension1 == "true") {
                                for (s in subRules) {
                                    if (s.guid == item.esrguid) {
                                        result.loseScore.add(
                                            Triple(
                                                item.name ?: "",
                                                if ((item.value?.toInt() ?: 0) < 0) {
                                                    item . value ?: "0"
                                                } else {
                                                    (item.value?.toInt() ?: 0).minus(s.maxscore ?: 0).toString()
                                                },
                                                s.remark ?: ""
                                            )
                                        )
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return result
    }
    /**
     * æ ¹æ®ä¸Šä¼ çš„子规则扣分情况,生产子项得分记录
     * @param rule æ€»è§„则
     * @param eGuid æ€»åˆ†è®°å½•id
     * @param userId ç”¨æˆ·id
     * @param subRule æ‰£åˆ†çš„规则
     * @param score æ‰£åˆ†
     * @param itemEvaluationList å¾—分记录表
     * @return è¯„分项的父id和得分
     */
    private fun calculateScore(rule:Evaluationrule, eGuid: String, userId: String, subRule: Evaluationsubrule, score: String, itemEvaluationList: MutableList<Itemevaluation>): Pair<String?, String?> {
        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()
                result = Pair(subRule.fatherid, i.value)
                exist = true
                break
            }
        }
        //记录不存在时,说明是子项第一次扣分,新增一条记录
        if (!exist) {
            itemEvaluationList.add(Itemevaluation().apply {
                ieguid = UUIDGenerator.generate16ShortUUID()
                iguid = userId
                sguid = eGuid
                erguid = rule.guid
                rulename = rule.rulename
                ruletype = rule.ruletype?.toInt()
                ertype = subRule.ertype
                esrguid = subRule.guid
                name = subRule.itemname
                value = score
                extension1 = "true"
            })
            result = Pair(subRule.fatherid, score)
        }
        return result
    }
    /**
     * æ ¹æ®åˆ†æ•°èŽ·å–ç­‰çº§
     */
    private fun getEvaluationLevel(ruleId:String?, score: Int): String {
        return when (score) {
            in 0..40 -> "极差"
            in 41..64 -> "较差"
            in 65..79 -> "一般"
            in 80..94 -> "良好"
            in 95..Int.MAX_VALUE -> "优秀"
            else -> "极差"
    private fun getEvaluationLevel(
        score: Int,
        pointLevel: MutableList<Pair<Int, Int>> = mutableListOf(),
        evaluateLevel: MutableList<String> = mutableListOf(),
        creditTexts: MutableList<String> = mutableListOf(),
        levelColors: MutableList<String> = mutableListOf()
    ): Map<String, String> {
        val result = mutableMapOf<String, String>()
        if (pointLevel.isEmpty() || evaluateLevel.isEmpty() || creditTexts.isEmpty() || levelColors.isEmpty()) {
            result["evaluateLevel"] =  when (score) {
                in 0..40 -> "极差"
                in 41..64 -> "较差"
                in 65..79 -> "一般"
                in 80..94 -> "良好"
                in 95..Int.MAX_VALUE -> "优秀"
                else -> "极差"
            }
        } else {
            for (i in pointLevel.indices) {
                if (score in pointLevel[i].first..pointLevel[i].second) {
                    result["color"] = levelColors[i % levelColors.size]
                    result["creditText"] = creditTexts[i % creditTexts.size]
                    result["evaluateLevel"] = evaluateLevel[i % evaluateLevel.size]
                }
            }
        }
        return result
    }
    private fun updateRank(evaluation: Evaluation, isInsert: Boolean) {
@@ -239,6 +570,7 @@
            val eList = evaluationMapper.selectByExample(Example(Evaluation::class.java).apply {
                createCriteria().andEqualTo("scensename", evaluation.scensename)
                        .andIsNotNull("scensename")
                    .andEqualTo("ertype", AssessmentRuleType.Total.value)
                //根据评估人的类型进行筛选,自评和官方评分封面开排名
                if (evaluation.evaluatorrealname == null || evaluation.evaluatorrealname == "0") {
                    and(createCriteria().orIsNull("evaluatorrealname")
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/EvaluationsubruleServiceImpl.kt
@@ -1,13 +1,25 @@
package cn.flightfeather.supervision.lightshare.service.Impl
import cn.flightfeather.supervision.domain.entity.Evaluation
import cn.flightfeather.supervision.domain.entity.Evaluationrule
import cn.flightfeather.supervision.domain.entity.Evaluationsubrule
import cn.flightfeather.supervision.domain.mapper.EvaluationsubruleMapper
import cn.flightfeather.supervision.domain.entity.Itemevaluation
import cn.flightfeather.supervision.domain.mapper.*
import cn.flightfeather.supervision.lightshare.service.EvaluationsubruleService
import cn.flightfeather.supervision.lightshare.vo.EvaluationVo
import cn.flightfeather.supervision.lightshare.vo.SubEvaluationVo
import cn.flightfeather.supervision.lightshare.vo.ThirdEvaluationVo
import org.springframework.stereotype.Service
import tk.mybatis.mapper.entity.Example
@Service
class EvaluationsubruleServiceImpl (val evaluationsubruleMapper: EvaluationsubruleMapper):EvaluationsubruleService {
class EvaluationsubruleServiceImpl(
        val evaluationsubruleMapper: EvaluationsubruleMapper,
        private val userinfoMapper: UserinfoMapper,
        private val evaluationruleMapper: EvaluationruleMapper,
        private val evaluationMapper: EvaluationMapper,
        private val itemevaluationMapper: ItemevaluationMapper
):EvaluationsubruleService {
    override fun findOne(id: String): Evaluationsubrule = evaluationsubruleMapper.selectByPrimaryKey(id)
@@ -25,4 +37,135 @@
        criteria.andEqualTo("erguid", erguid)
        return evaluationsubruleMapper.selectByExample(example)
    }
    override fun getScore(userId: String, time: String): List<EvaluationVo> {
        val userinfo = userinfoMapper.selectByPrimaryKey(userId) ?: return emptyList()
        val sceneType = userinfo.extension2
        //评分总规则
        val rules = evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
            createCriteria().andEqualTo("scensetypeid", sceneType)
//                    .andEqualTo("ruletype", "1")
                .andIsNull("tasktypeid")
        })
        if (rules.isEmpty()) return emptyList()
        val rIdList = mutableListOf<String?>()
        rules.forEach {
            rIdList.add(it.guid)
        }
        //总规则对应的评分子规则
        val subRules = mutableListOf<Evaluationsubrule>()
        val sr = evaluationsubruleMapper.selectByExample(Example(Evaluationsubrule::class.java).apply {
            createCriteria().andIn("erguid", rIdList)
            orderBy("ertype")
            orderBy("displayid")
        })
        subRules.addAll(sr)
        //总规则的得分
        val ruleScore = evaluationMapper.selectByExample(Example(Evaluation::class.java).apply {
            createCriteria().andIn("stguid", rIdList)//规则id
                    .andEqualTo("evaluatorguid", userId)//用户id
                    .andEqualTo("scensename", time)//评估周期,例:2020/6-6
        })
        //子规则逐条得分
        val subRuleScores = if (ruleScore.isEmpty()) {
            mutableListOf<Itemevaluation>()
        } else {
            val scoreIds = mutableListOf<String?>()
            ruleScore.forEach { scoreIds.add(it.guid) }
            itemevaluationMapper.selectByExample(Example(Itemevaluation::class.java).apply {
                createCriteria().andIn("sguid", scoreIds)
            })
        }
        val resultList = mutableListOf<EvaluationVo>()
        var _group = 0
        subRules.forEach {
            when (it.ertype) {
                2 -> resultList.add(EvaluationVo().apply {
                    id = it.guid
                    title1 = it.itemname
                    score = it.minscore?.minus(it.maxscore ?: 0) ?: 0
                    //如果有得分记录,则改变状态为选中
                    for (s in subRuleScores) {
                        if (it.guid == s.esrguid) {
                            select = s.extension1 == "true"
                            break
                        }
                    }
                })
                3 -> {
                    for (r in resultList) {
                        if (it.fatherid == r.id) {
                            r.sub1.add(SubEvaluationVo().apply {
                                id = it.guid
                                title2 = it.itemname
                                score = it.minscore?.minus(it.maxscore ?: 0) ?: 0
                                group = _group++
                                //如果有得分记录,则改变状态为选中
                                for (s in subRuleScores) {
                                    if (it.guid == s.esrguid) {
                                        select = s.extension1 == "true"
                                        break
                                    }
                                }
                            })
                            break
                        }
                    }
                }
                4 -> {
                    resultList.forEach{ r ->
                        if (r.id == it.fatherid) {
                            if (r.sub1.isEmpty()) {
                                r.sub1.add(SubEvaluationVo().apply {
                                    placeholder = true
                                    id = it.guid
                                    title2 = r.title1
                                    score = r.score
                                    group = _group++
                                })
                            }
                            r.sub1[0].sub2.add(ThirdEvaluationVo().apply {
                                id = it.guid
                                content = it.itemname
                                score = r.score.plus(it.maxscore ?: 0)
                                //如果有得分记录,则改变状态为选中
                                for (s in subRuleScores) {
                                    if (it.guid == s.esrguid) {
                                        select = s.extension1 == "true"
                                        break
                                    }
                                }
                            })
                        } else {
                            r.sub1.forEach { sr ->
                                if (sr.id == it.fatherid){
                                    sr.sub2.add(ThirdEvaluationVo().apply {
                                        id = it.guid
                                        content = it.itemname
                                        score = sr.score.plus(it.maxscore ?: 0)
                                        //如果有得分记录,则改变状态为选中
                                        for (s in subRuleScores) {
                                            if (it.guid == s.esrguid) {
                                                select = s.extension1 == "true"
                                                break
                                            }
                                        }
                                    })
                                }
                            }
                        }
                    }
                }
            }
        }
        return resultList
    }
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/LedgerServiceImpl.kt
@@ -13,8 +13,7 @@
import cn.flightfeather.supervision.infrastructure.utils.FileUtil
import cn.flightfeather.supervision.infrastructure.utils.UUIDGenerator
import cn.flightfeather.supervision.lightshare.service.LedgerService
import cn.flightfeather.supervision.lightshare.vo.LedgerSubTypeVo
import cn.flightfeather.supervision.lightshare.vo.LedgerVo
import cn.flightfeather.supervision.lightshare.vo.*
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.ObjectMapper
import com.github.pagehelper.PageHelper
@@ -66,19 +65,24 @@
        val resultList = mutableListOf<LedgerSubTypeVo>()
        ledgerSubTypes.forEach {
            val l = LedgerSubTypeVo(
                    it.lsSubtypeid,
                    it.lsName,
                    it.getlTypeid(),
                    it.getlTypename(),
                    needUpdate = it.getlNeedupdate(),
                    sceneType = it.getlScenetype(),
                    iconUrl = it.getlIconurl()
                it.lsSubtypeid,
                it.lsName,
                it.getlTypeid(),
                it.getlTypename(),
                needUpdate = it.getlNeedupdate(),
                sceneType = it.getlScenetype(),
                iconUrl = it.getlIconurl(),
                realTime = it.getlRealTime()
            )
            for (r in records) {
                if (l.ledgerSubTypeId == r.lsSubtypeid) {
                    l.ledgerFinished = true
                    l.upLoad = true
                    l.checkStatus = r.lrVerifyrst?.toIntOrNull() ?: LedgerCheckStatus.UnCheck.value
//                    l.checkStatus = r.lrVerifyrst?.toIntOrNull() ?: LedgerCheckStatus.UnCheck.value
                    l.verified
                    l.verifierName = r.lrVerifierrealname
                    l.verified = r.lrIsverify
                    l.verifyRst = l.verifyRst
                    break
                }
            }
@@ -373,4 +377,86 @@
        return records
    }
    override fun copyLedger(userId: String, time: String, copyLedgerList: List<CopyLedgerVo>): BaseResponse<String> {
        val year = time.split("-")[0]
        val month = time.split("-")[1]
        copyLedgerList.forEach {
            //去重判断
            val r = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
                createCriteria().andEqualTo("lrSubmitid", userId)
                    .andEqualTo("lsSubtypeid", it.subTypeId)
                    .andEqualTo("lrYear", year)
                    .andEqualTo("lrMonth", month)
            })
            if (r.size > 0) {
                return@forEach
            }
            val y = it.time?.split("-")?.get(0) ?: return@forEach
            val m = it.time?.split("-")?.get(1) ?: return@forEach
            ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
                createCriteria().andEqualTo("lrSubmitid", userId)
                    .andEqualTo("lsSubtypeid", it.subTypeId)
                    .andEqualTo("lrYear", y)
                    .andEqualTo("lrMonth", m)
            }).forEach record@ {lr ->
                //获取记录对应的文件信息
                val fileList = ledgerMediaFileMapper.selectByExample(Example(LedgerMediaFile::class.java).apply {
                    createCriteria().andEqualTo("lrGuid", lr.lrGuid)
                })
                if (fileList.size == 0) return@record
                val file = fileList[0] ?: return@record
                //修改记录信息,复制为新的台账
                lr.lrGuid = UUIDGenerator.generate16ShortUUID()
                lr.lrYear = year.toInt()
                lr.lrMonth = month.toByte()
                lr.lrIssubmitontime = true
                lr.lrSubmitdate = Date()
                lr.lrExtension2 = "copy"//表明是复制的台账
                ledgerRecordMapper.insert(lr)
                //修改对应的文件信息
                file.apply {
                    mfGuid = UUIDGenerator.generate16ShortUUID()
                    lrGuid = lr.lrGuid
                    mfSavetime = Date()
                }
                ledgerMediaFileMapper.insert(file)
            }
        }
        return BaseResponse(true)
    }
    override fun checkLedger(verifierId: String, remark: String?, recordList: List<LedgerCheckVo>): BaseResponse<Boolean> {
        val recordIdList = mutableListOf<String?>()
        recordList.forEach { recordIdList.add(it.recordId) }
        val records = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
            createCriteria().andIn("lrGuid", recordIdList)
                .andIsNotNull("lrGuid")
        })
        return if (records.isEmpty()) {
            BaseResponse(false, "所选记录不存在")
        } else {
            records.forEach {
                for (r in recordList) {
                    if (r.recordId == it.lrGuid) {
                        it.lrVerifierid = verifierId
                        it.lrVerifierrealname
                        it.lrVerifydate = Date()
                        it.lrIsverify = r.result
                        it.lrVerifyrst = r.remark
                        it.lrAiverifytime = if (it.lrAiverifytime == null) 0 else it.lrAiverifytime++
                        it.lrIsai = false
                        ledgerRecordMapper.updateByPrimaryKey(it)
                        continue
                    }
                }
            }
            BaseResponse(true)
        }
    }
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/UserinfoServiceImpl.kt
@@ -54,6 +54,7 @@
    override fun delete(id: String): Int = userinfoMapper.deleteByPrimaryKey(id)
    override fun login(loginRequestVo: LoginRequestVo): AccessToken {
        if (loginRequestVo.userName.isNullOrEmpty() || loginRequestVo.password.isNullOrEmpty()) return AccessToken()
        val example = Example(Userinfo::class.java)
        val criteria = example.createCriteria()
        criteria.andEqualTo("acountname", loginRequestVo.userName)
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/LedgerService.kt
@@ -1,7 +1,6 @@
package cn.flightfeather.supervision.lightshare.service
import cn.flightfeather.supervision.lightshare.vo.LedgerSubTypeVo
import cn.flightfeather.supervision.lightshare.vo.LedgerVo
import cn.flightfeather.supervision.lightshare.vo.*
import org.springframework.http.client.MultipartBodyBuilder
import org.springframework.web.multipart.MultipartFile
import java.util.*
@@ -24,4 +23,7 @@
    fun getLedgerImgs(userId: String, ledgerType: List<Int>): List<LedgerVo>
    fun copyLedger(userId: String, time: String, copyLedgerList: List<CopyLedgerVo>): BaseResponse<String>
    fun checkLedger(verifierId: String, remark: String?, recordList: List<LedgerCheckVo>):BaseResponse<Boolean>
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AssessmentGradeVo.kt
@@ -16,8 +16,11 @@
    var tPRuleGuid: String? = null
    var totalPoint: Int = 0
    var level: String? = null
    var color: String? = null
    var creditText: String? = null
    var rank: Int = 1
    var updateDate: Date? = null
    var period: String? = null
    var subGradeList: List<SubGradeVo> = emptyList()
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/CopyLedgerVo.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package cn.flightfeather.supervision.lightshare.vo
import com.fasterxml.jackson.annotation.JsonInclude
import java.math.BigDecimal
/**
 * éœ€è¦å¤åˆ¶çš„台账信息
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
class CopyLedgerVo {
    var subTypeId: String? = null
    //YYYY-MM
    var time: String? = null
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/EvaluationVo.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package cn.flightfeather.supervision.lightshare.vo
/**
 * è¯„分规则及得分
 */
class EvaluationVo {
    //规则id
    var id: String? = null
    //规则描述
    var title1: String? = null
    //分值
    var score: Int = 0
    //是否选中
    var select: Boolean = false
    //二级子规则
    var sub1: MutableList<SubEvaluationVo> = mutableListOf()
}
class SubEvaluationVo {
    //有时候一级的规则下面直接是三级规则,没有二级规则,因此此时的二级规则只是为了结构完整性而出现的
    var placeholder: Boolean = false
    //规则id
    var id: String? = null
    //规则描述
    var title2: String? = null
    //分值
    var score: Int = 0
    //是否选中
    var select: Boolean = false
    //二级规则分组
    var group: Int? = null
    //三级子规则
    var sub2: MutableList<ThirdEvaluationVo> = mutableListOf()
}
class ThirdEvaluationVo {
    //规则id
    var id: String? = null
    //规则描述
    var content: String? = null
    //分值
    var score: Int = 0
    //是否选中
    var select: Boolean = false
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/GradeDetailVo.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package cn.flightfeather.supervision.lightshare.vo
import java.util.*
/**
 * æµ‹è¯„详情
 */
class GradeDetailVo {
    //得分解读
    var creditText: String? = null
    //考核得分
    var score: Int = 0
    //风险排名
    var rank: Int? = null
    //风险等级
    var level: String? = null
    //考核周期
    var period: String? = null
    //自评时间
    var time: Date? = null
    //分类得分
    var classScore: MutableList<Triple<String, String, String>> = mutableListOf()
    //失分项目
    var loseScore: MutableList<Triple<String, String, String>> = mutableListOf()
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/LedgerCheckVo.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package cn.flightfeather.supervision.lightshare.vo
import com.fasterxml.jackson.annotation.JsonInclude
import java.math.BigDecimal
/**
 * å°è´¦å®¡æ ¸ç»“果信息
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
class LedgerCheckVo {
    //审核的台账记录id
    var recordId: String? = null
    //审核结果
    var result: Boolean = false
    //审核备注
    var remark: String? = null
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/LedgerSubTypeVo.kt
@@ -25,9 +25,19 @@
        //台账是否需要上传
        var needUpdate: Boolean = true,
        //台账审核状态(0:未审核;1:通过;2:未通过)
        var checkStatus: Int = LedgerCheckStatus.UnCheck.value,
//        var checkStatus: Int = LedgerCheckStatus.UnCheck.value,
        var sceneType: Int = SceneType.Restaurant.value,
        //台账图标
        var iconUrl: String? = null
        var iconUrl: String? = null,
        //台账是否有实时性要求
        var realTime: Boolean = false,
        //审核人id
        var verifierId: String? = null,
        //审核人名称
        var verifierName: String? = null,
        //审核结果。null:未审核;false:审核不通过;true:审核通过
        var verified: Boolean? = null,
        //审核备注
        var verifyRst: String? = null
)
src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationController.kt
@@ -78,4 +78,21 @@
            @RequestParam("sceneType") sceneType: Int,
            response: HttpServletResponse
    ) = evaluationService.autoScore(year, month, sceneType, response)
    @ApiOperation(value = "上传自评得分")
    @PostMapping("/upload")
    fun uploadScore(
        @ApiParam(value = "用户id") @RequestParam("userId") userId: String,
        @ApiParam(value = "评分周期") @RequestParam("period") period: String,
        @ApiParam(value = "评分规则id") @RequestParam(value = "ruleId", required = false) ruleId: String?,
        @ApiParam(value = "具体扣分条目") @RequestBody itemList: List<Pair<String, String>>,
    ) = evaluationService.uploadScore(userId, period, ruleId, itemList)
    @ApiOperation(value = "获取测评详情")
    @GetMapping("/detail")
    fun getDetail(
            @ApiParam(value = "用户id") @RequestParam("userId") userId: String,
            @ApiParam(value = "评分周期") @RequestParam("period") period: String,
    ) = evaluationService.getDetail(userId, period)
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationsubruleController.kt
@@ -33,5 +33,10 @@
    @DeleteMapping("/{id}")
    fun delete (@PathVariable id: String) = evaluationsubruleService.delete(id)
    @ApiOperation(value = "查找评分规则子项表以及对应的具体得分")
    @GetMapping("/score")
    fun getScore(
        @ApiParam(value = "用户id") @RequestParam("userId") userId:String,
        @ApiParam(value = "评估周期", example = "yyyy/M-M") @RequestParam("time") time:String,
    ) = evaluationsubruleService.getScore(userId, time)
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/web/LedgerController.kt
@@ -1,6 +1,8 @@
package cn.flightfeather.supervision.lightshare.web
import cn.flightfeather.supervision.lightshare.service.LedgerService
import cn.flightfeather.supervision.lightshare.vo.CopyLedgerVo
import cn.flightfeather.supervision.lightshare.vo.LedgerCheckVo
import cn.flightfeather.supervision.lightshare.vo.LedgerVo
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
@@ -75,4 +77,20 @@
        @ApiParam("用户id") @PathVariable userId: String,
        @ApiParam("台账类型id数组") @RequestParam("ledgerTypes") ledgerTypes: List<Int>
    ) = ledgerService.getLedgerImgs(userId, ledgerTypes)
    @ApiOperation("复制场景的台账")
    @PostMapping("/copy")
    fun copyLedger(
        @RequestParam("userId") userId: String,
        @RequestParam("time") time: String,
        @RequestBody copyLedgerList: List<CopyLedgerVo>
    ) = ledgerService.copyLedger(userId, time, copyLedgerList)
    @ApiOperation("审核台账")
    @PostMapping("/check")
    fun checkLedger(
        @RequestParam("verifierId") verifierId: String,
        @RequestParam(value = "remark", required = false) remark: String?,
        @RequestBody recordList: List<LedgerCheckVo>
    ) = ledgerService.checkLedger(verifierId, remark, recordList)
}
src/main/resources/application.yml
@@ -12,14 +12,14 @@
#    password: 123456
    #-TestEnd-
#    url: jdbc:mysql://localhost:3306/ledger?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
#    username: ledger
#    password: ledger_fxxchackxr
    url: jdbc:mysql://localhost:3306/ledger?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
    username: ledger
    password: ledger_fxxchackxr
    #   å¼€å‘远程服务器
    url: jdbc:mysql://47.100.191.150:3306/ledger?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
    username: remoteU1
    password: eSoF8DnzfGTlhAjE
#    url: jdbc:mysql://47.100.191.150:3306/ledger?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
#    username: remoteU1
#    password: eSoF8DnzfGTlhAjE
    initialSize: 5
    minIdle: 5
src/main/resources/mapper/LedgerRecordMapper.xml
@@ -14,7 +14,7 @@
    <result column="CI_GUID" property="ciGuid" jdbcType="VARCHAR" />
    <result column="CI_Name" property="ciName" jdbcType="VARCHAR" />
    <result column="LR_EASubmitKind" property="lrEasubmitkind" jdbcType="TINYINT" />
    <result column="LR_VerifierID" property="lrVerifierid" jdbcType="INTEGER" />
    <result column="LR_VerifierID" property="lrVerifierid" jdbcType="VARCHAR" />
    <result column="LR_VerifierRealName" property="lrVerifierrealname" jdbcType="VARCHAR" />
    <result column="LR_VerifyDate" property="lrVerifydate" jdbcType="TIMESTAMP" />
    <result column="LR_IsVerify" property="lrIsverify" jdbcType="BIT" />
src/main/resources/mapper/LedgerSubTypeMapper.xml
@@ -22,44 +22,4 @@
    LS_SubTypeId, LS_Name, L_TypeId, L_TypeName, L_IconUrl, L_SceneType, L_NeedUpdate, 
    L_Period, L_Real_Time
  </sql>
  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.entity.LedgerSubType">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="LS_SubTypeId" jdbcType="INTEGER" property="lsSubtypeid" />
    <result column="LS_Name" jdbcType="VARCHAR" property="lsName" />
    <result column="L_TypeId" jdbcType="INTEGER" property="lTypeid" />
    <result column="L_TypeName" jdbcType="VARCHAR" property="lTypename" />
    <result column="L_IconUrl" jdbcType="VARCHAR" property="lIconurl" />
    <result column="L_SceneType" jdbcType="INTEGER" property="lScenetype" />
    <result column="L_NeedUpdate" jdbcType="BIT" property="lNeedupdate" />
    <result column="L_Period" jdbcType="INTEGER" property="lPeriod" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--
      WARNING - @mbg.generated
    -->
    LS_SubTypeId, LS_Name, L_TypeId, L_TypeName, L_IconUrl, L_SceneType, L_NeedUpdate,
    L_Period
  </sql>
  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.entity.LedgerSubType">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="LS_SubTypeId" jdbcType="INTEGER" property="lsSubtypeid" />
    <result column="LS_Name" jdbcType="VARCHAR" property="lsName" />
    <result column="L_TypeId" jdbcType="INTEGER" property="lTypeid" />
    <result column="L_TypeName" jdbcType="VARCHAR" property="lTypename" />
    <result column="L_IconUrl" jdbcType="VARCHAR" property="lIconurl" />
    <result column="L_SceneType" jdbcType="INTEGER" property="lScenetype" />
    <result column="L_NeedUpdate" jdbcType="BIT" property="lNeedupdate" />
    <result column="L_Period" jdbcType="INTEGER" property="lPeriod" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--
      WARNING - @mbg.generated
    -->
    LS_SubTypeId, LS_Name, L_TypeId, L_TypeName, L_IconUrl, L_SceneType, L_NeedUpdate,
    L_Period
  </sql>
</mapper>