[6.6.0]数据闭环修改

This commit is contained in:
xuxinchao
2024-08-29 14:50:54 +08:00
parent ef5fc4aca2
commit 26446de932
15 changed files with 367 additions and 76 deletions

View File

@@ -27,8 +27,9 @@ object RecordManager {
*/
fun insertRecord(context: Context,takeOverRecordInfo: TakeOverRecordInfo){
takeOverRecordInfo.let {
val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id,
it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus)
val recordInfo = RecordInfo(it.faultStartTime,it.address,
it.level1Id,it.level1Name, it.level2Id,it.level2Name,
it.level3Id,it.level3Name,it.lineName,it.reportNote,it.reportStatus)
if (Thread.currentThread() == Looper.getMainLooper().thread){
scope.launch{
withContext(Dispatchers.IO){
@@ -60,7 +61,8 @@ object RecordManager {
fun updateRecord(context: Context,takeOverRecordInfo: TakeOverRecordInfo){
takeOverRecordInfo.let{
val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id,
it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus)
it.level1Name, it.level2Id,it.level2Name,it.level3Id,it.level3Name,
it.lineName,it.reportNote,it.reportStatus)
if (Thread.currentThread() == Looper.getMainLooper().thread){
scope.launch{
withContext(Dispatchers.IO){
@@ -92,7 +94,8 @@ object RecordManager {
fun deleteRecord(context: Context, takeOverRecordInfo: TakeOverRecordInfo) {
takeOverRecordInfo.let{
val recordInfo = RecordInfo(it.faultStartTime,it.address,it.level1Id,
it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus)
it.level1Name, it.level2Id,it.level2Name,it.level3Id,it.level3Name,
it.lineName,it.reportNote,it.reportStatus)
if (Thread.currentThread() == Looper.getMainLooper().thread){
scope.launch {
withContext(Dispatchers.IO) {

View File

@@ -43,7 +43,8 @@ class TakeOverRecordProvider: ITakeOverProvider {
list.forEach {
recordInfoList.add(
TakeOverRecordInfo(it.faultStartTime,it.address,it.level1Id,
it.level2Id,it.level3Id,it.lineName,it.reportNote,it.reportStatus,false)
it.level2Id,it.level3Id,it.level1Name,it.level2Name,it.level3Name,
it.lineName,it.reportNote,it.reportStatus,false)
)
}
return recordInfoList

View File

@@ -18,12 +18,21 @@ data class RecordInfo(
//一级分类ID
@ColumnInfo
var level1Id: Int,
//一级分类名称
@ColumnInfo
var level1Name: String,
//二级分类ID
@ColumnInfo
var level2Id: Int,
//二级分类名称
@ColumnInfo
var level2Name: String,
//三级分类ID
@ColumnInfo
var level3Id: Int,
//三级分类名称
@ColumnInfo
var level3Name: String,
//行驶路线
@ColumnInfo
val lineName: String,

View File

@@ -109,7 +109,9 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
private var level1Id: Int = 0 //一级分类ID
private var level2Id: Int = 0 //二级分类ID
private var level3Id: Int = 0 //三级分类ID
private var lineName: String = "" //行驶路线
private var level1Name: String = ""
private var level2Name: String = ""
private var level3Name: String = ""
private var reportNote: String = "" //上报描述
@@ -655,7 +657,9 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
address = it
}
val takeOverRecordInfo = TakeOverRecordInfo(System.currentTimeMillis(),
address,level1Id,level2Id,level3Id,lineName,reportNote,
address,level1Id,level2Id,level3Id,
level1Name, level2Name, level3Name,
BadCaseConfig.lineName,reportNote,
reportStatus = false,
selectStatus = false
)
@@ -675,7 +679,7 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
}
override fun onOrderLineUpdate(lineName: String) {
this.lineName = lineName
BadCaseConfig.lineName = lineName
}
/**

View File

@@ -66,6 +66,8 @@ object BadCaseConfig {
@JvmField
var tenantId: Long = 0
var lineName: String = "" //行驶路线
private const val resourceInitiative = "RESOURCE_INITIATIVE" //录包来源为主动录包
private const val resourceAiData = "RESOURCE_AI_DATA" //录包来源为AI数据采集
private const val recordFail = "RECORD_FAIL" //录包失败

View File

@@ -99,6 +99,8 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
private lateinit var tvFaultTime: TextView
private lateinit var tbFaultType: ToggleButton
private lateinit var tbFaultReason: ToggleButton
private lateinit var viewFaultReason: View
private lateinit var ivFaultReason: ImageView
private lateinit var ivTimeReduce: ImageView
private lateinit var tvOccurrenceTime: TextView
private lateinit var ivTimeAdd: ImageView
@@ -117,11 +119,17 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
private var level1Id: Int = 0 //一级分类ID
private var level2Id: Int = 0 //二级分类ID
private var level3Id: Int = 0 //三级分类ID
private var lineName: String = "" //行驶路线
private var level1Name: String = ""
private var level2Name: String = ""
private var level3Name: String = ""
private var reportNote: String = "" //上报描述
private val reportType: Int = 2 //上报方式0小程序 1司机屏 2云端上报
private val reportType: Int = 1 //上报方式0小程序 1司机屏 2云端上报
private var source: Int = 0 //操作源0:类型1:原因
private var source: Int = 0 //操作源0:默认,一级分类 1:类型二级分类2:原因,三级分类
private var hasLevel3: Boolean = false //是否有三级分类
private var typeList: List<CategoryInfo> ?= null //故障类型列表
private var reasonList: List<CategoryInfo> ?= null //故障原因列表
init {
initFloatWindow()
@@ -154,6 +162,8 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
tvFaultTime = mFloatLayout.findViewById(R.id.tvFaultTime)
tbFaultType = mFloatLayout.findViewById(R.id.tbFaultType)
tbFaultReason = mFloatLayout.findViewById(R.id.tbFaultReason)
viewFaultReason = mFloatLayout.findViewById(R.id.viewFaultReason)
ivFaultReason = mFloatLayout.findViewById(R.id.ivFaultReason)
ivTimeReduce = mFloatLayout.findViewById(R.id.ivTimeReduce)
tvOccurrenceTime = mFloatLayout.findViewById(R.id.tvOccurrenceTime)
ivTimeAdd = mFloatLayout.findViewById(R.id.ivTimeAdd)
@@ -170,16 +180,34 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
orderReasonAdapter = OrderReasonAdapter()
orderReasonAdapter.setListener(object: OrderReasonAdapter.ReasonSelectListener{
override fun onSelectReason(reason: CategoryInfo, mSource: Int) {
if(mSource == 0){
if(mSource == 1){
//类型
tbFaultType.textOn = reason.name
tbFaultType.textOff = reason.name
//选择了故障类型
tbFaultReason.visibility = View.VISIBLE
viewFaultReason.visibility = View.GONE
ivFaultReason.visibility = View.GONE
tbFaultType.performClick()
if(level2Id != 0 && level2Id == reason.id){
//故障类型选择没有变化
reasonList?.let { orderReasonAdapter.setData(it,2) }
}else{
level2Id = reason.id
level2Name = reason.name
tbFaultReason.textOn = ""
tbFaultReason.textOff = ""
source = 2
//获取故障三级分类即故障原因
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,level2Id,1,0)
}
}else{
//原因
tbFaultReason.textOn = reason.name
tbFaultReason.textOff = reason.name
tbFaultReason.performClick()
level3Id = reason.id
level3Name = reason.name
}
}
})
@@ -194,6 +222,8 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
iconDown?.setBounds(0, 0, iconDown.minimumWidth, iconDown.minimumHeight)
val iconUp = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_retract)
iconUp?.setBounds(0, 0, iconUp.minimumWidth, iconUp.minimumHeight)
//获取一级分类
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,1,0,1,0)
//弹窗展示时间
tvFaultTime.text = mActivity.resources.getString(R.string.take_over_time) +
millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())
@@ -205,22 +235,26 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
rvFaultList.visibility = View.VISIBLE
(rvFaultList.layoutParams as ConstraintLayout.LayoutParams).topToBottom = R.id.tbFaultType
tbFaultReason.visibility = View.INVISIBLE
// val list = ArrayList<String>()
// list.add("一级分类1")
// orderReasonAdapter.setData(list,0)
source = 0
//获取故障二级分类即故障类型
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,1,1,0)
source = 1
if(typeList.isNullOrEmpty()){
//获取故障二级分类即故障类型
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,level1Id,1,0)
}else{
orderReasonAdapter.setData(typeList!!,source)
}
} else {
buttonView.setCompoundDrawables(null, null, iconDown, null)
//隐藏列表
rvFaultList.visibility = View.GONE
tbFaultReason.visibility = View.VISIBLE
}
}
viewFaultReason.setOnClickListener {
ToastUtils.showShort("请先选择故障类型")
}
ivFaultReason.setOnClickListener {
ToastUtils.showShort("请先选择故障类型")
}
//故障原因选择
tbFaultReason.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
@@ -228,16 +262,6 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
//展示列表
rvFaultList.visibility = View.VISIBLE
(rvFaultList.layoutParams as ConstraintLayout.LayoutParams).topToBottom = R.id.tbFaultReason
// val list = ArrayList<String>()
// list.add("二级分类1")
// orderReasonAdapter.setData(list,1)
source = 1
//获取故障三级分类即故障原因
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,1,1,0)
} else {
buttonView.setCompoundDrawables(null, null, iconDown, null)
//隐藏列表
@@ -299,6 +323,14 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
}
//上报
tvFaultReport.setOnClickListener{
if(level2Name.isEmpty()){
ToastUtils.showShort("请完整填写再上报")
return@setOnClickListener
}
if(hasLevel3 && level3Name.isEmpty()){
ToastUtils.showShort("请完整填写再上报")
return@setOnClickListener
}
//故障码列表赋值
BadCaseConfig.newFMInfoMsg?.fmInfoList?.forEach {
faultCodeList.add(it.faultId)
@@ -310,8 +342,13 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
address = it
}
val padProblemList= ArrayList<PadProblemInfo>()
val note = if(reportNote.isEmpty()){
"$level1Name-$level2Name-$level3Name"
}else{
"$level1Name-$level2Name-$level3Name($reportNote)"
}
val padProblemInfo = PadProblemInfo(address,faultCodeList,millis2String(workOrderOccurrenceTime),level1Id,
level2Id,level3Id,lineName,reportNote,reportType,
level2Id,level3Id,BadCaseConfig.lineName,note,reportType,
SharedPrefsMgr.getInstance().getString("och_account",""))
padProblemList.add(padProblemInfo)
val padAddProblemReq = PadAddProblemReq(padProblemList,AppConfigInfo.plateNumber)
@@ -507,6 +544,7 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
rvFaultList.visibility = View.GONE
tvUploadSuccess.visibility = View.VISIBLE
faultReasonGroup.visibility = View.GONE
tbFaultReason.visibility = View.GONE
val successHandler = Handler(Looper.getMainLooper())
successHandler.postDelayed({
hideFloatWindow()
@@ -523,21 +561,34 @@ class FaultReasonWindow constructor(activity: Activity) : View.OnTouchListener,
super.getCategoriesSuccess(list)
ThreadUtils.runOnUiThread {
if(list.isNotEmpty()){
orderReasonAdapter.setData(list,source)
if(source == 0){
level1Id = list[0].id
level1Name = list[0].name
source = 1
//获取故障二级分类即故障类型
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,level1Id,1,0)
}else{
if(source == 1){
typeList = list
}else{
reasonList = list
hasLevel3 = true
}
orderReasonAdapter.setData(list,source)
}
}else{
if(source == 2){
hasLevel3 = false
}else{
ToastUtils.showShort("故障类型列表为空")
}
}
}
}
override fun getCategoriesError(msg: String) {
super.getCategoriesError(msg)
ToastUtils.showShort("故障列表获取失败:$msg")
}
/**
* 订单路线名称变化监听
* @param lineName 路线名称
*/
override fun onOrderLineUpdate(lineName: String) {
this.lineName = lineName
}
}

View File

@@ -74,9 +74,15 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener {
private var level1Id: Int = 0 //一级分类ID
private var level2Id: Int = 0 //二级分类ID
private var level3Id: Int = 0 //三级分类ID
private var level1Name: String = ""
private var level2Name: String = ""
private var level3Name: String = ""
private var lineName: String = "" //行驶路线
private var reportNote: String = "" //上报描述
private val reportType: Int = 2 //上报方式0小程序 1司机屏 2云端上报
private val reportType: Int = 1 //上报方式0小程序 1司机屏 2云端上报
private var level: Int = 1
private var canOneReport: Boolean = false //是否可以一键上报
init {
initFloatWindow()
@@ -118,6 +124,10 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener {
}
//一键上报
ivOneClickReport.setOnClickListener {
if(!canOneReport){
ToastUtils.showShort("故障描述获取失败不能上报")
return@setOnClickListener
}
hasReportOperate = true
BadCaseConfig.newFMInfoMsg?.fmInfoList?.forEach {
faultCodeList.add(it.faultId)
@@ -243,7 +253,7 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener {
mWindowManager!!.addView(mFloatLayout, mWindowParams)
showOneCLickReportView()
//请求一键上报故障码
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,1,1,4,1)
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,level,0,4,1)
}
}
@@ -286,11 +296,38 @@ class ReportTypeWindow constructor(activity: Activity): IMoGoDevaToolsListener {
override fun getCategoriesSuccess(list: List<CategoryInfo>) {
super.getCategoriesSuccess(list)
//TODO
if(list.isEmpty()){
ToastUtils.showShort("一键上报故障描述后台未配置")
canOneReport = false
}else{
when (level) {
1 -> {
level1Id = list[0].id
level1Name = list[0].name
level = 2
//请求二级一键上报配置
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,level,level1Id,4,1)
}
2 -> {
level2Id = list[0].id
level2Name = list[0].name
level = 3
//请求三级一键上报配置
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,level,level2Id,4,1)
}
else -> {
level3Id = list[0].id
level3Name = list[0].name
canOneReport = true
}
}
}
}
override fun getCategoriesError(msg: String) {
super.getCategoriesError(msg)
ToastUtils.showShort("一键上报故障描述获取失败$msg")
canOneReport = false
}
}

View File

@@ -49,7 +49,6 @@ import com.mogo.tts.base.SpeechUtils
import com.zhjt.mogo_core_function_devatools.R
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
import com.zhjt.mogo_core_function_devatools.workorder.adapter.OrderReasonAdapter
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlin.math.absoluteValue
/**
@@ -80,13 +79,13 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
var ret = 0 // 函数调用返回值
private var audioStatus = false
private var workOrderOccurrenceTime = System.currentTimeMillis() //故障发生时间
private var clickListener: ClickListener? = null
private lateinit var tvTakeOverTime: TextView
private lateinit var tbTakeOverType: ToggleButton
private lateinit var tbTakeOverReason: ToggleButton
private lateinit var viewTakeOverReason: View
private lateinit var ivTakeOverReason: ImageView
private lateinit var etNoteInput: AppCompatEditText
private lateinit var ivNoteAudio: ImageView
private lateinit var tvTakeOverSave: TextView
@@ -98,7 +97,19 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
private lateinit var orderReasonAdapter: OrderReasonAdapter
private lateinit var mTakeOverRecordInfo: TakeOverRecordInfo
private var source: Int = 0 //操作源0:类型1:原因
private val type = 2 //接管类接口请求Type值为2
private var source: Int = 0 //操作源0:默认,一级分类 1:类型二级分类2:原因,三级分类
private var hasLevel3: Boolean = false //是否有三级分类
private var typeList: List<CategoryInfo> ?= null //故障类型列表
private var reasonList: List<CategoryInfo> ?= null //故障原因列表
private var level1Id: Int = 0 //一级分类ID
private var level2Id: Int = 0 //二级分类ID
private var level3Id: Int = 0 //三级分类ID
private var level1Name: String = ""
private var level2Name: String = ""
private var level3Name: String = ""
init {
initFloatWindow()
@@ -130,6 +141,8 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
tvTakeOverTime = mFloatLayout.findViewById(R.id.tvTakeOverTime)
tbTakeOverType = mFloatLayout.findViewById(R.id.tbTakeOverType)
tbTakeOverReason = mFloatLayout.findViewById(R.id.tbTakeOverReason)
viewTakeOverReason = mFloatLayout.findViewById(R.id.viewTakeOverReason)
ivTakeOverReason = mFloatLayout.findViewById(R.id.ivTakeOverReason)
etNoteInput = mFloatLayout.findViewById(R.id.etNoteInput)
ivNoteAudio = mFloatLayout.findViewById(R.id.ivNoteAudio)
tvTakeOverSave = mFloatLayout.findViewById(R.id.tvTakeOverSave)
@@ -143,16 +156,34 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
orderReasonAdapter = OrderReasonAdapter()
orderReasonAdapter.setListener(object: OrderReasonAdapter.ReasonSelectListener{
override fun onSelectReason(reason: CategoryInfo, mSource: Int) {
if(mSource == 0){
if(mSource == 1){
//类型
tbTakeOverType.textOn = reason.name
tbTakeOverType.textOff = reason.name
//选择了故障类型
tbTakeOverReason.visibility = View.VISIBLE
viewTakeOverReason.visibility = View.GONE
ivTakeOverReason.visibility = View.GONE
tbTakeOverType.performClick()
if(level2Id != 0 && level2Id == reason.id){
//故障类型选择没有变化
reasonList?.let { orderReasonAdapter.setData(it,2) }
}else{
level2Id = reason.id
level2Name = reason.name
tbTakeOverReason.textOn = ""
tbTakeOverReason.textOff = ""
source = 2
//获取故障三级分类即故障原因
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,level2Id,type,0)
}
}else{
//原因
tbTakeOverReason.textOn = reason.name
tbTakeOverReason.textOff = reason.name
tbTakeOverReason.performClick()
level3Id = reason.id
level3Name = reason.name
}
}
})
@@ -166,9 +197,8 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
iconDown?.setBounds(0, 0, iconDown.minimumWidth, iconDown.minimumHeight)
val iconUp = ContextCompat.getDrawable(mActivity, R.drawable.icon_fault_retract)
iconUp?.setBounds(0, 0, iconUp.minimumWidth, iconUp.minimumHeight)
//弹窗展示时间
tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) +
millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())
//获取一级分类
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,1,0,type,0)
//接管类型选择
tbTakeOverType.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
@@ -178,16 +208,26 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
(rvTakeOverList.layoutParams as ConstraintLayout.LayoutParams).topToBottom = R.id.tbTakeOverType
tbTakeOverReason.visibility = View.INVISIBLE
source = 0
//获取故障二级分类即故障类型
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,1,1,0)
source = 1
if(typeList.isNullOrEmpty()){
//获取故障二级分类即故障类型
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,level1Id,type,0)
}else{
orderReasonAdapter.setData(typeList!!,source)
}
} else {
buttonView.setCompoundDrawables(null, null, iconDown, null)
//隐藏列表
rvTakeOverList.visibility = View.GONE
tbTakeOverReason.visibility = View.VISIBLE
}
}
viewTakeOverReason.setOnClickListener {
ToastUtils.showShort("请先选择接管类型")
}
ivTakeOverReason.setOnClickListener {
ToastUtils.showShort("请先选择接管类型")
}
//接管原因选择
tbTakeOverReason.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
@@ -195,10 +235,6 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
//展示列表
rvTakeOverList.visibility = View.VISIBLE
(rvTakeOverList.layoutParams as ConstraintLayout.LayoutParams).topToBottom = R.id.tbTakeOverReason
source = 1
//获取故障三级分类即故障原因
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,3,1,1,0)
} else {
buttonView.setCompoundDrawables(null, null, iconDown, null)
//隐藏列表
@@ -246,7 +282,21 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
}
//保存
tvTakeOverSave.setOnClickListener{
if(level2Name.isEmpty()){
ToastUtils.showShort("请完整填写再保存")
return@setOnClickListener
}
if(hasLevel3 && level3Name.isEmpty()){
ToastUtils.showShort("请完整填写再保存")
return@setOnClickListener
}
mTakeOverRecordInfo.reportNote = etNoteInput.text.toString()
mTakeOverRecordInfo.level1Id = level1Id
mTakeOverRecordInfo.level1Name = level1Name
mTakeOverRecordInfo.level2Id = level2Id
mTakeOverRecordInfo.level2Name = level2Name
mTakeOverRecordInfo.level3Id = level3Id
mTakeOverRecordInfo.level3Name = level3Name
CallerTakeOverManager.updateRecord(mActivity,mTakeOverRecordInfo)
clickListener?.onSaveReason(mTakeOverRecordInfo)
hideFloatWindow()
@@ -383,6 +433,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
return true
}
@SuppressLint("SetTextI18n")
fun showFloatWindow(takeOverRecordInfo: TakeOverRecordInfo) {
if (mFloatLayout.parent == null) {
val metrics = DisplayMetrics()
@@ -393,6 +444,13 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
mWindowManager!!.addView(mFloatLayout, mWindowParams)
}
mTakeOverRecordInfo = takeOverRecordInfo
if(mTakeOverRecordInfo.faultStartTime == 0L){
tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) +
millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())
}else{
tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) +
millis2String(mTakeOverRecordInfo.faultStartTime, TimeUtils.getHourMinSecondFormat())
}
}
fun hideFloatWindow() {
@@ -414,13 +472,35 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
super.getCategoriesSuccess(list)
ThreadUtils.runOnUiThread {
if(list.isNotEmpty()){
orderReasonAdapter.setData(list,source)
if(source == 0){
level1Id = list[0].id
level1Name = list[0].name
source = 1
//获取故障二级分类即故障类型
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,2,level1Id,type,0)
}else{
if(source == 1){
typeList = list
}else{
reasonList = list
hasLevel3 = true
}
orderReasonAdapter.setData(list,source)
}
}else{
if(source == 2){
hasLevel3 = false
}else{
ToastUtils.showShort("接管类型列表为空")
}
}
}
}
override fun getCategoriesError(msg: String) {
super.getCategoriesError(msg)
ToastUtils.showShort("接管列表获取失败:$msg")
}
}

View File

@@ -71,7 +71,7 @@ class TakeOverRecordView @JvmOverloads constructor(
CallerDevaToolsListenerManager.removeListener(TAG)
}
//接管记录日期
tvTakeOverRecordDate.text = TimeUtils.millis2String(System.currentTimeMillis(), getYMDFormat())
tvTakeOverRecordDate.text = millis2String(System.currentTimeMillis(), getYMDFormat())
val linearLayoutManager = LinearLayoutManager(context)
rvTakeOverList.layoutManager = linearLayoutManager
takeOverListAdapter = TakeOverListAdapter(context)
@@ -117,9 +117,18 @@ class TakeOverRecordView @JvmOverloads constructor(
while(recordIterator.hasNext()){
val uploadRecord = recordIterator.next()
uploadRecord.let {
if(it.level1Id == 0 || it.level2Id == 0 || it.level3Id == 0){
ToastUtils.showShort("请编辑选中的接管记录")
return@setOnClickListener
}
val reason = if(it.reportNote.isEmpty()){
"${it.level1Name}-${it.level2Name}-${it.level3Name}"
}else{
"${it.level1Name}-${it.level2Name}-${it.level3Name}(${it.reportNote})"
}
val padProblemInfo = PadProblemInfo(it.address, emptyList(),
millis2String(it.faultStartTime),it.level1Id,it.level2Id,it.level3Id,
it.lineName,it.reportNote,1,
it.lineName,reason,1,
SharedPrefsMgr.getInstance().getString("och_account",""))
padProblemList.add(padProblemInfo)
}
@@ -179,12 +188,21 @@ class TakeOverRecordView @JvmOverloads constructor(
override fun problemPadAddSuccess() {
super.problemPadAddSuccess()
ToastUtils.showShort("接管记录上传成功")
//更新记录状态并且刷新列表
ThreadUtils.runOnUiThread {
selectedUploadRecord.forEach {
it.reportStatus = true
it.selectStatus = false
CallerTakeOverManager.updateRecord(context,it)
takeOverListAdapter?.notifyRecordItemChanged(it)
}
}
}
override fun problemPadAddError(msg: String) {
super.problemPadAddError(msg)
ToastUtils.showShort("接管记录上传失败$msg")
}
}

View File

@@ -1,6 +1,7 @@
package com.zhjt.mogo_core_function_devatools.workorder
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.Response
import com.mogo.eagle.core.data.deva.report.CategoryInfo
import com.mogo.eagle.core.data.deva.report.PadAddProblemReq
@@ -29,7 +30,10 @@ interface WorkOrderApiService {
*/
@Headers("Content-Type:application/json;charset=UTF-8")
@POST("/vehicle-data-service/problem/pad/add")
suspend fun problemPadAdd(@Body padAddProblemReq: PadAddProblemReq): Response<Any>
suspend fun problemPadAdd(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String= SharedPrefsMgr.getInstance().token,
@Body padAddProblemReq: PadAddProblemReq): Response<Any>
/**
* 获取报障、接管、一键上报配置
@@ -38,11 +42,27 @@ interface WorkOrderApiService {
@GET("/platform/biz/categories/terminal")
suspend fun getCategories(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("tenantId") tenantId: Long,
@Header("ticket") ticket: String= SharedPrefsMgr.getInstance().token,
@Header("x-tenant-id") tenantId: Long,
@Query("level") level: Int,
@Query("parentId") parentId: Int,
@Query("type") type: Int,
@Query("upType") upType: Int
): Response<List<CategoryInfo>>
/**
* 获取报障、接管、一键上报配置
*/
@Headers("Content-type:application/json;charset=UTF-8")
@GET("/platform/biz/categories/terminal")
suspend fun getCategories(
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
@Header("ticket") ticket: String= SharedPrefsMgr.getInstance().token,
@Header("x-tenant-id") tenantId: Long,
@Query("level") level: Int,
@Query("type") type: Int,
@Query("upType") upType: Int
): Response<List<CategoryInfo>>
}

View File

@@ -1,6 +1,7 @@
package com.zhjt.mogo_core_function_devatools.workorder
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.Response
import com.mogo.eagle.core.data.deva.report.CategoryInfo
import com.mogo.eagle.core.data.deva.report.PadAddProblemReq
@@ -46,7 +47,8 @@ class WorkOrderNetWorkModel {
request<Response<Any>>{
loader{
apiResponseCall{
getNetWorkApi(getOchUrl()).problemPadAdd(padAddProblemReq)
getNetWorkApi(getOchUrl()).problemPadAdd(MoGoAiCloudClientConfig.getInstance().serviceAppId,
SharedPrefsMgr.getInstance().token,padAddProblemReq)
}
}
onSuccess{
@@ -67,7 +69,13 @@ class WorkOrderNetWorkModel {
request<Response<List<CategoryInfo>>>{
loader{
apiResponseCall{
getNetWorkApi(getOchUrl()).getCategories(MoGoAiCloudClientConfig.getInstance().serviceAppId,tenantId, level, parentId,type,upType)
if(parentId == 0){
getNetWorkApi(getOchUrl()).getCategories(MoGoAiCloudClientConfig.getInstance().serviceAppId,
SharedPrefsMgr.getInstance().token,tenantId, level,type,upType)
}else{
getNetWorkApi(getOchUrl()).getCategories(MoGoAiCloudClientConfig.getInstance().serviceAppId,
SharedPrefsMgr.getInstance().token,tenantId, level, parentId,type,upType)
}
}
}
onSuccess {

View File

@@ -80,11 +80,16 @@ class TakeOverListAdapter(private val context: Context): RecyclerView.Adapter<Ta
}
holder.tvFaultStartTime.text = TimeUtils.millis2String(recordEntity.faultStartTime,getHourMinSecondFormat())
holder.tvLineName.text = recordEntity.lineName
//TODO 还应该判断类型和原因
if(recordEntity.reportNote.isEmpty()){
if(recordEntity.reportNote.isEmpty() && recordEntity.level1Name.isEmpty()
&& recordEntity.level2Name.isEmpty() && recordEntity.level3Name.isEmpty()){
holder.tvTakeOverReason.text = "原因:空"
}else{
holder.tvTakeOverReason.text = "原因:${recordEntity.reportNote}"
val reason = if(recordEntity.reportNote.isEmpty()){
"${recordEntity.level1Name}-${recordEntity.level2Name}-${recordEntity.level3Name}"
}else{
"${recordEntity.level1Name}-${recordEntity.level2Name}-${recordEntity.level3Name}(${recordEntity.reportNote})"
}
holder.tvTakeOverReason.text = "原因:$reason"
}
if(recordEntity.reportStatus){
//已上报

View File

@@ -128,6 +128,30 @@
android:textColor="@color/white"
android:paddingStart="@dimen/dp_21"
android:paddingEnd="@dimen/dp_21"
android:visibility="invisible"
/>
<View
android:id="@+id/viewFaultReason"
android:layout_width="@dimen/dp_781"
android:layout_height="@dimen/dp_70"
android:background="@drawable/bg_fault_type"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_374"
/>
<ImageView
android:id="@+id/ivFaultReason"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/viewFaultReason"
app:layout_constraintBottom_toBottomOf="@id/viewFaultReason"
app:layout_constraintRight_toRightOf="@id/viewFaultReason"
android:src="@drawable/icon_fault_expand"
android:contentDescription="@string/fault_reason_select"
android:layout_marginRight="@dimen/dp_21"
/>
<View
@@ -327,10 +351,11 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="viewFaultTypeLabel,tvTypeTitle,tbFaultType,
viewFaultReasonLabel,tvFaultReasonTitle,tbFaultReason,viewFaultTimeLabel,
viewFaultReasonLabel,tvFaultReasonTitle,viewFaultTimeLabel,
tvFaultTimeTitle,ivTimeReduce,tvOccurrenceTime,ivTimeAdd,
viewFaultNoteLabel,tvFaultNoteTitle,tvFaultNoteSupplement,
etNoteInput,ivNoteAudio,tvFaultReport,tvFaultCancel"
etNoteInput,ivNoteAudio,tvFaultReport,tvFaultCancel,
viewFaultReason,ivFaultReason"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -128,6 +128,30 @@
android:textColor="@color/white"
android:paddingStart="@dimen/dp_21"
android:paddingEnd="@dimen/dp_21"
android:visibility="invisible"
/>
<View
android:id="@+id/viewTakeOverReason"
android:layout_width="@dimen/dp_781"
android:layout_height="@dimen/dp_70"
android:background="@drawable/bg_fault_type"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_374"
/>
<ImageView
android:id="@+id/ivTakeOverReason"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/viewTakeOverReason"
app:layout_constraintBottom_toBottomOf="@id/viewTakeOverReason"
app:layout_constraintRight_toRightOf="@id/viewTakeOverReason"
android:src="@drawable/icon_fault_expand"
android:contentDescription="@string/take_over_reason"
android:layout_marginRight="@dimen/dp_21"
/>
@@ -269,7 +293,7 @@
android:layout_height="wrap_content"
app:constraint_referenced_ids="viewTakeOverTypeLabel,tvTypeTitle,
tbTakeOverType,viewTakeOverReasonLabel,tvTakeOverReasonTitle,
tbTakeOverReason,viewTakeOverNoteLabel,tvTakeOverNoteTitle,
viewTakeOverReason,ivTakeOverReason,viewTakeOverNoteLabel,tvTakeOverNoteTitle,
tvTakeOverNoteSupplement,etNoteInput,ivNoteAudio,
tvTakeOverReport,tvTakeOverCancel"
/>

View File

@@ -7,6 +7,9 @@ package com.mogo.eagle.core.data.deva.report
* @param level1Id 一级分类ID
* @param level2Id 二级分类ID
* @param level3Id 三级分类ID
* @param level1Name 一级分类名称
* @param level2Name 二级分类名称
* @param level3Name 三级分类名称
* @param lineName 行驶路线
* @param reportNote 上报描述
* @param reportStatus 上传状态 false:未上传,可编辑 true:已上传,不可编辑
@@ -14,5 +17,6 @@ package com.mogo.eagle.core.data.deva.report
*/
data class TakeOverRecordInfo(var faultStartTime: Long, var address:String,
var level1Id: Int, var level2Id: Int, var level3Id: Int,
var level1Name: String,var level2Name: String,var level3Name: String,
var lineName: String, var reportNote: String,
var reportStatus: Boolean,var selectStatus: Boolean)