Browse Source

refactor(更新)
- 步骤的说明和强验证

周文健 4 months ago
parent
commit
62214e32be

+ 22 - 0
app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectMemberFragment.kt

@@ -8,6 +8,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.enums.JobTicketStatusEnum
 import com.grkj.data.model.vo.UserManageVo
 import com.grkj.iscs.R
 import com.grkj.iscs.common.DataTransferConstants
@@ -18,6 +19,7 @@ import com.grkj.data.enums.RoleEnum
 import com.grkj.iscs.features.main.viewmodel.common.SelectMemberViewModel
 import com.grkj.ui_base.base.BaseFragment
 import com.grkj.ui_base.utils.CommonUtils
+import com.kongzue.dialogx.dialogs.PopTip
 import com.sik.sikcore.data.GlobalDataTempStore
 import com.sik.sikcore.extension.setDebouncedClickListener
 import dagger.hilt.android.AndroidEntryPoint
@@ -33,11 +35,14 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
     private var selectedColockerData: MutableList<UserManageVo> = mutableListOf()
     private var isLockerSelect = true
     private var canSelectColoker = true
+    private var ticketId: Long? = null
     override fun getLayoutId(): Int {
         return R.layout.fragment_select_memeber
     }
 
     override fun initView() {
+        ticketId = GlobalDataTempStore.getInstance()
+            .getData(DataTransferConstants.KEY_JOB_TICKET_ID) as Long?
         val previewStepIcon = GlobalDataTempStore.getInstance()
             .getData(DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA) as Int
         val previewStepTitle = GlobalDataTempStore.getInstance()
@@ -95,6 +100,13 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         itemBinding.lockerIcon.isSelected = item.isSelected
         itemBinding.root.setOnClickListener {
             if (item.isSelected) {
+                if (!isLockerSelect && (selectedColockerData.size == 1 || (viewModel.ticketUsers.isNotEmpty() && viewModel.ticketUsers.find { it.userId == item.userId }?.jobStatus == "1"))) {
+                    PopTip.tip(com.grkj.ui_base.R.string.can_not_remove_current_colocker)
+                    return@setOnClickListener
+                } else if (selectedLockerData.size == 1 && viewModel.jobTicketData != null && viewModel.jobTicketData?.ticketStatus != JobTicketStatusEnum.SELECT_MEMBER.status) {
+                    PopTip.tip(com.grkj.ui_base.R.string.can_not_remove_current_locker)
+                    return@setOnClickListener
+                }
                 item.isSelected = false
                 if (isLockerSelect) {
                     selectedLockerData.removeIf { it.userId == item.userId }
@@ -127,6 +139,10 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         itemBinding.lockerName.text = item.nickName
         itemBinding.lockerIcon.isSelected = true
         itemBinding.root.setOnClickListener {
+            if (selectedLockerData.size == 1 && viewModel.jobTicketData != null && viewModel.jobTicketData?.ticketStatus != JobTicketStatusEnum.SELECT_MEMBER.status) {
+                PopTip.tip(com.grkj.ui_base.R.string.can_not_remove_current_locker)
+                return@setOnClickListener
+            }
             selectedLockerData.removeIf { it.userId == item.userId }
             viewModel.userData.find { it.userId == item.userId }?.isSelected = false
             adapter.notifyDataSetChanged()
@@ -140,6 +156,10 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         itemBinding.lockerName.text = item.nickName
         itemBinding.lockerIcon.isSelected = true
         itemBinding.root.setOnClickListener {
+            if (selectedColockerData.size == 1 || (viewModel.ticketUsers.isNotEmpty() && viewModel.ticketUsers.find { it.userId == item.userId }?.jobStatus == "1")) {
+                PopTip.tip(com.grkj.ui_base.R.string.can_not_remove_current_colocker)
+                return@setOnClickListener
+            }
             selectedColockerData.removeIf { it.userId == item.userId }
             viewModel.userData.find { it.userId == item.userId }?.isSelected = false
             adapter.notifyDataSetChanged()
@@ -203,5 +223,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         viewModel.getUserData().observe(this) {
             setLockerData()
         }
+        viewModel.getTicketUsers(ticketId).observe(this) {}
+        viewModel.getTicketData(ticketId).observe(this) {}
     }
 }

+ 20 - 13
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobExecuteFragment.kt

@@ -182,11 +182,11 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         }
         //点击确认的时候需要
         itemBinding.stepLayout.setDebouncedClickListener {
-            if (item.stepId != viewModel.currentStepData?.stepId) {
-                return@setDebouncedClickListener
-            }
             val workflowStep =
                 viewModel.workflowSteps.find { it.stepId == item.workflowStepId }
+            if (item.stepId != viewModel.currentStepData?.stepId && workflowStep?.enableSetLocker == false && workflowStep.enableSetColocker == false) {
+                return@setDebouncedClickListener
+            }
             if (workflowStep?.confirmType != 0 &&
                 (workflowStep?.enableSetLocker == true || workflowStep?.enableSetColocker == true)
             ) {
@@ -246,7 +246,11 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                     }
                 )
             } else {
-                PopTip.tip(com.grkj.ui_base.R.string.current_step_can_not_be_process)
+                val errorTipData = viewModel.getStepErrorTip(workflowStep)
+                PopTip.tip(errorTipData.first)
+                errorTipData.second?.let {
+                    checkLayout(it)
+                }
             }
         }
     }
