feiyu02
2024-08-02 16b961c2210fe29fd494ac1f9d830dd93503961f
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt
@@ -1,11 +1,14 @@
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
import cn.flightfeather.supervision.common.utils.DateUtil
import cn.flightfeather.supervision.common.utils.UUIDGenerator
import cn.flightfeather.supervision.domain.ds1.repository.SubTaskRep
import cn.flightfeather.supervision.domain.ds1.repository.TaskRep
import cn.flightfeather.supervision.lightshare.service.SubtaskService
import cn.flightfeather.supervision.lightshare.service.TaskService
import cn.flightfeather.supervision.lightshare.vo.*
@@ -16,6 +19,7 @@
import org.springframework.transaction.annotation.Transactional
import tk.mybatis.mapper.entity.Example
import tk.mybatis.mapper.util.StringUtil
import java.time.LocalDateTime
import java.util.*
import kotlin.math.ceil
@@ -23,9 +27,9 @@
class SubtaskServiceImpl(
    private val subtaskMapper: SubtaskMapper,
    private val aopEvaluation: AopEvaluation,
    private val taskRep: TaskRep,
    private val subTaskRep: SubTaskRep,
) : SubtaskService {
    val dateUtil = DateUtil()
    @Autowired
    lateinit var taskService: TaskService
@@ -182,25 +186,25 @@
            dateString = date.substring(0, 7)
        }
        //判断参数是否正确
        if (dateUtil.StringToDate(dateString) == null) {
        if (DateUtil.StringToDate(dateString) == null) {
            return taskPackList
        }
        //根据type类型,得到具体是要哪三个月数据
        when (type) {
            "Middle" -> {
                one = dateUtil.addMonth(dateString, -1)
                one = DateUtil.addMonth(dateString, -1)
                two = dateString
                three = dateUtil.addMonth(dateString, 1)
                three = DateUtil.addMonth(dateString, 1)
            }
            "Left" -> {
                one = dateUtil.addMonth(dateString, 1)
                two = dateUtil.addMonth(dateString, 2)
                three = dateUtil.addMonth(dateString, 3)
                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)
                one = DateUtil.addMonth(dateString, -1)
                two = DateUtil.addMonth(dateString, -2)
                three = DateUtil.addMonth(dateString, -3)
            }
            else -> {
                //参数不正确就返回
@@ -236,25 +240,25 @@
            dateString = date.substring(0, 7)
        }
        //判断参数是否正确
        if (dateUtil.StringToDate(dateString) == null) {
        if (DateUtil.StringToDate(dateString) == null) {
            return taskPackList
        }
        //根据type类型,得到具体是要哪三个月数据
        when (type) {
            "Middle" -> {
                one = dateUtil.addMonth(dateString, -1)
                one = DateUtil.addMonth(dateString, -1)
                two = dateString
                three = dateUtil.addMonth(dateString, 1)
                three = DateUtil.addMonth(dateString, 1)
            }
            "Left" -> {
                one = dateUtil.addMonth(dateString, 1)
                two = dateUtil.addMonth(dateString, 2)
                three = dateUtil.addMonth(dateString, 3)
                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)
                one = DateUtil.addMonth(dateString, -1)
                two = DateUtil.addMonth(dateString, -2)
                three = DateUtil.addMonth(dateString, -3)
            }
            else -> {
                //参数不正确就返回
@@ -387,9 +391,9 @@
        val toptaskVo = taskService.findByID(subtask.tguid.toString())
//        //根据日期获取日任务
//        val daytaskVo = taskService.findByDate(dateUtil.getDate(subtask.planstarttime)!!)
//        val daytaskVo = taskService.findByDate(DateUtil.getDate(subtask.planstarttime)!!)
        //2019.3.1 by Riku 应该直接根据子任务的日任务id查询日任务
        //应该直接根据子任务的日任务id查询日任务
        val daytaskVo = taskService.findByID(subtask.tsguid!!)
        //判断是否有日任务
@@ -401,9 +405,9 @@
            task.tsguid = toptaskVo.tguid
            task.tguid = guid
            task.name = subtask.name
            task.starttime = dateUtil.StringToDate(dateUtil.getDate(subtask.planstarttime)!!.substring(0, 10))
            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
            //********************************************
@@ -425,6 +429,7 @@
                if (!bool){
                    daytaskVo.runingstatus = Constant.TaskProgress.RUNINGSTATUS3.text
                }
            }
            //两者状态相同时不做修改,其余情况日任务都为正在执行
            else if (subtask.status != daytaskVo.runingstatus){
@@ -436,30 +441,6 @@
            //****************************************************************************************
            subtaskMapper.updateByPrimaryKeySelective(subtask)
        }
        //判断对应顶层任务的执行状态
        val daytaskVolist = taskService.getDayTaskByTaskID(toptaskVo.tguid!!)
        val iterator: Iterator<TaskVo> = daytaskVolist.iterator()
        if (daytaskVo.runingstatus == Constant.TaskProgress.RUNINGSTATUS3.text
                && toptaskVo.runingstatus == Constant.TaskProgress.RUNINGSTATUS2.text) {
            var bool = false
            while (iterator.hasNext()) {
                val tmp = iterator.next()
                if (tmp.runingstatus != Constant.TaskProgress.RUNINGSTATUS3.text) {
                    bool = true
                    break
                }
            }
            if (!bool){
                toptaskVo.runingstatus = Constant.TaskProgress.RUNINGSTATUS3.text
            }
        }
        else if (daytaskVo.runingstatus != toptaskVo.runingstatus){
            toptaskVo.runingstatus = Constant.TaskProgress.RUNINGSTATUS2.text
        }
        val toptask = Task()
        BeanUtils.copyProperties(toptaskVo, toptask)
        taskMapper.updateByPrimaryKeySelective(toptask)
        //对已结束的子任务进行自动评分
        if (subtask.status == Constant.TaskProgress.RUNINGSTATUS3.text) {
@@ -534,7 +515,7 @@
            cal.set(Calendar.MILLISECOND, 0)
            cal.time
        } else {
            DateUtil().StringToDate(startTime!!)
            DateUtil.StringToDate(startTime!!)
        }
        val _endTime = if (endTime.isNullOrBlank()) {
@@ -545,7 +526,7 @@
            cal.set(Calendar.MILLISECOND, 999)
            cal.time
        } else {
            DateUtil().StringToDate(endTime!!)?.apply {
            DateUtil.StringToDate(endTime!!)?.apply {
                time += 24 * 60 * 60 * 1000
            }
        }
@@ -592,95 +573,25 @@
            }
        }
//        val example = Example(Subtask::class.java).apply {
//            createCriteria().andEqualTo("districtcode", _districtCode)
//                    .andGreaterThanOrEqualTo("planstarttime", _startTime)
//                    .andLessThanOrEqualTo("planendtime", _endTime)
//        }
//
//        var counts = 0
//
//        val  p = PageHelper.startPage<Subtask>(page ?: 1, perPage ?: 30)
//
//        subtaskMapper.selectByExample(example).forEach { s ->
//
//            val scene = scenseMapper.selectByPrimaryKey(s.scenseid)
//            val inspection = inspectionMapper.selectByExample(Example(Inspection::class.java).apply {
//                createCriteria().andEqualTo("stguid", s.stguid)
//            }).takeIf { it.isNotEmpty() }?.get(0)
//            val evaluation = evaluationMapper.selectByExample(Example(Evaluation::class.java).apply {
//                createCriteria().andEqualTo("stguid", s.stguid)
//            }).takeIf { it.isNotEmpty() }?.get(0)
//
//            if (scene.typeid != _sceneType.toByte()) {
//                return@forEach
//            } else {
//                counts++
//            }
//
//
//            val subtaskSearchResultVo = SubtaskSearchResultVo().apply {
//                this.subTaskId = s.stguid
//                this.districtName = scene.districtname
//                this.townName = scene.townname
//                this.sceneName = scene.name
//                this.sceneAddress = scene.location
//                this.planStartTime = s.planstarttime
//                this.planEndTime = s.planendtime
//                this.status = s.status
//                this.path= inspection?.extension1
//                this.score = evaluation?.resultscorebef?.toIntOrNull()
//                this.level = when {
//                    score == null -> null
//                    score!! >= 54 -> "合格"
//                    else -> "不合格"
//                }
//            }
//            tempResult.data.add(subtaskSearchResultVo)
//
//            problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
//                createCriteria().andEqualTo("stguid", s.stguid)
//            }).forEach { p ->
//                val problem = ProblemDetail().apply {
//                    this.problemId = p.guid
//                    this.problemName = p.problemname
//                    this.longitude = p.longitude?.toDouble()
//                    this.latitude = p.latitude?.toDouble()
//                    this.location = p.location
//                    this.rectification = p.ischanged
//                    this.rectificationTime = p.changedtime
//                }
//                subtaskSearchResultVo.problemList.add(problem)
//
//                mediafileMapper.selectByExample(Example(Mediafile::class.java).apply {
//                    createCriteria().andEqualTo("businessguid", p.guid)
//                }).forEach { m ->
//                    val url = m.extension1 + m.guid + ".jpg"
//                    if (m.ischanged == true) {
//                        problem.rectificationPics.add(url)
//                    } else {
//                        problem.problemPics.add(url)
//                    }
//                }
//            }
//        }
//
//        tempResult.head = DataHead().apply {
//            this.page = p.pageNum
//            this.totalPage = p.pages
//        }
        return result
    }
    override fun searchSubTask2(token: String, updateTime: String?, sceneType: Int?, districtCode: String?, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<BaseSearchResultVo> {
    override fun searchSubTask2(
        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错误")
        }
        val time = if (updateTime != null) {
            DateUtil().StringToDate(updateTime)
            DateUtil.StringToDate(updateTime)
        } else {
            null
        }
@@ -699,7 +610,7 @@
                cal.set(Calendar.MILLISECOND, 0)
                cal.time
            } else {
                DateUtil().StringToDate(startTime!!)
                DateUtil.StringToDate(startTime!!)
            }
            val _endTime = if (endTime.isNullOrBlank()) {
@@ -710,7 +621,7 @@
                cal.set(Calendar.MILLISECOND, 999)
                cal.time
            } else {
                DateUtil().StringToDate(endTime!!)?.apply {
                DateUtil.StringToDate(endTime!!)?.apply {
                    this.time += 24 * 60 * 60 * 1000
                }
            }
@@ -724,13 +635,13 @@
                problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
                    createCriteria().andEqualTo("stguid", s.subTaskId)
                            .andNotEqualTo("extension3", Constant.PROBLEM_UNCHECKED)
                            .andNotEqualTo("extension3", Constant.PROBLEM_CHECK_FAIL)
                            .andNotEqualTo("extension3", Constant.CHANGE_CHECK_FAIL)
                            .andIsNotNull("extension3")
                        .andNotEqualTo("extension3", Constant.PROBLEM_UNCHECKED)
                        .andNotEqualTo("extension3", Constant.PROBLEM_CHECK_FAIL)
                        .andNotEqualTo("extension3", Constant.CHANGE_CHECK_FAIL)
                        .andIsNotNull("extension3")
                    time?.let {
                        and(createCriteria().orGreaterThan("time", it)
                                .orGreaterThan("changedtime", it))
                            .orGreaterThan("changedtime", it))
                    }
                }).forEach { p ->
                    val problem = ProblemDetail().apply {
@@ -794,7 +705,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
                }
@@ -804,7 +715,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 {
@@ -831,7 +742,7 @@
        }
        val time = if (updateTime != null) {
            DateUtil().StringToDate(updateTime)
            DateUtil.StringToDate(updateTime)
        } else {
            null
        }
@@ -850,7 +761,7 @@
                cal.set(Calendar.MILLISECOND, 0)
                cal.time
            } else {
                DateUtil().StringToDate(startTime!!)
                DateUtil.StringToDate(startTime!!)
            }
            val _endTime = if (endTime.isNullOrBlank()) {
@@ -861,7 +772,7 @@
                cal.set(Calendar.MILLISECOND, 999)
                cal.time
            } else {
                DateUtil().StringToDate(endTime!!)?.apply {
                DateUtil.StringToDate(endTime!!)?.apply {
                    this.time += 24 * 60 * 60 * 1000
                }
            }
@@ -982,7 +893,7 @@
    }
    override fun findByDate(date: String, userId: String): List<SubtaskVo> {
        val time = DateUtil().StringToDate(date)
        val time = DateUtil.StringToDate(date)
        val resultList = mutableListOf<SubtaskVo>()
@@ -998,67 +909,49 @@
        return resultList
    }
    override fun getByTopTaskAndDate(topTaskId: String, startTime: String?, endTime: String?, sceneTypeId: Int?): List<Subtask> {
//        val startDate = dateUtil.StringToDate(startTime)
//        val endDate = dateUtil.StringToDate(endTime)
//
//        val cal = Calendar.getInstance().apply { time = startDate }
//        val _startTime = dateUtil.DateToString(cal.time, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS) ?: startTime
//
//        if (endDate == null) {
//            cal.add(Calendar.MONTH, 1)
//            cal.add(Calendar.DAY_OF_MONTH, -1)
//        } else {
//            cal.time = endDate
//        }
//        cal.set(Calendar.HOUR_OF_DAY, 23)
//        cal.set(Calendar.MINUTE, 59)
//        cal.set(Calendar.SECOND, 59)
//        val _endTime = dateUtil.DateToString(cal.time, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS) ?: endTime
    override fun getByTopTaskAndDate(
        topTaskId: String,
        startTime: String?,
        endTime: String?,
        sceneTypeId: Int?
    ): List<Subtask> {
        val resultList = subtaskMapper.selectByTopTask2(topTaskId, sceneTypeId)
        return resultList
        return subtaskMapper.selectByTopTask2(topTaskId, sceneTypeId)
    }
    override fun getSummary(topTaskId: String, sceneTypeId: Int?): List<SubTaskSummary> {
//        val result = mutableListOf<SubTaskSummary>()
//        subtaskMapper.selectByTopTask2(topTaskId, sceneTypeId).forEach {
//            val scene = scenseMapper.selectByPrimaryKey(it.scenseid)
//            var p = 0
//            var c = 0
//            var pc = 0
//            var cc = 0
//            problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
//                createCriteria().andEqualTo("stguid", it.stguid)
//            }).forEach {pro ->
//                p++
//                if (pro.ischanged == true) c++
//                if (pro.extension3 != Constant.PROBLEM_UNCHECKED) pc++
//                if (pro.extension3 == Constant.CHANGE_CHECK_PASS || pro.extension3 == Constant.CHANGE_CHECK_FAIL) cc++
//            }
//            val ins = inspectionMapper.selectByExample(Example(Inspection::class.java).apply {
//                createCriteria().andEqualTo("stguid", it.stguid)
//            })
//            result.add(SubTaskSummary().apply {
//                stGuid = it.stguid
//                stName = it.name
//                if (ins.isNotEmpty()) insGuid = ins[0].guid
//                sceneId = it.scenseid
//                sceneName = scene.name
//                sceneType = scene.type
//                stPlanTime = it.planstarttime
//                proNum = p
//                changeNum = c
//                proCheckedNum = pc
//                changeCheckedNum = cc
//            })
//        }
//        return result
        return subtaskMapper.getSummary(topTaskId, sceneTypeId)
    }
    override fun getTaskProgressByArea(areaVo: AreaVo): List<TaskProgressVo> {
//        areaVo.scensetypeid ?: throw BizException("缺少场景类型参数")
        val res = mutableListOf<TaskProgressVo>()
        taskRep.findTasks(areaVo).forEach {t->
            if (t?.tguid == null) return@forEach
            val pro = TaskProgressVo().apply {
                tguid = t.tguid
                name = t.name
                levelnum = t.levelnum
                provinceCode = t.provincecode
                provinceName = t.provincename
                cityCode = t.citycode
                cityName = t.cityname
                districtCode = t.districtcode
                districtName = t.districtname
                townCode = t.towncode
                townName = t.townname
                subTaskSummary = subtaskMapper.getSummary(t.tguid!!, areaVo.scensetypeid?.toIntOrNull())
            }
            res.add(pro)
        }
        return res
    }
    override fun getByScene(sceneId: String, startTime: LocalDateTime?, endTime: LocalDateTime?): List<SubTaskSummary> {
        return subtaskMapper.getSummaryByScene(sceneId, startTime, endTime)
    }
    override fun getSummaryByArea(areaVo: AreaVo): List<SubTaskSummary> {
        return subTaskRep.findSummary(areaVo)
    }
}