From 4e20a1aaaba1bb843820fca844c20055a33febce Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期五, 19 七月 2024 17:39:19 +0800
Subject: [PATCH] 1. 新增webSocket相关功能

---
 src/main/kotlin/cn/flightfeather/supervision/lightshare/web/ProblemlistController.kt           |   18 +
 src/main/kotlin/cn/flightfeather/supervision/socket/WsSessionManager.kt                        |   75 +++++++
 src/main/kotlin/cn/flightfeather/supervision/socket/config/SPTextWebSocketHandler.kt           |   69 ++++++
 src/main/resources/application-pro.yml                                                         |    3 
 pom.xml                                                                                        |    5 
 src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketSender.kt               |   30 +++
 src/main/kotlin/cn/flightfeather/supervision/SupervisionApplication.kt                         |   11 
 src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt       |   40 +++
 src/main/kotlin/cn/flightfeather/supervision/lightshare/web/SubtaskController.kt               |   17 +
 src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt                          |    9 
 src/main/kotlin/cn/flightfeather/supervision/common/log/BizLog.kt                              |   33 +++
 src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/StatisticsVo.kt                     |    3 
 src/main/kotlin/cn/flightfeather/supervision/socket/config/WsHandshakeInterceptor.kt           |   53 +++++
 src/main/resources/application-dev.yml                                                         |    1 
 src/main/kotlin/cn/flightfeather/supervision/common/log/WorkStreamLogInfo.kt                   |   25 ++
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ProblemlistServiceImpl.kt |   24 ++
 src/test/kotlin/cn/flightfeather/supervision/business/bgtask/AopTaskCtrlTest.kt                |   10 
 src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketReceiver.kt             |   24 ++
 src/main/resources/mapper/ds1/ProblemlistMapper.xml                                            |   18 -
 src/main/kotlin/cn/flightfeather/supervision/business/location/UtilFile.kt                     |    2 
 src/main/resources/application-test.yml                                                        |    3 
 src/main/resources/log4j2.xml                                                                  |    2 
 src/main/kotlin/cn/flightfeather/supervision/socket/config/WebSocketConfig.kt                  |   45 ++++
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SubtaskServiceImpl.kt     |   25 --
 src/main/kotlin/cn/flightfeather/supervision/scheduler/ScheduleService.kt                      |   14 +
 src/main/kotlin/cn/flightfeather/supervision/common/log/AbstractLogInfo.kt                     |   26 ++
 src/main/resources/application.yml                                                             |    6 
 27 files changed, 528 insertions(+), 63 deletions(-)

diff --git a/pom.xml b/pom.xml
index 93616db..6d4c67e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,6 +69,11 @@
             <artifactId>spring-boot-starter-webflux</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+
         <!-- https://mvnrepository.com/artifact/org.springframework.plugin/spring-plugin-core -->
         <dependency>
             <groupId>org.springframework.plugin</groupId>
diff --git a/src/main/kotlin/cn/flightfeather/supervision/SupervisionApplication.kt b/src/main/kotlin/cn/flightfeather/supervision/SupervisionApplication.kt
index e21e4dd..a295360 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/SupervisionApplication.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/SupervisionApplication.kt
@@ -2,6 +2,7 @@
 
 import cn.flightfeather.supervision.business.datafetch.FetchController
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.beans.factory.annotation.Value
 import org.springframework.boot.ApplicationRunner
 import org.springframework.boot.autoconfigure.SpringBootApplication
 import org.springframework.boot.runApplication
@@ -11,7 +12,10 @@
 
 @SpringBootApplication
 @EnableScheduling
-class SupervisionApplication {
+class SupervisionApplication(
+    @Value("\${mode}")
+    var mode: String
+) {
 
     @Autowired
     // 闈欏畨鍖哄闂存柦宸ヨ鍙瘉淇℃伅鑾峰彇浠诲姟
@@ -19,7 +23,10 @@
 
     @Bean
     fun runner() = ApplicationRunner {
-        fetchController.run()
+        if (mode == "pro") {
+            fetchController.run()
+        }
+        println("mode: $mode")
     }
 }
 
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/location/UtilFile.kt b/src/main/kotlin/cn/flightfeather/supervision/business/location/UtilFile.kt
index 04e78b4..238fcb0 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/location/UtilFile.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/location/UtilFile.kt
@@ -33,6 +33,7 @@
             ExcelUtil.MyCell("鍗曚綅鍦板潃", colSpan = 1),
             ExcelUtil.MyCell("缁忓害", colSpan = 1),
             ExcelUtil.MyCell("绾害", colSpan = 1),
+            ExcelUtil.MyCell("鍖哄幙", colSpan = 1),
             ExcelUtil.MyCell("琛楅亾", colSpan = 1),
             ExcelUtil.MyCell("甯哥敤鑱旂郴浜�", colSpan = 1),
             ExcelUtil.MyCell("鑱旂郴鏂瑰紡", colSpan = 1),
@@ -66,6 +67,7 @@
             scense.location ?: "",
             scense.longitude?.toDouble() ?: .0,
             scense.latitude?.toDouble() ?: .0,
+            scense.districtname ?: "",
             scense.townname ?: "",
             scense.contacts ?: "",
             scense.contactst ?: ""
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/log/AbstractLogInfo.kt b/src/main/kotlin/cn/flightfeather/supervision/common/log/AbstractLogInfo.kt
new file mode 100644
index 0000000..60baf3b
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/log/AbstractLogInfo.kt
@@ -0,0 +1,26 @@
+package cn.flightfeather.supervision.common.log
+
+import cn.flightfeather.supervision.common.utils.JsonUtil
+import com.fasterxml.jackson.annotation.JsonFormat
+import com.google.gson.Gson
+import java.time.LocalDateTime
+
+/**
+ * 鏃ュ織淇℃伅缁撴瀯
+ * @date 2024/7/19
+ * @author feiyu02
+ */
+open class AbstractLogInfo() {
+
+    constructor(event: String) : this() {
+        this.event = event
+    }
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    var time: LocalDateTime = LocalDateTime.now()
+    var event: String = ""
+
+    fun toJsonStr(): String {
+        return JsonUtil.gson.toJson(this)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/log/BizLog.kt b/src/main/kotlin/cn/flightfeather/supervision/common/log/BizLog.kt
new file mode 100644
index 0000000..2d73630
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/log/BizLog.kt
@@ -0,0 +1,33 @@
+package cn.flightfeather.supervision.common.log
+
+import cn.flightfeather.supervision.socket.processor.WebSocketSender
+import org.springframework.stereotype.Component
+
+/**
+ * 涓氬姟鏃ュ織绠$悊
+ * 鐩告瘮浜巐og4J2绛夋鏋舵棩蹇楋紝姝ゅ鏃ュ織闇�瑕佽褰曡嚦鏁版嵁搴撴垨鎺ㄩ�佽嚦鐩戞帶骞冲彴锛屾柟渚挎祻瑙堢鐞�
+ * @date 2024/7/19
+ * @author feiyu02
+ */
+@Component
+class BizLog(
+    private val webSocketSender: WebSocketSender,
+) {
+    // TODO: 2024/7/19 鍚庣画闇�娣诲姞鏃ュ織鐩稿叧鐨勬暟鎹簱瀛樺偍鍔熻兘
+
+    /**
+     * 璁板綍甯告�佹棩蹇�
+     */
+    fun info(logInfo: AbstractLogInfo) {
+        // 骞挎挱鏃ュ織
+        webSocketSender.broadcast(logInfo.toJsonStr())
+        // TODO: 2024/7/19 鏃ュ織鍏ュ簱
+    }
+
+    /**
+     * 璁板綍閿欒鏃ュ織
+     */
+    fun error() {
+        // TODO: 2024/7/19 鏃ュ織鍏ュ簱
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/log/WorkStreamLogInfo.kt b/src/main/kotlin/cn/flightfeather/supervision/common/log/WorkStreamLogInfo.kt
new file mode 100644
index 0000000..a68683c
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/log/WorkStreamLogInfo.kt
@@ -0,0 +1,25 @@
+package cn.flightfeather.supervision.common.log
+
+import cn.flightfeather.supervision.domain.ds1.entity.Userinfo
+
+/**
+ * 宸ヤ綔鏃ュ織
+ * @date 2024/7/19
+ * @author feiyu02
+ */
+class WorkStreamLogInfo : AbstractLogInfo {
+
+    constructor() : super()
+    constructor(userId: String?, userName: String?, type: String?, event: String) : super(event) {
+        this.userId = userId
+        this.userName = userName
+        this.type = type
+    }
+    constructor(userId: String?, userName: String?, event: String) : this(userId, userName, null, event)
+    constructor(userInfo: Userinfo?, event: String) : this(userInfo?.guid, userInfo?.realname, null, event)
+
+    var userId: String? = null
+    var userName: String? = null
+    var type: String? = null
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt b/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt
new file mode 100644
index 0000000..f749e00
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/utils/JsonUtil.kt
@@ -0,0 +1,9 @@
+package cn.flightfeather.supervision.common.utils
+
+import com.google.gson.Gson
+import com.google.gson.GsonBuilder
+
+object JsonUtil {
+
+    val gson: Gson = GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create()
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ProblemlistServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ProblemlistServiceImpl.kt
index c2b9ac6..5b28608 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ProblemlistServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ProblemlistServiceImpl.kt
@@ -1,6 +1,8 @@
 package cn.flightfeather.supervision.lightshare.service.impl
 
 import cn.flightfeather.supervision.common.exception.BizException
+import cn.flightfeather.supervision.common.log.BizLog
+import cn.flightfeather.supervision.common.log.WorkStreamLogInfo
 import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
 import cn.flightfeather.supervision.domain.ds1.entity.Scense
 import cn.flightfeather.supervision.common.utils.Constant
@@ -42,6 +44,7 @@
     private val taskRep: TaskRep,
     private val subTaskRep: SubTaskRep,
     private val problemRep: ProblemRep,
+    private val bizLog: BizLog,
 ) : ProblemlistService {
 
     @Resource
@@ -374,14 +377,21 @@
             return BaseResponse(false, "闈炴硶鐨勬搷浣滄寚浠�")
         }
         val p = problemlistMapper.selectByPrimaryKey(pId) ?: return BaseResponse(false, "闂涓嶅瓨鍦�")
+        val subtask = p.stguid?.let { subTaskRep.findOne(it) }
         val response = BaseResponse<String>(true)
+        var event = ""
 
         p.apply {
             this.remark = userName
             if (extension3 == Constant.PROBLEM_UNCHECKED) {
+                event = "鍦�${subtask?.scensename}瀹℃牳浜嗕竴涓棶棰�"
                 when (action) {
-                    0.toByte() -> extension3 = Constant.PROBLEM_CHECK_PASS
-                    1.toByte() -> extension3 = Constant.PROBLEM_CHECK_FAIL
+                    0.toByte() -> {
+                        extension3 = Constant.PROBLEM_CHECK_PASS
+                    }
+                    1.toByte() -> {
+                        extension3 = Constant.PROBLEM_CHECK_FAIL
+                    }
                     2.toByte(),
                     3.toByte(),
                     -> {
@@ -403,6 +413,7 @@
                             } else {
                                 Constant.CHANGE_CHECK_FAIL
                             }
+                            event = "鍦�${subtask?.scensename}瀹℃牳浜嗕竴涓暣鏀�"
                         } else {
                             response.success = false
                             response.message = "闂杩樻湭鏁存敼锛屾棤娉曡繘琛屾暣鏀瑰鏍革紒鎿嶄綔鏃犳晥"
@@ -410,6 +421,7 @@
                     }
                 }
             } else if (extension3 == Constant.CHANGE_UNCHECKED) {
+                event = "鍦�${subtask?.scensename}瀹℃牳浜嗕竴涓暣鏀�"
                 when (action) {
                     0.toByte(),
                     1.toByte(),
@@ -439,6 +451,8 @@
             if (r != 1) {
                 response.success = false
                 response.message = "闂鏇存柊澶辫触锛�"
+            } else {
+                bizLog.info(WorkStreamLogInfo(subtask?.executorguids, subtask?.executorrealtimes, event))
             }
         }
         return response
@@ -518,6 +532,12 @@
             inspectionMapper.updateByPrimaryKey(inspection)
         }
 
+        problemlist.stguid?.let {
+            val subtask = subTaskRep.findOne(it)
+            val event = "鍦�${subtask?.scensename}鏂板涓�涓棶棰�"
+            bizLog.info(WorkStreamLogInfo(subtask?.executorguids, subtask?.executorrealtimes, event))
+        }
+
         return BaseResponse(true)
     }
 
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 37f67a2..96d689b 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
@@ -431,6 +431,7 @@
                 if (!bool){
                     daytaskVo.runingstatus = Constant.TaskProgress.RUNINGSTATUS3.text
                 }
+
             }
             //涓よ�呯姸鎬佺浉鍚屾椂涓嶅仛淇敼锛屽叾浣欐儏鍐垫棩浠诲姟閮戒负姝e湪鎵ц
             else if (subtask.status != daytaskVo.runingstatus){
@@ -442,30 +443,6 @@
             //****************************************************************************************
             subtaskMapper.updateByPrimaryKeySelective(subtask)
         }
-
-        //鍒ゆ柇瀵瑰簲椤跺眰浠诲姟鐨勬墽琛岀姸鎬�
-//        val daytaskVolist = taskService.getDayTaskByTaskID(toptaskVo.tguid!!)
-//        val iterator: Iterator<TaskVo> = daytaskVolist.iterator()
-//        if (daytaskVo.runingstatus == Constant.TaskProgress.RUNINGSTATUS3.text
-//                && toptaskVo.runingstatus == Constant.TaskProgress.RUNINGSTATUS2.text) {
-//            var bool = false
-//            while (iterator.hasNext()) {
-//                val tmp = iterator.next()
-//                if (tmp.runingstatus != Constant.TaskProgress.RUNINGSTATUS3.text) {
-//                    bool = true
-//                    break
-//                }
-//            }
-//            if (!bool){
-//                toptaskVo.runingstatus = Constant.TaskProgress.RUNINGSTATUS3.text
-//            }
-//        }
-//        else if (daytaskVo.runingstatus != toptaskVo.runingstatus){
-//            toptaskVo.runingstatus = Constant.TaskProgress.RUNINGSTATUS2.text
-//        }
-//        val toptask = Task()
-//        BeanUtils.copyProperties(toptaskVo, toptask)
-//        taskMapper.updateByPrimaryKeySelective(toptask)
 
         //瀵瑰凡缁撴潫鐨勫瓙浠诲姟杩涜鑷姩璇勫垎
         if (subtask.status == Constant.TaskProgress.RUNINGSTATUS3.text) {
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/StatisticsVo.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/StatisticsVo.kt
index 71dd692..15f23c7 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/StatisticsVo.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/StatisticsVo.kt
@@ -1,5 +1,6 @@
 package cn.flightfeather.supervision.lightshare.vo
 
+import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
 import com.fasterxml.jackson.annotation.JsonInclude
 import java.util.*
 
@@ -16,4 +17,6 @@
 
     var changeCount: Int = 0
 
+    var problems: List<Problemlist>? = null
+
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/ProblemlistController.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/ProblemlistController.kt
index de6e270..416e7e9 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/ProblemlistController.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/ProblemlistController.kt
@@ -1,7 +1,10 @@
 package cn.flightfeather.supervision.lightshare.web
 
+import cn.flightfeather.supervision.common.log.BizLog
+import cn.flightfeather.supervision.common.log.WorkStreamLogInfo
 import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
 import cn.flightfeather.supervision.lightshare.service.ProblemlistService
+import cn.flightfeather.supervision.lightshare.service.SubtaskService
 import cn.flightfeather.supervision.lightshare.vo.*
 import io.swagger.annotations.Api
 import io.swagger.annotations.ApiOperation
@@ -12,7 +15,10 @@
 @Api(tags = ["ProblemlistController"], description = "鐩戠闂API鎺ュ彛")
 @RestController
 @RequestMapping("/problemlist")
-class ProblemlistController(val problemlistService: ProblemlistService) {
+class ProblemlistController(
+    val problemlistService: ProblemlistService,
+    val subtaskService: SubtaskService, private val bizLog: BizLog,
+) {
     @GetMapping
     fun getAll() = problemlistService.findAll()
 
@@ -20,7 +26,15 @@
     fun add(@RequestBody problemlist: Problemlist) = problemlistService.save(problemlist)
 
     @PostMapping
-    fun update(@RequestBody problemlist: Problemlist) = problemlistService.update(problemlist)
+    fun update(@RequestBody problemlist: Problemlist):Int{
+        val res = problemlistService.update(problemlist)
+        problemlist.stguid?.let {
+            val subtask = subtaskService.findByID(it)
+            val event = "鍦�${subtask.scensename}鏂板涓�涓棶棰�"
+            bizLog.info(WorkStreamLogInfo(subtask.executorguids, subtask.executorrealtimes, event))
+        }
+        return res
+    }
 
     @GetMapping("/{id}")
     fun getById(@PathVariable id: String) = problemlistService.findByID(id)
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/SubtaskController.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/SubtaskController.kt
index dca0a62..cf2670e 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/SubtaskController.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/web/SubtaskController.kt
@@ -1,5 +1,8 @@
 package cn.flightfeather.supervision.lightshare.web
 
+import cn.flightfeather.supervision.common.log.BizLog
+import cn.flightfeather.supervision.common.log.WorkStreamLogInfo
+import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.domain.ds1.entity.Subtask
 import cn.flightfeather.supervision.lightshare.service.SubtaskService
 import cn.flightfeather.supervision.lightshare.vo.AreaVo
@@ -13,7 +16,7 @@
 @Api(tags = ["SubtaskController"], description = "宸℃煡瀛愪换鍔PI鎺ュ彛")
 @RestController
 @RequestMapping("/subtask")
-class SubtaskController(val subtaskService: SubtaskService) {
+class SubtaskController(val subtaskService: SubtaskService, private val bizLog: BizLog) {
     @GetMapping
     fun getAll() = subtaskService.findAll()
 
@@ -24,7 +27,17 @@
     fun addList(@RequestBody subtasklist: List<Subtask>) = subtaskService.saveList(subtasklist)
 
     @PostMapping
-    fun update(@RequestBody subtask: Subtask) = subtaskService.update(subtask)
+    fun update(@RequestBody subtask: Subtask): Int {
+        val res = subtaskService.update(subtask)
+        if (subtask.status == Constant.TaskProgress.RUNINGSTATUS3.text) {
+            val event = "鍦�${subtask.scensename}缁撴潫宸℃煡"
+            bizLog.info(WorkStreamLogInfo(subtask.executorguids, subtask.executorrealtimes, event))
+        }else if (subtask.status == Constant.TaskProgress.RUNINGSTATUS2.text) {
+            val event = "鍦�${subtask.scensename}寮�濮嬪贰鏌�"
+            bizLog.info(WorkStreamLogInfo(subtask.executorguids, subtask.executorrealtimes, event))
+        }
+        return res
+    }
 
     @GetMapping("/{id}")
     fun getById(@PathVariable id: String) = subtaskService.findByID(id)
diff --git a/src/main/kotlin/cn/flightfeather/supervision/scheduler/ScheduleService.kt b/src/main/kotlin/cn/flightfeather/supervision/scheduler/ScheduleService.kt
index 45ebef0..c34d071 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/scheduler/ScheduleService.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/scheduler/ScheduleService.kt
@@ -6,9 +6,11 @@
 import cn.flightfeather.supervision.lightshare.vo.AreaVo
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
+import org.springframework.beans.factory.annotation.Value
 import org.springframework.scheduling.annotation.Async
 import org.springframework.scheduling.annotation.Scheduled
 import org.springframework.stereotype.Component
+import java.time.LocalDate
 import java.time.LocalDateTime
 
 /**
@@ -23,6 +25,8 @@
  */
 @Component
 class ScheduleService(
+    @Value("\${mode}")
+    var mode: String,
     private val taskFinishSubtask: TaskFinishSubtask,
     private val taskFinishTopTask: TaskFinishTopTask,
     private val aopTaskCtrl: AopTaskCtrl,
@@ -32,6 +36,8 @@
     @Async
     @Scheduled(cron = "0 0 0 * * *")
     fun eachDay() {
+        if (mode != "pro") return
+
         logger.info("=====>>>>>姣忔棩浠诲姟鎵ц {}", System.currentTimeMillis())
         taskFinishSubtask.handle()
         logger.info("=====>>>>>姣忔棩浠诲姟缁撴潫 {}", System.currentTimeMillis())
@@ -40,18 +46,22 @@
     @Async
     @Scheduled(cron = "0 0 0 * * MON")
     fun eachWeek() {
+        if (mode != "pro") return
+
         logger.info("=====>>>>>姣忓懆浠诲姟鎵ц {}", System.currentTimeMillis())
         // 鎵ц涓婂懆鐨勮嚜璇勪换鍔�
-        aopTaskCtrl.startAllEvaluation(LocalDateTime.now())
+        aopTaskCtrl.startAllEvaluation(LocalDate.now().atStartOfDay())
         logger.info("=====>>>>>姣忓懆浠诲姟缁撴潫 {}", System.currentTimeMillis())
     }
 
     @Async
     @Scheduled(cron = "0 0 0 2 * *")
     fun eachMonth() {
+        if (mode != "pro") return
+
         logger.info("=====>>>>>姣忔湀浠诲姟鎵ц {}", System.currentTimeMillis())
         // 鎵ц涓婁釜鏈堢殑瀹屾暣鑷瘎浠诲姟
-        aopTaskCtrl.startAll(LocalDateTime.now().minusMonths(1))
+        aopTaskCtrl.startAll(LocalDate.now().atStartOfDay().minusMonths(1))
         // 鎵ц椤跺眰浠诲姟鑷姩缁撴潫浠诲姟
         taskFinishTopTask.handle()
         logger.info("=====>>>>>姣忔湀浠诲姟缁撴潫 {}", System.currentTimeMillis())
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/WsSessionManager.kt b/src/main/kotlin/cn/flightfeather/supervision/socket/WsSessionManager.kt
new file mode 100644
index 0000000..8ee361e
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/WsSessionManager.kt
@@ -0,0 +1,75 @@
+package cn.flightfeather.supervision.socket
+
+import org.springframework.web.socket.WebSocketSession
+import java.io.IOException
+import java.util.concurrent.ConcurrentHashMap
+
+/**
+ *
+ * @date 2024/7/19
+ * @author feiyu02
+ */
+object WsSessionManager {
+    /**
+     * 淇濆瓨杩炴帴 session 鐨勫湴鏂�
+     */
+    private val SESSION_POOL = ConcurrentHashMap<String, WebSocketSession>()
+
+    /**
+     * 娣诲姞 session
+     *
+     * @param key
+     */
+    fun add(key: String, session: WebSocketSession) {
+        // 娣诲姞 session
+        SESSION_POOL[key] = session
+    }
+
+    /**
+     * 鍒犻櫎 session,浼氳繑鍥炲垹闄ょ殑 session
+     *
+     * @param key
+     * @return
+     */
+    fun remove(key: String?): WebSocketSession? {
+        // 鍒犻櫎 session
+        return SESSION_POOL.remove(key)
+    }
+
+    /**
+     * 鍒犻櫎骞跺悓姝ュ叧闂繛鎺�
+     *
+     * @param key
+     */
+    fun removeAndClose(key: String?) {
+        val session: WebSocketSession? = remove(key)
+        if (session != null) {
+            try {
+                // 鍏抽棴杩炴帴
+                session.close()
+            } catch (e: IOException) {
+                // todo: 鍏抽棴鍑虹幇寮傚父澶勭悊
+                e.printStackTrace()
+            }
+        }
+    }
+
+    /**
+     * 鑾峰緱 session
+     *
+     * @param key
+     * @return
+     */
+    operator fun get(key: String?): WebSocketSession? {
+        // 鑾峰緱 session
+        return SESSION_POOL[key]
+    }
+
+    fun eachSession(action:(session:WebSocketSession) -> Unit) {
+        SESSION_POOL.forEachEntry(10){
+            action(it.value)
+        }
+    }
+}
+
+
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/config/SPTextWebSocketHandler.kt b/src/main/kotlin/cn/flightfeather/supervision/socket/config/SPTextWebSocketHandler.kt
new file mode 100644
index 0000000..49bcb73
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/config/SPTextWebSocketHandler.kt
@@ -0,0 +1,69 @@
+package cn.flightfeather.supervision.socket.config
+
+import cn.flightfeather.supervision.socket.WsSessionManager
+import cn.flightfeather.supervision.socket.processor.WebSocketReceiver
+import org.springframework.stereotype.Component
+import org.springframework.web.socket.CloseStatus
+import org.springframework.web.socket.TextMessage
+import org.springframework.web.socket.WebSocketSession
+import org.springframework.web.socket.handler.TextWebSocketHandler
+
+/**
+ *
+ * @date 2024/7/19
+ * @author feiyu02
+ */
+@Component
+class SPTextWebSocketHandler(private val webSocketReceiver: WebSocketReceiver) : TextWebSocketHandler() {
+    /**
+     * socket 寤虹珛鎴愬姛浜嬩欢
+     *
+     * @param session
+     * @throws Exception
+     */
+    @Throws(Exception::class)
+    override fun afterConnectionEstablished(session: WebSocketSession) {
+        val sessionId = session.attributes["session_id"]
+        if (sessionId != null) {
+            // 鐢ㄦ埛杩炴帴鎴愬姛锛屾斁鍏ュ湪绾跨敤鎴风紦瀛�
+            WsSessionManager.add(sessionId.toString(), session)
+        } else {
+            throw RuntimeException("鐢ㄦ埛鐧诲綍宸茬粡澶辨晥!")
+        }
+    }
+
+    /**
+     * 鎺ユ敹娑堟伅浜嬩欢
+     *
+     * @param session
+     * @param message
+     * @throws Exception
+     */
+    @Throws(Exception::class)
+    override fun handleTextMessage(session: WebSocketSession, message: TextMessage) {
+        // 鑾峰緱瀹㈡埛绔紶鏉ョ殑娑堟伅
+        val payload = message.payload
+        val sessionId = session.attributes["session_id"]
+        println("server 鎺ユ敹鍒� $sessionId 鍙戦�佺殑 $payload")
+        webSocketReceiver.onReceiveMsg(payload)
+//        session.sendMessage(TextMessage("server 鍙戦�佺粰 " + sessionId + " 娑堟伅 " + payload + " " + LocalDateTime.now()
+//            .toString()))
+    }
+
+    /**
+     * socket 鏂紑杩炴帴鏃�
+     *
+     * @param session
+     * @param status
+     * @throws Exception
+     */
+    @Throws(Exception::class)
+    override fun afterConnectionClosed(session: WebSocketSession, status: CloseStatus) {
+        val sessionId = session.attributes["session_id"]
+        if (sessionId != null) {
+            // 鐢ㄦ埛閫�鍑猴紝绉婚櫎缂撳瓨
+            WsSessionManager.remove(sessionId.toString())
+        }
+    }
+}
+
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/config/WebSocketConfig.kt b/src/main/kotlin/cn/flightfeather/supervision/socket/config/WebSocketConfig.kt
new file mode 100644
index 0000000..80c3d2d
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/config/WebSocketConfig.kt
@@ -0,0 +1,45 @@
+package cn.flightfeather.supervision.socket.config
+
+import cn.flightfeather.supervision.scheduler.ScheduleService
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.Configuration
+import org.springframework.scheduling.TaskScheduler
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler
+import org.springframework.web.socket.config.annotation.EnableWebSocket
+import org.springframework.web.socket.config.annotation.WebSocketConfigurer
+import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry
+import javax.annotation.Nullable
+
+/**
+ *
+ * @date 2024/7/19
+ * @author feiyu02
+ */
+@Configuration
+@EnableWebSocket
+class WebSocketConfig(
+    private val handler: SPTextWebSocketHandler,
+    private val wsHandshakeInterceptor: WsHandshakeInterceptor
+) : WebSocketConfigurer {
+
+    override fun registerWebSocketHandlers(registry: WebSocketHandlerRegistry) {
+        registry
+            .addHandler(handler, "workstream")
+            .addInterceptors(wsHandshakeInterceptor)
+            .setAllowedOrigins("*")
+    }
+
+    /**
+     * webSocket瀹氭椂鍣ㄩ厤缃紝瑙e喅鍚屾浣跨敤瀹氭椂鍣╗ScheduleService]鏃剁殑鍐茬獊闂
+     */
+    @Bean
+    @Nullable
+    fun taskScheduler():TaskScheduler {
+        return ThreadPoolTaskScheduler().apply {
+            setThreadNamePrefix("SockJS-")
+            poolSize = Runtime.getRuntime().availableProcessors()
+            isRemoveOnCancelPolicy = true
+        }
+    }
+}
+
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/config/WsHandshakeInterceptor.kt b/src/main/kotlin/cn/flightfeather/supervision/socket/config/WsHandshakeInterceptor.kt
new file mode 100644
index 0000000..4466ccc
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/config/WsHandshakeInterceptor.kt
@@ -0,0 +1,53 @@
+package cn.flightfeather.supervision.socket.config
+
+import org.apache.logging.log4j.util.Strings
+import org.springframework.http.server.ServerHttpRequest
+import org.springframework.http.server.ServerHttpResponse
+import org.springframework.stereotype.Component
+import org.springframework.web.socket.WebSocketHandler
+import org.springframework.web.socket.server.HandshakeInterceptor
+
+/**
+ *
+ * @date 2024/7/19
+ * @author feiyu02
+ */
+@Component
+class WsHandshakeInterceptor : HandshakeInterceptor {
+    /**
+     * 鎻℃墜鍓�
+     */
+    @Throws(Exception::class)
+    override fun beforeHandshake(
+        request: ServerHttpRequest,
+        response: ServerHttpResponse,
+        wsHandler: WebSocketHandler,
+        attributes: MutableMap<String, Any>,
+    ): Boolean {
+        println("鎻℃墜寮�濮�")
+        val hostName = request.remoteAddress.hostName
+        // TODO: 2024/7/19 鍚庣画鍙坊鍔犵敤鎴疯韩浠介獙璇佹満鍒�,sessionId鍙浛鎹负瀹為檯鐨勭敤鎴穒d
+        val sessionId = hostName + (Math.random() * 1000).toInt().toString()
+        if (Strings.isNotBlank(sessionId)) {
+            // 鏀惧叆灞炴�у煙
+            attributes["session_id"] = sessionId
+            println("鐢ㄦ埛 session_id $sessionId 鎻℃墜鎴愬姛锛�")
+            return true
+        }
+        println("鐢ㄦ埛鐧诲綍宸插け鏁�")
+        return false
+    }
+
+    /**
+     * 鎻℃墜鍚�
+     */
+    override fun afterHandshake(
+        request: ServerHttpRequest,
+        response: ServerHttpResponse,
+        wsHandler: WebSocketHandler,
+        exception: Exception?,
+    ) {
+        println("鎻℃墜瀹屾垚")
+    }
+}
+
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketReceiver.kt b/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketReceiver.kt
new file mode 100644
index 0000000..d8c42f9
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketReceiver.kt
@@ -0,0 +1,24 @@
+package cn.flightfeather.supervision.socket.processor
+
+import cn.flightfeather.supervision.common.log.BizLog
+import cn.flightfeather.supervision.common.log.WorkStreamLogInfo
+import org.springframework.stereotype.Component
+
+/**
+ * webSocket娑堟伅鎺ユ敹绠$悊
+ * @date 2024/7/19
+ * @author feiyu02
+ */
+@Component
+class WebSocketReceiver(private val bizLog: BizLog) {
+
+    /**
+     * 鎺ユ敹娑堟伅澶勭悊
+     */
+    fun onReceiveMsg(msg: String) {
+        // debug
+        if (msg == "test"){
+            bizLog.info(WorkStreamLogInfo("8FAqSPnAA8ry4ExX", "鏈辨寮�", "鍦ㄤ笂娴峰箍鍙戠矇鐓ょ伆鏈夐檺鍏徃鏂板涓�涓棶棰�"))
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketSender.kt b/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketSender.kt
new file mode 100644
index 0000000..83ba84f
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketSender.kt
@@ -0,0 +1,30 @@
+package cn.flightfeather.supervision.socket.processor
+
+import cn.flightfeather.supervision.socket.WsSessionManager
+import org.springframework.stereotype.Component
+import org.springframework.web.socket.TextMessage
+
+/**
+ * webSocket娑堟伅鍙戦�佺鐞�
+ * @date 2024/7/19
+ * @author feiyu02
+ */
+@Component
+class WebSocketSender {
+
+    /**
+     * 鍗曠嫭鍙戦�佹秷鎭�
+     */
+    fun sendMsg(msg: String, sessionId: String) {
+        WsSessionManager[sessionId]?.sendMessage(TextMessage(msg))
+    }
+
+    /**
+     * 骞挎挱缁欐墍鏈変汉
+     */
+    fun broadcast(msg: String) {
+        WsSessionManager.eachSession {
+            it.sendMessage(TextMessage(msg))
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 5af1db9..5c35911 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -19,3 +19,4 @@
 
 imgPath: target
 filePath: target
+mode: dev
diff --git a/src/main/resources/application-pro.yml b/src/main/resources/application-pro.yml
index b5a8da8..fd3c0f7 100644
--- a/src/main/resources/application-pro.yml
+++ b/src/main/resources/application-pro.yml
@@ -12,4 +12,5 @@
       password: ledger_fxxchackxr
 
 imgPath: D:/02product/04supervision/images/
-filePath: D:/02product/04supervision/files/
\ No newline at end of file
+filePath: D:/02product/04supervision/files/
+mode: pro
\ No newline at end of file
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 9bf72d3..7541789 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -28,4 +28,5 @@
         enabled: true
 
 imgPath: C:\02product\supervision\images
-filePath: C:\02product\supervision\files
\ No newline at end of file
+filePath: C:\02product\supervision\files
+mode: test
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3818bca..350ca41 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -87,9 +87,9 @@
 
 #logging璺緞璁剧疆
 logging:
-#  config: classpath:log4j2.xml
-  level:
-    cn.flightfeather.supervision.domain: debug
+  config: classpath:log4j2.xml
+#  level:
+#    cn.flightfeather.supervision.domain: debug
 
 springfox:
   documentation:
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 281c647..0290231 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -78,7 +78,7 @@
 		</logger>
 
 		<root level="all">
-			<appender-ref ref="Console"/>
+<!--			<appender-ref ref="Console"/>-->
 			<appender-ref ref="RollingFileInfo"/>
 			<appender-ref ref="RollingFileWarn"/>
 			<appender-ref ref="RollingFileError"/>
diff --git a/src/main/resources/mapper/ds1/ProblemlistMapper.xml b/src/main/resources/mapper/ds1/ProblemlistMapper.xml
index 857d461..ff89068 100644
--- a/src/main/resources/mapper/ds1/ProblemlistMapper.xml
+++ b/src/main/resources/mapper/ds1/ProblemlistMapper.xml
@@ -53,6 +53,7 @@
         <result property="endTime" column="endTime"/>
         <result property="count" column="count"/>
         <result property="changeCount" column="changeCount"/>
+<!--        <collection property="problems" ofType="cn.flightfeather.supervision.domain.ds1.entity.Problemlist" resultMap="BaseResultMap"/>-->
     </resultMap>
     <resultMap id="SceneProblemSummary" type="cn.flightfeather.supervision.lightshare.vo.SceneProblemSummary">
         <id property="sceneId" column="sceneId"/>
@@ -75,23 +76,6 @@
         LEFT JOIN sm_t_scense AS f ON a.S_GUID = f.S_GUID
         LEFT JOIN tm_t_subtask AS c ON a.ST_GUID = c.ST_GUID
         <where>
-<!--        a.ST_GUID IN (-->
-<!--            SELECT-->
-<!--            d.ST_GUID-->
-<!--            FROM-->
-<!--            tm_t_subtask AS d LEFT JOIN tm_t_task AS e ON d.T_GUID = e.T_GUID-->
-<!--            WHERE-->
-<!--            e.T_LevelNum = '2'-->
-<!--            <if test="startTime != null">-->
-<!--                AND e.T_StartTime &lt;= #{startTime}-->
-<!--            </if>-->
-<!--            <if test="endTime != null">-->
-<!--                AND e.T_EndTime >= #{endTime}-->
-<!--            </if>-->
-<!--            <if test="districtCode != null">-->
-<!--                AND e.T_DistrictCode = #{districtCode}-->
-<!--            </if>-->
-<!--        )-->
         <if test="startTime != null">
             AND c.ST_PlanStartTime >= #{startTime}
         </if>
diff --git a/src/test/kotlin/cn/flightfeather/supervision/business/bgtask/AopTaskCtrlTest.kt b/src/test/kotlin/cn/flightfeather/supervision/business/bgtask/AopTaskCtrlTest.kt
index d8b9149..242ae46 100644
--- a/src/test/kotlin/cn/flightfeather/supervision/business/bgtask/AopTaskCtrlTest.kt
+++ b/src/test/kotlin/cn/flightfeather/supervision/business/bgtask/AopTaskCtrlTest.kt
@@ -12,6 +12,7 @@
 import java.io.BufferedReader
 import java.io.InputStreamReader
 import java.time.LocalDate
+import java.time.LocalDateTime
 
 
 @RunWith(SpringRunner::class)
@@ -27,11 +28,18 @@
 
     @Test
     fun startEvaluation() {
-        val time = LocalDate.of(2024, 6, 23).atStartOfDay()
+        val time = LocalDate.of(2024, 7, 23).atStartOfDay()
         aopTaskCtrl.startEvaluation(aopTaskCtrl.getArea(time, "310106", "闈欏畨鍖�", Constant.SceneType.TYPE1))
     }
 
     @Test
+    fun startAllEvaluation() {
+//        val time = LocalDate.of(2024, 6, 23).atStartOfDay()
+        val time = LocalDate.now().atStartOfDay()
+        aopTaskCtrl.startAllEvaluation(time)
+    }
+
+    @Test
     fun startNewTask(){
         val time = LocalDate.of(2024, 6, 23).atStartOfDay()
         aopTaskCtrl.startNewTask(aopTaskCtrl.getArea(time, "310106", "闈欏畨鍖�", Constant.SceneType.TYPE1))
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 e159369..d519504 100644
--- a/src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt
+++ b/src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt
@@ -45,12 +45,42 @@
 //            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.419384,31.161433), Pair(121.419384,31.161433)),
-            LocationRoadNearby.BasePlace("闈欏畨鐩戞祴绔欏浗鎺х偣", Pair(121.429439, 31.223632), Pair(121.429439, 31.223632)),
-            LocationRoadNearby.BasePlace("閲戝北澶ч亾2000鍙�", Pair(121.3404, 30.744262), Pair(121.3404, 30.744262)),
-            LocationRoadNearby.BasePlace("浠欓湠绔�", Pair(121.394775, 31.203982), Pair(121.419384,31.161433)),
+//            LocationRoadNearby.BasePlace("寰愭眹涓婂笀澶�", Pair(121.419384,31.161433), Pair(121.419384,31.161433)),
+//            LocationRoadNearby.BasePlace("闈欏畨鐩戞祴绔欏浗鎺х偣", Pair(121.429439, 31.223632), Pair(121.429439, 31.223632)),
+//            LocationRoadNearby.BasePlace("閲戝北澶ч亾2000鍙�", Pair(121.3404, 30.744262), Pair(121.3404, 30.744262)),
+            LocationRoadNearby.BasePlace("浠欓湠绔�", Pair(121.394775, 31.203982), Pair(121.394775, 31.203982)),
+
+//            LocationRoadNearby.BasePlace("绋嬫ˉ绔�", Pair(121.362928, 31.192925), Pair(121.362928, 31.192925)),
+//            LocationRoadNearby.BasePlace("闀块槼绔�", Pair(121.424603, 31.223644), Pair(121.424603, 31.223644)),
+
+
+//            LocationRoadNearby.BasePlace("鍙ゅ矖璺�", Pair(121.411559, 30.791152), Pair(121.423728, 30.788246)),
+//            LocationRoadNearby.BasePlace("涓滄柟绾腑蹇冭矾", Pair(121.141623, 30.870369), Pair(121.160251, 30.872135)),
+//            LocationRoadNearby.BasePlace("婕惧钩璺�", Pair(121.222056, 30.852923), Pair(121.237356, 30.853606)),
+//            LocationRoadNearby.BasePlace("鍏村瘨璺�", Pair(121.045916, 30.831142), Pair(121.052351, 30.836051)),
+//            LocationRoadNearby.BasePlace("浜湵鍏矾", Pair(121.328213, 30.874901), Pair(121.335347, 30.860441)),
+//            LocationRoadNearby.BasePlace("鍗叓璺�", Pair(121.286369, 30.704997), Pair(121.279021, 30.722918)),
+//            LocationRoadNearby.BasePlace("绉嬪疄璺�", Pair(121.273549, 30.720349), Pair(121.277212, 30.726353)),
+//            LocationRoadNearby.BasePlace("鎭掑悍璺�", Pair(121.335671, 30.85661), Pair(121.342813, 30.857601)),
+//            LocationRoadNearby.BasePlace("鏉炬邯璺�", Pair(121.236017, 30.894031), Pair(121.24154, 30.892297)),
+//            LocationRoadNearby.BasePlace("鍏存璺�", Pair(121.105814, 30.876818), Pair(121.106139, 30.868925)),
+//            LocationRoadNearby.BasePlace("鑽d赴璺�", Pair(121.236894, 30.83599), Pair(121.253117, 30.835875)),
+//            LocationRoadNearby.BasePlace("鍙舵柊鍏矾", Pair(121.164193, 30.936096), Pair(121.023036, 30.933981)),
+//            LocationRoadNearby.BasePlace("闃冲悍璺�", Pair(121.355063, 30.780308), Pair(121.35446, 30.774935)),
+//            LocationRoadNearby.BasePlace("寮犳棫鏀矾", Pair(121.321495, 30.783227), Pair(121.325356, 30.785677)),
+//            LocationRoadNearby.BasePlace("鍐滃缓璺�", Pair(121.134021, 30.855966), Pair(121.141504, 30.856559)),
+//            LocationRoadNearby.BasePlace("鍚堝睍璺�", Pair(121.407831, 30.801774), Pair(121.426746, 30.797785)),
+//            LocationRoadNearby.BasePlace("澶╁崕璺�", Pair(121.451848, 30.776257), Pair(121.4337, 30.80644)),
+//            LocationRoadNearby.BasePlace("鐝犳腐琛�", Pair(121.337652, 30.847802), Pair(121.345829, 30.846835)),
+//            LocationRoadNearby.BasePlace("鑽d笢璺�", Pair(121.249271, 30.832921), Pair(121.249176, 30.835928)),
+//            LocationRoadNearby.BasePlace("涔濅赴璺�", Pair(121.254114, 30.903438), Pair(121.254715, 30.893363)),
         )
-        listOf(500.0, 1000.0, 2000.0, 3000.0).forEach {
+        listOf(
+            500.0,
+//            1000.0,
+            2000.0,
+            3000.0
+        ).forEach {
             locationRoadNearby.searchList(bList, it)
         }
     }

--
Gitblit v1.9.3