From 52a0c16de9b0955a5f092560b73f16e41684f97b Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 31 十二月 2024 10:13:35 +0800
Subject: [PATCH] 1. 环信码生成时,如果在线场景当期没有评估(未巡查)结果,则延用历史最新一次的结果; 2. 新增跨时间跨月度的历史整改记录查询逻辑 3. 优化获取顶层任务和日任务的获取逻辑

---
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt |  202 ++++++++++++++++++++++++++++++--------------------
 1 files changed, 120 insertions(+), 82 deletions(-)

diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt
index 1cdc743..e0f8796 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt
@@ -1,14 +1,19 @@
 package cn.flightfeather.supervision.lightshare.service.impl
 
+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.business.report.template.*
+import cn.flightfeather.supervision.common.exception.BizException
 import cn.flightfeather.supervision.common.utils.*
 import cn.flightfeather.supervision.domain.ds1.entity.*
 import cn.flightfeather.supervision.domain.ds1.mapper.*
+import cn.flightfeather.supervision.domain.ds1.repository.EvaluationRep
+import cn.flightfeather.supervision.domain.ds1.repository.EvaluationRuleRep
+import cn.flightfeather.supervision.domain.ds1.repository.SceneRep
 import cn.flightfeather.supervision.domain.ds2.mapper.LedgerRecordMapper
 import cn.flightfeather.supervision.domain.ds2.mapper.LedgerSubTypeMapper
 import cn.flightfeather.supervision.domain.ds2.mapper.UserMapMapper
@@ -17,14 +22,13 @@
 import cn.flightfeather.supervision.lightshare.vo.*
 import com.github.pagehelper.PageHelper
 import org.springframework.beans.BeanUtils
+import org.springframework.beans.factory.annotation.Value
 import org.springframework.stereotype.Service
 import tk.mybatis.mapper.entity.Example
 import java.io.File
 import java.io.FileInputStream
 import java.io.FileOutputStream
-import java.io.OutputStream
 import java.net.URLEncoder
-import java.nio.charset.Charset
 import java.nio.charset.StandardCharsets
 import java.util.*
 import javax.servlet.http.HttpServletResponse
