Forráskód Böngészése

refactor(更新)
- 作业界面制作

周文健 5 hónapja
szülő
commit
e2e0b8656e
46 módosított fájl, 723 hozzáadás és 128 törlés
  1. 2 0
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditJobFragment.kt
  2. 2 0
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopJobFragment.kt
  3. 106 0
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/InProgressJobManageFragment.kt
  4. 43 1
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobExecuteFragment.kt
  5. 1 1
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobManageFragment.kt
  6. 1 1
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobManageHomeFragment.kt
  7. 43 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobExecuteViewModel.kt
  8. 2 2
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobManageViewModel.kt
  9. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobViewModel.kt
  10. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopJobViewModel.kt
  11. 1 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopViewModel.kt
  12. 37 0
      app/src/main/java/com/grkj/iscs/view/MaxHeightRecyclerView.kt
  13. 9 0
      app/src/main/res/drawable/bg_btn_job_execute_go_locking.xml
  14. 9 0
      app/src/main/res/drawable/bg_btn_job_execute_go_unlocking.xml
  15. 9 0
      app/src/main/res/drawable/bg_btn_job_execute_normal.xml
  16. 5 0
      app/src/main/res/drawable/icon_ticket_lock.xml
  17. 5 0
      app/src/main/res/drawable/icon_ticket_unlock.xml
  18. 106 0
      app/src/main/res/layout/fragment_in_progress_job_manage.xml
  19. 75 39
      app/src/main/res/layout/fragment_job_execute.xml
  20. 38 0
      app/src/main/res/layout/item_job_execute_point.xml
  21. 11 0
      app/src/main/res/navigation/nav_job_manage.xml
  22. 3 0
      app/src/main/res/values-en/strings.xml
  23. 3 0
      app/src/main/res/values-zh/strings.xml
  24. 6 0
      app/src/main/res/values/attrs.xml
  25. 3 0
      app/src/main/res/values/strings.xml
  26. 2 2
      data/src/main/java/com/grkj/data/dao/HardwareDao.kt
  27. 46 0
      data/src/main/java/com/grkj/data/dao/JobTicketDao.kt
  28. 2 3
      data/src/main/java/com/grkj/data/database/ISCSDatabase.kt
  29. 4 4
      data/src/main/java/com/grkj/data/enums/JobTicketStatusEnums.kt
  30. 21 18
      data/src/main/java/com/grkj/data/model/dos/IsJobCard.kt
  31. 0 43
      data/src/main/java/com/grkj/data/model/dos/IsJobCardDo.kt
  32. 1 1
      data/src/main/java/com/grkj/data/model/dos/IsJobTicket.kt
  33. 1 1
      data/src/main/java/com/grkj/data/model/dos/IsJobTicketKey.kt
  34. 1 1
      data/src/main/java/com/grkj/data/model/dos/IsJobTicketLock.kt
  35. 1 1
      data/src/main/java/com/grkj/data/model/dos/IsJobTicketPoints.kt
  36. 1 1
      data/src/main/java/com/grkj/data/model/dos/IsJobTicketStep.kt
  37. 1 1
      data/src/main/java/com/grkj/data/model/dos/IsJobTicketUser.kt
  38. 8 0
      data/src/main/java/com/grkj/data/model/vo/IsJobTicketDataVo.kt
  39. 8 0
      data/src/main/java/com/grkj/data/model/vo/IsJobTicketKeyDataVo.kt
  40. 8 0
      data/src/main/java/com/grkj/data/model/vo/IsJobTicketLockDataVo.kt
  41. 11 0
      data/src/main/java/com/grkj/data/model/vo/IsJobTicketPointsDataVo.kt
  42. 8 0
      data/src/main/java/com/grkj/data/model/vo/IsJobTicketStepDataVo.kt
  43. 8 0
      data/src/main/java/com/grkj/data/model/vo/IsJobTicketUserDataVo.kt
  44. 36 0
      data/src/main/java/com/grkj/data/repository/IJobTicketRepository.kt
  45. 2 4
      data/src/main/java/com/grkj/data/repository/impl/HardwareRepository.kt
  46. 31 1
      data/src/main/java/com/grkj/data/repository/impl/JobTicketRepository.kt

+ 2 - 0
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditJobFragment.kt

@@ -66,6 +66,8 @@ class EditJobFragment : BaseFragment<FragmentEditJobBinding>() {
                     countDownTime = 10,
                     onConfirmClick = {
                         viewModel.startJob().observe(this) {
+                            GlobalDataTempStore.getInstance()
+                                .saveData(DataTransferConstants.KEY_JOB_TICKET_ID, viewModel.jobTicketData?.ticketId?:0)
                             navController.navigate(R.id.action_editJobFragment_to_jobExecuteFragment)
                         }
                     })

+ 2 - 0
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopJobFragment.kt

@@ -67,6 +67,8 @@ class EditSopJobFragment : BaseFragment<FragmentEditSopJobBinding>() {
                     countDownTime = 10,
                     onConfirmClick = {
                         viewModel.startJob().observe(this) {
+                            GlobalDataTempStore.getInstance()
+                                .saveData(DataTransferConstants.KEY_JOB_TICKET_ID, viewModel.jobTicketData?.ticketId?:0)
                             navController.navigate(R.id.action_editSopJobFragment_to_jobExecuteFragment)
                         }
                     })

+ 106 - 0
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/InProgressJobManageFragment.kt

