Qr scan fix; VisitType

This commit is contained in:
Universall 2025-02-20 15:35:51 +03:00
parent 5d31ab0c42
commit 3d9d7fa508
10 changed files with 163 additions and 42 deletions

View File

@ -0,0 +1,82 @@
kotlin version: 2.1.10
error message: Daemon compilation failed: null
java.lang.Exception
at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69)
at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:240)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:76)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
at org.gradle.internal.Factories$1.create(Factories.java:31)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.nio.file.DirectoryNotEmptyException: C:\Users\User\AppData\Local\Temp\kotlin-backups9385457661688728923
at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)
at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
at java.base/java.nio.file.Files.delete(Unknown Source)
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash$lambda$11$lambda$10$lambda$9(CompilationTransaction.kt:244)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.base/java.util.ArrayList.forEach(Unknown Source)
at java.base/java.util.stream.SortedOps$RefSortingSink.end(Unknown Source)
at java.base/java.util.stream.Sink$ChainedReference.end(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash(CompilationTransaction.kt:244)
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.close(CompilationTransaction.kt:254)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:747)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:120)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:683)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:91)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1811)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Unknown Source)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
... 3 more

View File

@ -25,7 +25,7 @@ class GateRepository {
append(HttpHeaders.Authorization, "Bearer $token")
}
contentType(ContentType.Application.Json)
setBody("""{ "code": $code }""")
setBody("""{ "code": $code, "visitType": "APP" }""")
}
if (result.status != HttpStatusCode.OK) {
error("Status ${result.status}: ${result.body<String>()}")

View File

@ -5,14 +5,13 @@ import android.view.ViewGroup
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.displaynone.acss.R
import com.displaynone.acss.components.acs.models.visit.repository.dto.VisitDto
import com.displaynone.acss.components.acs.models.visit.repository.dto.VisitType
import com.displaynone.acss.databinding.ItemScannerViewBinding
import java.text.SimpleDateFormat
import java.util.Locale
class VisitAdapter: PagingDataAdapter<VisitDto, VisitAdapter.ViewHolder>(VisitDiff) {
class VisitAdapter : PagingDataAdapter<VisitDto, VisitAdapter.ViewHolder>(VisitDiff) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
@ -25,26 +24,27 @@ class VisitAdapter: PagingDataAdapter<VisitDto, VisitAdapter.ViewHolder>(VisitDi
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position) ?:
VisitDto(
id = -1,
userId = -1,
gateId = -1,
createdAt = "Loading...",
)
holder.bind(
getItem(position) ?: VisitDto(
id = -1,
userId = -1,
gateId = -1,
createdAt = "Loading...",
visitType = VisitType.APP
)
)
}
class ViewHolder(
private val binding: ItemScannerViewBinding
): RecyclerView.ViewHolder(binding.root) {
fun bind(item: VisitDto){
) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: VisitDto) {
binding.scanTime.text = "${formatDate(item.createdAt)}"
binding.scannerId.text = "Id - " + item.gateId.toString()
binding.scannerId.text = "Id турникета - " + item.gateId.toString()
binding.passType.text = "Тип прохода - " + item.visitType.toString()
}
private fun formatDate(inputDate: String): String {
private fun formatDate(inputDate: String): String {
val inputFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault())
val outputFormat = SimpleDateFormat("d MMMM yyyy 'в' HH:mm", Locale.getDefault())
@ -53,9 +53,10 @@ class VisitAdapter: PagingDataAdapter<VisitDto, VisitAdapter.ViewHolder>(VisitDi
return outputFormat.format(date)
}
}
return TODO("")
}}
}
}
object VisitDiff : DiffUtil.ItemCallback<VisitDto>() {
override fun areItemsTheSame(oldItem: VisitDto, newItem: VisitDto): Boolean {

View File

@ -13,5 +13,6 @@ data class VisitDto(
val gateId: Long,
@SerialName("createdAt")
val createdAt: String,
) {
}
@SerialName("visitType")
val visitType: VisitType
)

View File

@ -0,0 +1,6 @@
package com.displaynone.acss.components.acs.models.visit.repository.dto;
public enum VisitType {
APP,
CARD
}

View File

@ -1,5 +1,5 @@
package com.displaynone.acss.config
object Constants {
const val serverUrl = "http://192.168.56.1:8086"
const val serverUrl = "http://192.168.136.38:8086"
}

View File

@ -6,6 +6,7 @@ import android.net.NetworkCapabilities
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.NavController
@ -13,6 +14,7 @@ import androidx.navigation.fragment.findNavController
import com.displaynone.acss.R
import com.displaynone.acss.components.auth.models.user.UserServiceST
import com.displaynone.acss.databinding.FragmentInitBinding
import com.displaynone.acss.ui.scan.QrScanDestination
import com.displaynone.acss.util.collectWithLifecycle
import com.displaynone.acss.util.navigateTo
@ -22,7 +24,6 @@ class InitFragment : Fragment(R.layout.fragment_init) {
private val viewModel: InitFragmentViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentInitBinding.bind(view)
@ -34,6 +35,29 @@ class InitFragment : Fragment(R.layout.fragment_init) {
}
pingServer()
waitForQRScanResult()
}
private fun waitForQRScanResult() {
Log.d("1111", "122ee")
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
}
})
findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<Bundle>(
QrScanDestination.REQUEST_KEY
)?.observe(viewLifecycleOwner) { bundle ->
val qrCode = bundle.getString("key_qr")
if (!qrCode.isNullOrEmpty()) view?.let {
val newBundle = Bundle().apply { putString("qrCode", qrCode) }
navigateTo(it, R.id.action_nav_init_to_qr_result, newBundle)
}
}
}
private fun pingServer() {

View File

@ -54,7 +54,7 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) {
if (getIsMe()) {
refreshData()
viewModel.visitListState.collectWithLifecycle(this) { data -> adapter.submitData(data) }
waitForQRScanResult()
// waitForQRScanResult()
} else {
showData(getUserDto()!!)
Log.d("ProfileFragment", "set login")
@ -139,25 +139,28 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) {
return arguments?.getBoolean("isMe", true) ?: true
}
private fun waitForQRScanResult() {
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
}
})
findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<Bundle>(
QrScanDestination.REQUEST_KEY
)?.observe(viewLifecycleOwner) { bundle ->
val qrCode = bundle.getString("key_qr")
if (!qrCode.isNullOrEmpty()) view?.let {
val newBundle = Bundle().apply { putString("qrCode", qrCode) }
navigateTo(it, R.id.action_profileFragment_to_qrResultFragment, newBundle)
}
}
}
// private fun waitForQRScanResult() {
// Log.d("1111", "122ee")
// requireActivity().onBackPressedDispatcher.addCallback(
// viewLifecycleOwner,
// object : OnBackPressedCallback(true) {
// override fun handleOnBackPressed() {
//
// }
// })
//
// findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<Bundle>(
// QrScanDestination.REQUEST_KEY
// )?.observe(viewLifecycleOwner) { bundle ->
// val qrCode = bundle.getString("key_qr")
// Log.d("1111", qrCode.toString())
//
// if (!qrCode.isNullOrEmpty()) view?.let {
// val newBundle = Bundle().apply { putString("qrCode", qrCode) }
// navigateTo(it, R.id.action_profileFragment_to_qrResultFragment, newBundle)
// }
// }
// }
private fun logout() {
viewModel.logout()

View File

@ -1,6 +1,7 @@
package com.displaynone.acss.ui.scan
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
import androidx.camera.core.ImageAnalysis

View File

@ -13,6 +13,9 @@
<action
android:id="@+id/action_nav_init_to_nav_auth"
app:destination="@id/nav_auth" />
<action
android:id="@+id/action_nav_init_to_qr_result"
app:destination="@id/qrResultFragment" />
</fragment>
<fragment
android:id="@+id/nav_profile"