[6.6.0]
[项目结构、扫码枪添加手机号]
This commit is contained in:
@@ -7,7 +7,6 @@ import com.mogo.och.biz.login.bean.DriverStatusQueryRespBean
|
||||
import com.mogo.och.biz.login.bean.TaxiLoginReqBean
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
|
||||
import com.mogo.eagle.core.network.MoGoRetrofitFactory
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
@@ -19,7 +18,7 @@ import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.network.OchCommonServiceCallback
|
||||
import com.mogo.och.common.module.network.OchCommonSubscribeImpl
|
||||
import com.mogo.och.common.module.network.interceptor.transformTry
|
||||
import com.mogo.och.common.module.utils.ProjectUtils
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
|
||||
object OchCommonServiceManager {
|
||||
|
||||
|
||||
@@ -64,6 +64,9 @@ dependencies {
|
||||
implementation rootProject.ext.dependencies.amapnavi3dmap
|
||||
implementation rootProject.ext.dependencies.rxandroid
|
||||
|
||||
// 串口链接
|
||||
implementation rootProject.ext.dependencies.serialport
|
||||
|
||||
implementation rootProject.ext.dependencies.arouter
|
||||
kapt rootProject.ext.dependencies.aroutercompiler
|
||||
|
||||
|
||||
@@ -5,4 +5,8 @@ public interface IOchLanPassengerStatusListener {
|
||||
default void onDriverSnChagneListner(String sn) {
|
||||
}
|
||||
|
||||
default void onDriverConnectChangeListener(boolean isConnect){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -47,6 +47,9 @@ object LoginLanPassengerSocket : IReceivedMsgListener, CallerBase<IOchLanPasseng
|
||||
|
||||
var isConnected:Boolean by Delegates.observable(false) { _, oldV, newV ->
|
||||
if (oldV != newV) {
|
||||
M_LISTENERS.forEach {
|
||||
it.value.onDriverConnectChangeListener(newV)
|
||||
}
|
||||
if(newV){// 已连接
|
||||
val msg = BaseDPMsg(type = DPMsgType.TYPE_CLIENT_REGISTER.type)
|
||||
LanSocketManager.sendMsgToServer(msg)
|
||||
|
||||
@@ -39,6 +39,10 @@ class OchCommonConst {
|
||||
const val SHUTTLE_DRIVER = "/shuttle/shuttledriver"
|
||||
const val SHUTTLE_PASSENGER = "/shuttle/shuttlepassenger"
|
||||
|
||||
const val SHUTTLE_DRIVER_WEAKNET = "/shuttle_weaknet/shuttledriver"
|
||||
const val SHUTTLE_PASSENGER_WEAKNET = "/shuttle_weaknet/shuttlepassenger"
|
||||
|
||||
|
||||
const val SWEEPER_DRIVER = "/sweeper/sweeperdriver"
|
||||
|
||||
const val TAXI_DRIVER = "/taxi/taxidriver"
|
||||
|
||||
@@ -37,6 +37,9 @@ object OchChainLogManager {
|
||||
// 局域网内socket 连接状态流转
|
||||
const val EVENT_KEY_INFO_SOCKET_CONNECT = "analytics_event_och_track_screen_connect"
|
||||
|
||||
// 局域网内socket 连接状态流转
|
||||
const val EVENT_KEY_INFO_SCANNER = "analytics_event_och_scanner"
|
||||
|
||||
|
||||
fun writeChainLogNet(mustUpdate: Boolean, title: String, info: String) {
|
||||
if(mustUpdate){
|
||||
@@ -45,6 +48,11 @@ object OchChainLogManager {
|
||||
writeChainLog(title, info, DebugConfig.isDebug(), EVENT_KEY_INFO_Net)
|
||||
}
|
||||
}
|
||||
|
||||
fun writeChainLogScanner(title: String, changeInfo: String) {
|
||||
writeChainLog(title, changeInfo, true, EVENT_KEY_INFO_SCANNER)
|
||||
}
|
||||
|
||||
fun writeChainLogInit(title: String, info: String) {
|
||||
writeChainLog(title,info,true,EVENT_KEY_INFO_INIT)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,248 @@
|
||||
package com.mogo.och.common.module.manager.scnner
|
||||
|
||||
import android.net.Uri
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.eagle.core.utilcode.util.StringUtils
|
||||
import com.mogo.och.common.module.biz.lansocket.IOchLanPassengerStatusListener
|
||||
import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.WriteOffDevicesMsg
|
||||
import com.mogo.och.common.module.manager.socket.lan.bean.WriteOffMsg
|
||||
import com.mogo.och.common.module.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
|
||||
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
|
||||
import com.mogo.support.serialport.client.SerialPortManager
|
||||
import com.mogo.support.serialport.client.SerialPortManager.SERVICE_STATE
|
||||
import com.mogo.support.serialport.client.listener.OnDeviceVerificationListener
|
||||
import com.mogo.support.serialport.client.listener.OnSerialPortListener
|
||||
import com.mogo.support.serialport.common.verification.UnpackStatus
|
||||
import com.mogo.support.serialport.common.verification.data.VerificationActiveData
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
|
||||
object ScannerManager : IOchLanPassengerStatusListener {
|
||||
|
||||
private val TAG = "ScannerManager"
|
||||
|
||||
private var serialPortManager = SerialPortManager()
|
||||
|
||||
private val stateChanageListeners: ConcurrentHashMap<String, StateChangeListener> =
|
||||
ConcurrentHashMap()
|
||||
|
||||
private var bindStatus: BindStatus by Delegates.observable(BindStatus.NOTHING) { _, oldV, newV ->
|
||||
if (oldV != newV) {
|
||||
try {
|
||||
CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "扫码枪状态发生变化old:${oldV}_new:${newV}")
|
||||
if(newV!= BindStatus.BIND_SUCCEED) {
|
||||
dispatchMsg(newV)
|
||||
}
|
||||
if (stateChanageListeners.size > 0) {
|
||||
stateChanageListeners.forEach {
|
||||
it.value.stateChange(newV, openStatus)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
CallerLogger.e(SceneConstant.M_OCHCOMMON + TAG, "扫码枪bind错误")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var openStatus: OpenStatus by Delegates.observable(OpenStatus.Unopen) { _, oldV, newV ->
|
||||
if (oldV != newV) {
|
||||
try {
|
||||
if (stateChanageListeners.size > 0) {
|
||||
stateChanageListeners.forEach {
|
||||
it.value.stateChange(bindStatus, newV)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
CallerLogger.e(SceneConstant.M_OCHCOMMON + TAG, "扫码枪open错误")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val onDeviceVerificationListener = object :OnDeviceVerificationListener(){
|
||||
override fun onSerialPortState(
|
||||
path: String?,
|
||||
isOpen: Boolean,
|
||||
throwableMessage: String?
|
||||
) {
|
||||
CallerLogger.d(
|
||||
M_BUS_P + TAG,
|
||||
"path ${path}---isOpen${isOpen}--throwableMessage${throwableMessage}"
|
||||
)
|
||||
OchChainLogManager.writeChainLogScanner(TAG +"onSerialPortState","扫码枪是否打开:path${path}_isOpen${isOpen}_throwableMessage${throwableMessage}")
|
||||
openStatus = if (isOpen) {
|
||||
sendWriteOffDevicesMessage2Driver(true,"扫码枪打开成功")
|
||||
OpenStatus.Open
|
||||
} else {
|
||||
sendWriteOffDevicesMessage2Driver(false,"扫码枪打开错误:${throwableMessage}_${path}")
|
||||
OpenStatus.Unopen
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActiveDataReceive(data: VerificationActiveData?) {
|
||||
OchChainLogManager.writeChainLogScanner(TAG +"onActiveDataReceive","扫码结果:data:${data}")
|
||||
data?.let {
|
||||
if(data.unpackStatus==UnpackStatus.SUCCEED){
|
||||
"数据类型${it.dataType.name}"
|
||||
CallerLogger.d(M_BUS_P + TAG, "data $it")
|
||||
if(!StringUtils.isEmpty(it.payload)){
|
||||
parseParams(it.payload)
|
||||
}else{
|
||||
CallerLogger.d(M_BUS_P + TAG, "数据错误")
|
||||
sendWriteOffMessage2Driver("扫码数据为空")
|
||||
}
|
||||
}else{
|
||||
sendWriteOffMessage2Driver("解包失败")
|
||||
CallerLogger.d(M_BUS_P + TAG, "解包失败")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private val onSerialPortListener = object :OnSerialPortListener{
|
||||
override fun onServiceState(serviceState: Int) {
|
||||
OchChainLogManager.writeChainLogScanner(TAG +"bindStatus","绑定服务结果:serviceState:${serviceState}")
|
||||
when (serviceState) {
|
||||
SERVICE_STATE.BIND_SUCCEED -> {
|
||||
CallerLogger.d(M_BUS_P + TAG, "服务绑定成功")
|
||||
bindStatus = BindStatus.BIND_SUCCEED
|
||||
serialPortManager.openVerificationDevice(onDeviceVerificationListener)
|
||||
}
|
||||
SERVICE_STATE.BIND_FAILURE_UNINSTALLED -> {
|
||||
CallerLogger.d(M_BUS_P + TAG, "服务绑定失败:未安装串口服务端APP")
|
||||
bindStatus = BindStatus.BIND_FAILURE_UNINSTALLED
|
||||
}
|
||||
SERVICE_STATE.BIND_FAILURE_NO_PERMISSION_NOT_FOUND -> {
|
||||
CallerLogger.d(M_BUS_P + TAG, "服务绑定失败:没有绑定权限或找不到服务(如果是此状态,基本上安装后就可以找到,主要就是权限问题)")
|
||||
bindStatus = BindStatus.BIND_FAILURE_NO_PERMISSION_NOT_FOUND
|
||||
}
|
||||
SERVICE_STATE.EXCEPTION -> {
|
||||
CallerLogger.d(M_BUS_P + TAG, "服务被异常销毁")
|
||||
bindStatus = BindStatus.EXCEPTION
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
// 查询串口
|
||||
override fun onFindSerialPort(paths: Array<out String>?) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "$paths")
|
||||
OchChainLogManager.writeChainLogScanner(TAG +"onFindSerialPort","查询串口:${paths}")
|
||||
if(paths==null) {
|
||||
bindStatus = BindStatus.BIND_FAILURE_NO_PERMISSION_NOT_FOUND
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
init {
|
||||
//监听司机端消息
|
||||
LoginLanPassengerSocket.addListener(TAG,this)
|
||||
serialPortManager.bindService(AbsMogoApplication.getApp(), onSerialPortListener)//绑定服务
|
||||
}
|
||||
|
||||
fun addStateChangeListener(tag: String, listener: StateChangeListener) {
|
||||
if (stateChanageListeners.containsKey(tag)) {
|
||||
return
|
||||
}
|
||||
stateChanageListeners[tag] = listener
|
||||
}
|
||||
|
||||
override fun onDriverConnectChangeListener(isConnect: Boolean) {
|
||||
super.onDriverConnectChangeListener(isConnect)
|
||||
if(isConnect) {
|
||||
sendScannerState()
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseParams(payload: String?) {
|
||||
val parse = Uri.parse("${OchCommonConst.getShuttleUrl()}?${payload}")
|
||||
val queryParameterNames = parse.queryParameterNames
|
||||
val mutableMapOf = mutableMapOf<String, Any>()
|
||||
queryParameterNames.forEach {
|
||||
val queryParameter = parse.getQueryParameter(it)
|
||||
if(it!=null&&queryParameter!=null){
|
||||
mutableMapOf[it] = queryParameter
|
||||
}
|
||||
}
|
||||
if(mutableMapOf.isNotEmpty()){
|
||||
if (stateChanageListeners.size > 0) {
|
||||
stateChanageListeners.forEach {
|
||||
it.value.parseData(mutableMapOf,payload)
|
||||
}
|
||||
}
|
||||
}else{
|
||||
sendWriteOffMessage2Driver("扫码参数数据为空:${payload}")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param isConnectScanner 是否打开设备
|
||||
*/
|
||||
private fun sendWriteOffDevicesMessage2Driver(isConnectScanner:Boolean, message:String){
|
||||
val msg = WriteOffDevicesMsg(isConnectScanner, message)
|
||||
CallerLogger.d(M_BUS_P + TAG, "sendTaskDetailsToClients = " + GsonUtils.toJson(msg))
|
||||
LanSocketManager.sendMsgToServer(msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开设备后数据异常
|
||||
*/
|
||||
private fun sendWriteOffMessage2Driver(message:String){
|
||||
val msg = WriteOffMsg(false, "", 0, "", message,"")
|
||||
CallerLogger.d(M_BUS_P + TAG, "sendTaskDetailsToClients = " + GsonUtils.toJson(msg))
|
||||
LanSocketManager.sendMsgToServer(msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* 链接司机屏后向司机屏同步扫码枪状态
|
||||
*/
|
||||
private fun sendScannerState() {
|
||||
if(bindStatus == BindStatus.BIND_SUCCEED && openStatus == OpenStatus.Open){
|
||||
sendWriteOffDevicesMessage2Driver(true,"扫码枪打开状态")
|
||||
}else{
|
||||
if(bindStatus == BindStatus.BIND_SUCCEED && openStatus == OpenStatus.Unopen){
|
||||
sendWriteOffDevicesMessage2Driver(false,"绑定成功、打开失败")
|
||||
}else{
|
||||
dispatchMsg(bindStatus)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun dispatchMsg(newV: BindStatus) {
|
||||
when (newV) {
|
||||
BindStatus.BIND_FAILURE_UNINSTALLED -> {
|
||||
// 服务绑定失败:未安装串口服务端APP
|
||||
sendWriteOffDevicesMessage2Driver(false,"服务绑定失败:未安装串口服务端APP")
|
||||
}
|
||||
BindStatus.BIND_FAILURE_NO_PERMISSION_NOT_FOUND -> {
|
||||
// 服务绑定失败:没有绑定权限或找不到服务(如果是此状态,基本上安装后就可以找到,主要就是权限问题)
|
||||
sendWriteOffDevicesMessage2Driver(false,"服务绑定失败:没有绑定权限或找不到服务")
|
||||
}
|
||||
BindStatus.EXCEPTION -> {
|
||||
// 扫码枪open错误
|
||||
sendWriteOffDevicesMessage2Driver(false,"扫码枪打开错误")
|
||||
}
|
||||
BindStatus.NOTHING -> {}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
enum class BindStatus {
|
||||
BIND_SUCCEED, BIND_FAILURE_UNINSTALLED ,BIND_FAILURE_NO_PERMISSION_NOT_FOUND,EXCEPTION,NOTHING
|
||||
}
|
||||
|
||||
enum class OpenStatus {
|
||||
Open, Unopen
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.mogo.och.common.module.manager.scnner
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.och.common.module.R
|
||||
|
||||
class ScannerStateView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : AppCompatImageView(context, attrs, defStyleAttr), StateChangeListener {
|
||||
private val TAG = "ScannerStateView"
|
||||
|
||||
init {
|
||||
setImageResource(R.drawable.driver_connect_statis)
|
||||
ScannerManager.addStateChangeListener(TAG, this)
|
||||
}
|
||||
|
||||
override fun stateChange(newBindValue: BindStatus, newOpentValue: OpenStatus) {
|
||||
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "newBindValue = $newBindValue newOpentValue = $newOpentValue")
|
||||
when (newOpentValue) {
|
||||
OpenStatus.Open -> {
|
||||
//成功打开
|
||||
visibility = View.GONE
|
||||
}
|
||||
OpenStatus.Unopen -> {
|
||||
// 打开失败
|
||||
setImageResource(R.drawable.driver_connect_statis)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.mogo.och.common.module.manager.scnner
|
||||
|
||||
interface StateChangeListener {
|
||||
fun stateChange(newBindValue: BindStatus, newOpentValue: OpenStatus){}
|
||||
fun parseData(params: MutableMap<String, Any>, payload: String?){}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.mogo.och.common.module.utils
|
||||
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
import com.mogo.commons.env.Project
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
import com.mogo.commons.storage.SharedPrefsMgr
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
package com.mogo.och.common.module.utils
|
||||
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
|
||||
object ProjectUtils {
|
||||
fun isSaas(): Boolean {
|
||||
return DebugConfig.getProjectFlavor() == Project.SAAS.value
|
||||
}
|
||||
|
||||
fun isDali(): Boolean {
|
||||
return DebugConfig.getProjectFlavor() == Project.DALI.value
|
||||
}
|
||||
|
||||
fun isMogo(): Boolean {
|
||||
return DebugConfig.getProjectFlavor() == Project.MOGO.value
|
||||
}
|
||||
|
||||
fun isYantai(): Boolean {
|
||||
return DebugConfig.getProjectFlavor() == Project.YANTAI.value
|
||||
}
|
||||
|
||||
fun getProjectType(): Project {
|
||||
when (DebugConfig.getProjectFlavor()) {
|
||||
Project.DALI.value -> {
|
||||
return Project.DALI
|
||||
}
|
||||
|
||||
Project.SAAS.value -> {
|
||||
return Project.SAAS
|
||||
}
|
||||
|
||||
Project.MOGO.value -> {
|
||||
return Project.MOGO
|
||||
}
|
||||
|
||||
Project.YANTAI.value -> {
|
||||
return Project.YANTAI
|
||||
}
|
||||
}
|
||||
return Project.MOGO
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum class Project(val value: String) {
|
||||
SAAS("saas"),
|
||||
DALI("dali"),
|
||||
MOGO("mogo"),
|
||||
YANTAI("yantai")
|
||||
}
|
||||
Reference in New Issue
Block a user