From 85ef942e7195abeb71466b7159c3ee30161e1e54 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 07 四月 2026 08:51:01 +0800
Subject: [PATCH] 2026.4.7

---
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt |  207 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 140 insertions(+), 67 deletions(-)

diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt
index d58addf..251713f 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt
@@ -1,7 +1,6 @@
 package cn.flightfeather.supervision.lightshare.service.impl
 
 import cn.flightfeather.supervision.business.autooutput.score.AopEvaluation
-import cn.flightfeather.supervision.common.exception.BizException
 import cn.flightfeather.supervision.domain.ds1.entity.*
 import cn.flightfeather.supervision.domain.ds1.mapper.*
 import cn.flightfeather.supervision.common.utils.Constant
@@ -33,20 +32,28 @@
 
     @Autowired
     lateinit var taskService: TaskService
+
     @Autowired
     lateinit var taskMapper: TaskMapper
+
     @Autowired
     lateinit var evaluationMapper: EvaluationMapper
+
     @Autowired
     lateinit var problemlistMapper: ProblemlistMapper
+
     @Autowired
     lateinit var mediafileMapper: MediafileMapper
+
     @Autowired
     lateinit var scenseMapper: ScenseMapper
+
     @Autowired
     lateinit var inspectionMapper: InspectionMapper
+
     @Autowired
     lateinit var monitorobjectversionMapper: MonitorobjectversionMapper
+
     @Autowired
     lateinit var problemtypeMapper: ProblemtypeMapper
 
@@ -65,11 +72,11 @@
             criteria.andEqualTo("towncode", areaVo.towncode)
         criteria.andBetween("planstarttime", areaVo.starttime, areaVo.endtime)
         if (!Objects.equals(userGuid, Constant.UserType.ALL_USER.des))
-            criteria.andLike("executorguids","%"+userGuid+"%")
+            criteria.andLike("executorguids", "%" + userGuid + "%")
         var completecount = 0
         var subtasklist = subtaskMapper.selectByExample(example)
         subtasklist.forEach {
-            if (Objects.equals(it.status, Constant.TaskProgress.RUNINGSTATUS3.text)){
+            if (Objects.equals(it.status, Constant.TaskProgress.RUNINGSTATUS3.text)) {
                 completecount++
             }
         }
@@ -96,33 +103,41 @@
         return subtaskVoList
     }
 
