From 0392c333ed3d987cb2ab3dac4e1a972cff405f21 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期四, 25 四月 2024 17:42:08 +0800 Subject: [PATCH] 1. 新增后台任务关联模块 2. 新增自动评分后台任务; 3. 修复部分bug --- src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt | 155 ++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 116 insertions(+), 39 deletions(-) diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt index 6858f47..e0a0cf8 100644 --- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt +++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt @@ -1,6 +1,14 @@ package cn.flightfeather.supervision.lightshare.service.impl import cn.flightfeather.supervision.business.AutoScore2 +import cn.flightfeather.supervision.business.bgtask.AopTaskCtrl +import cn.flightfeather.supervision.business.autooutput.score.AopEvaluation +import cn.flightfeather.supervision.business.bgtask.ReportTaskCtrl +import cn.flightfeather.supervision.business.report.DataSource +import cn.flightfeather.supervision.business.report.DbMapper +import cn.flightfeather.supervision.business.report.file.ReportTwo +import cn.flightfeather.supervision.common.exception.BizException +import cn.flightfeather.supervision.common.executor.BgTaskStatus import cn.flightfeather.supervision.domain.ds1.entity.Domainitem import cn.flightfeather.supervision.domain.ds1.entity.Evaluation import cn.flightfeather.supervision.domain.ds1.entity.Subtask @@ -10,38 +18,59 @@ import cn.flightfeather.supervision.common.utils.Constant import cn.flightfeather.supervision.common.utils.DateUtil import cn.flightfeather.supervision.common.utils.Domain +import cn.flightfeather.supervision.domain.ds1.repository.EvaluationRep +import cn.flightfeather.supervision.domain.ds1.repository.TaskRep import cn.flightfeather.supervision.lightshare.service.EvaluationService +import cn.flightfeather.supervision.lightshare.service.SearchService import cn.flightfeather.supervision.lightshare.service.SubtaskService -import cn.flightfeather.supervision.lightshare.vo.AreaVo -import cn.flightfeather.supervision.lightshare.vo.SubtaskVo +import cn.flightfeather.supervision.lightshare.vo.* import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.annotation.Value import org.springframework.stereotype.Service import tk.mybatis.mapper.entity.Example +import java.io.File import java.util.* +import javax.servlet.http.HttpServletResponse import kotlin.Comparator @Service -class EvaluationServiceImpl(val evaluationMapper: EvaluationMapper) : EvaluationService { +class EvaluationServiceImpl( + private val evaluationMapper: EvaluationMapper, + private val evaluationRep: EvaluationRep, + private val taskRep: TaskRep, + private val aopTaskCtrl: AopTaskCtrl, + private val searchService: SearchService, + private val dbMapper: DbMapper, + @Value("\${filePath}") private val filePath: String, + private val reportTaskCtrl: ReportTaskCtrl, +) : EvaluationService { @Autowired lateinit var subtaskService: SubtaskService + @Autowired lateinit var domainitemMapper: DomainitemMapper + @Autowired lateinit var subtaskMapper: SubtaskMapper + @Autowired + lateinit var aopEvaluation: AopEvaluation + private var isAutoScoreRunning = false + //鑾峰彇鏌愰《灞備换鍔′笅鏌愪釜鍦烘櫙鐨勮閬撹瘎鍒嗘帓鍚� - override fun getRankOfTown(tguid: String, scensetypeid: String?): List<AreaVo> { + override fun getRankOfTown(tguid: String, scensetypeid: String?): List<EvaluateResVo> { val evaluationlist = getRankInfo(tguid, scensetypeid, null) - var areaVolist = mutableListOf<AreaVo>() + var areaVolist = mutableListOf<EvaluateResVo>() //鑰冩牳绫诲瀷鏄鑼冭�冩牳 if (evaluationlist.isNotEmpty() && - Objects.equals(evaluationlist.get(0).ertype, Constant.RuleType.STANDARD.value)) { + Objects.equals(evaluationlist.get(0).ertype, Constant.RuleType.STANDARD.value) + ) { //鑾峰彇瑙勮寖鑰冩牳鐨勮�冩牳鐣岄檺锛堥棶棰樻暟閲忥級 val example = Example(Domainitem::class.java) val criteria = example.createCriteria() criteria.andEqualTo("dcguid", Domain.STANDARDLEVEL.value) - val standardlevel:String? = domainitemMapper.selectByExample(example).get(0).value + val standardlevel: String? = domainitemMapper.selectByExample(example).get(0).value //鎸夎闀囪绠椾弗閲嶄笉瑙勮寖鍦烘櫙鏁伴噺骞舵寜鐧惧垎姣旀帓搴� while (evaluationlist.isNotEmpty()) { val tmplist = mutableListOf<Evaluation>() @@ -49,11 +78,11 @@ val iterator: MutableIterator<Evaluation> = tmplist.iterator() val evaluation = evaluationlist.get(0)//鑾峰彇涓�绉嶈闀� - var areaVo = AreaVo() + var areaVo = EvaluateResVo() areaVo = transform(areaVo, evaluation) - while (iterator.hasNext()){ + while (iterator.hasNext()) { val tmp = iterator.next() - if (Objects.equals(tmp.towncode, evaluation.towncode)){ + if (Objects.equals(tmp.towncode, evaluation.towncode)) { if (tmp.resultscorebef!!.toInt() >= standardlevel!!.toInt()) areaVo.notstandardnum++ areaVo.allsensenum++ @@ -67,7 +96,8 @@ } //鑰冩牳绫诲瀷鏄瘎鍒嗚�冩牳 else if (evaluationlist.isNotEmpty() && - Objects.equals(evaluationlist.get(0).ertype, Constant.RuleType.SCORE.value)){ + Objects.equals(evaluationlist.get(0).ertype, Constant.RuleType.SCORE.value) + ) { //鑾峰彇璇勫垎鑰冩牳鐨勮瘎鍒嗙晫闄� val example = Example(Domainitem::class.java) val criteria = example.createCriteria() @@ -81,9 +111,9 @@ val iterator: MutableIterator<Evaluation> = tmplist.iterator() val evaluation = evaluationlist.get(0)//鑾峰彇涓�绉嶈闀� - var areaVo = AreaVo() + var areaVo = EvaluateResVo() areaVo = transform(areaVo, evaluation) - while (iterator.hasNext()){ + while (iterator.hasNext()) { val tmp = iterator.next() if (Objects.equals(tmp.towncode, evaluation.towncode)) { if (tmp.resultscorebef!!.toInt() < scorelevellist.get(scorelevellist.size - 1).text!!.toInt()) @@ -119,7 +149,7 @@ override fun delete(id: String): Int = evaluationMapper.deleteByPrimaryKey(id) //鑾峰彇鎸囧畾鍖哄煙锛堥《灞備换鍔★級鎸囧畾鍦烘櫙鐨勮瘎鍒嗕俊鎭� - fun getRankInfo(tguid: String, scensetypeid: String?, ruletypeid: ByteArray?):MutableList<Evaluation>{ + fun getRankInfo(tguid: String, scensetypeid: String?, ruletypeid: ByteArray?): MutableList<Evaluation> { val evaluationlist = mutableListOf<Evaluation>() val subtaskVolist = subtaskService.findByTaskID(tguid) subtaskVolist.forEach { @@ -131,11 +161,11 @@ criteria.andEqualTo("scensetypeid", scensetypeid) if (ruletypeid != null)//璇勫垎绫诲瀷 criteria.andEqualTo("ertype", ruletypeid) - else{ + else { criteria.andEqualTo("ertype", Constant.RuleType.STANDARD.value) val result = evaluationMapper.selectByExample(example)//鏌ヨ鏄惁鏈夎鑼冩�ц瘎鍒嗚〃 //娌℃湁瑙勮寖琛ㄥ氨鏌ヨ璇勫垎琛� - if (result.isEmpty()){ + if (result.isEmpty()) { val example1 = Example(Evaluation::class.java) val criteria1 = example1.createCriteria() criteria1.andEqualTo("stguid", it.stguid)//瀛愪换鍔d @@ -145,8 +175,7 @@ val result1 = evaluationMapper.selectByExample(example1) if (result1.size == 1) evaluationlist.add(result1.get(0)) - } - else + } else if (result.size == 1) evaluationlist.add(result.get(0)) } @@ -155,7 +184,7 @@ } //Evaluation浼犻�掓暟鎹粰AreaVo - fun transform(areaVo: AreaVo, evaluation: Evaluation):AreaVo{ + fun transform(areaVo: EvaluateResVo, evaluation: Evaluation): EvaluateResVo { areaVo.provincecode = evaluation.provincecode areaVo.provincename = evaluation.provincename areaVo.citycode = evaluation.citycode @@ -168,34 +197,19 @@ } //鎸夎閬撲弗閲嶄笉瑙勮寖鍦烘櫙鐧惧垎姣旀帓搴� - fun sort(areaVolist: MutableList<AreaVo>):MutableList<AreaVo>{ - Collections.sort(areaVolist, object : Comparator<AreaVo>{ - override fun compare(o1: AreaVo?, o2: AreaVo?): Int { + fun sort(areaVolist: MutableList<EvaluateResVo>): MutableList<EvaluateResVo> { + Collections.sort(areaVolist, object : Comparator<EvaluateResVo> { + override fun compare(o1: EvaluateResVo?, o2: EvaluateResVo?): Int { var num1 = 0.0 if (o1!!.allsensenum != 0) - num1 = (o1.notstandardnum/o1.allsensenum).toDouble() + num1 = (o1.notstandardnum / o1.allsensenum).toDouble() var num2 = 0.0 if (o2!!.allsensenum != 0) - num2 = (o2.notstandardnum/o2.allsensenum).toDouble() + num2 = (o2.notstandardnum / o2.allsensenum).toDouble() return compareValues(num1, num2) } }) return areaVolist - } - - override fun getTopTaskByScene(sceneId: String?): String? { - val example = Example(Evaluation::class.java) - val criteria = example.createCriteria() - criteria.andEqualTo("sguid", sceneId) - example.orderBy("evaluatetime").desc() - val evaluationlist = evaluationMapper.selectByExample(example) - var subtask = SubtaskVo() - if (evaluationlist.isNotEmpty()) { - val stguid = evaluationlist[0].stguid - if (stguid != null) - subtask = subtaskService.findByID(stguid) - } - return subtask.tguid } override fun autoScore(districtCode: String, time: String): List<String> { @@ -244,9 +258,72 @@ return resultList } + override fun autoScore3(tGuid: String, sceneTypeId: String): String { + if (isAutoScoreRunning) return "鑷姩璇勫垎鎵ц涓紝璇风瓑寰呭畬鎴�" + isAutoScoreRunning = true +// val t = Constant.ScenseType.getByValue(sceneTypeId) +// autoScore.sceneType = t +// autoScore.topTaskGrade(tGuid) + aopEvaluation.executeByTopTask(tGuid, sceneTypeId.toInt()) + isAutoScoreRunning = false + return "鑷姩璇勫垎瀹屾垚" + } + override fun findByInspectionId(inspectionId: String): List<Evaluation> { return evaluationMapper.selectByExample(Example(Evaluation::class.java).apply { createCriteria().andEqualTo("iguid", inspectionId) }) } + + override fun autoEvaluate(areaVo: AreaVo): BgTaskStatus? { + //鎵ц鑷姩璇勪及 + return aopTaskCtrl.startNewTask(areaVo) + } + + override fun findAutoEvaluation(areaVo: AreaVo): List<AutoScoreResultVo?>? { + //1. 鏌ユ壘鍘嗗彶璁板綍锛屾煡鐪嬭瘎浼版槸鍚﹀凡瀛樺湪 +// areaVo.scensetypeid ?: throw ResponseErrorException("鏌ヨ鏃跺繀椤婚�夋嫨涓�涓満鏅被鍨�") +// val task = taskRep.findOneTask(areaVo) ?: throw ResponseErrorException("鏌ヨ鏃跺繀椤婚�夋嫨涓�涓満鏅被鍨�") + return evaluationRep.findAutoScore(areaVo) + } + + override fun downloadAutoEvaluation(areaVo: AreaVo, forceUpdate: Boolean, response: HttpServletResponse): Boolean { + areaVo.scensetypeid ?: throw BizException("蹇呴』閫夋嫨涓�涓満鏅被鍨�") + val topTask = taskRep.findOneTask(areaVo) ?: throw BizException("鏈壘鍒扮鍚堟潯浠剁殑椤跺眰浠诲姟") + val config = ExcelConfigVo( + topTask.tguid ?: "", + topTask.starttime, + topTask.endtime, + topTask.provincecode, + topTask.citycode, + topTask.districtcode, + topTask.towncode, + areaVo.scensetypeid?.toInt(), + forceUpdate = forceUpdate + ) + + val dataSource = DataSource(config, dbMapper) + val t = ReportTwo(dataSource) + val fileName = t.getReportName() + val p = "$filePath/autoscore/" + val file = File(p + fileName) + if (config.forceUpdate || !file.exists()) { + val downloadUrl = "/autoscore/${fileName}" + reportTaskCtrl.startTask(t, downloadUrl) + return false + } else { + val fName = Base64.getEncoder().encodeToString(fileName.toByteArray()) + response.apply { + setHeader("Content-Disposition", "attachment;filename=$fName") + setHeader("fileName", fName) + addHeader("Access-Control-Expose-Headers", "fileName") + contentType = "application/vnd.ms-excel;charset=UTF-8" + setHeader("Pragma", "no-cache") + setHeader("Cache-Control", "no-cache") + setDateHeader("Expires", 0) + } + response.outputStream.write(file.readBytes()) + return true + } + } } \ No newline at end of file -- Gitblit v1.9.3