@@ -0,0 +1,106 @@
+package com.grkj.iscs.features.main.fragment.job_manage
+
+import android.graphics.Color
+import androidx.lifecycle.ViewModelProvider
+import com.drake.brv.BindingAdapter
+import com.drake.brv.annotaion.DividerOrientation
+import com.drake.brv.utils.divider
+import com.drake.brv.utils.linear
+import com.drake.brv.utils.models
+import com.drake.brv.utils.setup
+import com.grkj.data.enums.JobTicketStatusEnums
+import com.grkj.data.model.vo.JobTicketManageVo
+import com.grkj.iscs.R
+import com.grkj.iscs.common.DataTransferConstants
+import com.grkj.iscs.databinding.FragmentInProgressJobManageBinding
+import com.grkj.iscs.databinding.ItemJobManageBinding
+import com.grkj.iscs.features.main.viewmodel.job_manage.JobManageViewModel
+import com.grkj.ui_base.base.BaseFragment
+import com.sik.sikcore.data.GlobalDataTempStore
+import com.sik.sikcore.extension.setDebouncedClickListener
+
+/**
+ * 进行中的作业管理
+ */
+class InProgressJobManageFragment : BaseFragment<FragmentInProgressJobManageBinding>() {
+    private val viewModel: JobManageViewModel by lazy { ViewModelProvider(this)[JobManageViewModel::class] }
+    override fun getLayoutId(): Int {
+        return R.layout.fragment_in_progress_job_manage
+    }
+
+    override fun initView() {
+        binding.back.setDebouncedClickListener {
+            navController.popBackStack()
+        }
+        binding.refreshLayout.setOnRefreshListener {
+            getData(nextPage = false)
+        }
+        binding.refreshLayout.setOnLoadMoreListener {
+            getData()
+        }
+        binding.listRv.linear().divider {
+            this.setColor(Color.BLACK)
+            this.startVisible = false
+            this.endVisible = true
+            this.orientation = DividerOrientation.VERTICAL
+        }.setup {
+            addType<JobTicketManageVo>(R.layout.item_job_manage)
+            onBind {
+                onListDataBinding(this)
+            }
+        }
+        setSelectAllListener()
+    }
+
+    private fun setSelectAllListener() {
+        binding.selectAll.setOnCheckedChangeListener { v, checked ->
+            viewModel.jobManageDataList.forEach { it.isSelected = checked }
+            binding.listRv.adapter?.notifyDataSetChanged()
+        }
+    }
+
+    private fun BindingAdapter.BindingViewHolder.onListDataBinding(holder: BindingAdapter.BindingViewHolder) {
+        val itemBinding = holder.getBinding<ItemJobManageBinding>()
+        val item = holder.getModel<JobTicketManageVo>()
+        itemBinding.jobName.text = item.ticketName
+        itemBinding.status.text = JobTicketStatusEnums.getTicketStatusStr(item.ticketStatus)
+        itemBinding.select.setOnCheckedChangeListener(null)
+        itemBinding.select.isChecked = item.isSelected
+        itemBinding.select.setOnCheckedChangeListener { _, checked ->
+            item.isSelected = checked
+            binding.selectAll.setOnCheckedChangeListener(null)
+            binding.selectAll.isChecked = viewModel.jobManageDataList.all { it.isSelected }
+            setSelectAllListener()
+        }
+        itemBinding.view.setDebouncedClickListener {
+            GlobalDataTempStore.getInstance()
+                .saveData(DataTransferConstants.KEY_JOB_TICKET_ID, item.ticketId)
+            navController.navigate(R.id.action_inProgressJobManageFragment_to_jobExecuteFragment)
+        }
+    }
+
+    override fun initData() {
+        super.initData()
+        getData(nextPage = false)
+    }
+
+    private fun getData(nextPage: Boolean = true) {
+        viewModel.getData(nextPage).observe(this) {
+            if (!nextPage) {
+                binding.selectAll.setOnCheckedChangeListener(null)
+                binding.selectAll.isChecked = false
+                setSelectAllListener()
+            }
+            binding.refreshLayout.finishRefresh()
+            binding.refreshLayout.finishLoadMore()
+            binding.listRv.models = viewModel.jobManageDataList.filter {
+                it.ticketStatus in listOf(
+                    JobTicketStatusEnums.SELECT_MEMBER,
+                    JobTicketStatusEnums.LOCKING,
+                    JobTicketStatusEnums.COLOCKING,
+                    JobTicketStatusEnums.UNLOCKING
+                ).map { it.status }
+            }
+        }
+    }
+}

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

@@ -1,14 +1,27 @@
 package com.grkj.iscs.features.main.fragment.job_manage
 
+import androidx.lifecycle.ViewModelProvider
+import com.drake.brv.BindingAdapter
+import com.drake.brv.utils.linear
+import com.drake.brv.utils.models
+import com.drake.brv.utils.setup
+import com.grkj.data.model.vo.IsJobTicketPointsDataVo
 import com.grkj.iscs.R
+import com.grkj.iscs.common.DataTransferConstants
 import com.grkj.iscs.databinding.FragmentJobExecuteBinding
+import com.grkj.iscs.databinding.ItemJobExecutePointBinding
+import com.grkj.iscs.features.main.viewmodel.job_manage.JobExecuteViewModel
 import com.grkj.ui_base.base.BaseFragment
+import com.kongzue.dialogx.dialogs.PopTip
+import com.sik.sikcore.data.GlobalDataTempStore
 import com.sik.sikcore.extension.setDebouncedClickListener
 
 /**
  * 作业执行界面
  */
-class JobExecuteFragment: BaseFragment<FragmentJobExecuteBinding>() {
+class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
+    private val viewModel: JobExecuteViewModel by lazy { ViewModelProvider(this)[JobExecuteViewModel::class] }
+
     override fun getLayoutId(): Int {
         return R.layout.fragment_job_execute
     }
@@ -17,5 +30,34 @@ class JobExecuteFragment: BaseFragment<FragmentJobExecuteBinding>() {
         binding.back.setDebouncedClickListener {
             navController.popBackStack()
         }
+        binding.listRv.linear().setup {
+            addType<IsJobTicketPointsDataVo>(R.layout.item_job_execute_point)
+            onBind {
+                onRVListBinding(this)
+            }
+        }
+    }
+
+    private fun BindingAdapter.BindingViewHolder.onRVListBinding(holder: BindingAdapter.BindingViewHolder) {
+        val itemBinding = holder.getBinding<ItemJobExecutePointBinding>()
+        val item = holder.getModel<IsJobTicketPointsDataVo>()
+        itemBinding.pointName.text = item.pointName
+        itemBinding.pointFunction.text = item.pointFunction
+
+    }
+
+    override fun initData() {
+        super.initData()
+        if (!GlobalDataTempStore.getInstance().hasData(DataTransferConstants.KEY_JOB_TICKET_ID)) {
+            PopTip.tip(R.string.job_lost)
+            navController.popBackStack()
+            return
+        }
+        viewModel.ticketId = GlobalDataTempStore.getInstance()
+            .getData(DataTransferConstants.KEY_JOB_TICKET_ID) as Long
+        viewModel.getJobTicketData().observe(this) {
+            binding.jobNameTv.text = viewModel.ticketData.ticketName
+            binding.listRv.models = viewModel.ticketPoints
+        }
     }
 }

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobManageFragment.kt

@@ -140,7 +140,7 @@ class JobManageFragment : BaseFragment<FragmentJobManageBinding>() {
     }
 
     private fun getData(nextPage: Boolean = true) {
-        viewModel.getSopData(nextPage).observe(this) {
+        viewModel.getData(nextPage).observe(this) {
             if (!nextPage) {
                 binding.selectAll.setOnCheckedChangeListener(null)
                 binding.selectAll.isChecked = false

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/JobManageHomeFragment.kt

@@ -113,7 +113,7 @@ class JobManageHomeFragment : BaseFragment<FragmentJobManageHomeBinding>() {
         BottomNavVisibilityEvent.sendBottomNavVisibilityEvent(false)
         when (menuType) {
             0 -> {
-
+                navController.navigate(R.id.action_jobManageHomeFragment_to_inProgressJobManageFragment)
             }
 
             1 -> {

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

@@ -0,0 +1,43 @@
+package com.grkj.iscs.features.main.viewmodel.job_manage
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.liveData
+import com.grkj.data.model.vo.IsJobTicketDataVo
+import com.grkj.data.model.vo.IsJobTicketKeyDataVo
+import com.grkj.data.model.vo.IsJobTicketLockDataVo
+import com.grkj.data.model.vo.IsJobTicketPointsDataVo
+import com.grkj.data.model.vo.IsJobTicketStepDataVo
+import com.grkj.data.model.vo.IsJobTicketUserDataVo
+import com.grkj.data.repository.IJobTicketRepository
+import com.grkj.data.repository.impl.JobTicketRepository
+import com.grkj.ui_base.base.BaseViewModel
+import kotlinx.coroutines.Dispatchers
+
+/**
+ * 作业执行数据
+ */
+class JobExecuteViewModel : BaseViewModel() {
+    private val jobTicketRepository: IJobTicketRepository by lazy { JobTicketRepository.instance }
+    var ticketId: Long = 0
+    lateinit var ticketData: IsJobTicketDataVo
+    lateinit var ticketKey: List<IsJobTicketKeyDataVo>
+    lateinit var ticketLock: List<IsJobTicketLockDataVo>
+    lateinit var ticketPoints: List<IsJobTicketPointsDataVo>
+    lateinit var ticketStep: List<IsJobTicketStepDataVo>
+    lateinit var ticketUser: List<IsJobTicketUserDataVo>
+
+    /**
+     * 获取作业数据
+     */
+    fun getJobTicketData(): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            ticketData = jobTicketRepository.getJobTicketDataByTicketId(ticketId)
+            ticketKey = jobTicketRepository.getJobTicketKeyDataByTicketId(ticketId)
+            ticketLock = jobTicketRepository.getJobTicketLockDataByTicketId(ticketId)
+            ticketPoints = jobTicketRepository.getJobTicketPointsDataByTicketId(ticketId)
+            ticketStep = jobTicketRepository.getJobTicketStepDataByTicketId(ticketId)
+            ticketUser = jobTicketRepository.getJobTicketUserDataByTicketId(ticketId)
+            emit(true)
+        }
+    }
+}

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobManageViewModel.kt

@@ -9,7 +9,7 @@ import com.grkj.ui_base.base.BaseViewModel
 import kotlinx.coroutines.Dispatchers
 
 /**
- * SOP管理
+ * 作业管理
  */
 class JobManageViewModel : BaseViewModel() {
     private val jobTicketRepository: IJobTicketRepository by lazy { JobTicketRepository.instance }
@@ -31,7 +31,7 @@ class JobManageViewModel : BaseViewModel() {
     /**
      * 获取sop数据
      */
-    fun getSopData(nextPage: Boolean): LiveData<Boolean> {
+    fun getData(nextPage: Boolean): LiveData<Boolean> {
         if (nextPage) {
             current += 1
         } else {

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobViewModel.kt

@@ -18,7 +18,7 @@ import com.grkj.ui_base.base.BaseViewModel
 import kotlinx.coroutines.Dispatchers
 
 /**
- * 新建sop界面模型
+ * 作业界面模型
  */
 class JobViewModel : BaseViewModel() {
     private val workstationRepository: IWorkstationRepository by lazy { WorkstationRepository.instance }

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopJobViewModel.kt

@@ -18,7 +18,7 @@ import com.grkj.ui_base.base.BaseViewModel
 import kotlinx.coroutines.Dispatchers
 
 /**
- * 新建sop界面模型
+ * sop作业界面模型
  */
 class SopJobViewModel : BaseViewModel() {
     private val workstationRepository: IWorkstationRepository by lazy { WorkstationRepository.instance }

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopViewModel.kt

@@ -14,7 +14,7 @@ import com.grkj.ui_base.base.BaseViewModel
 import kotlinx.coroutines.Dispatchers
 
 /**
- * 新建sop界面模型
+ * sop界面模型
  */
 class SopViewModel : BaseViewModel() {
     private val workstationRepository: IWorkstationRepository by lazy { WorkstationRepository.instance }

+ 37 - 0
app/src/main/java/com/grkj/iscs/view/MaxHeightRecyclerView.kt

@@ -0,0 +1,37 @@
+package com.grkj.iscs.view
+
+import android.content.Context
+import android.util.AttributeSet
+import androidx.recyclerview.widget.RecyclerView
+import com.grkj.iscs.R
+
+class MaxHeightRecyclerView @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet,
+    defStyle: Int = 0
+) : RecyclerView(context, attrs, defStyle) {
+
+    private var maxHeightPx: Int = Int.MAX_VALUE
+
+    init {
+        // 读取 maxHeight 属性
+        val a = context.obtainStyledAttributes(attrs, R.styleable.MaxHeightRecyclerView)
+        maxHeightPx = a.getDimensionPixelSize(
+            R.styleable.MaxHeightRecyclerView_maxHeight,
+            Int.MAX_VALUE
+        )
+        a.recycle()
+    }
+
+    override fun onMeasure(widthSpec: Int, heightSpec: Int) {
+        // 把 heightSpec 改成 AT_MOST maxHeightPx
+        val mode = MeasureSpec.getMode(heightSpec)
+        val size = MeasureSpec.getSize(heightSpec)
+        val newHeightSpec = if (mode == MeasureSpec.UNSPECIFIED || size > maxHeightPx) {
+            MeasureSpec.makeMeasureSpec(maxHeightPx, MeasureSpec.AT_MOST)
+        } else {
+            heightSpec
+        }
+        super.onMeasure(widthSpec, newHeightSpec)
+    }
+}

+ 9 - 0
app/src/main/res/drawable/bg_btn_job_execute_go_locking.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <stroke
+        android:width="1dp"
+        android:color="@color/black" />
+    <solid android:color="@color/common_status_red" />
+    <corners android:radius="4dp" />
+</shape>

+ 9 - 0
app/src/main/res/drawable/bg_btn_job_execute_go_unlocking.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <stroke
+        android:width="1dp"
+        android:color="@color/black" />
+    <solid android:color="@color/common_status_green" />
+    <corners android:radius="4dp" />
+</shape>

+ 9 - 0
app/src/main/res/drawable/bg_btn_job_execute_normal.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <stroke
+        android:width="1dp"
+        android:color="@color/black" />
+    <solid android:color="@color/white" />
+    <corners android:radius="4dp" />
+</shape>

+ 5 - 0
app/src/main/res/drawable/icon_ticket_lock.xml

@@ -0,0 +1,5 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
+      
+    <path android:fillColor="@android:color/white" android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM9,6c0,-1.66 1.34,-3 3,-3s3,1.34 3,3v2L9,8L9,6zM18,20L6,20L6,10h12v10zM12,17c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2z"/>
+    
+</vector>

+ 5 - 0
app/src/main/res/drawable/icon_ticket_unlock.xml

@@ -0,0 +1,5 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
+      
+    <path android:fillColor="@android:color/white" android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6h2c0,-1.66 1.34,-3 3,-3s3,1.34 3,3v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM18,20L6,20L6,10h12v10zM12,17c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2z"/>
+    
+</vector>

+ 106 - 0
app/src/main/res/layout/fragment_in_progress_job_manage.xml

@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_margin="20dp"
+        android:background="@drawable/home_card_bg"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:id="@+id/title_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            android:paddingHorizontal="10dp"
+            android:paddingVertical="5dp">
+
+            <ImageView
+                android:layout_width="20dp"
+                android:layout_height="20dp"
+                android:src="@mipmap/icon_data_manage_menu_user_manage" />
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:layout_weight="1"
+                android:text="@string/in_progress_job_manage_title"
+                android:textColor="@color/black"
+                android:textSize="24sp" />
+
+            <TextView
+                android:id="@+id/back"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:background="@drawable/common_dialog_btn"
+                android:paddingHorizontal="20dp"
+                android:text="@string/back"
+                android:textColor="@color/black"
+                android:textSize="20sp" />
+        </LinearLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:background="@color/black" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="20dp"
+            android:layout_marginTop="10dp"
+            android:background="@drawable/common_card_bg"
+            android:divider="@drawable/divider_table"
+            android:showDividers="middle">
+
+            <CheckBox
+                android:id="@+id/select_all"
+                android:layout_width="30dp"
+                android:layout_height="30dp"
+                android:layout_gravity="center"
+                android:layout_margin="10dp" />
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:gravity="center"
+                android:text="@string/job_name"
+                android:textSize="18sp" />
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:gravity="center"
+                android:text="@string/status"
+                android:textSize="18sp" />
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:gravity="center"
+                android:text="@string/detail"
+                android:textSize="18sp" />
+        </LinearLayout>
+
+        <com.scwang.smart.refresh.layout.SmartRefreshLayout
+            android:id="@+id/refresh_layout"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginHorizontal="20dp"
+            android:layout_marginBottom="10dp">
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/list_rv"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@drawable/common_card_bg" />
+        </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+    </LinearLayout>
+</layout>

+ 75 - 39
app/src/main/res/layout/fragment_job_execute.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<layout xmlns:android="http://schemas.android.com/apk/res/android">
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -23,6 +24,7 @@
                 android:src="@mipmap/icon_data_manage_menu_user_manage" />
 
             <TextView
+                android:id="@+id/job_name_tv"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginLeft="10dp"
@@ -48,47 +50,27 @@
             android:layout_height="1dp"
             android:background="@color/black" />
 
-        <LinearLayout
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/step_rv"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingHorizontal="10dp"
-            android:paddingVertical="10dp">
-
-            <TextView
-                android:id="@+id/delete_sop"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginLeft="10dp"
-                android:background="@drawable/common_dialog_btn"
-                android:paddingHorizontal="20dp"
-                android:text="@string/delete"
-                android:textColor="@color/black"
-                android:textSize="20sp" />
-        </LinearLayout>
+            android:layout_height="260dp"
+            android:layout_marginTop="30dp" />
 
         <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
+            android:layout_height="50dp"
             android:layout_marginHorizontal="20dp"
             android:layout_marginTop="10dp"
             android:background="@drawable/common_card_bg"
             android:divider="@drawable/divider_table"
             android:showDividers="middle">
 
-            <CheckBox
-                android:id="@+id/select_all"
-                android:layout_width="30dp"
-                android:layout_height="30dp"
-                android:layout_gravity="center"
-                android:layout_margin="10dp" />
-
             <TextView
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
                 android:layout_weight="1"
                 android:gravity="center"
-                android:text="@string/job_name"
+                android:text="@string/point_name_tv"
                 android:textSize="18sp" />
 
             <TextView
@@ -96,7 +78,7 @@
                 android:layout_height="match_parent"
                 android:layout_weight="1"
                 android:gravity="center"
-                android:text="@string/status"
+                android:text="@string/point_manage_point_function"
                 android:textSize="18sp" />
 
             <TextView
@@ -104,22 +86,76 @@
                 android:layout_height="match_parent"
                 android:layout_weight="1"
                 android:gravity="center"
-                android:text="@string/detail"
+                android:text="@string/lock_status"
                 android:textSize="18sp" />
         </LinearLayout>
 
-        <com.scwang.smart.refresh.layout.SmartRefreshLayout
-            android:id="@+id/refresh_layout"
+        <com.grkj.iscs.view.MaxHeightRecyclerView
+            android:id="@+id/list_rv"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
+            android:layout_height="wrap_content"
             android:layout_marginHorizontal="20dp"
-            android:layout_marginBottom="10dp">
+            android:background="@drawable/common_card_bg"
+            app:maxHeight="240dp" />
 
-            <androidx.recyclerview.widget.RecyclerView
-                android:id="@+id/list_rv"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:background="@drawable/common_card_bg" />
-        </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+        <View
+            android:layout_width="1dp"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="right"
+            android:orientation="horizontal"
+            android:padding="10dp">
+
+            <TextView
+                android:id="@+id/to_lock"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:background="@drawable/bg_btn_job_execute_go_locking"
+                android:drawableLeft="@drawable/icon_ticket_lock"
+                android:paddingHorizontal="10dp"
+                android:text="@string/go_locking"
+                android:textColor="@color/white"
+                android:textSize="20sp" />
+
+            <TextView
+                android:id="@+id/to_unlock"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:background="@drawable/bg_btn_job_execute_go_unlocking"
+                android:drawableLeft="@drawable/icon_ticket_unlock"
+                android:drawablePadding="10dp"
+                android:paddingHorizontal="10dp"
+                android:text="@string/go_unlocking"
+                android:textColor="@color/white"
+                android:textSize="20sp" />
+
+            <TextView
+                android:id="@+id/cancel_job"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:background="@drawable/bg_btn_job_execute_normal"
+                android:paddingHorizontal="10dp"
+                android:text="@string/cancel_the_job"
+                android:textColor="@color/black"
+                android:textSize="20sp" />
+
+            <TextView
+                android:id="@+id/finish_job"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:background="@drawable/common_dialog_btn"
+                android:paddingHorizontal="10dp"
+                android:text="@string/finish_the_job"
+                android:textColor="@color/black"
+                android:textSize="20sp" />
+        </LinearLayout>
     </LinearLayout>
 </layout>

+ 38 - 0
app/src/main/res/layout/item_job_execute_point.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:background="@drawable/common_card_bg"
+        android:divider="@drawable/divider_table"
+        android:showDividers="middle">
+
+        <TextView
+            android:id="@+id/point_name"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="@string/point_name_tv"
+            android:textSize="18sp" />
+
+        <TextView
+            android:id="@+id/point_function"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="@string/point_manage_point_function"
+            android:textSize="18sp" />
+
+        <TextView
+            android:id="@+id/lock_status"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="@string/lock_status"
+            android:textSize="18sp" />
+    </LinearLayout>
+</layout>

+ 11 - 0
app/src/main/res/navigation/nav_job_manage.xml

@@ -23,6 +23,9 @@
         <action
             android:id="@+id/action_jobManageHomeFragment_to_jobManageFragment"
             app:destination="@id/jobManageFragment" />
+        <action
+            android:id="@+id/action_jobManageHomeFragment_to_inProgressJobManageFragment"
+            app:destination="@id/inProgressJobManageFragment" />
     </fragment>
     <fragment
         android:id="@+id/createJobFragment"
@@ -138,4 +141,12 @@
         android:id="@+id/jobExecuteFragment"
         android:name="com.grkj.iscs.features.main.fragment.job_manage.JobExecuteFragment"
         android:label="JobExecuteFragment" />
+    <fragment
+        android:id="@+id/inProgressJobManageFragment"
+        android:name="com.grkj.iscs.features.main.fragment.job_manage.InProgressJobManageFragment"
+        android:label="InProgressJobManageFragment" >
+        <action
+            android:id="@+id/action_inProgressJobManageFragment_to_jobExecuteFragment"
+            app:destination="@id/jobExecuteFragment" />
+    </fragment>
 </navigation>

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

@@ -147,4 +147,7 @@
     <string name="sop_job_save_succeed">SOP job save succeed</string>
     <string name="sop_job_save_failed">SOP job save failed</string>
     <string name="edit_job_title">Job detail</string>
+    <string name="in_progress_job_manage_title">In progress job</string>
+    <string name="job_lost">Job lost</string>
+    <string name="point_name_tv">Point name</string>
 </resources>

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

@@ -147,4 +147,7 @@
     <string name="sop_job_save_succeed">SOP作业保存成功</string>
     <string name="sop_job_save_failed">SOP作业保存失败</string>
     <string name="edit_job_title">作业详情</string>
+    <string name="in_progress_job_manage_title">进行中的作业</string>
+    <string name="job_lost">作业丢失</string>
+    <string name="point_name_tv">隔离点</string>
 </resources>

+ 6 - 0
app/src/main/res/values/attrs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <declare-styleable name="MaxHeightRecyclerView">
+        <attr name="maxHeight" format="dimension"/>
+    </declare-styleable>
+</resources>

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -146,4 +146,7 @@
     <string name="sop_job_save_succeed">SOP作业保存成功</string>
     <string name="sop_job_save_failed">SOP作业保存失败</string>
     <string name="edit_job_title">作业详情</string>
+    <string name="in_progress_job_manage_title">进行中的作业</string>
+    <string name="job_lost">作业丢失</string>
+    <string name="point_name_tv">隔离点</string>
 </resources>

+ 2 - 2
data/src/main/java/com/grkj/data/dao/HardwareDao.kt

@@ -4,7 +4,7 @@ import androidx.room.Dao
 import androidx.room.Insert
 import androidx.room.OnConflictStrategy
 import androidx.room.Query
-import com.grkj.data.model.dos.IsJobCardDo
+import com.grkj.data.model.dos.IsJobCard
 
 /**
  * 硬件数据库查询
@@ -21,5 +21,5 @@ interface HardwareDao {
      * 添加卡片
      */
     @Insert(onConflict = OnConflictStrategy.REPLACE)
-    fun addCard(isJobCardDo: IsJobCardDo)
+    fun addCard(isJobCard: IsJobCard)
 }

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

@@ -12,6 +12,12 @@ import com.grkj.data.model.dos.IsJobTicketLock
 import com.grkj.data.model.dos.IsJobTicketPoints
 import com.grkj.data.model.dos.IsJobTicketStep
 import com.grkj.data.model.dos.IsJobTicketUser
+import com.grkj.data.model.vo.IsJobTicketDataVo
+import com.grkj.data.model.vo.IsJobTicketKeyDataVo
+import com.grkj.data.model.vo.IsJobTicketLockDataVo
+import com.grkj.data.model.vo.IsJobTicketPointsDataVo
+import com.grkj.data.model.vo.IsJobTicketStepDataVo
+import com.grkj.data.model.vo.IsJobTicketUserDataVo
 import com.grkj.data.model.vo.JobTicketManageVo
 import com.grkj.data.model.vo.PointManageVo
 import com.grkj.data.model.vo.UserManageVo
@@ -184,4 +190,44 @@ interface JobTicketDao {
     )
     fun getTicketPointsByTicketId(ticketId: Long): List<PointManageVo>
 
+    /**
+     * 根据作业id获取作业详细数据
+     */
+    @Query("select * from is_job_ticket where ticket_id = :ticketId")
+    fun getJobTicketDataByTicketId(ticketId: Long): IsJobTicketDataVo
+
+    /**
+     * 根据作业id获取作业钥匙详细数据
+     */
+    @Query("select * from is_job_ticket_key where ticket_id = :ticketId")
+    fun getJobTicketKeyDataByTicketId(ticketId: Long): List<IsJobTicketKeyDataVo>
+
+    /**
+     * 根据作业id获取作业挂锁详细数据
+     */
+    @Query("select * from is_job_ticket_lock where ticket_id = :ticketId")
+    fun getJobTicketLockDataByTicketId(ticketId: Long): List<IsJobTicketLockDataVo>
+
+    /**
+     * 根据作业id获取作业点位详细数据
+     */
+    @Query("select istp.*, " +
+            "iip.point_name as pointName," +
+            "iip.remark as pointFunction " +
+            "from is_job_ticket_points istp " +
+            "left join is_isolation_point iip on istp.point_id = iip.point_id " +
+            "where ticket_id = :ticketId")
+    fun getJobTicketPointsDataByTicketId(ticketId: Long): List<IsJobTicketPointsDataVo>
+
+    /**
+     * 根据作业id获取作业步骤详细数据
+     */
+    @Query("select * from is_job_ticket_step where ticket_id = :ticketId")
+    fun getJobTicketStepDataByTicketId(ticketId: Long): List<IsJobTicketStepDataVo>
+
+    /**
+     * 根据作业id获取作业人员详细数据
+     */
+    @Query("select * from is_job_ticket_user where ticket_id = :ticketId")
+    fun getJobTicketUserDataByTicketId(ticketId: Long): List<IsJobTicketUserDataVo>
 }

+ 2 - 3
data/src/main/java/com/grkj/data/database/ISCSDatabase.kt

@@ -1,6 +1,5 @@
 package com.grkj.data.database
 
-import androidx.room.Dao
 import androidx.room.Database
 import androidx.room.Room
 import androidx.room.RoomDatabase
@@ -13,7 +12,7 @@ import com.grkj.data.dao.RoleDao
 import com.grkj.data.dao.UserDao
 import com.grkj.data.dao.WorkstationDao
 import com.grkj.data.model.dos.IsIsolationPoint
-import com.grkj.data.model.dos.IsJobCardDo
+import com.grkj.data.model.dos.IsJobCard
 import com.grkj.data.model.dos.IsJobTicket
 import com.grkj.data.model.dos.IsJobTicketKey
 import com.grkj.data.model.dos.IsJobTicketLock
@@ -37,7 +36,7 @@ import com.sik.sikcore.SIKCore
  */
 @Database(
     entities = [
-        IsJobCardDo::class, SysUserDo::class, SysUserCharacteristicDo::class,
+        IsJobCard::class, SysUserDo::class, SysUserCharacteristicDo::class,
         SysRole::class, SysUserRole::class, IsUserWorkstation::class, IsWorkstation::class, IsIsolationPoint::class, IsRfidToken::class,
         IsSop::class, IsSopUser::class, IsSopPoints::class, IsJobTicket::class, IsJobTicketKey::class, IsJobTicketLock::class, IsJobTicketPoints::class, IsJobTicketStep::class, IsJobTicketUser::class,
     ],

+ 4 - 4
data/src/main/java/com/grkj/data/enums/JobTicketStatusEnums.kt

@@ -6,10 +6,10 @@ package com.grkj.data.enums
  */
 enum class JobTicketStatusEnums(val status: String, val description: String) {
     NOT_START("0", "未开始"),
-    WAIT_TO_LOCK("1", "选择人员"),
-    PROCESSING("2", "上锁中"),
-    WAIT_TO_UNLOCK("3", "共锁中"),
-    UNLOCKED("4", "解锁中"),
+    SELECT_MEMBER("1", "选择人员"),
+    LOCKING("2", "上锁中"),
+    COLOCKING("3", "共锁中"),
+    UNLOCKING("4", "解锁中"),
     FINISHED("5", "已结束"),
     CANCELED("6", "已取消");
 

+ 21 - 18
data/src/main/java/com/grkj/data/model/dos/IsJobCard.kt

@@ -1,39 +1,42 @@
 package com.grkj.data.model.dos
 
-import androidx.room.*
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
 
+/**
+ * 工卡
+ */
 @Entity(tableName = "is_job_card")
 class IsJobCard : BaseBean() {
-
     @PrimaryKey(autoGenerate = true)
-    @ColumnInfo(name = "card_id")
-    var cardId: Int = 0
+    @ColumnInfo("card_id")
+    var cardId: Long = 0
 
-    @ColumnInfo(name = "card_code")
+    @ColumnInfo("card_code")
     var cardCode: String = ""
 
-    @ColumnInfo(name = "hardware_id")
-    var hardwareId: Int? = null
+    @ColumnInfo("hardware_id")
+    var hardwareId: Long? = null
 
-    @ColumnInfo(name = "card_nfc")
+    @ColumnInfo("card_nfc")
     var cardNfc: String = ""
 
-    @ColumnInfo(name = "card_type")
-    var cardType: Int? = null
+    @ColumnInfo("card_type")
+    var cardType: Int? = 1
 
-    @ColumnInfo(name = "user_id")
-    var userId: Int? = null
+    @ColumnInfo("user_id")
+    var userId: Long? = null
 
-    @ColumnInfo(name = "user_name")
+    @ColumnInfo("user_name")
     var userName: String? = null
 
-    @ColumnInfo(name = "del_flag")
-    var delFlag: String = "0"
+    @ColumnInfo("del_flag")
+    var delFlag: String? = "0"
 
-    @ColumnInfo(name = "ex_status")
+    @ColumnInfo("ex_status")
     var exStatus: String? = null
 
-    @ColumnInfo(name = "ex_remark")
+    @ColumnInfo("ex_remark")
     var exRemark: String? = null
-
 }

+ 0 - 43
data/src/main/java/com/grkj/data/model/dos/IsJobCardDo.kt

@@ -1,43 +0,0 @@
-package com.grkj.data.model.dos
-
-import androidx.room.ColumnInfo
-import androidx.room.Entity
-import androidx.room.PrimaryKey
-import com.sik.sikcore.date.TimeUtils
-
-/**
- * 工卡
- */
-@Entity(tableName = "is_job_card")
-class IsJobCardDo : BaseBean() {
-    @PrimaryKey(autoGenerate = true)
-    @ColumnInfo("card_id")
-    var cardId: Long = 0
-
-    @ColumnInfo("card_code")
-    var cardCode: String = ""
-
-    @ColumnInfo("hardware_id")
-    var hardwareId: Long? = null
-
-    @ColumnInfo("card_nfc")
-    var cardNfc: String = ""
-
-    @ColumnInfo("card_type")
-    var cardType: Int? = 1
-
-    @ColumnInfo("user_id")
-    var userId: Long? = null
-
-    @ColumnInfo("user_name")
-    var userName: String? = null
-
-    @ColumnInfo("del_flag")
-    var delFlag: String? = "0"
-
-    @ColumnInfo("ex_status")
-    var exStatus: String? = null
-
-    @ColumnInfo("ex_remark")
-    var exRemark: String? = null
-}

+ 1 - 1
data/src/main/java/com/grkj/data/model/dos/IsJobTicket.kt

@@ -9,7 +9,7 @@ import com.sik.sikcore.date.TimeUtils
  * SOP
  */
 @Entity(tableName = "is_job_ticket")
-class IsJobTicket : BaseBean() {
+open class IsJobTicket : BaseBean() {
     @PrimaryKey(autoGenerate = true)
     @ColumnInfo("ticket_id")
     var ticketId: Long = 0

+ 1 - 1
data/src/main/java/com/grkj/data/model/dos/IsJobTicketKey.kt

@@ -8,7 +8,7 @@ import androidx.room.PrimaryKey
  * is_job_ticket_key
  */
 @Entity(tableName = "is_job_ticket_key")
-class IsJobTicketKey : BaseBean() {
+open class IsJobTicketKey : BaseBean() {
     @PrimaryKey(autoGenerate = true)
     @ColumnInfo("record_id")
     var recordId: Long = 0

+ 1 - 1
data/src/main/java/com/grkj/data/model/dos/IsJobTicketLock.kt

@@ -8,7 +8,7 @@ import androidx.room.PrimaryKey
  * is_job_ticket_lock
  */
 @Entity(tableName = "is_job_ticket_lock")
-class IsJobTicketLock : BaseBean() {
+open class IsJobTicketLock : BaseBean() {
     @PrimaryKey(autoGenerate = true)
     @ColumnInfo("record_id")
     var recordId: Long = 0

+ 1 - 1
data/src/main/java/com/grkj/data/model/dos/IsJobTicketPoints.kt

@@ -8,7 +8,7 @@ import androidx.room.PrimaryKey
  * is_job_ticket_points
  */
 @Entity(tableName = "is_job_ticket_points")
-class IsJobTicketPoints : BaseBean() {
+open class IsJobTicketPoints : BaseBean() {
     @PrimaryKey(autoGenerate = true)
     @ColumnInfo("record_id")
     var recordId: Long = 0

+ 1 - 1
data/src/main/java/com/grkj/data/model/dos/IsJobTicketStep.kt

@@ -8,7 +8,7 @@ import androidx.room.PrimaryKey
  * is_job_ticket_step
  */
 @Entity(tableName = "is_job_ticket_step")
-class IsJobTicketStep : BaseBean() {
+open class IsJobTicketStep : BaseBean() {
     @PrimaryKey(autoGenerate = true)
     @ColumnInfo("step_id")
     var stepId: Long = 0

+ 1 - 1
data/src/main/java/com/grkj/data/model/dos/IsJobTicketUser.kt

@@ -8,7 +8,7 @@ import androidx.room.PrimaryKey
  * is_job_ticket_user
  */
 @Entity(tableName = "is_job_ticket_user")
-class IsJobTicketUser : BaseBean() {
+open class IsJobTicketUser : BaseBean() {
     @PrimaryKey(autoGenerate = true)
     @ColumnInfo("record_id")
     var recordId: Long = 0

+ 8 - 0
data/src/main/java/com/grkj/data/model/vo/IsJobTicketDataVo.kt

@@ -0,0 +1,8 @@
+package com.grkj.data.model.vo
+
+import com.grkj.data.model.dos.IsJobTicket
+
+/**
+ * 作业详细数据
+ */
+class IsJobTicketDataVo : IsJobTicket()

+ 8 - 0
data/src/main/java/com/grkj/data/model/vo/IsJobTicketKeyDataVo.kt

@@ -0,0 +1,8 @@
+package com.grkj.data.model.vo
+
+import com.grkj.data.model.dos.IsJobTicketKey
+
+/**
+ * 作业钥匙详细数据实体
+ */
+class IsJobTicketKeyDataVo : IsJobTicketKey()

+ 8 - 0
data/src/main/java/com/grkj/data/model/vo/IsJobTicketLockDataVo.kt

@@ -0,0 +1,8 @@
+package com.grkj.data.model.vo
+
+import com.grkj.data.model.dos.IsJobTicketLock
+
+/**
+ * 作业挂锁详细数据实体
+ */
+class IsJobTicketLockDataVo : IsJobTicketLock()

+ 11 - 0
data/src/main/java/com/grkj/data/model/vo/IsJobTicketPointsDataVo.kt

@@ -0,0 +1,11 @@
+package com.grkj.data.model.vo
+
+import com.grkj.data.model.dos.IsJobTicketPoints
+
+/**
+ * 作业点位详细数据实体
+ */
+class IsJobTicketPointsDataVo : IsJobTicketPoints() {
+    var pointName: String? = ""
+    var pointFunction: String? = ""
+}

+ 8 - 0
data/src/main/java/com/grkj/data/model/vo/IsJobTicketStepDataVo.kt

@@ -0,0 +1,8 @@
+package com.grkj.data.model.vo
+
+import com.grkj.data.model.dos.IsJobTicketStep
+
+/**
+ * 作业步骤详细数据实体
+ */
+class IsJobTicketStepDataVo : IsJobTicketStep()

+ 8 - 0
data/src/main/java/com/grkj/data/model/vo/IsJobTicketUserDataVo.kt

@@ -0,0 +1,8 @@
+package com.grkj.data.model.vo
+
+import com.grkj.data.model.dos.IsJobTicketUser
+
+/**
+ * 作业人员详细数据实体
+ */
+class IsJobTicketUserDataVo : IsJobTicketUser()

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

@@ -1,6 +1,12 @@
 package com.grkj.data.repository
 
 import com.grkj.data.model.res.TicketDetailRes
+import com.grkj.data.model.vo.IsJobTicketDataVo
+import com.grkj.data.model.vo.IsJobTicketKeyDataVo
+import com.grkj.data.model.vo.IsJobTicketLockDataVo
+import com.grkj.data.model.vo.IsJobTicketPointsDataVo
+import com.grkj.data.model.vo.IsJobTicketStepDataVo
+import com.grkj.data.model.vo.IsJobTicketUserDataVo
 import com.grkj.data.model.vo.JobTicketManageVo
 import com.grkj.data.model.vo.PointManageVo
 import com.grkj.data.model.vo.UserManageVo
@@ -70,4 +76,34 @@ interface IJobTicketRepository {
      * 根据作业id获取点位数据
      */
     fun getTicketPointsByTicketId(ticketId: Long): List<PointManageVo>
+
+    /**
+     * 根据作业id获取作业详细数据
+     */
+    fun getJobTicketDataByTicketId(ticketId: Long): IsJobTicketDataVo
+
+    /**
+     * 根据作业id获取作业钥匙详细数据
+     */
+    fun getJobTicketKeyDataByTicketId(ticketId: Long): List<IsJobTicketKeyDataVo>
+
+    /**
+     * 根据作业id获取作业挂锁详细数据
+     */
+    fun getJobTicketLockDataByTicketId(ticketId: Long): List<IsJobTicketLockDataVo>
+
+    /**
+     * 根据作业id获取作业点位详细数据
+     */
+    fun getJobTicketPointsDataByTicketId(ticketId: Long): List<IsJobTicketPointsDataVo>
+
+    /**
+     * 根据作业id获取作业步骤详细数据
+     */
+    fun getJobTicketStepDataByTicketId(ticketId: Long): List<IsJobTicketStepDataVo>
+
+    /**
+     * 根据作业id获取作业人员详细数据
+     */
+    fun getJobTicketUserDataByTicketId(ticketId: Long): List<IsJobTicketUserDataVo>
 }

+ 2 - 4
data/src/main/java/com/grkj/data/repository/impl/HardwareRepository.kt

@@ -1,9 +1,8 @@
 package com.grkj.data.repository.impl
 
-import androidx.room.Room
 import com.grkj.data.dao.HardwareDao
 import com.grkj.data.database.ISCSDatabase
-import com.grkj.data.model.dos.IsJobCardDo
+import com.grkj.data.model.dos.IsJobCard
 import com.grkj.data.repository.IHardwareRepository
 import com.grkj.data.model.req.LockPointUpdateReq
 import com.grkj.data.model.req.LockTakeUpdateReq
@@ -14,7 +13,6 @@ import com.grkj.data.model.res.LockInfoRes
 import com.grkj.data.model.res.LockPageRes
 import com.grkj.data.model.vo.AddUserDataVo
 import com.grkj.shared.utils.Pinyin4jUtil
-import com.sik.sikcore.SIKCore
 
 /**
  * 硬件仓储
@@ -111,7 +109,7 @@ class HardwareRepository : IHardwareRepository {
     }
 
     override fun addCard(userId: Long, userData: AddUserDataVo) {
-        val isJobCard = IsJobCardDo()
+        val isJobCard = IsJobCard()
         isJobCard.userId = userId
         isJobCard.cardCode = userData.cardCode
         isJobCard.userName = Pinyin4jUtil.toInitials(userData.nickname)

+ 31 - 1
data/src/main/java/com/grkj/data/repository/impl/JobTicketRepository.kt

@@ -12,6 +12,12 @@ import com.grkj.data.model.dos.IsJobTicketPoints
 import com.grkj.data.model.dos.IsJobTicketStep
 import com.grkj.data.model.dos.IsJobTicketUser
 import com.grkj.data.model.res.TicketDetailRes
+import com.grkj.data.model.vo.IsJobTicketDataVo
+import com.grkj.data.model.vo.IsJobTicketKeyDataVo
+import com.grkj.data.model.vo.IsJobTicketLockDataVo
+import com.grkj.data.model.vo.IsJobTicketPointsDataVo
+import com.grkj.data.model.vo.IsJobTicketStepDataVo
+import com.grkj.data.model.vo.IsJobTicketUserDataVo
 import com.grkj.data.model.vo.JobTicketManageVo
 import com.grkj.data.model.vo.PointManageVo
 import com.grkj.data.model.vo.UserManageVo
@@ -199,7 +205,7 @@ class JobTicketRepository : IJobTicketRepository {
     }
 
     override fun startJob(jobTicketId: Long?) {
-        jobTicketDao.startJob(jobTicketId, JobTicketStatusEnums.WAIT_TO_LOCK.status)
+        jobTicketDao.startJob(jobTicketId, JobTicketStatusEnums.SELECT_MEMBER.status)
     }
 
     override fun getTicketUsersByTicketId(ticketId: Long): List<UserManageVo> {
@@ -214,6 +220,30 @@ class JobTicketRepository : IJobTicketRepository {
         return jobTicketDao.getTicketPointsByTicketId(ticketId)
     }
 
+    override fun getJobTicketDataByTicketId(ticketId: Long): IsJobTicketDataVo {
+        return jobTicketDao.getJobTicketDataByTicketId(ticketId)
+    }
+
+    override fun getJobTicketKeyDataByTicketId(ticketId: Long): List<IsJobTicketKeyDataVo> {
+        return jobTicketDao.getJobTicketKeyDataByTicketId(ticketId)
+    }
+
+    override fun getJobTicketLockDataByTicketId(ticketId: Long): List<IsJobTicketLockDataVo> {
+        return jobTicketDao.getJobTicketLockDataByTicketId(ticketId)
+    }
+
+    override fun getJobTicketPointsDataByTicketId(ticketId: Long): List<IsJobTicketPointsDataVo> {
+        return jobTicketDao.getJobTicketPointsDataByTicketId(ticketId)
+    }
+
+    override fun getJobTicketStepDataByTicketId(ticketId: Long): List<IsJobTicketStepDataVo> {
+        return jobTicketDao.getJobTicketStepDataByTicketId(ticketId)
+    }
+
+    override fun getJobTicketUserDataByTicketId(ticketId: Long): List<IsJobTicketUserDataVo> {
+        return jobTicketDao.getJobTicketUserDataByTicketId(ticketId)
+    }
+
     companion object {
         /**
          * 单例