@@ -288,6 +292,8 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                     DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
                     R.mipmap.icon_data_manage_menu_point_manage
                 )
+            GlobalDataTempStore.getInstance()
+                .saveData(DataTransferConstants.KEY_JOB_TICKET_ID, viewModel.ticketId)
             navController.navigate(R.id.action_jobExecuteFragment_to_selectMemberFragment)
             return true
         }
@@ -486,6 +492,7 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         binding.cancelJob.isVisible = false
         binding.finishJob.isVisible = false
         binding.stepTipTv.isVisible = viewModel.needShowTip()
+        binding.stepTipTv.text = viewModel.getCurrentStepTip()
         if (viewModel.currentStepData?.stepIndex == null) {
             binding.finishJob.isVisible = true
         } else {
@@ -629,24 +636,24 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                     }
                 }
                 if (workflowStep?.enableAddColocker == true || workflowStep?.enableReduceColocker == true) {
-                    if (workflowStep.gotoStepAfterAddingColocker != null) {
+                    if (workflowStep.gotoStepAfterAddingColocker != null && viewModel.ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
+                            .any { it.jobStatus == "0" }) {
+                        logger.info("跳转到步骤:${workflowStep.gotoStepAfterAddingColocker}")
                         viewModel.ticketStep.filter {
-                            it.workflowStepId in viewModel.workflowSteps.filter { it.stepIndex > workflowStep.gotoStepAfterAddingColocker!! }
-                                .map { it.stepId }
-                        }.forEach {
+                            it.stepIndex >= workflowStep.gotoStepAfterAddingColocker!!
+                        }.sortedByDescending { it.stepIndex }.forEach {
                             it.stepStatus = "0"
-                            viewModel.updateStepStatus(it).observe(this@JobExecuteFragment) {
+                            viewModel.updateStepStatusBack(it).observe(this@JobExecuteFragment) {
                                 if (it == false) {
                                     PopTip.tip(R.string.step_confirm_failed)
                                 } else {
+                                    viewModel.currentStepData =
+                                        viewModel.ticketStep.firstOrNull { it.stepStatus == "0" }
                                     checkCurrentStep()
+                                    binding.stepRv.adapter?.notifyDataSetChanged()
                                 }
-                                binding.stepRv.adapter?.notifyDataSetChanged()
                             }
                         }
-                        viewModel.currentStepData =
-                            viewModel.ticketStep.firstOrNull { it.stepStatus == "0" }
-                        binding.stepRv.adapter?.notifyDataSetChanged()
                     }
                 }
             }

+ 34 - 2
app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/SelectMemberViewModel.kt

@@ -2,20 +2,29 @@ package com.grkj.iscs.features.main.viewmodel.common
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
+import com.grkj.data.model.dos.IsJobTicketUser
+import com.grkj.data.model.vo.IsJobTicketDataVo
+import com.grkj.data.model.vo.IsJobTicketUserDataVo
 import com.grkj.data.model.vo.UserManageVo
+import com.grkj.data.repository.IJobTicketRepository
 import com.grkj.data.repository.IUserRepository
 import com.grkj.ui_base.base.BaseViewModel
 import dagger.hilt.android.lifecycle.HiltViewModel
-import javax.inject.Inject
 import kotlinx.coroutines.Dispatchers
+import javax.inject.Inject
 
 /**
  * 选择人员
  */
 @HiltViewModel
-class SelectMemberViewModel @Inject constructor(val userRepository: IUserRepository) :
+class SelectMemberViewModel @Inject constructor(
+    val userRepository: IUserRepository,
+    val jobTicketRepository: IJobTicketRepository
+) :
     BaseViewModel() {
     var workstationId: Long = 0
+    var ticketUsers: List<IsJobTicketUserDataVo> = listOf()
+    var jobTicketData: IsJobTicketDataVo? = null
 
     /**
      * 用户数据
@@ -31,4 +40,27 @@ class SelectMemberViewModel @Inject constructor(val userRepository: IUserReposit
             emit(true)
         }
     }
+
+    /**
+     * 获取作业票用户
+     */
+    fun getTicketUsers(ticketId: Long?): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            ticketId?.let {
+                ticketUsers = jobTicketRepository.getJobTicketUserDataByTicketId(ticketId)
+            }
+            emit(true)
+        }
+    }
+
+    /**
+     * 获取作业票数据
+     */
+    fun getTicketData(ticketId: Long?): LiveData<Boolean>{
+        return liveData(Dispatchers.IO){
+            ticketId?.let {
+                jobTicketData = jobTicketRepository.getJobTicketDataByTicketId(ticketId)
+            }
+        }
+    }
 }

