From 9fed02564c66b0e75a10cdcd2b9bbe96a9de6d88 Mon Sep 17 00:00:00 2001
From: squallzhjch <zhangjingchao@navinfo.com>
Date: Wed, 30 Aug 2023 14:45:58 +0800
Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=8C=BA=E9=97=B4=E7=AE=97?=
 =?UTF-8?q?=E6=B3=95=EF=BC=8C=E8=BD=A6=E9=81=93=E6=96=BD=E5=B7=A5=EF=BC=8C?=
 =?UTF-8?q?=E9=81=93=E8=B7=AF=E6=96=BD=E5=B7=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../omqs/http/taskupload/TaskUploadScope.kt   |   4 +-
 .../EvaluationResultViewModel.kt              |   2 +-
 .../java/com/navinfo/omqs/util/SignUtil.kt    |  43 +-
 .../java/com/navinfo/omqs/util/TimePeriod.kt  | 366 +++++++++++++++---
 .../library/map/handler/MarkHandler.kt        |  10 +
 vtm                                           |   2 +-
 6 files changed, 373 insertions(+), 54 deletions(-)

diff --git a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt
index 519430d6..03ee80c9 100644
--- a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt
+++ b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt
@@ -134,7 +134,7 @@ class TaskUploadScope(
                         evaluationTaskId = taskBean.id.toString(),
                         linkPid = hadLinkDvoBean.linkPid,//"84207223282277331"
                         linkStatus = linkStatus,
-                        markId = hadLinkDvoBean.mesh,//"20065597"
+                        markId = UUID.randomUUID().toString(),//"20065597"
                         trackPhotoNumber = "",
                         markGeometry = "",
                         featureName = "",
@@ -195,7 +195,7 @@ class TaskUploadScope(
                                 evaluationTaskId = taskBean.id.toString(),
                                 linkPid = hadLinkDvoBean.linkPid,//"84207223282277331"
                                 linkStatus = linkStatus,
-                                markId = hadLinkDvoBean.mesh,//"20065597"
+                                markId = it.id,
                                 trackPhotoNumber = "",
                                 markGeometry = it.geometry,
                                 featureName = it.classCode,
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt
index 82e57317..f1dd7848 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt
@@ -142,7 +142,7 @@ class EvaluationResultViewModel @Inject constructor(
     override fun onCleared() {
         super.onCleared()
         mapController.mMapView.removeOnNIMapClickListener(TAG)
-        mapController.markerHandle.removeMarker(TAG)
+        mapController.markerHandle.removeMarker()
         mapController.lineHandler.removeLine()
     }
 
diff --git a/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt b/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt
index 510e4b9a..23a5c459 100644
--- a/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt
+++ b/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt
@@ -113,7 +113,7 @@ class SignUtil {
                 DataCodeEnum.OMDB_VIADUCT.code -> "高架"
                 DataCodeEnum.OMDB_LINK_CONSTRUCTION.code -> "道路施工"
                 DataCodeEnum.OMDB_LANE_CONSTRUCTION.code -> "车道施工"
-                else -> ""
+                else -> DataCodeEnum.valueOf(data.code).tableName
             }
         }
 
@@ -349,18 +349,53 @@ class SignUtil {
                             title = "linkPid", text = "${data.properties["linkPid"]}"
                         )
                     )
-                    val validPeriod = data.properties["validPeriod"]
-                    if(validPeriod != null){
 
+                    val limitType = when (data.properties["limitType"]) {
+                        "4" -> "施工(全封闭)"
+                        "13" -> "施工(非全封闭)"
+                        else -> ""
+                    }
+                    list.add(
+                        TwoItemAdapterItem(
+                            title = "限制类型",
+                            text = limitType
+                        )
+                    )
+                    val validPeriod = data.properties["validPeriod"]
+                    if (validPeriod != null) {
+                        list.add(
+                            TwoItemAdapterItem(
+                                title = "施工时间",
+                                text = "${TimePeriodUtil.getTimePeriod(validPeriod)}"
+                            )
+                        )
                     }
                 }
                 //车道施工
                 DataCodeEnum.OMDB_LANE_CONSTRUCTION.code -> {
                     list.add(
                         TwoItemAdapterItem(
-                            title = "linkPid", text = "${data.properties["linkPid"]}"
+                            title = "车道号码", text = "${data.properties["laneLinkPid"]}"
                         )
                     )
+                    val startTime = data.properties["startTime"]
+                    if (startTime != null) {
+                        list.add(
+                            TwoItemAdapterItem(
+                                title = "施工开始时间",
+                                text = "${TimePeriodUtil.getTimePeriod(startTime)}"
+                            )
+                        )
+                    }
+                    val endTime = data.properties["endTime"]
+                    if (endTime != null) {
+                        list.add(
+                            TwoItemAdapterItem(
+                                title = "施工结束时间",
+                                text = "${TimePeriodUtil.getTimePeriod(endTime)}"
+                            )
+                        )
+                    }
                 }
             }
             adapter.data = list
