From 79bd8ea222cc3518ec91dce3dfb30fcf387cf96d Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期五, 25 四月 2025 16:45:13 +0800
Subject: [PATCH] 新增应急巡查线索任务相关接口

---
 src/main/kotlin/com/flightfeather/grid/service/impl/ClueQuestionServiceImpl.kt |   64 ++++++++++++++++++++++++++-----
 1 files changed, 53 insertions(+), 11 deletions(-)

diff --git a/src/main/kotlin/com/flightfeather/grid/service/impl/ClueQuestionServiceImpl.kt b/src/main/kotlin/com/flightfeather/grid/service/impl/ClueQuestionServiceImpl.kt
index 07ceb87..e224ef5 100644
--- a/src/main/kotlin/com/flightfeather/grid/service/impl/ClueQuestionServiceImpl.kt
+++ b/src/main/kotlin/com/flightfeather/grid/service/impl/ClueQuestionServiceImpl.kt
@@ -10,6 +10,7 @@
 import com.google.gson.Gson
 import org.springframework.beans.factory.annotation.Value
 import org.springframework.stereotype.Service
+import org.springframework.transaction.annotation.Transactional
 import org.springframework.web.multipart.MultipartFile
 import tk.mybatis.mapper.entity.Example
 import java.io.IOException
@@ -24,6 +25,7 @@
 
     override fun uploadQuestionAndImage(question: String, files: Array<MultipartFile>?): Boolean {
         val questionVo = Gson().fromJson(question, ClueQuestion::class.java)
+        if (questionVo.cqInternal == null) questionVo.cqInternal = false
         newQuestionUid(questionVo)
         val picPath = saveImageFile(questionVo, files)
         questionVo.cqFilePath = picPath
@@ -62,13 +64,22 @@
         if (question.cqId != null || question.cqUid != null) return
         // 鍚﹀垯鏍规嵁涓婁竴涓棶棰樼紪鍙烽『寤剁敓鎴愭柊缂栧彿
         PageHelper.startPage<ClueQuestion>(1, 1)
-        val clues = clueQuestionMapper.selectByExample(Example(ClueQuestion::class.java).apply {
-            createCriteria().andEqualTo("cId", question.cId)
+        val clueQuestions = clueQuestionMapper.selectByExample(Example(ClueQuestion::class.java).apply {
+            createCriteria().andEqualTo("cId", question.cId).apply {
+                if (question.cqInternal == true) {
+                    andEqualTo("cqInternal", true)
+                } else {
+                    and(
+                        createCriteria().orIsNull("cqInternal")
+                            .orEqualTo("cqInternal", false)
+                    )
+                }
+            }
             orderBy("cqId").desc()
         })
-        if (clues.isNotEmpty()) {
-            val clue = clues[0]
-            clue?.cqUid?.split("-")?.let {
+        if (clueQuestions.isNotEmpty()) {
+            val clueQuestion = clueQuestions[0]
+            clueQuestion?.cqUid?.split("-")?.let {
                 question.cqUid = "${it[0]}-${it[1].toInt() + 1}"
             }
         } else {
@@ -84,7 +95,13 @@
             val suffix = file.originalFilename?.split(".")?.last()
             val fileName = UUID.randomUUID().toString() + "." + suffix
             val basePath = imgPath
-            val path = "clue/${question.cId}/${question.cqUid}/"
+
+            // 瀵逛簬鍐呴儴绾跨储闂锛屽浘鐗囪矾寰勮鍋氬嚭鍖哄垎
+            val path = if (question.cqInternal) {
+                "internal-clue/${question.cId}/${question.cqUid}/"
+            } else {
+                "clue/${question.cId}/${question.cqUid}/"
+            }
             picPath += if (picPath.isEmpty()) {
                 "$path$fileName"
             } else {
@@ -100,22 +117,36 @@
         return picPath
     }
 
+    @Transactional
     override fun deleteImageFile(question: ClueQuestion, deleteImg: String) {
         try {
             deleteImg.split(";").forEach {
                 val path = imgPath + it
-                FileUtil.deleteFile(path)
+                if (FileUtil.deleteFile(path)) {
+                    question.cqFilePath = question.cqFilePath.replace(it, "")
+                    question.cqFilePath = question.cqFilePath.replace(";;", ";")
+                }
             }
         } catch (e: IOException) {
             throw BizException("鍥剧墖鍒犻櫎澶辫触锛屾湇鍔″櫒IO鎿嶄綔閿欒")
         }
-        question.cqFilePath.replace(deleteImg, "")
-        if (question.cqFilePath.isNotEmpty() && question.cqFilePath.last() == ';') question.cqFilePath.removeSuffix(";")
+        question.cqFilePath = question.cqFilePath.removePrefix(";")
+        question.cqFilePath = question.cqFilePath.removeSuffix(";")
     }
 
-    override fun getClueQuestion(clueId: String): List<ClueQuestion?> {
+    override fun getClueQuestion(clueId: String, internal: Boolean?): List<ClueQuestion?> {
         val res = clueQuestionMapper.selectByExample(Example(ClueQuestion::class.java).apply {
             createCriteria().andEqualTo("cId", clueId)
+                .apply {
+                    if (internal == true) {
+                        andEqualTo("cqInternal", true)
+                    } else {
+                        and(
+                            createCriteria().orIsNull("cqInternal")
+                                .orEqualTo("cqInternal", false)
+                        )
+                    }
+                }
             orderBy("cqId")
         })
         return res
@@ -126,6 +157,11 @@
             createCriteria().andEqualTo("cqUploaded", false).apply {
                 questionIdList?.let {
                     andIn("cqId", it)
+                    // 鎺掗櫎鎺夊唴閮ㄧ嚎绱㈤棶棰�
+                    and(
+                        createCriteria().orIsNull("cqInternal")
+                            .orEqualTo("cqInternal", false)
+                    )
                 }
             }
         }).forEach { it?.let { clueHttpService.uploadQuestion(it) } }
@@ -133,7 +169,13 @@
     }
 
     private fun deleteImageDirectory(question: ClueQuestion) {
-        val path = imgPath + "clue/${question.cId}/${question.cqUid}/"
+        // 瀵逛簬鍐呴儴绾跨储闂锛屽浘鐗囪矾寰勮鍋氬嚭鍖哄垎
+        val p = if (question.cqInternal) {
+            "internal-clue/${question.cId}/${question.cqUid}/"
+        } else {
+            "clue/${question.cId}/${question.cqUid}/"
+        }
+        val path = imgPath + p
         FileUtil.deleteDirectory(path)
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3