From 274bc2d0f7fe8fe7525196e4d7d6ece1cafe2c6c Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期日, 04 二月 2024 17:32:14 +0800 Subject: [PATCH] 1. 新增静安50分制评估结果转换逻辑; 2. 新增根据坐标圆心和半径查询范围内场景逻辑; --- src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt | 113 +++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 86 insertions(+), 27 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 f5fc097..7549c48 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,11 +1,16 @@ package cn.flightfeather.supervision.lightshare.service.impl import cn.flightfeather.supervision.business.AutoScore2 -import cn.flightfeather.supervision.business.autooutput.AopTaskCtrl +import cn.flightfeather.supervision.business.bgtask.AopTaskCtrl import cn.flightfeather.supervision.business.autooutput.score.AopEvaluation -import cn.flightfeather.supervision.common.executor.BackgroundTaskCtrl +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.ReportOne +import cn.flightfeather.supervision.business.report.file.ReportThree +import cn.flightfeather.supervision.business.report.file.ReportTwo +import cn.flightfeather.supervision.common.exception.ResponseErrorException import cn.flightfeather.supervision.common.executor.BgTaskStatus -import cn.flightfeather.supervision.common.executor.BgTaskType import cn.flightfeather.supervision.domain.ds1.entity.Domainitem import cn.flightfeather.supervision.domain.ds1.entity.Evaluation import cn.flightfeather.supervision.domain.ds1.entity.Subtask @@ -16,46 +21,59 @@ 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.AutoScoreResultVo -import cn.flightfeather.supervision.lightshare.vo.BaseResponse +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.net.URLEncoder import java.util.* +import javax.servlet.http.HttpServletResponse import kotlin.Comparator @Service 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>() @@ -63,11 +81,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++ @@ -81,7 +99,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() @@ -95,9 +114,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()) @@ -133,7 +152,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 { @@ -145,11 +164,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 @@ -159,8 +178,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)) } @@ -169,7 +187,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 @@ -182,15 +200,15 @@ } //鎸夎閬撲弗閲嶄笉瑙勮寖鍦烘櫙鐧惧垎姣旀帓搴� - 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) } }) @@ -267,6 +285,47 @@ 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, response: HttpServletResponse): Boolean { + areaVo.scensetypeid ?: throw ResponseErrorException("蹇呴』閫夋嫨涓�涓満鏅被鍨�") + val topTask = taskRep.findOneTask(areaVo) ?: throw ResponseErrorException("鏈壘鍒扮鍚堟潯浠剁殑椤跺眰浠诲姟") + val config = ExcelConfigVo( + topTask.tguid ?: "", + topTask.starttime, + topTask.endtime, + topTask.provincecode, + topTask.citycode, + topTask.districtcode, + topTask.towncode, + areaVo.scensetypeid?.toInt() + ) + + 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