+ 75 - 49
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobExecuteViewModel.kt

@@ -93,15 +93,15 @@ class JobExecuteViewModel @Inject constructor(
     fun updateLockerAndColockerData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             jobTicketRepository.updateClockerAndColockerData(
-                ticketData!!.ticketId, currentStepData, selectedLockerData, selecteColockerData
+                ticketData!!.ticketId, selectedLockerData, selecteColockerData
             )
             ticketStep = jobTicketRepository.getJobTicketStepDataByTicketId(ticketId)
-            val currentWorkflowStep = workflowSteps.find {
-                it.stepId == ticketStep.firstOrNull { it.stepStatus == "0" }?.workflowStepId
-            }
-            jobTicketRepository.updateTicketDataStatus(
-                ticketId, currentWorkflowStep?.getTicketStatus()?.toInt() ?: 0
-            )
+            ticketUser = jobTicketRepository.getJobTicketUserDataByTicketId(ticketId)
+            val tempJobTicketUserId = jobTicketRepository.getTicketUsersByTicketId(ticketId)
+            selectedLockerData =
+                tempJobTicketUserId.filter { it.roleKeys.contains(RoleEnum.JTLOCKER.roleKey) }
+            selecteColockerData =
+                tempJobTicketUserId.filter { it.roleKeys.contains(RoleEnum.JTCOLOCKER.roleKey) }
             emit(true)
         }
     }
@@ -362,6 +362,27 @@ class JobExecuteViewModel @Inject constructor(
         }
     }
 
+    /**
+     * 更新步骤状态(步骤返回)
+     */
+    fun updateStepStatusBack(jobTicketStepDataVo: IsJobTicketStepDataVo): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            val ticketStepData = BeanUtils.copyProperties(
+                jobTicketStepDataVo, IsJobTicketStep::class.java
+            )
+            ticketStepData?.let {
+                jobTicketRepository.updateTicketStepData(it)
+                val currentWorkflowStep = workflowSteps.find {
+                    it.stepId == currentStepData?.workflowStepId
+                }
+                jobTicketRepository.updateTicketDataStatus(
+                    ticketId, currentWorkflowStep?.getTicketStatus()?.toInt() ?: 0
+                )
+                emit(true)
+            } ?: emit(false)
+        }
+    }
+
     /**
      * 上锁步骤是否上锁完成
      */
@@ -468,51 +489,53 @@ class JobExecuteViewModel @Inject constructor(
      */
     fun getStepErrorTip(workflowStep: WorkflowStep?): Pair<String, Int?> {
         return when {
-            workflowStep?.enableLock == true -> {
-                return if (ticketPoints.any { it.pointStatus == "0" }) {
-                    CommonUtils.getStr(
-                        R.string.has_lock_not_locked,
-                        ticketPoints.filter { it.pointStatus == "0" }.map { it.pointName })
-                        .toString() to null
-                } else if (workflowStep.enableColock == true && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
-                        .any { it.jobStatus == "0" }) {
-                    CommonUtils.getStr(R.string.please_complete_colock).toString() to 2
-                } else {
-                    CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
-                        .toString() to null
-                }
+            workflowStep?.enableSetLocker == true || workflowStep?.enableSetColocker == true -> {
+                CommonUtils.getStr(R.string.please_select_member).toString() to null
             }
 
-            workflowStep?.enableColock == true -> {
-                if (ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
+            workflowStep?.enableLock == true || workflowStep?.enableColock == true ||
+                    workflowStep?.enableReleaseColock == true || workflowStep?.enableUnlock == true -> {
+                var tip = ""
+                var index: Int? = null
+                if (workflowStep.enableLock) {
+                    if (ticketPoints.any { it.pointStatus != "1" } && ticketKey.isEmpty()) {
+                        tip = CommonUtils.getStr(com.grkj.ui_base.R.string.please_go_locking)
+                            .toString()
+                        index = 1
+                    } else if (ticketPoints.any { it.pointStatus != "1" } && ticketKey.filter { it.ticketType == 0L }
+                            .any { it.collectTime.isNullOrEmpty() }) {
+                        tip =
+                            CommonUtils.getStr(com.grkj.ui_base.R.string.please_return_key_after_locking)
+                                .toString()
+                        index = 1
+                    }
+                }
+                if (workflowStep.enableColock && ticketPoints.all { it.pointStatus == "1" } && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .any { it.jobStatus != "1" }) {
-                    CommonUtils.getStr(R.string.please_complete_colock).toString() to 2
-                } else {
-                    CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
-                        .toString() to null
+                    tip = CommonUtils.getStr(R.string.please_do_colock).toString()
+                    index = 2
                 }
-            }
-
-            workflowStep?.enableReleaseColock == true -> {
-                if (ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
+                if (workflowStep.enableReleaseColock && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .any { it.jobStatus != "2" }) {
-                    CommonUtils.getStr(
-                        R.string.has_lock_not_unlocked,
-                        ticketPoints.filter { it.pointStatus == "2" }.map { it.pointName })
-                        .toString() to 2
-                } else {
-                    CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
-                        .toString() to null
+                    tip =
+                        CommonUtils.getStr(com.grkj.ui_base.R.string.please_do_uncolock).toString()
+                    index = 2
                 }
-            }
-
-            workflowStep?.enableUnlock == true -> {
-                if (ticketPoints.any { it.pointStatus != "2" }) {
-                    CommonUtils.getStr(R.string.has_lock_not_locked).toString() to 2
-                } else {
-                    CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
-                        .toString() to null
+                if (workflowStep.enableUnlock && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
+                        .all { it.jobStatus == "2" }) {
+                    if (ticketPoints.any { it.pointStatus != "2" }) {
+                        tip = CommonUtils.getStr(com.grkj.ui_base.R.string.please_go_unlocking)
+                            .toString()
+                        index = 1
+                    } else if (ticketPoints.any { it.pointStatus != "2" } && ticketKey.filter { it.ticketType == 1L }
+                            .any { it.collectTime.isNullOrEmpty() }) {
+                        tip =
+                            CommonUtils.getStr(com.grkj.ui_base.R.string.please_return_key_after_unlocking)
+                                .toString()
+                        index = 1
+                    }
                 }
+                tip to index
             }
 
             else -> CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
@@ -556,16 +579,19 @@ class JobExecuteViewModel @Inject constructor(
                                 .toString()
                     }
                 }
-                if (currentWorkflowStep.enableColock && ticketUser.any { it.jobStatus != "1" }) {
+                if (currentWorkflowStep.enableColock && ticketPoints.all { it.pointStatus == "1" } && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
+                        .any { it.jobStatus != "1" }) {
                     tip = CommonUtils.getStr(R.string.please_do_colock).toString()
                 }
-                if (currentWorkflowStep.enableReleaseColock && ticketUser.any { it.jobStatus != "2" }) {
+                if (currentWorkflowStep.enableReleaseColock && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
+                        .any { it.jobStatus != "2" }) {
                     tip =
                         CommonUtils.getStr(com.grkj.ui_base.R.string.please_do_uncolock).toString()
                 }
-                if (currentWorkflowStep.enableUnlock && ticketUser.all { it.jobStatus == "2" }) {
+                if (currentWorkflowStep.enableUnlock && ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
+                        .all { it.jobStatus == "2" }) {
                     if (ticketPoints.any { it.pointStatus != "2" }) {
-                        tip = CommonUtils.getStr(com.grkj.ui_base.R.string.please_do_uncolock)
+                        tip = CommonUtils.getStr(com.grkj.ui_base.R.string.please_go_unlocking)
                             .toString()
                     } else if (ticketPoints.any { it.pointStatus != "2" } && ticketKey.filter { it.ticketType == 1L }
                             .any { it.collectTime.isNullOrEmpty() }) {

+ 30 - 8
app/src/main/res/layout-land/fragment_job_execute.xml

@@ -173,8 +173,9 @@
                     android:layout_height="wrap_content"
                     android:layout_marginLeft="@dimen/common_spacing_2x"
                     android:layout_marginTop="@dimen/common_spacing"
-                    android:gravity="center_vertical"
                     android:drawableLeft="@mipmap/tip"
+                    android:drawablePadding="@dimen/common_spacing"
+                    android:gravity="center_vertical"
                     android:textColor="@color/black"
                     android:textSize="@dimen/common_text_size"
                     android:visibility="gone" />
@@ -187,6 +188,8 @@
                     android:layout_marginTop="@dimen/common_spacing"
                     android:layout_weight="1"
                     android:background="@drawable/common_card_bg"
+                    android:clipChildren="false"
+                    android:clipToPadding="false"
                     android:divider="@drawable/divider_table"
                     android:orientation="vertical"
                     android:showDividers="middle">
@@ -369,15 +372,20 @@
                     android:gravity="right"
                     android:minHeight="@dimen/btn_layout_min_height"
                     android:orientation="horizontal"
-                    android:padding="@dimen/common_spacing">
+                    android:paddingHorizontal="@dimen/common_spacing_2x"
+                    android:paddingVertical="@dimen/common_spacing">
 
                     <TextView
                         android:id="@+id/to_lock"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginLeft="@dimen/common_spacing"
-                        android:background="@drawable/bg_btn_job_execute_go_locking"
+                        android:background="@drawable/common_btn_cancel"
                         android:drawableLeft="@drawable/icon_ticket_lock"
+                        android:drawablePadding="@dimen/common_spacing"
+                        android:drawableTint="@color/white"
+                        android:gravity="center"
+                        android:minHeight="@dimen/common_btn_height"
                         android:paddingHorizontal="@dimen/common_spacing"
                         android:text="@string/go_locking"
                         android:textColor="@color/white"
@@ -389,8 +397,12 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginLeft="@dimen/common_spacing"
-                        android:background="@drawable/bg_btn_job_execute_go_unlocking"
+                        android:background="@drawable/common_btn_confirm"
                         android:drawableLeft="@drawable/icon_ticket_unlock"
+                        android:drawablePadding="@dimen/common_spacing"
+                        android:drawableTint="@color/white"
+                        android:gravity="center"
+                        android:minHeight="@dimen/common_btn_height"
                         android:paddingHorizontal="@dimen/common_spacing"
                         android:text="@string/go_unlocking"
                         android:textColor="@color/white"
@@ -402,10 +414,15 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginLeft="@dimen/common_spacing"
-                        android:background="@drawable/bg_btn_job_execute_normal"
+                        android:background="@drawable/common_btn_cancel"
+                        android:drawableLeft="@drawable/icon_close"
+                        android:drawablePadding="@dimen/common_spacing"
+                        android:drawableTint="@color/white"
+                        android:gravity="center"
+                        android:minHeight="@dimen/common_btn_height"
                         android:paddingHorizontal="@dimen/common_spacing"
                         android:text="@string/cancel_the_job"
-                        android:textColor="@color/black"
+                        android:textColor="@color/white"
                         android:textSize="@dimen/common_btn_text_size"
                         android:visibility="gone" />
 
@@ -414,10 +431,15 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginLeft="@dimen/common_spacing"
-                        android:background="@drawable/bg_btn_job_execute_normal"
+                        android:background="@drawable/common_btn_confirm"
+                        android:drawableLeft="@mipmap/icon_confirm"
+                        android:drawablePadding="@dimen/common_spacing"
+                        android:drawableTint="@color/white"
+                        android:gravity="center"
+                        android:minHeight="@dimen/common_btn_height"
                         android:paddingHorizontal="@dimen/common_spacing"
                         android:text="@string/finish_the_job"
-                        android:textColor="@color/black"
+                        android:textColor="@color/white"
                         android:textSize="@dimen/common_btn_text_size"
                         android:visibility="gone" />
                 </LinearLayout>

+ 4 - 1
app/src/main/res/layout-land/item_job_execute_point.xml

@@ -3,7 +3,7 @@
 
     <LinearLayout
         android:layout_width="match_parent"
-        android:layout_height="@dimen/point_header_height"
+        android:layout_height="wrap_content"
         android:background="@drawable/common_layout_bg"
         android:divider="@drawable/divider_table"
         android:showDividers="middle">
@@ -14,6 +14,7 @@
             android:layout_height="match_parent"
             android:layout_weight="1"
             android:gravity="center"
+            android:paddingVertical="@dimen/common_spacing"
             android:text="@string/point_name_tv"
             android:textSize="@dimen/common_text_size" />
 
@@ -22,6 +23,7 @@
             android:layout_width="0dp"
             android:layout_height="match_parent"
             android:layout_weight="1"
+            android:paddingVertical="@dimen/common_spacing"
             android:gravity="center"
             android:text="@string/point_manage_point_function"
             android:textSize="@dimen/common_text_size" />
@@ -29,6 +31,7 @@
         <FrameLayout
             android:layout_width="0dp"
             android:layout_height="match_parent"
+            android:paddingVertical="@dimen/common_spacing"
             android:layout_weight="1">
 
             <LinearLayout

+ 29 - 7
app/src/main/res/layout/fragment_job_execute.xml

@@ -179,6 +179,7 @@
                     android:layout_marginLeft="@dimen/common_spacing_2x"
                     android:layout_marginTop="@dimen/common_spacing"
                     android:drawableLeft="@mipmap/tip"
+                    android:drawablePadding="@dimen/common_spacing"
                     android:gravity="center_vertical"
                     android:textColor="@color/black"
                     android:textSize="@dimen/common_text_size"
@@ -192,6 +193,8 @@
                     android:layout_marginTop="@dimen/common_spacing"
                     android:layout_weight="1"
                     android:background="@drawable/common_layout_bg"
+                    android:clipChildren="false"
+                    android:clipToPadding="false"
                     android:divider="@drawable/divider_table"
                     android:orientation="vertical"
                     android:showDividers="middle">
@@ -375,15 +378,20 @@
                     android:gravity="right"
                     android:minHeight="@dimen/btn_layout_min_height"
                     android:orientation="horizontal"
-                    android:padding="@dimen/common_spacing">
+                    android:paddingHorizontal="@dimen/common_spacing_2x"
+                    android:paddingVertical="@dimen/common_spacing">
 
                     <TextView
                         android:id="@+id/to_lock"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginLeft="@dimen/common_spacing"
-                        android:background="@drawable/bg_btn_job_execute_go_locking"
+                        android:background="@drawable/common_btn_cancel"
                         android:drawableLeft="@drawable/icon_ticket_lock"
+                        android:drawablePadding="@dimen/common_spacing"
+                        android:drawableTint="@color/white"
+                        android:gravity="center"
+                        android:minHeight="@dimen/common_btn_height"
                         android:paddingHorizontal="@dimen/common_spacing"
                         android:text="@string/go_locking"
                         android:textColor="@color/white"
@@ -395,8 +403,12 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginLeft="@dimen/common_spacing"
-                        android:background="@drawable/bg_btn_job_execute_go_unlocking"
+                        android:background="@drawable/common_btn_confirm"
                         android:drawableLeft="@drawable/icon_ticket_unlock"
+                        android:drawablePadding="@dimen/common_spacing"
+                        android:drawableTint="@color/white"
+                        android:gravity="center"
+                        android:minHeight="@dimen/common_btn_height"
                         android:paddingHorizontal="@dimen/common_spacing"
                         android:text="@string/go_unlocking"
                         android:textColor="@color/white"
@@ -408,10 +420,15 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginLeft="@dimen/common_spacing"
-                        android:background="@drawable/bg_btn_job_execute_normal"
+                        android:background="@drawable/common_btn_cancel"
+                        android:drawableLeft="@drawable/icon_close"
+                        android:drawablePadding="@dimen/common_spacing"
+                        android:drawableTint="@color/white"
+                        android:gravity="center"
+                        android:minHeight="@dimen/common_btn_height"
                         android:paddingHorizontal="@dimen/common_spacing"
                         android:text="@string/cancel_the_job"
-                        android:textColor="@color/black"
+                        android:textColor="@color/white"
                         android:textSize="@dimen/common_btn_text_size"
                         android:visibility="gone" />
 
@@ -420,10 +437,15 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginLeft="@dimen/common_spacing"
-                        android:background="@drawable/bg_btn_job_execute_normal"
+                        android:background="@drawable/common_btn_confirm"
+                        android:drawableLeft="@mipmap/icon_confirm"
+                        android:drawablePadding="@dimen/common_spacing"
+                        android:drawableTint="@color/white"
+                        android:gravity="center"
+                        android:minHeight="@dimen/common_btn_height"
                         android:paddingHorizontal="@dimen/common_spacing"
                         android:text="@string/finish_the_job"
-                        android:textColor="@color/black"
+                        android:textColor="@color/white"
                         android:textSize="@dimen/common_btn_text_size"
                         android:visibility="gone" />
                 </LinearLayout>

+ 4 - 1
app/src/main/res/layout/item_job_execute_point.xml

@@ -3,7 +3,7 @@
 
     <LinearLayout
         android:layout_width="match_parent"
-        android:layout_height="@dimen/point_header_height"
+        android:layout_height="wrap_content"
         android:background="@drawable/common_layout_bg"
         android:divider="@drawable/divider_table"
         android:showDividers="middle">
@@ -13,6 +13,7 @@
             android:layout_width="0dp"
             android:layout_height="match_parent"
             android:layout_weight="1"
+            android:paddingVertical="@dimen/common_spacing"
             android:gravity="center"
             android:text="@string/point_name_tv"
             android:textSize="@dimen/common_text_size" />
@@ -22,6 +23,7 @@
             android:layout_width="0dp"
             android:layout_height="match_parent"
             android:layout_weight="1"
+            android:paddingVertical="@dimen/common_spacing"
             android:gravity="center"
             android:text="@string/point_manage_point_function"
             android:textSize="@dimen/common_text_size" />
@@ -29,6 +31,7 @@
         <FrameLayout
             android:layout_width="0dp"
             android:layout_height="match_parent"
+            android:paddingVertical="@dimen/common_spacing"
             android:layout_weight="1">
 
             <LinearLayout

BIN
app/src/main/res/mipmap-xhdpi/icon_job_execute_colock.png


BIN
app/src/main/res/mipmap-xhdpi/icon_job_execute_lock.png


+ 2 - 2
app/src/main/res/values-en/strings.xml

@@ -123,7 +123,7 @@
     <string name="job_workstation">Job workstation</string>
     <string name="create_job_name">Job name</string>
     <string name="please_select_job_workstation">Please select job workstation</string>
-    <string name="job_create_and_execute_succeed">Job create succeed</string>
+    <string name="job_create_and_execute_succeed">Job start execute</string>
     <string name="job_create_and_execute_failed">Job create failed</string>
     <string name="job_save_and_execute_tip">Are you sure you want to execute the job \"%1$s\"?</string>
     <string name="save_sop_check">Create SOP</string>
@@ -192,7 +192,7 @@
     <string name="save">save</string>
     <string name="job_create_succeed">Job save succeed</string>
     <string name="job_create_failed">Job save failed</string>
-    <string name="sop_job_save_and_execute_succeed">SOP job execute succeed</string>
+    <string name="sop_job_save_and_execute_succeed">SOP job start execute</string>
     <string name="sop_job_save_and_execute_failed">SOP job execute failed</string>
     <string name="welcome_tip">Hello, welcome to use</string>
     <string name="start">Start</string>

+ 2 - 2
app/src/main/res/values-zh/strings.xml

@@ -123,7 +123,7 @@
     <string name="job_workstation">作业区域</string>
     <string name="create_job_name">作业名称</string>
     <string name="please_select_job_workstation">请选择作业区域</string>
-    <string name="job_create_and_execute_succeed">作业执行成功</string>
+    <string name="job_create_and_execute_succeed">作业开始执行</string>
     <string name="job_create_and_execute_failed">作业执行失败</string>
     <string name="job_save_and_execute_tip">确定要执行作业\"%1$s\"吗?</string>
     <string name="save_sop_check">生成SOP</string>
@@ -192,7 +192,7 @@
     <string name="save">保存</string>
     <string name="job_create_succeed">作业保存成功</string>
     <string name="job_create_failed">作业保存失败</string>
-    <string name="sop_job_save_and_execute_succeed">SOP作业执行成功</string>
+    <string name="sop_job_save_and_execute_succeed">SOP作业开始执行</string>
     <string name="sop_job_save_and_execute_failed">SOP作业执行失败</string>
     <string name="welcome_tip">您好,欢迎您使用</string>
     <string name="start">开始</string>

+ 1 - 1
app/src/main/res/values/strings.xml

@@ -191,7 +191,7 @@
     <string name="save">保存</string>
     <string name="job_create_succeed">作业保存成功</string>
     <string name="job_create_failed">作业保存失败</string>
-    <string name="sop_job_save_and_execute_succeed">SOP作业执行成功</string>
+    <string name="sop_job_save_and_execute_succeed">SOP作业开始执行</string>
     <string name="sop_job_save_and_execute_failed">SOP作业执行失败</string>
     <string name="welcome_tip">您好,欢迎您使用</string>
     <string name="start">开始</string>

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

@@ -104,6 +104,12 @@ interface JobTicketDao {
     @Query("delete from is_job_ticket_user where ticket_id in (:ticketIds)")
     fun deleteJobTicketUserByTicketIds(ticketIds: List<Long>)
 
+    /**
+     * 根据用户id删除作业票用户数据
+     */
+    @Query("delete from is_job_ticket_user where user_id in (:userIds)")
+    fun deleteJobTicketUserByUserIds(userIds: List<Long>)
+
     /**
      * 获取作业票分页
      */

+ 0 - 1
data/src/main/java/com/grkj/data/repository/IJobTicketRepository.kt

@@ -115,7 +115,6 @@ interface IJobTicketRepository {
      */
     fun updateClockerAndColockerData(
         ticketId: Long,
-        currentStepData: IsJobTicketStepDataVo?,
         selectedLockerData: List<UserManageVo>,
         selectedColockerData: List<UserManageVo>
     )

+ 8 - 7
data/src/main/java/com/grkj/data/repository/impl/JobTicketRepository.kt

@@ -311,12 +311,16 @@ class JobTicketRepository @Inject constructor(
 
     override fun updateClockerAndColockerData(
         ticketId: Long,
-        currentStepData: IsJobTicketStepDataVo?,
         selectedLockerData: List<UserManageVo>,
         selectedColockerData: List<UserManageVo>
     ) {
-        jobTicketDao.deleteJobTicketUserByTicketIds(listOf(ticketId))
-        val ticketLockerUsers = selectedLockerData.map {
+        val existsUsers = jobTicketDao.getJobTicketUserDataByTicketId(ticketId)
+        jobTicketDao.deleteJobTicketUserByUserIds(existsUsers.filter { it.userId !in (selectedLockerData + selectedColockerData).map { it.userId } }
+            .map { it.userId })
+        val newLockUser = selectedLockerData.filter { it.userId !in existsUsers.map { it.userId } }
+        val newCoLockUser =
+            selectedColockerData.filter { it.userId !in existsUsers.map { it.userId } }
+        val ticketLockerUsers = newLockUser.map {
             val isJobticketUser = IsJobTicketUser()
             isJobticketUser.userId = it.userId
             isJobticketUser.ticketId = ticketId
@@ -324,7 +328,7 @@ class JobTicketRepository @Inject constructor(
             isJobticketUser.userRole = RoleEnum.JTLOCKER.roleKey
             isJobticketUser
         }
-        val ticketColockerUsers = selectedColockerData.map {
+        val ticketColockerUsers = newCoLockUser.map {
             val isJobticketUser = IsJobTicketUser()
             isJobticketUser.userId = it.userId
             isJobticketUser.ticketId = ticketId
@@ -334,9 +338,6 @@ class JobTicketRepository @Inject constructor(
         }
         jobTicketDao.saveIsJobTicketUser(ticketLockerUsers)
         jobTicketDao.saveIsJobTicketUser(ticketColockerUsers)
-        currentStepData?.let {
-            jobTicketDao.updateTicketStepStatus(currentStepData.stepId, "1")
-        }
     }
 
     override fun getStepDetail(

+ 0 - 17
ui-base/src/main/java/com/grkj/ui_base/utils/ble/BleCmdManager.kt

@@ -31,23 +31,6 @@ object BleCmdManager {
         bleBean.token?.let {
             return assembleTimeStamp(byteArray) + it
         } ?: run {
-            // TODO 有问题,一直循环
-//            getToken(bleBean.bleDevice.mac, object : CustomBleWriteCallback() {
-//                override fun onPrompt(promptStr: String?) {}
-//
-//                override fun onConnectPrompt(promptStr: String?) {}
-//
-//                override fun onDisConnectPrompt(promptStr: String?) {}
-//
-//                override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {}
-//
-//                override fun onWriteFailure(exception: BleException?) {}
-//
-//            })
-//            // TODO 临时方案
-//            Thread.sleep(100)
-//            return assembleData(bleBean, byteArray)
-
             return null
         }
     }

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

@@ -329,7 +329,7 @@
     <string name="please_wait_all_colocker_unlocked">please wait all colocker unlocked</string>
     <string name="current_colocker_already_locked">current colocker already locked</string>
     <string name="current_colocker_already_unlocked">current colocker already unlocked</string>
-    <string name="can_not_remove_current_colocker">can not remove current colocker</string>
+    <string name="can_not_remove_current_colocker">can not remove current co-locker</string>
     <string name="current_step_not_allowed_to_add_colocker">current step not allowed to add colocker</string>
     <string name="keep_at_least_colocker">keep at least %1$d colocker</string>
     <string name="action_hint">action hint</string>
@@ -368,4 +368,5 @@
     <string name="please_reopen_ble">Please reopen ble</string>
     <string name="scan_complete_app_restarting">scan complete app restarting</string>
     <string name="please_do_uncolock">Please have co-locker remove co-lock</string>
+    <string name="can_not_remove_current_locker">can not remove current locker</string>
 </resources>

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

@@ -368,4 +368,5 @@
     <string name="please_reopen_ble">请重新打开蓝牙</string>
     <string name="scan_complete_app_restarting">扫描完成,APP将自动重启</string>
     <string name="please_do_uncolock">请共锁人解除共锁</string>
+    <string name="can_not_remove_current_locker">无法移除当前上锁人</string>
 </resources>

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

@@ -368,4 +368,5 @@
     <string name="please_reopen_ble">请重新打开蓝牙</string>
     <string name="scan_complete_app_restarting">扫描完成,APP将自动重启</string>
     <string name="please_do_uncolock">请共锁人解除共锁</string>
+    <string name="can_not_remove_current_locker">无法移除当前上锁人</string>
 </resources>