From c1becf4cbd2e99601ce011c14b8742427249cfb4 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 09 一月 2024 17:25:05 +0800
Subject: [PATCH] 1. 多项调整

---
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/EvaluationMapper.kt                      |    3 
 src/main/resources/mapper/ds1/EvaluationMapper.xml                                                      |   92 +
 src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BgTaskController.kt                         |   37 
 src/main/resources/application-pro.yml                                                                  |   17 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationruleService.kt                |    3 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopEvaluation.kt                 |   46 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/JSDustDataMapper.kt                      |   12 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/AopDataAnalysis.kt        |   54 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataConfig.kt            |    6 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/FumeSiteMapMapper.kt                     |    8 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/BgTaskServiceImpl.kt               |   54 
 src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColStatus.kt                          |    8 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/EvaluationRuleRep.kt                 |   30 
 src/main/resources/application-dev.yml                                                                  |   13 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt            |   32 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem5.kt       |  118 +
 src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/JSDustSiteMapMapper.java                 |    8 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/storage/StScoreItem1.kt          |    6 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationruleController.kt                 |    5 
 src/main/resources/application-test.yml                                                                 |   28 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSCsDataAnalysis.kt       |   24 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationruleServiceImpl.kt       |   11 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreItem.kt                     |    6 
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt             |    9 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/web/TaskController.kt                           |    4 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AreaVo.kt                                    |    2 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JACsDataAnalysis.kt       |   10 
 src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt                                   |   10 
 src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColTotalGrade.kt                      |   24 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AreaEvaVo.kt                                 |   12 
 src/test/kotlin/cn/flightfeather/supervision/business/QRCodeTest.kt                                     |    8 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreUtil.kt                     |   22 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem11.kt      |   12 
 src/main/kotlin/cn/flightfeather/supervision/business/Info.kt                                           |   26 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem8.kt       |   11 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem1.kt     |    6 
 pom.xml                                                                                                 |   45 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt           |   50 
 src/main/kotlin/cn/flightfeather/supervision/config/Swagger2Configuration.kt                            |    8 
 src/test/kotlin/cn/flightfeather/supervision/business/autooutput/AopEvaluationTest.kt                   |  106 +
 src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationController.kt                     |   35 
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt         |    3 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopCreditCode.kt                 |   46 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/UserMapRep.kt                        |   38 
 src/main/resources/mapper/ds3/JSDustDataMapper.xml                                                      |   44 
 src/main/resources/mapper/ds2/OverallEvaluationMapper.xml                                               |   27 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/AopTaskCtrl.kt                         |   80 +
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem2.kt      |    8 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds2/mapper/OverallEvaluationMapper.kt               |    8 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/EvaluationRep.kt                     |   43 
 src/main/kotlin/cn/flightfeather/supervision/business/report/DataSource.kt                              |   16 
 src/main/resources/application.yml                                                                      |   40 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopSceneTypeCheck.kt        |    6 
 src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskType.kt                              |   20 
 src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt                            |   56 +
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationService.kt                    |   14 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/InspectionServiceImpl.kt           |    9 
 src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt           |    3 
 src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt                |   44 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/FumeSiteMap.java                         |  144 ++
 src/main/kotlin/cn/flightfeather/supervision/common/executor/BackgroundTaskCtrl.kt                      |  126 ++
 src/main/resources/mapper/ds3/JSDustSiteMapMapper.xml                                                   |   24 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem1.kt      |    6 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/BgTaskService.kt                        |   30 
 src/main/resources/generator/generatorConfig4ds3.xml                                                    |   18 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSWhDataAnalysis.kt       |   24 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/TaskService.kt                          |    8 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/UserInfoTZRep.kt                     |   28 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/JSDustSiteMap.java                       |  144 ++
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem9.kt       |   12 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/LedgerServiceImpl.kt               |    2 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/TaskRep.kt                           |   38 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds3/enum/JSSceneType.kt                             |    7 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds2/entity/OverallEvaluation.java                   |  211 +++
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt              |   32 
 src/main/resources/mapper/ds3/FumeSiteMapMapper.xml                                                     |   24 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem2.kt            |    8 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/OverallEvaluationRep.kt              |   60 +
 src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/JSDustData.java                          |  139 ++
 src/main/resources/generator/generatorConfig4ds1.xml                                                    |   29 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AutoScoreResultVo.kt                         |   24 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/BaseResponse.kt                              |   20 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSDustDataAnalysis.kt     |  142 ++
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/XHFuDataAnalysis.kt       |  145 ++
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem5BackUp.kt |   86 +
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DomainitemServiceImpl.kt           |   12 
 src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskConditionVo.kt                       |   10 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem1.kt            |    6 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem10.kt      |   11 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSMpDataAnalysis.kt       |   24 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem2.kt     |    8 
 src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt                                  |   50 
 src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem7.kt       |    6 
 src/main/resources/log4j2.xml                                                                           |    4 
 src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/Evaluationrule.kt                        |    2 
 /dev/null                                                                                               |   59 -
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt               |   16 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/TaskServiceImpl.kt                 |    6 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BaseResPack.kt                              |   25 
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt               |    4 
 100 files changed, 2,804 insertions(+), 496 deletions(-)

diff --git a/pom.xml b/pom.xml
index 2d674a9..0bb7353 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,6 +28,7 @@
         <!-- tk.mybatis -->
         <mapper.plugin>tk.mybatis.mapper.generator.MapperPlugin</mapper.plugin>
         <mapper.Mapper>tk.mybatis.mapper.common.Mapper</mapper.Mapper>
+        <resource.delimiters>@</resource.delimiters>
     </properties>
 
     <dependencies>
@@ -419,6 +420,7 @@
                 <artifactId>mybatis-generator-maven-plugin</artifactId>
                 <version>1.3.2</version>
                 <configuration>
+<!--                    <configurationFile>src/main/resources/generator/generatorConfig4ds1.xml</configurationFile>-->
                     <configurationFile>src/main/resources/generator/generatorConfig4ds3.xml</configurationFile>
                     <overwrite>true</overwrite>
                     <verbose>true</verbose>
@@ -432,26 +434,34 @@
                     </dependency>
                 </dependencies>
             </plugin>
+<!--            <plugin>-->
+<!--                <groupId>org.apache.maven.plugins</groupId>-->
+<!--                <artifactId>maven-resources-plugin</artifactId>-->
+<!--                <configuration>-->
+<!--                    <delimiters>@</delimiters>-->
+<!--                    <useDefaultDelimiters>false</useDefaultDelimiters>-->
+<!--                </configuration>-->
+<!--            </plugin>-->
         </plugins>
 
         <resources>
             <resource>
                 <filtering>true</filtering>
                 <directory>src/main/resources</directory>
-                <excludes>
-                    <exclude>application-dev.yml</exclude>
-                    <exclude>application-pro.yml</exclude>
-                    <exclude>application.yml</exclude>
-                </excludes>
+<!--                <excludes>-->
+<!--                    <exclude>application-dev.yml</exclude>-->
+<!--                    <exclude>application-pro.yml</exclude>-->
+<!--                    <exclude>application.yml</exclude>-->
+<!--                </excludes>-->
             </resource>
-            <resource>
-                <filtering>true</filtering>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>application-${profileActive}.yml</include>
-                    <include>application.yml</include>
-                </includes>
-            </resource>
+<!--            <resource>-->
+<!--                <filtering>true</filtering>-->
+<!--                <directory>src/main/resources</directory>-->
+<!--                <includes>-->
+<!--                    <include>application-${profileActive}.yml</include>-->
+<!--                    <include>application.yml</include>-->
+<!--                </includes>-->
+<!--            </resource>-->
         </resources>
     </build>
 
@@ -470,9 +480,12 @@
             <properties>
                 <profileActive>pro</profileActive>
             </properties>
-            <activation>
-                <activeByDefault>false</activeByDefault>
-            </activation>
+        </profile>
+        <profile>
+            <id>test</id>
+            <properties>
+                <profileActive>test</profileActive>
+            </properties>
         </profile>
     </profiles>
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/AutoScore.kt b/src/main/kotlin/cn/flightfeather/supervision/business/AutoScore.kt
deleted file mode 100644
index a8daa0e..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/AutoScore.kt
+++ /dev/null
@@ -1,484 +0,0 @@
-package cn.flightfeather.supervision.business
-
-import cn.flightfeather.supervision.domain.ds1.entity.*
-import cn.flightfeather.supervision.common.utils.UUIDGenerator
-import cn.flightfeather.supervision.lightshare.service.*
-import cn.flightfeather.supervision.lightshare.vo.InspectionVo
-import cn.flightfeather.supervision.lightshare.vo.ProblemlistVo
-import cn.flightfeather.supervision.lightshare.vo.ScenseVo
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import java.math.RoundingMode
-import java.util.*
-import javax.annotation.PostConstruct
-import kotlin.collections.ArrayList
-
-/**
- * @author riku
- * 2019.3.15
- * 鑷姩璇勫垎
- * 鏍规嵁鍙栬瘉闂鑷姩寰楀嚭榛樿璇勫垎
- * 璇勫垎椤瑰垎涓�2銆�3銆�4涓夌鍒嗙被绛夌骇锛�2涓烘渶澶х殑鍒嗙被銆�4涓烘渶灏忥紙鏈�璇︾粏锛夌殑鍒嗙被锛�
- * 閫氳繃瀵圭瓑绾т负4鐨勮瘎鍒嗛」杩涜鍏蜂綋鎵撳垎锛屽垎鍒牴鎹檮灞炲叧绯荤粺璁″緱鍑虹瓑绾�3銆�2鐨勬�诲緱鍒嗭紝
- * 鏈�缁堟墍鏈夌瓑绾�2鐨勮瘎鍒嗛」姹傚拰鍗充负鎬诲垎
- */
-
-@Component
-class AutoScore {
-
-    companion object {
-        private lateinit var autoScore: AutoScore
-
-        //闂鍏抽敭璇嶏紝鍖呭惈姝ゅ叧閿瘝鐨勯棶棰樺尯鍒寰�
-        private final var TOPIC = "绉皹"
-    }
-
-    @Autowired
-    lateinit var problemlistService: ProblemlistService
-    @Autowired
-    lateinit var evaluationruleService: EvaluationruleService
-    @Autowired
-    lateinit var evaluationsubruleService: EvaluationsubruleService
-    @Autowired
-    lateinit var scenseService: ScenseService
-    @Autowired
-    lateinit var inspectionService: InspectionService
-    @Autowired
-    lateinit var evaluationService: EvaluationService
-    @Autowired
-    lateinit var itemevaluationService: ItemevaluationService
-
-    private var problems: ArrayList<ProblemlistVo> = ArrayList()
-
-    private var allRules: ArrayList<Evaluationsubrule> = ArrayList()
-
-    private var inspection = InspectionVo()
-
-    private var evaluationrule: Evaluationrule? = null
-
-    private var scense: ScenseVo? = null
-
-    private var totalPoint = 0
-
-    //瀛愯瘎鍒嗛」寰楀垎鍒楄〃
-    val childScorelist = ArrayList<Itemevaluation>()
-    //鎬诲垎
-    val totalScore = Evaluation()
-
-    var subtask = Subtask()
-
-    var rate = 1f
-
-    val random = Random()
-
-//    var getTotalPointDone = false
-
-    @PostConstruct
-    fun init() {
-        autoScore = this
-        autoScore.problemlistService = this.problemlistService
-        autoScore.evaluationruleService = this.evaluationruleService
-        autoScore.evaluationsubruleService = this.evaluationsubruleService
-        autoScore.scenseService = this.scenseService
-        autoScore.inspectionService = this.inspectionService
-        autoScore.evaluationService = this.evaluationService
-        autoScore.itemevaluationService = this.itemevaluationService
-    }
-
-    fun test(): InspectionVo {
-        return autoScore.inspectionService.findByID("048ENlnke0L8C9Gi")
-    }
-
-    fun calculateScore() {
-        //鑾峰彇瀛愪换鍔″搴旂殑闂鍒楄〃
-        this.problems.addAll(autoScore.problemlistService.findBySubtaskId(subtask.stguid!!))
-        //鑾峰彇瀛愪换鍔″搴旂殑鍦烘櫙淇℃伅
-        scense = autoScore.scenseService.findOne(subtask.scenseid!!)
-        //鑾峰彇瀵瑰簲浠诲姟绫诲瀷銆佸満鏅被鍨嬨�佸尯鍘跨殑璇勫垎琛ㄥ悕绉�
-        val evaluationrule = autoScore.evaluationruleService.findBySpecificRule(subtask.typeno, scense!!.typeid, subtask.districtcode)
-        if (evaluationrule === null) return
-        this.evaluationrule = evaluationrule
-        //鑾峰彇瀵瑰簲鐨勫叿浣撹瘎鍒嗙粏鍒�
-        allRules = autoScore.evaluationsubruleService.findByRuleId(evaluationrule.guid!!) as ArrayList<Evaluationsubrule>
-        //鑾峰彇宸℃煡淇℃伅
-        inspection = autoScore.inspectionService.findBySubTaskID(subtask.stguid!!)
-
-
-        //鐩爣鍒嗘暟
-        val goalScore = getGoalScore(this.problems)
-
-        val titleRule = Evaluationsubrule()
-        val titleOptionRange = ArrayList<Int>()
-        val titleIsGood = true
-
-        totalPoint = getTotalPoint(allRules, titleRule.guid)
-        rate = goalScore.toFloat() / totalPoint.toFloat()
-
-        //寰楀埌鐨刾oint鏄墸鍒嗗垎鏁�
-        var point = autoGeneration(titleRule, titleOptionRange, titleIsGood)
-        point?.let { adJustTotalPoint(totalPoint -Math.abs(it), goalScore) }
-        point = getTotalPointAfterAdJust()
-        createTotalScore(point)
-        update()
-    }
-
-    /**
-     * 鑾峰彇鏈�缁堟�诲緱鍒�
-     */
-    fun getTotalPointAfterAdJust(): Int? {
-        val subRules = getSubRulesByFatherId(allRules, null)
-        var point = 0
-        subRules.forEach {
-            for (c in childScorelist) {
-                if (!c.value.isNullOrBlank()
-                        && it.guid == c.esrguid) {
-                    point += c.value?.toInt() ?: 0
-                }
-            }
-        }
-
-        return point
-    }
-
-    /**
-     * 鑷姩鎵撳垎
-     * @param fatherRule
-     * @param optionRange
-     * @param isGood
-     */
-    fun autoGeneration(fatherRule: Evaluationsubrule, optionRange: ArrayList<Int>?, isGood: Boolean): Int? {
-
-        val nextSubRules = getSubRulesByFatherId(allRules, fatherRule.guid)
-        //鏃犲瓙椤圭殑鏈�灏忚瘎鍒嗛」锛岀粰鍑哄緱鍒�
-        if (nextSubRules.isEmpty()) {
-            val totalScore = writeScore4th(fatherRule, optionRange, isGood, rate)
-            createNewChildScore(fatherRule, totalScore)
-            return totalScore
-        }
-        //鏈夊瓙椤圭殑璇勫垎椤癸紝浠ユ瘡椤瑰瓙椤逛负鐖堕」缁х画閫掑綊锛岃幏鍙栨�诲垎
-        else {
-            var totalScore = 0//鏈夊瓙椤圭殑璇勫垎椤逛竴瀹氫細鏈夊垎鏁帮紝涓嶄細鍑虹幇null鐨勬儏鍐�
-            var nextIsGood = isGood
-            var nextOptionRange = getOptionRange(fatherRule.guid, isGood, fatherRule.extension1)
-            if (isGood) {
-                for (problem in problems) {
-                    if (!fatherRule.problemlist.isNullOrBlank()) {
-                        if (fatherRule.problemlist!!.contains(problem.ptguid ?: "null")) {
-                            nextOptionRange = getOptionRange(fatherRule.guid!!, !isGood, fatherRule.extension1)
-                            nextIsGood = false
-                            break
-                        }
-                    }
-                }
-            }
-
-            var nextTmpTotalScore = 0//鎵�鏈夊瓙椤圭殑鎬诲緱鍒�
-            nextSubRules.forEach {
-                val nextFatherRule = it
-                val score = autoGeneration(nextFatherRule, nextOptionRange, nextIsGood)
-                if (score != null) {
-                    nextTmpTotalScore += score
-                }
-            }
-
-            if (nextTmpTotalScore >= (0-(fatherRule.maxscore?: totalPoint))) {
-                totalScore += nextTmpTotalScore
-            } else {
-                reGrade(nextSubRules, nextOptionRange, fatherRule.maxscore!!)
-            }
-            //鍙栧緱鎬诲垎鍚庯紝鐢熸垚瀵瑰簲鐨勮瘎鍒嗕俊鎭苟瀛樺叆鍒楄〃
-            if (!fatherRule.guid.isNullOrBlank())
-                createNewChildScore(fatherRule, totalScore)
-
-            return totalScore
-        }
-    }
-
-    //濉啓璇︾粏璇勫垎椤圭殑鍒嗘暟
-    fun writeScore4th(rule: Evaluationsubrule, optionRange: ArrayList<Int>?, isGood: Boolean, rate: Float): Int? {
-
-        val optionId = (rule.displayid?.toInt() ?: 1) - 1
-        if (optionRange?.contains(optionId) == true) {
-            //鍙栧緱鍙�夊垎鏁扮殑涓棿鍊�
-            val maxScore = rule.maxscore
-            val minScore = rule.minscore
-            val middleScore = (maxScore!! + minScore!!) / 2
-
-            var tmpScore = 0
-
-            val b = (maxScore * rate).toBigDecimal()
-
-            if (isGood) {
-                tmpScore = b.setScale(0, RoundingMode.HALF_UP).toInt()
-//                if ((maxScore-tmpScore)!=0) {
-//                    tmpScore += random.nextInt(maxScore - tmpScore)
-//                }
-                //鐩墠璇勫垎涓哄噺鍒嗚鍒欙紝鍙褰曞噺鍒�
-                tmpScore = 0 - (maxScore - tmpScore)
-            } else {
-                //杈冨樊閫夐」鐨勮瘎鍒嗗湪鈥滄渶灏忓垎~涓棿鍒嗏�濅腑闅忔満閫夊彇锛堝寘鍚腑闂村�硷級
-                tmpScore = if ((maxScore + minScore) % 2 == 0) {
-                    random.nextInt(maxScore - middleScore + 1) + minScore
-                } else {
-                    random.nextInt(maxScore - middleScore) + minScore
-                }
-                //鐩墠璇勫垎涓哄噺鍒嗚鍒欙紝鍙褰曞噺鍒�
-                tmpScore = 0 - (maxScore - tmpScore)
-            }
-
-            return tmpScore
-        }
-        //鑻ヤ笉闇�瑕佽瘎鍒嗭紝姝ゅ灏嗗叾璁剧疆涓虹┖
-        return null
-    }
-
-    //鎸夌収鐖秈d鏌ユ壘瀛愯瘎鍒嗛」
-    fun getSubRulesByFatherId(rules: ArrayList<Evaluationsubrule>, fatherId: String?): List<Evaluationsubrule> {
-        val subRules = mutableListOf<Evaluationsubrule>()
-        rules.forEach {
-            if (it.fatherid == fatherId
-                    || (fatherId.isNullOrBlank() && it.fatherid.isNullOrBlank())) {
-                subRules.add(it)
-//                rules.remove(it)
-            }
-        }
-        return subRules
-    }
-
-    //鑾峰彇闅忔満璇勫垎鐨勮瘎鍒嗛」鍒楄〃
-    fun getOptionRange(fatherId: String?, isGood: Boolean, mutiChoice: String?): ArrayList<Int>? {
-        if (fatherId.isNullOrBlank()) return ArrayList<Int>()
-        val nextSubRules = getSubRulesByFatherId(allRules, fatherId)
-        val list = ArrayList<Int>()
-        val size = nextSubRules.size
-        val midIndex = Math.ceil((size.toDouble() / 2.toDouble())).toInt()
-
-        when (mutiChoice) {
-            //鍗曢��
-            "0" -> {
-                val index = if (isGood) {
-                    random.nextInt(midIndex)
-                } else {
-                    random.nextInt(midIndex) + midIndex
-                }
-                list.add(index)
-            }
-            //澶氶��
-            "1" -> {
-                val optionNum = random.nextInt(size) + 1//閫夐」涓暟
-                for (i in 1..optionNum) {
-                    var index = random.nextInt(size)
-                    while (list.contains(index)) {
-                        index = random.nextInt(size)
-                    }
-                    list.add(index)
-                }
-            }
-            //鍏ㄩ��
-            "2" -> {
-                for (index in nextSubRules.indices) {
-                    list.add(index)
-                }
-            }
-            null -> return null
-        }
-
-        return list
-    }
-
-    //澶氶�夐」璇勫垎瓒呰繃鎬诲垎锛岄噸鏂板垎閰嶅垎鏁�
-    fun reGrade(subRules: List<Evaluationsubrule>, optionRange: ArrayList<Int>?, maxScore: Int) {
-        var remainScore = maxScore
-        val a = optionRange?.size ?: 1
-
-        for (it in subRules) {
-            if (optionRange?.contains(it.displayid?.toInt()) == true) {
-                var score = random.nextInt(maxScore / a)
-                remainScore -= score
-                if (remainScore < 0) {
-                    score = remainScore
-                }
-                //<editor-fold desc="鏇存柊鍒嗘暟(鍑忓垎妯″紡)">
-                for (c in childScorelist) {
-                    if (c.esrguid == it.guid) {
-                        c.value = (0 - score).toString()
-                        break
-                    }
-                }
-                //</editor-fold>
-
-                //<editor-fold desc="鎬诲垎琚墸瀹屽悗锛屼笉鍐嶈瘎鍒�">
-                if (remainScore <= 0) {
-                    break
-                }
-                //</editor-fold>
-            }
-        }
-    }
-
-    //鍒涘缓鍗曢」璇勫垎瀵硅薄
-    fun createNewChildScore(subRule: Evaluationsubrule, score: Int?) {
-        val itemevaluation = Itemevaluation()
-        itemevaluation.ieguid = UUIDGenerator.generate16ShortUUID()
-        itemevaluation.iguid = inspection.guid
-        itemevaluation.stguid = subtask.stguid
-        itemevaluation.sguid = subtask.scenseid
-        itemevaluation.sensename = subtask.scensename
-        itemevaluation.erguid = evaluationrule!!.guid
-        itemevaluation.rulename = evaluationrule!!.rulename
-        itemevaluation.ruletype = 2
-//        itemevaluation.ertype = subRule.ertype
-        itemevaluation.esrguid = subRule.guid
-        itemevaluation.name = subRule.itemname
-        if (score === null) {
-            itemevaluation.value = null
-        } else {
-            itemevaluation.value = score.toString()
-        }
-        childScorelist.add(itemevaluation)
-    }
-
-    //鍒涘缓鎬诲垎瀵硅薄
-    fun createTotalScore(point: Int?) {
-        totalScore.guid = UUIDGenerator.generate16ShortUUID()
-        totalScore.iguid = inspection.guid
-        totalScore.stguid = subtask.stguid
-        totalScore.sguid = scense?.guid
-        totalScore.scensetypeid = scense?.typeid
-        totalScore.scensetype  =scense?.type
-        totalScore.subscensetypeid = scense?.scensesubtypeid
-        totalScore.subscensetype = scense?.scensesubtype
-        totalScore.ertype = evaluationrule?.ruletype?.toByte()
-        totalScore.provincecode = scense?.provincecode
-        totalScore.provincename = scense?.provincename
-        totalScore.citycode = scense?.citycode
-        totalScore.cityname = scense?.cityname
-        totalScore.districtcode = scense?.districtcode
-        totalScore.districtname = scense?.districtname
-        totalScore.towncode = scense?.towncode
-        totalScore.townname = scense?.townname
-        totalScore.scensename = scense?.name
-        totalScore.scenseaddress = scense?.location
-        totalScore.evaluatetime = Date()
-        totalScore.evaluatorguid = "admin"
-        totalScore.evaluatorusername = "admin"
-        totalScore.evaluatorrealname = "admin"
-        totalScore.createdate = Date()
-        totalScore.resultscorebef = (totalPoint - Math.abs(point!!)).toInt().toString()
-    }
-
-    //鑾峰彇鎬诲垎
-    fun getTotalPoint(rules: ArrayList<Evaluationsubrule>, fatherId: String?): Int {
-        val rules1 = getSubRulesByFatherId(rules, fatherId)
-        var point = 0
-        rules1.forEach {
-            point += it.maxscore?: 0
-        }
-        return point
-    }
-
-    //鏁版嵁搴撴洿鏂�
-    fun update() {
-//        println(totalScore)
-        autoScore.evaluationService.save(totalScore)
-        childScorelist.forEach {
-            autoScore.itemevaluationService.save(it)
-//            println(it)
-        }
-    }
-
-    //鏍规嵁闂涓暟闅忔満鑾峰彇搴斿緱鎬诲垎
-    fun getGoalScore(problems: ArrayList<ProblemlistVo>): Int {
-        var result = 0
-        var p = 0
-        var c = 2
-        problems.forEach {
-            p += if (it.problemname?.contains(TOPIC) == true) {
-                5
-            } else {
-                10
-            }
-            if (it.ischanged == false) {
-                c = if (!it.changecatalog.isNullOrBlank()) {
-                    1
-                } else {
-                    0
-                }
-            }
-        }
-        result = when (p) {
-            0 -> {
-                randomScore(3, 20, 5)
-            }
-            in 1..5 -> {
-                randomScore(c, 42, 7)
-            }
-            10 ->{
-                randomScore(c, 50, 7)
-            }
-            in 15..40 -> {
-                randomScore(c, 66, 21)
-            }
-            else -> {
-                randomScore(c, 75, 8)
-            }
-
-        }
-        return result
-    }
-
-    private fun randomScore(c: Int, p: Int, t:Int): Int {
-        println(p / 3)
-        return random.nextInt(t / 3) + 120 - p + t * c / 3
-    }
-
-    //璋冩暣鏈�缁堝垎鏁�
-    fun adJustTotalPoint(totalPoint: Int, goalScore: Int) {
-        var value = goalScore - totalPoint
-        var fatherRule = Evaluationsubrule()
-        var subRules = ArrayList<Evaluationsubrule>()
-
-            for (it in allRules) {
-                if (it.itemname == "闄勫姞鍒�") {
-                    fatherRule = it
-                    subRules = getSubRulesByFatherId(allRules, fatherRule.guid) as ArrayList<Evaluationsubrule>
-                    break
-                }
-            }
-            value = foo1(fatherRule, subRules, value)
-
-    }
-
-    private fun foo1(fatherRule: Evaluationsubrule, subRules: List<Evaluationsubrule>, remainValue: Int): Int {
-        var value = remainValue
-        for (it in childScorelist) {
-            if (it.name == fatherRule.itemname) {
-                val culValue = it.value?.toInt()
-                var tmp = culValue
-                tmp = tmp?.plus(value)
-                if (tmp != null) when {
-                    tmp > 0 -> {
-                        value -= (fatherRule.minscore ?: 0) - culValue!!
-                        it.value = fatherRule.minscore.toString()
-                    }
-                    tmp < 0 - (fatherRule.maxscore ?: 20) -> {
-                        value -= (0 - (fatherRule.maxscore ?: 20)) - culValue!!
-                        it.value = (0 - (fatherRule.maxscore ?: 20)).toString()
-                    }
-                    else -> it.value = tmp.toString()
-                }
-                 for (s in subRules) {
-                     loop@ for (i in childScorelist) {
-                         if (s.guid == i.esrguid
-                                 && i.value != null) {
-                             i.value = it.value
-                             break@loop
-                         }
-                     }
-                }
-                break
-            }
-        }
-        return value
-    }
-}
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/Info.kt b/src/main/kotlin/cn/flightfeather/supervision/business/Info.kt
index 4403c16..d0ad1e3 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/Info.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/Info.kt
@@ -7,20 +7,20 @@
 
 data class Info(
         //鍦烘櫙鐢ㄦ埛id
-        val userId: String?,
+    val userId: String?,
         //椋炵窘鐜涓満鏅搴旂殑鐢ㄦ埛id
-        val tzUserId: String?,
+    val tzUserId: String?,
         //鍦烘櫙id
-        val sceneId: String?,
+    val sceneId: String?,
         //鍦烘櫙鍚嶇О
-        val sceneName: String?,
-        var sceneType: Constant.ScenseType,
-        var year: Int? = null,
-        val month: Int? = null,
-        val period: Int? = null,
-        val sTime: LocalDateTime? = null,
-        val eTime: LocalDateTime? = null,
-        val subTask: Subtask? = null,
-        val sceneIndex: Int? = null,
-        val online:Boolean = true
+    val sceneName: String?,
+    var sceneType: Constant.SceneType,
+    var year: Int? = null,
+    val month: Int? = null,
+    val period: Int? = null,
+    val sTime: LocalDateTime? = null,
+    val eTime: LocalDateTime? = null,
+    val subTask: Subtask? = null,
+    val sceneIndex: Int? = null,
+    val online:Boolean = true
 )
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/ScoreItem.kt b/src/main/kotlin/cn/flightfeather/supervision/business/ScoreItem.kt
deleted file mode 100644
index 71db5bc..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/ScoreItem.kt
+++ /dev/null
@@ -1,159 +0,0 @@
-package cn.flightfeather.supervision.business
-
-import cn.flightfeather.supervision.common.utils.DateUtil
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
-import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
-import cn.flightfeather.supervision.domain.ds1.mapper.ProblemlistMapper
-import org.springframework.beans.factory.annotation.Autowired
-import tk.mybatis.mapper.entity.Example
-import kotlin.math.abs
-import kotlin.properties.Delegates
-
-/**
- * 鑷姩璇勫垎鏉$洰
- */
-abstract class ScoreItem() {
-
-    //鑷姩璇勫垎鏉$洰id
-    abstract var id: String
-    //鑷姩璇勫垎鏉$洰鍚嶇О
-    abstract var name:String
-    //鏈�澶у垎鍊�
-    var maxScore: Int = 0
-    //鏈�灏忓垎鍊硷紙榛樿0鍒嗭級
-    var minScore: Int = 0
-
-    lateinit var info: Info
-
-    val dateUtil = DateUtil()
-    // 璇勫垎椤规槸鍚﹁眮鍏嶄笉鎵e垎
-    var exemption = false
-
-    //璇勫垎椤�
-    private var evaluationsubrule: Evaluationsubrule2? = null
-    //璇勫垎椤瑰搴旈�夐」
-    private var evaluationsubruleList = listOf<Evaluationsubrule2>()
-
-    @Autowired
-    lateinit var problemlistMapper: ProblemlistMapper
-
-    /**
-     * 鎵ц鐩稿叧闂鑷姩鎵e垎閫昏緫鍜岀壒娈婃墸鍒嗛�昏緫
-     *
-     */
-    fun execute(info: Info, eList: MutableList<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>) {
-        this.info = info
-        if (!exemption) {
-            getRule(eList)
-            problemCheck()
-            calScore()
-        }
-    }
-
-    /**
-     * 鍙墽琛岀壒娈婃墸鍒嗛�昏緫
-     */
-    fun execute2(info: Info, eList: MutableList<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>) {
-        this.info = info
-        if (!exemption) {
-            getRule(eList)
-            calScore()
-        }
-    }
-
-    /**
-     * 鑾峰彇璇勫垎瑙勫垯
-     */
-    private fun getRule(eList: MutableList<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>) {
-        for (e in eList) {
-            if (e.first.guid == id) {
-                evaluationsubrule = e.first
-                evaluationsubrule?.maxscore?.let { maxScore = it }
-                evaluationsubrule?.minscore?.let { minScore = it }
-                evaluationsubruleList = e.second.sortedBy { it.displayid }
-                break
-            }
-        }
-    }
-
-    /**
-     * 妫�鏌ヨ瘎鍒嗛」瀵瑰簲鐨勯棶棰樻槸鍚﹀瓨鍦紝璁板綍鎵e垎
-     */
-    private fun problemCheck() {
-        // 鏍规嵁璇勫垎瑙勫垯瀵瑰簲鐨勫叿浣撻棶棰橈紝鏌ヨ褰撳墠鏃堕棿娈典笅鏄惁鏈夎褰曡闂
-        evaluationsubruleList.forEach {
-            if (it.fatherid == id) {
-                // 鏍规嵁瑙勫垯瀵瑰簲鐨勭浉鍏抽棶棰榠d锛屾煡鎵剧敤鎴峰湪褰撳墠鏃堕棿娈靛唴鏄惁鏈夊彂鐢熻闂锛屾湁鍒欐墸闄ょ浉搴旂殑鍒嗘暟
-                val pList = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
-                    createCriteria().andEqualTo("sguid", info.sceneId)
-                        .andGreaterThanOrEqualTo("time", info.sTime)
-                        .andLessThan("time", info.eTime)
-                }).map { p-> p.ptguid }
-                it.problemlist?.split(",")?.forEach {pId ->
-                    if (pList.contains(pId)) {
-                        it.extension1 = (0 - (it.maxscore ?: 0)).toString()
-                    }
-                }
-            }
-        }
-//        var total: Int? = null
-//        subRule.forEach {
-//            if (!it.extension1.isNullOrBlank()) {
-//                total = (total?:0) + it.extension1!!.toInt()
-//            }
-//        }
-//        if (total == null) {
-//            rule.extension1 = "0"
-//        } else {
-//            val s = if (abs(total!!) > rule.maxscore!!) {
-//                0 - rule.maxscore!!
-//            } else {
-//                total
-//            }
-//            rule.extension1 = s.toString()
-//        }
-    }
-
-    /**
-     * 鏍规嵁绯荤粺澶栬幏鍙栫殑淇℃伅锛岃繘琛屾墸鍒嗗垽瀹氥�傝繑鍥為渶瑕佹墸鍒嗙殑鏉$洰搴忓彿
-     * @param size 浼犲叆璇勫垎鏉$洰鐨勬暟閲忥紝璇勫垎鏉$洰鎸夌収涓�瀹氳鍒欒繘琛屾帓搴�
-     * @return 杩斿洖闇�瑕佹墸鍒嗙殑璇勫垎鏉$洰鐨勫簭鍙�
-     */
-    abstract fun otherProblem(size: Int): Int?
-
-    /**
-     * 鑷姩璇勫垎璁$畻閫昏緫
-     */
-    fun calScore() {
-        if (evaluationsubruleList.isEmpty()) {
-            println("${name}: 璇勫垎鏉$洰涓虹┖锛屼笉鍋氳瘎鍒�")
-            return
-        }
-
-        otherProblem(evaluationsubruleList.size)?.let {i-> evaluationsubruleList[i].getScore(maxScore) }
-
-        var total: Int? = null
-        evaluationsubruleList.forEach {
-            if (!it.extension1.isNullOrBlank()) {
-                total = (total ?: 0) + it.extension1!!.toInt()
-            }
-        }
-        if (total == null) {
-            evaluationsubrule?.extension1 = "0"
-        } else {
-            val s = if (abs(total!!) > evaluationsubrule?.maxscore!!) {
-                0 - evaluationsubrule?.maxscore!!
-            } else {
-                total
-            }
-            evaluationsubrule?.extension1 = s.toString()
-        }
-    }
-
-    /**
-     * 鍑忓垎妯″紡涓嬶紝璁$畻鍏蜂綋閫夐」鐨勫緱鍒�
-     */
-    fun Evaluationsubrule2.getScore(maxScore: Int) {
-        extension1 = (0 - (maxscore ?: 0)).toString()
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/AopTaskCtrl.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/AopTaskCtrl.kt
new file mode 100644
index 0000000..c013604
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/AopTaskCtrl.kt
@@ -0,0 +1,80 @@
+package cn.flightfeather.supervision.business.autooutput
+
+import cn.flightfeather.supervision.business.autooutput.dataanalysis.*
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDataConfig
+import cn.flightfeather.supervision.business.autooutput.score.AopCreditCode
+import cn.flightfeather.supervision.business.autooutput.score.AopEvaluation
+import cn.flightfeather.supervision.common.executor.BackgroundTaskCtrl
+import cn.flightfeather.supervision.common.executor.BgTaskStatus
+import cn.flightfeather.supervision.common.executor.BgTaskType
+import cn.flightfeather.supervision.common.utils.Constant
+import cn.flightfeather.supervision.domain.ds1.repository.TaskRep
+import cn.flightfeather.supervision.lightshare.vo.AreaVo
+import org.springframework.stereotype.Component
+import java.time.LocalDate
+
+/**
+ * 鑷姩璇勪及浠诲姟绠$悊
+ */
+@Component
+class AopTaskCtrl(
+    private val aopEvaluation: AopEvaluation,
+    private val aopCreditCode: AopCreditCode,
+    private val jaCsDataAnalysis: JACsDataAnalysis,
+    private val xhFuDataAnalysis: XHFuDataAnalysis,
+    private val jsCsDataAnalysis: JSCsDataAnalysis,
+    private val jsMpDataAnalysis: JSMpDataAnalysis,
+    private val jsWhDataAnalysis: JSWhDataAnalysis,
+    private val backgroundTaskCtrl: BackgroundTaskCtrl,
+    private val taskRep: TaskRep,
+) {
+    private val dataAnalysisMap = mutableMapOf<String, MutableMap<Int, AopDataAnalysis<*>>>()
+
+    init {
+        listOf("310106", "310104", "310116").forEach { dataAnalysisMap[it] = mutableMapOf() }
+        dataAnalysisMap["310106"]?.put(Constant.SceneType.TYPE1.value.toInt(), jaCsDataAnalysis)
+        dataAnalysisMap["310104"]?.put(Constant.SceneType.TYPE5.value.toInt(), xhFuDataAnalysis)
+        dataAnalysisMap["310116"]?.put(Constant.SceneType.TYPE1.value.toInt(), jsCsDataAnalysis)
+        dataAnalysisMap["310116"]?.put(Constant.SceneType.TYPE2.value.toInt(), jsWhDataAnalysis)
+        dataAnalysisMap["310116"]?.put(Constant.SceneType.TYPE3.value.toInt(), jsMpDataAnalysis)
+    }
+
+    fun startNewTask(areaVo: AreaVo): BgTaskStatus {
+        val task = taskRep.findOneTask(areaVo)
+        val taskId = task?.tguid
+        if (taskId != null) {
+            val districtCode = areaVo.districtcode
+            val districtName = areaVo.districtname
+            val d = LocalDate.parse(areaVo.starttime)
+            val year = d.year
+            val month = d.monthValue
+            val sceneType = areaVo.scensetypeid?.toInt() ?: throw IllegalStateException("鍦烘櫙绫诲瀷鏈缃紝鏃犳硶璇勪及")
+
+            val id = "${BgTaskType.AUTO_SCORE.name}-${districtCode}-${sceneType}"
+            val name = "${districtName}${Constant.SceneType.getDes(sceneType)}鑷姩璇勫垎"
+            val bgTask = backgroundTaskCtrl.startNewTask(BgTaskType.AUTO_SCORE, id, name) {
+                dataAnalysis(districtCode, sceneType, taskId, year, month)
+
+                aopEvaluation.executeByTopTask(taskId, sceneType)
+
+                aopCreditCode.execute(AopDataConfig(
+                    year = year,
+                    month = month,
+                    districtName = districtName,
+                    sceneType = sceneType,
+                    period = 1
+                ))
+                true
+            }
+            return bgTask.taskStatus
+        } else {
+            throw IllegalStateException("宸℃煡鎬讳换鍔′笉瀛樺湪锛屾棤娉曡瘎浼�")
+        }
+    }
+
+    private fun dataAnalysis(districtCode: String?, sceneType: Int, taskId: String, year: Int, month: Int) {
+        val aopDataAnalysis = dataAnalysisMap[districtCode]?.get(sceneType)
+        aopDataAnalysis?.setResource(taskId, sceneType, year, month)
+        aopDataAnalysis?.execute()
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopDataAnalysis.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/AopDataAnalysis.kt
similarity index 72%
rename from src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopDataAnalysis.kt
rename to src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/AopDataAnalysis.kt
index e0f5e50..417ca2d 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopDataAnalysis.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/AopDataAnalysis.kt
@@ -1,4 +1,4 @@
-package cn.flightfeather.supervision.business.autooutput.score
+package cn.flightfeather.supervision.business.autooutput.dataanalysis
 
 import cn.flightfeather.supervision.business.autooutput.AopOutput
 import cn.flightfeather.supervision.business.autooutput.datasource.AopDataConfig
@@ -22,13 +22,21 @@
 ) {
 
     /**
-     * 缁熻涓棿瀛樺偍缁撴瀯
+     * 缁熻鏁版嵁 涓存椂瀛樺偍缁撴瀯
      */
     inner class TempResult(
         var total: Double = .0,
         var count: Int = 0,
     ){
-        fun avg(): Double {
+        var avg: Double = -1.0
+            get() {
+                if (field == -1.0) {
+                    field = avg()
+                }
+                return field
+            }
+
+        private fun avg(): Double {
             return if (count == 0) {
                 .0
             } else {
@@ -53,25 +61,39 @@
     /**
      * 鎵ц缁熻閫昏緫
      */
-    fun execute() {
-        val dAvg = districtAvg(source)
+    fun execute(avg: Double? = null) {
+        //璁$畻鍖哄潎鍊�
+        val dAvg = avg ?: districtAvg(source)
+        println("鍧囧�硷細${dAvg}")
         //寰幆澶勭悊姣忎釜鍦烘櫙
         source?.loop { _, evaluationScene ->
             //鑾峰彇鍘熷鐩戞祴鏁版嵁
             val dataList = fetchDataResources(evaluationScene)
             //璁$畻缁熻缁撴灉
-            val tempExceedTimes = TempResult()
-            val tempAvg = TempResult()
-            val tempMax = TempResult()
-            val tempMin = TempResult()
+            var tempExceedTimes = TempResult()
+            var tempAvg = TempResult()
+            var tempMax = TempResult()
+            var tempMin = TempResult()
             dataList.forEach {
-                it.forEach {t ->
+                // 鐩戞祴鐐规湁澶氬彴璁惧鏃讹紝姣忓彴璁惧鍗曠嫭缁熻锛屽彇鍧囧�兼渶楂樼殑涓虹粺璁$粨鏋�
+                val _tempExceedTimes = TempResult()
+                val _tempAvg = TempResult()
+                val _tempMax = TempResult()
+                val _tempMin = TempResult()
+                it.forEach { t ->
                     t?.let {
-                        exceedTimes(t, tempExceedTimes)
-                        avg(t, tempAvg)
-                        max(t, tempMax)
-                        min(t, tempMin)
+                        exceedTimes(t, _tempExceedTimes)
+                        avg(t, _tempAvg)
+                        max(t, _tempMax)
+                        min(t, _tempMin)
                     }
+                }
+                // 淇濈暀鍧囧�兼渶楂樼殑涓�鍙拌澶�
+                if (_tempAvg.avg > tempAvg.avg) {
+                    tempExceedTimes = _tempExceedTimes
+                    tempAvg = _tempAvg
+                    tempMax = _tempMax
+                    tempMin = _tempMin
                 }
             }
             val dustDataResult = DustDataResult().apply {
@@ -79,7 +101,7 @@
                 drSceneName = evaluationScene.scene.value?.name
                 drTime = source?.config?.startTime
                 drExceedTimes = tempExceedTimes.count
-                drAvg = tempAvg.avg()
+                drAvg = tempAvg.avg
                 drMax = tempMax.total
                 drMin = tempMin.total
                 drOverAvgPer = overAvgRate(drAvg, dAvg)
@@ -125,7 +147,7 @@
     /**
      * 瓒呮湀鍧囧�肩櫨鍒嗘瘮
      */
-    abstract fun overAvgRate(avg: Double, dAvg: Double?): Double
+    abstract fun overAvgRate(avg: Double, dAvg: Double?): Double?
 
     /**
      * 鏁版嵁涓暟
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/JADataAnalysis.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JACsDataAnalysis.kt
similarity index 95%
rename from src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/JADataAnalysis.kt
rename to src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JACsDataAnalysis.kt
index d38fe60..31e2109 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/JADataAnalysis.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JACsDataAnalysis.kt
@@ -1,10 +1,9 @@
-package cn.flightfeather.supervision.business.autooutput.score.construction
+package cn.flightfeather.supervision.business.autooutput.dataanalysis
 
 import cn.flightfeather.supervision.business.autooutput.AopOutput
 import cn.flightfeather.supervision.business.autooutput.datasource.AopDataSource
 import cn.flightfeather.supervision.business.autooutput.datasource.AopDbMapper
 import cn.flightfeather.supervision.business.autooutput.datasource.AopSceneTypeCheck
-import cn.flightfeather.supervision.business.autooutput.score.AopDataAnalysis
 import cn.flightfeather.supervision.domain.ds2.entity.DustSiteMap
 import cn.flightfeather.supervision.domain.ds2.entity.HourDustData
 import cn.flightfeather.supervision.domain.ds2.mapper.DustSiteMapMapper
@@ -20,7 +19,7 @@
  * 闈欏畨宸ュ湴鎵皹鐩戞祴鏁版嵁缁熻
  */
 @Component
-class JADataAnalysis(
+class JACsDataAnalysis(
     aopDbMapper: AopDbMapper,
     aopSceneTypeCheck: AopSceneTypeCheck,
     aopOutput: AopOutput,
@@ -39,6 +38,7 @@
         var count = 0
         hourDustDataMapper.selectByExample(Example(HourDustData::class.java).apply {
             createCriteria().andBetween("lst", source?.config?.startTime, source?.config?.endTime)
+                .andEqualTo("flag", "N")
         }).forEach {
             it?.dustvalue?.let { v ->
                 total += v
@@ -116,11 +116,11 @@
         }
     }
 
-    override fun overAvgRate(avg: Double, dAvg: Double?): Double {
+    override fun overAvgRate(avg: Double, dAvg: Double?): Double? {
         return if (dAvg != null) {
             round(((avg - dAvg) / dAvg) * 1000) / 1000
         } else {
-            .0
+            null
         }
     }
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSCsDataAnalysis.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSCsDataAnalysis.kt
new file mode 100644
index 0000000..2f434e9
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSCsDataAnalysis.kt
@@ -0,0 +1,24 @@
+package cn.flightfeather.supervision.business.autooutput.dataanalysis
+
+import cn.flightfeather.supervision.business.autooutput.AopOutput
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDbMapper
+import cn.flightfeather.supervision.business.autooutput.datasource.AopSceneTypeCheck
+import cn.flightfeather.supervision.domain.ds3.enum.JSSceneType
+import cn.flightfeather.supervision.domain.ds3.mapper.JSDustDataMapper
+import cn.flightfeather.supervision.domain.ds3.mapper.JSDustSiteMapMapper
+import org.springframework.stereotype.Component
+
+/**
+ * 閲戝北宸ュ湴鎵皹鐩戞祴鏁版嵁缁熻
+ */
+@Component
+class JSCsDataAnalysis(
+    aopDbMapper: AopDbMapper,
+    aopSceneTypeCheck: AopSceneTypeCheck,
+    aopOutput: AopOutput,
+    jsDustDataMapper: JSDustDataMapper,
+    jsDustSiteMapMapper: JSDustSiteMapMapper
+) : JSDustDataAnalysis(aopDbMapper, aopSceneTypeCheck, aopOutput, jsDustDataMapper, jsDustSiteMapMapper){
+
+    override var sceneType: JSSceneType = JSSceneType.Construction
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSDustDataAnalysis.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSDustDataAnalysis.kt
new file mode 100644
index 0000000..83ab24d
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSDustDataAnalysis.kt
@@ -0,0 +1,142 @@
+package cn.flightfeather.supervision.business.autooutput.dataanalysis
+
+import cn.flightfeather.supervision.business.autooutput.AopOutput
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDataSource
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDbMapper
+import cn.flightfeather.supervision.business.autooutput.datasource.AopSceneTypeCheck
+import cn.flightfeather.supervision.domain.ds3.entity.JSDustData
+import cn.flightfeather.supervision.domain.ds3.entity.JSDustSiteMap
+import cn.flightfeather.supervision.domain.ds3.enum.JSSceneType
+import cn.flightfeather.supervision.domain.ds3.mapper.JSDustDataMapper
+import cn.flightfeather.supervision.domain.ds3.mapper.JSDustSiteMapMapper
+import tk.mybatis.mapper.entity.Example
+import java.time.Duration
+import java.time.LocalDateTime
+import java.time.ZoneId
+import kotlin.math.round
+
+/**
+ * 閲戝北鎵皹鐩戞祴鏁版嵁缁熻
+ */
+abstract class JSDustDataAnalysis(
+    aopDbMapper: AopDbMapper,
+    aopSceneTypeCheck: AopSceneTypeCheck,
+    aopOutput: AopOutput,
+    private val jsDustDataMapper: JSDustDataMapper,
+    private val jsDustSiteMapMapper: JSDustSiteMapMapper,
+) : AopDataAnalysis<JSDustData>(aopDbMapper, aopSceneTypeCheck, aopOutput){
+
+    abstract var sceneType: JSSceneType
+
+    override fun districtAvg(source: AopDataSource?): Double? {
+        var total = .0
+        var count = 0
+
+        var page = 0
+        val perPage = 20000
+        var hasNextPage = false
+        do {
+            val res = jsDustDataMapper
+                .getDataBySceneType(source?.config?.startTime, source?.config?.endTime, sceneType.value,
+                    page * perPage, perPage)
+            res.forEach {
+                it?.dustValue?.let { v ->
+                    total += v
+                    count++
+                }
+            }
+            page++
+            hasNextPage = res.isNotEmpty()
+            println("鍧囧�艰绠楋細褰撳墠椤电爜 $page")
+        } while (hasNextPage)
+
+        return if (count == 0) {
+            .0
+        } else {
+            round((total / count) * 1000) / 1000
+        }
+    }
+
+    override fun fetchDataResources(evaluationScene: AopDataSource.EvaluationScene): List<List<JSDustData?>> {
+        val dustSiteMaps = jsDustSiteMapMapper.selectByExample(Example(JSDustSiteMap::class.java).apply {
+            createCriteria().andEqualTo("svUserId", evaluationScene.userInfo.value?.guid)
+                .andIsNotNull("jsDeviceCode")
+        })
+        if (dustSiteMaps.isEmpty()) return emptyList()
+
+        val mnCodeList =  dustSiteMaps.map { it?.jsDeviceCode }
+        val map = mutableMapOf<String?, MutableList<JSDustData?>>()
+        jsDustDataMapper.selectByExample(Example(JSDustData::class.java).apply {
+            createCriteria().andBetween("lst", evaluationScene.config?.startTime, evaluationScene.config?.endTime)
+                .andIn("mnCode", mnCodeList)
+        }).forEach {
+            if (!map.containsKey(it?.mnCode)) {
+                map[it?.mnCode] = mutableListOf()
+            }
+            map[it?.mnCode]?.add(it)
+        }
+        val res = mutableListOf<List<JSDustData?>>()
+        map.forEach { (_, u) ->
+            res.add(u)
+        }
+        return res
+    }
+
+    override fun exceedTimes(data: JSDustData, t: TempResult) {
+        data.dustValue?.let {
+            if (it >= 1) {
+                t.count++
+            }
+        }
+    }
+
+    override fun avg(data: JSDustData, t: TempResult) {
+        data.dustValue?.let {
+            t.total += it
+            t.count++
+        }
+    }
+
+    override fun max(data: JSDustData, t: TempResult) {
+        data.dustValue?.let {
+            if (it > t.total) {
+                t.total = it
+            }
+        }
+    }
+
+    override fun min(data: JSDustData, t: TempResult) {
+        data.dustValue?.let {
+            if (t.count == 0 || it < t.total) {
+                t.total = it
+            }
+            // 閫氳繃t.count 鏉ュ垽瀹氭槸鍚︽槸鍒濆鍖栫姸鎬�
+            if (t.count == 0) t.count = 1
+        }
+    }
+
+    override fun overAvgRate(avg: Double, dAvg: Double?): Double? {
+        return if (dAvg != null) {
+            round(((avg - dAvg) / dAvg) * 1000) / 1000
+        } else {
+            null
+        }
+    }
+
+    override fun effectiveRate(
+        dataList: List<List<JSDustData?>>,
+        evaluationScene: AopDataSource.EvaluationScene,
+    ): Double {
+        if (dataList.isEmpty()) return .0
+
+        val st = LocalDateTime.ofInstant(evaluationScene.config?.startTime?.toInstant(), ZoneId.systemDefault())
+        val et = LocalDateTime.ofInstant(evaluationScene.config?.endTime?.toInstant(), ZoneId.systemDefault())
+        val days = Duration.between(st, et).toDays() + 1
+
+        return if (days == 0L) {
+            .0
+        } else {
+            round((count(dataList) / (dataList.size * days * 24 * 4).toDouble()) * 1000) / 1000
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSMpDataAnalysis.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSMpDataAnalysis.kt
new file mode 100644
index 0000000..8020662
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSMpDataAnalysis.kt
@@ -0,0 +1,24 @@
+package cn.flightfeather.supervision.business.autooutput.dataanalysis
+
+import cn.flightfeather.supervision.business.autooutput.AopOutput
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDbMapper
+import cn.flightfeather.supervision.business.autooutput.datasource.AopSceneTypeCheck
+import cn.flightfeather.supervision.domain.ds3.enum.JSSceneType
+import cn.flightfeather.supervision.domain.ds3.mapper.JSDustDataMapper
+import cn.flightfeather.supervision.domain.ds3.mapper.JSDustSiteMapMapper
+import org.springframework.stereotype.Component
+
+/**
+ * 閲戝北鎼呮媽绔欐壃灏樼洃娴嬫暟鎹粺璁�
+ */
+@Component
+class JSMpDataAnalysis(
+    aopDbMapper: AopDbMapper,
+    aopSceneTypeCheck: AopSceneTypeCheck,
+    aopOutput: AopOutput,
+    jsDustDataMapper: JSDustDataMapper,
+    jsDustSiteMapMapper: JSDustSiteMapMapper,
+) : JSDustDataAnalysis(aopDbMapper, aopSceneTypeCheck, aopOutput, jsDustDataMapper, jsDustSiteMapMapper) {
+
+    override var sceneType: JSSceneType = JSSceneType.MixingPlant
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSWhDataAnalysis.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSWhDataAnalysis.kt
new file mode 100644
index 0000000..222cd24
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/JSWhDataAnalysis.kt
@@ -0,0 +1,24 @@
+package cn.flightfeather.supervision.business.autooutput.dataanalysis
+
+import cn.flightfeather.supervision.business.autooutput.AopOutput
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDbMapper
+import cn.flightfeather.supervision.business.autooutput.datasource.AopSceneTypeCheck
+import cn.flightfeather.supervision.domain.ds3.enum.JSSceneType
+import cn.flightfeather.supervision.domain.ds3.mapper.JSDustDataMapper
+import cn.flightfeather.supervision.domain.ds3.mapper.JSDustSiteMapMapper
+import org.springframework.stereotype.Component
+
+/**
+ * 閲戝北鐮佸ご鎵皹鐩戞祴鏁版嵁缁熻
+ */
+@Component
+class JSWhDataAnalysis(
+    aopDbMapper: AopDbMapper,
+    aopSceneTypeCheck: AopSceneTypeCheck,
+    aopOutput: AopOutput,
+    jsDustDataMapper: JSDustDataMapper,
+    jsDustSiteMapMapper: JSDustSiteMapMapper,
+) : JSDustDataAnalysis(aopDbMapper, aopSceneTypeCheck, aopOutput, jsDustDataMapper, jsDustSiteMapMapper) {
+
+    override var sceneType: JSSceneType = JSSceneType.Wharf
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/XHFuDataAnalysis.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/XHFuDataAnalysis.kt
new file mode 100644
index 0000000..b4f9b26
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/XHFuDataAnalysis.kt
@@ -0,0 +1,145 @@
+package cn.flightfeather.supervision.business.autooutput.dataanalysis
+
+import cn.flightfeather.supervision.business.autooutput.AopOutput
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDataSource
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDbMapper
+import cn.flightfeather.supervision.business.autooutput.datasource.AopSceneTypeCheck
+import cn.flightfeather.supervision.domain.ds3.entity.FumeDailyAnalysis
+import cn.flightfeather.supervision.domain.ds3.entity.FumeExceptionData
+import cn.flightfeather.supervision.domain.ds3.entity.FumeSiteMap
+import cn.flightfeather.supervision.domain.ds3.mapper.FumeDailyAnalysisMapper
+import cn.flightfeather.supervision.domain.ds3.mapper.FumeExceptionDataMapper
+import cn.flightfeather.supervision.domain.ds3.mapper.FumeSiteMapMapper
+import org.springframework.stereotype.Component
+import tk.mybatis.mapper.entity.Example
+import kotlin.math.round
+
+/**
+ * 寰愭眹娌圭儫鐩戞祴鏁版嵁缁熻
+ */
+@Component
+class XHFuDataAnalysis(
+    aopDbMapper: AopDbMapper,
+    aopSceneTypeCheck: AopSceneTypeCheck,
+    aopOutput: AopOutput,
+    private val fumeSiteMapMapper: FumeSiteMapMapper,
+    private val fumeDailyAnalysisMapper: FumeDailyAnalysisMapper,
+    private val fumeExceptionDataMapper: FumeExceptionDataMapper,
+): AopDataAnalysis<FumeDailyAnalysis>(aopDbMapper, aopSceneTypeCheck, aopOutput) {
+
+    // 娌圭儫鏁版嵁鏆傛棤鍖哄潎鍊肩殑璁$畻
+    override fun districtAvg(source: AopDataSource?): Double? {
+        return null
+    }
+
+    private fun getDeviceCodes(evaluationScene: AopDataSource.EvaluationScene): List<String?> {
+        val fumeSiteMaps = fumeSiteMapMapper.selectByExample(Example(FumeSiteMap::class.java).apply {
+            createCriteria().andEqualTo("svUserId", evaluationScene.userInfo.value?.guid)
+                .andIsNotNull("xhDeviceCode")
+        })
+        return fumeSiteMaps.map { it?.xhDeviceCode }
+    }
+
+    override fun fetchDataResources(evaluationScene: AopDataSource.EvaluationScene): List<List<FumeDailyAnalysis?>> {
+        val deviceCodeList = getDeviceCodes(evaluationScene)
+        val map = mutableMapOf<String?, MutableList<FumeDailyAnalysis?>>()
+        fumeDailyAnalysisMapper.selectByExample(Example(FumeDailyAnalysis::class.java).apply {
+            createCriteria().andBetween("fumeDate", evaluationScene.config?.startTime, evaluationScene.config?.endTime)
+                .andIn("fumeDevId", deviceCodeList)
+        }).forEach {
+            if (!map.containsKey(it?.fumeDevId)) {
+                map[it?.fumeDevId] = mutableListOf()
+            }
+            map[it?.fumeDevId]?.add(it)
+        }
+        val res = mutableListOf<List<FumeDailyAnalysis?>>()
+        map.forEach { (_, u) ->
+            res.add(u)
+        }
+        return res
+    }
+
+    fun fetchExceptionData(evaluationScene: AopDataSource.EvaluationScene): List<FumeExceptionData?> {
+        val deviceCodeList = getDeviceCodes(evaluationScene)
+        return if (deviceCodeList.isEmpty()) {
+            emptyList()
+        } else {
+            val code = deviceCodeList[0]
+            fumeExceptionDataMapper.selectByExample(Example(FumeExceptionData::class.java).apply {
+                createCriteria().andBetween("beginTime", evaluationScene.config?.startTime, evaluationScene.config?.endTime)
+                    .andEqualTo("devId", code)
+                    .andEqualTo("exception", "鏁版嵁寮傚父")
+                    .andEqualTo("exceptionType", "0")
+            })
+        }
+    }
+
+    /**
+     * 娌圭儫瓒呮爣鏁�
+     * 鍙粺璁¢噸鐐规椂娈靛唴锛堜腑鍗堛�佹櫄涓婏級鐨勮秴鏍囨儏鍐�
+     */
+    override fun exceedTimes(data: FumeDailyAnalysis, t: TempResult) {
+        data.noonExceedingNum?.toInt()?.let {
+            t.count += it
+        }
+        data.nightExceedingNum?.toInt()?.let {
+            t.count += it
+        }
+    }
+
+    override fun avg(data: FumeDailyAnalysis, t: TempResult) {
+        data.fumeDayAverage?.let {
+            t.total += it
+            t.count++
+        }
+    }
+
+    override fun max(data: FumeDailyAnalysis, t: TempResult) {
+        data.fumeDayMax?.let {
+            if (it > t.total) {
+                t.total = it
+            }
+        }
+    }
+
+    override fun min(data: FumeDailyAnalysis, t: TempResult) {
+        data.fumeDayMin?.let {
+            if (t.count == 0 || it < t.total) {
+                t.total = it
+            }
+            // 閫氳繃t.count 鏉ュ垽瀹氭槸鍚︽槸鍒濆鍖栫姸鎬�
+            if (t.count == 0) t.count = 1
+        }
+    }
+
+    override fun overAvgRate(avg: Double, dAvg: Double?): Double? {
+        return null
+    }
+
+    override fun effectiveRate(
+        dataList: List<List<FumeDailyAnalysis?>>,
+        evaluationScene: AopDataSource.EvaluationScene,
+    ): Double {
+        var total = .0
+        var count = 0
+        dataList.forEach {list ->
+            list.forEach {
+                val noon = it?.noonOnlineRate?.removeSuffix("%")?.toDouble()?.div(100)
+                val night = it?.nightOnlineRate?.removeSuffix("%")?.toDouble()?.div(100)
+                noon?.let {
+                    total += noon
+                    count++
+                }
+                night?.let {
+                    total += night
+                    count++
+                }
+            }
+        }
+        return if (count == 0) {
+            .0
+        } else {
+            round((total / count) * 1000) / 1000
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataConfig.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataConfig.kt
index 2be7918..8a6df97 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataConfig.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataConfig.kt
@@ -9,8 +9,8 @@
  * 鏁版嵁鏉ユ簮鍙傛暟
  */
 data class AopDataConfig(
-    val startTime: Date? = null,
-    val endTime: Date? = null,
+    var startTime: Date? = null,
+    var endTime: Date? = null,
 
     val year: Int? = null,
     val month: Int? = null,
@@ -25,7 +25,7 @@
     val topTaskGuid: String? = null,
 
     /**
-     * 鍦烘櫙绫诲瀷鏍规嵁涓嶅悓绯荤粺閲囩敤涓嶅悓鐨勫�硷紝鍙傝�僛Constant.ScenseType]
+     * 鍦烘櫙绫诲瀷鏍规嵁涓嶅悓绯荤粺閲囩敤涓嶅悓鐨勫�硷紝鍙傝�僛Constant.SceneType]
      */
     var sceneType: Int? = null,
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
index 80d462f..088061b 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
@@ -47,6 +47,18 @@
         }
     }
 
+    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)
+        evaluationScene.config = config
+//        val check = aopSceneTypeCheck.checkSceneType(sceneType)
+        this.mode = 0
+        sceneSourceList.clear()
+        sceneSourceList.add(scene)
+    }
+
     /**
      * 杞鏁版嵁婧�
      */
@@ -83,12 +95,6 @@
         aopDbMapper.scenseMapper.selectByExample(Example(Scense::class.java).apply {
             createCriteria()
                 .andIn("guid", taskSceneIdList)
-//                .andEqualTo("provincecode", config.provinceCode)
-//                .andEqualTo("citycode", config.cityCode)
-//                .andEqualTo("districtcode", config.districtCode)
-//                .andEqualTo("towncode", config.townCode)
-//                .andEqualTo("typeid", config.sceneType)
-//                .andNotEqualTo("extension1", '0')
         })?.let { sceneSourceList.addAll(it) }
     }
 
@@ -166,23 +172,23 @@
         val baseScene = InfoProxy<BaseScene> {_,_ ->
             return@InfoProxy when (config?.sceneType.toString()) {
                 // 鐩戠绯荤粺
-                Constant.ScenseType.TYPE1.value -> {
+                Constant.SceneType.TYPE1.value -> {
                     aopDbMapper.sceneConstructionSiteMapper.selectByPrimaryKey(scene.value?.guid)
                 }
-                Constant.ScenseType.TYPE2.value -> {
+                Constant.SceneType.TYPE2.value -> {
                     aopDbMapper.sceneWharfMapper.selectByPrimaryKey(scene.value?.guid)
                 }
-                Constant.ScenseType.TYPE3.value -> {
+                Constant.SceneType.TYPE3.value -> {
                     aopDbMapper.sceneMixingPlantMapper.selectByPrimaryKey(scene.value?.guid)
                 }
-                Constant.ScenseType.TYPE14.value -> {
+                Constant.SceneType.TYPE14.value -> {
                     aopDbMapper.sceneStorageYardMapper.selectByPrimaryKey(scene.value?.guid)
                 }
                 // 鍙拌处绯荤粺
-                Constant.ScenseType.TYPE5.value -> {
+                Constant.SceneType.TYPE5.value -> {
                     aopDbMapper.restaurantBaseInfoMapper.selectByPrimaryKey(userInfoTZ.value?.guid)
                 }
-                Constant.ScenseType.TYPE6.value -> {
+                Constant.SceneType.TYPE6.value -> {
                     aopDbMapper.vehicleBaseInfoMapper.selectByPrimaryKey(userInfoTZ.value?.guid)
                 }
                 else -> null
@@ -295,7 +301,7 @@
 
         //蹇呭~鍙拌处鏁伴噺
         val ledgerCount = InfoProxy<Int>(config?.sceneType.toString()) {_, cacheMap ->
-            val tzSceneType = Constant.ScenseType.typeMap(scene.value?.typeid)
+            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)
             })
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopSceneTypeCheck.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopSceneTypeCheck.kt
index dd7f6fa..b819f36 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopSceneTypeCheck.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopSceneTypeCheck.kt
@@ -17,12 +17,12 @@
      * 鍦烘櫙绫诲瀷鍒ゅ畾
      * @return 鍒ゆ柇缁撴灉锛岋紙鏄惁浣跨敤鏈郴缁熷畾涔夛紝绫诲瀷鍊硷級
      */
-    fun checkSceneType(sceneType: Int): Pair<Boolean, Int> {
+    fun checkSceneType(sceneType: Int?): Pair<Boolean, Int?> {
         // TODO: 2023/9/7 閫氳繃鏁版嵁搴撻厤缃〃鍐冲畾褰撳墠绫诲瀷鐨勬渶缁堢被鍨嬪畾涔�
 
         // FIXME: 2023/9/7 鏆傛椂鍐欐鐩稿叧閰嶇疆
-        return if (sceneType.toString() == Constant.ScenseType.TYPE6.value) {
-            Pair(false, Constant.ScenseType.typeMap(sceneType.toByte())!!.toInt())
+        return if (sceneType.toString() == Constant.SceneType.TYPE6.value) {
+            Pair(false, Constant.SceneType.typeMap(sceneType?.toByte())!!.toInt())
         } else {
             Pair(true, sceneType)
         }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopCreditCode.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopCreditCode.kt
new file mode 100644
index 0000000..4bfc770
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopCreditCode.kt
@@ -0,0 +1,46 @@
+package cn.flightfeather.supervision.business.autooutput.score
+
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDataConfig
+import cn.flightfeather.supervision.common.utils.Constant
+import cn.flightfeather.supervision.domain.ds1.repository.EvaluationRep
+import cn.flightfeather.supervision.domain.ds2.entity.UserinfoTZ
+import cn.flightfeather.supervision.domain.ds2.repository.OverallEvaluationRep
+import cn.flightfeather.supervision.domain.ds2.repository.UserInfoTZRep
+import cn.flightfeather.supervision.domain.ds2.repository.UserMapRep
+import org.springframework.stereotype.Component
+import java.time.LocalDate
+
+/**
+ * 鏍规嵁鑷姩璇勪及[AopEvaluation]缁撴灉鐢熸垚鐜俊鐮�
+ */
+@Component
+class AopCreditCode(
+    private val userInfoTZRep: UserInfoTZRep,
+    private val userMapRep: UserMapRep,
+    private val evaluationRep: EvaluationRep,
+    private val overallEvaluationRep: OverallEvaluationRep,
+) {
+
+    fun execute(config: AopDataConfig) {
+        if (config.year == null || config.month == null) throw IllegalStateException("鐜俊鐮佽瘎浼版椂蹇呴』浼犻�掓椂闂存潯浠�!")
+        // 鎵惧埌椋炵窘鐜涓渶瑕佺敓鎴愮幆淇$爜鐨勬墍鏈夌珯鐐�
+        val sceneType = Constant.SceneType.getByValue(config.sceneType.toString())
+        val userList = findUsers(config.districtName, sceneType)
+        val date = LocalDate.of(config.year, config.month, 1)
+        val endDate = date.plusMonths(config.period.toLong() - 1)
+        userList.forEach {
+            userMapRep.findFromSupervision(it)?.let { s ->
+                // 浠庨缇界洃绠$郴缁熶腑鏌ユ壘璇勫垎
+                val e = evaluationRep.findByScene(s.guid, date)
+                e?.resultscorebef?.toInt()?.let {score ->
+                    // 鏍规嵁璇勫垎鐢熸垚瀵瑰簲鐨勭幆淇$爜
+                    overallEvaluationRep.insertOrUpdateOne(it?.guid, score, sceneType, date, endDate)
+                }
+            }
+        }
+    }
+
+    private fun findUsers(districtName: String?, type: Constant.SceneType): List<UserinfoTZ?> {
+        return userInfoTZRep.findEnterpriseUser(districtName, type)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopEvaluation.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopEvaluation.kt
index a2c9c8c..384110f 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopEvaluation.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopEvaluation.kt
@@ -15,6 +15,7 @@
 import cn.flightfeather.supervision.common.utils.UUIDGenerator
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluation
 import cn.flightfeather.supervision.domain.ds1.entity.Itemevaluation
+import cn.flightfeather.supervision.domain.ds1.entity.Subtask
 import org.springframework.stereotype.Component
 import java.util.*
 import kotlin.math.abs
@@ -24,9 +25,9 @@
  */
 @Component
 class AopEvaluation(
+    private val aopOutput: AopOutput,
     private val aopDbMapper: AopDbMapper,
     private val aopSceneTypeCheck: AopSceneTypeCheck,
-    private val aopOutput: AopOutput,
     csScoreItem1: CsScoreItem1,
     csScoreItem2: CsScoreItem2,
     mpScoreItem1: MpScoreItem1,
@@ -35,15 +36,14 @@
     whScoreItem1: WhScoreItem1,
     whScoreItem2: WhScoreItem2,
     reScoreItem5: ReScoreItem5,
-    reScoreItem7: ReScoreItem7,
+    // FIXME: 2023/12/29 鍒犲幓鐗规畩璇勪及瑙勫垯
+//    reScoreItem7: ReScoreItem7,
     reScoreItem8: ReScoreItem8,
     reScoreItem9: ReScoreItem9,
     reScoreItem10: ReScoreItem10,
     reScoreItem11: ReScoreItem11,
 ) {
 
-    //鏁版嵁婧�
-    private var source: AopDataSource? = null
     //鐗瑰畾璇勫垎椤癸紙闄や簡缁熶竴鐨勬牴鎹贰鏌ラ棶棰樼洿鎺ユ墸鍒嗗锛屾湁鐗瑰畾鐨勬墸鍒嗛�昏緫鐨勮瘎浼伴」锛�
     private val itemList = mutableListOf<ScoreItem>()
 
@@ -57,7 +57,7 @@
             add(whScoreItem1)
             add(whScoreItem2)
             add(reScoreItem5)
-            add(reScoreItem7)
+//            add(reScoreItem7)
             add(reScoreItem8)
             add(reScoreItem9)
             add(reScoreItem10)
@@ -65,18 +65,43 @@
         }
     }
 
-    fun setResource(topTaskGuid: String?, sceneType: Int, districtName: String? = null, townCode: String? = null) {
-        source = AopDataSource(aopDbMapper, aopSceneTypeCheck)
-        source?.setResource(topTaskGuid, sceneType, districtName, townCode)
+    fun executeByTopTask(topTaskGuid: String?, sceneType: Int, districtName: String? = null, townCode: String? = null) {
+        val source = setResource(topTaskGuid, sceneType, districtName, townCode)
+        execute(source)
+    }
+
+    /**
+     * 瀵圭壒瀹氱殑宸℃煡浠诲姟杩涜鍗曠嫭璇勫垎
+     */
+    fun executeBySubTask(subTask:Subtask) {
+        val source = setResource(subTask)
+        execute(source)
+    }
+
+    private fun setResource(subTask: Subtask): AopDataSource {
+        val source = AopDataSource(aopDbMapper, aopSceneTypeCheck)
+        source.setResource(subTask)
+        return source
+    }
+
+    private fun setResource(
+        topTaskGuid: String?,
+        sceneType: Int,
+        districtName: String?,
+        townCode: String?,
+    ): AopDataSource {
+        val source = AopDataSource(aopDbMapper, aopSceneTypeCheck)
+        source.setResource(topTaskGuid, sceneType, districtName, townCode)
+        return source
     }
 
     /**
      * 鎵ц璇勫垎閫昏緫
      */
-    fun execute() {
+    private fun execute(source: AopDataSource) {
         //鑾峰彇鏁版嵁婧愶紙寰呰瘎浼扮殑鍦烘櫙锛�
         //寰幆澶勭悊姣忎釜鍦烘櫙
-        source?.loop {index, evaluationScene ->
+        source.loop {index, evaluationScene ->
             if (evaluationScene.noRecord()) return@loop
 
             itemGrade(index, evaluationScene)
@@ -84,7 +109,6 @@
                 aopOutput.toDbEvaluation(evaluationScene, this)
             }
         }
-
     }
 
     /**
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreItem.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreItem.kt
index 4a50913..6264100 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreItem.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreItem.kt
@@ -66,7 +66,7 @@
      * @param size 浼犲叆璇勫垎鏉$洰鐨勬暟閲忥紝璇勫垎鏉$洰鎸夌収涓�瀹氳鍒欒繘琛屾帓搴�
      * @return 杩斿洖闇�瑕佹墸鍒嗙殑璇勫垎鏉$洰鐨勫簭鍙�
      */
-    abstract fun otherProblem(size: Int): Int?
+    abstract fun otherProblem(size: Int): List<Int>?
 
     /**
      * 鑷姩璇勫垎璁$畻閫昏緫
@@ -77,7 +77,9 @@
             return
         }
 
-        otherProblem(rulePair?.second!!.size)?.let {i-> rulePair?.second!![i].getScore() }
+        otherProblem(rulePair?.second!!.size)?.let { it.forEach {i ->
+            rulePair?.second!![i].getScore()
+        } }
 
         ScoreUtil.subRuleCal(rulePair)
     }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreUtil.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreUtil.kt
index b1385d3..05d102d 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreUtil.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreUtil.kt
@@ -2,11 +2,13 @@
 
 import cn.flightfeather.supervision.business.Info
 import cn.flightfeather.supervision.business.autooutput.datasource.AopDataSource
+import cn.flightfeather.supervision.common.utils.ExcelUtil
 import cn.flightfeather.supervision.common.utils.UUIDGenerator
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluationrule
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
 import cn.flightfeather.supervision.domain.ds1.entity.Inspection
 import cn.flightfeather.supervision.domain.ds1.entity.Itemevaluation
+import org.apache.poi.hssf.util.HSSFColor
 import kotlin.math.abs
 
 /**
@@ -63,4 +65,24 @@
             value = itemRule.extension1 ?: "0"
             extension1 = (itemRule.extension1 != null).toString()
         }
+
+    /**
+     * 鍒嗘暟杞崲鐜俊鐮�
+     */
+    fun scoreToCredit(s: Int?): Pair<Int?, String?> {
+        return when (s) {
+            in 0..59 -> Pair(2, "绾㈢爜")
+            in 60..89 -> Pair(1, "榛勭爜")
+            in 90..100 -> Pair(0, "缁跨爜")
+            null -> Pair(null, null)
+            else -> Pair(-1, "瓒呭嚭鑼冨洿")
+        }
+    }
+
+    /**
+     * 鍒嗘暟杞崲瑙勮寖绛夌骇
+     */
+    fun scoreToStandard() {
+
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem1.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem1.kt
index 80df22a..4f6bbeb 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem1.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem1.kt
@@ -33,7 +33,7 @@
      *      1.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
      *      2.闂鏃犳暣鏀�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
             createCriteria().andEqualTo("stguid", evaluationScene.subTask.value?.stguid)
 //                .andGreaterThanOrEqualTo("time", info.sTime)
@@ -49,8 +49,8 @@
             }
         }
         return when {
-            changed == 0 && total > 0 -> 1
-            changed < total -> 0
+            changed == 0 && total > 0 -> listOf(1)
+            changed < total -> listOf(0)
             else -> null
         }
     }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem2.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem2.kt
index 40a8ae9..e25c9e1 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem2.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/construction/CsScoreItem2.kt
@@ -40,7 +40,7 @@
      *      1.鐩戞祴鏁版嵁鍑虹幇鍗曟棩鍙婁互涓婃湁鏁堣秴鏍�
      *      2.鐩戞祴鏁版嵁鏈堝潎鍊艰秴鍖哄煙鏈堝潎鍊�20%浠ヤ笂鎴栨暟鎹槑鏄惧紓甯�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val time = evaluationScene.subTask.value?.planstarttime
         val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
         val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
@@ -51,14 +51,14 @@
                 .andEqualTo("drSceneId", evaluationScene.scene.value?.guid)
         })
 
-        var result: Int? = null
+        var result = mutableListOf<Int>()
         r.forEach {
             if (it == null) return@forEach
             if (it.drExceedTimes > 0) {
-                result = 0
+                result.add(0)
             }
             if (it.drOverAvgPer > 0.2) {
-                result = 1
+                result.add(1)
             }
         }
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem1.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem1.kt
index 41ef7b6..8cf3d74 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem1.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem1.kt
@@ -33,7 +33,7 @@
      *      1.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
      *      2.闂鏃犳暣鏀�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
             createCriteria().andEqualTo("stguid", evaluationScene.subTask.value?.stguid)
 //                .andGreaterThanOrEqualTo("time", info.sTime)
@@ -49,8 +49,8 @@
             }
         }
         return when {
-            changed == 0 && total > 0 -> 1
-            changed < total -> 0
+            changed == 0 && total > 0 -> listOf(1)
+            changed < total -> listOf(0)
             else -> null
         }
     }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem2.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem2.kt
index 1e99a24..c77c7c6 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem2.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/mixingplant/MpScoreItem2.kt
@@ -40,7 +40,7 @@
      *      1.鐩戞祴鏁版嵁鍑虹幇鍗曟棩鍙婁互涓婃湁鏁堣秴鏍�
      *      2.鐩戞祴鏁版嵁鏈堝潎鍊艰秴鍖哄煙鏈堝潎鍊�20%浠ヤ笂鎴栨暟鎹槑鏄惧紓甯�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val time = evaluationScene.subTask.value?.planstarttime
         val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
         val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
@@ -51,14 +51,14 @@
                 .andEqualTo("drSceneId", evaluationScene.scene.value?.guid)
         })
 
-        var result: Int? = null
+        var result = mutableListOf<Int>()
         r.forEach {
             if (it == null) return@forEach
             if (it.drExceedTimes > 0) {
-                result = 0
+                result.add(0)
             }
             if (it.drOverAvgPer > 0.2) {
-                result = 1
+                result.add(1)
             }
         }
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem10.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem10.kt
index 10faf8d..d7b7b88 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem10.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem10.kt
@@ -38,7 +38,7 @@
      *      3.鏀跺埌鎵ф硶鎰忚涔�
      *      4.鏈夌幆澧冭繚娉曡涓轰笖鍙楀埌琛屾斂澶勭綒
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val time = evaluationScene.subTask.value?.planstarttime
         val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
         val s = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
@@ -48,21 +48,16 @@
         when {
             condition3(s, e) -> {
                 i = 3
-                if (i > size - 1) i = size - 1
-                return i
             }
             condition2(s, e) -> {
                 i = 2
-                if (i > size - 1) i = size - 1
-                return i
             }
             condition1(s, e) -> {
                 i = 1
-                if (i > size - 1) i = size - 1
-                return i
             }
-            else -> return null
         }
+        if (i > size - 1) i = size - 1
+        return listOf(i)
     }
 
     /**
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem11.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem11.kt
index 746cb89..4bf2f21 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem11.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem11.kt
@@ -25,17 +25,15 @@
      *      1.鐜淇$敤涓嶈鑼冩垨鎵胯鏈寜鏃舵彁浜ゆ垨瓒呮湁鏁堟湡锛屼互鍙婃秹鍙婃硶浜哄彉鏇寸殑鎴栬惀涓氭墽鐓у彉鏇存湭閲嶆柊鎵胯鐨�
      *      2.鐜淇$敤鑷瘎鏈寜鏃惰嚜璇勬垨鏈寜鏃舵彁
      */
-    override fun otherProblem(size: Int): Int? {
-        var i = 1
+    override fun otherProblem(size: Int): List<Int>? {
+        var i = 0
         if (condition1()) {
-            if (i > size - 1) i = size - 1
-            return i
+            i = 1
         } else if (condition2()) {
             i = 2
-            if (i > size - 1) i = size - 1
-            return i
         }
-        return null
+        if (i > size - 1) i = size - 1
+        return listOf(i)
     }
 
     /**
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem5.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem5.kt
index 688df3e..9200e28 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem5.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem5.kt
@@ -1,18 +1,23 @@
 package cn.flightfeather.supervision.business.autooutput.score.restaurant
 
+import cn.flightfeather.supervision.business.autooutput.dataanalysis.XHFuDataAnalysis
 import cn.flightfeather.supervision.business.autooutput.score.ScoreItem
 import cn.flightfeather.supervision.domain.ds1.entity.DustDataResult
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
 import cn.flightfeather.supervision.domain.ds1.mapper.DustDataResultMapper
+import cn.flightfeather.supervision.domain.ds3.entity.FumeDailyAnalysis
+import cn.flightfeather.supervision.domain.ds3.entity.FumeExceptionData
+import cn.flightfeather.supervision.domain.ds3.mapper.FumeDailyAnalysisMapper
 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 java.util.*
 import javax.annotation.PostConstruct
 
 @Component
-class ReScoreItem5: ScoreItem() {
+class ReScoreItem5(private val xhFuDataAnalysis: XHFuDataAnalysis) : ScoreItem() {
     companion object {
         private lateinit var instance: ReScoreItem5
     }
@@ -24,7 +29,7 @@
 
     override var id: String = "PSQUi9f0f7JK6w9d"
 
-    override var name: String="娌圭儫鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇"
+    override var name: String = "娌圭儫鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇"
 
     @Autowired
     lateinit var dustDataResultMapper: DustDataResultMapper
@@ -32,67 +37,80 @@
     /**
      * 寰愭眹鍖洪楗洃绠″钩鍙拌仈缃戣褰曘�佸湪绾跨巼鍒嗘瀽鏁版嵁鍜岄珮宄扮粡钀ユ椂娈靛皬鏃惰秴鏍囨儏鍐�
      * 閫夐」濡備笅锛�
-     *      1.鏁版嵁鏃犲紓甯镐笖鏃犺秴鏍囨垨鏄剧ず鍑�鍖栬缃竻娲�
-     *      2.楂樺嘲缁忚惀鏃舵鏁版嵁鍦ㄧ嚎鐜囦綆浜�90%鎴栨樉绀哄噣鍖栬缃晠闅�
-     *      3.褰撴湀楂樺嘲缁忚惀鏃舵鍑虹幇涓夋鍙婁互涓�10鍒嗛挓鍧囧�艰秴鏍囨垨鏄剧ず鍑�鍖栬缃緝鑴�
-     *      4.褰撴湀楂樺嘲缁忚惀鏃舵鏁版嵁鎸佺画寮傚父鎴栧嚭鐜颁笁娆″強浠ヤ笂灏忔椂鏁版嵁瓒呮爣鎴栨棤娌圭儫鍑�鍖栬缃垨鍑�鍖栬缃湭姝e父寮�鍚�
+     *      1.鏁版嵁鏃犲紓甯镐笖鏃犺秴鏍囨垨鏄剧ず鍑�鍖栬缃竻娲侊紙涓嶆墸鍒嗭級
+     *      2.褰撴湀瀛樺湪鏃ラ珮宄扮粡钀ユ椂娈垫暟鎹湪绾跨巼浣庝簬90%涓斿嚭鐜�3鏃ュ強浠ヤ笂锛堟墸5鍒嗭級
+     *      3.褰撴湀瀛樺湪鏃ラ珮宄扮粡钀ユ椂娈佃繛缁笁娆″強浠ヤ笂10鍒嗛挓鍧囧�艰秴鏍囦笖鍑虹幇2鏃ュ強浠ュ唴鐨勬垨鏄剧ず鍑�鍖栬缃緝鑴忥紙鎵�5鍒嗭級
+     *      4.褰撴湀瀛樺湪鏃ラ珮宄扮粡钀ユ椂娈佃繛缁笁娆″強浠ヤ笂10鍒嗛挓鍧囧�艰秴鏍囦笖鍑虹幇3鏃ュ強浠ヤ笂鐨勬垨鏃犳补鐑熷噣鍖栬缃垨鍑�鍖栬缃湭姝e父寮�鍚垨鏄剧ず鍑�鍖栬缃晠闅滐紙鎵�10鍒嗭級
      */
-    override fun otherProblem(size: Int): Int? {
-        var i = 1
-        when {
-            condition1() -> {
-                if (i > size - 1) i = size - 1
-                return i
-            }
-            condition2() -> {
-                i = 2
-                if (i > size - 1) i = size - 1
-                return i
-            }
-            condition3() -> {
-                i = 3
-                if (i > size - 1) i = size - 1
-                return i
-            }
-            else -> return null
-        }
-    }
+    override fun otherProblem(size: Int): List<Int>? {
+        val result = mutableListOf<Int>()
 
-    /**
-     * @return true  楂樺嘲缁忚惀鏃舵鏁版嵁鍦ㄧ嚎鐜囦綆浜�90%鎴栨樉绀哄噣鍖栬缃晠闅�
-     */
-    private fun condition1(): Boolean {
-        return false
-    }
-
-    /**
-     * @return true  褰撴湀楂樺嘲缁忚惀鏃舵鍑虹幇涓夋鍙婁互涓�10鍒嗛挓鍧囧�艰秴鏍囨垨鏄剧ず鍑�鍖栬缃緝鑴�
-     */
-    private fun condition2(): Boolean {
         val time = evaluationScene.subTask.value?.planstarttime
         val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
         val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
         val et = st.plusMonths(1)
-        val r = dustDataResultMapper.selectByExample(Example(DustDataResult::class.java).apply {
-            createCriteria().andGreaterThanOrEqualTo("drTime", st)
-                .andLessThan("drTime", et)
-                .andEqualTo("drSceneId", evaluationScene.scene.value?.guid)
-        })
+        evaluationScene.config?.startTime = Date.from(st.atZone(ZoneId.systemDefault()).toInstant())
+        evaluationScene.config?.endTime = Date.from(et.atZone(ZoneId.systemDefault()).toInstant())
+        val dailyAnalysisDataList = xhFuDataAnalysis.fetchDataResources(evaluationScene)
+        val exceptionDataList = xhFuDataAnalysis.fetchExceptionData(evaluationScene)
 
-        var result = false
-        r.forEach {
-            if (it == null) return@forEach
-            if (it.drExceedTimes >= 3) {
-                result = true
+        var count = 0
+        dailyAnalysisDataList.forEach { it.forEach dList@ {f ->
+            val keyOnlineRate = f?.keyOnlineRate?.split("%")?.get(0)?.toDouble() ?: return@dList
+            if (keyOnlineRate < 0.9) {
+                count++
+            }
+        } }
+
+        if (count >= 3) {
+            result.add(1)
+        }
+
+        val dayList = mutableListOf<Int>()
+        exceptionDataList.forEach {
+            // 涓嶅湪楂樺嘲鏃舵鐨勫紓甯告暟鎹笉浣滀负鍒ゆ柇渚濇嵁
+            if (!peakPeriod(it)) return@forEach
+            // 寮傚父鏃堕暱澶т簬绛変簬20鍒嗛挓锛岃〃绀轰笁涓椂闂寸偣鐨勬暟鎹紓甯�
+            if ((it?.endTime?.time?.minus(it.beginTime.time) ?: 0) >= (20 * 60 * 1000)) {
+                val cal = Calendar.getInstance()
+                cal.time = it!!.beginTime
+                val date = cal.get(Calendar.DAY_OF_MONTH)
+                if (!dayList.contains(date)) {
+                    dayList.add(date)
+                }
             }
         }
+        //鏃ラ珮宄扮粡钀ユ椂娈佃繛缁笁娆″強浠ヤ笂10鍒嗛挓鍧囧�艰秴鏍囦笖鍑虹幇3鏃ュ強浠ヤ笂
+        if (dayList.size >= 3) {
+            result.add(3)
+        }
+        //鏃ラ珮宄扮粡钀ユ椂娈佃繛缁笁娆″強浠ヤ笂10鍒嗛挓鍧囧�艰秴鏍囦笖鍑虹幇2鏃ュ強浠ュ唴
+        else if (dayList.size > 0) {
+            result.add(2)
+        }
+
         return result
     }
 
     /**
-     * @return true  褰撴湀楂樺嘲缁忚惀鏃舵鏁版嵁鎸佺画寮傚父鎴栧嚭鐜颁笁娆″強浠ヤ笂灏忔椂鏁版嵁瓒呮爣鎴栨棤娌圭儫鍑�鍖栬缃垨鍑�鍖栬缃湭姝e父寮�鍚�
+     * 鍒ゆ柇寮傚父鏄惁澶勪簬楂樺嘲鏃舵
      */
-    private fun condition3(): Boolean {
-        return false
+    private fun peakPeriod(data: FumeExceptionData?): Boolean {
+        if (data == null) return false
+        val today = LocalDateTime.ofInstant(data.beginTime.toInstant(), ZoneId.systemDefault())
+        val noonP1 = today.withHour(9).withMinute(59).withSecond(59)
+        val noonP2 = today.withHour(14).withMinute(0).withSecond(0)
+        val nightP1 = today.withHour(16).withMinute(59).withSecond(59)
+        val nightP2 = today.withHour(21).withMinute(0).withSecond(0)
+        val beginTime = LocalDateTime.ofInstant(data.beginTime.toInstant(), ZoneId.systemDefault())
+        val endTime = LocalDateTime.ofInstant(data.endTime.toInstant(), ZoneId.systemDefault())
+        val b1 =
+            (beginTime.isAfter(noonP1) && beginTime.isBefore(noonP2)) || (beginTime.isAfter(nightP1) && beginTime.isBefore(
+                nightP2))
+        val b2 = (endTime.isAfter(noonP1) && endTime.isBefore(noonP2)) || (endTime.isAfter(nightP1) && endTime.isBefore(
+            nightP2))
+
+        return b1 || b2
     }
+
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem5BackUp.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem5BackUp.kt
new file mode 100644
index 0000000..c7dbd23
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem5BackUp.kt
@@ -0,0 +1,86 @@
+package cn.flightfeather.supervision.business.autooutput.score.restaurant
+
+import cn.flightfeather.supervision.business.autooutput.score.ScoreItem
+import cn.flightfeather.supervision.domain.ds1.entity.DustDataResult
+import cn.flightfeather.supervision.domain.ds1.mapper.DustDataResultMapper
+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
+
+@Component
+class ReScoreItem5BackUp: ScoreItem() {
+    companion object {
+        private lateinit var instance: ReScoreItem5BackUp
+    }
+
+    @PostConstruct
+    fun init() {
+        instance = this
+    }
+
+    override var id: String = "PSQUi9f0f7JK6w9d"
+
+    override var name: String="娌圭儫鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇"
+
+    @Autowired
+    lateinit var dustDataResultMapper: DustDataResultMapper
+
+    /**
+     * 寰愭眹鍖洪楗洃绠″钩鍙拌仈缃戣褰曘�佸湪绾跨巼鍒嗘瀽鏁版嵁鍜岄珮宄扮粡钀ユ椂娈靛皬鏃惰秴鏍囨儏鍐�
+     * 閫夐」濡備笅锛�
+     *      1.鏁版嵁鏃犲紓甯镐笖鏃犺秴鏍囨垨鏄剧ず鍑�鍖栬缃竻娲�
+     *      2.楂樺嘲缁忚惀鏃舵鏁版嵁鍦ㄧ嚎鐜囦綆浜�90%鎴栨樉绀哄噣鍖栬缃晠闅�
+     *      3.褰撴湀楂樺嘲缁忚惀鏃舵鍑虹幇涓夋鍙婁互涓�10鍒嗛挓鍧囧�艰秴鏍囨垨鏄剧ず鍑�鍖栬缃緝鑴�
+     *      4.褰撴湀楂樺嘲缁忚惀鏃舵鏁版嵁鎸佺画寮傚父鎴栧嚭鐜颁笁娆″強浠ヤ笂灏忔椂鏁版嵁瓒呮爣鎴栨棤娌圭儫鍑�鍖栬缃垨鍑�鍖栬缃湭姝e父寮�鍚�
+     */
+    override fun otherProblem(size: Int): List<Int>? {
+        val time = evaluationScene.subTask.value?.planstarttime
+        val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
+        val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
+        val et = st.plusMonths(1)
+        val res = dustDataResultMapper.selectByExample(Example(DustDataResult::class.java).apply {
+            createCriteria().andGreaterThanOrEqualTo("drTime", st)
+                .andLessThan("drTime", et)
+                .andEqualTo("drSceneId", evaluationScene.scene.value?.guid)
+        }).takeIf { it.isNotEmpty() }?.get(0) ?: return null
+
+        var i = 0
+        when {
+            condition1(res) -> {
+                i = 1
+            }
+            condition2(res) -> {
+                i = 2
+            }
+            condition3(res) -> {
+                i = 3
+            }
+        }
+        if (i > size - 1) i = size - 1
+        return listOf(i)
+    }
+
+    /**
+     * @return true  楂樺嘲缁忚惀鏃舵鏁版嵁鍦ㄧ嚎鐜囦綆浜�90%鎴栨樉绀哄噣鍖栬缃晠闅�
+     */
+    private fun condition1(res: DustDataResult): Boolean {
+        return res.drEffectiveRate < .9
+    }
+
+    /**
+     * @return true  褰撴湀楂樺嘲缁忚惀鏃舵鍑虹幇涓夋鍙婁互涓�10鍒嗛挓鍧囧�艰秴鏍囨垨鏄剧ず鍑�鍖栬缃緝鑴�
+     */
+    private fun condition2(res: DustDataResult): Boolean {
+        return res.drExceedTimes >= 3
+    }
+
+    /**
+     * @return true  褰撴湀楂樺嘲缁忚惀鏃舵鏁版嵁鎸佺画寮傚父鎴栧嚭鐜颁笁娆″強浠ヤ笂灏忔椂鏁版嵁瓒呮爣鎴栨棤娌圭儫鍑�鍖栬缃垨鍑�鍖栬缃湭姝e父寮�鍚�
+     */
+    private fun condition3(res: DustDataResult): Boolean {
+        return false
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem7.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem7.kt
index 24b01a8..b18f272 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem7.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem7.kt
@@ -46,7 +46,7 @@
      *      2.鍙拌处灏戦噺缂哄け鎴栨湭鍙婃椂璁板綍鏇存柊
      *      3.鍙拌处涓ラ噸缂哄け鎴栧叧閿彴璐︽棤鏁�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         // TODO: 2021/3/9 鎵惧嚭鐢ㄦ埛绫诲瀷瀵瑰簲鐨勫繀濉彴璐�
         val time = evaluationScene.subTask.value?.planstarttime
         val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
@@ -66,13 +66,11 @@
         var i = 1
         if (condition1(ledgerTypeCount, rCount)) {
             if (i > size - 1) i = size - 1
-            return i
         } else if (condition2(ledgerTypeCount, rCount)) {
             i = 2
             if (i > size - 1) i = size - 1
-            return i
         }
-        return null
+        return listOf(i)
     }
 
     /**
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem8.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem8.kt
index b66e538..da462ef 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem8.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem8.kt
@@ -29,10 +29,11 @@
     /**
      * 鎵ф硶妫�鏌ユ眹鎬绘儏鍐�
      * 閫夐」濡備笅锛�
-     *      1.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
-     *      2.闂鏃犳暣鏀�
+     *      1.鍏ㄩ儴鎸夋椂鏁存敼骞跺強鏃舵彁浜ゆ潗鏂�
+     *      2.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
+     *      3.闂鏃犳暣鏀�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
             createCriteria().andEqualTo("stguid", evaluationScene.subTask.value?.stguid)
 //                .andGreaterThanOrEqualTo("time", info.sTime)
@@ -48,8 +49,8 @@
             }
         }
         return when {
-            changed == 0 && total > 0 -> 1
-            changed < total -> 0
+            changed == 0 && total > 0 -> listOf(2)
+            changed < total -> listOf(1)
             else -> null
         }
     }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem9.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem9.kt
index 431585c..9b04fe1 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem9.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/restaurant/ReScoreItem9.kt
@@ -37,7 +37,7 @@
      *      2.鏈搴﹀彂鐢熷崟娆″尯绾т俊璁挎姇璇�
      *      3.鏈搴﹀彂鐢熷競绾т俊璁挎姇璇夋垨澶氭鍖虹骇淇¤銆佹姇璇夋垨鐩戠涓嶉厤鍚�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val time = evaluationScene.subTask.value?.planstarttime
         val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
         val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
@@ -49,16 +49,14 @@
                 .andLessThan("cpTime", et)
         })
 
-        var i = 2
+        var i = 0
         if (condition2(complaints)) {
-            if (i > size - 1) i = size - 1
-            return i
+            i = 2
         } else if (condition1(complaints)) {
             i = 1
-            if (i > size - 1) i = size - 1
-            return i
         }
-        return null
+        if (i > size - 1) i = size - 1
+        return listOf(i)
     }
 
     /**
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/storage/StScoreItem1.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/storage/StScoreItem1.kt
index af8a12f..0451cba 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/storage/StScoreItem1.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/storage/StScoreItem1.kt
@@ -33,7 +33,7 @@
      *      1.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
      *      2.闂鏃犳暣鏀�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
             createCriteria().andEqualTo("stguid", evaluationScene.subTask.value?.stguid)
 //                .andGreaterThanOrEqualTo("time", info.sTime)
@@ -49,8 +49,8 @@
             }
         }
         return when {
-            changed == 0 && total > 0 -> 1
-            changed < total -> 0
+            changed == 0 && total > 0 -> listOf(1)
+            changed < total -> listOf(0)
             else -> null
         }
     }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem1.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem1.kt
index 65548c0..1597a98 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem1.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem1.kt
@@ -33,7 +33,7 @@
      *      1.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
      *      2.闂鏃犳暣鏀�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
             createCriteria().andEqualTo("stguid", evaluationScene.subTask.value?.stguid)
 //                .andGreaterThanOrEqualTo("time", info.sTime)
@@ -49,8 +49,8 @@
             }
         }
         return when {
-            changed == 0 && total > 0 -> 1
-            changed < total -> 0
+            changed == 0 && total > 0 -> listOf(1)
+            changed < total -> listOf(0)
             else -> null
         }
     }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem2.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem2.kt
index d7e18d6..0acdeed 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem2.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/wharf/WhScoreItem2.kt
@@ -40,7 +40,7 @@
      *      1.鐩戞祴鏁版嵁鍑虹幇鍗曟棩鍙婁互涓婃湁鏁堣秴鏍�
      *      2.鐩戞祴鏁版嵁鏈堝潎鍊艰秴鍖哄煙鏈堝潎鍊�20%浠ヤ笂鎴栨暟鎹槑鏄惧紓甯�
      */
-    override fun otherProblem(size: Int): Int? {
+    override fun otherProblem(size: Int): List<Int>? {
         val time = evaluationScene.subTask.value?.planstarttime
         val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
         val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
@@ -51,14 +51,14 @@
                 .andEqualTo("drSceneId", evaluationScene.scene.value?.guid)
         })
 
-        var result: Int? = null
+        var result = mutableListOf<Int>()
         r.forEach {
             if (it == null) return@forEach
             if (it.drExceedTimes > 0) {
-                result = 0
+                result.add(0)
             }
             if (it.drOverAvgPer > 0.2) {
-                result = 1
+                result.add(1)
             }
         }
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/AutoScore3.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/AutoScore3.kt
deleted file mode 100644
index ec108f7..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/AutoScore3.kt
+++ /dev/null
@@ -1,521 +0,0 @@
-package cn.flightfeather.supervision.business.fume
-
-import cn.flightfeather.supervision.business.Info
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.business.fume.item.*
-import cn.flightfeather.supervision.common.utils.Constant
-import cn.flightfeather.supervision.common.utils.DateUtil
-import cn.flightfeather.supervision.common.utils.ExcelUtil
-import cn.flightfeather.supervision.common.utils.UUIDGenerator
-import cn.flightfeather.supervision.domain.ds1.entity.*
-import cn.flightfeather.supervision.domain.ds1.mapper.*
-import cn.flightfeather.supervision.domain.ds2.entity.UserMap
-import cn.flightfeather.supervision.domain.ds2.mapper.UserMapMapper
-import org.apache.poi.hssf.usermodel.HSSFWorkbook
-import org.apache.poi.hssf.util.HSSFColor
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import java.io.File
-import java.io.FileOutputStream
-import java.time.*
-import java.util.*
-import javax.annotation.PostConstruct
-import kotlin.math.abs
-
-/**
- * 鑷姩璇勫垎
- */
-@Component
-class AutoScore3(
-    val scoreItem_1: ScoreItem_1, val scoreItem_2: ScoreItem_2, val scoreItem_3: ScoreItem_3,
-    val scoreItem_4: ScoreItem_4, val scoreItem_5: ScoreItem_5, val scoreItem_6: ScoreItem_6,
-    val scoreItem_7: ScoreItem_7, val scoreItem_8: ScoreItem_8, val scoreItem_9: ScoreItem_9,
-    val scoreItem_10: ScoreItem_10, val scoreItem_11: ScoreItem_11,
-) {
-    companion object {
-        private lateinit var instance: AutoScore3
-        //鐗规畩璇勫垎椤癸紝璁$畻鎬诲垎鏃讹紝鑻ユ璇勫垎椤瑰緱鍒嗭紝褰撳姞涓婃璇勫垎椤瑰悗鐨勬�诲垎涓嶈秴杩囧緱鍒嗕笂闄愶紝鍒欒绠楋紝鍚﹀垯鑸嶅幓
-        private const val SPECIAL_RULE = "鐩戞祴璁惧"
-        // 椁愰ギ
-        private val SCENE_TYPE = Constant.ScenseType.TYPE5
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    @Autowired
-    lateinit var userinfoMapper: UserinfoMapper
-
-    @Autowired
-    lateinit var userMapMapper: UserMapMapper
-
-    @Autowired
-    lateinit var scenseMapper: ScenseMapper
-
-    @Autowired
-    lateinit var evaluationruleMapper: EvaluationruleMapper
-
-    @Autowired
-    lateinit var evaluationsubruleMapper: EvaluationsubruleMapper2
-
-    @Autowired
-    lateinit var evaluationMapper: EvaluationMapper
-
-    @Autowired
-    lateinit var itemevaluationMapper: ItemevaluationMapper
-
-    @Autowired
-    lateinit var problemlistMapper: ProblemlistMapper
-
-    //鍐冲畾鏄惁鍐檋3
-    private val hasHead3 = true
-
-    private var totalScore = 100//婊″垎
-
-    private val itemList = mutableListOf<ScoreItem>()
-
-    private val baseRules = mutableListOf<Evaluationrule>()
-
-    private val rules = mutableListOf<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>()
-
-    private val topItems = mutableListOf<Evaluationsubrule2>()
-
-    private var workbook = HSSFWorkbook()
-
-    init {
-        itemList.apply {
-            add(scoreItem_1)
-            add(scoreItem_2)
-            add(scoreItem_3)
-            add(scoreItem_4)
-            add(scoreItem_5)
-            add(scoreItem_6)
-            add(scoreItem_7)
-            add(scoreItem_9)
-            add(scoreItem_10)
-            add(scoreItem_11)
-            add(scoreItem_8)
-        }
-    }
-
-    fun go(_year: Int? = null, _month: Int? = null, _period: Int = 1) {
-        /** 1.excel鏂囦欢鍑嗗*************************************************************************/
-        val fileName = "${SCENE_TYPE.text}鑷姩璇勫垎-${DateUtil().DateToString(Date(), "yyyy-MM-ddhhmmss")}.xls"
-//        val filePath = "E:\\宸ヤ綔\\寮�鍙慭\绗笁鏂圭洃绠pp\\鑷姩璇勫垎\\椁愰ギ\\$fileName"
-        val filePath = "C:\\work\\宸ヤ綔\\绗笁鏂圭洃绠\鑷姩璇勫垎\\椁愰ギ\\$fileName"
-        val out = FileOutputStream(File(filePath))
-
-        getScoreItem()
-
-
-
-        val contents = mutableListOf<Array<Any>>()
-
-        val h1 = mutableListOf<ExcelUtil.MyCell>()
-        h1.add(ExcelUtil.MyCell(""))
-        val h2 = mutableListOf<ExcelUtil.MyCell>()
-        h2.add(ExcelUtil.MyCell(""))
-        val h3 = mutableListOf<String>()
-        h3.add("")
-        topItems.forEach {
-            h1.add(ExcelUtil.MyCell(it.itemname ?: "", 1, 0))
-            for (r in rules) {
-                if (r.first.fatherid == it.guid || r.first.guid == it.guid) {
-                    h2.add(ExcelUtil.MyCell(r.first.itemname ?: "", 1, 0))
-                    // FIXME: 2021/4/25 鍐冲畾鏄惁鍐檋3
-                    if (hasHead3) {
-                        r.second.forEach { s ->
-                            h3.add(s.itemname ?: "")
-                            h2.last().colSpan++
-                            h1.last().colSpan++
-                        }
-                    } else {
-                        h2.last().colSpan++
-                        h1.last().colSpan++
-                    }
-                }
-            }
-        }
-        // FIXME: 2021/4/25 鍐冲畾鏄惁鍐檋3
-        if (hasHead3) {
-            h1.add(ExcelUtil.MyCell("鎬诲垎", 3, 1))
-            h1.add(ExcelUtil.MyCell("鐜俊鐮�", 3, 1))
-        } else {
-            h1.add(ExcelUtil.MyCell("鎬诲垎", 2, 1))
-            h1.add(ExcelUtil.MyCell("鐜俊鐮�", 2, 1))
-        }
-
-        contents.add(h1.toTypedArray())
-        contents.add(h2.toTypedArray())
-        // FIXME: 2021/4/25 鍐冲畾鏄惁鍐檋3
-        if (hasHead3) {
-            contents.add(h3.toTypedArray())
-        }
-
-        /** 2. 绛涢�夋墦鍒嗗満鏅�*************************************************************************/
-        val sceneList = scenseMapper.selectByExample(Example(Scense::class.java).apply {
-            createCriteria().andEqualTo("typeid", SCENE_TYPE.value.toByte())
-                .andNotEqualTo("extension1", '0')
-//            createCriteria().andEqualTo("guid", "eKIUnqn4RB64UNM0")
-        })
-
-        val now = LocalDate.now()
-        val year = _year ?: now.year
-        val month = _month ?: now.monthValue
-        val sMonth = DateUtil().getStartMonthByPeriod(month, _period) ?: 1
-        val eMonth = sMonth + _period - 1
-        val sTime = LocalDateTime.of(year, sMonth, 1, 0, 0)
-        val eTime = sTime.plusMonths(_period.toLong())
-        val period = "${year}/$sMonth-$eMonth"
-
-        /** 3. 寰幆澶勭悊姣忎釜鍦烘櫙锛岀粰姣忎釜鍦烘櫙鎵撳垎*************************************************************************/
-        sceneList.forEach {
-            // 姣忎釜鍦烘櫙鐨勮瘎鍒嗚眮鍏嶉」閮戒笉涓�瀹氱浉鍚岋紝棣栧厛鍒濆鍖栨槸鍚﹁眮鍏嶆爣蹇�
-            itemList.forEach { s->
-                s.exemption = false
-            }
-            // 鍙拌处绠$悊涓哄繀璞佸厤椤�
-//            scoreItem_7.exemption = true
-            // 瀵瑰簲鐨勮眮鍏嶉棶棰樻竻绌�
-            scoreItem_8.clear()
-
-            topItems.forEach { s -> s.extension1 = null }
-            rules.forEach { p ->
-                p.first.extension1 = null
-                p.second.forEach { e -> e.extension1 = null }
-            }
-
-            val userInfo = userinfoMapper.selectByExample(Example(Userinfo::class.java).apply {
-                createCriteria().andEqualTo("dGuid", it.guid)
-            })?.takeIf { l -> l.isNotEmpty() }?.get(0)
-
-            val tzUserId = userMapMapper.selectByExample(Example(UserMap::class.java).apply {
-                createCriteria().andEqualTo("svUserId", userInfo?.guid)
-            })?.takeIf { m-> m.isNotEmpty() }?.get(0)?.tzUserId
-
-            val info = Info(
-                userInfo?.guid,
-                tzUserId,
-                it.guid,
-                it.name,
-                SCENE_TYPE,
-                year,
-                month,
-                _period,
-                sTime, eTime
-            )
-
-            var score = 0
-
-            /** 3. 鏍规嵁绯荤粺璁板綍鐨勯棶棰樺強澶栭儴鏉ユ簮锛岃绠楀叿浣撹瘎鍒嗗瓙椤�*************************************************************************/
-            val itemEvaluations = mutableListOf<Itemevaluation>()
-            rules.forEach {r ->
-                // 璇勫垎鏉$洰
-                val rule = r.first
-                // 鍏蜂綋璇勫垎閫夐」
-                val subRule = r.second
-                subRule.forEach {sr ->
-                    sr.problemlist?.let {pId ->
-                        problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
-                            createCriteria().andEqualTo("sguid", info.sceneId)
-                                .andEqualTo("ptguid", pId)
-                                .andGreaterThanOrEqualTo("time", info.sTime)
-                                .andLessThan("time", info.eTime)
-                        })?.takeIf { p-> p.isNotEmpty() }?.run {
-                            sr.extension1 = (0 - (sr.maxscore ?: 0)).toString()
-
-                            // 褰撹鍒欐墸鍒嗘椂锛屾牴鎹搴旇眮鍏嶇殑瑙勫垯id锛屽皢瀵瑰簲鐨勮鍒欒缃负璞佸厤鐘舵�侊紝鍚屾椂娓呯┖鍏舵墸鍒�
-                            sr.gitlist?.split(";")?.forEach {g->
-                                findRule(g) {r,p ->
-                                    // 娓呯┖鍏宠仈瑙勫垯鐨勬墸鍒�
-                                    p.first.extension1 = "0"
-                                    p.second.forEach { it.extension1 = "0" }
-                                    // 鎵惧埌瀵瑰簲鐨勮瘎浼皊coreItem锛屽皢鍏惰缃负璞佸厤鐘舵��
-                                    for (i in itemList) {
-                                        if (i.id == p.first.guid) {
-                                            i.exemption = true
-                                            scoreItem_8.setExemptionProblem(p.second)
-                                            break
-                                        }
-                                    }
-                                }
-                            }
-
-                            // 褰撹鍒欐墸鍒嗘椂锛屾牴鎹搴旂殑鑱斿姩鎵e垎瑙勫垯id锛屽皢瀵瑰簲瑙勫垯杩涜鑱斿姩鎵e垎
-                            sr.devicelist?.split(";")?.forEach {d ->
-                                findRule(d) {r,p ->
-                                    // 鎵i櫎鑱斿姩瑙勫垯寰楀垎
-                                    r.extension1 = (0 - (r.maxscore ?: 0)).toString()
-                                }
-                            }
-                        }
-                    }
-                }
-                var total: Int? = null
-                subRule.forEach {sr ->
-                    if (!sr.extension1.isNullOrBlank()) {
-                        total = (total ?: 0) + sr.extension1!!.toInt()
-                    }
-                }
-                if (total == null) {
-                    rule.extension1 = "0"
-                } else {
-                    val s = if (abs(total!!) > rule.maxscore!!) {
-                        0 - rule.maxscore!!
-                    } else {
-                        total
-                    }
-                    rule.extension1 = s.toString()
-                }
-            }
-            itemList.forEach { si ->
-                si.execute2(info, rules)
-            }
-
-            /** 4. 琛ュ叏鍚勪笂绾ц瘎鍒嗛」鐨勮鍒�*************************************************************************/
-            this.rules.forEach { r ->
-                val fatherId = r.first.fatherid
-                for (t in topItems) {
-                    if (t.guid == fatherId) {
-                        var s = t.extension1?.toIntOrNull() ?: 0
-                        s += r.first.extension1?.toIntOrNull() ?: 0
-                        t.extension1 = s.toString()
-                        break
-                    }
-                }
-            }
-
-            /** 4. 璁$畻鎬诲垎*************************************************************************/
-            var total = 0//鎬绘墸闄ょ殑鍒嗘暟
-            topItems.forEach top@{ top ->
-                total += top.extension1?.toIntOrNull() ?: 0
-            }
-            val evaluationList = mutableListOf<Evaluation>()
-            var evaluationId: String? = null
-            baseRules.forEach {
-                val evaluation = Evaluation().apply {
-                    guid = UUIDGenerator.generate16ShortUUID()
-                    iguid = info.userId
-                    stguid = it.guid
-                    scensetypeid = info.sceneType.value.toByte()
-                    ertype = it.ruletype?.toByte()
-                    scensename = period
-                    evaluatorguid = "system"
-                    evaluatorusername = "system"
-                    evaluatorrealname = "2"
-                    resultscorebef = (totalScore - abs(total)).toString()
-                    createdate = Date()
-                    updatedate = Date()
-                }
-                if (evaluation.ertype?.toInt() == 1) {
-                    evaluationId = evaluation.guid
-                }
-                evaluationList.add(evaluation)
-            }
-            //瀛愰」鍏蜂綋寰楀垎
-            val itemevaluationList = mutableListOf<Itemevaluation>()
-            topItems.forEach { subRule ->
-                val item = newItemEvaluation(info, subRule, evaluationId)
-                itemevaluationList.add(item)
-            }
-            rules.forEach { p ->
-                if (p.first.ertype != 2) {
-                    val item = newItemEvaluation(info, p.first, evaluationId)
-                    itemevaluationList.add(item)
-                }
-                p.second.forEach { r ->
-                    val item1 = newItemEvaluation(info, r, evaluationId)
-                    itemevaluationList.add(item1)
-                }
-            }
-            // 娣诲姞鑷虫枃妗�
-            addToFile(contents, info, evaluationList, topItems, this.rules)
-//            val r = evaluationMapper.selectByExample(Example(Evaluation::class.java).apply {
-//                createCriteria().andEqualTo("scensename", period)
-//                    .andEqualTo("evaluatorguid", "system")
-//                    .andEqualTo("iguid", info.userId)
-////                        .andEqualTo("ertype", 1)
-//            }).let { eList ->
-//                var guid: String? = null
-//                for (e in eList) {
-//                    if (e.ertype?.toInt() == 1) {
-//                        guid = e.guid
-//                        break
-//                    }
-//                }
-//                guid?.let {
-//                    eList.forEach { e ->
-//                        evaluationMapper.delete(e)
-//                    }
-//                    itemevaluationMapper.deleteByExample(Example(Itemevaluation::class.java).apply {
-//                        createCriteria().andEqualTo("sguid", guid)
-//                    })
-//                }
-//            } ?: 0
-            // 鍐欏叆鏁版嵁搴�
-//            if (r > 0) {
-//                evaluationList.forEach { el -> evaluationMapper.insert(el) }
-//                itemevaluationList.forEach { il -> itemevaluationMapper.insert(il) }
-//                for (e in evaluationList) {
-//                    if (e.ertype?.toInt()?.equals(0) == true) {
-//                        finalScore(e, year, eMonth, period)
-//                        break
-//                    }
-//                }
-//            }
-        }
-
-        // 鍐欏叆鏂囨。
-        ExcelUtil.write(emptyList(), contents, workbook)
-        workbook.write(out)
-        workbook.close()
-        out.flush()
-        out.close()
-    }
-
-    /**
-     * 鑾峰彇璇勫垎瑙勫垯
-     */
-    private fun getScoreItem() {
-        this.rules.clear()
-        baseRules.clear()
-
-        val rule = evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
-            createCriteria()
-                    .andEqualTo("tasktypeid", 99)
-                    .andEqualTo("scensetypeid", SCENE_TYPE.value.toByte())
-//                    .andEqualTo("districtcode", "310104")
-        })
-        if (rule.isNotEmpty()) {
-            baseRules.addAll(rule)
-
-            val ruleId = rule[0].guid
-            val rules = evaluationsubruleMapper.selectByExample(Example(Evaluationsubrule2::class.java).apply {
-                createCriteria().andEqualTo("erguid", ruleId)
-            })
-            rules.forEach {
-                if (it.ertype == 2) {
-                    topItems.add(it)
-                }
-            }
-            topItems.sortBy { it.displayid }
-
-            var t = 0
-            topItems.forEach {
-                t += it.maxscore ?: 0
-                val tempRules = mutableListOf<Evaluationsubrule2>()
-                for (i in rules) {
-                    if (i.fatherid == it.guid && i.ertype == 3) {
-                        tempRules.add(i)
-                    }
-                }
-                //璇勫垎澶ч」濡傛灉娌℃湁鎵惧埌璇勫垎灏忛」锛屽垯璇存槑鍏剁洿鎺ュ搴旀渶灏忚瘎鍒嗛」锛屽叾鏈韩鍙樻垚璇勫垎椤�
-                if (tempRules.isEmpty()) {
-                    tempRules.add(it)
-                }
-                tempRules.sortBy { t-> t.displayid }
-                tempRules.forEach {temp ->
-                    val tempSubRules = mutableListOf<Evaluationsubrule2>()
-                    for (i in rules) {
-                        if (i.fatherid == temp.guid && i.ertype == 4) {
-                            tempSubRules.add(i)
-                        }
-                    }
-                    tempSubRules.sortBy {ts-> ts.displayid }
-                    this.rules.add(Pair(temp, tempSubRules))
-                }
-            }
-//            this.totalScore = t
-        }
-    }
-
-    /**
-     * 鐢熸垚鏂扮殑涓�鏉¤瘎鍒嗚褰�
-     */
-    private fun newItemEvaluation(info: Info, itemRule: Evaluationsubrule2, evaluationId: String?) = cn.flightfeather.supervision.domain.ds1.entity.Itemevaluation()
-        .apply {
-        var rule: Evaluationrule? = null
-        for (r in baseRules) {
-            if (r.guid == itemRule.erguid) {
-                rule = r
-                break
-            }
-        }
-        ieguid = UUIDGenerator.generate16ShortUUID()
-        iguid = info.userId
-        sguid = evaluationId
-        erguid = rule?.guid
-        rulename = rule?.rulename
-        ruletype = rule?.ruletype?.toInt()
-        ertype = itemRule.ertype
-        esrguid = itemRule.guid
-        name = itemRule.itemname
-        value = itemRule.extension1 ?: "0"
-        extension1 = (itemRule.extension1 != null).toString()
-    }
-
-    private fun addToFile(contents: MutableList<Array<Any>>, info: Info, evaluations: List<Evaluation>, topItems: MutableList<Evaluationsubrule2>,
-                          rules: MutableList<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>) {
-        val cList = mutableListOf<Any>()
-        // FIXME: 2021/4/28 鐢ㄦ埛鍚嶆槸鍚︽坊鍔犺处鍙�
-//        cList.add("${info.userName}\t${info.userId}")
-        cList.add("${info.sceneName}")
-        //姣忎竴椤瑰叿浣撳緱鍒�
-        topItems.forEach {
-            for (r in rules) {
-                if (r.first.fatherid == it.guid || r.first.guid == it.guid) {
-                    // FIXME: 2021/4/25 鍐冲畾鏄惁鍐檋3
-                    if (hasHead3) {
-                        r.second.forEach {s ->
-                            cList.add(s.extension1 ?: .0)
-                        }
-                    } else {
-                        cList.add(.0 - (r.first.extension1?.toDoubleOrNull() ?: .0))
-                    }
-                }
-            }
-        }
-        //鎬诲垎鍜岀幆淇$爜
-        evaluations.forEach {
-            if ((it.ertype?.toInt() == 2)) {
-                cList.add(it.resultscorebef?.toDoubleOrNull() ?: .0)
-                val code = when (it.resultscorebef?.toIntOrNull() ?: 0) {
-                    in 0..59 -> ExcelUtil.MyCell("绾㈢爜", fontColor = HSSFColor.HSSFColorPredefined.RED.index)
-                    in 60..89 -> ExcelUtil.MyCell("榛勭爜", fontColor = HSSFColor.HSSFColorPredefined.GOLD.index)
-                    in 90..100 -> ExcelUtil.MyCell("缁跨爜", fontColor = HSSFColor.HSSFColorPredefined.BRIGHT_GREEN.index)
-                    else -> ExcelUtil.MyCell("瓒呭嚭鑼冨洿锛�${it.resultscoreaft}", fontColor = HSSFColor.HSSFColorPredefined.BLACK.index)
-                }
-                cList.add(code)
-            }
-        }
-        contents.add(cList.toTypedArray())
-    }
-
-    /**
-     * 鏍规嵁瑙勫垯id鏌ユ壘瑙勫垯鍙婂叾鎵�鍦ㄧ粍
-     */
-    private fun findRule(
-        ruleId: String,
-        onFound: (r: Evaluationsubrule2, p: Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>) -> Unit
-    ) {
-        with(rules)breaking@ {
-            forEach {
-                if (it.first.guid == ruleId) {
-                    onFound(it.first, it)
-                    return@breaking
-                } else {
-                    for (r in it.second) {
-                        if (r.guid == ruleId) {
-                            onFound(r, it)
-                            return@breaking
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_1.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_1.kt
deleted file mode 100644
index 3777aa8..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_1.kt
+++ /dev/null
@@ -1,61 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluation
-import cn.flightfeather.supervision.domain.ds1.mapper.EvaluationMapper
-import cn.flightfeather.supervision.domain.ds2.mapper.BaseInfoMapper
-import cn.flightfeather.supervision.domain.ds2.mapper.FumeMinuteValueMapper
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import javax.annotation.PostConstruct
-
-@Component
-class ScoreItem_1: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_1
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    @Autowired
-    lateinit var fumeMinuteValueMapper: FumeMinuteValueMapper
-
-    @Autowired
-    lateinit var baseInfoMapper: BaseInfoMapper
-
-    override var id: String = "2COC44k7d9dlnR4c"
-
-    override var name: String="娌圭儫鍦ㄧ嚎鐩戞祴璁惧"
-
-    /**
-     * 閫夐」濡備笅锛�
-     *      1.鏈畨瑁呮补鐑熷湪绾跨洃娴嬭澶�
-     *      2.娌圭儫鍦ㄧ嚎璁惧瀹夎涓嶈鑼�
-     *      3.娌圭儫鍦ㄧ嚎鐩戞祴璁惧鏈仈缃�
-     *      4.绉佽嚜闂茬疆鍋滆繍/鎷嗛櫎璁惧
-     */
-    override fun otherProblem(size: Int): Int? {
-        var i = 2
-        if (i > size - 1) i = size - 1
-        if (condition1()) {
-            return i
-        }
-        return null
-    }
-
-    /**
-     * @return false 寰愭眹鍖洪楗洃绠″钩鍙拌仈缃戣褰曞拰鍦ㄧ嚎鐜囧垎鏋愭暟鎹紝纭畾鑱旂綉涓斾换涓�缁忚惀楂樺嘲鍦ㄧ嚎鐜囬珮浜�90%鍗充笉鎵e垎
-     *         true  鍏朵粬鎯呭喌鍧囨墸10鍒�
-     */
-    private fun condition1(): Boolean {
-        // 鏌ヨ褰撳墠鐢ㄦ埛鐨勬补鐑熺洃娴嬭澶囩殑鏁版嵁鍦ㄧ嚎鐜�
-        val userId = info.userId
-        val baseInfo = baseInfoMapper.selectByPrimaryKey(userId)
-
-        return false
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_10.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_10.kt
deleted file mode 100644
index 5dda836..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_10.kt
+++ /dev/null
@@ -1,97 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds2.entity.Punishment
-import cn.flightfeather.supervision.domain.ds2.mapper.PunishmentMapper
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import java.time.LocalDate
-import java.time.ZoneId
-import java.util.*
-import javax.annotation.PostConstruct
-
-@Component
-class ScoreItem_10: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_10
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    @Autowired
-    lateinit var punishmentMapper: PunishmentMapper
-
-    override var id: String = "dlALSsoF63Z2FOz0"
-
-    override var name: String = "琛屾斂澶勭綒"
-
-    /**
-     * 瀛e害鍐呰鏀垮缃氳褰曡鏍煎寲瀵煎叆
-     * 閫夐」濡備笅锛�
-     *      1.鏃犺矗浠ゆ暣鏀广�佹墽娉曟剰瑙佸拰琛屾斂澶勭綒
-     *      2.鏀跺埌璐d护鏀规鍐冲畾涔�
-     *      3.鏀跺埌鎵ф硶鎰忚涔�
-     *      4.鏈夌幆澧冭繚娉曡涓轰笖鍙楀埌琛屾斂澶勭綒
-     */
-    override fun otherProblem(size: Int): Int? {
-        val s = Date.from(info.sTime?.atZone(ZoneId.systemDefault())?.toInstant())
-        val e = Date.from(info.eTime?.atZone(ZoneId.systemDefault())?.toInstant())
-
-        var i = 1
-        when {
-            condition3(s, e) -> {
-                i = 3
-                if (i > size - 1) i = size - 1
-                return i
-            }
-            condition2(s, e) -> {
-                i = 2
-                if (i > size - 1) i = size - 1
-                return i
-            }
-            condition1(s, e) -> {
-                i = 1
-                if (i > size - 1) i = size - 1
-                return i
-            }
-            else -> return null
-        }
-    }
-
-    /**
-     * @return true  鏀跺埌璐d护鏀规鍐冲畾涔�
-     */
-    private fun condition1(s: Date, e: Date): Boolean {
-        val p = punishmentMapper.selectByExample(Example(Punishment::class.java).apply {
-            createCriteria().andEqualTo("pmSceneId", info.tzUserId)
-                .andEqualTo("pmExtension1", "1")
-                .andGreaterThanOrEqualTo("pmTime", s)
-                .andLessThan("pmTime", e)
-        })
-        return p.isNotEmpty()
-    }
-
-    /**
-     * @return true  鏀跺埌鎵ф硶鎰忚涔�
-     */
-    private fun condition2(s: Date, e: Date): Boolean {
-        return false
-    }
-
-    /**
-     * @return true  鏈夌幆澧冭繚娉曡涓轰笖鍙楀埌琛屾斂澶勭綒
-     */
-    private fun condition3(s: Date, e: Date): Boolean {
-        val p = punishmentMapper.selectByExample(Example(Punishment::class.java).apply {
-            createCriteria().andEqualTo("pmSceneId", info.tzUserId)
-                .andEqualTo("pmExtension1", "0")
-                .andGreaterThanOrEqualTo("pmTime", s)
-                .andLessThan("pmTime", e)
-        })
-        return p.isNotEmpty()
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_11.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_11.kt
deleted file mode 100644
index 76a75a2..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_11.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
-import org.springframework.stereotype.Component
-import javax.annotation.PostConstruct
-
-@Component
-class ScoreItem_11: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_11
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "QFzQPYgUXaHU4tTD"
-
-    override var name: String="淇$敤鎵胯鑷瘎"
-
-    /**
-     * 椋炵窘鐜APP骞村害鎵胯鍜屾湀搴﹁嚜璇勮褰�
-     * 閫夐」濡備笅锛�
-     *      1.鐜淇$敤涓嶈鑼冩垨鎵胯鏈寜鏃舵彁浜ゆ垨瓒呮湁鏁堟湡锛屼互鍙婃秹鍙婃硶浜哄彉鏇寸殑鎴栬惀涓氭墽鐓у彉鏇存湭閲嶆柊鎵胯鐨�
-     *      2.鐜淇$敤鑷瘎鏈寜鏃惰嚜璇勬垨鏈寜鏃舵彁
-     */
-    override fun otherProblem(size: Int): Int? {
-        var i = 1
-        if (condition1()) {
-            if (i > size - 1) i = size - 1
-            return i
-        } else if (condition2()) {
-            i = 2
-            if (i > size - 1) i = size - 1
-            return i
-        }
-        return null
-    }
-
-    /**
-     * @return true  鐜淇$敤涓嶈鑼冩垨鎵胯鏈寜鏃舵彁浜ゆ垨瓒呮湁鏁堟湡锛屼互鍙婃秹鍙婃硶浜哄彉鏇寸殑鎴栬惀涓氭墽鐓у彉鏇存湭閲嶆柊鎵胯鐨�
-     */
-    private fun condition1(): Boolean {
-        return false
-    }
-
-    /**
-     * @return true  鐜淇$敤鑷瘎鏈寜鏃惰嚜璇勬垨鏈寜鏃舵彁
-     */
-    private fun condition2(): Boolean {
-        return false
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_2.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_2.kt
deleted file mode 100644
index 3be8d5d..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_2.kt
+++ /dev/null
@@ -1,76 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds2.entity.LedgerRecord
-import cn.flightfeather.supervision.domain.ds2.mapper.LedgerRecordMapper
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import javax.annotation.PostConstruct
-
-/**
- * 瀛e害鍐呮湭鍦ㄧ嚎鎻愪氦鐜瘎瀹℃壒鏂囦欢锛屾垨鏃犳湁鏁堝嵄搴熷妗堬紝鍗虫墸10鍒嗭紙鍗卞簾鐩稿叧鍙拌处缂哄け涓ラ噸鐨勶紝鍙瀹氫负鏃犳瑙勭幆璇勫鎵规枃浠讹紝鎵�10鍒嗭級
- */
-@Component
-class ScoreItem_2: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_2
-
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    @Autowired
-    lateinit var ledgerRecordMapper: LedgerRecordMapper
-
-    override var id: String = "f9mxgKhMpMO0QYYt"
-
-    override var name: String="娌圭儫鍑�鍖栬鏂借澶�"
-
-    private val ledgerIdList = listOf(
-        2200,//璁惧瀹夎鍚堝悓
-        2201,//浜у搧璐ㄦ
-        2202,//鍑�鍖栧櫒鍚堟牸璇�
-        2203,//娓呮礂鍚堝悓
-        2204,//娓呮礂璁板綍
-        2205,//璁惧缁翠慨淇濆吇
-    )
-
-    /**
-     * 鍦ㄧ嚎鍙拌处璁板綍锛屾棤鐜板満闂涓旀补鐑熷噣鍖栬澶囨湁鍚堝悓鍜屾娴嬫姤鍛婄殑绠楀悎瑙勶紝涓嶆墸鍒嗭紝鍏朵粬鎯呭喌鍙傜湅涓夌骇鎸囨爣銆�
-     * 閫夐」濡備笅锛�
-     *      1.璁惧绗﹀悎銆奃B 31/844 -2014銆嬩笖姝e父杩愯
-     *      2.椋庨噺涓嶈冻銆佽繃澶ф垨闆嗘皵缃╁畨瑁呬綅缃繃楂樻垨闆嗘皵缃╂湭瀹屽叏瑕嗙洊鐏跺ご鎴栭泦姘旂僵鏄庢樉鎸傛补銆佹穻娌规垨娌圭儫绠¢亾鐮存崯銆佷笉瀵嗗皝
-     *      3.鍑�鍖栫巼浣庝簬90%鎴栨秹瀚屾棤缁勭粐鎺掓斁锛堟秹鎴峰闂ㄧ獥鏈叧闂垨鎺掓皵鎵囩洿閫氭埛澶栵級
-     *      4.鏃犲噣鍖栬缃垨鍑�鍖栬缃棽缃�
-     */
-    override fun otherProblem(size: Int): Int? {
-        var i = 3
-        if (i > size - 1) i = size - 1
-        if (condition1()) {
-            return i
-        }
-        return null
-    }
-
-    private fun condition1(): Boolean {
-//        return if (info.tzUserId != null) {
-//            //2銆佸鏋滄湁璁板綍锛屾煡璇㈢浉鍏冲彴璐︾殑鎻愪氦鎯呭喌
-//            val r = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
-//                createCriteria().andIn("lsSubtypeid", ledgerIdList)
-//                    .andEqualTo("lrYear", info.year)
-//                    .andEqualTo("lrMonth", info.month)
-//                    .andEqualTo("lrSubmitid", info.tzUserId)
-//            })
-//            //2.1銆� 濡傛灉涓婁紶鍙拌处涓嶉綈鍏紝鎵e垎
-//            r.size < ledgerIdList.size
-//        } else {
-//            //3銆佸鏋滄病鏈夊搴旇褰曪紝杩斿洖false
-//            false
-//        }
-        return false
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_3.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_3.kt
deleted file mode 100644
index 706b5e4..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_3.kt
+++ /dev/null
@@ -1,73 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
-import cn.flightfeather.supervision.domain.ds2.entity.LedgerRecord
-import cn.flightfeather.supervision.domain.ds2.mapper.LedgerRecordMapper
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import javax.annotation.PostConstruct
-
-@Component
-class ScoreItem_3: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_3
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    @Autowired
-    lateinit var ledgerRecordMapper: LedgerRecordMapper
-
-    override var id: String = "gxJgISevmhFuMJnE"
-
-    override var name: String="娌圭儫鍦ㄧ嚎鐩戞祴璁惧缁存姢"
-
-    /**
-     * 鍦ㄧ嚎鍙拌处涓繍缁磋褰曞強鏃舵彁浜や笖纭畾鑱旂綉涓斾换涓�缁忚惀楂樺嘲鍦ㄧ嚎鐜囬珮浜�90%鍗充笉鎵e垎锛屽叾浠栨墸10鍒嗐��
-     * 閫夐」濡備笅锛�
-     *      1.娌圭儫鐩戞祴璁惧鏈寜鏈熻繍缁存垨杩愮淮棰戞涓嶈冻锛堝皯浜庝竴瀛e害涓�娆★級
-     *      2.娌圭儫鐩戞祴璁惧杩愯寮傚父锛堟寚绀虹伅寮傚父銆侀儴鍒嗘ā鍧椾笉杩愯鎴栫己澶辩瓑锛�
-     *      3.娌圭儫鐩戞祴璁惧鏈甯稿紑鍚�
-     */
-    override fun otherProblem(size: Int): Int? {
-        var i = 0
-        if (condition1()) {
-            if (i > size - 1) i = size - 1
-            return i
-        } else if (condition2()) {
-            i = 2
-            if (i > size - 1) i = size - 1
-            return i
-        }
-        return null
-    }
-
-    /**
-     * @return false 鍦ㄧ嚎鍙拌处涓繍缁磋褰曞強鏃舵彁浜�
-     *         true  鍦ㄧ嚎鍙拌处涓繍缁磋褰曟湭鍙婃椂鎻愪氦
-     */
-    private fun condition1(): Boolean {
-//        val l = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
-//            createCriteria().andEqualTo("lsSubtypeid", 2304)//璁惧杩愮淮璁板綍
-//                .andEqualTo("lrYear", info.year)
-//                .andEqualTo("lrMonth", info.month)
-//                .andEqualTo("lrSubmitid", info.tzUserId)
-//        })
-//        return l.size == 0
-        return false
-    }
-
-    /**
-     * @return false 纭畾鑱旂綉涓斾换涓�缁忚惀楂樺嘲鍦ㄧ嚎鐜囬珮浜�90%鍗充笉鎵e垎
-     *         true  鍏朵粬鎵�10鍒�
-     */
-    private fun condition2(): Boolean {
-        return false
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_4.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_4.kt
deleted file mode 100644
index 21eeb81..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_4.kt
+++ /dev/null
@@ -1,85 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds2.entity.LedgerRecord
-import cn.flightfeather.supervision.domain.ds2.mapper.LedgerRecordMapper
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import javax.annotation.PostConstruct
-
-@Component
-class ScoreItem_4: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_4
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    @Autowired
-    lateinit var ledgerRecordMapper: LedgerRecordMapper
-
-    override var id: String = "vYEKaBft6nsqDhtD"
-
-    override var name: String="娌圭儫鍑�鍖栬鏂借澶囩淮鎶�"
-
-    /**
-     * 鍦ㄧ嚎鍙拌处璁板綍娌圭儫鍑�鍖栬澶囨湁娓呮礂鍚堝悓鍜屾竻娲楀崟鎹殑榛樿鍚堣锛屼笉鎵e垎
-     * 閫夐」濡備笅锛�
-     *      1.娓呮礂鏁堟灉涓嶄匠鎴栨帓鍙f祿鐑熴�佸埡婵�鎬у紓鍛虫槑鏄�
-     *      2.鏈寜鏈熷強鏃舵竻娲楁垨娓呮礂棰戞涓嶈冻锛堟竻娲楀悎鍚岀害瀹氬拰绠$悊瑕佹眰锛�
-     *      3.鏁呴殰鎴栨崯鍧忔湭鍙婃椂缁翠慨鎴栦笉姝d骇浣跨敤锛堥绻侀棿姝囧紑鍚�/楂樺嘲鏃舵杩愯鏃堕棿涓嶈冻/鎸囩ず鐏紓甯革級鎴栧悗鍘ㄦ补鐑熼噸銆佸埡婵�鍛虫槑鏄�
-     *      4.鏈紑鍚垨闂茬疆锛堜笉閫氱數锛�
-     */
-    override fun otherProblem(size: Int): Int? {
-        var i = 3
-        if (i > size - 1) i = size - 1
-        return when {
-            condition2() -> {
-                i
-            }
-            condition1() -> {
-                i = 1
-                if (i > size - 1) i = size - 1
-                i
-            }
-            else -> {
-                null
-            }
-        }
-    }
-
-    /**
-     * @return false 鍦ㄧ嚎鍙拌处璁板綍娌圭儫鍑�鍖栬澶囨湁娓呮礂鍚堝悓鍜屾竻娲楀崟鎹殑榛樿鍚堣锛屼笉鎵e垎
-     *         true
-     */
-    private fun condition1(): Boolean {
-        //1. 鏌ヨ鏄惁鏈夋竻娲楀悎鍚屽拰娓呮礂璁板綍
-//        val l = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
-//            createCriteria().andIn("lsSubtypeid", listOf(2203, 2204))//璁惧瀹夎鍚堝悓
-//                .andEqualTo("lrYear", info.year)
-////                .andEqualTo("lrMonth", info.month)
-//                .andEqualTo("lrSubmitid", info.tzUserId)
-//        })
-//        return l.size == 0
-        return false
-    }
-
-    /**
-     * @return true 鏈畨瑁呭噣鍖栬缃紝鎸夌収15鍒嗘墸闄わ紝鍙婇�夐」4
-     */
-    private fun condition2(): Boolean {
-        //1. 鏌ヨ鏄惁鎻愪氦璁惧瀹夎鍚堝悓鍙拌处
-//        val l = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
-//            createCriteria().andEqualTo("lsSubtypeid", 2200)//璁惧瀹夎鍚堝悓
-//                .andEqualTo("lrYear", info.year)
-////                .andEqualTo("lrMonth", info.month)
-//                .andEqualTo("lrSubmitid", info.tzUserId)
-//        })
-//        return l.size == 0
-        return false
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_5.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_5.kt
deleted file mode 100644
index c4a0b5f..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_5.kt
+++ /dev/null
@@ -1,94 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.DustDataResult
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
-import cn.flightfeather.supervision.domain.ds1.mapper.DustDataResultMapper
-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
-
-@Component
-class ScoreItem_5: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_5
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "PSQUi9f0f7JK6w9d"
-
-    override var name: String="娌圭儫鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇"
-
-    @Autowired
-    lateinit var dustDataResultMapper: DustDataResultMapper
-
-    /**
-     * 寰愭眹鍖洪楗洃绠″钩鍙拌仈缃戣褰曘�佸湪绾跨巼鍒嗘瀽鏁版嵁鍜岄珮宄扮粡钀ユ椂娈靛皬鏃惰秴鏍囨儏鍐�
-     * 閫夐」濡備笅锛�
-     *      1.鏁版嵁鏃犲紓甯镐笖鏃犺秴鏍囨垨鏄剧ず鍑�鍖栬缃竻娲�
-     *      2.楂樺嘲缁忚惀鏃舵鏁版嵁鍦ㄧ嚎鐜囦綆浜�90%鎴栨樉绀哄噣鍖栬缃晠闅�
-     *      3.褰撴湀楂樺嘲缁忚惀鏃舵鍑虹幇涓夋鍙婁互涓�10鍒嗛挓鍧囧�艰秴鏍囨垨鏄剧ず鍑�鍖栬缃緝鑴�
-     *      4.褰撴湀楂樺嘲缁忚惀鏃舵鏁版嵁鎸佺画寮傚父鎴栧嚭鐜颁笁娆″強浠ヤ笂灏忔椂鏁版嵁瓒呮爣鎴栨棤娌圭儫鍑�鍖栬缃垨鍑�鍖栬缃湭姝e父寮�鍚�
-     */
-    override fun otherProblem(size: Int): Int? {
-        var i = 1
-        when {
-            condition1() -> {
-                if (i > size - 1) i = size - 1
-                return i
-            }
-            condition2() -> {
-                i = 2
-                if (i > size - 1) i = size - 1
-                return i
-            }
-            condition3() -> {
-                i = 3
-                if (i > size - 1) i = size - 1
-                return i
-            }
-            else -> return null
-        }
-    }
-
-    /**
-     * @return true  楂樺嘲缁忚惀鏃舵鏁版嵁鍦ㄧ嚎鐜囦綆浜�90%鎴栨樉绀哄噣鍖栬缃晠闅�
-     */
-    private fun condition1(): Boolean {
-        return false
-    }
-
-    /**
-     * @return true  褰撴湀楂樺嘲缁忚惀鏃舵鍑虹幇涓夋鍙婁互涓�10鍒嗛挓鍧囧�艰秴鏍囨垨鏄剧ず鍑�鍖栬缃緝鑴�
-     */
-    private fun condition2(): Boolean {
-        val r = dustDataResultMapper.selectByExample(Example(DustDataResult::class.java).apply {
-            createCriteria().andGreaterThanOrEqualTo("drTime", info.sTime)
-                .andLessThan("drTime", info.eTime)
-                .andEqualTo("drSceneId", info.sceneId)
-        })
-
-        var result = false
-        r.forEach {
-            if (it == null) return@forEach
-            if (it.drExceedTimes > 0) {
-                result = true
-            }
-        }
-        return result
-    }
-
-    /**
-     * @return true  褰撴湀楂樺嘲缁忚惀鏃舵鏁版嵁鎸佺画寮傚父鎴栧嚭鐜颁笁娆″強浠ヤ笂灏忔椂鏁版嵁瓒呮爣鎴栨棤娌圭儫鍑�鍖栬缃垨鍑�鍖栬缃湭姝e父寮�鍚�
-     */
-    private fun condition3(): Boolean {
-        return false
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_6.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_6.kt
deleted file mode 100644
index d9f6e49..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_6.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import javax.annotation.PostConstruct
-
-@Component
-class ScoreItem_6 : ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_6
-    }
-
-    @Autowired
-    lateinit var scoreItem5: ScoreItem_5
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "JmcRohk4fWO1eOpW"
-
-    override var name: String = "绌鸿皟銆侀鏈哄櫔澹�"
-
-    /**
-     * 鎵ф硶妫�鏌ユ儏鍐碉紝鏃犳鏌ラ粯璁や笉鎵e垎銆�
-     * 閫夐」濡備笅锛�
-     *      1.鍣0鏃犲紓甯告垨闅斿櫔銆侀檷鍣帾鏂藉畬澶�
-     *      2.瀹夎浣嶇疆璺濈浣忔埛杈冭繎锛屾棤闅斿櫔銆侀檷鍣帾鏂斤紝鍣0鎴栨尟鍔ㄦ壈姘�
-     *      3.鏄奸棿>60dB鎴栧櫔澹版槑鏄撅紝鏃犻殧鍣�侀檷鍣帾鏂斤紝澶滈棿姝e父
-     *      4.澶滈棿>50dB鎴栧櫔澹版槑鏄惧鑷存壈姘戯紝涓旀棤闅斿櫔銆侀檷鍣帾鏂�
-     */
-    override fun otherProblem(size: Int): Int? {
-        var i = 3
-        if (i > size - 1) i = size - 1
-        if (condition1()) {
-            return i
-        }
-        return null
-    }
-
-    /**
-     * @return true  鏈夋墽娉曟鏌ユ儏鍐�
-     */
-    private fun condition1(): Boolean {
-        return false
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_7.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_7.kt
deleted file mode 100644
index 18b21fc..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_7.kt
+++ /dev/null
@@ -1,87 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
-import cn.flightfeather.supervision.domain.ds2.entity.LedgerRecord
-import cn.flightfeather.supervision.domain.ds2.entity.LedgerSubType
-import cn.flightfeather.supervision.domain.ds2.mapper.LedgerRecordMapper
-import cn.flightfeather.supervision.domain.ds2.mapper.LedgerSubTypeMapper
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import javax.annotation.PostConstruct
-
-@Component
-class ScoreItem_7: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_7
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    init {
-        exemption = true
-    }
-
-    @Autowired
-    lateinit var ledgerRecordMapper: LedgerRecordMapper
-
-    @Autowired
-    lateinit var ledgerSubTypeMapper: LedgerSubTypeMapper
-
-    override var id: String = "wfzFTlcZ3xMdj5M2"
-
-    override var name: String = "鍙拌处绠$悊"
-
-    /**
-     * 鍦ㄧ嚎鍙拌处璁板綍鐨勬彁浜ょ被鍒畬鏁存�у拰鍙婃椂鎬�
-     * 閫夐」r濡備笅锛�
-     *      1.鍙拌处绫诲埆榻愬叏銆佸畬鏁淬�佸強鏃惰褰曟洿鏂�
-     *      2.鍙拌处灏戦噺缂哄け鎴栨湭鍙婃椂璁板綍鏇存柊
-     *      3.鍙拌处涓ラ噸缂哄け鎴栧叧閿彴璐︽棤鏁�
-     */
-    override fun otherProblem(size: Int): Int? {
-        // TODO: 2021/3/9 鎵惧嚭鐢ㄦ埛绫诲瀷瀵瑰簲鐨勫繀濉彴璐�
-        val ledgerTypeCount = ledgerSubTypeMapper.selectCountByExample(Example(LedgerSubType::class.java).apply {
-            createCriteria().andEqualTo("lScenetype", "1").andEqualTo("lNeedupdate", true)
-        })
-        val rCount = ledgerRecordMapper.selectCountByExample(Example(LedgerRecord::class.java).apply {
-            createCriteria().andEqualTo("lrYear", info.year)
-                .andGreaterThanOrEqualTo("lrSubmitdate", info.sTime)
-                .andLessThanOrEqualTo("lrSubmitdate", info.eTime)
-                .andEqualTo("lrSubmitid", info.tzUserId)
-        })
-        var i = 1
-        if (condition1(ledgerTypeCount, rCount)) {
-            if (i > size - 1) i = size - 1
-            return i
-        } else if (condition2(ledgerTypeCount, rCount)) {
-            i = 2
-            if (i > size - 1) i = size - 1
-            return i
-        }
-        return null
-    }
-
-    /**
-     * @param c1 蹇呭~椤瑰彴璐︾被鍒暟
-     * @param c2 瀹為檯涓婁紶鏁�
-     * @return true  鍙拌处灏戦噺缂哄け鎴栨湭鍙婃椂璁板綍鏇存柊
-     */
-    private fun condition1(c1: Int, c2: Int): Boolean {
-        return c2 > 0 && c2 < c1 * (info.period ?: 0)
-    }
-
-    /**
-     * @param c1 蹇呭~椤瑰彴璐︾被鍒暟
-     * @param c2 瀹為檯涓婁紶鏁�
-     * @return true  鍙拌处涓ラ噸缂哄け鎴栧叧閿彴璐︽棤鏁�
-     */
-    private fun condition2(c1: Int, c2: Int): Boolean {
-        return c2 == 0
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_8.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_8.kt
deleted file mode 100644
index 12cb292..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_8.kt
+++ /dev/null
@@ -1,108 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2
-import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import java.time.LocalDate
-import java.time.ZoneId
-import java.time.format.DateTimeFormatter
-import javax.annotation.PostConstruct
-
-@Component
-class ScoreItem_8: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_8
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    // 璞佸厤闂id鍒楄〃锛岃眮鍏嶄笉鍋氳瘎浠风殑闂锛屽叾瀵瑰簲鐨勬暣鏀逛篃搴旇涓嶅啀璁$畻
-    private val exemptionItemIdList = mutableListOf<String?>()
-
-    override var id: String = "yAAn3zm6e2PenHeJ"
-
-    override var name: String="鏁存敼鎺柦鍙婃晥鏋�"
-
-    /**
-     * 娓呯┖闇�瑕佽眮鍏嶇殑闂
-     */
-    fun clear() {
-        exemptionItemIdList.clear()
-    }
-
-    /**
-     * 璁剧疆闇�瑕佽眮鍏嶇殑闂
-     */
-    fun setExemptionProblem(
-        list: List<String>,
-        eList: MutableList<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>
-    ) {
-        eList.forEach {
-            if (list.contains(it.first.guid)) {
-                it.second.forEach {e ->
-                    exemptionItemIdList.addAll(e.problemlist?.split(",") ?: emptyList())
-                }
-            }
-        }
-    }
-
-    fun setExemptionProblem(list: List<Evaluationsubrule2>) {
-        list.forEach {
-            exemptionItemIdList.addAll(it.problemlist?.split(",") ?: emptyList())
-        }
-    }
-
-    /**
-     * 鎵ф硶妫�鏌ユ眹鎬绘儏鍐�
-     * 閫夐」濡備笅锛�
-     *      1.鍏ㄩ儴鎸夋椂鏁存敼骞跺強鏃舵彁浜ゆ潗鏂�
-     *      2.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
-     *      3.闂鏃犳暣鏀�
-     */
-    override fun otherProblem(size: Int): Int? {
-        val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
-            createCriteria().andEqualTo("sguid", info.sceneId)
-                .andGreaterThanOrEqualTo("time", info.sTime)
-                .andLessThan("time", info.eTime).apply {
-                    if (exemptionItemIdList.isNotEmpty()) {
-                        // FIXME: 2022/1/27 姝ゅ鏍规嵁鐗规畩瑕佹眰锛屽皢銆愬彴璐︿弗閲嶇己澶辨垨鍏抽敭鍙拌处鏃犳晥銆戝拰銆愬彴璐﹀皯閲忕己澶辨垨鏈強鏃惰褰曟洿鏂般�戜袱涓棶棰樺墧闄わ紝涓嶈绠楀湪鏁存敼鐜囧唴
-                        andNotIn("ptguid", exemptionItemIdList)
-                    }
-                }
-        })
-        var i = 0
-
-        val total = p.size
-        var changed = 0
-        p.forEach {
-            if (it.ischanged == true) {
-                changed++
-            }
-        }
-        return when {
-            changed == 0 && total > 0 -> 2
-            changed < total -> 1
-            else -> 0
-        }
-    }
-
-    /**
-     * @return true  闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
-     */
-    private fun condition1(): Boolean {
-        return false
-    }
-
-    /**
-     * @return true  闂鏃犳暣鏀�
-     */
-    private fun condition2(): Boolean {
-        return false
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_9.kt b/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_9.kt
deleted file mode 100644
index b04fc11..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/item/ScoreItem_9.kt
+++ /dev/null
@@ -1,85 +0,0 @@
-package cn.flightfeather.supervision.business.fume.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds2.entity.Complaint
-import cn.flightfeather.supervision.domain.ds2.mapper.ComplaintMapper
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import java.time.LocalDate
-import java.time.ZoneId
-import java.time.format.DateTimeFormatter
-import javax.annotation.PostConstruct
-
-@Component
-class ScoreItem_9: ScoreItem() {
-    companion object {
-        private lateinit var instance: ScoreItem_9
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    @Autowired
-    lateinit var complaintMapper: ComplaintMapper
-
-    override var id: String = "mTre4cqan43BOW82"
-
-    override var name: String="淇¤鎶曡瘔"
-
-    /**
-     * 瀛e害鍐呬俊璁胯褰曡鏍煎寲瀵煎叆
-     * 閫夐」濡備笅锛�
-     *      1.鏃犱俊璁裤�佹棤鎶曡瘔銆佺洃绠¢厤鍚堢Н鏋�
-     *      2.鏈搴﹀彂鐢熷崟娆″尯绾т俊璁挎姇璇�
-     *      3.鏈搴﹀彂鐢熷競绾т俊璁挎姇璇夋垨澶氭鍖虹骇淇¤銆佹姇璇夋垨鐩戠涓嶉厤鍚�
-     */
-    override fun otherProblem(size: Int): Int? {
-        val complaints = complaintMapper.selectByExample(Example(Complaint::class.java).apply {
-            createCriteria().andEqualTo("cpSceneid", info.tzUserId)
-                .andGreaterThanOrEqualTo("cpTime", info.sTime)
-                .andLessThan("cpTime", info.eTime)
-        })
-
-        var i = 2
-        if (condition2(complaints)) {
-            if (i > size - 1) i = size - 1
-            return i
-        } else if (condition1(complaints)) {
-            i = 1
-            if (i > size - 1) i = size - 1
-            return i
-        }
-        return null
-    }
-
-    /**
-     * @return true  鏈搴﹀彂鐢熷崟娆″尯绾т俊璁挎姇璇�
-     */
-    private fun condition1(c: List<Complaint>): Boolean {
-        c.forEach {
-            if (it.cpExtension1 == "1") {
-                return true
-            }
-        }
-        return false
-    }
-
-    /**
-     * @return true  鏈搴﹀彂鐢熷競绾т俊璁挎姇璇夋垨澶氭鍖虹骇淇¤銆佹姇璇夋垨鐩戠涓嶉厤鍚�
-     */
-    private fun condition2(c: List<Complaint>): Boolean {
-        var count = 0
-        c.forEach {
-            if (it.cpExtension1 == "0") {
-                //鍙戠敓甯傜骇淇¤鎶曡瘔
-                return true
-            } else {
-                count++
-            }
-        }
-        return count > 1
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/fume/package-info.java b/src/main/kotlin/cn/flightfeather/supervision/business/fume/package-info.java
deleted file mode 100644
index 431e4ff..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/fume/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Date 2022/1/19 16:07
- * Created by feiyu
- * 椁愰ギ娌圭儫鑷姩璇勫垎
- */
-package cn.flightfeather.supervision.business.fume;
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/DataSource.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/DataSource.kt
index 350740f..65594e6 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/DataSource.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/DataSource.kt
@@ -11,13 +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.Duration
 import java.time.LocalDateTime
 import java.time.ZoneId
-import javax.annotation.PostConstruct
 
 /**
  * 鎶ュ憡鎵�闇�婧愭暟鎹�
@@ -73,7 +69,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.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)}"
     }
 
     /**
@@ -164,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
@@ -307,7 +303,7 @@
         val ledgerCount: Int
             get() {
                 if (_ledgerCount == -1) {
-                    val tzSceneType = Constant.ScenseType.typeMap(scene?.typeid)
+                    val tzSceneType = Constant.SceneType.typeMap(scene?.typeid)
                     _ledgerCount = dbMapper.ledgerSubTypeMapper.selectCountByExample(Example(LedgerSubType::class.java).apply {
                         createCriteria().andEqualTo("lScenetype", tzSceneType).andEqualTo("lNeedupdate", true)
                     })
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColStatus.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColStatus.kt
index e84c977..05225f1 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColStatus.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColStatus.kt
@@ -21,19 +21,19 @@
         var status: String? = ""
         var stage: String? = ""
         when (rowData.scene?.typeid.toString()) {
-            Constant.ScenseType.TYPE1.value -> {
+            Constant.SceneType.TYPE1.value -> {
                 (rowData.baseScene as SceneConstructionSite?)?.apply {
                     status = csStatus
                     stage = siExtension1
                 }
             }
-            Constant.ScenseType.TYPE2.value -> {
+            Constant.SceneType.TYPE2.value -> {
                 status = (rowData.baseScene as SceneWharf?)?.getwStatus()
             }
-            Constant.ScenseType.TYPE3.value -> {
+            Constant.SceneType.TYPE3.value -> {
                 status = (rowData.baseScene as SceneMixingPlant?)?.mpStatus
             }
-            Constant.ScenseType.TYPE14.value -> {
+            Constant.SceneType.TYPE14.value -> {
                 status = (rowData.baseScene as SceneStorageYard?)?.syStatus
             }
             else -> ""
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColTotalGrade.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColTotalGrade.kt
index 9dc944a..f39c6d4 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColTotalGrade.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/cols/ColTotalGrade.kt
@@ -27,20 +27,18 @@
                 //鎬诲垎鍜岀幆淇$爜
                 rowData.evaluation.let { e ->
                     val s = e?.resultscorebef?.toIntOrNull() ?: -1
-                    val code = when (s) {
-                        in 0..59 -> ExcelUtil.MyCell("绾㈢爜", fontColor = HSSFColor.HSSFColorPredefined.RED.index)
-                        in 60..89 -> ExcelUtil.MyCell("榛勭爜", fontColor = HSSFColor.HSSFColorPredefined.GOLD.index)
-                        in 90..100 -> ExcelUtil.MyCell("缁跨爜", fontColor = HSSFColor.HSSFColorPredefined.BRIGHT_GREEN.index)
-                        -1 -> ExcelUtil.MyCell("", fontColor = HSSFColor.HSSFColorPredefined.BLACK.index)
-                        else -> ExcelUtil.MyCell("瓒呭嚭鑼冨洿锛�${s}", fontColor = HSSFColor.HSSFColorPredefined.BLACK.index)
+                    val code = when {
+                        s in 0..59 -> ExcelUtil.MyCell("绾㈢爜", fontColor = HSSFColor.HSSFColorPredefined.RED.index)
+                        s in 60..89 -> ExcelUtil.MyCell("榛勭爜", fontColor = HSSFColor.HSSFColorPredefined.GOLD.index)
+                        s >= 90 -> ExcelUtil.MyCell("缁跨爜", fontColor = HSSFColor.HSSFColorPredefined.BRIGHT_GREEN.index)
+                        else -> ExcelUtil.MyCell("", fontColor = HSSFColor.HSSFColorPredefined.BLACK.index)
                     }
-                    val normalization = when (s) {
-                        in 0..39 -> ExcelUtil.MyCell("涓ラ噸涓嶈鑼�", fontColor = HSSFColor.HSSFColorPredefined.RED.index)
-                        in 40..89 -> ExcelUtil.MyCell("涓嶈鑼�", fontColor = HSSFColor.HSSFColorPredefined.ROSE.index)
-                        in 90..99 -> ExcelUtil.MyCell("鍩烘湰瑙勮寖", fontColor = HSSFColor.HSSFColorPredefined.GOLD.index)
-                        100 -> ExcelUtil.MyCell("瑙勮寖", fontColor = HSSFColor.HSSFColorPredefined.BRIGHT_GREEN.index)
-                        -1 -> ExcelUtil.MyCell("", fontColor = HSSFColor.HSSFColorPredefined.BLACK.index)
-                        else -> ExcelUtil.MyCell("瓒呭嚭鑼冨洿锛�${s}", fontColor = HSSFColor.HSSFColorPredefined.BLACK.index)
+                    val normalization = when {
+                        s in 0..39 -> ExcelUtil.MyCell("涓ラ噸涓嶈鑼�", fontColor = HSSFColor.HSSFColorPredefined.RED.index)
+                        s in 40..89 -> ExcelUtil.MyCell("涓嶈鑼�", fontColor = HSSFColor.HSSFColorPredefined.ROSE.index)
+                        s in 90..99 -> ExcelUtil.MyCell("鍩烘湰瑙勮寖", fontColor = HSSFColor.HSSFColorPredefined.GOLD.index)
+                        s >= 100 -> ExcelUtil.MyCell("瑙勮寖", fontColor = HSSFColor.HSSFColorPredefined.BRIGHT_GREEN.index)
+                        else -> ExcelUtil.MyCell("", fontColor = HSSFColor.HSSFColorPredefined.BLACK.index)
                     }
                     add(code)
                     add(normalization)
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt
index 0899468..fdec9ce 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt
@@ -12,7 +12,6 @@
 import cn.flightfeather.supervision.domain.ds1.entity.SceneMixingPlant
 import cn.flightfeather.supervision.domain.ds1.entity.SceneStorageYard
 import cn.flightfeather.supervision.domain.ds1.entity.SceneWharf
-import kotlin.math.round
 
 /**
  * 鍒嗚闀囬棶棰樻暣鏀瑰垎鏋愭眹鎬昏〃
@@ -47,16 +46,16 @@
             districtMap[k]?.apply {
                 sceneCount++
                 val status = when (dataSource.config.sceneType.toString()) {
-                    Constant.ScenseType.TYPE1.value -> {
+                    Constant.SceneType.TYPE1.value -> {
                         (rowData.baseScene as SceneConstructionSite?)?.csStatus
                     }
-                    Constant.ScenseType.TYPE2.value -> {
+                    Constant.SceneType.TYPE2.value -> {
                         (rowData.baseScene as SceneWharf?)?.getwStatus()
                     }
-                    Constant.ScenseType.TYPE3.value -> {
+                    Constant.SceneType.TYPE3.value -> {
                         (rowData.baseScene as SceneMixingPlant?)?.mpStatus
                     }
-                    Constant.ScenseType.TYPE14.value -> {
+                    Constant.SceneType.TYPE14.value -> {
                         (rowData.baseScene as SceneStorageYard?)?.syStatus
                     }
                     else -> ""
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt
index a0982c3..1de9b3d 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeRankMainSummary.kt
@@ -3,7 +3,6 @@
 import cn.flightfeather.supervision.business.report.DataSource
 import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.common.utils.ExcelUtil
-import kotlin.math.round
 
 class ProTypeRankMainSummary(dataSource: DataSource) : ProTypeRankSummary(dataSource) {
     override val templateName: String = "鏈堝害涓昏鎴栧吀鍨嬮棶棰樺垎鏋愯〃"
@@ -11,7 +10,7 @@
     override fun formatTable(summarys: MutableList<Summary>) {
         //鎺掑悕闈犲墠鐨刴ax涓棶棰樿璁ゅ畾涓轰富瑕佹垨鍏稿瀷闂
         val max = when (dataSource.config.sceneType.toString()) {
-            Constant.ScenseType.TYPE1.value -> 5
+            Constant.SceneType.TYPE1.value -> 5
             else -> 4
         }
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt
index 0c185c8..2a12726 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProTypeStatusSummary.kt
@@ -6,7 +6,6 @@
 import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.common.utils.ExcelUtil
 import cn.flightfeather.supervision.domain.ds1.entity.SceneConstructionSite
-import kotlin.math.round
 
 class ProTypeStatusSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
     override val cols: List<BaseCols> = listOf()
@@ -14,7 +13,7 @@
 
     @Throws(Exception::class)
     override fun execute() {
-        if (dataSource.config.sceneType.toString() != Constant.ScenseType.TYPE1.value) {
+        if (dataSource.config.sceneType.toString() != Constant.SceneType.TYPE1.value) {
 //            throw IllegalStateException("${templateName}鍙兘閽堝宸ュ湴杩涜鍒嗘瀽锛屽綋鍓嶄紶鍏ュ満鏅被鍨嬬紪鍙蜂负${dataSource.config.sceneType}")
             println("sadas")
         }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/JinAnScore.kt b/src/main/kotlin/cn/flightfeather/supervision/business/storage/JinAnScore.kt
deleted file mode 100644
index a5d82d9..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/JinAnScore.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-package cn.flightfeather.supervision.business.storage
-
-import cn.flightfeather.supervision.business.Info
-import cn.flightfeather.supervision.domain.ds1.entity.Evaluation
-import cn.flightfeather.supervision.domain.ds1.entity.Score
-import cn.flightfeather.supervision.domain.ds1.mapper.ScoreMapper
-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
-
-/**
- * 涓婃捣甯傞潤瀹夊尯鍗曠嫭鐨�50鍒嗗埗璇勫垎缁撴灉锛�
- * 鏍规嵁[StAutoScore]鑷姩璇勫垎缁撴灉杩涜杞崲寰楀嚭
- */
-@Component
-class JinAnScore {
-
-    @Autowired
-    lateinit var scoreMapper: ScoreMapper
-
-    fun toDb(e: Evaluation, info: Info) {
-        val time = LocalDateTime.ofInstant(e.evaluatetime?.toInstant(), ZoneId.systemDefault())
-        val scoreVo = Score().apply {
-            sceneId = e.sguid
-            sceneName = e.scensename
-            year = time.year
-            month = time.monthValue
-            districtCode = e.districtcode
-            districtName = e.districtname
-            score = transform(e.resultscorebef?.toIntOrNull() ?: 0)
-            completion = !info.online
-        }
-
-        val res = scoreMapper.selectByExample(Example(Score::class.java).apply {
-            createCriteria().andEqualTo("sceneId", e.sguid)
-                .andEqualTo("year", time.year)
-                .andEqualTo("month", time.monthValue)
-        })
-        if (res.isNotEmpty()) {
-            scoreVo.id = res[0].id
-            scoreMapper.updateByPrimaryKeySelective(scoreVo)
-        } else {
-            scoreMapper.insert(scoreVo)
-        }
-    }
-
-    /**
-     * 鍒嗘暟杞崲
-     */
-    private fun transform(oldS: Int): Int {
-        return when {
-            // 鍩烘湰瑙勮寖
-            oldS >= 90 -> 50
-            // 涓嶈鑼�
-            oldS >= 50 -> 30
-            // 涓ラ噸涓嶈鑼�
-            else -> 10
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/StAutoScore.kt b/src/main/kotlin/cn/flightfeather/supervision/business/storage/StAutoScore.kt
deleted file mode 100644
index 09c69a3..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/StAutoScore.kt
+++ /dev/null
@@ -1,531 +0,0 @@
-package cn.flightfeather.supervision.business.storage
-
-import cn.flightfeather.supervision.business.Info
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.business.storage.item.*
-import cn.flightfeather.supervision.common.utils.Constant
-import cn.flightfeather.supervision.common.utils.DateUtil
-import cn.flightfeather.supervision.common.utils.ExcelUtil
-import cn.flightfeather.supervision.common.utils.UUIDGenerator
-import cn.flightfeather.supervision.domain.ds1.entity.*
-import cn.flightfeather.supervision.domain.ds1.mapper.*
-import cn.flightfeather.supervision.domain.ds2.entity.UserMap
-import cn.flightfeather.supervision.domain.ds2.mapper.UserMapMapper
-import org.apache.poi.hssf.usermodel.HSSFWorkbook
-import org.apache.poi.hssf.util.HSSFColor
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import java.io.File
-import java.io.FileOutputStream
-import java.util.*
-import javax.annotation.PostConstruct
-import kotlin.math.abs
-
-/**
- * Date 2022/1/21 13:44
- * Created by feiyu
- * 宸ュ湴鑷姩璇勫垎
- */
-@Component
-
-class StAutoScore(
-    csScoreItem_1: CsScoreItem_1,
-    csScoreItem_2: CsScoreItem_2,
-    mpScoreItem_1: MpScoreItem_1,
-    mpScoreItem_2: MpScoreItem_2,
-    stScoreItem_1: StScoreItem_1,
-    whScoreItem_1: WhScoreItem_1,
-    whScoreItem_2: WhScoreItem_2,
-    val jinAnScore: JinAnScore,
-    var sceneType: Constant.ScenseType = Constant.ScenseType.TYPE1, )
-{
-    companion object {
-        private lateinit var instance: StAutoScore
-    }
-
-    @Autowired
-    lateinit var userinfoMapper: UserinfoMapper
-
-    @Autowired
-    lateinit var userMapMapper: UserMapMapper
-
-    @Autowired
-    lateinit var scenseMapper: ScenseMapper
-
-    @Autowired
-    lateinit var evaluationruleMapper: EvaluationruleMapper
-
-    @Autowired
-    lateinit var evaluationsubruleMapper: EvaluationsubruleMapper2
-
-    @Autowired
-    lateinit var evaluationMapper: EvaluationMapper
-
-    @Autowired
-    lateinit var itemevaluationMapper: ItemevaluationMapper
-
-    @Autowired
-    lateinit var problemlistMapper: ProblemlistMapper
-
-    @Autowired
-    lateinit var monitorobjectversionMapper: MonitorobjectversionMapper
-
-    @Autowired
-    lateinit var taskMapper: TaskMapper
-
-    @Autowired
-    lateinit var inspectionMapper: InspectionMapper
-
-    @Autowired
-    lateinit var subtaskMapper: SubtaskMapper
-
-    //鍐冲畾鏄惁鍐檋3
-    private val hasHead3 = true
-
-    private var totalScore = 100//婊″垎
-
-    private val itemList = mutableListOf<ScoreItem>()
-
-    private val baseRules = mutableListOf<Evaluationrule>()
-
-    private val rules = mutableListOf<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>()
-
-    private val topItems = mutableListOf<Evaluationsubrule2>()
-
-    // excel鏂囨。
-    private var workbook = HSSFWorkbook()
-    // 鏂囨。琛屾暟鎹�
-    private val rows = mutableListOf<Array<Any>>()
-
-    init {
-        itemList.apply {
-            add(csScoreItem_1)
-            add(csScoreItem_2)
-            add(mpScoreItem_1)
-            add(mpScoreItem_2)
-            add(stScoreItem_1)
-            add(whScoreItem_1)
-            add(whScoreItem_2)
-        }
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-
-
-    /**
-     * 鎬讳换鍔℃墦鍒�
-     * 鏍规嵁鎬讳换鍔★紝瀵逛笅灞炴墍鏈夌殑宸℃煡浠诲姟鎸ㄤ釜鎵撳垎
-     * @param topTaskId 鎬讳换鍔d
-     */
-    fun topTaskGrade(topTaskId:String) {
-        rows.clear()
-        getScoreItem()
-        subtaskMapper.selectByTopTask2(topTaskId, sceneType.value.toInt()).forEach {
-            sceneGradeP(it)
-//            sceneGradeToFile(it)
-        }
-//        toFile()
-    }
-
-    /**
-     * 鍗曞満鏅墦鍒�
-     * @param subtask 宸℃煡浠诲姟
-     */
-    fun sceneGrade(subtask: Subtask) {
-        // 鑾峰彇璇勫垎瑙勫垯
-        getScoreItem()
-
-        sceneGradeP(subtask)
-    }
-
-    private fun sceneGradeP(subtask: Subtask) {
-        val info = itemGrade(subtask)
-        val result = totalGrade(info, subtask) ?: return
-        toDb(info, result)
-//        jinAnScore.toDb(result.first, info)
-//        addToFile(rows, info, result.first)
-//        toFile()
-    }
-
-    fun sceneGradeToFile(subtask: Subtask) {
-        // 鑾峰彇璇勫垎瑙勫垯
-        getScoreItem()
-
-        val info = itemGrade(subtask)
-        val result = totalGrade(info, subtask) ?: return
-        addToFile(rows, info, result.first)
-    }
-
-    fun grade(subtask: Subtask) {
-
-    }
-
-    /**
-     * 鏉$洰鎵撳垎
-     */
-    private fun itemGrade(subtask: Subtask): Info {
-        // 瑙勫垯鏉$洰寰楀垎鍒濆鍖�
-        topItems.forEach { s -> s.extension1 = null }
-        rules.forEach { p ->
-            p.first.extension1 = null
-            p.second.forEach { e -> e.extension1 = null }
-        }
-
-
-        // 鑾峰彇椋炵窘鐩戠绯荤粺鐢ㄦ埛淇℃伅
-        val userInfo = userinfoMapper.selectByExample(Example(Userinfo::class.java).apply {
-            createCriteria().andEqualTo("dGuid", subtask.scenseid)
-        })?.takeIf { l -> l.isNotEmpty() }?.get(0)
-        // 鑾峰彇椋炵窘鐜绯荤粺鐢ㄦ埛淇℃伅
-        val tzUserId = userMapMapper.selectByExample(Example(UserMap::class.java).apply {
-            createCriteria().andEqualTo("svUserId", userInfo?.guid)
-        })?.takeIf { m -> m.isNotEmpty() }?.get(0)?.tzUserId
-        val scene = scenseMapper.selectByPrimaryKey(subtask.scenseid)
-
-        val info =
-            Info(userInfo?.guid,
-                tzUserId,
-                subtask.scenseid,
-                subtask.scensename,
-                sceneType,
-                subTask = subtask,
-                sceneIndex = scene.index,
-                online = scene.extension1 != "0"
-            )
-
-        /** 1. 鏍规嵁璇勫垎瑙勫垯瀵瑰簲鐨勯棶棰樿嚜鍔ㄥ垽鏂槸鍚︽墸鍒�***************************************************************/
-        // 鑾峰彇璇ユ宸℃煡浠诲姟涓嬬殑鎵�鏈夐棶棰�
-        val pList = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
-            createCriteria().andEqualTo("stguid", info.subTask?.stguid)
-        }).map { it.ptguid }
-        // 璁$畻姣忔潯璇勫垎瑙勫垯鐨勫緱鍒�
-        rules.forEach { r ->
-            // 璇勫垎鏉$洰
-            val rule = r.first
-            // 鍏蜂綋璇勫垎閫夐」
-            val subRule = r.second
-            subRule.forEach { sr ->
-                // 瀛樺湪澶氫釜璇勫垎椤瑰拰鍚屼竴涓棶棰樺叧鑱旓紝鍥犳蹇呴』鍏ㄩ儴璇勫垎椤归兘鍒ゅ畾涓�閬�
-                sr.problemlist?.split(",")?.forEach { pId ->
-                    if (pList.contains(pId)) {
-                        sr.extension1 = (0 - (sr.maxscore ?: 0)).toString()
-                    }
-                }
-            }
-            var total: Int? = null
-            subRule.forEach { sr ->
-                if (!sr.extension1.isNullOrBlank()) {
-                    total = (total ?: 0) + sr.extension1!!.toInt()
-                }
-            }
-            if (total == null) {
-                rule.extension1 = "0"
-            } else {
-                val s = if (abs(total!!) > rule.maxscore!!) {
-                    0 - rule.maxscore!!
-                } else {
-                    total
-                }
-                rule.extension1 = s.toString()
-            }
-        }
-        /** 2.閮ㄥ垎鏈夌壒娈婅瘎鍒嗛�昏緫鐨勮鍒欒繘琛岃绠�*************************************************************************/
-        itemList.forEach { item -> item.execute2(info, rules) }
-
-        /** 3. 琛ュ叏鍚勪笂绾ц瘎鍒嗛」鐨勮鍒�*************************************************************************/
-        this.rules.forEach { r ->
-            val fatherId = r.first.fatherid
-            for (t in topItems) {
-                if (t.guid == fatherId) {
-                    var s = t.extension1?.toIntOrNull() ?: 0
-                    s += r.first.extension1?.toIntOrNull() ?: 0
-                    // 闄愬埗鏈�楂樻墸鍒�
-                    if (abs(s) > (t.maxscore ?: 0)) {
-                        s = 0 - (t.maxscore ?: 0)
-                    }
-                    t.extension1 = s.toString()
-                    break
-                }
-            }
-        }
-        return info
-    }
-
-    /**
-     * 璁$畻鎬诲垎
-     */
-    private fun totalGrade(info: Info, subtask: Subtask): Pair<Evaluation, List<Itemevaluation>>? {
-        /** 4. 璁$畻鎬诲垎*************************************************************************/
-        val scene = scenseMapper.selectByPrimaryKey(info.subTask?.scenseid) ?: return null
-        val inspection = inspectionMapper.selectByExample(Example(Inspection::class.java).apply {
-            createCriteria().andEqualTo("stguid", info.subTask?.stguid)
-        })?.takeIf { it.isNotEmpty() }?.let { it[0] }
-        var total = 0//鎬绘墸闄ょ殑鍒嗘暟
-        topItems.forEach top@{ top ->
-            total += top.extension1?.toIntOrNull() ?: 0
-        }
-        val evaluation = Evaluation()
-        baseRules.forEach {
-            evaluation.apply {
-                guid = UUIDGenerator.generate16ShortUUID()
-                iguid = inspection?.guid
-                stguid = info.subTask?.stguid
-                sguid = info.subTask?.scenseid
-                scensetypeid = scene.typeid
-                scensetype = scene.type
-                subscensetypeid = scene.scensesubtypeid
-                subscensetype = scene.scensesubtype
-                ertype = it.ruletype?.toByte()
-                provincecode = scene.provincecode
-                provincename = scene.provincename
-                citycode = scene.citycode
-                cityname = scene.cityname
-                districtcode = scene.districtcode
-                districtname = scene.districtname
-                towncode = scene.towncode
-                townname = scene.townname
-                scensename = scene.name
-                scenseaddress = scene.location
-                evaluatetime = subtask.planstarttime
-                evaluatorguid = "admin"
-                evaluatorusername = "admin"
-                evaluatorrealname = "admin"
-                resultscorebef = (totalScore - abs(total)).toString()
-                createdate = subtask.planstarttime
-                updatedate = Date()
-            }
-        }
-        //瀛愰」鍏蜂綋寰楀垎
-        val itemevaluationList = mutableListOf<Itemevaluation>()
-        topItems.forEach { subRule ->
-            val item = newItemEvaluation(info, subRule, inspection)
-            itemevaluationList.add(item)
-        }
-        rules.forEach { p ->
-            if (p.first.ertype != 2) {
-                val item = newItemEvaluation(info, p.first, inspection)
-                itemevaluationList.add(item)
-            }
-            p.second.forEach { r ->
-                val item1 = newItemEvaluation(info, r, inspection)
-                itemevaluationList.add(item1)
-            }
-        }
-        return Pair(evaluation, itemevaluationList)
-    }
-
-    /**
-     * 灏嗚瘎鍒嗚褰曡緭鍑鸿嚦鏁版嵁搴�
-     */
-    private fun toDb(info: Info, p: Pair<Evaluation, List<Itemevaluation>>) {
-        //鍘婚櫎宸叉湁璁板綍
-        evaluationMapper.deleteByExample(Example(Evaluation::class.java).apply {
-            createCriteria().andEqualTo("stguid", info.subTask?.stguid)
-        })
-        itemevaluationMapper.deleteByExample(Example(Itemevaluation::class.java).apply {
-            createCriteria().andEqualTo("stguid", info.subTask?.stguid)
-        })
-
-        //鍐欏叆鏁版嵁搴�
-        evaluationMapper.insert(p.first)
-        p.second.forEach { il -> itemevaluationMapper.insert(il) }
-    }
-
-    /**
-     * 杞崲涓�鏉¤瘎鍒嗚嚦excel涓殑涓�琛�
-     */
-    private fun addToFile(contents: MutableList<Array<Any>>, info: Info, evaluations: Evaluation) {
-        val cList = mutableListOf<Any>()
-        // FIXME: 2021/4/28 鐢ㄦ埛鍚嶆槸鍚︽坊鍔犺处鍙�
-//        cList.add("${info.userName}\t${info.userId}")
-        cList.add(info.sceneIndex ?: -99)
-        cList.add("")
-        cList.add("${info.sceneName}")
-        //姣忎竴椤瑰叿浣撳緱鍒�
-        topItems.forEach {
-            for (r in rules) {
-                if (r.first.fatherid == it.guid || r.first.guid == it.guid) {
-                    // FIXME: 2021/4/25 鍐冲畾鏄惁鍐檋3
-                    if (hasHead3) {
-                        r.second.forEach { s ->
-                            cList.add(s.extension1?.toInt() ?: "")
-                        }
-                    } else {
-                        cList.add(r.first.extension1?.toInt() ?: "")
-                    }
-                }
-            }
-        }
-        //鎬诲垎鍜岀幆淇$爜
-        evaluations.let {
-            cList.add(it.resultscorebef?.toDoubleOrNull() ?: .0)
-            val code = when (it.resultscorebef?.toIntOrNull() ?: 0) {
-                in 0..59 -> ExcelUtil.MyCell("涓嶈鑼�", fontColor = HSSFColor.HSSFColorPredefined.RED.index)
-                in 60..89 -> ExcelUtil.MyCell("鍩烘湰瑙勮寖", fontColor = HSSFColor.HSSFColorPredefined.GOLD.index)
-                in 90..100 -> ExcelUtil.MyCell("瑙勮寖", fontColor = HSSFColor.HSSFColorPredefined.BRIGHT_GREEN.index)
-                else -> ExcelUtil.MyCell("瓒呭嚭鑼冨洿锛�${it.resultscoreaft}", fontColor = HSSFColor.HSSFColorPredefined.BLACK.index)
-            }
-            cList.add(code)
-        }
-        contents.add(cList.toTypedArray())
-    }
-
-    /**
-     * 灏嗚瘎鍒嗚褰曡緭鍑轰负excel
-     */
-    private fun toFile() {
-        val contents = mutableListOf<Array<Any>>()
-
-        val h1 = mutableListOf<ExcelUtil.MyCell>()
-        h1.add(ExcelUtil.MyCell("琛ㄥ崟缂栧彿", if (hasHead3) 3 else 2))
-        h1.add(ExcelUtil.MyCell("鍞竴搴忓彿", if (hasHead3) 3 else 2))
-        h1.add(ExcelUtil.MyCell("鍦烘櫙鍚嶇О", if (hasHead3) 3 else 2))
-        val h2 = mutableListOf<ExcelUtil.MyCell>()
-        h2.add(ExcelUtil.MyCell(""))
-        h2.add(ExcelUtil.MyCell(""))
-        h2.add(ExcelUtil.MyCell(""))
-        val h3 = mutableListOf<String>()
-        h3.add("")
-        h3.add("")
-        h3.add("")
-        topItems.forEach {
-            h1.add(ExcelUtil.MyCell(it.itemname ?: "", 1, 0))
-            for (r in rules) {
-                if (r.first.fatherid == it.guid || r.first.guid == it.guid) {
-                    h2.add(ExcelUtil.MyCell(r.first.itemname ?: "", 1, 0))
-                    // FIXME: 2021/4/25 鍐冲畾鏄惁鍐檋3
-                    if (hasHead3) {
-                        r.second.forEach { s ->
-                            h3.add(s.itemname ?: "")
-                            h2.last().colSpan++
-                            h1.last().colSpan++
-                        }
-                    } else {
-                        h2.last().colSpan++
-                        h1.last().colSpan++
-                    }
-                }
-            }
-        }
-        // 鍐冲畾鏄惁鍐檋3
-        if (hasHead3) {
-            h1.add(ExcelUtil.MyCell("鎬诲垎", 3, 1))
-            h1.add(ExcelUtil.MyCell("闃叉不瑙勮寖鎬�", 3, 1))
-        } else {
-            h1.add(ExcelUtil.MyCell("鎬诲垎", 2, 1))
-            h1.add(ExcelUtil.MyCell("闃叉不瑙勮寖鎬�", 2, 1))
-        }
-
-        contents.add(h1.toTypedArray())
-        contents.add(h2.toTypedArray())
-        // 鍐冲畾鏄惁鍐檋3
-        if (hasHead3) {
-            contents.add(h3.toTypedArray())
-        }
-
-        rows.sortBy { it[0] as Int }
-        contents.addAll(rows)
-
-        // 鍐欏叆鏂囨。
-        val fileName = "${sceneType.text}鑷姩璇勫垎-${DateUtil().DateToString(Date(), "yyyy-MM-ddhhmmss")}.xls"
-        val filePath = "C:\\work\\宸ヤ綔\\绗笁鏂圭洃绠\鑷姩璇勫垎\\${sceneType.text}\\$fileName"
-        val file = File(filePath)
-        if (!file.parentFile.exists()) {
-            file.parentFile.mkdirs()
-        }
-        val out = FileOutputStream(File(filePath))
-        ExcelUtil.write(emptyList(), contents, workbook)
-        workbook.write(out)
-        workbook.close()
-        out.flush()
-        out.close()
-    }
-
-    /**
-     * 鑾峰彇璇勫垎瑙勫垯
-     */
-    private fun getScoreItem() {
-        this.rules.clear()
-        baseRules.clear()
-        topItems.clear()
-
-        val rule = evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
-            createCriteria()
-                .andEqualTo("tasktypeid", 99)
-                .andEqualTo("scensetypeid", sceneType.value.toByte())
-        })
-        if (rule.isNotEmpty()) {
-            baseRules.addAll(rule)
-
-            val ruleId = rule[0].guid
-            val rules = evaluationsubruleMapper.selectByExample(Example(Evaluationsubrule2::class.java).apply {
-                createCriteria().andEqualTo("erguid", ruleId)
-            })
-            rules.forEach {
-                if (it.ertype == 2) {
-                    topItems.add(it)
-                }
-            }
-            topItems.sortBy { it.displayid }
-
-            var t = 0
-            topItems.forEach {
-                t += it.maxscore ?: 0
-                val tempRules = mutableListOf<Evaluationsubrule2>()
-                for (i in rules) {
-                    if (i.fatherid == it.guid && i.ertype == 3) {
-                        tempRules.add(i)
-                    }
-                }
-                //璇勫垎澶ч」濡傛灉娌℃湁鎵惧埌璇勫垎灏忛」锛屽垯璇存槑鍏剁洿鎺ュ搴旀渶灏忚瘎鍒嗛」锛屽叾鏈韩鍙樻垚璇勫垎椤�
-                if (tempRules.isEmpty()) {
-                    tempRules.add(it)
-                }
-                tempRules.sortBy { t-> t.displayid }
-                tempRules.forEach {temp ->
-                    val tempSubRules = mutableListOf<Evaluationsubrule2>()
-                    for (i in rules) {
-                        if (i.fatherid == temp.guid && i.ertype == 4) {
-                            tempSubRules.add(i)
-                        }
-                    }
-                    tempSubRules.sortBy {ts-> ts.displayid }
-                    this.rules.add(Pair(temp, tempSubRules))
-                }
-            }
-            this.totalScore = t
-        }
-    }
-
-    /**
-     * 鐢熸垚鏂扮殑涓�鏉¤瘎鍒嗚褰�
-     */
-    private fun newItemEvaluation(info: Info, itemRule: Evaluationsubrule2, inspection: Inspection?) = Itemevaluation()
-        .apply {
-            var rule: Evaluationrule? = null
-            for (r in baseRules) {
-                if (r.guid == itemRule.erguid) {
-                    rule = r
-                    break
-                }
-            }
-            ieguid = UUIDGenerator.generate16ShortUUID()
-            iguid = inspection?.guid
-            stguid = info.subTask?.stguid
-            sguid = info.subTask?.scenseid
-            sensename = info.subTask?.scensename
-            erguid = rule?.guid
-            rulename = rule?.rulename
-            ruletype = rule?.ruletype?.toInt()
-            ertype = itemRule.ertype
-            esrguid = itemRule.guid
-            name = itemRule.itemname
-            value = itemRule.extension1 ?: "0"
-            extension1 = (itemRule.extension1 != null).toString()
-        }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/CsScoreItem_1.kt b/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/CsScoreItem_1.kt
deleted file mode 100644
index 81163e5..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/CsScoreItem_1.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package cn.flightfeather.supervision.business.storage.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import javax.annotation.PostConstruct
-
-/**
- * Date 2022/1/20 16:14
- * Created by feiyu
- * 宸ュ湴
- */
-@Component
-class CsScoreItem_1:ScoreItem() {
-
-    companion object {
-        private lateinit var instance: CsScoreItem_1
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "amSNTZfXs2XXR1td"
-
-    override var name: String = "鏁存敼鎺柦鍙婃晥鏋�"
-
-    /**
-     * 鎵ф硶妫�鏌ユ眹鎬绘儏鍐�
-     * 閫夐」濡備笅锛�
-     *      1.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
-     *      2.闂鏃犳暣鏀�
-     */
-    override fun otherProblem(size: Int): Int? {
-        val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
-            createCriteria().andEqualTo("stguid", info.subTask?.stguid)
-//                .andGreaterThanOrEqualTo("time", info.sTime)
-//                .andLessThan("time", info.eTime)
-        })
-        var i = 0
-
-        val total = p.size
-        var changed = 0
-        p.forEach {
-            if (it.ischanged == true) {
-                changed++
-            }
-        }
-        return when {
-            changed == 0 && total > 0 -> 1
-            changed < total -> 0
-            else -> null
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/CsScoreItem_2.kt b/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/CsScoreItem_2.kt
deleted file mode 100644
index d0211a7..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/CsScoreItem_2.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-package cn.flightfeather.supervision.business.storage.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.DustDataResult
-import cn.flightfeather.supervision.domain.ds1.mapper.DustDataResultMapper
-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
-
-/**
- * Date 2022/1/20 16:14
- * Created by feiyu
- * 宸ュ湴
- */
-@Component
-class CsScoreItem_2:ScoreItem() {
-
-    companion object {
-        private lateinit var instance: CsScoreItem_2
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "dCQbQ8ibc6nexiJo"
-
-    override var name: String = "鎵皹鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇"
-
-    @Autowired
-    lateinit var dustDataResultMapper: DustDataResultMapper
-
-    /**
-     * 鎵皹鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇
-     * 閫夐」濡備笅锛�
-     *      1.鐩戞祴鏁版嵁鍑虹幇鍗曟棩鍙婁互涓婃湁鏁堣秴鏍�
-     *      2.鐩戞祴鏁版嵁鏈堝潎鍊艰秴鍖哄煙鏈堝潎鍊�20%浠ヤ笂鎴栨暟鎹槑鏄惧紓甯�
-     */
-    override fun otherProblem(size: Int): Int? {
-        val time = info.subTask?.planstarttime
-        val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
-        val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
-        val et = st.plusMonths(1)
-        val r = dustDataResultMapper.selectByExample(Example(DustDataResult::class.java).apply {
-            createCriteria().andGreaterThanOrEqualTo("drTime", st)
-                .andLessThan("drTime", et)
-                .andEqualTo("drSceneId", info.sceneId)
-        })
-
-        var result: Int? = null
-        r.forEach {
-            if (it == null) return@forEach
-            if (it.drExceedTimes > 0) {
-                result = 0
-            }
-            if (it.drOverAvgPer > 0) {
-                result = 1
-            }
-        }
-
-        return result
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/MpScoreItem_1.kt b/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/MpScoreItem_1.kt
deleted file mode 100644
index 4dcd316..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/MpScoreItem_1.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package cn.flightfeather.supervision.business.storage.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import javax.annotation.PostConstruct
-
-/**
- * Date 2022/1/20 16:14
- * Created by feiyu
- * 鎼呮媽绔�
- */
-@Component
-class MpScoreItem_1:ScoreItem() {
-
-    companion object {
-        private lateinit var instance: MpScoreItem_1
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "KxWcuelbrnCtzw6n"
-
-    override var name: String = "鏁存敼鎺柦鍙婃晥鏋�"
-
-    /**
-     * 鎵ф硶妫�鏌ユ眹鎬绘儏鍐�
-     * 閫夐」濡備笅锛�
-     *      1.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
-     *      2.闂鏃犳暣鏀�
-     */
-    override fun otherProblem(size: Int): Int? {
-        val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
-            createCriteria().andEqualTo("stguid", info.subTask?.stguid)
-//                .andGreaterThanOrEqualTo("time", info.sTime)
-//                .andLessThan("time", info.eTime)
-        })
-        var i = 0
-
-        val total = p.size
-        var changed = 0
-        p.forEach {
-            if (it.ischanged == true) {
-                changed++
-            }
-        }
-        return when {
-            changed == 0 && total > 0 -> 1
-            changed < total -> 0
-            else -> null
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/MpScoreItem_2.kt b/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/MpScoreItem_2.kt
deleted file mode 100644
index eb6eb0d..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/MpScoreItem_2.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-package cn.flightfeather.supervision.business.storage.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.DustDataResult
-import cn.flightfeather.supervision.domain.ds1.mapper.DustDataResultMapper
-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
-
-/**
- * Date 2022/1/20 16:14
- * Created by feiyu
- * 鎼呮媽绔�
- */
-@Component
-class MpScoreItem_2:ScoreItem() {
-
-    companion object {
-        private lateinit var instance: MpScoreItem_2
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "BoVfRjr5r7RtsqGC"
-
-    override var name: String = "鎵皹鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇"
-
-    @Autowired
-    lateinit var dustDataResultMapper: DustDataResultMapper
-
-    /**
-     * 鎵皹鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇
-     * 閫夐」濡備笅锛�
-     *      1.鐩戞祴鏁版嵁鍑虹幇鍗曟棩鍙婁互涓婃湁鏁堣秴鏍�
-     *      2.鐩戞祴鏁版嵁鏈堝潎鍊艰秴鍖哄煙鏈堝潎鍊�20%浠ヤ笂鎴栨暟鎹槑鏄惧紓甯�
-     */
-    override fun otherProblem(size: Int): Int? {
-        val time = info.subTask?.planstarttime
-        val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
-        val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
-        val et = st.plusMonths(1)
-        val r = dustDataResultMapper.selectByExample(Example(DustDataResult::class.java).apply {
-            createCriteria().andGreaterThanOrEqualTo("drTime", st)
-                .andLessThan("drTime", et)
-                .andEqualTo("drSceneId", info.sceneId)
-        })
-
-        var result: Int? = null
-        r.forEach {
-            if (it == null) return@forEach
-            if (it.drExceedTimes > 0) {
-                result = 0
-            }
-            if (it.drOverAvgPer > 0) {
-                result = 1
-            }
-        }
-
-        return result
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/StScoreItem_1.kt b/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/StScoreItem_1.kt
deleted file mode 100644
index dd7135f..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/StScoreItem_1.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package cn.flightfeather.supervision.business.storage.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import javax.annotation.PostConstruct
-
-/**
- * Date 2022/1/20 16:14
- * Created by feiyu
- * 鍫嗗満
- */
-@Component
-class StScoreItem_1:ScoreItem() {
-
-    companion object {
-        private lateinit var instance: StScoreItem_1
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "csInMYhgbBqWRyeB"
-
-    override var name: String = "鏁存敼鎺柦鍙婃晥鏋�"
-
-    /**
-     * 鎵ф硶妫�鏌ユ眹鎬绘儏鍐�
-     * 閫夐」濡備笅锛�
-     *      1.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
-     *      2.闂鏃犳暣鏀�
-     */
-    override fun otherProblem(size: Int): Int? {
-        val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
-            createCriteria().andEqualTo("stguid", info.subTask?.stguid)
-//                .andGreaterThanOrEqualTo("time", info.sTime)
-//                .andLessThan("time", info.eTime)
-        })
-        var i = 0
-
-        val total = p.size
-        var changed = 0
-        p.forEach {
-            if (it.ischanged == true) {
-                changed++
-            }
-        }
-        return when {
-            changed == 0 && total > 0 -> 1
-            changed < total -> 0
-            else -> null
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/WhScoreItem_1.kt b/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/WhScoreItem_1.kt
deleted file mode 100644
index 8e3b5cb..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/WhScoreItem_1.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package cn.flightfeather.supervision.business.storage.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
-import org.springframework.stereotype.Component
-import tk.mybatis.mapper.entity.Example
-import javax.annotation.PostConstruct
-
-/**
- * Date 2022/1/20 16:14
- * Created by feiyu
- * 鐮佸ご
- */
-@Component
-class WhScoreItem_1:ScoreItem() {
-
-    companion object {
-        private lateinit var instance: WhScoreItem_1
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "mgvVEecYRV8xrnf2"
-
-    override var name: String = "鏁存敼鎺柦鍙婃晥鏋�"
-
-    /**
-     * 鎵ф硶妫�鏌ユ眹鎬绘儏鍐�
-     * 閫夐」濡備笅锛�
-     *      1.闂閮ㄥ垎鏁存敼鎴栦笉鍙婃椂鎻愪緵鏉愭枡
-     *      2.闂鏃犳暣鏀�
-     */
-    override fun otherProblem(size: Int): Int? {
-        val p = problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
-            createCriteria().andEqualTo("stguid", info.subTask?.stguid)
-//                .andGreaterThanOrEqualTo("time", info.sTime)
-//                .andLessThan("time", info.eTime)
-        })
-        var i = 0
-
-        val total = p.size
-        var changed = 0
-        p.forEach {
-            if (it.ischanged == true) {
-                changed++
-            }
-        }
-        return when {
-            changed == 0 && total > 0 -> 1
-            changed < total -> 0
-            else -> null
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/WhScoreItem_2.kt b/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/WhScoreItem_2.kt
deleted file mode 100644
index ebca9e0..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/item/WhScoreItem_2.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-package cn.flightfeather.supervision.business.storage.item
-
-import cn.flightfeather.supervision.business.ScoreItem
-import cn.flightfeather.supervision.domain.ds1.entity.DustDataResult
-import cn.flightfeather.supervision.domain.ds1.mapper.DustDataResultMapper
-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
-
-/**
- * Date 2022/1/20 16:14
- * Created by feiyu
- * 鐮佸ご
- */
-@Component
-class WhScoreItem_2:ScoreItem() {
-
-    companion object {
-        private lateinit var instance: WhScoreItem_2
-    }
-
-    @PostConstruct
-    fun init() {
-        instance = this
-    }
-
-    override var id: String = "5NNLSvkVRFfASMhc"
-
-    override var name: String = "鎵皹鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇"
-
-    @Autowired
-    lateinit var dustDataResultMapper: DustDataResultMapper
-
-    /**
-     * 鎵皹鍦ㄧ嚎鐩戞祴鏁版嵁閲忕骇
-     * 閫夐」濡備笅锛�
-     *      1.鐩戞祴鏁版嵁鍑虹幇鍗曟棩鍙婁互涓婃湁鏁堣秴鏍�
-     *      2.鐩戞祴鏁版嵁鏈堝潎鍊艰秴鍖哄煙鏈堝潎鍊�20%浠ヤ笂鎴栨暟鎹槑鏄惧紓甯�
-     */
-    override fun otherProblem(size: Int): Int? {
-        val time = info.subTask?.planstarttime
-        val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault())
-        val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0)
-        val et = st.plusMonths(1)
-        val r = dustDataResultMapper.selectByExample(Example(DustDataResult::class.java).apply {
-            createCriteria().andGreaterThanOrEqualTo("drTime", st)
-                .andLessThan("drTime", et)
-                .andEqualTo("drSceneId", info.sceneId)
-        })
-
-        var result: Int? = null
-        r.forEach {
-            if (it == null) return@forEach
-            if (it.drExceedTimes > 0) {
-                result = 0
-            }
-            if (it.drOverAvgPer > 0) {
-                result = 1
-            }
-        }
-
-        return result
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/storage/package-info.java b/src/main/kotlin/cn/flightfeather/supervision/business/storage/package-info.java
deleted file mode 100644
index dfacbe8..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/business/storage/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Date 2022/1/19 16:07
- * Created by feiyu
- * 宸ュ湴鑷姩璇勫垎閫昏緫
- */
-package cn.flightfeather.supervision.business.storage;
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BackgroundTaskCtrl.kt b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BackgroundTaskCtrl.kt
new file mode 100644
index 0000000..72423b9
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BackgroundTaskCtrl.kt
@@ -0,0 +1,126 @@
+package cn.flightfeather.supervision.common.executor
+
+import org.springframework.stereotype.Component
+import java.time.LocalDateTime
+import java.util.concurrent.ConcurrentHashMap
+import java.util.concurrent.Executors
+import kotlin.jvm.Throws
+
+/**
+ * 鍚庡彴鑰楁椂浠诲姟绮剧‘绠$悊
+ */
+@Component
+class BackgroundTaskCtrl {
+
+    // 浠诲姟鍒楄〃
+    private val taskCollection = ConcurrentHashMap<BgTaskType, ConcurrentHashMap<String, BgTask>>()
+    // 绾跨▼姹�
+    private val executorService = Executors.newCachedThreadPool()
+
+    /**
+     * 鏂板浠诲姟
+     */
+    @Throws(IllegalStateException::class)
+    fun newTask(type: BgTaskType, id: String, name: String, task: () -> Boolean): BgTask {
+        if (!taskCollection.containsKey(type)) {
+            taskCollection[type] = ConcurrentHashMap<String, BgTask>()
+        }
+        val taskSet = taskCollection[type]!!
+        if (taskSet.containsKey(id)) throw IllegalStateException("鏃犳硶鍒涘缓浠诲姟锛� 浠诲姟[${name}]鐨刬d閲嶅")
+        val t = BgTask(type, id, name, task)
+        taskSet[id] = t
+        return t
+    }
+
+    /**
+     * 寮�濮嬩换鍔�
+     */
+    @Throws(IllegalStateException::class)
+    fun startTask(type: BgTaskType, id: String): BgTask {
+        val taskSet = taskCollection[type] ?: throw throw IllegalStateException("鏃犳硶寮�鍚换鍔★紝璇ヤ换鍔$被鍨媅${type.des}]涓嶅瓨鍦�")
+        val t = taskSet[id] ?: throw IllegalStateException("鏃犳硶寮�鍚换鍔★紝璇ヤ换鍔${id}]涓嶅瓨鍦�")
+        return startTask(t)
+    }
+
+    @Throws(IllegalStateException::class)
+    fun startTask(task: BgTask): BgTask {
+        if (task.taskStatus.status != TaskStatus.WAITING) {
+            if (task.taskStatus.status == TaskStatus.RUNNING) {
+                throw IllegalStateException("鏃犳硶寮�鍚换鍔★紝浠诲姟[${task.name}]姝e湪鎵ц")
+            } else {
+                throw IllegalStateException("鏃犳硶寮�鍚换鍔★紝浠诲姟[${task.name}]宸茬粨鏉�")
+            }
+        } else {
+            task.ready()
+            task.future = executorService.submit { task.execute() }
+            return task
+        }
+    }
+
+    /**
+     * 鏂板骞跺紑濮嬩换鍔�
+     */
+    @Throws(IllegalStateException::class)
+    fun startNewTask(type: BgTaskType, id: String, name: String, task: () -> Boolean): BgTask {
+        val t = newTask(type, id, name, task)
+        return startTask(t)
+    }
+
+    /**
+     * 鑾峰彇浠诲姟鐘舵��
+     */
+    fun getTaskStatus(type: BgTaskType?, id: String? = null): List<BgTaskStatus?> {
+        if (type != null) {
+            val set = taskCollection[type] ?: return emptyList()
+            return if (id == null) {
+                set.toList().map {
+                    it.second.taskStatus
+                }.sortedBy { it.createTime }
+            } else {
+                val s = set[id]?.taskStatus
+                listOf(s)
+            }
+        } else {
+            val res = mutableListOf<BgTaskStatus?>()
+            taskCollection.forEach { (t, u) ->
+                val statusList = u.toList().map {
+                    it.second.taskStatus
+                }
+                res.addAll(statusList)
+            }
+            return res.sortedBy { it?.createTime }
+        }
+    }
+
+    /**
+     * 寮哄埗鍏抽棴浠诲姟
+     */
+    @Throws(IllegalStateException::class)
+    fun shutDownTask(type: BgTaskType, id: String?): List<BgTaskStatus?> {
+        val taskMap = taskCollection[type] ?: throw IllegalStateException("鏃犳硶鍏抽棴浠诲姟锛屼换鍔$被鍨媅${type.des}]鏈垱寤�")
+        return if (id != null) {
+            val task = taskMap[id] ?: throw IllegalStateException("鏃犳硶鍏抽棴浠诲姟锛屼换鍔${id}]涓嶅瓨鍦�")
+            task.shutdown()
+            listOf(task.taskStatus)
+        } else {
+            val res = mutableListOf<BgTaskStatus?>()
+            taskMap.forEach { (t, u) ->
+                u.shutdown()
+                res.add(u.taskStatus)
+            }
+            res.sortedBy { it?.createTime }
+        }
+    }
+
+    @Throws(IllegalStateException::class)
+    fun removeTask(type: BgTaskType, id: String): Boolean {
+        val statusList = shutDownTask(type, id)
+        if (statusList.isNotEmpty()) {
+            val s = statusList.first() ?: throw IllegalStateException("鏃犳硶绉婚櫎浠诲姟锛屼换鍔′笉瀛樺湪")
+            taskCollection[s.type]?.remove(s.id)
+            return true
+        }
+        return false
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt
new file mode 100644
index 0000000..953eac3
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt
@@ -0,0 +1,50 @@
+package cn.flightfeather.supervision.common.executor
+
+import org.springframework.scheduling.annotation.Async
+import java.time.LocalDateTime
+import java.util.concurrent.Future
+
+/**
+ * 鍚庡彴浠诲姟
+ */
+class BgTask(
+    val type: BgTaskType,
+    val id: String,
+    val name: String,
+    private val task: () -> Boolean,
+) {
+    var taskStatus = BgTaskStatus(type, id, name)
+    var future: Future<*>? = null
+
+    fun ready() {
+        taskStatus.status = TaskStatus.RUNNING
+        taskStatus.startTime = LocalDateTime.now()
+    }
+
+    fun execute() {
+        val res = task()
+        if (res) success() else fail()
+    }
+
+    fun success() {
+        taskStatus.status = TaskStatus.SUCCESS
+        complete()
+    }
+
+    fun fail() {
+        taskStatus.status = TaskStatus.FAIL
+        complete()
+    }
+
+    fun shutdown() {
+        if (future?.isCancelled == false && !future!!.isDone) {
+            future!!.cancel(true)
+            taskStatus.status = TaskStatus.SHUTDOWN
+            complete()
+        }
+    }
+
+    fun complete() {
+        taskStatus.endTime = LocalDateTime.now()
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskConditionVo.kt b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskConditionVo.kt
new file mode 100644
index 0000000..26d3fff
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskConditionVo.kt
@@ -0,0 +1,10 @@
+package cn.flightfeather.supervision.common.executor
+
+/**
+ * 鍚庡彴浠诲姟鏌ヨ鏉′欢
+ */
+class BgTaskConditionVo {
+
+    var type: BgTaskType? = null
+    var id: String? = null
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt
new file mode 100644
index 0000000..22d6fa9
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskStatus.kt
@@ -0,0 +1,56 @@
+package cn.flightfeather.supervision.common.executor
+
+import java.time.Duration
+import java.time.LocalDateTime
+
+/**
+ * 鍚庡彴鑰楁椂浠诲姟鐘舵��
+ */
+class BgTaskStatus(
+    val type: BgTaskType,
+    val id: String,
+    val name: String,
+) {
+    //    浠诲姟鐘舵��
+    var status: TaskStatus = TaskStatus.WAITING
+
+    //    寮�濮嬫椂闂�
+    var startTime: LocalDateTime? = null
+
+    //    缁撴潫鏃堕棿
+    var endTime: LocalDateTime? = null
+
+    //    鍒涘缓鏃堕棿
+    var createTime: LocalDateTime = LocalDateTime.now()
+
+    //    杩愯鏃堕暱锛堢锛�
+    val runTime: Long
+        get() {
+            when (status) {
+                TaskStatus.WAITING -> {
+                    return 0
+                }
+                TaskStatus.RUNNING -> {
+                    val now = LocalDateTime.now()
+                    val duration = Duration.between(startTime, now)
+                    return duration.toMillis() / 1000
+                }
+                TaskStatus.SUCCESS,
+                TaskStatus.FAIL,
+                TaskStatus.SHUTDOWN,
+                -> {
+                    val duration = Duration.between(startTime, endTime)
+                    return duration.toMillis() / 1000
+                }
+            }
+        }
+
+}
+
+enum class TaskStatus {
+    WAITING,
+    RUNNING,
+    SUCCESS,
+    FAIL,
+    SHUTDOWN
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskType.kt b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskType.kt
new file mode 100644
index 0000000..d1b471f
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTaskType.kt
@@ -0,0 +1,20 @@
+package cn.flightfeather.supervision.common.executor
+
+enum class BgTaskType(val index: Int, val des: String) {
+    //娴嬭瘯浠诲姟
+    TEST(0, "娴嬭瘯浠诲姟"),
+    //鑷姩璇勫垎
+    AUTO_SCORE(1, "鑷姩璇勪及浠诲姟");
+
+
+    companion object {
+
+        fun getByIndex(index: Int?): BgTaskType? {
+            return when (index) {
+                TEST.index -> TEST
+                AUTO_SCORE.index -> AUTO_SCORE
+                else -> null
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt b/src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt
index 5b5e162..bc73931 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/utils/Constant.kt
@@ -2,8 +2,12 @@
 
 class Constant{
     //鐢ㄦ埛
-    enum class UserType(val text: String){
-        ALLUSER("0")//鎵�鏈夌敤鎴�
+    enum class UserType(val value: Int, val des: String){
+        ALL_USER(-1,"0"),//鎵�鏈夌敤鎴�
+        ADMIN(0, "绠$悊鍛�"),
+        INSIDER(1, "鍐呴儴浜哄憳"),
+        GOV(2, "鏀垮簻閮ㄩ棬"),
+        ENTERPRISE(3, "浼佷笟")
     }
     //瑙勮寖绫诲埆
     enum class RuleType(val value: Byte, val text: String){
@@ -16,7 +20,7 @@
         RUNINGSTATUS3("3","宸茬粨鏉�")
     }
     //鍦烘櫙绫诲瀷
-    enum class ScenseType(val value: String,  val text: String){
+    enum class SceneType(val value: String, val text: String){
         TYPE1("1","宸ュ湴"), TYPE2("2","鐮佸ご"),
         TYPE3("3","姘存偿鎼呮媽绔�"), TYPE4("4","宸ヤ笟浼佷笟"),
         TYPE5("5","椁愰ギ"), TYPE6("6","姹戒慨"),
diff --git a/src/main/kotlin/cn/flightfeather/supervision/config/Swagger2Configuration.kt b/src/main/kotlin/cn/flightfeather/supervision/config/Swagger2Configuration.kt
index f0a66e6..7a159fe 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/config/Swagger2Configuration.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/config/Swagger2Configuration.kt
@@ -16,16 +16,16 @@
  */
 @Configuration
 @EnableSwagger2
-class Swagger2Configuration {
+class Swagger2Configuration(
+    @Value("\${springfox.documentation.swagger.v2.enabled}")
+    var swagger2Enable: Boolean
+) {
 
     companion object {
         const val SWAGGER_SCAN_BASE_PACKAGE = "cn.flightfeather.supervision"
 
         const val VERSION = "1.0.0"
     }
-
-    @Value("\${springfox.documentation.swagger.v2.enabled}")
-    private val swagger2Enable: Boolean = true
 
     @Bean
     fun createRestApi(): Docket =
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/Evaluationrule.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/Evaluationrule.kt
index f8f1e54..e636136 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/Evaluationrule.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/entity/Evaluationrule.kt
@@ -98,7 +98,7 @@
      * 浠庡�煎煙琛ㄨ幏鍙栵紙1 鐪侊紱2 鍦板競锛�3 鍖哄幙锛�4 琛楅晣锛�5 娣峰悎锛�
      */
     @Column(name = "ER_IsUse")
-    var isuse: String? = null
+    var isuse: Boolean? = null
 
     @Column(name = "ER_StartTime")
     var starttime: Date? = null
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/EvaluationMapper.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/EvaluationMapper.kt
index 25e8861..839c0a9 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/EvaluationMapper.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/mapper/EvaluationMapper.kt
@@ -2,8 +2,11 @@
 
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluation
 import cn.flightfeather.supervision.domain.util.MyMapper
+import cn.flightfeather.supervision.lightshare.vo.AutoScoreResultVo
 import org.apache.ibatis.annotations.Mapper
 
 @Mapper
 interface EvaluationMapper:MyMapper<Evaluation> {
+
+    fun findEvaluation(topTaskId: String, sceneTypeId: String): List<AutoScoreResultVo>
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/EvaluationRep.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/EvaluationRep.kt
new file mode 100644
index 0000000..0d7eb94
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/EvaluationRep.kt
@@ -0,0 +1,43 @@
+package cn.flightfeather.supervision.domain.ds1.repository
+
+import cn.flightfeather.supervision.domain.ds1.entity.Evaluation
+import cn.flightfeather.supervision.domain.ds1.mapper.EvaluationMapper
+import cn.flightfeather.supervision.domain.ds1.mapper.ItemevaluationMapper
+import cn.flightfeather.supervision.lightshare.vo.AreaVo
+import cn.flightfeather.supervision.lightshare.vo.AutoScoreResultVo
+import org.springframework.stereotype.Repository
+import tk.mybatis.mapper.entity.Example
+import java.time.LocalDate
+
+@Repository
+class EvaluationRep(
+    private val evaluationMapper: EvaluationMapper,
+    private val itemevaluationMapper: ItemevaluationMapper,
+    private val taskRep: TaskRep,
+) {
+
+    /**
+     * 鏌ユ壘鍦烘櫙瀵瑰簲鐨勫緱鍒�
+     * @param sceneId 鍦烘櫙id
+     * @param date 鏃ユ湡锛屽彧浣跨敤骞村拰鏈�
+     * @return
+     */
+    fun findByScene(sceneId: String?, date: LocalDate): Evaluation? {
+        val sT = date.withDayOfMonth(1).atStartOfDay()
+        val eT = sT.plusMonths(1).minusSeconds(1)
+        val res = evaluationMapper.selectByExample(Example(Evaluation::class.java).apply {
+            createCriteria().andEqualTo("sguid", sceneId)
+                .andBetween("evaluatetime", sT, eT)
+        })
+        return if (res.isNotEmpty()) res[0] else null
+    }
+
+    /**
+     * 鏌ユ壘鑷姩璇勫垎缁撴灉
+     */
+    fun findAutoScore(areaVo: AreaVo): List<AutoScoreResultVo?>? {
+        areaVo.scensetypeid ?: return null
+        val task = taskRep.findOneTask(areaVo) ?: return null
+        return evaluationMapper.findEvaluation(task.tguid!!, areaVo.scensetypeid!!)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/EvaluationRuleRep.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/EvaluationRuleRep.kt
new file mode 100644
index 0000000..9014743
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/EvaluationRuleRep.kt
@@ -0,0 +1,30 @@
+package cn.flightfeather.supervision.domain.ds1.repository
+
+import cn.flightfeather.supervision.domain.ds1.entity.Evaluationrule
+import cn.flightfeather.supervision.domain.ds1.mapper.EvaluationruleMapper
+import cn.flightfeather.supervision.lightshare.vo.AreaEvaVo
+import org.springframework.stereotype.Repository
+import tk.mybatis.mapper.entity.Example
+
+/**
+ * 璇勪及瑙勫垯鏁版嵁搴撶浉鍏虫搷浣�
+ */
+@Repository
+class EvaluationRuleRep(private val evaluationruleMapper: EvaluationruleMapper) {
+
+    /**
+     * 鏍规嵁鍙傛暟鏌ヨ鎬昏鍒�
+     * @param areaEvaVo 鏌ヨ鍙傛暟
+     */
+    fun findBaseRule(areaEvaVo: AreaEvaVo): List<Evaluationrule?> {
+        return evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
+            createCriteria().andEqualTo("tasktypeid", areaEvaVo.taskTypeId)
+                .andEqualTo("scensetypeid", areaEvaVo.scensetypeid)
+                .andEqualTo("provincecode", areaEvaVo.provincecode)
+                .andEqualTo("citycode", areaEvaVo.citycode)
+                .andEqualTo("districtcode", areaEvaVo.districtcode)
+                .andEqualTo("towncode", areaEvaVo.towncode)
+                .andEqualTo("isuse", true)
+        })
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/TaskRep.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/TaskRep.kt
new file mode 100644
index 0000000..8dba496
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/TaskRep.kt
@@ -0,0 +1,38 @@
+package cn.flightfeather.supervision.domain.ds1.repository
+
+import cn.flightfeather.supervision.domain.ds1.entity.Task
+import cn.flightfeather.supervision.domain.ds1.mapper.TaskMapper
+import cn.flightfeather.supervision.lightshare.vo.AreaVo
+import org.springframework.stereotype.Repository
+import java.time.LocalDate
+import java.time.ZoneId
+import java.util.*
+
+@Repository
+class TaskRep(private val taskMapper: TaskMapper) {
+
+    private fun exampleTask(areaVo: AreaVo): Task?{
+        areaVo.starttime ?: return null
+        val mStart = LocalDate.parse(areaVo.starttime).withDayOfMonth(1).atStartOfDay()
+        val mEnd = mStart.plusMonths(1).minusSeconds(1)
+        return Task().apply {
+            provincecode = areaVo.provincecode
+            citycode = areaVo.citycode
+            districtcode = areaVo.districtcode
+            starttime = Date.from(mStart.atZone(ZoneId.systemDefault()).toInstant())
+            endtime = Date.from(mEnd.atZone(ZoneId.systemDefault()).toInstant())
+        }
+    }
+    /**
+     * 鏌ユ壘涓�涓�讳换鍔�
+     */
+    fun findOneTask(areaVo: AreaVo): Task? {
+        val example = exampleTask(areaVo) ?: return null
+        return taskMapper.selectOne(example)
+    }
+
+    fun findTasks(areaVo: AreaVo): List<Task?> {
+        val example = exampleTask(areaVo) ?: return emptyList()
+        return taskMapper.select(example)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/entity/OverallEvaluation.java b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/entity/OverallEvaluation.java
new file mode 100644
index 0000000..f0ba1a9
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/entity/OverallEvaluation.java
@@ -0,0 +1,211 @@
+package cn.flightfeather.supervision.domain.ds2.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.util.Date;
+
+@Table(name = "ea_t_overall_evaluation")
+public class OverallEvaluation {
+    @Id
+    @Column(name = "OE_GUID")
+    private Integer oeGuid;
+
+    @Column(name = "BI_GUID")
+    private String biGuid;
+
+    @Column(name = "OE_Score")
+    private Integer oeScore;
+
+    @Column(name = "OE_Publish_Time")
+    private Date oePublishTime;
+
+    @Column(name = "OE_Update_Time")
+    private Date oeUpdateTime;
+
+    @Column(name = "OE_Scene_Type_Id")
+    private Byte oeSceneTypeId;
+
+    @Column(name = "OE_Scene_Type")
+    private String oeSceneType;
+
+    @Column(name = "OE_Period")
+    private String oePeriod;
+
+    @Column(name = "OE_Code_Level")
+    private Byte oeCodeLevel;
+
+    /**
+     * 鐢熸晥寮�濮嬫椂闂�
+     */
+    @Column(name = "OE_Start_Time")
+    private Date oeStartTime;
+
+    /**
+     * 鐢熸晥缁撴潫鏃堕棿
+     */
+    @Column(name = "OE_End_Time")
+    private Date oeEndTime;
+
+    /**
+     * @return OE_GUID
+     */
+    public Integer getOeGuid() {
+        return oeGuid;
+    }
+
+    /**
+     * @param oeGuid
+     */
+    public void setOeGuid(Integer oeGuid) {
+        this.oeGuid = oeGuid;
+    }
+
+    /**
+     * @return BI_GUID
+     */
+    public String getBiGuid() {
+        return biGuid;
+    }
+
+    /**
+     * @param biGuid
+     */
+    public void setBiGuid(String biGuid) {
+        this.biGuid = biGuid == null ? null : biGuid.trim();
+    }
+
+    /**
+     * @return OE_Score
+     */
+    public Integer getOeScore() {
+        return oeScore;
+    }
+
+    /**
+     * @param oeScore
+     */
+    public void setOeScore(Integer oeScore) {
+        this.oeScore = oeScore;
+    }
+
+    /**
+     * @return OE_Publish_Time
+     */
+    public Date getOePublishTime() {
+        return oePublishTime;
+    }
+
+    /**
+     * @param oePublishTime
+     */
+    public void setOePublishTime(Date oePublishTime) {
+        this.oePublishTime = oePublishTime;
+    }
+
+    /**
+     * @return OE_Update_Time
+     */
+    public Date getOeUpdateTime() {
+        return oeUpdateTime;
+    }
+
+    /**
+     * @param oeUpdateTime
+     */
+    public void setOeUpdateTime(Date oeUpdateTime) {
+        this.oeUpdateTime = oeUpdateTime;
+    }
+
+    /**
+     * @return OE_Scene_Type_Id
+     */
+    public Byte getOeSceneTypeId() {
+        return oeSceneTypeId;
+    }
+
+    /**
+     * @param oeSceneTypeId
+     */
+    public void setOeSceneTypeId(Byte oeSceneTypeId) {
+        this.oeSceneTypeId = oeSceneTypeId;
+    }
+
+    /**
+     * @return OE_Scene_Type
+     */
+    public String getOeSceneType() {
+        return oeSceneType;
+    }
+
+    /**
+     * @param oeSceneType
+     */
+    public void setOeSceneType(String oeSceneType) {
+        this.oeSceneType = oeSceneType == null ? null : oeSceneType.trim();
+    }
+
+    /**
+     * @return OE_Period
+     */
+    public String getOePeriod() {
+        return oePeriod;
+    }
+
+    /**
+     * @param oePeriod
+     */
+    public void setOePeriod(String oePeriod) {
+        this.oePeriod = oePeriod == null ? null : oePeriod.trim();
+    }
+
+    /**
+     * @return OE_Code_Level
+     */
+    public Byte getOeCodeLevel() {
+        return oeCodeLevel;
+    }
+
+    /**
+     * @param oeCodeLevel
+     */
+    public void setOeCodeLevel(Byte oeCodeLevel) {
+        this.oeCodeLevel = oeCodeLevel;
+    }
+
+    /**
+     * 鑾峰彇鐢熸晥寮�濮嬫椂闂�
+     *
+     * @return RE_Start_Time - 鐢熸晥寮�濮嬫椂闂�
+     */
+    public Date getOeStartTime() {
+        return oeStartTime;
+    }
+
+    /**
+     * 璁剧疆鐢熸晥寮�濮嬫椂闂�
+     *
+     * @param oeStartTime 鐢熸晥寮�濮嬫椂闂�
+     */
+    public void setOeStartTime(Date oeStartTime) {
+        this.oeStartTime = oeStartTime;
+    }
+
+    /**
+     * 鑾峰彇鐢熸晥缁撴潫鏃堕棿
+     *
+     * @return RE_End_Time - 鐢熸晥缁撴潫鏃堕棿
+     */
+    public Date getOeEndTime() {
+        return oeEndTime;
+    }
+
+    /**
+     * 璁剧疆鐢熸晥缁撴潫鏃堕棿
+     *
+     * @param oeEndTime 鐢熸晥缁撴潫鏃堕棿
+     */
+    public void setOeEndTime(Date oeEndTime) {
+        this.oeEndTime = oeEndTime;
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/mapper/OverallEvaluationMapper.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/mapper/OverallEvaluationMapper.kt
new file mode 100644
index 0000000..586e16f
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/mapper/OverallEvaluationMapper.kt
@@ -0,0 +1,8 @@
+package cn.flightfeather.supervision.domain.ds2.mapper
+
+import cn.flightfeather.supervision.domain.ds2.entity.OverallEvaluation
+import cn.flightfeather.supervision.domain.util.MyMapper
+import org.apache.ibatis.annotations.Mapper
+
+@Mapper
+interface OverallEvaluationMapper : MyMapper<OverallEvaluation?>
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/OverallEvaluationRep.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/OverallEvaluationRep.kt
new file mode 100644
index 0000000..b99a538
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/OverallEvaluationRep.kt
@@ -0,0 +1,60 @@
+package cn.flightfeather.supervision.domain.ds2.repository
+
+import cn.flightfeather.supervision.business.autooutput.score.ScoreUtil
+import cn.flightfeather.supervision.common.utils.Constant
+import cn.flightfeather.supervision.domain.ds2.entity.OverallEvaluation
+import cn.flightfeather.supervision.domain.ds2.mapper.OverallEvaluationMapper
+import org.springframework.stereotype.Repository
+import java.time.LocalDate
+import java.time.ZoneId
+import java.util.*
+
+@Repository
+class OverallEvaluationRep(private val overallEvaluationMapper: OverallEvaluationMapper){
+
+    /**
+     * 鎻掑叆涓�鏉$幆淇$爜璁板綍
+     * @param userId
+     * @param score
+     * @param sceneType
+     * @param sT
+     * @param eT
+     * @return
+     */
+    fun insertOrUpdateOne(
+        userId: String?,
+        score: Int?,
+        sceneType: Constant.SceneType,
+        sT: LocalDate,
+        eT: LocalDate,
+    ): Int {
+        val period = "${sT.year}/${sT.monthValue}-${eT.monthValue}"
+        val codeLevel = ScoreUtil.scoreToCredit(score)
+        val oE = overallEvaluationMapper.selectOne(OverallEvaluation().apply {
+            biGuid = userId
+            oePeriod = period
+        })
+        if (oE != null) {
+            oE.oeScore = score
+            oE.oeCodeLevel = codeLevel.first?.toByte()
+            return overallEvaluationMapper.updateByPrimaryKey(oE)
+        } else {
+            val startTime = sT.withDayOfMonth(1)
+            val endTime = eT.plusMonths(1).withDayOfMonth(1).minusDays(1)
+            val publishTime = Date.from(endTime.plusDays(1).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())
+            val e = OverallEvaluation().apply {
+                biGuid = userId
+                oeScore = score
+                oePublishTime = publishTime
+                oeUpdateTime = publishTime
+                oeSceneTypeId = Constant.SceneType.typeMap(sceneType.value.toByte())
+                oeSceneType = sceneType.text
+                oePeriod = period
+                oeCodeLevel = codeLevel.first?.toByte()
+                oeStartTime = Date.from(startTime.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())
+                oeEndTime = Date.from(endTime.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())
+            }
+            return overallEvaluationMapper.insert(e)
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/UserInfoTZRep.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/UserInfoTZRep.kt
new file mode 100644
index 0000000..955ed62
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/UserInfoTZRep.kt
@@ -0,0 +1,28 @@
+package cn.flightfeather.supervision.domain.ds2.repository
+
+import cn.flightfeather.supervision.common.utils.Constant
+import cn.flightfeather.supervision.domain.ds2.entity.UserinfoTZ
+import cn.flightfeather.supervision.domain.ds2.mapper.UserinfoTZMapper
+import org.springframework.stereotype.Repository
+import tk.mybatis.mapper.entity.Example
+
+@Repository
+class UserInfoTZRep(private val userinfoTZMapper: UserinfoTZMapper) {
+
+    /**
+     * 鏌ユ壘鍦ㄧ嚎鐨勬寮忎紒涓氱敤鎴�
+     * @param district 鍖哄幙鍚嶇О
+     * @param sceneType 鍦烘櫙绫诲瀷
+     * @return
+     */
+    fun findEnterpriseUser(district: String?, sceneType: Constant.SceneType): List<UserinfoTZ?> {
+        val type = Constant.SceneType.typeMap(sceneType.value.toByte())
+        return userinfoTZMapper.selectByExample(Example(UserinfoTZ::class.java).apply {
+            createCriteria().andEqualTo("extension2", type)
+                .andEqualTo("extension1", district)
+                .andEqualTo("usertypeid", Constant.UserType.ENTERPRISE.value)
+                .andEqualTo("isenable", true)
+            and(createCriteria().orIsNull("workno").orNotEqualTo("workno", "test"))
+        })
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/UserMapRep.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/UserMapRep.kt
new file mode 100644
index 0000000..022a302
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds2/repository/UserMapRep.kt
@@ -0,0 +1,38 @@
+package cn.flightfeather.supervision.domain.ds2.repository
+
+import cn.flightfeather.supervision.domain.ds1.entity.Scense
+import cn.flightfeather.supervision.domain.ds1.mapper.ScenseMapper
+import cn.flightfeather.supervision.domain.ds1.mapper.UserinfoMapper
+import cn.flightfeather.supervision.domain.ds2.entity.UserMap
+import cn.flightfeather.supervision.domain.ds2.entity.UserinfoTZ
+import cn.flightfeather.supervision.domain.ds2.mapper.UserMapMapper
+import org.springframework.stereotype.Repository
+
+@Repository
+class UserMapRep(
+    private val userMapMapper: UserMapMapper,
+    private val scenseMapper: ScenseMapper,
+    private val userinfoMapper: UserinfoMapper
+) {
+
+    /**
+     * 浠庨缇界洃绠$郴缁熶腑鏌ユ壘鍩烘湰淇℃伅
+     * @param userinfoTZ 椋炵窘鐜涓殑鐢ㄦ埛淇℃伅
+     * @return
+     */
+    fun findFromSupervision(userinfoTZ: UserinfoTZ?): Scense? {
+        val userMap = UserMap().apply {
+            tzUserId = userinfoTZ?.guid
+        }
+        // 鎵惧埌涓や釜绯荤粺鐢ㄦ埛鐨勫搴斿叧绯�
+        val uMap = userMapMapper.selectOne(userMap)
+        if (uMap == null) {
+            println("${userinfoTZ?.guid}, ${userinfoTZ?.realname}")
+            return null
+        }
+        // 鎵惧埌椋炵窘鐩戠涓殑鐢ㄦ埛淇℃伅
+        val userInfoSp = userinfoMapper.selectByPrimaryKey(uMap.svUserId)
+        // 鎵惧埌椋炵窘鐩戠涓殑鍦烘櫙淇℃伅
+        return scenseMapper.selectByPrimaryKey(userInfoSp.dGuid)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/FumeSiteMap.java b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/FumeSiteMap.java
new file mode 100644
index 0000000..85a2b89
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/FumeSiteMap.java
@@ -0,0 +1,144 @@
+package cn.flightfeather.supervision.domain.ds3.entity;
+
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "fu_xh_t_site_map")
+public class FumeSiteMap {
+    @Id
+    @Column(name = "Id")
+    private Integer id;
+
+    @Column(name = "TZ_User_Id")
+    private String tzUserId;
+
+    @Column(name = "TZ_User_Name")
+    private String tzUserName;
+
+    @Column(name = "XH_Device_Code")
+    private String xhDeviceCode;
+
+    @Column(name = "XH_Device_Name")
+    private String xhDeviceName;
+
+    @Column(name = "SV_User_Id")
+    private String svUserId;
+
+    @Column(name = "SV_User_Name")
+    private String svUserName;
+
+    @Column(name = "Create_Time")
+    private Date createTime;
+
+    /**
+     * @return Id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * @return TZ_User_Id
+     */
+    public String getTzUserId() {
+        return tzUserId;
+    }
+
+    /**
+     * @param tzUserId
+     */
+    public void setTzUserId(String tzUserId) {
+        this.tzUserId = tzUserId == null ? null : tzUserId.trim();
+    }
+
+    /**
+     * @return TZ_User_Name
+     */
+    public String getTzUserName() {
+        return tzUserName;
+    }
+
+    /**
+     * @param tzUserName
+     */
+    public void setTzUserName(String tzUserName) {
+        this.tzUserName = tzUserName == null ? null : tzUserName.trim();
+    }
+
+    /**
+     * @return XH_Device_Code
+     */
+    public String getXhDeviceCode() {
+        return xhDeviceCode;
+    }
+
+    /**
+     * @param xhDeviceCode
+     */
+    public void setXhDeviceCode(String xhDeviceCode) {
+        this.xhDeviceCode = xhDeviceCode == null ? null : xhDeviceCode.trim();
+    }
+
+    /**
+     * @return XH_Device_Name
+     */
+    public String getXhDeviceName() {
+        return xhDeviceName;
+    }
+
+    /**
+     * @param xhDeviceName
+     */
+    public void setXhDeviceName(String xhDeviceName) {
+        this.xhDeviceName = xhDeviceName == null ? null : xhDeviceName.trim();
+    }
+
+    /**
+     * @return SV_User_Id
+     */
+    public String getSvUserId() {
+        return svUserId;
+    }
+
+    /**
+     * @param svUserId
+     */
+    public void setSvUserId(String svUserId) {
+        this.svUserId = svUserId == null ? null : svUserId.trim();
+    }
+
+    /**
+     * @return SV_User_Name
+     */
+    public String getSvUserName() {
+        return svUserName;
+    }
+
+    /**
+     * @param svUserName
+     */
+    public void setSvUserName(String svUserName) {
+        this.svUserName = svUserName == null ? null : svUserName.trim();
+    }
+
+    /**
+     * @return Create_Time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/JSDustData.java b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/JSDustData.java
new file mode 100644
index 0000000..3b5d775
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/JSDustData.java
@@ -0,0 +1,139 @@
+package cn.flightfeather.supervision.domain.ds3.entity;
+
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "ja_t_dust_site_data_info")
+public class JSDustData {
+    @Id
+    private Integer id;
+
+    @Column(name = "mn_code")
+    private String mnCode;
+
+    @Column(name = "dust_value")
+    private Double dustValue;
+
+    @Column(name = "noise_value")
+    private Double noiseValue;
+
+    private Date lst;
+
+    private String quality;
+
+    private Integer grade;
+
+    private String flag;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * @return mn_code
+     */
+    public String getMnCode() {
+        return mnCode;
+    }
+
+    /**
+     * @param mnCode
+     */
+    public void setMnCode(String mnCode) {
+        this.mnCode = mnCode == null ? null : mnCode.trim();
+    }
+
+    /**
+     * @return dust_value
+     */
+    public Double getDustValue() {
+        return dustValue;
+    }
+
+    /**
+     * @param dustValue
+     */
+    public void setDustValue(Double dustValue) {
+        this.dustValue = dustValue;
+    }
+
+    /**
+     * @return noise_value
+     */
+    public Double getNoiseValue() {
+        return noiseValue;
+    }
+
+    /**
+     * @param noiseValue
+     */
+    public void setNoiseValue(Double noiseValue) {
+        this.noiseValue = noiseValue;
+    }
+
+    /**
+     * @return lst
+     */
+    public Date getLst() {
+        return lst;
+    }
+
+    /**
+     * @param lst
+     */
+    public void setLst(Date lst) {
+        this.lst = lst;
+    }
+
+    /**
+     * @return quality
+     */
+    public String getQuality() {
+        return quality;
+    }
+
+    /**
+     * @param quality
+     */
+    public void setQuality(String quality) {
+        this.quality = quality == null ? null : quality.trim();
+    }
+
+    /**
+     * @return grade
+     */
+    public Integer getGrade() {
+        return grade;
+    }
+
+    /**
+     * @param grade
+     */
+    public void setGrade(Integer grade) {
+        this.grade = grade;
+    }
+
+    /**
+     * @return flag
+     */
+    public String getFlag() {
+        return flag;
+    }
+
+    /**
+     * @param flag
+     */
+    public void setFlag(String flag) {
+        this.flag = flag == null ? null : flag.trim();
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/JSDustSiteMap.java b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/JSDustSiteMap.java
new file mode 100644
index 0000000..faa26ed
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/entity/JSDustSiteMap.java
@@ -0,0 +1,144 @@
+package cn.flightfeather.supervision.domain.ds3.entity;
+
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "du_js_t_site_map")
+public class JSDustSiteMap {
+    @Id
+    @Column(name = "Id")
+    private Integer id;
+
+    @Column(name = "TZ_User_Id")
+    private String tzUserId;
+
+    @Column(name = "TZ_User_Name")
+    private String tzUserName;
+
+    @Column(name = "JS_Device_Code")
+    private String jsDeviceCode;
+
+    @Column(name = "JS_Device_Name")
+    private String jsDeviceName;
+
+    @Column(name = "SV_User_Id")
+    private String svUserId;
+
+    @Column(name = "SV_User_Name")
+    private String svUserName;
+
+    @Column(name = "Create_Time")
+    private Date createTime;
+
+    /**
+     * @return Id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * @return TZ_User_Id
+     */
+    public String getTzUserId() {
+        return tzUserId;
+    }
+
+    /**
+     * @param tzUserId
+     */
+    public void setTzUserId(String tzUserId) {
+        this.tzUserId = tzUserId == null ? null : tzUserId.trim();
+    }
+
+    /**
+     * @return TZ_User_Name
+     */
+    public String getTzUserName() {
+        return tzUserName;
+    }
+
+    /**
+     * @param tzUserName
+     */
+    public void setTzUserName(String tzUserName) {
+        this.tzUserName = tzUserName == null ? null : tzUserName.trim();
+    }
+
+    /**
+     * @return JS_Device_Code
+     */
+    public String getJsDeviceCode() {
+        return jsDeviceCode;
+    }
+
+    /**
+     * @param jsDeviceCode
+     */
+    public void setJsDeviceCode(String jsDeviceCode) {
+        this.jsDeviceCode = jsDeviceCode == null ? null : jsDeviceCode.trim();
+    }
+
+    /**
+     * @return JS_Device_Name
+     */
+    public String getJsDeviceName() {
+        return jsDeviceName;
+    }
+
+    /**
+     * @param jsDeviceName
+     */
+    public void setJsDeviceName(String jsDeviceName) {
+        this.jsDeviceName = jsDeviceName == null ? null : jsDeviceName.trim();
+    }
+
+    /**
+     * @return SV_User_Id
+     */
+    public String getSvUserId() {
+        return svUserId;
+    }
+
+    /**
+     * @param svUserId
+     */
+    public void setSvUserId(String svUserId) {
+        this.svUserId = svUserId == null ? null : svUserId.trim();
+    }
+
+    /**
+     * @return SV_User_Name
+     */
+    public String getSvUserName() {
+        return svUserName;
+    }
+
+    /**
+     * @param svUserName
+     */
+    public void setSvUserName(String svUserName) {
+        this.svUserName = svUserName == null ? null : svUserName.trim();
+    }
+
+    /**
+     * @return Create_Time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/enum/JSSceneType.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/enum/JSSceneType.kt
new file mode 100644
index 0000000..733cc75
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/enum/JSSceneType.kt
@@ -0,0 +1,7 @@
+package cn.flightfeather.supervision.domain.ds3.enum
+
+enum class JSSceneType(val value:Int, val des:String) {
+    Construction(1, "寤虹瓚宸ュ湴"),
+    Wharf(3, "鐮佸ご"),
+    MixingPlant(4, "鎼呮媽绔�")
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/FumeSiteMapMapper.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/FumeSiteMapMapper.kt
new file mode 100644
index 0000000..52c081d
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/FumeSiteMapMapper.kt
@@ -0,0 +1,8 @@
+package cn.flightfeather.supervision.domain.ds3.mapper
+
+import cn.flightfeather.supervision.domain.ds3.entity.FumeSiteMap
+import cn.flightfeather.supervision.domain.util.MyMapper
+import org.apache.ibatis.annotations.Mapper
+
+@Mapper
+interface FumeSiteMapMapper : MyMapper<FumeSiteMap?>
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/JSDustDataMapper.kt b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/JSDustDataMapper.kt
new file mode 100644
index 0000000..7f3cf12
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/JSDustDataMapper.kt
@@ -0,0 +1,12 @@
+package cn.flightfeather.supervision.domain.ds3.mapper
+
+import cn.flightfeather.supervision.domain.ds3.entity.JSDustData
+import cn.flightfeather.supervision.domain.util.MyMapper
+import org.apache.ibatis.annotations.Mapper
+import java.util.*
+
+@Mapper
+interface JSDustDataMapper : MyMapper<JSDustData?> {
+
+    fun getDataBySceneType(st: Date?, et: Date?, sceneType: Int, startIndex:Int, perPage:Int): List<JSDustData?>
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/JSDustSiteMapMapper.java b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/JSDustSiteMapMapper.java
new file mode 100644
index 0000000..9aba365
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/domain/ds3/mapper/JSDustSiteMapMapper.java
@@ -0,0 +1,8 @@
+package cn.flightfeather.supervision.domain.ds3.mapper;
+
+import cn.flightfeather.supervision.domain.ds3.entity.JSDustSiteMap;
+import cn.flightfeather.supervision.domain.util.MyMapper;
+import tk.mybatis.mapper.common.Mapper;
+
+public interface JSDustSiteMapMapper extends MyMapper<JSDustSiteMap> {
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/BgTaskService.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/BgTaskService.kt
new file mode 100644
index 0000000..cf52539
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/BgTaskService.kt
@@ -0,0 +1,30 @@
+package cn.flightfeather.supervision.lightshare.service
+
+import cn.flightfeather.supervision.common.executor.BgTaskConditionVo
+import cn.flightfeather.supervision.common.executor.BgTaskStatus
+
+interface BgTaskService {
+
+    /**
+     * 鑾峰彇浠诲姟鐘舵��
+     */
+    fun getTaskStatus(condition: BgTaskConditionVo): List<BgTaskStatus?>
+
+    fun startTask(condition: BgTaskConditionVo): BgTaskStatus?
+
+    fun shutDownTask(condition: BgTaskConditionVo): List<BgTaskStatus?>
+
+    fun removeTask(condition: BgTaskConditionVo): Boolean
+
+    /******************************Test************************************************/
+    /**
+     * 鏂板缓骞惰繍琛屼竴涓祴璇曚换鍔�
+     */
+    fun startNewTestTask(taskId: String): BgTaskStatus?
+
+    /**
+     * 鏂板缓涓�涓祴璇曚换鍔�
+     */
+    fun newTestTask(taskId: String): BgTaskStatus?
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationService.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationService.kt
index 38b81f4..2f897f6 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationService.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationService.kt
@@ -1,7 +1,11 @@
 package cn.flightfeather.supervision.lightshare.service
 
+import cn.flightfeather.supervision.common.executor.BgTaskStatus
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluation
+import cn.flightfeather.supervision.domain.ds1.entity.Itemevaluation
 import cn.flightfeather.supervision.lightshare.vo.AreaVo
+import cn.flightfeather.supervision.lightshare.vo.AutoScoreResultVo
+import cn.flightfeather.supervision.lightshare.vo.BaseResponse
 
 
 interface EvaluationService {
@@ -19,8 +23,6 @@
 
     fun getRankOfTown(tguid: String, scensetypeid: String?):List<AreaVo>
 
-    fun getTopTaskByScene(sceneId: String?): String?
-
     fun autoScore(districtCode: String, time: String): List<String>
 
     fun autoScore2(subTaskId: String): List<String>
@@ -28,4 +30,12 @@
     fun autoScore3(tGuid: String, sceneTypeId: String): String
 
     fun findByInspectionId(inspectionId:String):List<Evaluation>
+
+    /**
+     * 鑷姩璇勪及
+     * @param areaVo 璇勪及鑼冨洿
+     */
+    fun autoEvaluate(areaVo: AreaVo): BgTaskStatus?
+
+    fun findAutoEvaluation(areaVo: AreaVo): List<AutoScoreResultVo?>?
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationruleService.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationruleService.kt
index 4250395..d6c66e0 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationruleService.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/EvaluationruleService.kt
@@ -1,6 +1,8 @@
 package cn.flightfeather.supervision.lightshare.service
 
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluationrule
+import cn.flightfeather.supervision.lightshare.vo.AreaEvaVo
+import cn.flightfeather.supervision.lightshare.vo.AreaVo
 
 
 interface EvaluationruleService {
@@ -16,4 +18,5 @@
 
     fun findBySpecificRule(tasktypeid: Byte?, scensetypeid: Byte?, districtcode: String?): Evaluationrule?
 
+    fun find(areaVo: AreaEvaVo): List<Evaluationrule?>
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/TaskService.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/TaskService.kt
index 5ffa7ac..7228a57 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/TaskService.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/TaskService.kt
@@ -1,10 +1,8 @@
 package cn.flightfeather.supervision.lightshare.service
 
 import cn.flightfeather.supervision.domain.ds1.entity.Task
-import cn.flightfeather.supervision.lightshare.vo.DayTaskProgressVo
-import cn.flightfeather.supervision.lightshare.vo.RankVo
-import cn.flightfeather.supervision.lightshare.vo.TaskFrequencyVo
-import cn.flightfeather.supervision.lightshare.vo.TaskVo
+import cn.flightfeather.supervision.lightshare.vo.*
+import org.springframework.web.bind.annotation.RequestBody
 import java.util.*
 
 interface TaskService {
@@ -52,4 +50,6 @@
 
     fun getByDistrictCode(districtCode: String, date: Date):List<TaskVo>
 
+    fun findTask(areaVo: AreaVo):List<Task?>
+
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/BgTaskServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/BgTaskServiceImpl.kt
new file mode 100644
index 0000000..613e021
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/BgTaskServiceImpl.kt
@@ -0,0 +1,54 @@
+package cn.flightfeather.supervision.lightshare.service.impl
+
+import cn.flightfeather.supervision.common.executor.BackgroundTaskCtrl
+import cn.flightfeather.supervision.common.executor.BgTaskConditionVo
+import cn.flightfeather.supervision.common.executor.BgTaskStatus
+import cn.flightfeather.supervision.common.executor.BgTaskType
+import cn.flightfeather.supervision.lightshare.service.BgTaskService
+import org.springframework.stereotype.Service
+
+@Service
+class BgTaskServiceImpl(private val backgroundTaskCtrl: BackgroundTaskCtrl) : BgTaskService {
+
+    override fun getTaskStatus(condition: BgTaskConditionVo): List<BgTaskStatus?> {
+        return backgroundTaskCtrl.getTaskStatus(condition.type, condition.id)
+    }
+
+    override fun startTask(condition: BgTaskConditionVo): BgTaskStatus? {
+        condition.type ?: throw IllegalStateException("浠诲姟绫诲瀷涓嶈兘涓虹┖")
+        condition.id ?: throw IllegalStateException("浠诲姟id涓嶈兘涓虹┖")
+
+        val task = backgroundTaskCtrl.startTask(condition.type!!, condition.id!!)
+        return task.taskStatus
+    }
+
+    override fun shutDownTask(condition: BgTaskConditionVo): List<BgTaskStatus?> {
+        condition.type ?: throw IllegalStateException("浠诲姟绫诲瀷涓嶈兘涓虹┖")
+        return backgroundTaskCtrl.shutDownTask(condition.type!!, condition.id)
+    }
+
+    override fun removeTask(condition: BgTaskConditionVo): Boolean {
+        condition.type ?: throw IllegalStateException("浠诲姟绫诲瀷涓嶈兘涓虹┖")
+        condition.id ?: throw IllegalStateException("浠诲姟id涓嶈兘涓虹┖")
+        return backgroundTaskCtrl.removeTask(condition.type!!, condition.id!!)
+    }
+
+    override fun startNewTestTask(taskId: String): BgTaskStatus? {
+        val task = backgroundTaskCtrl.startNewTask(BgTaskType.TEST, taskId, "娴嬭瘯浠诲姟-${taskId}") { testTask() }
+        return task.taskStatus
+    }
+
+    override fun newTestTask(taskId: String): BgTaskStatus? {
+        val task = backgroundTaskCtrl.newTask(BgTaskType.TEST, taskId, "娴嬭瘯浠诲姟-${taskId}") { testTask() }
+        return task.taskStatus
+    }
+
+    private fun testTask(): Boolean {
+        var times = 10
+        while (times > 0) {
+            Thread.sleep(2000)
+            times--
+        }
+        return true
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DomainitemServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DomainitemServiceImpl.kt
index 62c497c..4b27486 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DomainitemServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DomainitemServiceImpl.kt
@@ -82,12 +82,12 @@
 
     override fun getLocation(sceneType: Int): List<Domainitem> {
         val lId = when (sceneType.toString()) {
-            Constant.ScenseType.TYPE1.value -> Constant.INDUSTRY_LOCATION_ID
-            Constant.ScenseType.TYPE2.value -> Constant.WHARF_LOCATION_ID
-            Constant.ScenseType.TYPE14.value -> Constant.STORAGE_YARD_LOCATION_ID
-            Constant.ScenseType.TYPE3.value -> Constant.MIX_LOCATION_ID
-            Constant.ScenseType.TYPE5.value -> Constant.RESTAURANT_LOCATION_ID
-            Constant.ScenseType.TYPE6.value -> Constant.Vehicle_LOCATION_ID
+            Constant.SceneType.TYPE1.value -> Constant.INDUSTRY_LOCATION_ID
+            Constant.SceneType.TYPE2.value -> Constant.WHARF_LOCATION_ID
+            Constant.SceneType.TYPE14.value -> Constant.STORAGE_YARD_LOCATION_ID
+            Constant.SceneType.TYPE3.value -> Constant.MIX_LOCATION_ID
+            Constant.SceneType.TYPE5.value -> Constant.RESTAURANT_LOCATION_ID
+            Constant.SceneType.TYPE6.value -> Constant.Vehicle_LOCATION_ID
             else -> Constant.INDUSTRY_LOCATION_ID
         }
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt
index 43af688..f5fc097 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt
@@ -1,7 +1,11 @@
 package cn.flightfeather.supervision.lightshare.service.impl
 
 import cn.flightfeather.supervision.business.AutoScore2
-import cn.flightfeather.supervision.business.storage.StAutoScore
+import cn.flightfeather.supervision.business.autooutput.AopTaskCtrl
+import cn.flightfeather.supervision.business.autooutput.score.AopEvaluation
+import cn.flightfeather.supervision.common.executor.BackgroundTaskCtrl
+import cn.flightfeather.supervision.common.executor.BgTaskStatus
+import cn.flightfeather.supervision.common.executor.BgTaskType
 import cn.flightfeather.supervision.domain.ds1.entity.Domainitem
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluation
 import cn.flightfeather.supervision.domain.ds1.entity.Subtask
@@ -11,10 +15,12 @@
 import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.common.utils.DateUtil
 import cn.flightfeather.supervision.common.utils.Domain
+import cn.flightfeather.supervision.domain.ds1.repository.EvaluationRep
 import cn.flightfeather.supervision.lightshare.service.EvaluationService
 import cn.flightfeather.supervision.lightshare.service.SubtaskService
 import cn.flightfeather.supervision.lightshare.vo.AreaVo
-import cn.flightfeather.supervision.lightshare.vo.SubtaskVo
+import cn.flightfeather.supervision.lightshare.vo.AutoScoreResultVo
+import cn.flightfeather.supervision.lightshare.vo.BaseResponse
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 import tk.mybatis.mapper.entity.Example
@@ -22,7 +28,11 @@
 import kotlin.Comparator
 
 @Service
-class EvaluationServiceImpl(val evaluationMapper: EvaluationMapper) : EvaluationService {
+class EvaluationServiceImpl(
+    private val evaluationMapper: EvaluationMapper,
+    private val evaluationRep: EvaluationRep,
+    private val aopTaskCtrl: AopTaskCtrl,
+) : EvaluationService {
 
     @Autowired
     lateinit var subtaskService: SubtaskService
@@ -31,7 +41,7 @@
     @Autowired
     lateinit var subtaskMapper: SubtaskMapper
     @Autowired
-    lateinit var autoScore: StAutoScore
+    lateinit var aopEvaluation: AopEvaluation
     private var isAutoScoreRunning = false
 
     //鑾峰彇鏌愰《灞備换鍔′笅鏌愪釜鍦烘櫙鐨勮閬撹瘎鍒嗘帓鍚�
@@ -187,21 +197,6 @@
         return areaVolist
     }
 
-    override fun getTopTaskByScene(sceneId: String?): String? {
-        val example = Example(Evaluation::class.java)
-        val criteria = example.createCriteria()
-        criteria.andEqualTo("sguid", sceneId)
-        example.orderBy("evaluatetime").desc()
-        val evaluationlist = evaluationMapper.selectByExample(example)
-        var subtask = SubtaskVo()
-        if (evaluationlist.isNotEmpty()) {
-            val stguid = evaluationlist[0].stguid
-            if (stguid != null)
-                subtask = subtaskService.findByID(stguid)
-        }
-        return subtask.tguid
-    }
-
     override fun autoScore(districtCode: String, time: String): List<String> {
         val resultList = mutableListOf<String>()
 
@@ -251,9 +246,10 @@
     override fun autoScore3(tGuid: String, sceneTypeId: String): String {
         if (isAutoScoreRunning) return "鑷姩璇勫垎鎵ц涓紝璇风瓑寰呭畬鎴�"
         isAutoScoreRunning = true
-        val t = Constant.ScenseType.getByValue(sceneTypeId)
-        autoScore.sceneType = t
-        autoScore.topTaskGrade(tGuid)
+//        val t = Constant.ScenseType.getByValue(sceneTypeId)
+//        autoScore.sceneType = t
+//        autoScore.topTaskGrade(tGuid)
+        aopEvaluation.executeByTopTask(tGuid, sceneTypeId.toInt())
         isAutoScoreRunning = false
         return "鑷姩璇勫垎瀹屾垚"
     }
@@ -263,4 +259,14 @@
             createCriteria().andEqualTo("iguid", inspectionId)
         })
     }
+
+    override fun autoEvaluate(areaVo: AreaVo): BgTaskStatus? {
+        //鎵ц鑷姩璇勪及
+        return aopTaskCtrl.startNewTask(areaVo)
+    }
+
+    override fun findAutoEvaluation(areaVo: AreaVo): List<AutoScoreResultVo?>? {
+        //1. 鏌ユ壘鍘嗗彶璁板綍锛屾煡鐪嬭瘎浼版槸鍚﹀凡瀛樺湪
+        return evaluationRep.findAutoScore(areaVo)
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationruleServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationruleServiceImpl.kt
index 18aa474..8bee125 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationruleServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationruleServiceImpl.kt
@@ -2,12 +2,17 @@
 
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluationrule
 import cn.flightfeather.supervision.domain.ds1.mapper.EvaluationruleMapper
+import cn.flightfeather.supervision.domain.ds1.repository.EvaluationRuleRep
 import cn.flightfeather.supervision.lightshare.service.EvaluationruleService
+import cn.flightfeather.supervision.lightshare.vo.AreaEvaVo
 import org.springframework.stereotype.Service
 import tk.mybatis.mapper.entity.Example
 
 @Service
-class EvaluationruleServiceImpl(val evaluationruleMapper: EvaluationruleMapper) : EvaluationruleService {
+class EvaluationruleServiceImpl(
+    private val evaluationruleMapper: EvaluationruleMapper,
+    private val evaluationRuleRep: EvaluationRuleRep
+) : EvaluationruleService {
 
     override fun findOne(id: String): Evaluationrule{
         return evaluationruleMapper.selectByPrimaryKey(id)
@@ -30,4 +35,8 @@
         val evaluationrules = evaluationruleMapper.selectByExample(example)
         return if (evaluationrules.size>0) evaluationrules[0] else null
     }
+
+    override fun find(areaVo: AreaEvaVo): List<Evaluationrule?> {
+        return evaluationRuleRep.findBaseRule(areaVo)
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/InspectionServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/InspectionServiceImpl.kt
index b73efb9..37be34c 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/InspectionServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/InspectionServiceImpl.kt
@@ -29,6 +29,8 @@
     @Autowired
     lateinit var subtaskService: SubtaskService
 
+    private val dateUtil = DateUtil()
+
     //鑾峰彇姹℃煋鍦烘櫙鐗堟湰涓婚〉鐨勭洃绠℃儏鍐靛睍绀哄唴瀹�
     override fun getInspectionInfoByScene(sceneId: String, topTaskId: String): InspectionInfoVo {
         val maps = inspectionMapper.getInspectionInfoByScene(sceneId, topTaskId)
@@ -43,9 +45,10 @@
                 inspectionInfoVo.inspectionId = map["inspectionId"].toString()
                 inspectionInfoVo.subtaskId = map["subtaskId"].toString()
                 inspectionInfoVo.inspected = map["isInspected"].toString().equals("1")
-                inspectionInfoVo.inspectionTime = map["inspectionTime"].toString()
-                val time = inspectionInfoVo.inspectionTime
-                inspectionInfoVo.inspectionTime = time?.substring(0, time.length-11)
+                map["inspectionTime"]?.let {
+                    val time = it.toString()
+                    inspectionInfoVo.inspectionTime = dateUtil.StringToString(time, DateUtil.DateStyle.YYYY_MM_DD)
+                }
                 inspectionInfoVo.inspectionTimes = map["inspectionTimes"].toString().toInt()
                 inspectionInfoVo.promised = map["isPromised"].toString().equals("1")
                 inspectionInfoVo.changed = map["isChanged"].toString().equals("1")
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/LedgerServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/LedgerServiceImpl.kt
index f974ff8..c01a950 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/LedgerServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/LedgerServiceImpl.kt
@@ -62,7 +62,7 @@
                     val typeCount = ledgerSubTypeMapper.selectCountByExample(Example(LedgerSubType::class.java).apply {
                         createCriteria().andEqualTo(
                             "lScenetype",
-                            Constant.ScenseType.typeMap(sceneLedgerSummary.scene?.typeid)
+                            Constant.SceneType.typeMap(sceneLedgerSummary.scene?.typeid)
                         )
                             .andEqualTo("lNeedupdate", true)
                     })
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt
index 09bde16..19e54ff 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt
@@ -264,10 +264,10 @@
         sceneDetail.scense = scene
 
         val mapper = when (scene.typeid.toString()) {
-            Constant.ScenseType.TYPE1.value -> sceneConstructionSiteMapper
-            Constant.ScenseType.TYPE2.value -> sceneWharfMapper
-            Constant.ScenseType.TYPE3.value -> sceneMixingPlantMapper
-            Constant.ScenseType.TYPE14.value -> sceneStorageYardMapper
+            Constant.SceneType.TYPE1.value -> sceneConstructionSiteMapper
+            Constant.SceneType.TYPE2.value -> sceneWharfMapper
+            Constant.SceneType.TYPE3.value -> sceneMixingPlantMapper
+            Constant.SceneType.TYPE14.value -> sceneStorageYardMapper
             else -> null
         }
 
@@ -304,7 +304,7 @@
             var r = 0
             var isUpdate = true
             when (typeId.toString()) {
-                Constant.ScenseType.TYPE1.value -> {
+                Constant.SceneType.TYPE1.value -> {
                     val subScene = Gson().fromJson(sceneDetailStr.subScene, SceneConstructionSite::class.java)
                     if (subScene.getsGuid() != null) {
                         val record = sceneConstructionSiteMapper.selectByPrimaryKey(subScene.getsGuid())
@@ -316,7 +316,7 @@
                         }
                     }
                 }
-                Constant.ScenseType.TYPE2.value -> {
+                Constant.SceneType.TYPE2.value -> {
                     val subScene = Gson().fromJson(sceneDetailStr.subScene, SceneWharf::class.java)
                     if (subScene.getsGuid() != null) {
                         val record = sceneWharfMapper.selectByPrimaryKey(subScene.getsGuid())
@@ -328,7 +328,7 @@
                         }
                     }
                 }
-                Constant.ScenseType.TYPE3.value -> {
+                Constant.SceneType.TYPE3.value -> {
                     val subScene = Gson().fromJson(sceneDetailStr.subScene, SceneMixingPlant::class.java)
                     if (subScene.getsGuid() != null) {
                         val record = sceneMixingPlantMapper.selectByPrimaryKey(subScene.getsGuid())
@@ -340,7 +340,7 @@
                         }
                     }
                 }
-                Constant.ScenseType.TYPE14.value -> {
+                Constant.SceneType.TYPE14.value -> {
                     val subScene = Gson().fromJson(sceneDetailStr.subScene, SceneStorageYard::class.java)
                     if (subScene.getsGuid() != null) {
                         val record = sceneStorageYardMapper.selectByPrimaryKey(subScene.getsGuid())
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt
index 1cdc743..3070b2e 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt
@@ -22,9 +22,7 @@
 import java.io.File
 import java.io.FileInputStream
 import java.io.FileOutputStream
-import java.io.OutputStream
 import java.net.URLEncoder
-import java.nio.charset.Charset
 import java.nio.charset.StandardCharsets
 import java.util.*
 import javax.servlet.http.HttpServletResponse
@@ -519,7 +517,7 @@
         val task = taskService.getByDistrictCode(config.districtCode, config.startTime)?.takeIf { it.isNotEmpty() }?.get(0)
         config.topTaskGuid = task?.tguid ?: ""
         val dataSource = mutableListOf<DataSource>()
-        config.sceneType = Constant.ScenseType.TYPE1.value.toInt()
+        config.sceneType = Constant.SceneType.TYPE1.value.toInt()
         dataSource.add(DataSource(config, dbMapper))
 
 //        val config2 = config.copy(sceneType = Constant.ScenseType.TYPE2.value.toInt())
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt
index 1cebbb9..556871c 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt
@@ -1,8 +1,6 @@
 package cn.flightfeather.supervision.lightshare.service.impl
 
-import cn.flightfeather.supervision.business.storage.JinAnScore
-import cn.flightfeather.supervision.business.storage.StAutoScore
-import cn.flightfeather.supervision.business.storage.item.*
+import cn.flightfeather.supervision.business.autooutput.score.AopEvaluation
 import cn.flightfeather.supervision.domain.ds1.entity.*
 import cn.flightfeather.supervision.domain.ds1.mapper.*
 import cn.flightfeather.supervision.common.utils.Constant
@@ -24,20 +22,11 @@
 @Service
 class SubtaskServiceImpl(
     private val subtaskMapper: SubtaskMapper,
-    private val mpScoreItem_1: MpScoreItem_1,
-    private val mpScoreItem_2: MpScoreItem_2,
-    private val stScoreItem_1: StScoreItem_1,
-    private val whScoreItem_1: WhScoreItem_1,
-    private val whScoreItem_2: WhScoreItem_2,
-    private val jinAnScore: JinAnScore,
+    private val aopEvaluation: AopEvaluation,
 ) : SubtaskService {
 
     val dateUtil = DateUtil()
 
-    @Autowired
-    lateinit var scoreItem1: CsScoreItem_1
-    @Autowired
-    lateinit var scoreItem2: CsScoreItem_2
     @Autowired
     lateinit var taskService: TaskService
     @Autowired
@@ -71,7 +60,7 @@
         if (StringUtil.isNotEmpty(areaVo.towncode))
             criteria.andEqualTo("towncode", areaVo.towncode)
         criteria.andBetween("planstarttime", areaVo.starttime, areaVo.endtime)
-        if (!Objects.equals(userGuid, Constant.UserType.ALLUSER.text))
+        if (!Objects.equals(userGuid, Constant.UserType.ALL_USER.des))
             criteria.andLike("executorguids","%"+userGuid+"%")
         var completecount = 0
         var subtasklist = subtaskMapper.selectByExample(example)
@@ -479,20 +468,7 @@
             criteria.andEqualTo("stguid", subtask.stguid)
             val result = evaluationMapper.selectByExample(example)
             if (result.isEmpty()) {
-//                if (subtask.districtname == "寰愭眹鍖�") {
-//                    val autoScore = AutoScore2()
-//                    autoScore.subtask = subtask
-//                    autoScore.calculateScore()
-//                } else {
-//                    val autoScore = AutoScore()
-//                    autoScore.subtask = subtask
-//                    autoScore.calculateScore()
-//                }
-                val s = scenseMapper.selectByPrimaryKey(subtask.scenseid)
-                val autoScore = StAutoScore(scoreItem1, scoreItem2, mpScoreItem_1, mpScoreItem_2, stScoreItem_1,
-                    whScoreItem_1, whScoreItem_2, jinAnScore)
-                autoScore.sceneType = Constant.ScenseType.getByValue(s.typeid?.toString())
-                autoScore.sceneGrade(subtask)
+                aopEvaluation.executeBySubTask(subtask)
             }
         }
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/TaskServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/TaskServiceImpl.kt
index e80a61c..cb7885b 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/TaskServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/TaskServiceImpl.kt
@@ -8,6 +8,7 @@
 import cn.flightfeather.supervision.domain.ds1.mapper.TaskMapper
 import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.common.utils.DateUtil
+import cn.flightfeather.supervision.domain.ds1.repository.TaskRep
 import cn.flightfeather.supervision.lightshare.service.EvaluationService
 import cn.flightfeather.supervision.lightshare.service.SubtaskService
 import cn.flightfeather.supervision.lightshare.service.TaskService
@@ -21,7 +22,7 @@
 import kotlin.collections.ArrayList
 
 @Service
-class TaskServiceImpl(val taskMapper: TaskMapper) : TaskService {
+class TaskServiceImpl(val taskMapper: TaskMapper, private val taskRep: TaskRep,) : TaskService {
 
     @Autowired
     lateinit var subtaskService: SubtaskService
@@ -725,4 +726,7 @@
         return taskProgressVolist
     }
 
+    override fun findTask(areaVo: AreaVo): List<Task?> {
+        return taskRep.findTasks(areaVo)
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AreaEvaVo.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AreaEvaVo.kt
new file mode 100644
index 0000000..50bf37d
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AreaEvaVo.kt
@@ -0,0 +1,12 @@
+package cn.flightfeather.supervision.lightshare.vo
+
+import com.fasterxml.jackson.annotation.JsonInclude
+
+/**
+ * 璇勪及瑙勫垯鏌ヨ鏉′欢
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+class AreaEvaVo : AreaVo() {
+    // 璇勪及瑙勫垯绫诲瀷锛�1锛氬贰鏌ユ儏鍐佃瘎浼帮紱99锛氳嚜鍔ㄨ瘎浼�
+    var taskTypeId: Int = 1
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AreaVo.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AreaVo.kt
index feb7ec6..7531298 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AreaVo.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AreaVo.kt
@@ -3,7 +3,7 @@
 import com.fasterxml.jackson.annotation.JsonInclude
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
-class AreaVo{
+open class AreaVo{
 
     var provincecode: String? = null
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AutoScoreResultVo.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AutoScoreResultVo.kt
new file mode 100644
index 0000000..335e3e1
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/AutoScoreResultVo.kt
@@ -0,0 +1,24 @@
+package cn.flightfeather.supervision.lightshare.vo
+
+import cn.flightfeather.supervision.domain.ds1.entity.Evaluation
+import cn.flightfeather.supervision.domain.ds1.entity.Itemevaluation
+import cn.flightfeather.supervision.domain.ds1.entity.Subtask
+import java.util.*
+
+/**
+ * 鑷姩璇勪及缁撴灉
+ */
+class AutoScoreResultVo {
+    var userId: String? = null
+    var userName: String? = null
+    var sceneId: String? = null
+    var sceneName: String? = null
+    var pName: String? = null
+    var cName: String? = null
+    var dName: String? = null
+    var tName: String? = null
+    var subTaskId:String? = null
+    var subTaskTime: Date? = null
+    var evaluation: Evaluation? = null
+    var itemEvaluations: List<Itemevaluation?>? = null
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/BaseResponse.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/BaseResponse.kt
index bc876f8..b0f1806 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/BaseResponse.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/BaseResponse.kt
@@ -18,15 +18,15 @@
         var message: String = "",
         val head: DataHead? = null,
         @ApiModelProperty("璇锋眰杩斿洖鏁版嵁")
-        val data: T? = null
-){
-        init {
-                if (message.isBlank()) {
-                        message = if (success) {
-                                "璇锋眰鎴愬姛"
-                        } else {
-                                "璇锋眰澶辫触"
-                        }
-                }
+        val data: T? = null,
+) {
+    init {
+        if (message.isBlank()) {
+            message = if (success) {
+                "璇锋眰鎴愬姛"
+            } else {
+                "璇锋眰澶辫触"
+            }
         }
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BaseResPack.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BaseResPack.kt
new file mode 100644
index 0000000..ac7f6e1
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BaseResPack.kt
@@ -0,0 +1,25 @@
+package cn.flightfeather.supervision.lightshare.web
+
+import cn.flightfeather.supervision.lightshare.vo.BaseResponse
+import cn.flightfeather.supervision.lightshare.vo.DataHead
+
+/**
+ * 鍖呰鎺ュ彛杩斿洖缁撴灉
+ */
+fun resPack(service: () -> Any?): BaseResponse<Any> {
+    return try {
+        val res = service()
+        if (res is Pair<*, *>) {
+            val head = res.first
+            if (head is DataHead) {
+                BaseResponse(true, head = head, data = res.second)
+            } else {
+                BaseResponse(true, data = res.second)
+            }
+        } else {
+            BaseResponse(true, data = res)
+        }
+    } catch (e: Exception) {
+        BaseResponse(false, message = e.message ?: "")
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BgTaskController.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BgTaskController.kt
new file mode 100644
index 0000000..5db3784
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BgTaskController.kt
@@ -0,0 +1,37 @@
+package cn.flightfeather.supervision.lightshare.web
+
+import cn.flightfeather.supervision.common.executor.BgTaskConditionVo
+import cn.flightfeather.supervision.lightshare.service.BgTaskService
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+import org.springframework.web.bind.annotation.*
+
+@Api(tags = ["BgTaskController"], description = "鍚庡彴鑰楁椂浠诲姟API鎺ュ彛")
+@RestController
+@RequestMapping("/bgTask")
+class BgTaskController(val bgTaskService: BgTaskService){
+
+    @ApiOperation(value = "鑾峰彇鍚庡彴浠诲姟鐘舵��")
+    @PostMapping("/status")
+    fun getTaskStatus(@RequestBody condition: BgTaskConditionVo) = resPack { bgTaskService.getTaskStatus(condition) }
+
+    @ApiOperation(value = "杩愯涓�涓换鍔�")
+    @PutMapping("/start")
+    fun startTask(@RequestBody condition: BgTaskConditionVo) = resPack { bgTaskService.startTask(condition) }
+
+    @ApiOperation(value = "寮哄埗鍏抽棴浠诲姟")
+    @PutMapping("/shutDown")
+    fun shutDownTask(@RequestBody condition: BgTaskConditionVo) = resPack { bgTaskService.shutDownTask(condition) }
+
+    @ApiOperation(value = "绉婚櫎涓�涓换鍔�")
+    @PutMapping("/remove")
+    fun removeTask(@RequestBody condition: BgTaskConditionVo) = resPack { bgTaskService.removeTask(condition) }
+
+    @ApiOperation(value = "鏂板缓骞惰繍琛屼竴涓祴璇曚换鍔�")
+    @PutMapping("/newTask/test/start")
+    fun startNewTestTask(@RequestParam taskId: String) = resPack { bgTaskService.startNewTestTask(taskId) }
+
+    @ApiOperation(value = "鏂板缓涓�涓祴璇曚换鍔�")
+    @PutMapping("/newTask/test")
+    fun newTestTask(@RequestParam taskId: String) = resPack { bgTaskService.newTestTask(taskId) }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationController.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationController.kt
index 1bc358c..c857357 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationController.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationController.kt
@@ -2,7 +2,9 @@
 
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluation
 import cn.flightfeather.supervision.lightshare.service.EvaluationService
+import cn.flightfeather.supervision.lightshare.vo.AreaVo
 import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
 import org.springframework.web.bind.annotation.*
 
 @Api(tags = ["EvaluationController"], description = "璇勪及鎬诲垎API鎺ュ彛")
@@ -25,27 +27,42 @@
     fun delete(@PathVariable id: String) = evaluationService.delete(id)
 
     @GetMapping("/rankofscense")
-    fun getRankOfScense(@RequestParam(value = "tguid", required = true) tguid: String,
-                        @RequestParam(value = "scensetypeid", required = false) scensetypeid: String?,
-                        @RequestParam(value = "ruletypeid", required = false) ruletypeid: ByteArray?) = evaluationService.getRankOfSense(tguid, scensetypeid, ruletypeid)
+    fun getRankOfScense(
+        @RequestParam(value = "tguid", required = true) tguid: String,
+        @RequestParam(value = "scensetypeid", required = false) scensetypeid: String?,
+        @RequestParam(value = "ruletypeid", required = false) ruletypeid: ByteArray?,
+    ) = evaluationService.getRankOfSense(tguid, scensetypeid, ruletypeid)
 
     @GetMapping("/rankoftown")
-    fun getRankOfTown(@RequestParam(value = "tguid", required = true) tguid: String,
-                      @RequestParam(value = "scensetypeid", required = false) scensetypeid: String?) = evaluationService.getRankOfTown(tguid, scensetypeid)
+    fun getRankOfTown(
+        @RequestParam(value = "tguid", required = true) tguid: String,
+        @RequestParam(value = "scensetypeid", required = false) scensetypeid: String?,
+    ) = evaluationService.getRankOfTown(tguid, scensetypeid)
 
     @GetMapping("/autoScore")
-    fun autoScore(@RequestParam(value = "districtCode") districtCode: String,
-                  @RequestParam(value = "time") time: String) = evaluationService.autoScore(districtCode, time)
+    fun autoScore(
+        @RequestParam(value = "districtCode") districtCode: String,
+        @RequestParam(value = "time") time: String,
+    ) = evaluationService.autoScore(districtCode, time)
 
     @GetMapping("/autoScore3")
     fun autoScore3(
         @RequestParam(value = "topTaskId") tGuid: String,
-        @RequestParam(value = "sceneTypeId") sceneTypeId: String
+        @RequestParam(value = "sceneTypeId") sceneTypeId: String,
     ) = evaluationService.autoScore3(tGuid, sceneTypeId)
 
     @PostMapping("/autoScore")
     fun autoScore2(@RequestParam(value = "subTaskId") subTaskId: String) = evaluationService.autoScore2(subTaskId)
 
     @GetMapping("/byInspection")
-    fun findByInspectionId(@RequestParam("inspectionId") inspectionId: String) = evaluationService.findByInspectionId(inspectionId)
+    fun findByInspectionId(@RequestParam("inspectionId") inspectionId: String) =
+        evaluationService.findByInspectionId(inspectionId)
+
+    @ApiOperation(value = "鏍规嵁鍖哄煙鑼冨洿鑷姩璇勪及")
+    @PostMapping("/auto")
+    fun autoEvaluate(@RequestBody areaVo: AreaVo) = resPack { evaluationService.autoEvaluate(areaVo) }
+
+    @ApiOperation(value = "鏍规嵁鍖哄煙鑼冨洿鑾峰彇鑷姩璇勪及鍘嗗彶璁板綍")
+    @PostMapping("/auto/record")
+    fun findAutoEvaluation(@RequestBody areaVo: AreaVo) = resPack { evaluationService.findAutoEvaluation(areaVo) }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationruleController.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationruleController.kt
index 6ce62ef..1f72cd9 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationruleController.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/EvaluationruleController.kt
@@ -2,6 +2,8 @@
 
 import cn.flightfeather.supervision.domain.ds1.entity.Evaluationrule
 import cn.flightfeather.supervision.lightshare.service.EvaluationruleService
+import cn.flightfeather.supervision.lightshare.vo.AreaEvaVo
+import cn.flightfeather.supervision.lightshare.vo.AreaVo
 import io.swagger.annotations.Api
 import org.springframework.web.bind.annotation.*
 
@@ -23,4 +25,7 @@
 
     @DeleteMapping("/{id}")
     fun delete (@PathVariable id: String) = evaluationruleService.delete(id)
+
+    @PostMapping("/find")
+    fun find(@RequestBody areaVo: AreaEvaVo) = resPack { evaluationruleService.find(areaVo) }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/TaskController.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/TaskController.kt
index 5920dda..fcc2943 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/TaskController.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/TaskController.kt
@@ -2,6 +2,7 @@
 
 import cn.flightfeather.supervision.domain.ds1.entity.Task
 import cn.flightfeather.supervision.lightshare.service.TaskService
+import cn.flightfeather.supervision.lightshare.vo.AreaVo
 import io.swagger.annotations.Api
 import org.springframework.web.bind.annotation.*
 
@@ -61,4 +62,7 @@
     fun getRank(@RequestParam(value = "id", required = true) id: String,
                 @RequestParam(value = "curSceneTypeId", required = true) sceneTypeId: String,
                 @RequestParam(value = "sceneId", required = false) sceneId: String?) = taskService.getRank(id, sceneTypeId, sceneId)
+
+    @PostMapping("/find")
+    fun findTask(@RequestBody areaVo: AreaVo) = resPack { taskService.findTask(areaVo) }
 }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index f03bef2..89c651c 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -1,3 +1,16 @@
+spring:
+  datasource:
+    ds1:
+      #-鏈湴娴嬭瘯鏈嶅姟鍣�-
+      url: jdbc:mysql://localhost:3306/supervision?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
+      username: root
+      password: 123456
+    ds2:
+      # 鏈湴娴嬭瘯
+      url: jdbc:mysql://localhost:3306/ledger?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
+      username: root
+      password: 123456
+
 springfox:
   documentation:
     swagger:
diff --git a/src/main/resources/application-pro.yml b/src/main/resources/application-pro.yml
index 135277d..3aafb8b 100644
--- a/src/main/resources/application-pro.yml
+++ b/src/main/resources/application-pro.yml
@@ -1,7 +1,14 @@
-springfox:
-  documentation:
-    swagger:
-      v2:
-        enabled: false
+spring:
+  datasource:
+    ds1:
+      #-鍙戝竷鏈嶅姟鍣�-
+      url: jdbc:mysql://localhost:3306/supervision?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
+      username: supervision
+      password: supervision_feiyu2021
+    ds2:
+      #-鍙戝竷鏈嶅姟鍣�-
+      url: jdbc:mysql://localhost:3306/ledger?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
+      username: ledger
+      password: ledger_fxxchackxr
 
 
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
new file mode 100644
index 0000000..69cabda
--- /dev/null
+++ b/src/main/resources/application-test.yml
@@ -0,0 +1,28 @@
+spring:
+  datasource:
+    ds1:
+      #-灞�鍩熺綉鏈嶅姟鍣�-
+      #    url: jdbc:mysql://192.168.0.200:3306/supervision?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
+      #    username: root
+      #    password: cn.FLIGHTFEATHER
+
+      #-鐜鐫e療娴嬭瘯鏈嶅姟鍣�-
+      #      url: jdbc:mysql://192.168.0.200:3306/supervision_ii?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
+      #      username: root
+      #      password: cn.FLIGHTFEATHER
+
+      #-杩滅▼娴嬭瘯鏈嶅姟鍣�-
+      url: jdbc:mysql://47.100.191.150:3306/supervision?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
+      username: remoteU1
+      password: eSoF8DnzfGTlhAjE
+    ds2:
+      #-杩滅▼娴嬭瘯鏈嶅姟鍣�-
+      url: jdbc:mysql://47.100.191.150:3306/ledger?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
+      username: remoteU1
+      password: eSoF8DnzfGTlhAjE
+
+springfox:
+  documentation:
+    swagger:
+      v2:
+        enabled: true
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index cf2f525..fe97bae 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -3,31 +3,6 @@
     ds1:
       type: com.alibaba.druid.pool.DruidDataSource
       driver-class-name: com.mysql.jdbc.Driver
-      #-鏈湴娴嬭瘯鏈嶅姟鍣�-
-  #    username: root
-  #    password: 123456
-  #    url: jdbc:mysql://localhost:3306/supervision?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
-
-      #-灞�鍩熺綉鏈嶅姟鍣�-
-  #    url: jdbc:mysql://192.168.0.200:3306/supervision?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
-  #    username: root
-  #    password: cn.FLIGHTFEATHER
-
-      #-杩滅▼娴嬭瘯鏈嶅姟鍣�-
-      url: jdbc:mysql://47.100.191.150:3306/supervision?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
-      username: remoteU1
-      password: eSoF8DnzfGTlhAjE
-
-      #-鍙戝竷鏈嶅姟鍣�-
-#      url: jdbc:mysql://localhost:3306/supervision?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
-#      username: supervision
-#      password: supervision_feiyu2021
-
-      #-鐜鐫e療娴嬭瘯鏈嶅姟鍣�-
-#      url: jdbc:mysql://192.168.0.200:3306/supervision_ii?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
-#      username: root
-#      password: cn.FLIGHTFEATHER
-
       initialSize: 5
       minIdle: 5
       maxWait: 60000
@@ -45,17 +20,6 @@
     ds2:
       type: com.alibaba.druid.pool.DruidDataSource
       driver-class-name: com.mysql.jdbc.Driver
-
-      #-鍙戝竷鏈嶅姟鍣�-
-#      url: jdbc:mysql://localhost:3306/ledger?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
-#      username: ledger
-#      password: ledger_fxxchackxr
-
-      #   寮�鍙戣繙绋嬫湇鍔″櫒
-      url: jdbc:mysql://47.100.191.150:3306/ledger?serverTimezone=Asia/Shanghai&prepStmtCacheSize=517&cachePrepStmts=true&autoReconnect=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
-      username: remoteU1
-      password: eSoF8DnzfGTlhAjE
-
       initialSize: 5
       minIdle: 5
       maxWait: 60000
@@ -100,7 +64,7 @@
       request-timeout: 20s
 
   profiles:
-    active: '@profileActive@'
+    active: @profileActive@
   jmx:
     default-domain: ETSupervision
 
@@ -125,5 +89,5 @@
   documentation:
     swagger:
       v2:
-        enabled: true
+        enabled: false
 
diff --git a/src/main/resources/generator/generatorConfig4ds1.xml b/src/main/resources/generator/generatorConfig4ds1.xml
index ab95faf..4056ebf 100644
--- a/src/main/resources/generator/generatorConfig4ds1.xml
+++ b/src/main/resources/generator/generatorConfig4ds1.xml
@@ -41,31 +41,6 @@
             <property name="enableSubPackages" value="true"/>
         </javaClientGenerator>
         <!-- 瑕佺敓鎴愮殑琛� tableName鏄暟鎹簱涓殑琛ㄥ悕鎴栬鍥惧悕 domainObjectName鏄疄浣撶被鍚�-->
-        <!--<table tableName="adm_dept" domainObjectName="Department" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="adm_group" domainObjectName="UserGroup" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="adm_groupuserright" domainObjectName="GroupUserRight" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="adm_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="usertable" domainObjectName="UserTable" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="adm_groupuser" domainObjectName="GroupUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="adm_rights" domainObjectName="Rights" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="province" domainObjectName="Province" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="city" domainObjectName="City" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="town" domainObjectName="Town" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="projectinfo" domainObjectName="ProjectInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="siteinfo" domainObjectName="SiteInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="station_alertvalue_config" domainObjectName="StationAlertvalueConfig" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="company" domainObjectName="Company" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="vprinfo" domainObjectName="Vprinfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="devinfo" domainObjectName="Devinfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="frontendconfig_new" domainObjectName="FrontendConfig" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="munitevalue" domainObjectName="MuniteValue" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="hourvalue" domainObjectName="HourValue" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-		<!--<table tableName="dayvalue" domainObjectName="DayValue" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-        <!--<table tableName="t_stationgroup" domainObjectName="StationGroup" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-        <!--<table tableName="t_addressee" domainObjectName="Addressee" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-        <!--<table tableName="t_smstemplate" domainObjectName="SMSTemplate" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-        <!--<table tableName="t_smsrecord" domainObjectName="SMSRecord" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
-        <!--<table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
         <!--<table tableName="sm_t_changeadvice" domainObjectName="ChangeAdvice" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
         <!--<table tableName="sm_t_changeeffect" domainObjectName="ChangeEffect" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
         <!--<table tableName="sm_t_monitorobjectversion" domainObjectName="Monitorobjectversion" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
@@ -79,7 +54,9 @@
 <!--        <table tableName="sm_t_score" domainObjectName="Score" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
 <!--        <table tableName="sm_t_scense" domainObjectName="Scense" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
 <!--        <table tableName="ea_t_mediafile" domainObjectName="LedgerMediaFile" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>-->
-        <table tableName="ea_t_dust_data_result" domainObjectName="DustDataResult" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
+<!--        <table tableName="ea_t_dust_data_result" domainObjectName="DustDataResult" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"-->
+<!--               enableSelectByExample="false" selectByExampleQueryId="false"/>-->
+        <table tableName="ea_t_evaluation" domainObjectName="Evaluation" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
                enableSelectByExample="false" selectByExampleQueryId="false"/>
     </context>
 </generatorConfiguration>
\ No newline at end of file
diff --git a/src/main/resources/generator/generatorConfig4ds3.xml b/src/main/resources/generator/generatorConfig4ds3.xml
index 62b3f23..0492f17 100644
--- a/src/main/resources/generator/generatorConfig4ds3.xml
+++ b/src/main/resources/generator/generatorConfig4ds3.xml
@@ -43,8 +43,20 @@
             <property name="enableSubPackages" value="true"/>
         </javaClientGenerator>
         <!-- 瑕佺敓鎴愮殑琛� tableName鏄暟鎹簱涓殑琛ㄥ悕鎴栬鍥惧悕 domainObjectName鏄疄浣撶被鍚�-->
-        <table tableName="fm_web_analysis_data" domainObjectName="FumeDailyAnalysis" enableCountByExample="false"
-               enableUpdateByExample="false" enableDeleteByExample="false"
-               enableSelectByExample="false" selectByExampleQueryId="false"/>
+<!--        <table tableName="fm_web_analysis_data" domainObjectName="FumeDailyAnalysis" enableCountByExample="false"-->
+<!--               enableUpdateByExample="false" enableDeleteByExample="false"-->
+<!--               enableSelectByExample="false" selectByExampleQueryId="false"/>-->
+<!--        <table tableName="fu_xh_t_site_map" domainObjectName="FumeSiteMap" enableCountByExample="false"-->
+<!--               enableUpdateByExample="false" enableDeleteByExample="false"-->
+<!--               enableSelectByExample="false" selectByExampleQueryId="false"/>-->
+            <table tableName="abnormal_data" domainObjectName="FumeExceptionData" enableCountByExample="false"
+                   enableUpdateByExample="false" enableDeleteByExample="false"
+                   enableSelectByExample="false" selectByExampleQueryId="false"/>
+<!--        <table tableName="ja_t_dust_site_data_info" domainObjectName="JSDustData" enableCountByExample="false"-->
+<!--               enableUpdateByExample="false" enableDeleteByExample="false"-->
+<!--               enableSelectByExample="false" selectByExampleQueryId="false"/>-->
+<!--        <table tableName="du_js_t_site_map" domainObjectName="JSDustSiteMap" enableCountByExample="false"-->
+<!--               enableUpdateByExample="false" enableDeleteByExample="false"-->
+<!--               enableSelectByExample="false" selectByExampleQueryId="false"/>-->
     </context>
 </generatorConfiguration>
\ No newline at end of file
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 2230703..b996538 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -63,10 +63,10 @@
 			<appender-ref ref="Console"/>
 		</logger>
 		<logger name="org.mybatis" level="DEBUG">
-			<appender-ref ref="Console"/>
+<!--			<appender-ref ref="Console"/>-->
 		</logger>
 		<logger name="org.apache.ibatis" level="DEBUG">
-			<appender-ref ref="Console"/>
+<!--			<appender-ref ref="Console"/>-->
 		</logger>
 
 		<logger name="cn.flightfeather.supervision" level="INFO" includeLocation="true" additivity="false">
diff --git a/src/main/resources/mapper/ds1/EvaluationMapper.xml b/src/main/resources/mapper/ds1/EvaluationMapper.xml
new file mode 100644
index 0000000..cc53dd8
--- /dev/null
+++ b/src/main/resources/mapper/ds1/EvaluationMapper.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.flightfeather.supervision.domain.ds1.mapper.EvaluationMapper">
+  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.ds1.entity.Evaluation">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="E_GUID" jdbcType="VARCHAR" property="guid" />
+    <result column="I_GUID" jdbcType="VARCHAR" property="iguid" />
+    <result column="ST_GUID" jdbcType="VARCHAR" property="stguid" />
+    <result column="S_GUID" jdbcType="VARCHAR" property="sguid" />
+    <result column="E_ScenseTypeID" jdbcType="TINYINT" property="scensetypeid" />
+    <result column="E_ScenseType" jdbcType="VARCHAR" property="scensetype" />
+    <result column="E_SubScenseTypeID" jdbcType="TINYINT" property="subscensetypeid" />
+    <result column="E_SubScenseType" jdbcType="VARCHAR" property="subscensetype" />
+    <result column="E_ERType" jdbcType="TINYINT" property="ertype" />
+    <result column="E_ProvinceCode" jdbcType="VARCHAR" property="provincecode" />
+    <result column="E_ProvinceName" jdbcType="VARCHAR" property="provincename" />
+    <result column="E_CityCode" jdbcType="VARCHAR" property="citycode" />
+    <result column="E_CityName" jdbcType="VARCHAR" property="cityname" />
+    <result column="E_DistrictCode" jdbcType="VARCHAR" property="districtcode" />
+    <result column="E_DistrictName" jdbcType="VARCHAR" property="districtname" />
+    <result column="E_TownCode" jdbcType="VARCHAR" property="towncode" />
+    <result column="E_TownName" jdbcType="VARCHAR" property="townname" />
+    <result column="E_ScenseName" jdbcType="VARCHAR" property="scensename" />
+    <result column="E_ScenseAddress" jdbcType="VARCHAR" property="scenseaddress" />
+    <result column="E_EvaluateTime" jdbcType="TIMESTAMP" property="evaluatetime" />
+    <result column="E_EvaluatorGUID" jdbcType="VARCHAR" property="evaluatorguid" />
+    <result column="E_EvaluatoruserName" jdbcType="VARCHAR" property="evaluatorusername" />
+    <result column="E_EvaluatorRealName" jdbcType="VARCHAR" property="evaluatorrealname" />
+    <result column="E_ResultStandardBef" jdbcType="VARCHAR" property="resultstandardbef" />
+    <result column="E_ResultScoreBef" jdbcType="VARCHAR" property="resultscorebef" />
+    <result column="E_PromissedNum" jdbcType="INTEGER" property="promissednum" />
+    <result column="E_ChangedNum" jdbcType="INTEGER" property="changednum" />
+    <result column="ResultStandardAft" jdbcType="VARCHAR" property="resultstandardaft" />
+    <result column="E_ResultScoreAft" jdbcType="VARCHAR" property="resultscoreaft" />
+    <result column="E_CreateDate" jdbcType="TIMESTAMP" property="createdate" />
+    <result column="E_UpdateDate" jdbcType="TIMESTAMP" property="updatedate" />
+    <result column="E_Extension1" jdbcType="VARCHAR" property="extension1" />
+    <result column="E_Extension2" jdbcType="VARCHAR" property="extension2" />
+    <result column="E_Extension3" jdbcType="VARCHAR" property="extension3" />
+    <result column="E_Remark" jdbcType="VARCHAR" property="remark" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    E_GUID, I_GUID, ST_GUID, S_GUID, E_ScenseTypeID, E_ScenseType, E_SubScenseTypeID,
+    E_SubScenseType, E_ERType, E_ProvinceCode, E_ProvinceName, E_CityCode, E_CityName,
+    E_DistrictCode, E_DistrictName, E_TownCode, E_TownName, E_ScenseName, E_ScenseAddress,
+    E_EvaluateTime, E_EvaluatorGUID, E_EvaluatoruserName, E_EvaluatorRealName, E_ResultStandardBef,
+    E_ResultScoreBef, E_PromissedNum, E_ChangedNum, ResultStandardAft, E_ResultScoreAft,
+    E_CreateDate, E_UpdateDate, E_Extension1, E_Extension2, E_Extension3, E_Remark
+  </sql>
+
+  <resultMap id="AutoScoreResultMap" type="cn.flightfeather.supervision.lightshare.vo.AutoScoreResultVo">
+    <result column="userId" jdbcType="VARCHAR" property="userId"/>
+    <result column="userName" jdbcType="VARCHAR" property="userName"/>
+    <result column="sceneId" jdbcType="VARCHAR" property="sceneId"/>
+    <result column="sceneName" jdbcType="VARCHAR" property="sceneName"/>
+    <result column="pName" jdbcType="VARCHAR" property="pName"/>
+    <result column="cName" jdbcType="VARCHAR" property="cName"/>
+    <result column="dName" jdbcType="VARCHAR" property="dName"/>
+    <result column="tName" jdbcType="VARCHAR" property="tName"/>
+    <result column="subTaskId" jdbcType="VARCHAR" property="subTaskId"/>
+    <result column="planstarttime" property="subTaskTime" jdbcType="TIMESTAMP" />
+    <association property="evaluation" resultMap="BaseResultMap" />
+  </resultMap>
+
+  <select id="findEvaluation" resultMap="AutoScoreResultMap">
+    SELECT
+    c.UI_GUID AS userId,
+    c.UI_RealName AS userName,
+    b.S_GUID AS sceneId,
+    b.S_Name AS sceneName,
+    b.S_ProvinceName AS pName,
+    b.S_CityName AS cName,
+    b.S_DistrictName AS dName,
+    b.S_TownName AS tName,
+    d.ST_GUID AS subTaskId,
+    d.ST_PlanStartTime AS planstarttime,
+    e.*
+    FROM
+    (SELECT * FROM sm_t_monitorobjectversion WHERE T_ID = #{topTaskId} )AS a
+    LEFT JOIN sm_t_scense AS b ON a.S_GUID = b.S_GUID
+    LEFT JOIN sm_t_userinfo AS c ON b.S_GUID = c.D_GUID
+    LEFT JOIN (SELECT * FROM tm_t_subtask WHERE T_GUID = #{topTaskId}) AS d ON a.S_GUID = d.ST_ScenseID
+    LEFT JOIN ea_t_evaluation AS e ON d.ST_GUID = e.ST_GUID
+    WHERE
+    b.S_TypeID = #{sceneTypeId}
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/ds2/OverallEvaluationMapper.xml b/src/main/resources/mapper/ds2/OverallEvaluationMapper.xml
new file mode 100644
index 0000000..9a85d85
--- /dev/null
+++ b/src/main/resources/mapper/ds2/OverallEvaluationMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.flightfeather.supervision.domain.ds2.mapper.OverallEvaluationMapper">
+  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.ds2.entity.OverallEvaluation">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="OE_GUID" jdbcType="INTEGER" property="oeGuid" />
+    <result column="BI_GUID" jdbcType="VARCHAR" property="biGuid" />
+    <result column="OE_Score" jdbcType="INTEGER" property="oeScore" />
+    <result column="OE_Publish_Time" jdbcType="TIMESTAMP" property="oePublishTime" />
+    <result column="OE_Update_Time" jdbcType="TIMESTAMP" property="oeUpdateTime" />
+    <result column="OE_Scene_Type_Id" jdbcType="TINYINT" property="oeSceneTypeId" />
+    <result column="OE_Scene_Type" jdbcType="VARCHAR" property="oeSceneType" />
+    <result column="OE_Period" jdbcType="VARCHAR" property="oePeriod" />
+    <result column="OE_Code_Level" jdbcType="TINYINT" property="oeCodeLevel" />
+    <result column="OE_Start_Time" jdbcType="DATE" property="oeStartTime" />
+    <result column="OE_End_Time" jdbcType="DATE" property="oeEndTime" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    OE_GUID, BI_GUID, OE_Score, OE_Publish_Time, OE_Update_Time, OE_Scene_Type_Id, OE_Scene_Type, 
+    OE_Period, OE_Code_Level, OE_Start_Time, OE_End_Time
+  </sql>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/ds3/FumeSiteMapMapper.xml b/src/main/resources/mapper/ds3/FumeSiteMapMapper.xml
new file mode 100644
index 0000000..a963381
--- /dev/null
+++ b/src/main/resources/mapper/ds3/FumeSiteMapMapper.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.flightfeather.supervision.domain.ds3.mapper.FumeSiteMapMapper" >
+  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.ds3.entity.FumeSiteMap" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="Id" property="id" jdbcType="INTEGER" />
+    <result column="TZ_User_Id" property="tzUserId" jdbcType="VARCHAR" />
+    <result column="TZ_User_Name" property="tzUserName" jdbcType="VARCHAR" />
+    <result column="XH_Device_Code" property="xhDeviceCode" jdbcType="VARCHAR" />
+    <result column="XH_Device_Name" property="xhDeviceName" jdbcType="VARCHAR" />
+    <result column="SV_User_Id" property="svUserId" jdbcType="VARCHAR" />
+    <result column="SV_User_Name" property="svUserName" jdbcType="VARCHAR" />
+    <result column="Create_Time" property="createTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    Id, TZ_User_Id, TZ_User_Name, XH_Device_Code, XH_Device_Name, SV_User_Id, SV_User_Name, 
+    Create_Time
+  </sql>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/ds3/JSDustDataMapper.xml b/src/main/resources/mapper/ds3/JSDustDataMapper.xml
new file mode 100644
index 0000000..644282b
--- /dev/null
+++ b/src/main/resources/mapper/ds3/JSDustDataMapper.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.flightfeather.supervision.domain.ds3.mapper.JSDustDataMapper" >
+  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.ds3.entity.JSDustData" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="mn_code" property="mnCode" jdbcType="VARCHAR" />
+    <result column="dust_value" property="dustValue" jdbcType="DOUBLE" />
+    <result column="noise_value" property="noiseValue" jdbcType="DOUBLE" />
+    <result column="lst" property="lst" jdbcType="TIMESTAMP" />
+    <result column="quality" property="quality" jdbcType="VARCHAR" />
+    <result column="grade" property="grade" jdbcType="INTEGER" />
+    <result column="flag" property="flag" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    id, mn_code, dust_value, noise_value, lst, quality, grade, flag
+  </sql>
+
+  <select id="getDataBySceneType" resultMap="BaseResultMap">
+    SELECT a.* FROM
+    (SELECT
+    *
+    FROM
+    ja_t_dust_site_data_info
+    <where>
+      flag = 'N'
+      <if test="st != null">
+        AND lst >= #{st}
+      </if>
+      <if test="et != null">
+        AND lst &lt;= #{et}
+      </if>
+    </where>
+    LIMIT #{startIndex}, #{perPage}
+    ) AS a
+    LEFT JOIN ja_t_dust_site_info AS b ON a.mn_code = b.mn_code
+    WHERE b.type_id = #{sceneType}
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/ds3/JSDustSiteMapMapper.xml b/src/main/resources/mapper/ds3/JSDustSiteMapMapper.xml
new file mode 100644
index 0000000..47a014a
--- /dev/null
+++ b/src/main/resources/mapper/ds3/JSDustSiteMapMapper.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.flightfeather.supervision.domain.ds3.mapper.JSDustSiteMapMapper" >
+  <resultMap id="BaseResultMap" type="cn.flightfeather.supervision.domain.ds3.entity.JSDustSiteMap" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="Id" property="id" jdbcType="INTEGER" />
+    <result column="TZ_User_Id" property="tzUserId" jdbcType="VARCHAR" />
+    <result column="TZ_User_Name" property="tzUserName" jdbcType="VARCHAR" />
+    <result column="JS_Device_Code" property="jsDeviceCode" jdbcType="VARCHAR" />
+    <result column="JS_Device_Name" property="jsDeviceName" jdbcType="VARCHAR" />
+    <result column="SV_User_Id" property="svUserId" jdbcType="VARCHAR" />
+    <result column="SV_User_Name" property="svUserName" jdbcType="VARCHAR" />
+    <result column="Create_Time" property="createTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--
+      WARNING - @mbg.generated
+    -->
+    Id, TZ_User_Id, TZ_User_Name, JS_Device_Code, JS_Device_Name, SV_User_Id, SV_User_Name, 
+    Create_Time
+  </sql>
+</mapper>
\ No newline at end of file
diff --git a/src/test/kotlin/cn/flightfeather/supervision/business/QRCodeTest.kt b/src/test/kotlin/cn/flightfeather/supervision/business/QRCodeTest.kt
index 6a1c3f1..3ce47bd 100644
--- a/src/test/kotlin/cn/flightfeather/supervision/business/QRCodeTest.kt
+++ b/src/test/kotlin/cn/flightfeather/supervision/business/QRCodeTest.kt
@@ -1,5 +1,6 @@
 package cn.flightfeather.supervision.business
 
+import cn.flightfeather.supervision.common.executor.TaskStatus
 import cn.flightfeather.supervision.common.utils.QRCodeUtil
 import org.apache.poi.hssf.usermodel.HSSFWorkbook
 import org.junit.Test
@@ -243,4 +244,11 @@
 
         metadata.mergeTree("javax_imageio_1.0", root)
     }
+
+    @Test
+    fun foo1() {
+        val s = TaskStatus.WAITING
+        println(s.name)
+        println(s.ordinal)
+    }
 }
\ No newline at end of file
diff --git a/src/test/kotlin/cn/flightfeather/supervision/business/autooutput/AopEvaluationTest.kt b/src/test/kotlin/cn/flightfeather/supervision/business/autooutput/AopEvaluationTest.kt
index c5b741d..07b51cc 100644
--- a/src/test/kotlin/cn/flightfeather/supervision/business/autooutput/AopEvaluationTest.kt
+++ b/src/test/kotlin/cn/flightfeather/supervision/business/autooutput/AopEvaluationTest.kt
@@ -1,7 +1,14 @@
 package cn.flightfeather.supervision.business.autooutput
 
 import cn.flightfeather.supervision.business.autooutput.score.AopEvaluation
-import cn.flightfeather.supervision.business.autooutput.score.construction.JADataAnalysis
+import cn.flightfeather.supervision.business.autooutput.dataanalysis.JACsDataAnalysis
+import cn.flightfeather.supervision.business.autooutput.dataanalysis.JSCsDataAnalysis
+import cn.flightfeather.supervision.business.autooutput.dataanalysis.JSMpDataAnalysis
+import cn.flightfeather.supervision.business.autooutput.dataanalysis.XHFuDataAnalysis
+import cn.flightfeather.supervision.business.autooutput.dataanalysis.JSWhDataAnalysis
+import cn.flightfeather.supervision.business.autooutput.datasource.AopDataConfig
+import cn.flightfeather.supervision.business.autooutput.score.AopCreditCode
+import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.lightshare.service.SearchService
 import cn.flightfeather.supervision.lightshare.vo.ExcelConfigVo
 import org.junit.Test
@@ -21,38 +28,113 @@
     lateinit var aopEvaluation: AopEvaluation
 
     @Autowired
+    lateinit var aopCreditCode: AopCreditCode
+
+    @Autowired
     lateinit var searchService: SearchService
 
     @Autowired
-    lateinit var jaDataAnalysis: JADataAnalysis
+    lateinit var jaCsDataAnalysis: JACsDataAnalysis
+
+    @Autowired
+    lateinit var xhFuDataAnalysis: XHFuDataAnalysis
+
+    @Autowired
+    lateinit var jsCsDataAnalysis: JSCsDataAnalysis
+
+    @Autowired
+    lateinit var jsMpDataAnalysis: JSMpDataAnalysis
+
+    @Autowired
+    lateinit var jsWhDataAnalysis: JSWhDataAnalysis
 
     /**
-     * 缁熻鐩戞祴鏁版嵁缁撴灉
+     * 闈欏畨宸ュ湴鑷瘎
      */
     @Test
     fun test1() {
-        jaDataAnalysis.setResource("VHXHS1dHsykTNUf2", 1, 2023, 8)
-        jaDataAnalysis.execute()
+        val taskId = "tTbZIUg7nQJ1MRgE"
+        val districtCode = "310106"
+        val year = 2023
+        val month = 12
+        val sceneType = Constant.SceneType.TYPE1.value.toInt()
+        jaCsDataAnalysis.setResource(taskId, sceneType, year, month)
+        jaCsDataAnalysis.execute(0.124)
+
+        aopEvaluation.executeByTopTask(taskId, sceneType)
+
+        val mode = 9
+        searchService.writeToFile(ExcelConfigVo(
+            taskId,
+            districtCode = districtCode,
+            sceneType = sceneType), mode)
     }
 
     /**
-     * 鑷姩璇勪及
+     * 寰愭眹椁愰ギ鑷瘎
      */
     @Test
     fun test() {
-        aopEvaluation.setResource("VHXHS1dHsykTNUf2", 1)
-        aopEvaluation.execute()
+        val taskId = "88wgq9l5gm9cUMg1"
+        val districtCode = "310104"
+        val districtName = "寰愭眹鍖�"
+        val year = 2023
+        val month = 11
+        val sceneType = Constant.SceneType.TYPE5.value.toInt()
+        xhFuDataAnalysis.setResource(taskId, sceneType, year, month)
+        xhFuDataAnalysis.execute()
+
+        aopEvaluation.executeByTopTask(taskId, sceneType)
+
+        val mode = 9
+        searchService.writeToFile(ExcelConfigVo(
+            taskId,
+            districtCode = districtCode,
+            sceneType = sceneType), mode)
+        aopCreditCode.execute(AopDataConfig(
+            year = year,
+            month = month,
+            districtName = districtName,
+            sceneType = sceneType,
+            period = 1
+        ))
     }
 
     /**
-     * 瀵煎嚭鑷姩璇勪及缁撴灉
+     * 閲戝北宸ュ湴銆佺爜澶淬�佹悈鎷岀珯鑷瘎
      */
     @Test
     fun test2() {
+        val taskId = "rXtm0AozZYJqoEpW"
+        val districtCode = "310116"
+        val year = 2023
+        val month = 11
+//        val sceneType = Constant.SceneType.TYPE1.value.toInt()
+//        val sceneType = Constant.SceneType.TYPE2.value.toInt()
+        val sceneType = Constant.SceneType.TYPE3.value.toInt()
+//        val sceneType = Constant.SceneType.TYPE14.value.toInt()
+
+        when (sceneType) {
+            Constant.SceneType.TYPE1.value.toInt()->{
+                jsCsDataAnalysis.setResource(taskId, sceneType, year, month)
+                jsCsDataAnalysis.execute()
+            }
+            Constant.SceneType.TYPE2.value.toInt()->{
+                jsWhDataAnalysis.setResource(taskId, sceneType, year, month)
+                jsWhDataAnalysis.execute()
+            }
+            Constant.SceneType.TYPE3.value.toInt()->{
+                jsMpDataAnalysis.setResource(taskId, sceneType, year, month)
+                jsMpDataAnalysis.execute()
+            }
+        }
+
+        aopEvaluation.executeByTopTask(taskId, sceneType)
+
         val mode = 9
         searchService.writeToFile(ExcelConfigVo(
-            "VHXHS1dHsykTNUf2",
-            districtCode = "310106",
-            sceneType = 1), mode)
+            taskId,
+            districtCode = districtCode,
+            sceneType = sceneType), mode)
     }
 }
\ No newline at end of file
diff --git a/src/test/kotlin/cn/flightfeather/supervision/business/fume/AutoScoreTest.kt b/src/test/kotlin/cn/flightfeather/supervision/business/fume/AutoScoreTest.kt
deleted file mode 100644
index bfe6945..0000000
--- a/src/test/kotlin/cn/flightfeather/supervision/business/fume/AutoScoreTest.kt
+++ /dev/null
@@ -1,59 +0,0 @@
-package cn.flightfeather.supervision.business.fume
-
-import cn.flightfeather.supervision.business.storage.StAutoScore
-import cn.flightfeather.supervision.common.utils.Constant
-import cn.flightfeather.supervision.domain.ds1.mapper.ProblemlistMapper
-import cn.flightfeather.supervision.domain.ds1.mapper.SubtaskMapper
-import cn.flightfeather.supervision.domain.ds1.mapper.UserinfoMapper
-import cn.flightfeather.supervision.domain.ds2.mapper.LedgerSubTypeMapper
-import org.junit.Test
-import org.junit.jupiter.api.extension.ExtendWith
-import org.junit.runner.RunWith
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.boot.test.context.SpringBootTest
-import org.springframework.test.context.junit.jupiter.SpringExtension
-import org.springframework.test.context.junit4.SpringRunner
-
-@RunWith(SpringRunner::class)
-@ExtendWith(SpringExtension::class)
-@SpringBootTest
-class AutoScoreTest {
-    @Autowired
-    lateinit var autoScore: StAutoScore
-
-    @Autowired
-    lateinit var autoScore3: AutoScore3
-
-    @Autowired
-    lateinit var userInfoMapper: UserinfoMapper
-
-    @Autowired
-    lateinit var ledgerSubTypeMapper: LedgerSubTypeMapper
-
-    @Autowired
-    lateinit var problemlistMapper: ProblemlistMapper
-
-    @Autowired
-    lateinit var subtaskMapper: SubtaskMapper
-
-    @Test
-    fun go() {
-//        val s = "abcdefg"
-//        val t = s.substring(0, s.length - 2)
-//        println(t)
-
-        autoScore.sceneType = Constant.ScenseType.TYPE1
-        autoScore.topTaskGrade("BdSm7KhSYWar3BSp")
-//        val subtask = subtaskMapper.selectByPrimaryKey("YoKxHlojS1wIlFoQ")
-//        autoScore.sceneGrade(subtask)
-//        autoScore.sceneGradeToFile(subtask)
-
-//        autoScore3.go(2022, 9, 1)
-
-//        val t = problemlistMapper.getStatisticalResult("310116", "2021-09-01 00:00:00", "2021-09-30 00:00:00", "1")
-//        println()
-
-//        val a = "01"
-//        println(a.toInt())
-    }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt b/src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt
index 046ce9f..a45e020 100644
--- a/src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt
+++ b/src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt
@@ -24,27 +24,29 @@
 //        val b = LocationRoadNearby.BasePlace("", Pair(121.378346, 30.84923), Pair(121.378296, 30.861472))
 //        locationRoadNearby.search(b, 1000.0)
         val bList = listOf(
-            LocationRoadNearby.BasePlace("骞查挶璺�-閲戠煶鍖楄矾-閲戝紶鍏矾", Pair(121.218411,30.826654), Pair(121.227142,30.828403)),
-            LocationRoadNearby.BasePlace("閲戝粖鍏矾-寤轰箰璺�-鏈卞悤鍏矾", Pair(121.18409,30.835699), Pair(121.183811,30.831636)),
-            LocationRoadNearby.BasePlace("閲戝紶鍏矾-鐢版柊璺�-骞查挶璺�", Pair(121.219555,30.829319), Pair(121.227142,30.828403)),
-            LocationRoadNearby.BasePlace("澶ц尗涓績璺�-鏈卞钩鍏矾-鏈卞璺�", Pair(121.147448,30.858481), Pair(121.149312,30.857804)),
-            LocationRoadNearby.BasePlace("澶ц尗涓績璺�-寤哄瘜璺�-鏈卞钩鍏矾", Pair(121.141819,30.858344), Pair(121.147448,30.858481)),
-            LocationRoadNearby.BasePlace("鏈卞悤鍏矾-閲戝紶鍏矾-搴峰叴璺�", Pair(121.177261,30.83326), Pair(121.18053,30.830751)),
-            LocationRoadNearby.BasePlace("鏈卞悤鍏矾-閲戝粖鍏矾-搴峰叴璺�", Pair(121.183811,30.831636), Pair(121.18053,30.830751)),
-            LocationRoadNearby.BasePlace("鍚曟柊璺�-寤轰箰璺�-鏈卞悤鍏矾", Pair(121.191766,30.835612), Pair(121.196591,30.831604)),
-            LocationRoadNearby.BasePlace("婧寳璺�-鏈卞悤鍏矾-鏂颁笢琛�", Pair(121.171163,30.832014), Pair(121.174958,30.827349)),
-            LocationRoadNearby.BasePlace("涓滄柟绾腑蹇冭矾-鍐滃缓璺�-鏈卞钩鍏矾", Pair(121.141617,30.870365), Pair(121.145145,30.870635)),
-            LocationRoadNearby.BasePlace("涓滄柟绾腑蹇冭矾-鏈卞钩鍏矾-鏈卞璺�", Pair(121.145145,30.870635), Pair(121.155051,30.870966)),
-            LocationRoadNearby.BasePlace("鏈卞悤鍏矾-閲戝粖鍏矾-鐢版璺�", Pair(121.183811,30.831636), Pair(121.18989,30.831606)),
-            LocationRoadNearby.BasePlace("鏈卞钩鍏矾-涓滃瘜璺�-澶ц尗涓績璺�", Pair(121.146281,30.864199), Pair(121.147448,30.858481)),
-            LocationRoadNearby.BasePlace("鏈卞钩鍏矾-涓滄柟绾腑蹇冭矾-涓滃瘜璺�", Pair(121.145404,30.869592), Pair(121.146281,30.864199)),
-            LocationRoadNearby.BasePlace("閲戝紶鍏矾-閲戠煶鍖楄矾-鐢版柊璺�", Pair(121.215668,30.830838), Pair(121.219555,30.829319)),
-            LocationRoadNearby.BasePlace("鏈卞钩鍏矾-鍚曢潚璺�-钄疯崥璺�", Pair(121.148479,30.836083), Pair(121.14842,30.842135)),
-            LocationRoadNearby.BasePlace("鏈辨尘鍐滃缓璺�-寤哄瘜璺�-鏈卞钩鍏矾", Pair(121.142609,30.863955), Pair(121.146407,30.864167)),
-            LocationRoadNearby.BasePlace("鏈辨尘鍐滃缓璺�-鏈卞钩鍏矾-鏈卞璺�", Pair(121.146407,30.864167), Pair(121.153675,30.864075)),
-            LocationRoadNearby.BasePlace("鍚曢潚璺�-鏈卞悤鍏矾-鏈卞钩鍏矾", Pair(121.136318,30.833325), Pair(121.148624,30.836094)),
-            LocationRoadNearby.BasePlace("娉栨咕鏀矾-鍚曢潚璺�-鏈卞钩鍏矾", Pair(121.155048,30.835229), Pair(121.148659,30.829861)),
+//            LocationRoadNearby.BasePlace("骞查挶璺�-閲戠煶鍖楄矾-閲戝紶鍏矾", Pair(121.218411,30.826654), Pair(121.227142,30.828403)),
+//            LocationRoadNearby.BasePlace("閲戝粖鍏矾-寤轰箰璺�-鏈卞悤鍏矾", Pair(121.18409,30.835699), Pair(121.183811,30.831636)),
+//            LocationRoadNearby.BasePlace("閲戝紶鍏矾-鐢版柊璺�-骞查挶璺�", Pair(121.219555,30.829319), Pair(121.227142,30.828403)),
+//            LocationRoadNearby.BasePlace("澶ц尗涓績璺�-鏈卞钩鍏矾-鏈卞璺�", Pair(121.147448,30.858481), Pair(121.149312,30.857804)),
+//            LocationRoadNearby.BasePlace("澶ц尗涓績璺�-寤哄瘜璺�-鏈卞钩鍏矾", Pair(121.141819,30.858344), Pair(121.147448,30.858481)),
+//            LocationRoadNearby.BasePlace("鏈卞悤鍏矾-閲戝紶鍏矾-搴峰叴璺�", Pair(121.177261,30.83326), Pair(121.18053,30.830751)),
+//            LocationRoadNearby.BasePlace("鏈卞悤鍏矾-閲戝粖鍏矾-搴峰叴璺�", Pair(121.183811,30.831636), Pair(121.18053,30.830751)),
+//            LocationRoadNearby.BasePlace("鍚曟柊璺�-寤轰箰璺�-鏈卞悤鍏矾", Pair(121.191766,30.835612), Pair(121.196591,30.831604)),
+//            LocationRoadNearby.BasePlace("婧寳璺�-鏈卞悤鍏矾-鏂颁笢琛�", Pair(121.171163,30.832014), Pair(121.174958,30.827349)),
+//            LocationRoadNearby.BasePlace("涓滄柟绾腑蹇冭矾-鍐滃缓璺�-鏈卞钩鍏矾", Pair(121.141617,30.870365), Pair(121.145145,30.870635)),
+//            LocationRoadNearby.BasePlace("涓滄柟绾腑蹇冭矾-鏈卞钩鍏矾-鏈卞璺�", Pair(121.145145,30.870635), Pair(121.155051,30.870966)),
+//            LocationRoadNearby.BasePlace("鏈卞悤鍏矾-閲戝粖鍏矾-鐢版璺�", Pair(121.183811,30.831636), Pair(121.18989,30.831606)),
+//            LocationRoadNearby.BasePlace("鏈卞钩鍏矾-涓滃瘜璺�-澶ц尗涓績璺�", Pair(121.146281,30.864199), Pair(121.147448,30.858481)),
+//            LocationRoadNearby.BasePlace("鏈卞钩鍏矾-涓滄柟绾腑蹇冭矾-涓滃瘜璺�", Pair(121.145404,30.869592), Pair(121.146281,30.864199)),
+//            LocationRoadNearby.BasePlace("閲戝紶鍏矾-閲戠煶鍖楄矾-鐢版柊璺�", Pair(121.215668,30.830838), Pair(121.219555,30.829319)),
+//            LocationRoadNearby.BasePlace("鏈卞钩鍏矾-鍚曢潚璺�-钄疯崥璺�", Pair(121.148479,30.836083), Pair(121.14842,30.842135)),
+//            LocationRoadNearby.BasePlace("鏈辨尘鍐滃缓璺�-寤哄瘜璺�-鏈卞钩鍏矾", Pair(121.142609,30.863955), Pair(121.146407,30.864167)),
+//            LocationRoadNearby.BasePlace("鏈辨尘鍐滃缓璺�-鏈卞钩鍏矾-鏈卞璺�", Pair(121.146407,30.864167), Pair(121.153675,30.864075)),
+//            LocationRoadNearby.BasePlace("鍚曢潚璺�-鏈卞悤鍏矾-鏈卞钩鍏矾", Pair(121.136318,30.833325), Pair(121.148624,30.836094)),
+//            LocationRoadNearby.BasePlace("娉栨咕鏀矾-鍚曢潚璺�-鏈卞钩鍏矾", Pair(121.155048,30.835229), Pair(121.148659,30.829861)),
+
+            LocationRoadNearby.BasePlace("寰愭眹涓婂笀澶�", Pair(121.416643,31.163531), Pair(121.416643,31.163531)),
         )
-        locationRoadNearby.searchList(bList, 1000.0)
+        locationRoadNearby.searchList(bList, 2000.0)
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3