| | |
| | | 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 |
| | | |
| | |
| | | |
| | | // 获取总任务下所有的子任务 |
| | | 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 -> |
| | |
| | | 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" |
| | |
| | | // 当多个人一起执行同一任务时,平分巡查量 |
| | | 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() |
| | | } |
| | | |
| | |
| | | override fun create(task: Task): Task { |
| | | val res = save(task) |
| | | if (res < 1) |
| | | throw BizException("任务创建失败") |
| | | throw BizException("总任务或当日任务创建失败") |
| | | else |
| | | return task |
| | | } |