|
|
@@ -8,6 +8,7 @@ import com.grkj.data.dao.JobTicketDao
|
|
|
import com.grkj.data.dao.WorkflowStepDao
|
|
|
import com.grkj.data.enums.IsolationPointPowerTypeEnum
|
|
|
import com.grkj.data.enums.JobTicketStatusEnum
|
|
|
+import com.grkj.data.enums.NextJobPrompt
|
|
|
import com.grkj.data.enums.RoleEnum
|
|
|
import com.grkj.data.model.dos.IsJobTicket
|
|
|
import com.grkj.data.model.dos.IsJobTicketKey
|
|
|
@@ -568,4 +569,182 @@ class JobTicketRepository @Inject constructor(
|
|
|
override fun getUsedHardwareCount(workstationId: Long?, workflowModeId: Long?): Int {
|
|
|
return jobTicketDao.getUsedHardwareCount(workstationId, workflowModeId)
|
|
|
}
|
|
|
+
|
|
|
+ override fun isNextLockOrUnLock(ticketId: Long): NextJobPrompt {
|
|
|
+ // 1. 取工单与模式
|
|
|
+ val ticketData =
|
|
|
+ jobTicketDao.getTicketDataByTicketId(ticketId) ?: return NextJobPrompt.NO_NEW_JOB
|
|
|
+ val modeId = ticketData.modeId ?: return NextJobPrompt.NO_NEW_JOB
|
|
|
+
|
|
|
+ // 2. 取所有点位;无点位无法补单
|
|
|
+ val points = jobTicketDao.getTicketPointsByTicketId(ticketId)
|
|
|
+ if (points.isEmpty()) return NextJobPrompt.NO_NEW_JOB
|
|
|
+
|
|
|
+ // 3. 从 workflow 里找所有“上锁”和“解锁”步骤的索引
|
|
|
+ val stepDefs = workflowStepDao.getStepsByMode(modeId)
|
|
|
+ val lockIndices = stepDefs.filter { it.enableLock }.map { it.stepIndex }
|
|
|
+ val unlockIndices = stepDefs.filter { it.enableUnlock }.map { it.stepIndex }
|
|
|
+
|
|
|
+ // 4. 根据最大的索引值决定“最后一次”语义是上锁还是解锁
|
|
|
+ val lastLockIdx = lockIndices.maxOrNull()
|
|
|
+ val lastUnlockIdx = unlockIndices.maxOrNull()
|
|
|
+ val finalActionIsLock = when {
|
|
|
+ lastLockIdx == null && lastUnlockIdx == null -> return NextJobPrompt.NO_NEW_JOB
|
|
|
+ lastUnlockIdx == null -> true // 只有上锁
|
|
|
+ lastLockIdx == null -> false // 只有解锁
|
|
|
+ lastLockIdx > lastUnlockIdx -> true // 上锁在后
|
|
|
+ else -> false // 解锁在后
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 判断点位现状:假设 pointStatus == "1" 表示已上锁
|
|
|
+ val allLocked = points.all { it.pointStatus == "1" }
|
|
|
+ val allUnlocked = points.all { it.pointStatus != "1" }
|
|
|
+
|
|
|
+ // 6. 最终提示逻辑
|
|
|
+ return if (finalActionIsLock) {
|
|
|
+ // 如果“最后要做”的是上锁,且没都上锁,就补上锁作业;全上锁了就不补
|
|
|
+ if (!allLocked) NextJobPrompt.CREATE_LOCK_JOB else NextJobPrompt.NO_NEW_JOB
|
|
|
+ } else {
|
|
|
+ // 如果“最后要做”的是解锁,且没都解锁,就补解锁作业;全解锁了就不补
|
|
|
+ if (!allUnlocked) NextJobPrompt.CREATE_UNLOCK_JOB else NextJobPrompt.NO_NEW_JOB
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun createLockJob(
|
|
|
+ selectedSopPoints: List<PointManageVo>,
|
|
|
+ selectedLockerData: List<UserManageVo>,
|
|
|
+ selectedColockerData: List<UserManageVo>,
|
|
|
+ sopId: Long?,
|
|
|
+ workstationId: Long,
|
|
|
+ jobName: String
|
|
|
+ ): Long {
|
|
|
+ val modeId = workflowStepDao.getWorkflowModes().find { it.modeTitle == "解锁" }?.modeId!!
|
|
|
+ val isJobTicket = IsJobTicket()
|
|
|
+ isJobTicket.ticketName = jobName
|
|
|
+ isJobTicket.workstationId = workstationId
|
|
|
+ isJobTicket.modeId = modeId
|
|
|
+ isJobTicket.sopId = sopId
|
|
|
+ val ticketId = jobTicketDao.saveIsJobTicket(isJobTicket)
|
|
|
+ val isUnlockFirst = workflowStepDao.isUnlockBeforeLock(modeId)
|
|
|
+ val ticketPoints = selectedSopPoints.map {
|
|
|
+ val isJobTicketPoint = IsJobTicketPoints()
|
|
|
+ isJobTicketPoint.ticketId = ticketId
|
|
|
+ isJobTicketPoint.pointId = it.pointId
|
|
|
+ isJobTicketPoint.workstationId = workstationId
|
|
|
+ isJobTicketPoint.pointStatus = if (isUnlockFirst) "1" else "0"
|
|
|
+ isJobTicketPoint.lockId = it.lockId
|
|
|
+ isJobTicketPoint
|
|
|
+ }
|
|
|
+ val ticketPointIds = jobTicketDao.saveIsJobTicketPoints(ticketPoints)
|
|
|
+ val ticketLockerUsers = selectedLockerData.map {
|
|
|
+ val isJobticketUser = IsJobTicketUser()
|
|
|
+ isJobticketUser.userId = it.userId
|
|
|
+ isJobticketUser.ticketId = ticketId
|
|
|
+ isJobticketUser.userName = it.userName
|
|
|
+ isJobticketUser.userRole = RoleEnum.JTLOCKER.roleKey
|
|
|
+ isJobticketUser
|
|
|
+ }
|
|
|
+ val ticketColockerUsers = selectedColockerData.map {
|
|
|
+ val isJobticketUser = IsJobTicketUser()
|
|
|
+ isJobticketUser.userId = it.userId
|
|
|
+ isJobticketUser.ticketId = ticketId
|
|
|
+ isJobticketUser.userName = it.userName
|
|
|
+ isJobticketUser.userRole = RoleEnum.JTCOLOCKER.roleKey
|
|
|
+ isJobticketUser
|
|
|
+ }
|
|
|
+ jobTicketDao.saveIsJobTicketUser(ticketLockerUsers)
|
|
|
+ jobTicketDao.saveIsJobTicketUser(ticketColockerUsers)
|
|
|
+ val ticketLocks = mutableListOf<IsJobTicketLock>().apply {
|
|
|
+ ticketPointIds.forEach { point ->
|
|
|
+ val isJobTicketLock = IsJobTicketLock()
|
|
|
+ isJobTicketLock.ticketId = ticketId
|
|
|
+ isJobTicketLock.isolationPointId = point
|
|
|
+ add(isJobTicketLock)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ jobTicketDao.saveIsJobTicketLock(ticketLocks)
|
|
|
+ val workflowStepList = workflowStepDao.getStepsByMode(modeId)
|
|
|
+ val ticketStep = mutableListOf<IsJobTicketStep>().apply {
|
|
|
+ workflowStepList.forEach { workflowStep ->
|
|
|
+ val isJobTicketStep = IsJobTicketStep()
|
|
|
+ isJobTicketStep.ticketId = ticketId
|
|
|
+ isJobTicketStep.stepIndex = workflowStep.stepIndex
|
|
|
+ isJobTicketStep.stepContent = workflowStep.stepTitle
|
|
|
+ isJobTicketStep.androidStepContent = workflowStep.stepTitleShort
|
|
|
+ isJobTicketStep.workflowStepId = workflowStep.stepId
|
|
|
+ add(isJobTicketStep)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ jobTicketDao.saveIsJobTicketStep(ticketStep)
|
|
|
+ return ticketId
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun createUnLockJob(
|
|
|
+ selectedSopPoints: List<PointManageVo>,
|
|
|
+ selectedLockerData: List<UserManageVo>,
|
|
|
+ selectedColockerData: List<UserManageVo>,
|
|
|
+ sopId: Long?,
|
|
|
+ workstationId: Long,
|
|
|
+ jobName: String
|
|
|
+ ): Long {
|
|
|
+ val modeId = workflowStepDao.getWorkflowModes().find { it.modeTitle == "解锁" }?.modeId!!
|
|
|
+ val isJobTicket = IsJobTicket()
|
|
|
+ isJobTicket.ticketName = jobName
|
|
|
+ isJobTicket.workstationId = workstationId
|
|
|
+ isJobTicket.modeId = modeId
|
|
|
+ isJobTicket.sopId = sopId
|
|
|
+ val ticketId = jobTicketDao.saveIsJobTicket(isJobTicket)
|
|
|
+ val isUnlockFirst = workflowStepDao.isUnlockBeforeLock(modeId)
|
|
|
+ val ticketPoints = selectedSopPoints.map {
|
|
|
+ val isJobTicketPoint = IsJobTicketPoints()
|
|
|
+ isJobTicketPoint.ticketId = ticketId
|
|
|
+ isJobTicketPoint.pointId = it.pointId
|
|
|
+ isJobTicketPoint.workstationId = workstationId
|
|
|
+ isJobTicketPoint.pointStatus = if (isUnlockFirst) "1" else "0"
|
|
|
+ isJobTicketPoint.lockId = it.lockId
|
|
|
+ isJobTicketPoint
|
|
|
+ }
|
|
|
+ val ticketPointIds = jobTicketDao.saveIsJobTicketPoints(ticketPoints)
|
|
|
+ val ticketLockerUsers = selectedLockerData.map {
|
|
|
+ val isJobticketUser = IsJobTicketUser()
|
|
|
+ isJobticketUser.userId = it.userId
|
|
|
+ isJobticketUser.ticketId = ticketId
|
|
|
+ isJobticketUser.userName = it.userName
|
|
|
+ isJobticketUser.userRole = RoleEnum.JTLOCKER.roleKey
|
|
|
+ isJobticketUser
|
|
|
+ }
|
|
|
+ val ticketColockerUsers = selectedColockerData.map {
|
|
|
+ val isJobticketUser = IsJobTicketUser()
|
|
|
+ isJobticketUser.userId = it.userId
|
|
|
+ isJobticketUser.ticketId = ticketId
|
|
|
+ isJobticketUser.userName = it.userName
|
|
|
+ isJobticketUser.userRole = RoleEnum.JTCOLOCKER.roleKey
|
|
|
+ isJobticketUser
|
|
|
+ }
|
|
|
+ jobTicketDao.saveIsJobTicketUser(ticketLockerUsers)
|
|
|
+ jobTicketDao.saveIsJobTicketUser(ticketColockerUsers)
|
|
|
+ val ticketLocks = mutableListOf<IsJobTicketLock>().apply {
|
|
|
+ ticketPointIds.forEach { point ->
|
|
|
+ val isJobTicketLock = IsJobTicketLock()
|
|
|
+ isJobTicketLock.ticketId = ticketId
|
|
|
+ isJobTicketLock.isolationPointId = point
|
|
|
+ add(isJobTicketLock)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ jobTicketDao.saveIsJobTicketLock(ticketLocks)
|
|
|
+ val workflowStepList = workflowStepDao.getStepsByMode(modeId)
|
|
|
+ val ticketStep = mutableListOf<IsJobTicketStep>().apply {
|
|
|
+ workflowStepList.forEach { workflowStep ->
|
|
|
+ val isJobTicketStep = IsJobTicketStep()
|
|
|
+ isJobTicketStep.ticketId = ticketId
|
|
|
+ isJobTicketStep.stepIndex = workflowStep.stepIndex
|
|
|
+ isJobTicketStep.stepContent = workflowStep.stepTitle
|
|
|
+ isJobTicketStep.androidStepContent = workflowStep.stepTitleShort
|
|
|
+ isJobTicketStep.workflowStepId = workflowStep.stepId
|
|
|
+ add(isJobTicketStep)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ jobTicketDao.saveIsJobTicketStep(ticketStep)
|
|
|
+ return ticketId
|
|
|
+ }
|
|
|
}
|