Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
ShenghuoquanBusiness
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bp
ShenghuoquanBusiness
Commits
c6be79c1
Commit
c6be79c1
authored
Sep 07, 2021
by
yinjiacheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add 订单详情页埋点
parent
7eb87917
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
173 additions
and
42 deletions
+173
-42
XEventConfig.kt
...src/main/java/com/yidian/bcommon/constant/XEventConfig.kt
+0
-2
OrderDetailDto.kt
.../com/yidian/shenghuoquan/buserorder/dto/OrderDetailDto.kt
+3
-1
OrderDetailActivity.kt
.../yidian/shenghuoquan/buserorder/ui/OrderDetailActivity.kt
+30
-27
OrderCommodityInfoView.kt
...enghuoquan/buserorder/ui/widget/OrderCommodityInfoView.kt
+34
-6
OrderPickupPointInfoView.kt
...ghuoquan/buserorder/ui/widget/OrderPickupPointInfoView.kt
+11
-1
OrderCommodityInfoViewModel.kt
...oquan/buserorder/viewmodel/OrderCommodityInfoViewModel.kt
+4
-5
OrderDetailViewModel.kt
...shenghuoquan/buserorder/viewmodel/OrderDetailViewModel.kt
+91
-0
No files found.
CommonLib/BCommon/src/main/java/com/yidian/bcommon/constant/XEventConfig.kt
View file @
c6be79c1
...
...
@@ -30,8 +30,6 @@ class XEventConfig {
const
val
SEARCH_PICKUP_POINT_CANCEL
=
"search_pickup_point_cancel"
// 开始搜索自提点
const
val
SEARCH_PICKUP_POINT_START
=
"search_pickup_point_start"
// 申请退款成功
const
val
APPLY_REFUND_SUCCESS
=
"apply_refund_success"
// C端登录成功
const
val
CLIENT_C_LOGIN_SUCCESS
=
"client_c_login_success"
}
...
...
Components/BUserOrder/src/main/java/com/yidian/shenghuoquan/buserorder/dto/OrderDetailDto.kt
View file @
c6be79c1
...
...
@@ -130,7 +130,9 @@ data class MergeOrderItem(
@SerializedName
(
"goods_num"
)
val
goodsNum
:
Int
,
@SerializedName
(
"price"
)
val
price
:
Double
val
price
:
Double
,
@SerializedName
(
"goods_sku_id"
)
val
goodsSkuId
:
String
,
)
data class
OrderItem
(
...
...
Components/BUserOrder/src/main/java/com/yidian/shenghuoquan/buserorder/ui/OrderDetailActivity.kt
View file @
c6be79c1
package
com.yidian.shenghuoquan.buserorder.ui
import
android.os.Bundle
import
androidx.activity.viewModels
import
com.yidian.bcommon.constant.IntentConstants
import
com.yidian.bcommon.constant.XEventConfig
import
com.yidian.bcommon.constant.XRouterPathConstants
import
com.yidian.bcommon.mvvm.BaseMvvmActivity
import
com.yidian.bcommon.widget.CommonTopBarView
import
com.yidian.shenghuoquan.buserorder.R
import
com.yidian.shenghuoquan.buserorder.databinding.BorderActivityOrderDetailBinding
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.xarc.xevent.XBaseEvent
import
com.yidian.xarc.xevent.XEventManager
import
com.yidian.xpage.XPageManager
import
com.yidian.xpage.XPageViewProtocol
import
org.greenrobot.eventbus.Subscribe
import
org.greenrobot.eventbus.ThreadMode
/**
* author: yinjiacheng
* date: 2021/8/21 09:29
* 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
vm
:
OrderDetailViewModel
by
viewModels
()
...
...
@@ -41,17 +41,8 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O
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
()
{
binding
.
bvTopBar
.
setOnCommonTopBarCallback
(
this
,
null
)
initSmartRefresh
()
vm
.
orderDetailData
.
observe
(
this
,
{
// 结束刷新
...
...
@@ -61,9 +52,9 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O
val
status
=
OrderStatusManager
.
getOrderStatus
(
it
.
orderStatus
)
// 更新UI
binding
.
svOrderStatus
.
setOrderStatus
(
status
,
it
)
binding
.
pvPickupPointInfo
.
setPickupPoint
(
it
.
placeList
)
binding
.
pvPickupPointInfo
.
setPickupPoint
(
it
.
placeList
,
this
)
binding
.
ivConsigneeInfo
.
setConsigneeInfo
(
status
,
it
.
orderShippingInfo
)
binding
.
ivCommodityInfo
.
setCommodityInfo
(
status
,
it
)
binding
.
ivCommodityInfo
.
setCommodityInfo
(
status
,
it
,
this
)
binding
.
ivOrderInfo
.
setOrderInfo
(
status
,
it
)
})
binding
.
rlOrderDetail
.
autoRefresh
()
...
...
@@ -78,13 +69,25 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O
}
}
@Subscribe
(
sticky
=
false
,
threadMode
=
ThreadMode
.
MAIN
)
fun
onEvent
(
event
:
XBaseEvent
?)
{
when
(
event
?.
name
)
{
XEventConfig
.
APPLY_REFUND_SUCCESS
->
{
// 申请退款成功 刷新页面
binding
.
rlOrderDetail
.
autoRefresh
()
}
}
override
fun
onDoBack
()
{
vm
.
commitWidgetBuriedPoint
(
"return_key"
)
XPageManager
.
pop
(
null
)
}
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"
)
}
}
Components/BUserOrder/src/main/java/com/yidian/shenghuoquan/buserorder/ui/widget/OrderCommodityInfoView.kt
View file @
c6be79c1
...
...
@@ -12,7 +12,8 @@ import androidx.fragment.app.FragmentActivity
import
androidx.lifecycle.LifecycleOwner
import
androidx.recyclerview.widget.LinearLayoutManager
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.widget.CommonHintDialog
import
com.yidian.shenghuoquan.buserorder.R
...
...
@@ -21,8 +22,7 @@ import com.yidian.shenghuoquan.buserorder.databinding.BorderViewOrderCommodityIn
import
com.yidian.shenghuoquan.buserorder.dto.OrderDetailDto
import
com.yidian.shenghuoquan.buserorder.manager.OrderStatus
import
com.yidian.shenghuoquan.buserorder.viewmodel.OrderCommodityInfoViewModel
import
com.yidian.xarc.xevent.XBaseEvent
import
com.yidian.xarc.xevent.XEventManager
import
com.yidian.xpage.XPageManager
/**
* author: yinjiacheng
...
...
@@ -41,6 +41,7 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
)
private
val
adapter
by
lazy
{
OrderDetailCommodityListAdapter
(
null
)
}
private
val
vm
by
lazy
{
OrderCommodityInfoViewModel
()
}
private
var
callback
:
OnOrderCommodityInfoCallback
?
=
null
init
{
initRecycleView
()
...
...
@@ -75,8 +76,8 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
vm
.
applyRefundResult
.
observe
(
context
as
LifecycleOwner
,
{
if
(
it
)
{
ToastUtils
.
showShortSafe
(
"已申请退款"
)
//
刷新页面
XEventManager
.
post
(
XBaseEvent
(
XEventConfig
.
APPLY_REFUND_SUCCESS
,
null
)
)
//
回调申请退款成功
callback
?.
onApplyRefundSuccess
(
)
}
})
// 监听点击联系卖家
...
...
@@ -91,6 +92,15 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
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:
* @param status 订单状态 确认订单时固定传ORDER_STATUS_WAIT_PAY
* @param info 商品信息
*/
fun
setCommodityInfo
(
status
:
OrderStatus
,
info
:
OrderDetailDto
)
{
fun
setCommodityInfo
(
status
:
OrderStatus
,
info
:
OrderDetailDto
,
callback
:
OnOrderCommodityInfoCallback
?
)
{
binding
.
vm
=
vm
binding
.
status
=
status
binding
.
data
=
info
this
.
callback
=
callback
adapter
.
updateData
(
info
.
mergeOrderItemList
)
}
interface
OnOrderCommodityInfoCallback
{
/**
* 跳转活动详情
*/
fun
onGotoMarketingDetail
()
/**
* 申请退款成功
*/
fun
onApplyRefundSuccess
()
/**
* 联系卖家
*/
fun
onContractSeller
()
}
}
Components/BUserOrder/src/main/java/com/yidian/shenghuoquan/buserorder/ui/widget/OrderPickupPointInfoView.kt
View file @
c6be79c1
...
...
@@ -33,6 +33,7 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs
true
)
private
val
vm
by
lazy
{
OrderPickupPointViewModel
()
}
private
var
callback
:
OnOrderPickupPointInfoCallback
?
=
null
init
{
registerUIEvent
()
...
...
@@ -54,6 +55,7 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs
ToastUtils
.
showShortSafe
(
"请在设置里同意相关权限"
)
}
}
callback
?.
onContractPickupPoint
()
})
}
...
...
@@ -61,8 +63,16 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs
* 设置自提点
* @param info 自提点信息
*/
fun
setPickupPoint
(
info
:
PlaceList
?)
{
fun
setPickupPoint
(
info
:
PlaceList
?
,
callback
:
OnOrderPickupPointInfoCallback
?
)
{
binding
.
vm
=
vm
binding
.
data
=
info
this
.
callback
=
callback
}
interface
OnOrderPickupPointInfoCallback
{
/**
* 联系自提点
*/
fun
onContractPickupPoint
()
}
}
Components/BUserOrder/src/main/java/com/yidian/shenghuoquan/buserorder/viewmodel/OrderCommodityInfoViewModel.kt
View file @
c6be79c1
...
...
@@ -2,12 +2,9 @@ package com.yidian.shenghuoquan.buserorder.viewmodel
import
androidx.lifecycle.LiveData
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.shenghuoquan.buserorder.http.OrderRemoteDataSource
import
com.yidian.shenghuoquan.buserorder.http.callback.IApplyRefundCallback
import
com.yidian.xpage.XPageManager
/**
* author: yinjiacheng
...
...
@@ -25,6 +22,9 @@ class OrderCommodityInfoViewModel : BaseViewModel() {
private
val
_contractSeller
=
MutableLiveData
<
String
>()
val
contractSeller
:
LiveData
<
String
>
=
_contractSeller
private
val
_gotoMarketingDetail
=
MutableLiveData
<
Long
>()
val
gotoMarketingDetail
:
LiveData
<
Long
>
=
_gotoMarketingDetail
/**
* 申请退款
* @param orderId 订单id
...
...
@@ -63,7 +63,6 @@ class OrderCommodityInfoViewModel : BaseViewModel() {
* @param marketingId 活动id
*/
fun
gotoMarketingDetail
(
marketingId
:
Long
)
{
val
pageUrl
=
XBirdPageConstants
.
FIGHT_ORDER_EVENT_DETAILS
+
"?marketing_id=${marketingId}"
XPageManager
.
push
(
XRouterPathConstants
.
COMMON_WEB_VIEW_ACTIVITY
,
hashMapOf
(
Pair
(
XBirdPageConstants
.
PAGE_URL
,
pageUrl
)))
_gotoMarketingDetail
.
value
=
marketingId
}
}
Components/BUserOrder/src/main/java/com/yidian/shenghuoquan/buserorder/viewmodel/OrderDetailViewModel.kt
View file @
c6be79c1
...
...
@@ -3,9 +3,12 @@ package com.yidian.shenghuoquan.buserorder.viewmodel
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.MutableLiveData
import
com.yidian.bcommon.mvvm.BaseViewModel
import
com.yidian.bcommon.utils.CPointUtils
import
com.yidian.shenghuoquan.buserorder.dto.OrderDetailDto
import
com.yidian.shenghuoquan.buserorder.http.OrderRemoteDataSource
import
com.yidian.shenghuoquan.buserorder.http.callback.IGetOrderDetailCallback
import
org.json.JSONObject
import
timber.log.Timber
/**
* author: yinjiacheng
...
...
@@ -23,6 +26,11 @@ class OrderDetailViewModel : BaseViewModel() {
fun
requestOrderDetail
(
orderId
:
String
)
{
OrderRemoteDataSource
.
getOrderDetail
(
object
:
IGetOrderDetailCallback
{
override
fun
getOrderDetailSuccess
(
result
:
OrderDetailDto
?)
{
if
(
_orderDetailData
.
value
==
null
)
{
_orderDetailData
.
value
=
result
// 订单详情页面曝光埋点只上报一次
commitPageBuriedPoint
()
}
_orderDetailData
.
value
=
result
}
...
...
@@ -31,4 +39,87 @@ class OrderDetailViewModel : BaseViewModel() {
}
},
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"
)
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment