bjb 2 месяцев назад
Родитель
Сommit
766b4a9b28

+ 14 - 13
data/src/main/java/com/grkj/data/domain/logic/impl/JobTicketLogic.kt

@@ -392,17 +392,15 @@ class JobTicketLogic @Inject constructor(
 
                 /** 工具:给待办挂上前置链并收集 **/
                 fun collect(join: TodoStepJoin) {
-                    if (previousStepJoin.isNotEmpty()) {
-                        join.previousTodoStepJoin = previousStepJoin.toList()
-                    }
+                    if (previousStepJoin.isNotEmpty()) join.previousTodoStepJoin = previousStepJoin.toList()
                     stepJoins += join
                 }
 
-                /* 1️⃣ Lock / Unlock(按 group 拆) */
+                // 上锁和解锁按照分组拆分
                 if (stepDef.enableLock || stepDef.enableUnlock) {
                     val action = if (stepDef.enableLock) StepAction.LOCK else StepAction.UNLOCK
-                    val type = if (stepDef.enableLock) 0 else 1          // key.ticketType
-                    val keysOfStep = keyRecords.filter {                     // 全部钥匙记录
+                    val type = if (stepDef.enableLock) 0 else 1
+                    val keysOfStep = keyRecords.filter {
                         it.ticketId == ticketId && it.ticketType == type && it.delFlag == "0"
                     }
 
@@ -410,29 +408,32 @@ class JobTicketLogic @Inject constructor(
                     val lockJoins = groupList.flatMap { g ->
                         val keysOfGroup = keysOfStep.filter { it.groupId == g.id }
 
+                        // 该 group 还没取钥匙 → 占位 待办
                         if (keysOfGroup.isEmpty()) {
-                            // 该 group 还没取钥匙 → 占位 Todo
                             listOf(
                                 buildTodoStepJoin(
-                                    stepDef, ticket, stepDef, lockerList, colockerList, pointDatas,
+                                    stepDef, ticket,
+                                    stepDef, lockerList,
+                                    colockerList, pointDatas,
                                     g.id, g.groupName, null
                                 ).only(action)
                             )
                         } else {
-                            // 该 group 已有钥匙记录 → 每把钥匙一条 Todo
+                            // 该 group 已有钥匙记录 → 每把钥匙一条 待办
                             keysOfGroup.map { k ->
                                 buildTodoStepJoin(
-                                    stepDef, ticket, stepDef, lockerList, colockerList, pointDatas,
+                                    stepDef, ticket,
+                                    stepDef, lockerList,
+                                    colockerList, pointDatas,
                                     k.groupId, g.groupName, k
                                 ).only(action)
                             }
                         }
                     }
-
                     lockJoins.forEach(::collect)
                 }
 
-                /* 2️⃣ Colock / Release(不拆 group) */
+                // 处理共锁
                 if (stepDef.enableColock) {
                     collect(
                         buildTodoStepJoin(
@@ -444,6 +445,7 @@ class JobTicketLogic @Inject constructor(
                     )
                 }
 
+                // 处理解除共锁
                 if (stepDef.enableReleaseColock) {
                     collect(
                         buildTodoStepJoin(
@@ -480,7 +482,6 @@ class JobTicketLogic @Inject constructor(
                 if (currentStepId == stepDef.stepId) {
                     previousStepJoin.addAll(stepJoins)
                 }
-
             }
         }
 

+ 10 - 12
data/src/main/java/com/grkj/data/entity/extension/TodoDataExtension.kt

@@ -1,13 +1,11 @@
 package com.grkj.data.entity.extension
 
 import com.grkj.data.data.MainDomainData
+import com.grkj.data.domain.vo.TodoItemVo
+import com.grkj.data.entity.local.TodoStepJoin
 import com.grkj.data.enums.JobTicketStatusEnum
 import com.grkj.data.enums.OperationTypeEnum
 import com.grkj.data.enums.TodoStatusEnum
-import com.grkj.data.entity.local.TodoStepJoin
-import com.grkj.data.domain.vo.TodoItemVo
-import kotlin.collections.contains
-import kotlin.collections.iterator
 
 /**
  * 转换todo数据
@@ -23,14 +21,14 @@ fun TodoStepJoin.toTodoVo(sameTicketStepJoinData: List<TodoStepJoin>): TodoItemV
         this.stepId = temp.stepId
         this.workflowStepId = temp.workflowStepId
         this.stepIndex = temp.stepIndex
-        this.isCurrentStep =
-            (sameTicketStepJoinData.filter { it.stepStatus == "0" }
-                .minByOrNull { it.stepIndex }?.stepIndex == temp.stepIndex || (sameTicketStepJoinData.none {
-                it.stepStatus == "0"
-            } && temp.enableEndJob)) && temp.ticketStatus !in listOf(
-                JobTicketStatusEnum.CANCELED.status,
-                JobTicketStatusEnum.FINISHED.status, JobTicketStatusEnum.NOT_START.status
-            )
+        this.isCurrentStep = (sameTicketStepJoinData.filter { it.stepStatus == "0" }
+            .minByOrNull { it.stepIndex }?.stepIndex == temp.stepIndex
+                || (sameTicketStepJoinData.none { it.stepStatus == "0" } && temp.enableEndJob))
+                && temp.ticketStatus !in listOf(
+            JobTicketStatusEnum.CANCELED.status,
+            JobTicketStatusEnum.FINISHED.status,
+            JobTicketStatusEnum.NOT_START.status
+        )
         this.todoTitle = temp.stepTitleShort ?: temp.stepTitle
         this.todoContent = temp.stepDescription
         this.todoType = type

+ 1 - 1
data/src/main/java/com/grkj/data/hardware/modbus/DockBean.kt

@@ -546,7 +546,7 @@ class DockBean(
         var rfid: String?,
         var mac: String?,
         var isReady: Boolean = false,    // 钥匙是否准备好(连接上且为待机模式)
-        var power: Int = 0 //电量
+        var power: Int = -1 //电量
     ) : DeviceBean(addr, DeviceConst.DEVICE_TYPE_KEY, row, idx, isExist, lockEnabled) {
         override fun toString(): String {
             return "KeyBean( isCharging=$isCharging, rfid=$rfid, mac=$mac, isReady=$isReady, row=$row, idx=$idx, isExist=$isExist, power=$power)"

+ 6 - 9
data/src/main/java/com/grkj/data/hardware/modbus/ModBusController.kt

@@ -11,7 +11,6 @@ import com.grkj.data.utils.event.ModbusInitCompleteEvent
 import com.grkj.data.utils.event.ToastEvent
 import com.grkj.shared.utils.extension.isPureZero
 import com.grkj.shared.utils.extension.removeLeadingZeros
-import com.grkj.shared.utils.extension.toHexFromLe
 import com.grkj.shared.utils.extension.toHexStrings
 import com.grkj.shared.utils.i18n.I18nManager
 import com.huyuhui.fastble.BleManager
@@ -1058,14 +1057,12 @@ object ModBusController {
         sendConnectingAndConnected.filter { it !in keyList.map { it.mac } }.forEach {
             BleSendDispatcher.scheduleDisconnect(it)
         }
-        keyList = keyList.sortedWith(
-            compareByDescending<DockBean.KeyBean> {
-                BleSendDispatcher.isConnected(it.mac ?: "") || BleSendDispatcher.isConnecting(
-                    it.mac ?: ""
-                )
-            }    // 主键:在线优先
-                .thenByDescending { it.power }                                                // 三级:电量越高
-        )
+        keyList = keyList.sortedWith(compareByDescending<DockBean.KeyBean> {
+            // 主键:在线优先
+            BleSendDispatcher.isConnected(it.mac ?: "") || BleSendDispatcher.isConnecting(it.mac ?: "")
+        }.thenByDescending { it.power }  // 三级:电量越高
+        ).filter { it.power == -1 || it.power >= 30 } // 过滤出来电量>=30的或者暂时没有检测出来的设备
+        logger.info("蓝牙 - 检查钥匙电量 -> ${keyList.map { it.power }}")
         val connectedKey = keyList.find { BleSendDispatcher.isConnected(it.mac ?: "") }
         if (connectedKey != null) {
             val addr =

+ 2 - 2
iscs_lock/build.gradle.kts

@@ -14,8 +14,8 @@ android {
         applicationId = "com.grkj.iscs"
         minSdk = 25
         targetSdk = 35
-        versionCode = 2
-        versionName = "v1.0.1"
+        versionCode = 3
+        versionName = "v1.0.2"
 
         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
     }

+ 4 - 0
iscs_lock/src/main/java/com/grkj/iscs/features/login/activity/LoginActivity.kt

@@ -19,6 +19,7 @@ import com.drake.brv.utils.grid
 import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
+import com.grkj.data.data.MMKVConstants
 import com.grkj.data.data.MainDomainData
 import com.grkj.data.entity.local.LoginMenuEntity
 import com.grkj.data.enums.LoginResultEnum
@@ -51,6 +52,7 @@ import com.grkj.ui_base.utils.fingerprint.FingerprintUtil
 import com.kongzue.dialogx.dialogs.CustomDialog
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback
 import com.sik.sikcore.SIKCore
+import com.sik.sikcore.extension.saveMMKVData
 import com.sik.sikcore.extension.setDebouncedClickListener
 import com.sik.sikcore.shell.ShellUtils
 import com.sik.sikimage.ImageConvertUtils
@@ -77,6 +79,8 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
     }
 
     override fun initView() {
+        // 初始化设置共锁人不允许登录
+        MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.saveMMKVData(false)
         // ② 建一个 HLK 客户端(串口或你现有的 Modbus 封装)
         // val hlk = Hlk223Client(Hlk223Config.getProtocol(), "HLK-223")
         // ③ 想切到 HLK 路线(但保持对外 API 不变)

+ 4 - 4
iscs_lock/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobManageHomeViewModel.kt

@@ -6,11 +6,11 @@ import com.grkj.data.data.DictConstants
 import com.grkj.data.data.MainDomainData
 import com.grkj.data.domain.logic.IExceptionLogic
 import com.grkj.data.domain.logic.IJobTicketLogic
+import com.grkj.data.domain.vo.TodoItemVo
 import com.grkj.data.entity.extension.splitTodoSteps
 import com.grkj.data.entity.extension.toTodoVo
 import com.grkj.data.entity.local.isMyTodo
 import com.grkj.data.net.res.CommonDictRes
-import com.grkj.data.domain.vo.TodoItemVo
 import com.grkj.shared.utils.i18n.I18nManager
 import com.grkj.ui_base.base.BaseViewModel
 import com.grkj.ui_base.business.DataBusiness
@@ -59,9 +59,9 @@ class JobManageHomeViewModel @Inject constructor(
             val userName = userInfo.userName
             val todoItemData = jobTicketRepository.getMyTodoList()
             val myTodoStepJoin = todoItemData.filter { it.isMyTodo(userId, userName) }
-            todoItemVos =
-                myTodoStepJoin.map { it.toTodoVo(todoItemData.filter { temp -> it.ticketId == temp.ticketId }) }
-                    .toMutableList()
+            todoItemVos = myTodoStepJoin.map {
+                it.toTodoVo(todoItemData.filter { temp -> it.ticketId == temp.ticketId })
+            }.toMutableList()
             val todoData = splitTodoSteps(todoItemVos, 1)
             emit(todoData.first.size + todoData.second.size)
         }

+ 2 - 0
iscs_lock/src/main/res/layout/fragment_settings.xml

@@ -199,6 +199,7 @@
                 android:textColor="?attr/colorTextPrimary"
                 android:textSize="@dimen/iscs_text_md"
                 app:formRole="label"
+                android:visibility="gone"
                 app:i18nKey='@{"allow_colocker_login_to_colock"}'
                 app:markPosition="start"
                 app:required="true" />
@@ -206,6 +207,7 @@
             <CheckBox
                 android:id="@+id/allow_colocker_colock"
                 android:layout_width="wrap_content"
+                android:visibility="gone"
                 android:layout_height="wrap_content"
                 android:layout_below="@+id/allow_colocker_colock_tv"
                 android:layout_alignLeft="@+id/allow_colocker_colock_tv"

+ 1 - 1
ui-base/src/main/res/values-en/strings.xml

@@ -452,7 +452,7 @@
     <string name="new_password_cannot_be_the_same_as_the_old_password">New password cannot be the same as the old password</string>
     <string name="next">Next</string>
     <string name="nickname">Name</string>
-    <string name="no_available_key">No available keys</string>
+    <string name="no_available_key">No available keys or device battery is too low</string>
     <string name="no_backup_data">No backup data available</string>
     <string name="no_data">No data</string>
     <string name="no_goto_step">No jump step</string>

+ 1 - 1
ui-base/src/main/res/values-zh/strings.xml

@@ -452,7 +452,7 @@
     <string name="new_password_cannot_be_the_same_as_the_old_password">新密码与旧密码不能相同</string>
     <string name="next">下一步</string>
     <string name="nickname">姓名</string>
-    <string name="no_available_key">暂无可用钥匙</string>
+    <string name="no_available_key">暂无可用钥匙或设备电量过低</string>
     <string name="no_backup_data">暂无备份数据</string>
     <string name="no_data">暂无数据</string>
     <string name="no_goto_step">无跳转</string>

+ 1 - 1
ui-base/src/main/res/values/strings.xml

@@ -452,7 +452,7 @@
     <string name="new_password_cannot_be_the_same_as_the_old_password">新密码与旧密码不能相同</string>
     <string name="next">下一步</string>
     <string name="nickname">姓名</string>
-    <string name="no_available_key">暂无可用钥匙</string>
+    <string name="no_available_key">暂无可用钥匙或设备电量过低</string>
     <string name="no_backup_data">暂无备份数据</string>
     <string name="no_data">暂无数据</string>
     <string name="no_goto_step">无跳转</string>