@@ -35,61 +39,39 @@
  */
 @Service
 class SearchServiceImpl(
-        val userinfoMapper: UserinfoMapper,
-        val subtaskMapper: SubtaskMapper,
-        val scenseMapper: ScenseMapper,
-        val sceneConstructionSiteMapper: SceneConstructionSiteMapper,
-        val sceneMixingPlantMapper: SceneMixingPlantMapper,
-        val sceneStorageYardMapper: SceneStorageYardMapper,
-        val sceneWharfMapper: SceneWharfMapper,
-        val problemlistMapper: ProblemlistMapper,
-        val problemtypeMapper: ProblemtypeMapper,
-        val townMapper: TownMapper,
-        val mediafileMapper: MediafileMapper,
-        val scoreMapper: ScoreMapper,
-        val inspectionMapper: InspectionMapper,
-        val taskMapper: TaskMapper,
-        val monitorobjectversionMapper: MonitorobjectversionMapper,
-        val evaluationruleMapper: EvaluationruleMapper,
-        val evaluationsubruleMapper: EvaluationsubruleMapper2,
-        val evaluationMapper: EvaluationMapper,
-        val itemevaluationMapper: ItemevaluationMapper,
-        val ledgerSubTypeMapper: LedgerSubTypeMapper,
-        val ledgerRecordMapper: LedgerRecordMapper,
-        val userMapMapper: UserMapMapper,
-        val taskService: TaskService
+    val userinfoMapper: UserinfoMapper,
+    val subtaskMapper: SubtaskMapper,
+    val scenseMapper: ScenseMapper,
+    val sceneConstructionSiteMapper: SceneConstructionSiteMapper,
+    val sceneMixingPlantMapper: SceneMixingPlantMapper,
+    val sceneStorageYardMapper: SceneStorageYardMapper,
+    val sceneWharfMapper: SceneWharfMapper,
+    val problemlistMapper: ProblemlistMapper,
+    val problemtypeMapper: ProblemtypeMapper,
+    val townMapper: TownMapper,
+    val mediafileMapper: MediafileMapper,
+    val scoreMapper: ScoreMapper,
+    val inspectionMapper: InspectionMapper,
+    val taskMapper: TaskMapper,
+    val monitorobjectversionMapper: MonitorobjectversionMapper,
+    val evaluationruleMapper: EvaluationruleMapper,
+    val evaluationsubruleMapper: EvaluationsubruleMapper2,
+    val evaluationMapper: EvaluationMapper,
+    val itemevaluationMapper: ItemevaluationMapper,
+    val ledgerSubTypeMapper: LedgerSubTypeMapper,
+    val ledgerRecordMapper: LedgerRecordMapper,
+    val userMapMapper: UserMapMapper,
+    val taskService: TaskService,
+    private val evaluationRep: EvaluationRep,
+    private val evaluationRuleRep: EvaluationRuleRep,
+    private val sceneRep: SceneRep,
+    @Value("\${filePath}") var filePath: String,
+    @Value("\${imgPath}") var imgPath: String,
+    private val dbMapper: DbMapper,
+    private val reportTaskCtrl: ReportTaskCtrl,
 ) : SearchService {
 
-    private val dateUtil = DateUtil()
-
-    override fun writeToFile(config: ExcelConfigVo, mode:Int) {
-        val dbMapper = DbMapper(
-            scenseMapper,
-            problemlistMapper,
-            problemtypeMapper,
-            subtaskMapper,
-            monitorobjectversionMapper,
-            sceneConstructionSiteMapper,
-            sceneMixingPlantMapper,
-            sceneStorageYardMapper,
-            sceneWharfMapper,
-            taskMapper,
-            evaluationruleMapper, evaluationsubruleMapper, evaluationMapper, itemevaluationMapper,
-                ledgerSubTypeMapper, ledgerRecordMapper, userinfoMapper, userMapMapper, townMapper
-        )
-        val dataSource = DataSource(config, dbMapper)
-        val t = when (mode) {
-            8 -> ReportOne(dataSource)
-            9 -> ReportTwo(dataSource)
-            10 -> ReportThree(dataSource)
-
-            else -> null
-        }
-//        t?.execute()
-        t?.toFile("target/")
-    }
-
-    override fun getExcel(config: ExcelConfigVo, response: HttpServletResponse): Boolean {
+    override fun writeToFile(config: ExcelConfigVo, mode: Int) {
         val dbMapper = DbMapper(
             scenseMapper,
             problemlistMapper,
@@ -105,6 +87,19 @@
             ledgerSubTypeMapper, ledgerRecordMapper, userinfoMapper, userMapMapper, townMapper
         )
         val dataSource = DataSource(config, dbMapper)
+        val t = when (mode) {
+            8 -> ReportOne(dataSource)
+            9 -> ReportTwo(dataSource)
+            10 -> ReportThree(dataSource)
+
+            else -> null
+        }
+//        t?.execute()
+        t?.toFile("target/")
+    }
+
+    override fun getExcel(config: ExcelConfigVo, response: HttpServletResponse): Boolean {
+        val dataSource = DataSource(config, dbMapper)
         val t = when (config.mode) {
             1 -> ReportOne(dataSource)
             2 -> ReportTwo(dataSource)
@@ -113,25 +108,26 @@
             else -> ReportOne(dataSource)
         }
         val fileName = t.getReportName()
-        val fName = URLEncoder.encode(fileName, "UTF-8")
-        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)
-        }
-
-        val p = Constant.DEFAULT_FILE_PATH + "/files/autoscore/"
+        val p = "$filePath/autoscore/"
         val file = File(p + fileName)
         if (config.forceUpdate || !file.exists()) {
-            t.toFile(p)
+            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
         }
-        response.outputStream.write(file.readBytes())
-
-        return true
     }
 
     override fun getSubTaskDetail(config: ExcelConfigVo): SubTaskTableVo {
@@ -250,8 +246,9 @@
         }
 
         //寤虹珛绗竴灞傜洰褰曪紝鍖呭惈鎵�鏈夌殑浠诲姟
