Commit 7dbeeca4 authored by chengkun's avatar chengkun

Merge branch 'feature/dev_fight_order' of...

Merge branch 'feature/dev_fight_order' of https://git.yidian-inc.com:8021/bp/ShenghuoquanBusiness into feature/dev_fight_order
parents 2144cd23 343847af
...@@ -12,9 +12,9 @@ class XBirdPageConstants { ...@@ -12,9 +12,9 @@ class XBirdPageConstants {
// 商品 - 发布商品地址,需要和config.json中的name一致 // 商品 - 发布商品地址,需要和config.json中的name一致
const val COMMODITY_PUBLISH_COMMODITY = "xbrid_b_coupon_publish" const val COMMODITY_PUBLISH_COMMODITY = "xbrid_b_coupon_publish"
// 拼单 - 首页 // 拼单 - 首页
const val FIGHT_ORDER_HOME_PAGE = "xbrid_b_group-meal-home" const val FIGHT_ORDER_HOME_PAGE = "xbrid_pindan_group-meal-home"
// 拼单 - 活动详情 // 拼单 - 活动详情
const val FIGHT_ORDER_EVENT_DETAILS = "xbrid_b_group-meal-detail" const val FIGHT_ORDER_EVENT_DETAILS = "xbrid_pindan_group-meal-detail"
} }
} }
...@@ -30,8 +30,6 @@ class XEventConfig { ...@@ -30,8 +30,6 @@ class XEventConfig {
const val SEARCH_PICKUP_POINT_CANCEL = "search_pickup_point_cancel" const val SEARCH_PICKUP_POINT_CANCEL = "search_pickup_point_cancel"
// 开始搜索自提点 // 开始搜索自提点
const val SEARCH_PICKUP_POINT_START = "search_pickup_point_start" const val SEARCH_PICKUP_POINT_START = "search_pickup_point_start"
// 申请退款成功
const val APPLY_REFUND_SUCCESS = "apply_refund_success"
// C端登录成功 // C端登录成功
const val CLIENT_C_LOGIN_SUCCESS = "client_c_login_success" const val CLIENT_C_LOGIN_SUCCESS = "client_c_login_success"
} }
......
...@@ -163,6 +163,21 @@ class XRouterPathConstants { ...@@ -163,6 +163,21 @@ class XRouterPathConstants {
// 订单 — 订单列表 // 订单 — 订单列表
const val ORDER_LIST_ACTIVITY = "/b/user_order/order_list" const val ORDER_LIST_ACTIVITY = "/b/user_order/order_list"
/**
* BMerchantOrder组件内的页面
*/
// 商户订单 — 订单中心
const val MERCHANT_ORDER_CENTER_ACTIVITY = "/b/merchant_order/merchant_order_center"
// 商户订单 — 订单列表
const val MERCHANT_ORDER_LIST_ACTIVITY = "/b/merchant_order/merchant_order_list"
// 商户订单 — 订单搜索
const val MERCHANT_ORDER_SEARCH_ACTIVITY = "/b/merchant_order/merchant_order_search"
// 商户订单 — 订单详情
const val MERCHANT_ORDER_DETAILS_ACTIVITY = "/b/merchant_order/merchant_order_details"
/** /**
* C端页面 * C端页面
*/ */
......
...@@ -6,7 +6,6 @@ import android.widget.TextView ...@@ -6,7 +6,6 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import com.yidian.bcommon.R import com.yidian.bcommon.R
import com.yidian.xpage.XPageManager
fun Activity.hideKeyBoard(): Boolean { fun Activity.hideKeyBoard(): Boolean {
val mInputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager val mInputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
...@@ -24,7 +23,7 @@ fun AppCompatActivity.initTitleBar(toolbar: Toolbar, textView: TextView, title: ...@@ -24,7 +23,7 @@ fun AppCompatActivity.initTitleBar(toolbar: Toolbar, textView: TextView, title:
it.setDisplayHomeAsUpEnabled(true) it.setDisplayHomeAsUpEnabled(true)
it.setDisplayShowHomeEnabled(true) it.setDisplayShowHomeEnabled(true)
} }
toolbar.setNavigationIcon(R.drawable.icon_back) toolbar.setNavigationIcon(R.drawable.bcommon_icon_back)
toolbar.setNavigationOnClickListener { toolbar.setNavigationOnClickListener {
onBackPressed() onBackPressed()
} }
......
...@@ -78,7 +78,7 @@ class CommonTopBarView @JvmOverloads constructor( ...@@ -78,7 +78,7 @@ class CommonTopBarView @JvmOverloads constructor(
viewBinding.ivBack.setImageResource( viewBinding.ivBack.setImageResource(
typeArray.getResourceId( typeArray.getResourceId(
R.styleable.CommonTopBarView_CommonTopBarView_back_img, R.styleable.CommonTopBarView_CommonTopBarView_back_img,
R.drawable.icon_back R.drawable.bcommon_icon_back
) )
) )
// 设置横向内边距 // 设置横向内边距
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
android:paddingStart="@dimen/dp15" android:paddingStart="@dimen/dp15"
android:paddingEnd="@dimen/dp15" android:paddingEnd="@dimen/dp15"
app:layout_scrollFlags="scroll|enterAlways" app:layout_scrollFlags="scroll|enterAlways"
app:navigationIcon="@drawable/icon_back"> app:navigationIcon="@drawable/bcommon_icon_back">
<TextView <TextView
android:id="@+id/tv_title" android:id="@+id/tv_title"
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
android:paddingStart="@dimen/dp15" android:paddingStart="@dimen/dp15"
android:paddingEnd="@dimen/dp15" android:paddingEnd="@dimen/dp15"
app:layout_scrollFlags="scroll|enterAlways" app:layout_scrollFlags="scroll|enterAlways"
app:navigationIcon="@drawable/icon_back"> app:navigationIcon="@drawable/bcommon_icon_back">
<TextView <TextView
android:id="@+id/tv_title" android:id="@+id/tv_title"
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="@dimen/dp5" android:padding="@dimen/dp5"
android:src="@drawable/icon_back" android:src="@drawable/bcommon_icon_back"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
......
/build
\ No newline at end of file
if (rootProject.ext.android.isApplication) {
apply plugin: 'com.android.application'
apply plugin: 'yac-engine'
} else {
apply plugin: 'com.android.library'
}
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-parcelize'
rootProject.ext.artifact_id = 'merchantOrder'
apply from:'../../publish.gradle'
android {
compileSdkVersion build_versions.compileSdkVersion
defaultConfig {
if (rootProject.ext.android.isApplication) {
applicationId "com.yidian.shenghuoquan.bmerchantorder"
}
minSdkVersion build_versions.minSdkVersion
targetSdkVersion build_versions.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main {
if (rootProject.ext.android.isApplication) {
manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
buildFeatures {
viewBinding true
dataBinding true
}
kapt {
generateStubs = true
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
rootProject.ext.dependencies.other.each {
implementation project(it)
}
compileOnly rootProject.ext.dependencies.privateImplementation
testImplementation rootProject.ext.dependencies.testImplementation
androidTestImplementation rootProject.ext.dependencies.androidTestImplementation
}
\ No newline at end of file
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
\ No newline at end of file
package com.yidian.shenghuoquan.bmerchantorder
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.yidian.shenghuoquan.bmerchantorder.test", appContext.packageName)
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yidian.shenghuoquan.bmerchantorder">
<application>
<activity
android:name=".ui.MerchantOrderCenterActivity"
android:theme="@style/AppTheme" />
</application>
</manifest>
\ No newline at end of file
package com.yidian.shenghuoquan.bmerchantorder.app
import android.content.Intent
import com.yidian.bcommon.app.YdBaseApplication
import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.news.util.ProcessUtil
import com.yidian.xpage.XPageManager
import com.yidian.xpage.node.XPageHandler
import com.yidian.xpage.node.XPageNode
import com.yidian.xpage.node.XPageNodePageType
import com.yidian.yac.core.core.YacModuleSpec
@YacModuleSpec
class BMerchantOrderApplication: YdBaseApplication() {
override fun onCreate() {
super.onCreate()
if (ProcessUtil.isMainProcess(this)) {
registerXPage()
initService()
}
}
private fun initService() {
}
private fun registerXPage() {
ClassMapUtil.xPageNodeMap.forEach {
val node = XPageNode(it.key, XPageNodePageType.NATIVE, object : XPageHandler {
override fun handler(params: Map<String, Any?>?) {
val intent = Intent()
if (params != null) {
intent.putExtra(XRouterPathConstants.ParamsKey, params as HashMap)
}
intent.setClass(context, it.value)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
}
})
XPageManager.registeredNode(node)
}
}
}
package com.yidian.shenghuoquan.bmerchantorder.app
import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.shenghuoquan.bmerchantorder.ui.MerchantOrderCenterActivity
/**
* 注册XPageNode工具类
*/
object ClassMapUtil {
val xPageNodeMap = mapOf(
XRouterPathConstants.Companion.MERCHANT_ORDER_CENTER_ACTIVITY to MerchantOrderCenterActivity::class.java,
// XRouterPathConstants.Companion.MERCHANT_ORDER_LIST_ACTIVITY to OrderDetailActivity::class.java,
// XRouterPathConstants.Companion.MERCHANT_ORDER_SEARCH_ACTIVITY to SelectPickupPointActivity::class.java,
// XRouterPathConstants.Companion.MERCHANT_ORDER_DETAILS_ACTIVITY to OrderListActivity::class.java,
)
}
package com.yidian.shenghuoquan.bmerchantorder.ui
import androidx.activity.viewModels
import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.shenghuoquan.bmerchantorder.R
import com.yidian.shenghuoquan.bmerchantorder.databinding.BmerchantorderActivityMerchantOrderCenterBinding
import com.yidian.shenghuoquan.bmerchantorder.viewmodel.MerchantOrderCenterViewModel
import com.yidian.xpage.XPageViewProtocol
/**
* 商户订单中心
*/
class MerchantOrderCenterActivity : BaseMvvmActivity<BmerchantorderActivityMerchantOrderCenterBinding, MerchantOrderCenterViewModel>(),
XPageViewProtocol {
override val layoutId: Int = R.layout.bmerchantorder_activity_merchant_order_center
override val vm: MerchantOrderCenterViewModel by viewModels()
override fun getXPageName(): String {
return XRouterPathConstants.MERCHANT_ORDER_CENTER_ACTIVITY
}
override fun initView() {
}
}
package com.yidian.shenghuoquan.bmerchantorder.viewmodel
import com.yidian.bcommon.mvvm.BaseViewModel
class MerchantOrderCenterViewModel : BaseViewModel() {
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yidian.shenghuoquan.bmerchantorder">
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="vm"
type="com.yidian.shenghuoquan.bmerchantorder.viewmodel.MerchantOrderCenterViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>
\ No newline at end of file
package com.yidian.shenghuoquan.bmerchantorder
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}
...@@ -11,7 +11,7 @@ import com.yidian.xpage.node.XPageNodePageType ...@@ -11,7 +11,7 @@ import com.yidian.xpage.node.XPageNodePageType
import com.yidian.yac.core.core.YacModuleSpec import com.yidian.yac.core.core.YacModuleSpec
@YacModuleSpec @YacModuleSpec
class BOrderApplication: YdBaseApplication() { class BUserOrderApplication: YdBaseApplication() {
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
......
...@@ -52,6 +52,8 @@ data class CouponDto( ...@@ -52,6 +52,8 @@ data class CouponDto(
*/ */
@Parcelize @Parcelize
data class GoodsDto( data class GoodsDto(
@SerializedName("goods_sku_id")
val goodsSkuId: String? = null,
@SerializedName("goods_name")// 商品名称 @SerializedName("goods_name")// 商品名称
val goodsName: String? = null, val goodsName: String? = null,
@SerializedName("price") // 商品价格 @SerializedName("price") // 商品价格
......
...@@ -130,7 +130,9 @@ data class MergeOrderItem( ...@@ -130,7 +130,9 @@ data class MergeOrderItem(
@SerializedName("goods_num") @SerializedName("goods_num")
val goodsNum: Int, val goodsNum: Int,
@SerializedName("price") @SerializedName("price")
val price: Double val price: Double,
@SerializedName("goods_sku_id")
val goodsSkuId: String,
) )
data class OrderItem( data class OrderItem(
......
...@@ -102,6 +102,7 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding, ...@@ -102,6 +102,7 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding,
map[IntentConstants.KEY_EXTRA_PICKUP_POINT_ID] = it map[IntentConstants.KEY_EXTRA_PICKUP_POINT_ID] = it
map[IntentConstants.KEY_EXTRA_MARKETING_ID] = id map[IntentConstants.KEY_EXTRA_MARKETING_ID] = id
XPageManager.push(XRouterPathConstants.PICKUP_POINT_ACTIVITY, map) XPageManager.push(XRouterPathConstants.PICKUP_POINT_ACTIVITY, map)
vm.commitClickBuriedPoint(2)
} }
} }
vm.toOrderDetailEvent.observe(this) { vm.toOrderDetailEvent.observe(this) {
...@@ -178,7 +179,7 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding, ...@@ -178,7 +179,7 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding,
override fun onDoBack() { override fun onDoBack() {
// 返回按钮 // 返回按钮
vm.commitBackBuriedPoint() vm.commitClickBuriedPoint(1)
XPageManager.pop(null) XPageManager.pop(null)
} }
......
package com.yidian.shenghuoquan.buserorder.ui package com.yidian.shenghuoquan.buserorder.ui
import android.os.Bundle
import androidx.activity.viewModels import androidx.activity.viewModels
import com.yidian.bcommon.constant.IntentConstants import com.yidian.bcommon.constant.IntentConstants
import com.yidian.bcommon.constant.XEventConfig
import com.yidian.bcommon.constant.XRouterPathConstants import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.mvvm.BaseMvvmActivity import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.bcommon.widget.CommonTopBarView
import com.yidian.shenghuoquan.buserorder.R import com.yidian.shenghuoquan.buserorder.R
import com.yidian.shenghuoquan.buserorder.databinding.BorderActivityOrderDetailBinding import com.yidian.shenghuoquan.buserorder.databinding.BorderActivityOrderDetailBinding
import com.yidian.shenghuoquan.buserorder.manager.OrderStatusManager import com.yidian.shenghuoquan.buserorder.manager.OrderStatusManager
import com.yidian.shenghuoquan.buserorder.ui.widget.OrderCommodityInfoView
import com.yidian.shenghuoquan.buserorder.ui.widget.OrderPickupPointInfoView
import com.yidian.shenghuoquan.buserorder.viewmodel.OrderDetailViewModel import com.yidian.shenghuoquan.buserorder.viewmodel.OrderDetailViewModel
import com.yidian.xarc.xevent.XBaseEvent import com.yidian.xpage.XPageManager
import com.yidian.xarc.xevent.XEventManager
import com.yidian.xpage.XPageViewProtocol import com.yidian.xpage.XPageViewProtocol
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/** /**
* author: yinjiacheng * author: yinjiacheng
* date: 2021/8/21 09:29 * date: 2021/8/21 09:29
* description: 订单详情页 * description: 订单详情页
*/ */
class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, OrderDetailViewModel>(), XPageViewProtocol { class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, OrderDetailViewModel>(), XPageViewProtocol,
CommonTopBarView.OnCommonTopBarBackCallback, OrderPickupPointInfoView.OnOrderPickupPointInfoCallback,
OrderCommodityInfoView.OnOrderCommodityInfoCallback {
override val layoutId: Int = R.layout.border_activity_order_detail override val layoutId: Int = R.layout.border_activity_order_detail
override val vm: OrderDetailViewModel by viewModels() override val vm: OrderDetailViewModel by viewModels()
...@@ -41,17 +41,8 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O ...@@ -41,17 +41,8 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O
return XRouterPathConstants.ORDER_DETAIL_ACTIVITY return XRouterPathConstants.ORDER_DETAIL_ACTIVITY
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
XEventManager.register(this)
}
override fun onDestroy() {
super.onDestroy()
XEventManager.unRegister(this)
}
override fun initView() { override fun initView() {
binding.bvTopBar.setOnCommonTopBarCallback(this, null)
initSmartRefresh() initSmartRefresh()
vm.orderDetailData.observe(this, { vm.orderDetailData.observe(this, {
// 结束刷新 // 结束刷新
...@@ -61,9 +52,9 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O ...@@ -61,9 +52,9 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O
val status = OrderStatusManager.getOrderStatus(it.orderStatus) val status = OrderStatusManager.getOrderStatus(it.orderStatus)
// 更新UI // 更新UI
binding.svOrderStatus.setOrderStatus(status, it) binding.svOrderStatus.setOrderStatus(status, it)
binding.pvPickupPointInfo.setPickupPoint(it.placeList) binding.pvPickupPointInfo.setPickupPoint(it.placeList, this)
binding.ivConsigneeInfo.setConsigneeInfo(status, it.orderShippingInfo) binding.ivConsigneeInfo.setConsigneeInfo(status, it.orderShippingInfo)
binding.ivCommodityInfo.setCommodityInfo(status, it) binding.ivCommodityInfo.setCommodityInfo(status, it, this)
binding.ivOrderInfo.setOrderInfo(status, it) binding.ivOrderInfo.setOrderInfo(status, it)
}) })
binding.rlOrderDetail.autoRefresh() binding.rlOrderDetail.autoRefresh()
...@@ -78,13 +69,25 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O ...@@ -78,13 +69,25 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O
} }
} }
@Subscribe(sticky = false, threadMode = ThreadMode.MAIN) override fun onDoBack() {
fun onEvent(event: XBaseEvent?) { vm.commitWidgetBuriedPoint("return_key")
when (event?.name) { XPageManager.pop(null)
XEventConfig.APPLY_REFUND_SUCCESS -> { }
// 申请退款成功 刷新页面
binding.rlOrderDetail.autoRefresh() override fun onContractPickupPoint() {
} vm.commitWidgetBuriedPoint("call_up")
} }
override fun onGotoMarketingDetail() {
vm.commitWidgetBuriedPoint("activity_icon")
}
override fun onApplyRefundSuccess() {
// 申请退款成功 刷新页面
binding.rlOrderDetail.autoRefresh()
}
override fun onContractSeller() {
vm.commitWidgetBuriedPoint("contact_seller")
} }
} }
...@@ -33,7 +33,7 @@ class OrderListActivity : BaseMvvmActivity<BorderActivityOrderListBinding, Order ...@@ -33,7 +33,7 @@ class OrderListActivity : BaseMvvmActivity<BorderActivityOrderListBinding, Order
override fun initView() { override fun initView() {
initTitleBar(binding.orderListToolbar, binding.tvTitle, "参与的") initTitleBar(binding.orderListToolbar, binding.tvTitle, "参与的")
SystemBarUtils.setStatusBarTextColorBlack(this) SystemBarUtils.setStatusBarTextColorBlack(this)
binding.orderListToolbar.setNavigationIcon(R.drawable.icon_back) binding.orderListToolbar.setNavigationIcon(R.drawable.bcommon_icon_back)
initRecycleView() initRecycleView()
initClickEvent() initClickEvent()
} }
......
...@@ -12,7 +12,8 @@ import androidx.fragment.app.FragmentActivity ...@@ -12,7 +12,8 @@ import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.tbruyelle.rxpermissions3.RxPermissions import com.tbruyelle.rxpermissions3.RxPermissions
import com.yidian.bcommon.constant.XEventConfig import com.yidian.bcommon.constant.XBirdPageConstants
import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.utils.ToastUtils import com.yidian.bcommon.utils.ToastUtils
import com.yidian.bcommon.widget.CommonHintDialog import com.yidian.bcommon.widget.CommonHintDialog
import com.yidian.shenghuoquan.buserorder.R import com.yidian.shenghuoquan.buserorder.R
...@@ -21,8 +22,7 @@ import com.yidian.shenghuoquan.buserorder.databinding.BorderViewOrderCommodityIn ...@@ -21,8 +22,7 @@ import com.yidian.shenghuoquan.buserorder.databinding.BorderViewOrderCommodityIn
import com.yidian.shenghuoquan.buserorder.dto.OrderDetailDto import com.yidian.shenghuoquan.buserorder.dto.OrderDetailDto
import com.yidian.shenghuoquan.buserorder.manager.OrderStatus import com.yidian.shenghuoquan.buserorder.manager.OrderStatus
import com.yidian.shenghuoquan.buserorder.viewmodel.OrderCommodityInfoViewModel import com.yidian.shenghuoquan.buserorder.viewmodel.OrderCommodityInfoViewModel
import com.yidian.xarc.xevent.XBaseEvent import com.yidian.xpage.XPageManager
import com.yidian.xarc.xevent.XEventManager
/** /**
* author: yinjiacheng * author: yinjiacheng
...@@ -41,6 +41,7 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs: ...@@ -41,6 +41,7 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
) )
private val adapter by lazy { OrderDetailCommodityListAdapter(null) } private val adapter by lazy { OrderDetailCommodityListAdapter(null) }
private val vm by lazy { OrderCommodityInfoViewModel() } private val vm by lazy { OrderCommodityInfoViewModel() }
private var callback: OnOrderCommodityInfoCallback? = null
init { init {
initRecycleView() initRecycleView()
...@@ -75,8 +76,8 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs: ...@@ -75,8 +76,8 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
vm.applyRefundResult.observe(context as LifecycleOwner, { vm.applyRefundResult.observe(context as LifecycleOwner, {
if (it) { if (it) {
ToastUtils.showShortSafe("已申请退款") ToastUtils.showShortSafe("已申请退款")
// 刷新页面 // 回调申请退款成功
XEventManager.post(XBaseEvent(XEventConfig.APPLY_REFUND_SUCCESS, null)) callback?.onApplyRefundSuccess()
} }
}) })
// 监听点击联系卖家 // 监听点击联系卖家
...@@ -91,6 +92,15 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs: ...@@ -91,6 +92,15 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
ToastUtils.showShortSafe("请在设置里同意相关权限") ToastUtils.showShortSafe("请在设置里同意相关权限")
} }
} }
// 回调联系卖家
callback?.onContractSeller()
})
// 监听点击跳转活动详情页
vm.gotoMarketingDetail.observe(context as LifecycleOwner, {
val pageUrl = XBirdPageConstants.FIGHT_ORDER_EVENT_DETAILS + "?marketing_id=${it}"
XPageManager.push(XRouterPathConstants.COMMON_WEB_VIEW_ACTIVITY, hashMapOf(Pair(XBirdPageConstants.PAGE_URL, pageUrl)))
// 回调跳转活动详情
callback?.onGotoMarketingDetail()
}) })
} }
...@@ -99,10 +109,28 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs: ...@@ -99,10 +109,28 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
* @param status 订单状态 确认订单时固定传ORDER_STATUS_WAIT_PAY * @param status 订单状态 确认订单时固定传ORDER_STATUS_WAIT_PAY
* @param info 商品信息 * @param info 商品信息
*/ */
fun setCommodityInfo(status: OrderStatus, info: OrderDetailDto) { fun setCommodityInfo(status: OrderStatus, info: OrderDetailDto, callback: OnOrderCommodityInfoCallback?) {
binding.vm = vm binding.vm = vm
binding.status = status binding.status = status
binding.data = info binding.data = info
this.callback = callback
adapter.updateData(info.mergeOrderItemList) adapter.updateData(info.mergeOrderItemList)
} }
interface OnOrderCommodityInfoCallback {
/**
* 跳转活动详情
*/
fun onGotoMarketingDetail()
/**
* 申请退款成功
*/
fun onApplyRefundSuccess()
/**
* 联系卖家
*/
fun onContractSeller()
}
} }
...@@ -33,6 +33,7 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs ...@@ -33,6 +33,7 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs
true true
) )
private val vm by lazy { OrderPickupPointViewModel() } private val vm by lazy { OrderPickupPointViewModel() }
private var callback: OnOrderPickupPointInfoCallback? = null
init { init {
registerUIEvent() registerUIEvent()
...@@ -54,6 +55,7 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs ...@@ -54,6 +55,7 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs
ToastUtils.showShortSafe("请在设置里同意相关权限") ToastUtils.showShortSafe("请在设置里同意相关权限")
} }
} }
callback?.onContractPickupPoint()
}) })
} }
...@@ -61,8 +63,16 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs ...@@ -61,8 +63,16 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs
* 设置自提点 * 设置自提点
* @param info 自提点信息 * @param info 自提点信息
*/ */
fun setPickupPoint(info: PlaceList?) { fun setPickupPoint(info: PlaceList?, callback: OnOrderPickupPointInfoCallback?) {
binding.vm = vm binding.vm = vm
binding.data = info binding.data = info
this.callback = callback
}
interface OnOrderPickupPointInfoCallback {
/**
* 联系自提点
*/
fun onContractPickupPoint()
} }
} }
...@@ -5,12 +5,9 @@ import androidx.lifecycle.MutableLiveData ...@@ -5,12 +5,9 @@ import androidx.lifecycle.MutableLiveData
import com.google.gson.Gson import com.google.gson.Gson
import com.yidian.bcommon.mvvm.BaseViewModel import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.bcommon.mvvm.ErrorInfo import com.yidian.bcommon.mvvm.ErrorInfo
import com.yidian.bcommon.services.ZapServiceActionConstants
import com.yidian.bcommon.services.ZapServiceNameConstants
import com.yidian.bcommon.utils.CPointUtils import com.yidian.bcommon.utils.CPointUtils
import com.yidian.shenghuoquan.buserorder.dto.* import com.yidian.shenghuoquan.buserorder.dto.*
import com.yidian.shenghuoquan.buserorder.http.OrderRemoteDataSource import com.yidian.shenghuoquan.buserorder.http.OrderRemoteDataSource
import com.yidian.yac.core.zap.ZapTicket
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
...@@ -197,6 +194,7 @@ class ConfirmOrderViewModel : BaseViewModel() { ...@@ -197,6 +194,7 @@ class ConfirmOrderViewModel : BaseViewModel() {
} }
} }
} }
commitClickBuriedPoint(3)
} }
/** /**
...@@ -240,8 +238,7 @@ class ConfirmOrderViewModel : BaseViewModel() { ...@@ -240,8 +238,7 @@ class ConfirmOrderViewModel : BaseViewModel() {
val skuNameText = StringBuilder() val skuNameText = StringBuilder()
val value = _goodsSuccessEvent.value val value = _goodsSuccessEvent.value
value?.forEachIndexed { index, s -> value?.forEachIndexed { index, s ->
// todo 改成skuID skuIdText.append(s.goodsSkuId)
skuIdText.append(s.goodsName)
skuNameText.append(s.goodsName) skuNameText.append(s.goodsName)
if (index < value.size - 1) { if (index < value.size - 1) {
skuIdText.append(",") skuIdText.append(",")
...@@ -270,9 +267,11 @@ class ConfirmOrderViewModel : BaseViewModel() { ...@@ -270,9 +267,11 @@ class ConfirmOrderViewModel : BaseViewModel() {
} }
/** /**
* 点击返回按钮的埋点 * 点击按钮的埋点
*
* 点击: 1.返回按钮,则上报return_key; 2.选择自提点,则上报self_pick_up_site; 3.立即支付,则上报immediate_payment
*/ */
fun commitBackBuriedPoint() { fun commitClickBuriedPoint(weightKey: Int) {
val jsonObject = JSONObject() val jsonObject = JSONObject()
jsonObject.put("eventName", "CLICK_WIDGET") jsonObject.put("eventName", "CLICK_WIDGET")
val contextJsonObject = JSONObject() val contextJsonObject = JSONObject()
...@@ -286,7 +285,13 @@ class ConfirmOrderViewModel : BaseViewModel() { ...@@ -286,7 +285,13 @@ class ConfirmOrderViewModel : BaseViewModel() {
val entitiesJsonObject = JSONObject() val entitiesJsonObject = JSONObject()
val widgetInfoJsonObject = JSONObject() val widgetInfoJsonObject = JSONObject()
widgetInfoJsonObject.put("widget_type", "BUTTON") widgetInfoJsonObject.put("widget_type", "BUTTON")
widgetInfoJsonObject.put("widget_name", "return_key") var weightName = ""
when (weightKey) {
1 -> weightName = "return_key"
2 -> weightName = "self_pick_up_site"
3 -> weightName = "immediate_payment"
}
widgetInfoJsonObject.put("widget_name", weightName)
entitiesJsonObject.put("widget_info", widgetInfoJsonObject) entitiesJsonObject.put("widget_info", widgetInfoJsonObject)
jsonObject.put("entitiesMap", entitiesJsonObject) jsonObject.put("entitiesMap", entitiesJsonObject)
val propertiesJsonObject = JSONObject() val propertiesJsonObject = JSONObject()
......
...@@ -2,12 +2,9 @@ package com.yidian.shenghuoquan.buserorder.viewmodel ...@@ -2,12 +2,9 @@ package com.yidian.shenghuoquan.buserorder.viewmodel
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.constant.XBirdPageConstants
import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.mvvm.BaseViewModel import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.shenghuoquan.buserorder.http.OrderRemoteDataSource import com.yidian.shenghuoquan.buserorder.http.OrderRemoteDataSource
import com.yidian.shenghuoquan.buserorder.http.callback.IApplyRefundCallback import com.yidian.shenghuoquan.buserorder.http.callback.IApplyRefundCallback
import com.yidian.xpage.XPageManager
/** /**
* author: yinjiacheng * author: yinjiacheng
...@@ -25,6 +22,9 @@ class OrderCommodityInfoViewModel : BaseViewModel() { ...@@ -25,6 +22,9 @@ class OrderCommodityInfoViewModel : BaseViewModel() {
private val _contractSeller = MutableLiveData<String>() private val _contractSeller = MutableLiveData<String>()
val contractSeller: LiveData<String> = _contractSeller val contractSeller: LiveData<String> = _contractSeller
private val _gotoMarketingDetail = MutableLiveData<Long>()
val gotoMarketingDetail: LiveData<Long> = _gotoMarketingDetail
/** /**
* 申请退款 * 申请退款
* @param orderId 订单id * @param orderId 订单id
...@@ -63,7 +63,6 @@ class OrderCommodityInfoViewModel : BaseViewModel() { ...@@ -63,7 +63,6 @@ class OrderCommodityInfoViewModel : BaseViewModel() {
* @param marketingId 活动id * @param marketingId 活动id
*/ */
fun gotoMarketingDetail(marketingId: Long) { fun gotoMarketingDetail(marketingId: Long) {
val pageUrl = XBirdPageConstants.FIGHT_ORDER_EVENT_DETAILS + "?marketing_id=${marketingId}" _gotoMarketingDetail.value = marketingId
XPageManager.push(XRouterPathConstants.COMMON_WEB_VIEW_ACTIVITY, hashMapOf(Pair(XBirdPageConstants.PAGE_URL, pageUrl)))
} }
} }
...@@ -3,9 +3,12 @@ package com.yidian.shenghuoquan.buserorder.viewmodel ...@@ -3,9 +3,12 @@ package com.yidian.shenghuoquan.buserorder.viewmodel
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.mvvm.BaseViewModel import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.bcommon.utils.CPointUtils
import com.yidian.shenghuoquan.buserorder.dto.OrderDetailDto import com.yidian.shenghuoquan.buserorder.dto.OrderDetailDto
import com.yidian.shenghuoquan.buserorder.http.OrderRemoteDataSource import com.yidian.shenghuoquan.buserorder.http.OrderRemoteDataSource
import com.yidian.shenghuoquan.buserorder.http.callback.IGetOrderDetailCallback import com.yidian.shenghuoquan.buserorder.http.callback.IGetOrderDetailCallback
import org.json.JSONObject
import timber.log.Timber
/** /**
* author: yinjiacheng * author: yinjiacheng
...@@ -23,6 +26,11 @@ class OrderDetailViewModel : BaseViewModel() { ...@@ -23,6 +26,11 @@ class OrderDetailViewModel : BaseViewModel() {
fun requestOrderDetail(orderId: String) { fun requestOrderDetail(orderId: String) {
OrderRemoteDataSource.getOrderDetail(object : IGetOrderDetailCallback { OrderRemoteDataSource.getOrderDetail(object : IGetOrderDetailCallback {
override fun getOrderDetailSuccess(result: OrderDetailDto?) { override fun getOrderDetailSuccess(result: OrderDetailDto?) {
if (_orderDetailData.value == null) {
_orderDetailData.value = result
// 订单详情页面曝光埋点只上报一次
commitPageBuriedPoint()
}
_orderDetailData.value = result _orderDetailData.value = result
} }
...@@ -31,4 +39,87 @@ class OrderDetailViewModel : BaseViewModel() { ...@@ -31,4 +39,87 @@ class OrderDetailViewModel : BaseViewModel() {
} }
}, hashMapOf("order_id" to orderId, "business_from" to "2")) }, hashMapOf("order_id" to orderId, "business_from" to "2"))
} }
/**
* 页面浏览的埋点
* 页面可见且有业务数据时上传
*/
private fun commitPageBuriedPoint() {
val data = _orderDetailData.value
// 遍历商品列表
val skuIdStr = StringBuilder()
val skuNameStr = StringBuilder()
data?.mergeOrderItemList?.forEachIndexed { index, item ->
skuIdStr.append(item.goodsSkuId)
skuNameStr.append(item.goodsName)
if (index < data.mergeOrderItemList.size - 1) {
skuIdStr.append(",")
skuNameStr.append(",")
}
}
// 埋点数据包装
val jsonObject = JSONObject()
jsonObject.put("eventName", "EXPOSE_PAGE")
val contextJsonObject = JSONObject()
contextJsonObject.put("page", "ORDER_DETAIL_PAGE")
val smallOrderInfoJsonObject = JSONObject()
smallOrderInfoJsonObject.put("order_id", data?.orderId)
smallOrderInfoJsonObject.put("marketing_id", data?.marketingId)
smallOrderInfoJsonObject.put("marketing_name", data?.marketingName)
smallOrderInfoJsonObject.put("marketing_type", "SPELL_MEAL")
smallOrderInfoJsonObject.put("goods_sku_id", skuIdStr.toString())
smallOrderInfoJsonObject.put("goods_sku_name", skuNameStr.toString())
contextJsonObject.put("small_order_info", smallOrderInfoJsonObject)
jsonObject.put("contextMap", contextJsonObject)
val propertiesJsonObject = JSONObject()
propertiesJsonObject.put("event_id", "SHQNG_R_1628750600250")
jsonObject.put("propertiesMap", propertiesJsonObject)
jsonObject.put("logType", 1)
CPointUtils.performCommitLog(jsonObject)
Timber.tag("BUserOrderBuriedPoint").d("commit order detail page log: $jsonObject")
}
/**
* 点击返回按钮的埋点
*/
fun commitWidgetBuriedPoint(widgetName: String) {
val data = _orderDetailData.value
// 遍历商品列表
val skuIdStr = StringBuilder()
val skuNameStr = StringBuilder()
data?.mergeOrderItemList?.forEachIndexed { index, item ->
skuIdStr.append(item.goodsSkuId)
skuNameStr.append(item.goodsName)
if (index < data.mergeOrderItemList.size - 1) {
skuIdStr.append(",")
skuNameStr.append(",")
}
}
// 埋点数据包装
val jsonObject = JSONObject()
jsonObject.put("eventName", "CLICK_WIDGET")
val contextJsonObject = JSONObject()
contextJsonObject.put("page", "ORDER_DETAIL_PAGE")
val smallOrderInfoJsonObject = JSONObject()
smallOrderInfoJsonObject.put("order_id", data?.orderId)
smallOrderInfoJsonObject.put("marketing_id", data?.marketingId)
smallOrderInfoJsonObject.put("marketing_name", data?.marketingName)
smallOrderInfoJsonObject.put("marketing_type", "SPELL_MEAL")
smallOrderInfoJsonObject.put("goods_sku_id", skuIdStr.toString())
smallOrderInfoJsonObject.put("goods_sku_name", skuNameStr.toString())
contextJsonObject.put("small_order_info", smallOrderInfoJsonObject)
jsonObject.put("contextMap", contextJsonObject)
val entitiesJsonObject = JSONObject()
val widgetInfoJsonObject = JSONObject()
widgetInfoJsonObject.put("widget_type", "BUTTON")
widgetInfoJsonObject.put("widget_name", widgetName)
entitiesJsonObject.put("widget_info", widgetInfoJsonObject)
jsonObject.put("entitiesMap", entitiesJsonObject)
val propertiesJsonObject = JSONObject()
propertiesJsonObject.put("event_id", "SHQNG_R_1628751452736")
jsonObject.put("propertiesMap", propertiesJsonObject)
jsonObject.put("logType", 1)
CPointUtils.performCommitLog(jsonObject)
Timber.tag("BUserOrderBuriedPoint").d("commit order detail widget log: $jsonObject")
}
} }
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
android:paddingStart="@dimen/dp15" android:paddingStart="@dimen/dp15"
android:paddingEnd="@dimen/dp15" android:paddingEnd="@dimen/dp15"
app:layout_scrollFlags="scroll|enterAlways" app:layout_scrollFlags="scroll|enterAlways"
app:navigationIcon="@drawable/icon_back" app:navigationIcon="@drawable/bcommon_icon_back"
android:background="#FFFFFF"> android:background="#FFFFFF">
<TextView <TextView
android:id="@+id/tv_title" android:id="@+id/tv_title"
......
...@@ -89,13 +89,13 @@ class CommonWebViewActivity : BaseMvvmActivity<XbridActivityCommonWebViewBinding ...@@ -89,13 +89,13 @@ class CommonWebViewActivity : BaseMvvmActivity<XbridActivityCommonWebViewBinding
when (pageName) { when (pageName) {
XBirdPageConstants.FIGHT_ORDER_HOME_PAGE -> { XBirdPageConstants.FIGHT_ORDER_HOME_PAGE -> {
binding.commonTopBar.setTitleTextColor(ContextCompat.getColor(this, R.color.white)) binding.commonTopBar.setTitleTextColor(ContextCompat.getColor(this, R.color.white))
binding.commonTopBar.setBackImageResource(R.drawable.icon_back_white) binding.commonTopBar.setBackImageResource(R.drawable.bcommon_icon_back_white)
binding.commonTopBar.setStatusBarColor(ContextCompat.getColor(this, R.color.color_FD7823)) binding.commonTopBar.setStatusBarColor(ContextCompat.getColor(this, R.color.color_FD7823))
binding.commonTopBar.setBgColor(R.color.color_FD7823) binding.commonTopBar.setBgColor(R.color.color_FD7823)
} }
else -> { else -> {
binding.commonTopBar.setTitleTextColor(ContextCompat.getColor(this, R.color.color_333333)) binding.commonTopBar.setTitleTextColor(ContextCompat.getColor(this, R.color.color_333333))
binding.commonTopBar.setBackImageResource(R.drawable.icon_back) binding.commonTopBar.setBackImageResource(R.drawable.bcommon_icon_back)
binding.commonTopBar.setBgColor(R.color.transparent) binding.commonTopBar.setBgColor(R.color.transparent)
} }
} }
......
...@@ -35,7 +35,7 @@ allprojects { ...@@ -35,7 +35,7 @@ allprojects {
ext { ext {
group_id = 'com.yidian.yacmodule.shenghuoquan' group_id = 'com.yidian.yacmodule.shenghuoquan'
artifact_id = '' artifact_id = ''
version_name = '0.0.4-SNAPSHOT' version_name = '0.0.5-SNAPSHOT'
} }
task clean(type: Delete) { task clean(type: Delete) {
......
...@@ -11,3 +11,4 @@ include ':Components:BGeneralBusiness' ...@@ -11,3 +11,4 @@ include ':Components:BGeneralBusiness'
include ':Components:BUserOrder' include ':Components:BUserOrder'
include ':Components:BMediator' include ':Components:BMediator'
include ':Components:BDemo' include ':Components:BDemo'
include ':Components:BMerchantOrder'
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment