feiyu02
2024-11-21 9de446b0b83610055437fbc5172d216bb374900f
src/main/kotlin/cn/flightfeather/supervision/business/report/DataSource.kt
@@ -11,6 +11,7 @@
import cn.flightfeather.supervision.domain.ds2.mapper.LedgerSubTypeMapper
import cn.flightfeather.supervision.domain.ds2.mapper.UserMapMapper
import cn.flightfeather.supervision.lightshare.vo.ExcelConfigVo
import org.springframework.stereotype.Component
import tk.mybatis.mapper.entity.Example
import java.time.LocalDateTime
import java.time.ZoneId
@@ -21,8 +22,6 @@
 * @param config 生成报告的参数
 */
class DataSource(val config: ExcelConfigVo, val dbMapper: DbMapper){
    private val dateUtil = DateUtil()
    private val sourceList = mutableListOf<Subtask>()
@@ -60,7 +59,7 @@
     */
    fun reset() {
        rowData.index = 0
        rowData.subTask = sourceList.first()
        rowData.subTask = if (sourceList.isEmpty()) null else sourceList.first()
        rowData.clear()
    }
@@ -69,7 +68,7 @@
     */
    fun areaName(): String {
        val t = dbMapper.taskMapper.selectByPrimaryKey(config.topTaskGuid)
        return "${dateUtil.DateToString(t.starttime, DateUtil.DateStyle.YYYY_MM_CN)}${t.districtname}${if (area != t.districtname) area else ""}${Constant.SceneType.getDes(config.sceneType)}"
        return "${DateUtil.DateToString(config.startTime, DateUtil.DateStyle.YYYY_MM_CN)}${t.districtname}${if (area != t.districtname) area else ""}${Constant.SceneType.getDes(config.sceneType)}"
    }
    /**
@@ -86,52 +85,52 @@
            })?.takeIf { it.isNotEmpty() }?.get(0)?.let { area = it.townname ?: "" }
        }
        dbMapper.taskMapper.selectByPrimaryKey(config.topTaskGuid).let {
        dbMapper.taskMapper.selectByPrimaryKey(config.topTaskGuid)?.let {
            val time = LocalDateTime.ofInstant(it.starttime?.toInstant(), ZoneId.systemDefault())
            this.year = time.year
            this.month = time.monthValue
            if (area.isBlank()) area = it.districtname ?: ""
        }
        //1. 查找特定的巡查任务或者所有的计划巡查任务
        var taskSceneIdList = listOf<String>()
        val subTaskList = if (config.subTaskIdList?.isNotEmpty() == true ||
            (config.startTime != null || config.endTime != null)
        ) {
            dbMapper.subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
                createCriteria().apply {
                    if (config.subTaskIdList?.isNotEmpty() == true) {
                        andIn("stguid", config.subTaskIdList)
                    }
                    config.startTime?.let { andGreaterThanOrEqualTo("planstarttime", it) }
                    config.endTime?.let { andLessThanOrEqualTo("planendtime", it) }
                    config.districtCode?.let { andEqualTo("districtcode", it) }
//                    andEqualTo("tguid", config.topTaskGuid)
                }
            })
        } else {
            taskSceneIdList = dbMapper.scenseMapper.getSceneByType(config.topTaskGuid, config
                .sceneType, config.townCode).map { it.guid ?: "" }
            dbMapper.subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
                createCriteria().andIn("scenseid", taskSceneIdList)
                    .andEqualTo("tguid", config.topTaskGuid)
            })
        }
        // 统计总任务下所有场景
        if (config.allScene) {
            //1. 查找特定的巡查任务或者所有的计划巡查任务
            val taskSceneIdList = dbMapper.scenseMapper.getSceneByType(config.topTaskGuid, config.sceneType,
                config.townCode).map { it.guid ?: "" }
        if (taskSceneIdList.isNotEmpty()) {
            taskSceneIdList.forEach {
                var subtask: Subtask? = null
                for (s in subTaskList) {
                    if (s.scenseid == it) {
                        subtask = s
                        result.add(s)
            val subTaskList = dbMapper.subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
                createCriteria().apply {
                    if (taskSceneIdList.isNotEmpty()) andIn("scenseid", taskSceneIdList)
                }.andEqualTo("tguid", config.topTaskGuid)
            })
            // 给还未巡查的场景生成空的子任务对象
            if (taskSceneIdList.isNotEmpty()) {
                taskSceneIdList.forEach {
                    var subtask: Subtask? = null
                    for (s in subTaskList) {
                        if (s.scenseid == it) {
                            subtask = s
                            result.add(s)
                        }
                    }
                    if (subtask == null) {
                        result.add(Subtask().apply { scenseid = it })
                    }
                }
                if (subtask == null) {
                    result.add(Subtask().apply { scenseid = it })
                }
            } else {
                result.addAll(subTaskList)
            }
        } else {
        }
        else {
            val subTaskList = dbMapper.subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
                    createCriteria().apply {
                        if (config.subTaskIdList?.isNotEmpty() == true) andIn("stguid", config.subTaskIdList)
                        config.startTime?.let { andGreaterThanOrEqualTo("planstarttime", it) }
                        config.endTime?.let { andLessThanOrEqualTo("planendtime", it) }
                        config.districtCode?.let { andEqualTo("districtcode", it) }
                        andEqualTo("tguid", config.topTaskGuid)
                    }
                })
            result.addAll(subTaskList)
        }
@@ -181,19 +180,19 @@
        private var _baseScene: BaseScene? = null
        //具体的问题
        val problems: MutableList<Problemlist>
        val problems: List<Problemlist>
            get() {
                if (noRecord()) return mutableListOf()
                if (_problems.isEmpty()) {
                if (_problems == null) {
                    val r = dbMapper.problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
                        createCriteria().andEqualTo("stguid", subTask?.stguid)
                    })
                    _problems.addAll(r)
                    _problems = r
                }
                return _problems
                return _problems ?: emptyList()
            }
        private var _problems = mutableListOf<Problemlist>()
        private var _problems: List<Problemlist>? = null
        //评估总分
        val evaluation: Evaluation?
@@ -210,38 +209,40 @@
        private var _evaluation: Evaluation? = null
        //评估细则得分
        val itemevaluationList: MutableList<Itemevaluation>
        val itemevaluationList: List<Itemevaluation>
            get() {
                if (_itemevaluationList.isEmpty()) {
                if (_itemevaluationList == null) {
                    val r = dbMapper.itemevaluationMapper.selectByExample(Example(Itemevaluation::class.java).apply {
                        createCriteria().andEqualTo("stguid", subTask?.stguid)
                    })
                    _itemevaluationList.addAll(r)
                    _itemevaluationList = r
                    println("-------------------itemevaluationList--------------------------------")
                }
                return _itemevaluationList
                return _itemevaluationList ?: emptyList()
            }
        private var _itemevaluationList = mutableListOf<Itemevaluation>()
        private var _itemevaluationList: List<Itemevaluation>? = null
        //问题类型
        val problemTypes: MutableList<Problemtype>
        val problemTypes: List<Problemtype>
            get() {
                if (_problemTypes.isEmpty()) {
                if (_problemTypes == null) {
                    val r = dbMapper.problemtypeMapper.selectByExample(Example(Problemtype::class.java).apply {
                        createCriteria().andEqualTo("scensetypeid", scene?.typeid)
                            .andEqualTo("districtcode", scene?.districtcode)
                        orderBy("extension1")
                    })
                    _problemTypes.addAll(r)
                    _problemTypes = r
                }
                return _problemTypes
                return _problemTypes ?: emptyList()
            }
        private var _problemTypes = mutableListOf<Problemtype>()
        private var _problemTypes: List<Problemtype>? = null
        //自动评分规则一级分类
        val topItems: MutableList<Evaluationsubrule2>
        val topItems: List<Evaluationsubrule2>
            get() {
                if (_topItems.isEmpty()) {
                if (_topItems == null) {
                    val tempTopItems = mutableListOf<Evaluationsubrule2>()
                    val secRules = mutableListOf<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>()
                    val rule = dbMapper.evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
                        createCriteria()
                            .andEqualTo("tasktypeid", 99)
@@ -254,13 +255,13 @@
                        })
                        rules.forEach {
                            if (it.ertype == 2) {
                                _topItems.add(it)
                                tempTopItems.add(it)
                            }
                        }
                        _topItems.sortBy { it.displayid }
                        tempTopItems.sortBy { it.displayid }
                        var t = 0
                        _topItems.forEach {
                        tempTopItems.forEach {
                            t += it.maxscore ?: 0
                            val tempRules = mutableListOf<Evaluationsubrule2>()
                            for (i in rules) {
@@ -281,24 +282,26 @@
                                    }
                                }
                                tempSubRules.sortBy { ts -> ts.displayid }
                                this._rules.add(Pair(temp, tempSubRules))
                                secRules.add(Pair(temp, tempSubRules))
                            }
                        }
                    }
                    this._rules = secRules
                    _topItems = tempTopItems
                }
                return _topItems
                return _topItems ?: emptyList()
            }
        private var _topItems = mutableListOf<Evaluationsubrule2>()
        private var _topItems: List<Evaluationsubrule2>? = null
        //自动评分规则二级和三级分类
        val rules: MutableList<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>
        val rules: List<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>
            get() {
                if (_rules.isEmpty()) {
                if (_rules == null) {
                    this.topItems
                }
                return _rules
                return _rules ?: emptyList()
            }
        private var _rules = mutableListOf<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>()
        private var _rules: List<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>? = null
        //必填台账数量
        val ledgerCount: Int
@@ -370,14 +373,14 @@
        fun clear() {
            _scene = null
            _baseScene = null
            _problems.clear()
            _problems = null
            _evaluation = null
            _itemevaluationList.clear()
            _itemevaluationList = null
            _ledgerRecordNum = null
            if (lastScene != null && lastScene?.typeid != scene?.typeid) {
                _problemTypes.clear()
                _topItems.clear()
                _rules.clear()
                _problemTypes = null
                _topItems = null
                _rules = null
                _ledgerCount = -1
            }
            recordLastScene()
@@ -390,6 +393,7 @@
    }
}
@Component
data class DbMapper(
    val scenseMapper: ScenseMapper,
    val problemlistMapper: ProblemlistMapper,