-        val time = dateUtil.DateToString(Date(), "yyyy-MM-dd_HH-mm-ss")
-        var basePath = Constant.DEFAULT_FILE_PATH + File.separator + "images" + File.separator + "temp" + File.separator + time
+        val time = DateUtil.DateToString(Date(), "yyyy-MM-dd_HH-mm-ss")
+        var basePath =
+            imgPath + File.separator + "temp" + File.separator + time
         var file = File(basePath)
         var i = 1
         while (file.exists() && i <= 100) {
@@ -302,7 +299,8 @@
                 mediafileMapper.selectByExample(Example(Mediafile::class.java).apply {
                     createCriteria().andEqualTo("businessguid", p.guid)
                 }).forEach { m ->
-                    val picPath = Constant.DEFAULT_FILE_PATH + File.separator + "images" + File.separator + m.extension1 + m.guid + ".jpg"
+                    val picPath =
+                        imgPath + File.separator + m.extension1 + m.guid + ".jpg"
                     val fromFile = File(picPath)
                     val picName = p.problemname + "_" + p.location + "($y).jpg"
                     val toFile = File(pPath + File.separator + picName)
@@ -341,8 +339,9 @@
     override fun downloadPic2(sceneType: Int, topTaskId: String, response: HttpServletResponse): HttpServletResponse {
         //寤虹珛绗竴灞傜洰褰曪紝鍖呭惈鎵�鏈夌殑浠诲姟
         val topTask = taskMapper.selectByPrimaryKey(topTaskId)
-        val time = dateUtil.DateToString(Date(), "yyyy-MM-dd_HH-mm-ss")
-        val basePath = Constant.DEFAULT_FILE_PATH + File.separator + "images" + File.separator + "temp" + File.separator + topTask.name
+        val time = DateUtil.DateToString(Date(), "yyyy-MM-dd_HH-mm-ss")
+        val basePath =
+            imgPath + File.separator + "temp" + File.separator + topTask.name
         val file = File(basePath)
         if (!file.exists()) {
             file.mkdirs()
@@ -361,7 +360,7 @@
 
                 //寤虹珛涓�涓瓙浠诲姟鏂囦欢澶�
                 var subTaskFilePath = "${basePath}${File.separator}(${
-                    dateUtil.DateToString(
+                    DateUtil.DateToString(
                         it.planstarttime,
                         DateUtil.DateStyle.YYYY_MM_DD_CN
                     )
@@ -411,7 +410,7 @@
 
                         u.forEach { f ->
                             val picPath =
-                                Constant.DEFAULT_FILE_PATH + File.separator + "images" + File.separator + f.extension1 + f.guid + ".jpg"
+                                imgPath + File.separator + f.extension1 + f.guid + ".jpg"
                             val fromFile = File(picPath)
                             val picName = f.description
                             val toFile = File(pPath + File.separator + picName)
@@ -451,7 +450,13 @@
         return response
     }
 
-    override fun searchScore4JingAn(token: String, year: Int, month: Int, page: Int?, perPage: Int?): BaseResponse<List<ScoreVo>> {
+    override fun searchScore4JingAn(
+        token: String,
+        year: Int,
+        month: Int,
+        page: Int?,
+        perPage: Int?,
+    ): BaseResponse<List<ScoreVo>> {
         if (token != "jingan") {
             return BaseResponse(false)
         }
@@ -474,7 +479,12 @@
         return BaseResponse(true, head = DataHead(p.pageNum, p.pages), data = result)
     }
 
-    override fun searchSubTaskByKeyword(userId: String, keyword: String, page: Int, perPage: Int): BaseResponse<List<SubtaskVo>> {
+    override fun searchSubTaskByKeyword(
+        userId: String,
+        keyword: String,
+        page: Int,
+        perPage: Int,
+    ): BaseResponse<List<SubtaskVo>> {
         val userInfo = userinfoMapper.selectByPrimaryKey(userId)
         if (userInfo.usertypeid?.toInt() == 3) return BaseResponse(false, "浼佷笟鐢ㄦ埛鏃犳煡璇㈡潈闄�")//浼佷笟鐢ㄦ埛鏃犳硶鏌ヨ
         val result = mutableListOf<SubtaskVo>()
@@ -516,10 +526,12 @@
             evaluationruleMapper, evaluationsubruleMapper, evaluationMapper, itemevaluationMapper,
             ledgerSubTypeMapper, ledgerRecordMapper, userinfoMapper, userMapMapper, townMapper
         )
-        val task = taskService.getByDistrictCode(config.districtCode, config.startTime)?.takeIf { it.isNotEmpty() }?.get(0)
+        val task =
+            taskService.getByDistrictCode(config.districtCode, config.startTime).takeIf { it.isNotEmpty() }?.get(0)
         config.topTaskGuid = task?.tguid ?: ""
+        config.allScene = false
         val dataSource = mutableListOf<DataSource>()
-        config.sceneType = Constant.ScenseType.TYPE1.value.toInt()
+//        config.sceneType = Constant.SceneType.TYPE1.value.toInt()
         dataSource.add(DataSource(config, dbMapper))
 
 //        val config2 = config.copy(sceneType = Constant.ScenseType.TYPE2.value.toInt())
@@ -537,4 +549,30 @@
 
         return BaseTableVo(result.first, result.second)
     }
+
+    override fun getScoreDetail(subTaskId: String): ScoreDetail {
+        //鍦烘櫙淇℃伅
+        val scene = sceneRep.findBySubTask(subTaskId)
+        //鎬诲垎
+        val evaluation = evaluationRep.findBySubtask(subTaskId)
+        //瀛愯鍒欓�愭潯寰楀垎
+        val subRuleScores = evaluationRep.findItemEvaluation(subTaskId)
+        if (subRuleScores.isEmpty()) throw BizException("鏃犺瘎浼拌褰�")
+        //璇勫垎鎬昏鍒�
+        val rule = evaluationRuleRep.findAutoEvaluationRule(subTaskId) ?: throw BizException("鏈壘鍒扮浉鍏宠嚜鍔ㄨ瘎浼拌鍒�")
+        //鎬昏鍒欏搴旂殑璇勫垎瀛愯鍒�
+        val subRules = evaluationRuleRep.findSubRule(rule.guid)
+        //鏌ヨ缁撴灉
+        val result = ScoreDetail()
+        result.status = if (scene?.extension1.equals("1")) "鍦ㄥ缓" else "瀹屽伐"
+
+        result.updateTime = evaluation?.updatedate
+        subRules.forEach {
+            it.ertype ?: return@forEach
+            result.addDetail(result.details, it, it.ertype!! - 1, subRuleScores, true)
+        }
+        result.calScore()
+
+        return result
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3