diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d1a9bbc..2db77ce 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -104,6 +104,12 @@ android:configChanges="orientation|keyboardHidden" android:exported="false" android:screenOrientation="userLandscape" /> + + ? = null, // 分单列表 + var storageUseList: List? = null, // 库位使用列表 + var attachList: List? = null // 附件列表 +) + +/** + * 国际出港分单数据模型 + */ +data class GjcHaWb( + var haWbId: Long? = null, // 主键ID + var fid: Long? = null, // 航班主键 + var prefix: String? = null, // 前缀 + var no: String? = null, // 编号 + var hno: String? = null, // H编号 + var pc: Long? = null, // PC数量 + var weight: Double? = null, // 重量 + var volume: Double? = null, // 体积 + var hpc: Long? = null, // 分单数量 + var hweight: Double? = null, // 分单重量 + var hvolume: Double? = null, // 分单体积 + var goods: String? = null, // 货物英文 + var goodsCn: String? = null, // 货物中文 + var billsNo: String? = null, // 提单号 + var opDate: Date? = null, // 操作日期 + var opId: String? = null, // 操作人ID + var remark: String? = null, // 备注 + // 发货人信息 + var consignorName: String? = null, // 发货人名称 + var consignorCode: String? = null, // 发货人代码 + var consignorAddress: String? = null, // 发货人地址 + var consignorCountryCode: String? = null, // 发货人国家代码 + var consignorComType: String? = null, // 发货人公司类型 + var consignorPnum: String? = null, // 发货人电话号码 + // 收货人信息 + var consigneeName: String? = null, // 收货人名称 + var consigneeCode: String? = null, // 收货人代码 + var consigneeAddress: String? = null, // 收货人地址 + var consigneeCountryCode: String? = null, // 收货人国家代码 + var consigneeComType: String? = null, // 收货人公司类型 + var consigneePnum: String? = null, // 收货人电话号码 + // 特殊收货人信息 + var speConsigneeName: String? = null, // 特殊收货人名称 + var speConsigneeComType: String? = null, // 特殊收货人公司类型 + var speConsigneePnum: String? = null, // 特殊收货人电话号码 + // 申报状态 + var mftStatus: String? = null, // 预配状态 + var mftMsgId: String? = null, // 预配消息ID + var arrivalStatus: String? = null, // 运抵状态 + var arrMsgId: String? = null, // 运抵消息ID + var tallyStatus: String? = null, // 理货状态 + var tallyMsgId: String? = null, // 理货消息ID + var transferStatus: String? = null, // 传输状态 + var tranMsgId: String? = null, // 传输消息ID + var cmdStatus: String? = null, // 命令状态 + var response: String? = null, // 响应 + // 最后状态 + var lastMftStatus: String? = null, // 最后预配状态 + var lastMftMsgId: String? = null, // 最后预配消息ID + var lastArrStatus: String? = null, // 最后运抵状态 + var lastArrMsgId: String? = null, // 最后运抵消息ID + var lastTallyStatus: String? = null, // 最后理货状态 + var lastTallyMsgId: String? = null, // 最后理货消息ID + // 费率计次 + var mftSRate: Double? = null, // 预配申报费率 + var mftSCount: Double? = null, // 预配申报计次 + var mftDRate: Double? = null, // 预配删除费率 + var mftDCount: Double? = null, // 预配删除计次 + var arrivalSRate: Double? = null, // 运抵申报费率 + var arrivalSCount: Double? = null, // 运抵申报计次 + var arrivalDRate: Double? = null, // 运抵删除费率 + var arrivalDCount: Double? = null, // 运抵删除计次 + var tallySRate: Double? = null, // 出港理货申报费率 + var tallySCount: Double? = null, // 出港理货申报计次 + var tallyDRate: Double? = null, // 出港理货删除费率 + var tallyDCount: Double? = null, // 出港理货删除计次 + // 操作信息 + var arrivalOpDate: Date? = null, // 运抵操作日期 + var arrivalOpId: String? = null, // 运抵操作人ID + var tallyOpDate: Date? = null, // 理货操作日期 + var tallyOpId: String? = null, // 理货操作人ID + var declareCount: Long? = null, // 申报次数 + var activeId: Long? = null // 活动ID +) + +/** + * 库位使用记录 + */ +data class GjcStorageUse( + var id: Long? = null, // 主键 + var maWbId: Long? = null, // 运单id + var prefix: String? = null, // 运单前缀 + var no: String? = null, // 运单号 + var storageCode: String? = null, // 库位号 + var inDate: Date? = null, // 入库时间 + var inId: String? = null, // 入库人 + var outDate: Date? = null, // 出库时间 + var outId: String? = null // 出库人 +) diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMostMouldPage.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMostMouldPage.kt new file mode 100644 index 0000000..19ce7ff --- /dev/null +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMostMouldPage.kt @@ -0,0 +1,47 @@ +package com.lukouguoji.module_base.bean + +import java.util.Date + +/** + * 国际出港查询参数封装类 + * 对应接口:/IntExpSearch/pageQuery + */ +data class GjcMostMouldPage( + // ==================== 分页参数 ==================== + var pageNum: Int? = null, // 页号 + var pageSize: Int? = null, // 每页显示条数 + + // ==================== 基础搜索条件 ==================== + var fdate: Date? = null, // 航班日期 + var fno: String? = null, // 航班号 + var agentCode: String? = null, // 代理人code + var outState: Int? = null, // 出库状态(0:未出库,1:已出库) + var wbNo: String? = null, // 运单号(11位) + var no: String? = null, // 运单号 + + // ==================== 筛选条件 ==================== + var spCode: String? = null, // 特码 + var dest: String? = null, // 目的港 + var awbType: String? = null, // 运单类型 + var businessType: String? = null, // 业务类型 + var goodsCn: String? = null, // 品名(中) + + // ==================== 其他可选条件 ==================== + var beginDate: Date? = null, // 航班开始时间 + var endDate: Date? = null, // 航班结束时间 + var by1: String? = null, // 承运人 + var carId: String? = null, // 板车号 + var dest1: String? = null, // 卸货站 + var fdest: String? = null, // 目的站 + var handoverState: Int? = null, // 交接状态(0:未交接,1:已交接) + var isFclose: Boolean? = null, // 筛选航班是否关闭 + var ldId: String? = null, // 组装人 + var likeNo: String? = null, // 运单号(模糊查询) + var moveState: Int? = null, // 移库状态 + var prefix: String? = null, // 运单号前缀 + var uld: String? = null, // uld编号 + + // 分页辅助字段 + var startIndex: Int? = null, + var endIndex: Int? = null +) diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/PageInfo.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/PageInfo.kt new file mode 100644 index 0000000..e46fe06 --- /dev/null +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/PageInfo.kt @@ -0,0 +1,48 @@ +package com.lukouguoji.module_base.bean + +import java.util.ArrayList + +/** + * 分页响应容器 (适配MyBatis-Plus的PageInfo结构) + * 用于适配接口返回的PageInfo结构 + */ +class PageInfo { + // 当前页号 + var pageNum: Int = 1 + + // 每页显示条数 + var pageSize: Int = 10 + + // 数据总量 + var total: Long = 0 + + // 页面总量 + var pages: Int = 1 + + // 数据列表 + var list: ArrayList? = null + + // 是否有下一页 + var hasNextPage: Boolean = false + + // 是否有上一页 + var hasPreviousPage: Boolean = false + + // 是否是第一页 + var isFirstPage: Boolean = true + + // 是否是最后一页 + var isLastPage: Boolean = false + + /** + * 转换为项目使用的BaseListBean + * 这是核心方法,用于适配项目中的PageModel + */ + fun toBaseListBean(): BaseListBean { + return BaseListBean().apply { + this.pages = this@PageInfo.pages + this.total = this@PageInfo.total.toInt() + this.list = this@PageInfo.list + } + } +} diff --git a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt index 94a4876..7616eda 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt @@ -35,6 +35,8 @@ import com.lukouguoji.module_base.bean.GjcWaybillDataBean import com.lukouguoji.module_base.bean.GjcWeighingBean import com.lukouguoji.module_base.bean.GjcWeighingRecordBean import com.lukouguoji.module_base.bean.GjcWeighingStatisticsBean +import com.lukouguoji.module_base.bean.GjcMaWb +import com.lukouguoji.module_base.bean.PageInfo import com.lukouguoji.module_base.bean.GjjGoodsBean import com.lukouguoji.module_base.bean.GjjGoodsDetailsBean import com.lukouguoji.module_base.bean.GjjGoodsTypeBean @@ -417,6 +419,20 @@ interface Api { @POST("IntExpCheckInCheck/pageQueryTotal") suspend fun getGjcInspectionTotal(@Body data: RequestBody): BaseResultBean + /** + * 国际出港查询-分页查询 + * 接口路径: /IntExpSearch/pageQuery + */ + @POST("IntExpSearch/pageQuery") + suspend fun getGjcQueryList(@Body data: RequestBody): BaseResultBean> + + /** + * 国际出港查询-分页合计统计 + * 接口路径: /IntExpSearch/pageQueryTotal + */ + @POST("IntExpSearch/pageQueryTotal") + suspend fun getGjcQueryTotal(@Body data: RequestBody): BaseResultBean + /** * 国际出港板箱过磅-分页搜索 * 接口路径: /IntExpWeighting/pageQuery diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcQueryActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcQueryActivity.kt new file mode 100644 index 0000000..bff7fca --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcQueryActivity.kt @@ -0,0 +1,48 @@ +package com.lukouguoji.gjc.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import com.alibaba.android.arouter.facade.annotation.Route +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.ActivityGjcQueryBinding +import com.lukouguoji.gjc.viewModel.GjcQueryViewModel +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.ktx.getLifecycleOwner +import com.lukouguoji.module_base.router.ARouterConstants + +/** + * 国际出港查询列表页 + */ +@Route(path = ARouterConstants.ACTIVITY_URL_GJC_QUERY_LIST) +class GjcQueryActivity : + BaseBindingActivity() { + + override fun layoutId() = R.layout.activity_gjc_query + + override fun viewModelClass() = GjcQueryViewModel::class.java + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow("国际出港查询") + + binding.viewModel = viewModel + + // 绑定分页逻辑 + viewModel.pageModel + .bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, getLifecycleOwner()) + + // 初始化代理列表 + viewModel.initAgentList() + + // 初始加载 + viewModel.refresh() + } + + companion object { + @JvmStatic + fun start(context: Context) { + val starter = Intent(context, GjcQueryActivity::class.java) + context.startActivity(starter) + } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcQueryListActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcQueryListActivity.kt index 3e8147e..6ee256b 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcQueryListActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcQueryListActivity.kt @@ -30,7 +30,7 @@ import com.scwang.smart.refresh.layout.api.RefreshLayout import java.text.SimpleDateFormat import java.util.* -@Route(path = ARouterConstants.ACTIVITY_URL_GJC_QUERY_LIST) +//@Route(path = ARouterConstants.ACTIVITY_URL_GJC_QUERY_LIST) class GjcQueryListActivity : BaseActivity(), View.OnClickListener { private val currentTitleName = "国际出港查询" diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/dialog/GjcQueryFilterDialogModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/dialog/GjcQueryFilterDialogModel.kt new file mode 100644 index 0000000..fa8e36b --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/dialog/GjcQueryFilterDialogModel.kt @@ -0,0 +1,83 @@ +package com.lukouguoji.gjc.dialog + +import android.content.Context +import android.view.View +import android.widget.TextView +import androidx.lifecycle.MutableLiveData +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.DialogGjcQueryFilterBinding +import com.lukouguoji.module_base.base.BaseDialogModel +import com.lxj.xpopup.XPopup +import dev.utils.app.ScreenUtils +import dev.utils.app.info.KeyValue + +/** + * 国际出港查询筛选抽屉 + */ +class GjcQueryFilterDialogModel( + val spCode: MutableLiveData, // 特码 + val dest: MutableLiveData, // 目的港 + val awbType: MutableLiveData, // 运单类型 + val businessType: MutableLiveData, // 业务类型 + val goodsCn: MutableLiveData, // 品名(中) + private val onConfirm: () -> Unit +) : BaseDialogModel(DIALOG_TYPE_DRAWER) { + + // 运单类型列表 + val awbTypeList = MutableLiveData( + listOf( + KeyValue("全部", ""), + KeyValue("主单", "1"), + KeyValue("分单", "2") + ) + ) + + // 业务类型列表 + val businessTypeList = MutableLiveData( + listOf( + KeyValue("全部", ""), + KeyValue("普货", "1"), + KeyValue("特货", "2") + ) + ) + + override fun layoutId() = R.layout.dialog_gjc_query_filter + + override fun onBuild(builder: XPopup.Builder) { + super.onBuild(builder) + // 设置抽屉宽度为屏幕宽度的1/3 + builder.maxWidth((ScreenUtils.getScreenWidth() / 3.0).toInt()) + } + + override fun onDialogCreated(context: Context) { + binding.model = this + binding.lifecycleOwner = context as? androidx.lifecycle.LifecycleOwner + + // 设置标题 + binding.root.findViewById(R.id.title_name)?.text = "筛选条件" + + // 返回按钮 + binding.root.findViewById(R.id.tool_back)?.setOnClickListener { + dismiss() + } + } + + /** + * 重置筛选条件 + */ + fun onResetClick() { + spCode.value = "" + dest.value = "" + awbType.value = "" + businessType.value = "" + goodsCn.value = "" + } + + /** + * 确认筛选 + */ + fun onConfirmClick() { + dismiss() + onConfirm() + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcQueryViewHolder.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcQueryViewHolder.kt new file mode 100644 index 0000000..6254618 --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcQueryViewHolder.kt @@ -0,0 +1,27 @@ +package com.lukouguoji.gjc.holder + +import android.view.View +import com.lukouguoji.gjc.databinding.ItemGjcQueryBinding +import com.lukouguoji.module_base.base.BaseViewHolder +import com.lukouguoji.module_base.bean.GjcMaWb + +/** + * 国际出港查询列表ViewHolder + */ +class GjcQueryViewHolder(view: View) : + BaseViewHolder(view) { + + override fun onBind(item: Any?, position: Int) { + val bean = getItemBean(item)!! + binding.bean = bean + + // 立即更新UI(避免闪烁) + binding.executePendingBindings() + + // 整行点击事件(暂时不跳转详情页) + // binding.ll.setOnClickListener { + // // 后续可添加详情页跳转 + // // GjcQueryDetailsActivity.start(it.context, bean.maWbId) + // } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcQueryViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcQueryViewModel.kt new file mode 100644 index 0000000..2e07ab2 --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcQueryViewModel.kt @@ -0,0 +1,186 @@ +package com.lukouguoji.gjc.viewModel + +import android.app.Activity +import android.content.Intent +import androidx.lifecycle.MutableLiveData +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.dialog.GjcQueryFilterDialogModel +import com.lukouguoji.gjc.holder.GjcQueryViewHolder +import com.lukouguoji.module_base.base.BasePageViewModel +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.http.net.NetApply +import com.lukouguoji.module_base.ktx.launchCollect +import com.lukouguoji.module_base.ktx.launchLoadingCollect +import com.lukouguoji.module_base.ktx.showToast +import com.lukouguoji.module_base.ktx.toRequestBody +import com.lukouguoji.module_base.model.ScanModel +import dev.utils.app.info.KeyValue + +/** + * 国际出港查询ViewModel + */ +class GjcQueryViewModel : BasePageViewModel() { + + // ==================== 搜索条件 ==================== + val flightDateStart = MutableLiveData("") // 航班日期起 + val flightDateEnd = MutableLiveData("") // 航班日期止 + val agentId = MutableLiveData("") // 代理ID + val outStatus = MutableLiveData("") // 出库状态 + val waybillNo = MutableLiveData("") // 运单号 + + // ==================== 下拉列表 ==================== + // 代理下拉列表(从API获取) + val agentList = MutableLiveData(listOf(KeyValue("全部", ""))) + + // 出库状态下拉列表 + val outStatusList = MutableLiveData( + listOf( + KeyValue("全部", ""), + KeyValue("未出库", "0"), + KeyValue("已出库", "1") + ) + ) + + // ==================== 适配器配置 ==================== + val itemViewHolder = GjcQueryViewHolder::class.java + val itemLayoutId = R.layout.item_gjc_query + + // ==================== 统计数据 ==================== + val totalCount = MutableLiveData("0") // 合计票数 + val totalPc = MutableLiveData("0") // 总件数 + val totalWeight = MutableLiveData("0") // 总重量 + + // ==================== 筛选条件(预留)==================== + val spCode = MutableLiveData("") // 特码 + val dest = MutableLiveData("") // 目的港 + val awbType = MutableLiveData("") // 运单类型 + val businessType = MutableLiveData("") // 业务类型 + val goodsCn = MutableLiveData("") // 品名(中) + + /////////////////////////////////////////////////////////////////////////// + // 方法区 + /////////////////////////////////////////////////////////////////////////// + + /** + * 扫码输入运单号 + */ + fun waybillScanClick() { + ScanModel.startScan(getTopActivity(), Constant.RequestCode.WAYBILL) + } + + /** + * 搜索按钮点击 + */ + fun searchClick() { + refresh() + } + + /** + * 筛选按钮点击 + */ + fun filterClick() { + val filterDialog = GjcQueryFilterDialogModel( + spCode = spCode, + dest = dest, + awbType = awbType, + businessType = businessType, + goodsCn = goodsCn, + onConfirm = { refresh() } + ) + filterDialog.show() + } + + /** + * 获取列表数据 + * 核心方法:调用API获取数据并转换PageInfo为BaseListBean + */ + override fun getData() { + // 构建查询参数(列表接口) + val listParams = mapOf( + "pageNum" to pageModel.page, + "pageSize" to pageModel.limit, + "fdateStart" to flightDateStart.value!!.ifEmpty { null }, + "fdateEnd" to flightDateEnd.value!!.ifEmpty { null }, + "agentCode" to agentId.value!!.ifEmpty { null }, + "outState" to outStatus.value!!.ifEmpty { null }, + "wbNo" to waybillNo.value!!.ifEmpty { null }, + // 筛选条件(暂未使用) + "spCode" to spCode.value!!.ifEmpty { null }, + "dest" to dest.value!!.ifEmpty { null }, + "awbType" to awbType.value!!.ifEmpty { null }, + "businessType" to businessType.value!!.ifEmpty { null }, + "goodsCn" to goodsCn.value!!.ifEmpty { null } + ).toRequestBody() + + // 构建查询参数(统计接口 - 使用相同的搜索条件) + val totalParams = mapOf( + "fdateStart" to flightDateStart.value!!.ifEmpty { null }, + "fdateEnd" to flightDateEnd.value!!.ifEmpty { null }, + "agentCode" to agentId.value!!.ifEmpty { null }, + "outState" to outStatus.value!!.ifEmpty { null }, + "wbNo" to waybillNo.value!!.ifEmpty { null }, + // 筛选条件 + "spCode" to spCode.value!!.ifEmpty { null }, + "dest" to dest.value!!.ifEmpty { null }, + "awbType" to awbType.value!!.ifEmpty { null }, + "businessType" to businessType.value!!.ifEmpty { null }, + "goodsCn" to goodsCn.value!!.ifEmpty { null } + ).toRequestBody() + + // 获取列表数据(显示loading) + launchLoadingCollect({ + NetApply.api.getGjcQueryList(listParams) + }) { + onSuccess = { result -> + val pageInfo = result.data + if (pageInfo != null) { + // ⚠️ 核心:使用toBaseListBean()转换PageInfo为BaseListBean + pageModel.handleListBean(pageInfo.toBaseListBean()) + } + } + } + + // 获取统计数据(后台调用,不显示loading) + launchCollect({ + NetApply.api.getGjcQueryTotal(totalParams) + }) { + onSuccess = { result -> + val data = result.data + totalCount.value = (data?.wbNumber ?: 0).toString() + totalPc.value = (data?.totalPc ?: 0).toString() + totalWeight.value = (data?.totalWeight ?: 0.0).toString() + } + } + } + + /** + * 处理扫码结果 + */ + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (resultCode == Activity.RESULT_OK && data != null) { + when (requestCode) { + Constant.RequestCode.WAYBILL -> { + waybillNo.value = data.getStringExtra(Constant.Result.CODED_CONTENT) + refresh() + } + } + } + } + + /** + * 初始化代理下拉列表(从API获取) + */ + fun initAgentList() { + launchCollect({ + NetApply.api.getIntExpAgentList() + }) { + onSuccess = { result -> + val list = mutableListOf(KeyValue("全部", "")) + result.data?.forEach { + list.add(KeyValue(it.name ?: "", it.code ?: "")) + } + agentList.value = list + } + } + } +} diff --git a/module_gjc/src/main/res/layout/activity_gjc_query.xml b/module_gjc/src/main/res/layout/activity_gjc_query.xml new file mode 100644 index 0000000..6a94371 --- /dev/null +++ b/module_gjc/src/main/res/layout/activity_gjc_query.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjc/src/main/res/layout/dialog_gjc_query_filter.xml b/module_gjc/src/main/res/layout/dialog_gjc_query_filter.xml new file mode 100644 index 0000000..7505884 --- /dev/null +++ b/module_gjc/src/main/res/layout/dialog_gjc_query_filter.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjc/src/main/res/layout/item_gjc_query.xml b/module_gjc/src/main/res/layout/item_gjc_query.xml new file mode 100644 index 0000000..81c1906 --- /dev/null +++ b/module_gjc/src/main/res/layout/item_gjc_query.xml @@ -0,0 +1,280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +