feiyu02
2024-10-12 7cd8d2a1e96de3d173bf5af64b4adc29c497db2a
1. 新增评估结果批量修改相关接口(完成)
已修改8个文件
已添加1个文件
234 ■■■■■ 文件已修改
src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreUtil.kt 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/bgtask/AopTaskCtrl.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/location/CoordinateUtil.kt 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/DeviceRep.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/ExternalDeviceRep.kt 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ItemevaluationServiceImpl.kt 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/EvaluationUpdateVo.kt 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/ScoreUtil.kt
@@ -7,6 +7,7 @@
import cn.flightfeather.supervision.domain.ds1.entity.Itemevaluation
import cn.flightfeather.supervision.lightshare.vo.EvaluationVo
import cn.flightfeather.supervision.lightshare.vo.ItemEvaluationVo
import cn.flightfeather.supervision.lightshare.vo.SubRulePair
import java.util.*
/**
@@ -37,7 +38,47 @@
            // è¡¥å……各最上级评分项的计分
            val fatherId = r.first.fatherid
            for (t in (evaluationScene.topRules.value ?: emptyList())) {
            for (t in (topRules ?: emptyList())) {
                if (t.guid == fatherId) {
                    t.score += r.first.score
                    break
                }
            }
        }
    }
    /**
     * æ ¹æ®æ‰€é€‰æœ€æ·±å±‚评估选项,以原有评分为基础,给规则赋值对应分数及自动计算其余所有条目得分
     * @param evaluationScene éœ€è¦è¯„估的对象
     * @param selected è¯„估表中选中的评估条目主键id集合(必须是最深一层的评估条目)
     */
    fun scoreAssignSelected(evaluationScene: AopDataSource.EvaluationScene, selected: List<SubRulePair?>?) {
        val topRules = evaluationScene.topRules.value
        val subRules = evaluationScene.rules.value
        val evaluation = evaluationScene.evaluation.value ?: return
        val itemevaluationList = evaluationScene.itemevaluationList.value ?: return
        subRules?.forEach { r ->
            r.second.forEach { e ->
                // é¦–先将原有的分数赋值给对应规则
                val itemEva = itemevaluationList.find { it.esrguid == e.guid }
                e.score = itemEva?.value?.toIntOrNull() ?: 0
                e.selected = itemEva?.extension1 == "true"
                // æ ¹æ®ä¼ å…¥çš„选中评估条目主键id,修改其得分
                selected?.find { it?.id == e.guid }?.let {s ->
                    if (s.selected == true) {
                        e.setMaxScore()
                    } else {
                        e.clear()
                    }
                }
            }
            // æ ¹æ®å­é¡¹çš„选择情况,自动计算该条评估的总得分
            subRuleCal(r)
            // è¡¥å……各最上级评分项的计分
            val fatherId = r.first.fatherid
            for (t in (topRules ?: emptyList())) {
                if (t.guid == fatherId) {
                    t.score += r.first.score
                    break
src/main/kotlin/cn/flightfeather/supervision/business/bgtask/AopTaskCtrl.kt
@@ -79,7 +79,7 @@
            val name = "${districtName}${Constant.SceneType.getDes(sceneType)}自动评分"
            val bgTask = backgroundTaskCtrl.startNewTask(BgTaskType.AUTO_SCORE, id, name) {
                // ç›‘测数据分析入库
//                dataAnalysis(districtCode, sceneType, taskId, year, month)
                dataAnalysis(districtCode, sceneType, taskId, year, month)
                // è‡ªåŠ¨è¯„ä¼°è®¡ç®—å…¥åº“
                aopEvaluation.executeByTopTask(taskId, sceneType)
                // çŽ¯ä¿¡ç ç»“æžœè½¬æ¢å…¥åº“
src/main/kotlin/cn/flightfeather/supervision/business/location/CoordinateUtil.kt
@@ -1,8 +1,6 @@
package cn.flightfeather.supervision.business.location
import kotlin.math.PI
import kotlin.math.cos
import kotlin.math.sin
import kotlin.math.*
object CoordinateUtil {
@@ -32,4 +30,17 @@
    fun disToLng(distance: Double): Double {
        return distance * 0.00001
    }
    fun calculateDistance(lon1: Double, lat1: Double, lon2: Double, lat2: Double): Double {
        val R = 6371; // åœ°çƒå¹³å‡åŠå¾„,单位公里
        val dLat = (lat2 - lat1) * Math.PI / 180;
        val dLon = (lon2 - lon1) * Math.PI / 180;
        val a = sin(dLat / 2) * sin(dLat / 2) +
                cos(lat1 * Math.PI / 180) * cos(lat2 * Math.PI / 180) *
                sin(dLon / 2) * sin(dLon / 2);
        val c = 2 * atan2(sqrt(a), sqrt(1 - a));
        val distance = R * c;
        return distance;
    }
}
src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/DeviceRep.kt
@@ -10,7 +10,7 @@
import java.util.*
/**
 *
 * åœºæ™¯è®¾å¤‡æ•°æ®åº“查询
 * @date 2024/7/24
 * @author feiyu02
 */
src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/ExternalDeviceRep.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package cn.flightfeather.supervision.domain.ds1.repository
/**
 * å¤–部监测设备数据库查询
 * @date 2024/9/29
 * @author feiyu02
 */
class ExternalDeviceRep {
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/EvaluationServiceImpl.kt
@@ -285,7 +285,13 @@
        //1. æŸ¥æ‰¾åŽ†å²è®°å½•ï¼ŒæŸ¥çœ‹è¯„ä¼°æ˜¯å¦å·²å­˜åœ¨
//        areaVo.scensetypeid ?: throw ResponseErrorException("查询时必须选择一个场景类型")
//        val task = taskRep.findOneTask(areaVo) ?: throw ResponseErrorException("查询时必须选择一个场景类型")
        return evaluationRep.findAutoScore(areaVo)
        val evaList = evaluationRep.findAutoScore(areaVo)
        evaList?.forEach {
            it?.subTaskId?.let { id->
                it.itemEvaluations = evaluationRep.findItemEvaluation(id)
            }
        }
        return evaList
    }
    override fun downloadAutoEvaluation(areaVo: AreaVo, forceUpdate: Boolean, response: HttpServletResponse): Boolean {
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ItemevaluationServiceImpl.kt
@@ -120,11 +120,15 @@
        try {
            source.loop() { _, evaluationScene ->
                if (evaluationScene.noRecord()) throw BizException("巡查任务不存在")
                evaVo.subTaskEvaList?.find {
                    it.subTaskId == evaluationScene.subTask.value?.stguid
                }?.let {stEva ->
                // å°†åˆ†æ•°èµ‹å€¼åˆ°å¯¹åº”的评估规则下,并且自动计算其余规则的得分
                ScoreUtil.scoreAssign(evaluationScene, itemList)
                    ScoreUtil.scoreAssignSelected(evaluationScene, stEva.subRule)
                // èŽ·å–æ€»åˆ†å’Œå­é¡¹å¾—åˆ†æ•°æ®åº“è¡¨ç»“æž„ä½“ï¼Œå¹¶å…¥åº“
                ScoreUtil.updateEvaRecord(evaluationScene)?.let { aopOutput.updateDbEvaluation(evaluationScene, it) }
            }
            }
            return true
        } catch (e: Exception) {
            throw BizException("出现系统内部错误")
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/EvaluationUpdateVo.kt
@@ -1,5 +1,6 @@
package cn.flightfeather.supervision.lightshare.vo
import com.fasterxml.jackson.annotation.JsonInclude
import io.swagger.annotations.ApiModel
import io.swagger.annotations.ApiModelProperty
@@ -8,9 +9,16 @@
 * @date 2024/9/28
 * @author feiyu02
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@ApiModel("巡查任务监测数据异常扣分")
class EvaluationUpdateVo : AreaEvaVo() {
    @ApiModelProperty("巡查任务的评分修改详情")
    var subTaskEvaList: List<SubTaskEva>? = null
}
@ApiModel("巡查任务监测数据扣分详情")
class SubTaskEva {
    @ApiModelProperty("巡查任务主键")
    var subTaskId: String? = null
@@ -18,5 +26,14 @@
    var ruleId: String? = null
    @ApiModelProperty("具体评估条目是否勾选", notes = "对象结构为评估条目的主键和是否勾选形成的键值对列表")
    var subRule: List<Pair<String, Boolean>>? = null
    var subRule: List<SubRulePair?>? = null
}
@ApiModel("具体评估条目勾选情况")
class SubRulePair {
    @ApiModelProperty("评估规则id")
    var id: String? = null
    @ApiModelProperty("是否选中")
    var selected: Boolean? = null
}
src/test/kotlin/cn/flightfeather/supervision/business/location/LocationRoadNearbyTest.kt
@@ -9,6 +9,7 @@
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit.jupiter.SpringExtension
import org.springframework.test.context.junit4.SpringRunner
import kotlin.math.log
@RunWith(SpringRunner::class)
@ExtendWith(SpringExtension::class)
@@ -45,10 +46,10 @@
//            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("徐汇上师大", 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.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)),
@@ -79,9 +80,128 @@
//            500.0,
//            1000.0,
//            2000.0,
            3000.0
//            3000.0,
            5000.0
        ).forEach {
            locationRoadNearby.searchList(bList, it)
        }
    }
    @Test
    fun foo2() {
        val bList = listOf(
            LocationRoadNearby.BasePlace("1", Pair(121.334271, 31.238706), Pair(121.334271, 31.238706)),
            LocationRoadNearby.BasePlace("2", Pair(121.343935, 31.239303), Pair(121.343935, 31.239303)),
            LocationRoadNearby.BasePlace("3", Pair(121.3536, 31.239898), Pair(121.3536, 31.239898)),
            LocationRoadNearby.BasePlace("4", Pair(121.363263, 31.240491), Pair(121.363263, 31.240491)),
            LocationRoadNearby.BasePlace("5", Pair(121.372924, 31.241082), Pair(121.372924, 31.241082)),
            LocationRoadNearby.BasePlace("6", Pair(121.382581, 31.241668), Pair(121.382581, 31.241668)),
            LocationRoadNearby.BasePlace("7", Pair(121.392235, 31.242251), Pair(121.392235, 31.242251)),
            LocationRoadNearby.BasePlace("8", Pair(121.401886, 31.24283), Pair(121.401886, 31.24283)),
            LocationRoadNearby.BasePlace("9", Pair(121.411531, 31.243404), Pair(121.411531, 31.243404)),
            LocationRoadNearby.BasePlace("10", Pair(121.421172, 31.243972), Pair(121.421172, 31.243972)),
            LocationRoadNearby.BasePlace("11", Pair(121.430808, 31.244536), Pair(121.430808, 31.244536)),
            LocationRoadNearby.BasePlace("12", Pair(121.440441, 31.245096), Pair(121.440441, 31.245096)),
            LocationRoadNearby.BasePlace("13", Pair(121.334944, 31.230417), Pair(121.334944, 31.230417)),
            LocationRoadNearby.BasePlace("14", Pair(121.344609, 31.231014), Pair(121.344609, 31.231014)),
            LocationRoadNearby.BasePlace("15", Pair(121.354273, 31.231609), Pair(121.354273, 31.231609)),
            LocationRoadNearby.BasePlace("16", Pair(121.363934, 31.232202), Pair(121.363934, 31.232202)),
            LocationRoadNearby.BasePlace("17", Pair(121.373595, 31.232792), Pair(121.373595, 31.232792)),
            LocationRoadNearby.BasePlace("18", Pair(121.383251, 31.233378), Pair(121.383251, 31.233378)),
            LocationRoadNearby.BasePlace("19", Pair(121.392904, 31.233961), Pair(121.392904, 31.233961)),
            LocationRoadNearby.BasePlace("20", Pair(121.402553, 31.234539), Pair(121.402553, 31.234539)),
            LocationRoadNearby.BasePlace("21", Pair(121.412197, 31.235112), Pair(121.412197, 31.235112)),
            LocationRoadNearby.BasePlace("22", Pair(121.421837, 31.235681), Pair(121.421837, 31.235681)),
            LocationRoadNearby.BasePlace("23", Pair(121.431472, 31.236245), Pair(121.431472, 31.236245)),
            LocationRoadNearby.BasePlace("24", Pair(121.441103, 31.236803), Pair(121.441103, 31.236803)),
            LocationRoadNearby.BasePlace("25", Pair(121.335618, 31.222129), Pair(121.335618, 31.222129)),
            LocationRoadNearby.BasePlace("26", Pair(121.345282, 31.222726), Pair(121.345282, 31.222726)),
            LocationRoadNearby.BasePlace("27", Pair(121.354944, 31.223321), Pair(121.354944, 31.223321)),
            LocationRoadNearby.BasePlace("28", Pair(121.364606, 31.223913), Pair(121.364606, 31.223913)),
            LocationRoadNearby.BasePlace("29", Pair(121.374265, 31.224503), Pair(121.374265, 31.224503)),
            LocationRoadNearby.BasePlace("30", Pair(121.38392, 31.225089), Pair(121.38392, 31.225089)),
            LocationRoadNearby.BasePlace("31", Pair(121.393572, 31.225671), Pair(121.393572, 31.225671)),
            LocationRoadNearby.BasePlace("32", Pair(121.40322, 31.226248), Pair(121.40322, 31.226248)),
            LocationRoadNearby.BasePlace("33", Pair(121.412863, 31.226821), Pair(121.412863, 31.226821)),
            LocationRoadNearby.BasePlace("34", Pair(121.422502, 31.227389), Pair(121.422502, 31.227389)),
            LocationRoadNearby.BasePlace("35", Pair(121.432135, 31.227952), Pair(121.432135, 31.227952)),
            LocationRoadNearby.BasePlace("36", Pair(121.441765, 31.228511), Pair(121.441765, 31.228511)),
            LocationRoadNearby.BasePlace("37", Pair(121.336292, 31.213841), Pair(121.336292, 31.213841)),
            LocationRoadNearby.BasePlace("38", Pair(121.345955, 31.214437), Pair(121.345955, 31.214437)),
            LocationRoadNearby.BasePlace("39", Pair(121.355617, 31.215032), Pair(121.355617, 31.215032)),
            LocationRoadNearby.BasePlace("40", Pair(121.365276, 31.215624), Pair(121.365276, 31.215624)),
            LocationRoadNearby.BasePlace("41", Pair(121.374934, 31.216213), Pair(121.374934, 31.216213)),
            LocationRoadNearby.BasePlace("42", Pair(121.384589, 31.216799), Pair(121.384589, 31.216799)),
            LocationRoadNearby.BasePlace("43", Pair(121.394239, 31.21738), Pair(121.394239, 31.21738)),
            LocationRoadNearby.BasePlace("44", Pair(121.403886, 31.217958), Pair(121.403886, 31.217958)),
            LocationRoadNearby.BasePlace("45", Pair(121.413528, 31.21853), Pair(121.413528, 31.21853)),
            LocationRoadNearby.BasePlace("46", Pair(121.423165, 31.219097), Pair(121.423165, 31.219097)),
            LocationRoadNearby.BasePlace("47", Pair(121.432799, 31.21966), Pair(121.432799, 31.21966)),
            LocationRoadNearby.BasePlace("48", Pair(121.442427, 31.220218), Pair(121.442427, 31.220218)),
            LocationRoadNearby.BasePlace("49", Pair(121.336966, 31.205552), Pair(121.336966, 31.205552)),
            LocationRoadNearby.BasePlace("50", Pair(121.346627, 31.206149), Pair(121.346627, 31.206149)),
            LocationRoadNearby.BasePlace("51", Pair(121.356289, 31.206743), Pair(121.356289, 31.206743)),
            LocationRoadNearby.BasePlace("52", Pair(121.365948, 31.207335), Pair(121.365948, 31.207335)),
            LocationRoadNearby.BasePlace("53", Pair(121.375604, 31.207923), Pair(121.375604, 31.207923)),
            LocationRoadNearby.BasePlace("54", Pair(121.385257, 31.208509), Pair(121.385257, 31.208509)),
            LocationRoadNearby.BasePlace("55", Pair(121.394907, 31.20909), Pair(121.394907, 31.20909)),
            LocationRoadNearby.BasePlace("56", Pair(121.404553, 31.209667), Pair(121.404553, 31.209667)),
            LocationRoadNearby.BasePlace("57", Pair(121.414193, 31.210238), Pair(121.414193, 31.210238)),
            LocationRoadNearby.BasePlace("58", Pair(121.42383, 31.210805), Pair(121.42383, 31.210805)),
            LocationRoadNearby.BasePlace("59", Pair(121.433461, 31.211368), Pair(121.433461, 31.211368)),
            LocationRoadNearby.BasePlace("60", Pair(121.443088, 31.211925), Pair(121.443088, 31.211925)),
            LocationRoadNearby.BasePlace("61", Pair(121.337639, 31.197263), Pair(121.337639, 31.197263)),
            LocationRoadNearby.BasePlace("62", Pair(121.3473, 31.19786), Pair(121.3473, 31.19786)),
            LocationRoadNearby.BasePlace("63", Pair(121.356959, 31.198453), Pair(121.356959, 31.198453)),
            LocationRoadNearby.BasePlace("64", Pair(121.366617, 31.199045), Pair(121.366617, 31.199045)),
            LocationRoadNearby.BasePlace("65", Pair(121.376274, 31.199634), Pair(121.376274, 31.199634)),
            LocationRoadNearby.BasePlace("66", Pair(121.385925, 31.200218), Pair(121.385925, 31.200218)),
            LocationRoadNearby.BasePlace("67", Pair(121.395574, 31.200799), Pair(121.395574, 31.200799)),
            LocationRoadNearby.BasePlace("68", Pair(121.405218, 31.201376), Pair(121.405218, 31.201376)),
            LocationRoadNearby.BasePlace("69", Pair(121.414858, 31.201947), Pair(121.414858, 31.201947)),
            LocationRoadNearby.BasePlace("70", Pair(121.424494, 31.202514), Pair(121.424494, 31.202514)),
            LocationRoadNearby.BasePlace("71", Pair(121.434123, 31.203075), Pair(121.434123, 31.203075)),
            LocationRoadNearby.BasePlace("72", Pair(121.44375, 31.203632), Pair(121.44375, 31.203632)),
            LocationRoadNearby.BasePlace("73", Pair(121.338312, 31.188975), Pair(121.338312, 31.188975)),
            LocationRoadNearby.BasePlace("74", Pair(121.347972, 31.189571), Pair(121.347972, 31.189571)),
            LocationRoadNearby.BasePlace("75", Pair(121.357631, 31.190164), Pair(121.357631, 31.190164)),
            LocationRoadNearby.BasePlace("76", Pair(121.367288, 31.190755), Pair(121.367288, 31.190755)),
            LocationRoadNearby.BasePlace("77", Pair(121.376943, 31.191343), Pair(121.376943, 31.191343)),
            LocationRoadNearby.BasePlace("78", Pair(121.386593, 31.191928), Pair(121.386593, 31.191928)),
            LocationRoadNearby.BasePlace("79", Pair(121.396241, 31.192508), Pair(121.396241, 31.192508)),
            LocationRoadNearby.BasePlace("80", Pair(121.405884, 31.193084), Pair(121.405884, 31.193084)),
            LocationRoadNearby.BasePlace("81", Pair(121.415522, 31.193656), Pair(121.415522, 31.193656)),
            LocationRoadNearby.BasePlace("82", Pair(121.425156, 31.194221), Pair(121.425156, 31.194221)),
            LocationRoadNearby.BasePlace("83", Pair(121.434785, 31.194782), Pair(121.434785, 31.194782)),
            LocationRoadNearby.BasePlace("84", Pair(121.444411, 31.195339), Pair(121.444411, 31.195339)),
            LocationRoadNearby.BasePlace("85", Pair(121.338984, 31.180686), Pair(121.338984, 31.180686)),
            LocationRoadNearby.BasePlace("86", Pair(121.348643, 31.181281), Pair(121.348643, 31.181281)),
            LocationRoadNearby.BasePlace("87", Pair(121.358302, 31.181875), Pair(121.358302, 31.181875)),
            LocationRoadNearby.BasePlace("88", Pair(121.367957, 31.182466), Pair(121.367957, 31.182466)),
            LocationRoadNearby.BasePlace("89", Pair(121.377611, 31.183053), Pair(121.377611, 31.183053)),
            LocationRoadNearby.BasePlace("90", Pair(121.387261, 31.183638), Pair(121.387261, 31.183638)),
            LocationRoadNearby.BasePlace("91", Pair(121.396907, 31.184217), Pair(121.396907, 31.184217)),
            LocationRoadNearby.BasePlace("92", Pair(121.406549, 31.184793), Pair(121.406549, 31.184793)),
            LocationRoadNearby.BasePlace("93", Pair(121.416187, 31.185363), Pair(121.416187, 31.185363)),
            LocationRoadNearby.BasePlace("94", Pair(121.42582, 31.18593), Pair(121.42582, 31.18593)),
            LocationRoadNearby.BasePlace("95", Pair(121.435448, 31.18649), Pair(121.435448, 31.18649)),
            LocationRoadNearby.BasePlace("96", Pair(121.445071, 31.187046), Pair(121.445071, 31.187046)),
            LocationRoadNearby.BasePlace("97", Pair(121.339657, 31.172397), Pair(121.339657, 31.172397)),
            LocationRoadNearby.BasePlace("98", Pair(121.349315, 31.172992), Pair(121.349315, 31.172992)),
            LocationRoadNearby.BasePlace("99", Pair(121.358972, 31.173586), Pair(121.358972, 31.173586)),
            LocationRoadNearby.BasePlace("100", Pair(121.368627, 31.174176), Pair(121.368627, 31.174176)),
            LocationRoadNearby.BasePlace("101", Pair(121.378279, 31.174764), Pair(121.378279, 31.174764)),
            LocationRoadNearby.BasePlace("102", Pair(121.387928, 31.175347), Pair(121.387928, 31.175347)),
            LocationRoadNearby.BasePlace("103", Pair(121.397574, 31.175926), Pair(121.397574, 31.175926)),
            LocationRoadNearby.BasePlace("104", Pair(121.407215, 31.176501), Pair(121.407215, 31.176501)),
            LocationRoadNearby.BasePlace("105", Pair(121.41685, 31.177072), Pair(121.41685, 31.177072)),
            LocationRoadNearby.BasePlace("106", Pair(121.426483, 31.177637), Pair(121.426483, 31.177637)),
            LocationRoadNearby.BasePlace("107", Pair(121.436109, 31.178198), Pair(121.436109, 31.178198)),
            LocationRoadNearby.BasePlace("108", Pair(121.445732, 31.178752), Pair(121.445732, 31.178752)),
        )
        val locationRoadNearby = LocationRoadNearby(scenseMapper)
        locationRoadNearby.searchList(bList, 0.9178855120092253 / 2 * 1000)
//        val d = CoordinateUtil.calculateDistance(121.436109, 31.178198, 121.426483, 31.177637)
//        println(d)
    }
}