From 16b961c2210fe29fd494ac1f9d830dd93503961f Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期五, 02 八月 2024 17:25:17 +0800 Subject: [PATCH] 1. 新增监测设备的管理功能 --- src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt | 153 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 108 insertions(+), 45 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 43af688..346b362 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,7 +1,14 @@ package cn.flightfeather.supervision.lightshare.service.impl import cn.flightfeather.supervision.business.AutoScore2 -import cn.flightfeather.supervision.business.storage.StAutoScore +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 @@ -11,41 +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 autoScore: StAutoScore + 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>() @@ -53,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++ @@ -71,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() @@ -85,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()) @@ -123,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 { @@ -135,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 @@ -149,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)) } @@ -159,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 @@ -172,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> { @@ -208,7 +218,7 @@ val example = Example(Subtask::class.java) val criteria = example.createCriteria() criteria.andEqualTo("districtcode", districtCode) - val date = DateUtil().StringToDate(time) + val date = DateUtil.StringToDate(time) criteria.andGreaterThanOrEqualTo("planstarttime", time) val subTaskList = subtaskMapper.selectByExample(example) subTaskList.forEach { @@ -251,9 +261,10 @@ 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) +// val t = Constant.ScenseType.getByValue(sceneTypeId) +// autoScore.sceneType = t +// autoScore.topTaskGrade(tGuid) + aopEvaluation.executeByTopTask(tGuid, sceneTypeId.toInt()) isAutoScoreRunning = false return "鑷姩璇勫垎瀹屾垚" } @@ -263,4 +274,56 @@ 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