diff --git a/app/src/main/java/com/navinfo/omqs/util/TimePeriod.kt b/app/src/main/java/com/navinfo/omqs/util/TimePeriod.kt
index afb3ee8c..ede43f67 100644
--- a/app/src/main/java/com/navinfo/omqs/util/TimePeriod.kt
+++ b/app/src/main/java/com/navinfo/omqs/util/TimePeriod.kt
@@ -21,52 +21,188 @@ private data class TimePeriodObject(
     var startTime: TimePeriod? = null,
     //结束时间
     var endTime: TimePeriod? = null,
-    //大括号,全部
-    var allTime: TimePeriod? = null,
+    //是否是节假日
+    var bH: Boolean = false,
+    //是否是节假日除外
+    var b_H: Boolean = false,
+    //动态变化
+    var bVMS: Boolean = false,
+    //最终输出
+    var res: String = ""
 ) {
     /**
      * 交集 *
      */
     fun intersection(periodObject: TimePeriodObject) {
-        startTime?.let { one ->
-            periodObject.startTime?.let { two ->
-                if (one.year == "") {
-                    one.year = two.year
-                }
-                if (one.month == "") {
-                    one.month = two.month
-                }
-                if (one.day == "") {
-                    one.day = two.day
-                }
-                if (one.hour == "") {
-                    one.hour = two.hour
-                }
-                if (one.minutes == "") {
-                    one.minutes = two.minutes
-                }
-                if (one.week == "") {
-                    one.week = two.week
-                }
+        if (res != "" && periodObject.res == "") {
+            res = "${res}${periodObject.toText()}"
+
+        } else if (res == "" && periodObject.res != "") {
+            res = "${toText()}${periodObject.res}"
+        } else if (res != "" && periodObject.res != "") {
+            res = "${res}${periodObject.res}"
+        } else {
+            if (startTime == null) {
+                startTime = periodObject.startTime
+            } else if (periodObject.startTime != null) {
+                if (startTime!!.year == "")
+                    startTime!!.year = periodObject.startTime!!.year
+                if (startTime!!.month == "")
+                    startTime!!.month = periodObject.startTime!!.month
+                if (startTime!!.day == "")
+                    startTime!!.day = periodObject.startTime!!.day
+                if (startTime!!.hour == "")
+                    startTime!!.hour = periodObject.startTime!!.hour
+                if (startTime!!.week == "")
+                    startTime!!.week = periodObject.startTime!!.week
+                if (startTime!!.minutes == "")
+                    startTime!!.minutes = periodObject.startTime!!.minutes
             }
+
+            if (endTime == null) {
+                endTime = periodObject.endTime
+            } else if (periodObject.endTime != null) {
+                if (endTime!!.year == "")
+                    endTime!!.year = periodObject.endTime!!.year
+                if (endTime!!.month == "")
+                    endTime!!.month = periodObject.endTime!!.month
+                if (endTime!!.day == "")
+                    endTime!!.day = periodObject.endTime!!.day
+                if (endTime!!.hour == "")
+                    endTime!!.hour = periodObject.endTime!!.hour
+                if (endTime!!.week == "")
+                    endTime!!.week = periodObject.endTime!!.week
+                if (endTime!!.minutes == "")
+                    endTime!!.minutes = periodObject.endTime!!.minutes
+            }
+
+            if (!bH)
+                bH = periodObject.bH
+            if (!b_H)
+                b_H = periodObject.b_H
+            if (!bVMS)
+                bVMS = periodObject.bVMS
         }
+        println("交集 $res")
     }
 
     /**
      *  合集 +
      */
     fun compilation(periodObject: TimePeriodObject) {
-
+        res = if (res != "" && periodObject.res == "") {
+            "${res},${periodObject.toText()}"
+        } else if (res == "" && periodObject.res != "") {
+            "${toText()},${periodObject.res}"
+        } else if (res != "" && periodObject.res != "") {
+            "${res},${periodObject.res}"
+        } else
+            "${toText()},${periodObject.toText()}"
+        println("合集 $res")
     }
 
+
     /**
      *
      */
     fun toText(): String {
-        if(endTime == null && allTime == null){
+        if (res == "") {
+            startTime?.let {
+                if (it.year != "") {
+                    res = "${it.year}年"
+                }
+                if (it.month != "") {
+                    res = if (it.year == "") {
+                        "每年${it.month}月"
+                    } else {
+                        "$res${it.month}月"
+                    }
+                }
+                if (it.day != "") {
+                    res = if (it.month == "") {
+                        "${res}每月${it.day}日"
+                    } else
+                        "$res${it.day}日"
+                }
+            }
+            endTime?.let {
+                if (it.year != "" || it.month != "" || it.day != "")
+                    res = "${res}到"
+                if (it.year != "") {
+                    res = "${res}${it.year}年"
+                }
+                if (it.month != "") {
+                    res = "$res${it.month}月"
+                }
+                if (it.day != "") {
+                    res = "$res${it.day}日"
+                }
+            }
 
+            startTime?.let {
+                if (it.week != "") {
+                    res = "${res}每${getWeekEnum(it.week)}"
+                }
+            }
+
+            endTime?.let {
+                if (it.week != "") {
+                    res = "${res}到${getWeekEnum(it.week)}"
+                }
+            }
+
+            startTime?.let {
+                if (it.hour != "") {
+                    res = if (it.minutes != "") {
+                        if (it.minutes.length == 1) {
+                            "${res}${it.hour}:0${it.minutes}"
+                        } else {
+                            "${res}${it.hour}:${it.minutes}"
+                        }
+                    } else {
+                        "${res}:00"
+                    }
+                }
+            }
+
+            endTime?.let {
+                if (it.hour != "") {
+                    res = if (it.minutes != "") {
+                        if (it.minutes.length == 1) {
+                            "${res}-${it.hour}:0${it.minutes}"
+                        } else {
+                            "${res}-${it.hour}:${it.minutes}"
+                        }
+                    } else {
+                        "${res}-${it.hour}:00"
+                    }
+                }
+            }
+            if (bH) {
+                res = "节假日:$res"
+            }
+            if (b_H) {
+                res = "节假日除外${res}:"
+            }
+            if (bVMS) {
+                res = "动态变化:$res"
+            }
+        }
+        println("中间:$res")
+        return res
+    }
+
+    private fun getWeekEnum(s: String): String {
+        return when (s) {
+            "1" -> "周日"
+            "2" -> "周一"
+            "3" -> "周二"
+            "4" -> "周三"
+            "5" -> "周四"
+            "6" -> "周五"
+            "7" -> "周六"
+            else -> ""
         }
-        return ""
     }
 }
 
@@ -78,49 +214,124 @@ private enum class TimeType {
     HOUR,
     MINUTES,
     WEEK,
+    HLD,
+    _HLD,
+    VMS
 }
 
 class TimePeriodUtil {
 
     companion object {
-        private fun getTimePeriod(time: String): String {
+        fun getTimePeriod(time: String): String {
+            println("时间段:$time")
+            var i = 0
+            val charArray = time.toCharArray()
             val list = mutableListOf<TimePeriodObject>()
-            getPeriodObject(time.toCharArray(), 0, list)
-            return list[0].toText()
+            while (i < charArray.size) {
+                when (charArray[i]) {
+                    '[' -> {
+                        i = getPeriodObject(charArray, i + 1, list)
+                    }
+                    '*' -> {
+                        i = getPeriodObject(charArray, i + 1, list)
+                        if (list.size > 1) {
+                            list[0].intersection(list[1])
+                            list.removeAt(1)
+                        }
+                    }
+                    '+' -> {
+                        i = getPeriodObject(charArray, i + 1, list)
+                        if (list.size > 1) {
+                            list[0].compilation(list[1])
+                            list.removeAt(1)
+                        }
+                    }
+                }
+                i++
+            }
+            if (list.size > 0)
+                return list[0].toText()
+            return ""
         }
 
         private fun getPeriodObject(
             charArray: CharArray,
             index: Int,
-            parentList: MutableList<TimePeriodObject>
+            parentList: MutableList<TimePeriodObject>,
         ): Int {
             var i = index
+            val list = mutableListOf<TimePeriodObject>()
             while (i < charArray.size) {
                 when (charArray[i]) {
                     '[' -> {
-                        i = getPeriodObject(charArray, i, parentList)
+                        i = getPeriodObject(charArray, i + 1, list)
                     }
                     '(' -> {
                         var parentPeriodObject = TimePeriodObject()
                         i = getMixUnit(charArray, i, parentPeriodObject)
                         parentList.add(parentPeriodObject)
+                        return i
                     }
                     '*' -> {
-                        i = getPeriodObject(charArray, i + 1, parentList)
-                        if (parentList.size > 1) {
-                            val o = parentList[0]
-                            parentList[0].intersection(parentList[1])
-                            parentList.removeAt(1)
+                        i = getPeriodObject(charArray, i + 1, list)
+                        if (list.size > 1) {
+                            list[0].intersection(list[1])
+                            list.removeAt(1)
                         }
                     }
                     '+' -> {
-                        i = getPeriodObject(charArray, i + 1, parentList)
-                        if (parentList.size > 1) {
-                            val o = parentList[0]
-                            parentList[0].compilation(parentList[1])
-                            parentList.removeAt(1)
+                        i = getPeriodObject(charArray, i + 1, list)
+                        if (list.size > 1) {
+                            list[0].compilation(list[1])
+                            list.removeAt(1)
                         }
                     }
+                    'H', '-', 'V' -> {
+                        i = getOther(charArray, i, parentList)
+                        return i
+                    }
+                    ']' -> {
+                        if (list.isNotEmpty()) {
+                            parentList.add(list[0])
+                        }
+                        return i
+                    }
+                }
+                i++
+            }
+            return i
+        }
+
+        private fun getOther(
+            charArray: CharArray,
+            index: Int,
+            parentList: MutableList<TimePeriodObject>
+        ): Int {
+            var i = index
+            var timeType = TimeType.NONE
+            while (i < charArray.size) {
+                when (charArray[i]) {
+                    'H' -> {
+                        if (timeType == TimeType.NONE) {
+                            timeType = TimeType.HLD
+                            parentList.add(TimePeriodObject(bH = true))
+                        }
+                    }
+                    '-' -> {
+                        if (timeType == TimeType.NONE) {
+                            timeType = TimeType._HLD
+                            parentList.add(TimePeriodObject(b_H = true))
+                        }
+                    }
+                    'V' -> {
+                        if (timeType == TimeType.NONE) {
+                            timeType = TimeType.VMS
+                            parentList.add(TimePeriodObject(bVMS = true))
+                        }
+                    }
+                    ']' -> {
+                        return i - 1
+                    }
                 }
                 i++
             }
@@ -136,6 +347,7 @@ class TimePeriodUtil {
             parentPeriodObject: TimePeriodObject
         ): Int {
             var i = index
+
             while (i < charArray.size) {
                 when (charArray[i]) {
                     '(' -> {
@@ -147,13 +359,13 @@ class TimePeriodUtil {
                             parentPeriodObject.endTime = timePeriod
                         }
                     }
-                    '{' -> {
-                        val timePeriod = TimePeriod()
-                        i = getNumString(charArray, i + 1, timePeriod)
-                        parentPeriodObject.allTime = timePeriod
-                    }
+//                    '{' -> {
+//                        val timePeriod = TimePeriod()
+//                        i = getNumString(charArray, i + 1, timePeriod)
+//                        parentPeriodObject.allTime = true
+//                    }
                     ']' -> {
-                        return i
+                        return i - 1
                     }
                 }
                 i++
@@ -210,5 +422,67 @@ class TimePeriodUtil {
 }
 
 fun main() {
+    var t = ""
+    var text = ""
+    t = "[(y2010M8d16)(y2010M9d17)]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("1:$text")
+    t = "[(y2010M8d17){d1}]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("2:$text")
+    t = "[(M8d17)(M8d31)]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("3:$text")
+    t = "[(M8d17){d1}]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("4:$text")
+    t = "[(h9m0)(h23m59)]]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("5:$text")
+    t = "[(y2010)(y2030)]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("6:$text")
+    t = "[(y2010){y1}]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("8:$text")
+    t = "[(y2010M8t1){t1}]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("9:$text")
+    t = "[(y2010M8t1)(y2010M8t3)]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("10:$text")
+    t = "[(t4)(t1)]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("11:$text")
+    t = "[(t4){d1}]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("12:$text")
 
+    t = "[[(y2010M8d8)(y2010M8d24)]*[(h7m0)(h22m0)]]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("13:$text")
+
+    t = "[[(M8d1)(M8d31)]*[(t3){d1}]*[(h6m0)(h19m0)]]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("14:$text")
+
+    t = "[[[(t4)(t6)]*[(h7m30)(h12m0)]]+[[(t4)(t6)]*[(h14m0)(h20m0)]]]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("15:$text")
+
+    t = "[[[(M5d7){d1}]*[(h9m0)(h23m59)]]+[(M5d8)(M8d14)]+[[(M8d15){d1}]*[(h0m0)(h21m0)]]]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("16:$text")
+
+    t = "[[HLD]*[(h8m0)(h16m0)]]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("17:$text")
+
+    t = "[[-HLD]*[[[(M5d7){d1}]*[(h9m0)(h23m59)]]+[(M5d8)(M8d14)]+[[(M8d15){d1}]*[(h0m0)(h21m0)]]]]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("18:$text")
+
+    t = "[[VMS]*[(h8m0)(h16m0)]]"
+    text = TimePeriodUtil.getTimePeriod(t)
+    println("19:$text")
 }
\ No newline at end of file
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/MarkHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/MarkHandler.kt
index b2e9b9db..0d3e70e9 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/MarkHandler.kt
+++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/MarkHandler.kt
@@ -345,6 +345,16 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
         }
     }
 
+    fun removeMarker() {
+        for (e in mDefaultMarkerLayer.itemList) {
+            if (e is MarkerItem) {
+                mDefaultMarkerLayer.removeItem(e)
+                break
+            }
+        }
+        mMapView.vtmMap.updateMap(true)
+    }
+
 
     /**
      * 增加或更新marker
diff --git a/vtm b/vtm
index 163b9f07..1577cd35 160000
--- a/vtm
+++ b/vtm
@@ -1 +1 @@
-Subproject commit 163b9f0773f8216621d2a2c46aa7fa1ee98e431f
+Subproject commit 1577cd351a9edf629438840f6bff45bdcc08302c