-    override fun findByDayTaskID(dayTaskId: String, userId: String, userType: String): List<Subtask> {
+    override fun findByDayTaskID(dayTaskId: String, userId: String, userType: String): List<SubtaskVo> {
         val example = Example(Subtask::class.java)
         val criteria = example.createCriteria()
         criteria.andEqualTo("tsguid", dayTaskId)
         if (userType == "1") {
             example.and(
-                    example.createCriteria().orLike("executorguids", "%$userId%")
-                            .orLike("stAssessorguid", "%$userId%")
+                example.createCriteria().orLike("executorguids", "%$userId%")
+                    .orLike("stAssessorguid", "%$userId%")
             )
         }
         example.orderBy("name")
-        val result = subtaskMapper.selectByExample(example).apply{
-            forEach breaking@{
-                //宸插鏍告彁绀�
-                it.remark= Constant.PROBLEM_CHECK_PASS
-
-                problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
-                    createCriteria().andEqualTo("stguid", it.stguid)
-                    and(createCriteria().orIsNull("remark")
-                            .orNotEqualTo("remark", Constant.PROBLEM_DELETED))
-                }).forEach {problem ->
-                    //瀛愪换鍔′腑鏈夐棶棰樻湭瀹℃牳鏃讹紝璁剧疆鏈鏍告彁绀�
-                    if (problem.extension3 == Constant.PROBLEM_UNCHECKED) {
-                        it.remark= Constant.PROBLEM_UNCHECKED
-                        return@breaking
-                    }
+        val result = subtaskMapper.selectByExample(example).map {
+            val vo = SubtaskVo()
+            BeanUtils.copyProperties(it, vo)
+            vo
+        }.onEach {
+            //宸插鏍告彁绀�
+            it.remark = Constant.PROBLEM_CHECK_PASS
+            problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
+                createCriteria().andEqualTo("stguid", it.stguid)
+                and(
+                    createCriteria().orIsNull("remark")
+                        .orNotEqualTo("remark", Constant.PROBLEM_DELETED)
+                )
+            }).forEach { problem ->
+                //瀛愪换鍔′腑鏈夐棶棰樻湭瀹℃牳鏃讹紝璁剧疆鏈鏍告彁绀�
+                if (problem.extension3 == Constant.PROBLEM_UNCHECKED) {
+                    it.remark = Constant.PROBLEM_UNCHECKED
                 }
+            }
+
+            // 鍦烘櫙绫诲瀷
+            scenseMapper.selectByPrimaryKey(it.scenseid)?.let { s->
+                it.sceneTypeId = s.typeid
+                it.sceneTypeName = s.type
             }
         }
         return result
@@ -149,6 +164,7 @@
     @Transactional
     override fun saveList(subtasklist: List<Subtask>): Int {
         subtasklist.forEach {
+            if (it.stguid == null) it.stguid = UUIDGenerator.generate16ShortUUID()
             subtaskMapper.insert(it)
         }
         return subtasklist.size
@@ -167,13 +183,13 @@
         } else {
             guid
         }
-        val userTypeId = if (userType == "涓荤閮ㄩ棬"){
+        val userTypeId = if (userType == "涓荤閮ㄩ棬") {
             "2"
-        }else if (userType == "椋炵窘鐢ㄦ埛") {
+        } else if (userType == "椋炵窘鐢ㄦ埛") {
             "1"
-        } else if(userType == "绠$悊鍛�"){
+        } else if (userType == "绠$悊鍛�") {
             "0"
-        }else if (userType == "鍦烘櫙") {
+        } else if (userType == "鍦烘櫙") {
             "3"
         } else {
             userType
@@ -196,16 +212,19 @@
                 two = dateString
                 three = DateUtil.addMonth(dateString, 1)
             }
+
             "Left" -> {
                 one = DateUtil.addMonth(dateString, 1)
                 two = DateUtil.addMonth(dateString, 2)
                 three = DateUtil.addMonth(dateString, 3)
             }
+
             "Right" -> {
                 one = DateUtil.addMonth(dateString, -1)
                 two = DateUtil.addMonth(dateString, -2)
                 three = DateUtil.addMonth(dateString, -3)
             }
+
             else -> {
                 //鍙傛暟涓嶆纭氨杩斿洖
                 return taskPackList
@@ -250,16 +269,19 @@
                 two = dateString
                 three = DateUtil.addMonth(dateString, 1)
             }
+
             "Left" -> {
                 one = DateUtil.addMonth(dateString, 1)
                 two = DateUtil.addMonth(dateString, 2)
                 three = DateUtil.addMonth(dateString, 3)
             }
+
             "Right" -> {
                 one = DateUtil.addMonth(dateString, -1)
                 two = DateUtil.addMonth(dateString, -2)
                 three = DateUtil.addMonth(dateString, -3)
             }
+
             else -> {
                 //鍙傛暟涓嶆纭氨杩斿洖
                 return taskPackList
@@ -383,18 +405,21 @@
 
     override fun findAll(): MutableList<Subtask> = subtaskMapper.selectAll()
 
-    override fun save(subtask: Subtask): Int = subtaskMapper.insert(subtask)
+    override fun save(subtask: Subtask): Int {
+        if (subtask.stguid == null) subtask.stguid = UUIDGenerator.generate16ShortUUID()
+        return subtaskMapper.insert(subtask)
+    }
 
-    //鏇存柊瀛愪换鍔�
     override fun update(subtask: Subtask): Int {
+        var res = 0
         //鏍规嵁瀛愪换鍔uid鑾峰彇椤跺眰浠诲姟
         val toptaskVo = taskService.findByID(subtask.tguid.toString())
 
 //        //鏍规嵁鏃ユ湡鑾峰彇鏃ヤ换鍔�
-//        val daytaskVo = taskService.findByDate(DateUtil.getDate(subtask.planstarttime)!!)
+        val daytaskVo = taskService.findByDate(subtask.tguid!!, DateUtil.getDate(subtask.planstarttime)!!)
 
         //搴旇鐩存帴鏍规嵁瀛愪换鍔$殑鏃ヤ换鍔d鏌ヨ鏃ヤ换鍔�
-        val daytaskVo = taskService.findByID(subtask.tsguid!!)
+//        val daytaskVo = taskService.findByID(subtask.tsguid!!)
 
         //鍒ゆ柇鏄惁鏈夋棩浠诲姟
         if (StringUtil.isEmpty(daytaskVo.tguid)) {
@@ -407,41 +432,46 @@
             task.name = subtask.name
             task.starttime = DateUtil.StringToDate(DateUtil.getDate(subtask.planstarttime)!!.substring(0, 10))
             task.endtime =
-                    DateUtil.StringToDate(DateUtil.getDate(subtask.planstarttime)!!.substring(0, 10) + " 23:59:59")
+                DateUtil.StringToDate(DateUtil.getDate(subtask.planstarttime)!!.substring(0, 10) + " 23:59:59")
             //****鏃ヤ换鍔℃墽琛岀姸鎬佺户鎵垮瓙浠诲姟鐨勭姸鎬�*锛堜慨鏀癸級***
             task.runingstatus = subtask.status
             //********************************************
             taskService.save(task)
             subtask.tsguid = guid
-            subtaskMapper.updateByPrimaryKeySelective(subtask)
+            res = subtaskMapper.updateByPrimaryKeySelective(subtask)
         } else {
-//            subtask.tsguid = daytaskVo.tguid
+            subtask.tsguid = daytaskVo.tguid
             //*锛堜慨鏀癸級*鏃ヤ换鍔℃鍦ㄦ墽琛岋紝瀛愪换鍔$粨鏉燂紝閬嶅巻鎵�鏈夊叾浣欏瓙浠诲姟锛岄兘鏄粨鏉熸椂鎵嶅皢鏃ヤ换鍔′慨鏀逛负缁撴潫****
             if (subtask.status == Constant.TaskProgress.RUNINGSTATUS3.text
-                    && daytaskVo.runingstatus == Constant.TaskProgress.RUNINGSTATUS2.text){
+                && daytaskVo.runingstatus == Constant.TaskProgress.RUNINGSTATUS2.text
+            ) {
                 val subtaskVolist = findByDayTaskID(daytaskVo.tguid!!)
                 var bool = false
                 subtaskVolist.forEach {
-                    if (it.status != Constant.TaskProgress.RUNINGSTATUS3.text){
+                    if (it.status != Constant.TaskProgress.RUNINGSTATUS3.text) {
                         bool = true
                     }
                 }
-                if (!bool){
+                if (!bool) {
                     daytaskVo.runingstatus = Constant.TaskProgress.RUNINGSTATUS3.text
                 }
 
             }
             //涓よ�呯姸鎬佺浉鍚屾椂涓嶅仛淇敼锛屽叾浣欐儏鍐垫棩浠诲姟閮戒负姝e湪鎵ц
-            else if (subtask.status != daytaskVo.runingstatus){
+            else if (subtask.status != daytaskVo.runingstatus) {
                 daytaskVo.runingstatus = Constant.TaskProgress.RUNINGSTATUS2.text
             }
             val daytask = Task()
             BeanUtils.copyProperties(daytaskVo, daytask)
             taskMapper.updateByPrimaryKeySelective(daytask)
             //****************************************************************************************
-            subtaskMapper.updateByPrimaryKeySelective(subtask)
+            res = subtaskMapper.updateByPrimaryKeySelective(subtask)
         }
+        return res
+    }
 
+    override fun changeStatus(subtask: Subtask): Int {
+        val res = update(subtask)
         //瀵瑰凡缁撴潫鐨勫瓙浠诲姟杩涜鑷姩璇勫垎
         if (subtask.status == Constant.TaskProgress.RUNINGSTATUS3.text) {
             val example = Example(Evaluation::class.java)
@@ -453,10 +483,11 @@
             }
         }
 
-        return 1
+        return res
     }
 
-    override fun delete(id: String): Int{
+    @Transactional
+    override fun delete(id: String): Int {
         val subtask = subtaskMapper.selectByPrimaryKey(id)
         val dayTaskId = subtask.tsguid
         subtaskMapper.deleteByPrimaryKey(id)
@@ -474,15 +505,13 @@
             createCriteria().andEqualTo("tid", topTaskId).andEqualTo("sguid", sceneId)
         })
         mList.forEach {
-            if (it.monitornum == null) {
-                it.monitornum = 0
-            } else {
-                it.monitornum = it.monitornum!! - 1
-                if (it.monitornum!! < 0) {
-                    it.monitornum = 0
-                }
+            var count = it.extension1?.toIntOrNull() ?: 0
+            count--
+            if (count < 0) {
+                count = 0
             }
-            monitorobjectversionMapper.insert(it)
+            it.extension1 = count.toString()
+            monitorobjectversionMapper.updateByPrimaryKeySelective(it)
         }
 
         // 鍚屾椂鍒犻櫎瀵瑰簲闂鍜屽贰鏌ヨ褰�
@@ -493,7 +522,15 @@
     }
 
 
-    override fun searchSubTask(token: String, sceneType: Int?, districtCode: String?, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseSearchResultVo {
+    override fun searchSubTask(
+        token: String,
+        sceneType: Int?,
+        districtCode: String?,
+        startTime: String?,
+        endTime: String?,
+        page: Int?,
+        perPage: Int?,
+    ): BaseSearchResultVo {
         if (token != "jingan") {
             return BaseSearchResultVo().apply {
                 head = DataHead().apply {
@@ -536,7 +573,7 @@
 //        val  p = PageHelper.startPage<Subtask>(page ?: 1, perPage ?: 30)
         subtaskMapper.getSubtask2(null, null, _districtCode, _sceneType.toByte(), _startTime, _endTime).forEach {
             if (!subtaskMap.containsKey(it.subTaskId)) {
-                val vo =SubtaskSearchResultVo()
+                val vo = SubtaskSearchResultVo()
                 BeanUtils.copyProperties(it, vo)
                 subtaskMap[it.subTaskId] = vo
             }
@@ -546,7 +583,7 @@
                 problemMap[it.problemId] = problemDetail
                 subtaskMap[it.subTaskId]?.problemList?.add(problemDetail)
             }
-            val url = it.mExtension1 + it.mGuid+ ".jpg"
+            val url = it.mExtension1 + it.mGuid + ".jpg"
             if (it.isChanged == true) {
                 problemMap[it.problemId]?.rectificationPics?.add(url)
             } else {
@@ -627,7 +664,7 @@
             }
 
 
-            val p = PageHelper.startPage<Subtask>(page ?: 1, perPage ?: 30)
+            val p = PageHelper.startPage<SubtaskSearchResultVo>(page ?: 1, perPage ?: 30)
 
             val subtasklist = subtaskMapper.getSubtask(_districtCode, _startTime, _endTime, _sceneType?.toByte())
 
@@ -640,8 +677,10 @@
                         .andNotEqualTo("extension3", Constant.CHANGE_CHECK_FAIL)
                         .andIsNotNull("extension3")
                     time?.let {
-                        and(createCriteria().orGreaterThan("time", it)
-                            .orGreaterThan("changedtime", it))
+                        and(
+                            createCriteria().orGreaterThan("time", it)
+                                .orGreaterThan("changedtime", it)
+                        )
                     }
                 }).forEach { p ->
                     val problem = ProblemDetail().apply {
@@ -736,7 +775,16 @@
         return BaseResponse(true, "璇锋眰鎴愬姛", data = result)
     }
 
-    override fun searchSubTask3(token: String, updateTime: String?, sceneType: Int?, districtCode: String?, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<BaseSearchResultVo> {
+    override fun searchSubTask3(
+        token: String,
+        updateTime: String?,
+        sceneType: Int?,
+        districtCode: String?,
+        startTime: String?,
+        endTime: String?,
+        page: Int?,
+        perPage: Int?,
+    ): BaseResponse<BaseSearchResultVo> {
         if (token != "jinshan") {
             return BaseResponse(false, "璇锋眰token閿欒")
         }
@@ -778,7 +826,7 @@
             }
 
 
-            val p = PageHelper.startPage<Subtask>(page ?: 1, perPage ?: 30)
+            val p = PageHelper.startPage<SubtaskSearchResultVo>(page ?: 1, perPage ?: 30)
 
             val subtasklist = subtaskMapper.getSubtask(_districtCode, _startTime, _endTime, _sceneType?.toByte())
 
@@ -791,8 +839,10 @@
                         .andNotEqualTo("extension3", Constant.CHANGE_CHECK_FAIL)
                         .andIsNotNull("extension3")
                     time?.let {
-                        and(createCriteria().orGreaterThan("time", it)
-                            .orGreaterThan("changedtime", it))
+                        and(
+                            createCriteria().orGreaterThan("time", it)
+                                .orGreaterThan("changedtime", it)
+                        )
                     }
                 }).forEach { p ->
                     val problem = ProblemDetail().apply {
@@ -861,7 +911,7 @@
 //            val p = PageHelper.startPage<Subtask>(page ?: 1, perPage ?: 30)
             subtaskMapper.getSubtask2(time, time2, _districtCode, _sceneType?.toByte(), null, null).forEach {
                 if (!subtaskMap.containsKey(it.subTaskId)) {
-                    val vo =SubtaskSearchResultVo()
+                    val vo = SubtaskSearchResultVo()
                     BeanUtils.copyProperties(it, vo)
                     subtaskMap[it.subTaskId] = vo
                 }
@@ -871,7 +921,7 @@
                     problemMap[it.problemId] = problemDetail
                     subtaskMap[it.subTaskId]?.problemList?.add(problemDetail)
                 }
-                val url = it.mExtension1 + it.mGuid+ ".jpg"
+                val url = it.mExtension1 + it.mGuid + ".jpg"
                 if (it.isChanged == true) {
                     problemMap[it.problemId]?.rectificationPics?.add(url)
                 } else {
@@ -892,15 +942,37 @@
         return BaseResponse(true, "璇锋眰鎴愬姛", data = result)
     }
 
-    override fun findByDate(date: String, userId: String): List<SubtaskVo> {
-        val time = DateUtil.StringToDate(date)
+    override fun findByDate(date: String?, userId: String?, sceneId: String?): List<SubtaskVo> {
+        val time = if (date == null) null else DateUtil.StringToDate(date)
 
         val resultList = mutableListOf<SubtaskVo>()
 
-        subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
-            createCriteria().andLessThanOrEqualTo("planstarttime", time)
+        val subtasks = if (time != null) {
+            // 鑾峰彇鏌愪竴澶╃殑宸℃煡浠诲姟
+            subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
+                createCriteria().andLessThanOrEqualTo("planstarttime", time)
                     .andGreaterThanOrEqualTo("planendtime", time)
-        }).forEach {
+                    .apply { sceneId?.let { andEqualTo("scenseid", it) } }
+            })
+        } else {
+            // 鑾峰彇鏈�杩戜竴娆℃�讳换鍔″唴鐨勶紙鏌愪釜鍦烘櫙鐨勶級鎵�鏈夊贰鏌ヤ换鍔�
+            PageHelper.startPage<Subtask>(1, 1)
+            val lastOne = subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
+                createCriteria().apply {
+                    sceneId?.let { andEqualTo("scenseid", it) }
+                }
+                orderBy("planstarttime").desc()
+            }).takeIf { it.isNotEmpty() }?.get(0)
+            if (lastOne == null) {
+                emptyList()
+            } else {
+                subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
+                    createCriteria().andEqualTo("tguid", lastOne.tguid)
+                        .andEqualTo("scenseid", lastOne.scenseid)
+                })
+            }
+        }
+        subtasks.forEach {
             val vo = SubtaskVo()
             BeanUtils.copyProperties(it, vo)
             resultList.add(vo)
@@ -913,7 +985,7 @@
         topTaskId: String,
         startTime: String?,
         endTime: String?,
-        sceneTypeId: Int?
+        sceneTypeId: Int?,
     ): List<Subtask> {
 
         return subtaskMapper.selectByTopTask2(topTaskId, sceneTypeId)
@@ -926,7 +998,7 @@
     override fun getTaskProgressByArea(areaVo: AreaVo): List<TaskProgressVo> {
 //        areaVo.scensetypeid ?: throw BizException("缂哄皯鍦烘櫙绫诲瀷鍙傛暟")
         val res = mutableListOf<TaskProgressVo>()
-        taskRep.findTasks(areaVo).forEach {t->
+        taskRep.findTasks(areaVo).forEach { t ->
             if (t?.tguid == null) return@forEach
             val pro = TaskProgressVo().apply {
                 tguid = t.tguid
@@ -940,7 +1012,8 @@
                 districtName = t.districtname
                 townCode = t.towncode
                 townName = t.townname
-                subTaskSummary = subtaskMapper.getSummary(t.tguid!!, areaVo.scensetypeid?.toIntOrNull())
+                areaVo.topTaskId = t.tguid
+                subTaskSummary = subTaskRep.findSummary(areaVo)
             }
             res.add(pro)
         }

--
Gitblit v1.9.3