feiyu02
9 天以前 85ef942e7195abeb71466b7159c3ee30161e1e54
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/TaskServiceImpl.kt
@@ -21,6 +21,8 @@
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import tk.mybatis.mapper.entity.Example
import java.time.LocalDateTime
import java.time.ZoneId
import java.util.*
import kotlin.collections.ArrayList
@@ -335,11 +337,14 @@
        // 获取总任务下所有的子任务
        val subTasks = subTaskRep.findAll(Subtask().apply { tguid = taskId })
        if (subTasks.isEmpty()) return emptyList()
        // 获取所有子任务涉及的巡查场景信息
        val sceneList = scenseMapper.selectByExample(Example(Scense::class.java).apply {
            createCriteria().andIn("guid", subTasks.map { it?.scenseid })
        })
        val sceneList = if (subTasks.isEmpty()) {
            emptyList()
        } else {
            scenseMapper.selectByExample(Example(Scense::class.java).apply {
                createCriteria().andIn("guid", subTasks.map { it?.scenseid })
            })
        }
        //根据sql条件查询
        dayTasks.forEach { t ->
@@ -375,7 +380,7 @@
            val userProgressMap = mutableMapOf<String, ProgressPerUserPerDay>()
            filterSubTasks.forEach fst@{ fst ->
                fst ?: return@fst
                // fixme 2025.11.30 由于监管APP的bug,导致用户可以不选择执行人员直接创建任务,所以暂时将没有执行人员的任务定义为匿名用户
                // 2026.2.2 将没有执行人员的任务定义为匿名用户
                if (fst.executorguids.isNullOrBlank()) {
                    fst.executorguids = "niming"
                    fst.executorusernames = "niming"
@@ -398,27 +403,41 @@
                        // 当多个人一起执行同一任务时,平分巡查量
                        this.totalTaskNum += 1.0 / ids.size
                        if (fst.status == Constant.TaskProgress.RUNINGSTATUS3.text) {
                            this.completeTaskNum += 1.0 / ids.size
                        }
                        this.completeTaskNum += 1.0 / ids.size
                        // 单人整改率累计(评分)
                        this.totalProblemNum += proList.size.toDouble() / ids.size
                        this.changedProblemNum += proList.filter { it.ischanged == true }.size.toDouble() / ids.size
                        this.changedProblemNumOnTime += proList.filter {
                            // 是否在同一天内整改
                            val _changedDate = it.changedtime?.let { c->
                                LocalDateTime.ofInstant(c.toInstant(), ZoneId.systemDefault()).toLocalDate()
                            }
                            val _proDate = it.time?.let { t->
                                LocalDateTime.ofInstant(t.toInstant(), ZoneId.systemDefault()).toLocalDate()
                            }
                            val isSameDay = _changedDate?.equals(_proDate)
                            it.ischanged == true && (isSameDay ?: false)
                        }.size.toDouble() / ids.size
                        this.efficientChangedProNum += proList.filter {
                            // 整改耗时(天)
                            val day = ((it.changedtime?.time ?: 0L) - (it?.time?.time ?: 0L)).div(1000 * 60 * 60 * 24)
                            it.ischanged == true && day <= 1
                            it.ischanged == true && day <= 2
                        }.size.toDouble() / ids.size
                        // 此处先累计巡查时长,最后再根据任务数量平均
                        this.avgInspectionTime +=
                            ((fst.executionendtime?.time ?: 0L) - (fst.executionstarttime?.time ?: 0L)).div(1000).div(ids.size)
                        this.avgInspectionTime += if (fst.executionendtime == null || fst.executionstarttime == null) {
                            0
                        } else {
                            (fst.executionendtime!!.time - fst.executionstarttime!!.time).div(1000).div(ids.size)
                        }
                    }
                }
            }
            // 统一计算平均巡查时长(秒)
            userProgressMap.forEach { (t, u) ->
                u.avgInspectionTime = (u.avgInspectionTime / u.completeTaskNum).toLong()
                u.avgInspectionTime = if (u.completeTaskNum == .0 ) 0 else (u.avgInspectionTime / u.completeTaskNum).toLong()
                u.formatParam()
            }
@@ -725,7 +744,7 @@
    override fun create(task: Task): Task {
        val res = save(task)
        if (res < 1)
            throw BizException("任务创建失败")
            throw BizException("总任务或当日任务创建失败")
        else
            return task
    }