From baf2cc2ce3dfd1235c012a3750132769fcd9ad2f Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 18 九月 2025 17:02:05 +0800
Subject: [PATCH] 2025.9.18 1. 联合前端调试数据产品接口(待完成)

---
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt |  171 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 131 insertions(+), 40 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..278aa8c 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 org.springframework.web.multipart.MultipartFile
 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 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> {
@@ -204,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 {
@@ -244,9 +258,86 @@
         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("鏌ヨ鏃跺繀椤婚�夋嫨涓�涓満鏅被鍨�")
+        val evaList = evaluationRep.findAutoScore(areaVo)
+        evaList?.forEach {
+            it?.subTaskId?.let { id->
+                it.itemEvaluations = evaluationRep.findItemEvaluation(id)
+            }
+        }
+        return evaList
+    }
+
+    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
+        }
+    }
+
+    override fun downloadAutoEvaTemplate(areaVo: AreaVo, response: HttpServletResponse) {
+        TODO("Not yet implemented")
+    }
+
+    override fun uploadAutoEvaluation(areaVo: AreaVo, file: MultipartFile): Boolean {
+        TODO("Not yet implemented")
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3