feiyu02
2024-01-09 c1becf4cbd2e99601ce011c14b8742427249cfb4
src/main/kotlin/cn/flightfeather/supervision/business/report/DataSource.kt
@@ -11,12 +11,9 @@
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.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import tk.mybatis.mapper.entity.Example
import java.time.LocalDateTime
import java.time.ZoneId
import javax.annotation.PostConstruct
/**
 * 报告所需源数据
@@ -38,21 +35,22 @@
    val rowData = RowData()
    init {
        if (config.districtCode == null) {
            throw IllegalStateException("参数缺少区县编码:[districtCode]")
        }
        if (config.sceneType == null) {
            throw IllegalStateException("参数缺少场景类型:[sceneType]")
        }
//        if (config.districtCode == null) {
//            throw IllegalStateException("参数缺少区县编码:[districtCode]")
//        }
//        if (config.sceneType == null) {
//            throw IllegalStateException("参数缺少场景类型:[sceneType]")
//        }
        getSource(config)
    }
    fun loop(callback: (index:Int, rowData: RowData) -> Unit) {
        reset()
//        reset()
        for (i in sourceList.indices) {
//            rowData.recordLastScene()
            rowData.index = i
            rowData.clear()
            rowData.subTask = sourceList[i]
            rowData.clear()
            callback(i, rowData)
        }
    }
@@ -71,14 +69,14 @@
     */
    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.ScenseType.getDes(config.sceneType)}"
        return "${dateUtil.DateToString(t.starttime, DateUtil.DateStyle.YYYY_MM_CN)}${t.districtname}${if (area != t.districtname) area else ""}${Constant.SceneType.getDes(config.sceneType)}"
    }
    /**
     * 获取报告数据源
     * 获取报告数据源(巡查任务)
     */
    private fun getSource(config: ExcelConfigVo) {
        if (config.sceneType == null) return
//        if (config.sceneType == null) return
        val result = mutableListOf<Subtask>()
@@ -107,6 +105,8 @@
                    }
                    config.startTime?.let { andGreaterThanOrEqualTo("planstarttime", it) }
                    config.endTime?.let { andLessThanOrEqualTo("planendtime", it) }
                    config.districtCode?.let { andEqualTo("districtcode", it) }
//                    andEqualTo("tguid", config.topTaskGuid)
                }
            })
        } else {
@@ -123,11 +123,12 @@
                for (s in subTaskList) {
                    if (s.scenseid == it) {
                        subtask = s
                        break
                        result.add(s)
                    }
                }
                if (subtask == null) subtask = Subtask().apply { scenseid = it }
                result.add(subtask)
                if (subtask == null) {
                    result.add(Subtask().apply { scenseid = it })
                }
            }
        } else {
            result.addAll(subTaskList)
@@ -141,6 +142,8 @@
        var index = 0
        var subTask: Subtask? = null
        private var lastScene: Scense? = null
        //场景基本信息
        val scene: Scense?
@@ -157,16 +160,16 @@
            get() {
                if (_baseScene == null) {
                    _baseScene = when (this.scene?.typeid.toString()) {
                        Constant.ScenseType.TYPE1.value -> {
                        Constant.SceneType.TYPE1.value -> {
                            dbMapper.sceneConstructionSiteMapper.selectByPrimaryKey(scene?.guid)
                        }
                        Constant.ScenseType.TYPE2.value -> {
                        Constant.SceneType.TYPE2.value -> {
                            dbMapper.sceneWharfMapper.selectByPrimaryKey(scene?.guid)
                        }
                        Constant.ScenseType.TYPE3.value -> {
                        Constant.SceneType.TYPE3.value -> {
                            dbMapper.sceneMixingPlantMapper.selectByPrimaryKey(scene?.guid)
                        }
                        Constant.ScenseType.TYPE14.value -> {
                        Constant.SceneType.TYPE14.value -> {
                            dbMapper.sceneStorageYardMapper.selectByPrimaryKey(scene?.guid)
                        }
                        else -> null
@@ -191,6 +194,7 @@
            }
        private var _problems = mutableListOf<Problemlist>()
        //评估总分
        val evaluation: Evaluation?
            get() {
                if (_evaluation == null) {
@@ -204,6 +208,7 @@
            }
        private var _evaluation: Evaluation? = null
        //评估细则得分
        val itemevaluationList: MutableList<Itemevaluation>
            get() {
                if (_itemevaluationList.isEmpty()) {
@@ -222,8 +227,8 @@
            get() {
                if (_problemTypes.isEmpty()) {
                    val r = dbMapper.problemtypeMapper.selectByExample(Example(Problemtype::class.java).apply {
                        createCriteria().andEqualTo("scensetypeid", config.sceneType)
                            .andEqualTo("districtcode", config.districtCode)
                        createCriteria().andEqualTo("scensetypeid", scene?.typeid)
                            .andEqualTo("districtcode", scene?.districtcode)
                        orderBy("extension1")
                    })
                    _problemTypes.addAll(r)
@@ -239,7 +244,7 @@
                    val rule = dbMapper.evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
                        createCriteria()
                            .andEqualTo("tasktypeid", 99)
                            .andEqualTo("scensetypeid", config.sceneType)
                            .andEqualTo("scensetypeid", scene?.typeid)
                    })
                    if (rule.isNotEmpty()) {
                        val ruleId = rule[0].guid
@@ -298,7 +303,7 @@
        val ledgerCount: Int
            get() {
                if (_ledgerCount == -1) {
                    val tzSceneType = Constant.ScenseType.typeMap(config.sceneType?.toByte())
                    val tzSceneType = Constant.SceneType.typeMap(scene?.typeid)
                    _ledgerCount = dbMapper.ledgerSubTypeMapper.selectCountByExample(Example(LedgerSubType::class.java).apply {
                        createCriteria().andEqualTo("lScenetype", tzSceneType).andEqualTo("lNeedupdate", true)
                    })
@@ -332,6 +337,33 @@
        private var _ledgerRecordNum: List<LedgerRecord>? = null
        /**
         * 获取当前巡查任务的上期巡查记录
         */
        fun lastOne(): RowData {
            val last = RowData()
            val r = dbMapper.subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
                createCriteria().andEqualTo("scenseid", subTask?.scenseid)
                    .andLessThan("planstarttime", subTask?.planstarttime)
                orderBy("planstarttime").desc()
            })
            if (r.isNotEmpty()) {
                val thisMonth = LocalDateTime.ofInstant(subTask?.planstarttime?.toInstant(), ZoneId.systemDefault()).withDayOfMonth(1).toLocalDate()
                val lastMonth = LocalDateTime.ofInstant(r[0]?.planstarttime?.toInstant(), ZoneId.systemDefault()).withDayOfMonth(1).toLocalDate()
                if (lastMonth.plusMonths(1).isEqual(thisMonth)) {
                    last.subTask = r[0]
                }
            }
            return last
        }
        /**
         * 记录上一个场景
         */
        fun recordLastScene() {
            lastScene = scene
        }
        /**
         * 清空当前处理的对象的相关数据源
         */
        fun clear() {
@@ -341,6 +373,13 @@
            _evaluation = null
            _itemevaluationList.clear()
            _ledgerRecordNum = null
            if (lastScene != null && lastScene?.typeid != scene?.typeid) {
                _problemTypes.clear()
                _topItems.clear()
                _rules.clear()
                _ledgerCount = -1
            }
            recordLastScene()
        }
        /**