feiyu02
2025-08-14 f373bbf83d9d2a7e5f96118d7dcd658c9fea8bc8
src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
@@ -29,8 +29,10 @@
     * 设置数据源
     */
    fun setResource(topTaskGuid: String?, sceneType: Int, districtName: String?, townCode: String?) {
        val config = AopDataConfig(topTaskGuid = topTaskGuid, sceneType = sceneType, districtName = districtName,
            townCode = townCode)
        val config = AopDataConfig(
            topTaskGuid = topTaskGuid, sceneType = sceneType, districtName = districtName,
            townCode = townCode
        )
        evaluationScene.config = config
        val check = aopSceneTypeCheck.checkSceneType(sceneType)
        if (check.first) {
@@ -60,8 +62,10 @@
    fun setResource(subtask: Subtask) {
        val scene = aopDbMapper.scenseMapper.selectByPrimaryKey(subtask.scenseid)
        val sceneType = scene.typeid?.toInt()
        val config = AopDataConfig(topTaskGuid = subtask.tguid, sceneType = sceneType,
            districtName = subtask.districtname, townCode = subtask.towncode)
        val config = AopDataConfig(
            topTaskGuid = subtask.tguid, sceneType = sceneType,
            districtName = subtask.districtname, townCode = subtask.towncode
        )
        evaluationScene.config = config
//        val check = aopSceneTypeCheck.checkSceneType(sceneType)
        this.mode = 0
@@ -72,7 +76,7 @@
    /**
     * 轮询数据源
     */
    fun loop(callback: (index:Int, evaluationScene: EvaluationScene) -> Unit) {
    fun loop(callback: (index: Int, evaluationScene: EvaluationScene) -> Unit) {
        when (mode) {
            0 -> {
                sceneSourceList.forEachIndexed { i, scene ->
@@ -84,6 +88,7 @@
                    } while (evaluationScene.gotoNextSubTask())
                }
            }
            1 -> {
                userSourceList.forEachIndexed { i, user ->
                    evaluationScene.clear()
@@ -109,6 +114,7 @@
                    callback(i, evaluationScene)
                }
            }
            1 -> {
                userSourceList.forEachIndexed { i, user ->
                    evaluationScene.clear()
@@ -149,7 +155,7 @@
    }
    // 单个评估对象
    inner class EvaluationScene(){
    inner class EvaluationScene() {
        var index = 0
        var config: AopDataConfig? = null
@@ -160,7 +166,7 @@
        fun setDefaultScene(s: Scense?) {
            scene.value = s
            userInfoTZ.fetch = {_,_ ->
            userInfoTZ.fetch = { _, _ ->
                val svUserId = aopDbMapper.userinfoMapper.selectByExample(Example(Userinfo::class.java).apply {
                    createCriteria().andEqualTo("dGuid", scene.value?.guid)
                })?.takeIf { m -> m.isNotEmpty() }?.get(0)?.guid
@@ -173,7 +179,7 @@
        fun setDefaultUserTZ(u: UserinfoTZ?) {
            userInfoTZ.value = u
            scene.fetch = {_,_ ->
            scene.fetch = { _, _ ->
                val svUserId = aopDbMapper.userMapMapper.selectByExample(Example(UserMap::class.java).apply {
                    createCriteria().andEqualTo("tzUserId", userInfoTZ.value?.guid)
                })?.takeIf { m -> m.isNotEmpty() }?.get(0)?.svUserId
@@ -182,15 +188,16 @@
            }
        }
        val userInfo = InfoProxy<Userinfo>{_,_ ->
        val userInfo = InfoProxy<Userinfo> { _, _ ->
            scene.value?.guid ?: return@InfoProxy null
            return@InfoProxy aopDbMapper.userinfoMapper.selectOne(Userinfo().apply {
                dGuid = scene.value?.guid
            })
        }
        //巡查任务信息
        var subTaskIndex = 0
        val subTask = InfoProxy<Subtask> {_,_ ->
        val subTask = InfoProxy<Subtask> { _, _ ->
            return@InfoProxy if (subTaskList.value?.isNotEmpty() == true) {
                subTaskList.value?.get(subTaskIndex)
            } else {
@@ -198,7 +205,7 @@
            }
        }
        val subTaskList = InfoProxy<List<Subtask>> {_,_ ->
        val subTaskList = InfoProxy<List<Subtask>> { _, _ ->
            return@InfoProxy aopDbMapper.subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
                createCriteria().andEqualTo("scenseid", scene.value?.guid)
//                    .andBetween("planstarttime", config?.startTime, config?.endTime)
@@ -207,25 +214,28 @@
        }
        //现场巡查信息
        val inspection = InfoProxy<Inspection>{_,_ ->
        val inspection = InfoProxy<Inspection> { _, _ ->
            val inspection = Inspection()
            inspection.stguid = subTask.value?.stguid
            return@InfoProxy aopDbMapper.inspectionMapper.selectOne(inspection)
        }
        //各场景特有的基本信息
        val baseScene = InfoProxy<BaseScene> {_,_ ->
        val baseScene = InfoProxy<BaseScene> { _, _ ->
            return@InfoProxy when (config?.sceneType.toString()) {
                // 监管系统
                Constant.SceneType.TYPE1.value -> {
                    aopDbMapper.sceneConstructionSiteMapper.selectByPrimaryKey(scene.value?.guid)
                }
                Constant.SceneType.TYPE2.value -> {
                    aopDbMapper.sceneWharfMapper.selectByPrimaryKey(scene.value?.guid)
                }
                Constant.SceneType.TYPE3.value -> {
                    aopDbMapper.sceneMixingPlantMapper.selectByPrimaryKey(scene.value?.guid)
                }
                Constant.SceneType.TYPE14.value -> {
                    aopDbMapper.sceneStorageYardMapper.selectByPrimaryKey(scene.value?.guid)
                }
@@ -233,15 +243,17 @@
                Constant.SceneType.TYPE5.value -> {
                    aopDbMapper.restaurantBaseInfoMapper.selectByPrimaryKey(userInfoTZ.value?.guid)
                }
                Constant.SceneType.TYPE6.value -> {
                    aopDbMapper.vehicleBaseInfoMapper.selectByPrimaryKey(userInfoTZ.value?.guid)
                }
                else -> null
            }
        }
        //具体的问题
        val problems = InfoProxy<MutableList<Problemlist>> {_,_ ->
        val problems = InfoProxy<MutableList<Problemlist>> { _, _ ->
            if (noRecord()) return@InfoProxy mutableListOf()
            return@InfoProxy aopDbMapper.problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
                createCriteria().andEqualTo("stguid", subTask.value?.stguid)
@@ -249,7 +261,7 @@
        }
        //评估总分
        val evaluation = InfoProxy<Evaluation> {_,_ ->
        val evaluation = InfoProxy<Evaluation> { _, _ ->
            if (noRecord()) return@InfoProxy null
            return@InfoProxy aopDbMapper.evaluationMapper.selectByExample(Example(Evaluation::class.java).apply {
@@ -258,7 +270,7 @@
        }
        //评估细则得分
        val itemevaluationList = InfoProxy<MutableList<Itemevaluation>> {_,_ ->
        val itemevaluationList = InfoProxy<MutableList<Itemevaluation>> { _, _ ->
            return@InfoProxy aopDbMapper.itemevaluationMapper.selectByExample(Example(Itemevaluation::class.java).apply {
                createCriteria().andEqualTo("stguid", subTask.value?.stguid)
            })
@@ -289,6 +301,14 @@
                createCriteria()
                    .andEqualTo("tasktypeid", 99)
                    .andEqualTo("scensetypeid", scene.value?.typeid)
                and(createCriteria().orEqualTo("provincecode", scene.value?.provincecode).orIsNull("provincecode"))
                and(createCriteria().orEqualTo("citycode", scene.value?.citycode).orIsNull("citycode"))
                and(createCriteria().orEqualTo("districtcode", scene.value?.districtcode).orIsNull("districtcode"))
                and(createCriteria().orEqualTo("towncode", scene.value?.towncode).orIsNull("towncode"))
                orderBy("towncode").desc()
                    .orderBy("districtcode").desc()
                    .orderBy("citycode").desc()
                    .orderBy("provincecode").desc()
            })
            if (rule.isNotEmpty()) {
                this@EvaluationScene.baseRule.value = rule[0]
@@ -349,7 +369,7 @@
        val rules = InfoProxy<MutableList<Pair<EvaluationSubRuleVo, MutableList<EvaluationSubRuleVo>>>>()
        //必填台账数量
        val ledgerCount = InfoProxy<Int>(config?.sceneType.toString()) {_, cacheMap ->
        val ledgerCount = InfoProxy<Int>(config?.sceneType.toString()) { _, cacheMap ->
            val tzSceneType = Constant.SceneType.typeMap(scene.value?.typeid)
            val list = aopDbMapper.ledgerSubTypeMapper.selectCountByExample(Example(LedgerSubType::class.java).apply {
                createCriteria().andEqualTo("lScenetype", tzSceneType).andEqualTo("lNeedupdate", true)
@@ -359,7 +379,7 @@
        }
        //用户实际提交台账数量
        val ledgerRecords = InfoProxy<List<LedgerRecord>> {_,_ ->
        val ledgerRecords = InfoProxy<List<LedgerRecord>> { _, _ ->
            return@InfoProxy aopDbMapper.ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
                createCriteria().andEqualTo("lrYear", config?.year)
                    .andEqualTo("lrMonth", config?.month)
@@ -378,9 +398,12 @@
                orderBy("planstarttime").desc()
            })
            if (r.isNotEmpty()) {
                val thisMonth = LocalDateTime.ofInstant(subTask.value?.planstarttime?.toInstant(), ZoneId.systemDefault())
                    .withDayOfMonth(1).toLocalDate()
                val lastMonth = LocalDateTime.ofInstant(r[0]?.planstarttime?.toInstant(), ZoneId.systemDefault()).withDayOfMonth(1).toLocalDate()
                val thisMonth =
                    LocalDateTime.ofInstant(subTask.value?.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.value = r[0]
                }
@@ -458,12 +481,13 @@
                if (defaultValue != null) {
                    return defaultValue
                } else if (!fetched && _value == null) {
                    _value = if (cacheMap.containsKey(key) && LocalDateTime.now().minusDays(1).isBefore(cacheTimeStamp)) {
                        cacheMap[key]
                    } else {
                        cacheTimeStamp = LocalDateTime.now()
                        fetch(defaultValue, cacheMap)
                    }
                    _value =
                        if (cacheMap.containsKey(key) && LocalDateTime.now().minusDays(1).isBefore(cacheTimeStamp)) {
                            cacheMap[key]
                        } else {
                            cacheTimeStamp = LocalDateTime.now()
                            fetch(defaultValue, cacheMap)
                        }
                    fetched = true
                }
                return _value