浏览代码

refactor(更新)
- 锁控钥匙归还的检查状态的问题修复

周文健 5 月之前
父节点
当前提交
b660d2c318

+ 0 - 2
app/src/main/java/com/grkj/iscs/features/main/activity/MainActivity.kt

@@ -75,8 +75,6 @@ class MainActivity() : BaseActivity<ActivityMainBinding>() {
 
     override fun initView() {
         binding.nickname.text = MainDomainData.userInfo?.nickName ?: ""
-        //todo 可以增加权限控制
-        // 动态构造底部菜单(可加权限过滤)
         binding.bottomNav.isItemActiveIndicatorEnabled = false
         binding.bottomNav.menu.clear()
         tabConfigs.forEachIndexed { index, cfg ->

+ 28 - 0
data/src/main/java/com/grkj/data/check_data/ICheckDataMode.kt

@@ -1,7 +1,13 @@
 package com.grkj.data.check_data
 
+import com.grkj.data.check_data.impl.ForceMultiLockMode
+import com.grkj.data.check_data.impl.ForceSharedLockMode
+import com.grkj.data.check_data.impl.MixedMode
+import com.grkj.data.data.MMKVConstants
+import com.grkj.data.enums.LockPointModeEnum
 import com.grkj.data.model.req.LockPointUpdateReq
 import com.grkj.data.model.vo.IsJobTicketPointsDataVo
+import com.sik.sikcore.extension.getMMKVData
 
 /**
  * 检查数据模式接口
@@ -14,4 +20,26 @@ interface ICheckDataMode {
         updateReq: LockPointUpdateReq,
         isTicketPoint: List<IsJobTicketPointsDataVo>
     ): String
+
+    companion object {
+        /**
+         * 获取检查模型
+         */
+        @JvmStatic
+        fun getCheckDataMode(): ICheckDataMode {
+            // 从 MMKV 读出存储的类型(整数),例如 key="lock_mode_type"
+            val savedType =
+                MMKVConstants.UPDATE_LOCK_POINT_MODE.getMMKVData(LockPointModeEnum.MIXED_MODE.type)
+
+            // 把整数映射成枚举
+            val modeEnum = LockPointModeEnum.values().firstOrNull { it.type == savedType }
+                ?: LockPointModeEnum.MIXED_MODE
+
+            return when (modeEnum) {
+                LockPointModeEnum.FORCE_SHARED_LOCK -> ForceSharedLockMode()
+                LockPointModeEnum.FORCE_MULTI_LOCK -> ForceMultiLockMode()
+                LockPointModeEnum.MIXED_MODE -> MixedMode()
+            }
+        }
+    }
 }

+ 4 - 11
data/src/main/java/com/grkj/data/check_data/impl/ForceMultiLockMode.kt

@@ -1,31 +1,24 @@
 package com.grkj.data.check_data.impl
 
 import com.grkj.data.check_data.ICheckDataMode
+import com.grkj.data.di.RepositoryManager
 import com.grkj.data.model.req.LockPointUpdateReq
 import com.grkj.data.model.vo.IsJobTicketPointsDataVo
-import com.grkj.data.repository.IHardwareRepository
-import com.grkj.data.repository.IJobTicketRepository
-import javax.inject.Inject
-import javax.inject.Singleton
 
 /**
  * 强制多锁模式
  */
-@Singleton
-class ForceMultiLockMode @Inject constructor(
-    val jobTicketRepository: IJobTicketRepository,
-    val hardwareRepository: IHardwareRepository
-) :
+class ForceMultiLockMode :
     ICheckDataMode {
     override fun checkUpdatePointData(
         updateReq: LockPointUpdateReq,
         isTicketPoint: List<IsJobTicketPointsDataVo>
     ): String {
         val pointNfcDataList =
-            hardwareRepository.getPointNfcDataByPointIds(isTicketPoint.map { it.pointId })
+            RepositoryManager.hardwareRepo.getPointNfcDataByPointIds(isTicketPoint.map { it.pointId })
         val pointData = pointNfcDataList.first { it.pointNfc == updateReq.pointNfc }
         val lockNfcDataList =
-            hardwareRepository.getJobTicketPointLockNfcDataListByPointId(pointData.pointId)
+            RepositoryManager.hardwareRepo.getJobTicketPointLockNfcDataListByPointId(pointData.pointId)
         if (updateReq.lockNfc in lockNfcDataList.map { it.lockNfc }) {
             return "点位的锁不能与已存在的锁相同"
         }

+ 4 - 11
data/src/main/java/com/grkj/data/check_data/impl/ForceSharedLockMode.kt

@@ -1,31 +1,24 @@
 package com.grkj.data.check_data.impl
 
 import com.grkj.data.check_data.ICheckDataMode
+import com.grkj.data.di.RepositoryManager
 import com.grkj.data.model.req.LockPointUpdateReq
 import com.grkj.data.model.vo.IsJobTicketPointsDataVo
-import com.grkj.data.repository.IHardwareRepository
-import com.grkj.data.repository.IJobTicketRepository
-import javax.inject.Inject
-import javax.inject.Singleton
 
 /**
  * 强制共享锁模式
  */
-@Singleton
-class ForceSharedLockMode @Inject constructor(
-    val jobTicketRepository: IJobTicketRepository,
-    val hardwareRepository: IHardwareRepository
-) :
+class ForceSharedLockMode :
     ICheckDataMode {
     override fun checkUpdatePointData(
         updateReq: LockPointUpdateReq,
         isTicketPoint: List<IsJobTicketPointsDataVo>
     ): String {
         val pointNfcDataList =
-            hardwareRepository.getPointNfcDataByPointIds(isTicketPoint.map { it.pointId })
+            RepositoryManager.hardwareRepo.getPointNfcDataByPointIds(isTicketPoint.map { it.pointId })
         val pointData = pointNfcDataList.first { it.pointNfc == updateReq.pointNfc }
         val lockNfcDataList =
-            hardwareRepository.getJobTicketPointLockNfcDataListByPointId(pointData.pointId)
+            RepositoryManager.hardwareRepo.getJobTicketPointLockNfcDataListByPointId(pointData.pointId)
         if (updateReq.lockNfc !in lockNfcDataList.map { it.lockNfc }) {
             return "点位的锁必须与已存在的锁相同"
         }

+ 2 - 6
data/src/main/java/com/grkj/data/check_data/impl/MixedMode.kt

@@ -3,17 +3,13 @@ package com.grkj.data.check_data.impl
 import com.grkj.data.check_data.ICheckDataMode
 import com.grkj.data.model.req.LockPointUpdateReq
 import com.grkj.data.model.vo.IsJobTicketPointsDataVo
-import javax.inject.Inject
-import javax.inject.Singleton
 
 /**
  * 混合模式
  */
-@Singleton
-class MixedMode @Inject constructor() : ICheckDataMode {
+class MixedMode : ICheckDataMode {
     override fun checkUpdatePointData(
-        updateReq: LockPointUpdateReq,
-        isTicketPoint: List<IsJobTicketPointsDataVo>
+        updateReq: LockPointUpdateReq, isTicketPoint: List<IsJobTicketPointsDataVo>
     ): String {
         return ""
     }

+ 1 - 1
data/src/main/java/com/grkj/data/dao/JobTicketDao.kt

@@ -341,6 +341,6 @@ interface JobTicketDao {
     /**
      * 更新锁信息
      */
-    @Query("update is_lock set update_time = :updateTime")
+    @Query("update is_lock set update_time = :updateTime where lock_nfc = :rfid")
     fun updateLockReturn(rfid: String, updateTime: String = TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT))
 }

+ 0 - 53
data/src/main/java/com/grkj/data/di/CheckDataModeModule.kt

@@ -1,53 +0,0 @@
-package com.grkj.data.di
-
-import com.grkj.data.check_data.ICheckDataMode
-import com.grkj.data.check_data.impl.ForceMultiLockMode
-import com.grkj.data.check_data.impl.ForceSharedLockMode
-import com.grkj.data.check_data.impl.MixedMode
-import com.grkj.data.data.MMKVConstants
-import com.grkj.data.enums.LockPointModeEnum
-import com.sik.sikcore.extension.getMMKVData
-import com.tencent.mmkv.MMKV
-import dagger.Module
-import dagger.Provides
-import dagger.hilt.InstallIn
-import dagger.hilt.components.SingletonComponent
-import javax.inject.Singleton
-
-// 1. 在 Module 中引入 MMKV 和枚举
-@Module
-@InstallIn(SingletonComponent::class)
-object CheckDataModeModule {
-
-    // 2. 把三种实现类都注册给 Hilt
-    //    这三行可省略,只要它们有 @Inject 构造、@Singleton,就能被 Hilt 识别。
-    @Provides
-    fun provideMixedMode(m: MixedMode): MixedMode = m
-    @Provides
-    fun provideForceSharedLockMode(s: ForceSharedLockMode): ForceSharedLockMode = s
-    @Provides
-    fun provideForceMultiLockMode(m: ForceMultiLockMode): ForceMultiLockMode = m
-
-    // 3. 最关键:根据 MMKV 里储存的模式 type(0/1/2)选出枚举,并返回对应实现
-    @Provides
-    @Singleton
-    fun provideCheckDataMode(
-        mixed: MixedMode,
-        shared: ForceSharedLockMode,
-        multi: ForceMultiLockMode
-    ): ICheckDataMode {
-        // 从 MMKV 读出存储的类型(整数),例如 key="lock_mode_type"
-        val savedType =
-            MMKVConstants.UPDATE_LOCK_POINT_MODE.getMMKVData(LockPointModeEnum.MIXED_MODE.type)
-
-        // 把整数映射成枚举
-        val modeEnum = LockPointModeEnum.values().firstOrNull { it.type == savedType }
-            ?: LockPointModeEnum.MIXED_MODE
-
-        return when (modeEnum) {
-            LockPointModeEnum.FORCE_SHARED_LOCK -> shared
-            LockPointModeEnum.FORCE_MULTI_LOCK -> multi
-            LockPointModeEnum.MIXED_MODE -> mixed
-        }
-    }
-}

+ 6 - 5
data/src/main/java/com/grkj/data/repository/impl/JobTicketRepository.kt

@@ -38,8 +38,7 @@ import javax.inject.Singleton
 @Singleton
 class JobTicketRepository @Inject constructor(
     val jobTicketDao: JobTicketDao,
-    val hardwareDao: HardwareDao,
-    val checkDataMode: ICheckDataMode
+    val hardwareDao: HardwareDao
 ) : BaseRepository(),
     IJobTicketRepository {
     override fun createJob(
@@ -360,7 +359,8 @@ class JobTicketRepository @Inject constructor(
                 }
                 isTicketPoint.lockId = lockData.lockId
                 if (updateReq.target == 0) {
-                    checkResult = checkDataMode.checkUpdatePointData(updateReq, isTicketPoints)
+                    checkResult = ICheckDataMode.getCheckDataMode()
+                        .checkUpdatePointData(updateReq, isTicketPoints)
                     if (checkResult.isNotEmpty()) {
                         break
                     }
@@ -440,13 +440,14 @@ class JobTicketRepository @Inject constructor(
 
         val isJobTicketKeys = jobTicketDao.getJobTicketKeyDataByTicketId(ticketId)
         val isJobTicketKey = isJobTicketKeys.firstOrNull { it.keyId == keyData.keyId }
-        if (isJobTicketKey==null){
+        if (isJobTicketKey == null) {
             logger.info("作业的钥匙信息不存在")
             callback(false, "作业的钥匙信息不存在", 500)
             return
         }
         isJobTicketKey.keyStatus = "1"
-        isJobTicketKey.giveBackTime = TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
+        isJobTicketKey.giveBackTime =
+            TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
         jobTicketDao.updateIsJobTicketKey(listOf(isJobTicketKey))
     }
 }