diff --git a/app/src/main/java/com/lukouguoji/aerologic/page/flight/query/details/FlightQueryDetailsActivity.kt b/app/src/main/java/com/lukouguoji/aerologic/page/flight/query/details/FlightQueryDetailsActivity.kt index 6414fc0..4be6417 100644 --- a/app/src/main/java/com/lukouguoji/aerologic/page/flight/query/details/FlightQueryDetailsActivity.kt +++ b/app/src/main/java/com/lukouguoji/aerologic/page/flight/query/details/FlightQueryDetailsActivity.kt @@ -3,12 +3,15 @@ package com.lukouguoji.aerologic.page.flight.query.details import android.content.Context import android.content.Intent import android.os.Bundle +import com.alibaba.android.arouter.facade.annotation.Route import com.lukouguoji.aerologic.R import com.lukouguoji.aerologic.databinding.ActivityFlightQueryDetailsBinding import com.lukouguoji.aerologic.databinding.ActivityGnjStashDetailsBinding import com.lukouguoji.module_base.base.BaseBindingActivity import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.router.ARouterConstants +@Route(path = ARouterConstants.ACTIVITY_URL_FLIGHT_QUERY_DETAILS) class FlightQueryDetailsActivity : BaseBindingActivity() { diff --git a/app/src/main/java/com/lukouguoji/aerologic/page/flight/query/list/FlightQueryListActivity.kt b/app/src/main/java/com/lukouguoji/aerologic/page/flight/query/list/FlightQueryListActivity.kt index b4b3048..33e2ccf 100644 --- a/app/src/main/java/com/lukouguoji/aerologic/page/flight/query/list/FlightQueryListActivity.kt +++ b/app/src/main/java/com/lukouguoji/aerologic/page/flight/query/list/FlightQueryListActivity.kt @@ -9,6 +9,7 @@ import com.lukouguoji.module_base.base.BaseBindingActivity import com.lukouguoji.module_base.ktx.addOnItemClickListener import com.lukouguoji.module_base.ktx.getLifecycleOwner +@Deprecated("使用 module_hangban 中的 HbQueryListActivity 替代") class FlightQueryListActivity : BaseBindingActivity() { override fun layoutId() = R.layout.activity_flight_query_list diff --git a/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt b/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt index ada138d..b7ac134 100644 --- a/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt +++ b/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt @@ -106,7 +106,9 @@ class HomeFragment : Fragment() { if (Constant.AuthName.Flight == leftMenuTemp.id) { // ARouter.getInstance().build(ARouterConstants.ACTIVITY_URL_HANG_BAN_QUERY) // .navigation(activity, Constant.RequestCode.home_left_hang_ban_query) - FlightQueryListActivity.start(requireContext()) +// FlightQueryListActivity.start(requireContext()) // 已废弃 + ARouter.getInstance().build(ARouterConstants.ACTIVITY_URL_HB_QUERY_LIST) + .navigation() mPosition = oldPosition } //货物查询 diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/FlightBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/FlightBean.kt index beb2906..edd2cc7 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/FlightBean.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/FlightBean.kt @@ -151,6 +151,46 @@ class FlightBean : ICheck { ).noNull(scheduledTackOff) } + // 预计起飞时间-时分 + val estimatedTakeOffHM: String + get() { + return DateUtils.parseString( + estimatedTakeOff, + DevFinal.TIME.yyyyMMddHHmmss_HYPHEN, + "HH:mm" + ).noNull(estimatedTakeOff) + } + + // 计划降落时间-时分 + val scheduledArrivalHM: String + get() { + return DateUtils.parseString( + scheduledArrival, + DevFinal.TIME.yyyyMMddHHmmss_HYPHEN, + "HH:mm" + ).noNull(scheduledArrival) + } + + // 预计降落时间-时分 + val estimatedArrivalHM: String + get() { + return DateUtils.parseString( + estimatedArrival, + DevFinal.TIME.yyyyMMddHHmmss_HYPHEN, + "HH:mm" + ).noNull(estimatedArrival) + } + + // 实际降落时间-时分 + val actualArrivalHM: String + get() { + return DateUtils.parseString( + actualArrival, + DevFinal.TIME.yyyyMMddHHmmss_HYPHEN, + "HH:mm" + ).noNull(actualArrival) + } + // 航班服务种类(0:客机;1:货机;2:卡车) var serviceType: String = "" @@ -219,6 +259,50 @@ class FlightBean : ICheck { return calendar.get(Calendar.DAY_OF_YEAR) > current.get(Calendar.DAY_OF_YEAR) } + // 预计起飞 vs 计划起飞 是否跨日 + fun isEstimatedTakeOffNextDay(): Boolean { + if (scheduledTackOff.isEmpty() || estimatedTakeOff.isEmpty()) return false + return try { + val calBase = DateUtils.getCalendar(DateUtils.parseDate(scheduledTackOff)) + val calTarget = DateUtils.getCalendar(DateUtils.parseDate(estimatedTakeOff)) + if (calTarget.get(Calendar.YEAR) > calBase.get(Calendar.YEAR)) true + else calTarget.get(Calendar.DAY_OF_YEAR) > calBase.get(Calendar.DAY_OF_YEAR) + } catch (e: Exception) { false } + } + + // 实际起飞 vs 计划起飞 是否跨日 + fun isActualTakeOffNextDay(): Boolean { + if (scheduledTackOff.isEmpty() || actualTakeOff.isEmpty()) return false + return try { + val calBase = DateUtils.getCalendar(DateUtils.parseDate(scheduledTackOff)) + val calTarget = DateUtils.getCalendar(DateUtils.parseDate(actualTakeOff)) + if (calTarget.get(Calendar.YEAR) > calBase.get(Calendar.YEAR)) true + else calTarget.get(Calendar.DAY_OF_YEAR) > calBase.get(Calendar.DAY_OF_YEAR) + } catch (e: Exception) { false } + } + + // 预计降落 vs 计划降落 是否跨日 + fun isEstimatedArrivalNextDay(): Boolean { + if (scheduledArrival.isEmpty() || estimatedArrival.isEmpty()) return false + return try { + val calBase = DateUtils.getCalendar(DateUtils.parseDate(scheduledArrival)) + val calTarget = DateUtils.getCalendar(DateUtils.parseDate(estimatedArrival)) + if (calTarget.get(Calendar.YEAR) > calBase.get(Calendar.YEAR)) true + else calTarget.get(Calendar.DAY_OF_YEAR) > calBase.get(Calendar.DAY_OF_YEAR) + } catch (e: Exception) { false } + } + + // 实际降落 vs 计划降落 是否跨日 + fun isActualArrivalNextDay(): Boolean { + if (scheduledArrival.isEmpty() || actualArrival.isEmpty()) return false + return try { + val calBase = DateUtils.getCalendar(DateUtils.parseDate(scheduledArrival)) + val calTarget = DateUtils.getCalendar(DateUtils.parseDate(actualArrival)) + if (calTarget.get(Calendar.YEAR) > calBase.get(Calendar.YEAR)) true + else calTarget.get(Calendar.DAY_OF_YEAR) > calBase.get(Calendar.DAY_OF_YEAR) + } catch (e: Exception) { false } + } + fun getCargoTypeName(): String { return when (cargoType) { "0" -> "国际货" diff --git a/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt b/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt index 72907d5..f49160f 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt @@ -184,8 +184,10 @@ object ARouterConstants { /** * 航班查询模块 */ - const val ACTIVITY_URL_HANG_BAN_QUERY = "/hb/HangBanQueryActivity" //航班查询模块 - const val ACTIVITY_URL_HANG_BAN_QUERY_INFO = "/hb/HangBanQueryInfoActivity" //航班查询模块 + const val ACTIVITY_URL_HANG_BAN_QUERY = "/hb/HangBanQueryActivity" //航班查询模块(旧版) + const val ACTIVITY_URL_HANG_BAN_QUERY_INFO = "/hb/HangBanQueryInfoActivity" //航班查询模块(旧版) + const val ACTIVITY_URL_HB_QUERY_LIST = "/hb/HbQueryListActivity" //航班管理 列表(新版) + const val ACTIVITY_URL_FLIGHT_QUERY_DETAILS = "/app/FlightQueryDetailsActivity" //航班详情 ///////////////// 货物追踪模块 /** diff --git a/module_hangban/src/main/java/com/lukouguoji/hangban/activity/HangBanQueryActivity.kt b/module_hangban/src/main/java/com/lukouguoji/hangban/activity/HangBanQueryActivity.kt index e1400a1..c39c908 100644 --- a/module_hangban/src/main/java/com/lukouguoji/hangban/activity/HangBanQueryActivity.kt +++ b/module_hangban/src/main/java/com/lukouguoji/hangban/activity/HangBanQueryActivity.kt @@ -30,7 +30,8 @@ import java.text.SimpleDateFormat import java.util.* -@Route(path = ARouterConstants.ACTIVITY_URL_HANG_BAN_QUERY) +// @Route(path = ARouterConstants.ACTIVITY_URL_HANG_BAN_QUERY) // 已废弃,使用 HbQueryListActivity +@Deprecated("使用 HbQueryListActivity 替代") class HangBanQueryActivity : BaseActivity(), View.OnClickListener { private val currentTitleName = "航班查询" diff --git a/module_hangban/src/main/java/com/lukouguoji/hangban/page/query/list/HbQueryListActivity.kt b/module_hangban/src/main/java/com/lukouguoji/hangban/page/query/list/HbQueryListActivity.kt new file mode 100644 index 0000000..30f3b22 --- /dev/null +++ b/module_hangban/src/main/java/com/lukouguoji/hangban/page/query/list/HbQueryListActivity.kt @@ -0,0 +1,32 @@ +package com.lukouguoji.hangban.page.query.list + +import android.os.Bundle +import com.alibaba.android.arouter.facade.annotation.Route +import com.lukouguoji.hangban.R +import com.lukouguoji.hangban.databinding.ActivityHbQueryListBinding +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.ktx.addOnItemClickListener +import com.lukouguoji.module_base.ktx.getLifecycleOwner +import com.lukouguoji.module_base.router.ARouterConstants + +@Route(path = ARouterConstants.ACTIVITY_URL_HB_QUERY_LIST) +class HbQueryListActivity : + BaseBindingActivity() { + + override fun layoutId() = R.layout.activity_hb_query_list + + override fun viewModelClass() = HbQueryListViewModel::class.java + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow("航班管理") + + binding.viewModel = viewModel + viewModel.pageModel + .bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, getLifecycleOwner()) + + binding.rv.addOnItemClickListener(viewModel) + + viewModel.refresh() + } + +} diff --git a/module_hangban/src/main/java/com/lukouguoji/hangban/page/query/list/HbQueryListViewHolder.kt b/module_hangban/src/main/java/com/lukouguoji/hangban/page/query/list/HbQueryListViewHolder.kt new file mode 100644 index 0000000..043bb09 --- /dev/null +++ b/module_hangban/src/main/java/com/lukouguoji/hangban/page/query/list/HbQueryListViewHolder.kt @@ -0,0 +1,36 @@ +package com.lukouguoji.hangban.page.query.list + +import android.view.View +import com.lukouguoji.hangban.databinding.ItemHbQueryListBinding +import com.lukouguoji.module_base.base.BaseViewHolder +import com.lukouguoji.module_base.bean.FlightBean + +class HbQueryListViewHolder(view: View) : + BaseViewHolder(view) { + + override fun onBind(item: Any?, position: Int) { + val bean = getItemBean(item)!! + binding.bean = bean + + // 到达航班显示橙色 + val color = if (bean.beArrival()) { + android.graphics.Color.parseColor("#FF8C00") + } else { + android.graphics.Color.parseColor("#333333") + } + setTextColorRecursive(binding.ll, color) + + notifyItemClick(position, binding.ll) + } + + private fun setTextColorRecursive(view: View, color: Int) { + if (view is android.widget.TextView) { + view.setTextColor(color) + } else if (view is android.view.ViewGroup) { + for (i in 0 until view.childCount) { + setTextColorRecursive(view.getChildAt(i), color) + } + } + } + +} diff --git a/module_hangban/src/main/java/com/lukouguoji/hangban/page/query/list/HbQueryListViewModel.kt b/module_hangban/src/main/java/com/lukouguoji/hangban/page/query/list/HbQueryListViewModel.kt new file mode 100644 index 0000000..2ff0fb9 --- /dev/null +++ b/module_hangban/src/main/java/com/lukouguoji/hangban/page/query/list/HbQueryListViewModel.kt @@ -0,0 +1,82 @@ +package com.lukouguoji.hangban.page.query.list + +import androidx.lifecycle.MutableLiveData +import com.alibaba.android.arouter.launcher.ARouter +import com.lukouguoji.hangban.R +import com.lukouguoji.module_base.base.BasePageViewModel +import com.lukouguoji.module_base.bean.FlightBean +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.http.net.NetApply +import com.lukouguoji.module_base.ktx.commonAdapter +import com.lukouguoji.module_base.ktx.formatDate +import com.lukouguoji.module_base.ktx.launchLoadingCollect +import com.lukouguoji.module_base.ktx.toRequestBody +import com.lukouguoji.module_base.router.ARouterConstants +import com.lukouguoji.module_base.util.DictUtils +import dev.utils.app.info.KeyValue +import dev.utils.common.DateUtils + +class HbQueryListViewModel : BasePageViewModel() { + + val date = MutableLiveData(DateUtils.getCurrentTime().formatDate()) + val fNo = MutableLiveData("") + val range = MutableLiveData("") + val addressType = MutableLiveData("") + val serviceType = MutableLiveData("") + + val addressTypeList = MutableLiveData(listOf(KeyValue("全部", ""))).apply { + DictUtils.getAreaTypeList { + value = it + } + } + val serviceTypeList = MutableLiveData( + listOf( + KeyValue("全部", ""), + KeyValue("客机", "0"), + KeyValue("货机", "1"), + KeyValue("卡车", "2"), + ) + ) + + val itemLayoutId = R.layout.item_hb_query_list + val itemViewHolder = HbQueryListViewHolder::class.java + + val count = MutableLiveData(0) + + /////////////////////////////////////////////////////////////////////////// + // 方法区 + /////////////////////////////////////////////////////////////////////////// + + fun searchClick() { + refresh() + } + + override fun getData() { + launchLoadingCollect({ + NetApply.api.getFlightList( + mapOf( + "page" to pageModel.page, + "limit" to pageModel.limit, + "fdate" to date.value, + "fno" to fNo.value, + "range" to range.value, + "countryType" to addressType.value, + "serviceType" to serviceType.value, + ).toRequestBody() + ) + }) { + onSuccess = { + pageModel.handleListBean(it) + count.value = it.total + } + } + } + + override fun onItemClick(position: Int, type: Int) { + val bean = pageModel.rv!!.commonAdapter()!!.getItem(position) as FlightBean + ARouter.getInstance().build(ARouterConstants.ACTIVITY_URL_FLIGHT_QUERY_DETAILS) + .withString(Constant.Key.ID, bean.fid) + .navigation() + } + +} diff --git a/module_hangban/src/main/release/AndroidManifest.xml b/module_hangban/src/main/release/AndroidManifest.xml index ba915c5..268892c 100644 --- a/module_hangban/src/main/release/AndroidManifest.xml +++ b/module_hangban/src/main/release/AndroidManifest.xml @@ -13,6 +13,11 @@ android:configChanges="orientation|keyboardHidden" android:screenOrientation="userLandscape" android:exported="false" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_hangban/src/main/res/layout/item_hb_query_list.xml b/module_hangban/src/main/res/layout/item_hb_query_list.xml new file mode 100644 index 0000000..1402e8a --- /dev/null +++ b/module_hangban/src/main/res/layout/item_hb_query_list.xml @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +