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 {
// 商品 - 发布商品地址,需要和config.json中的name一致
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 {
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"
}
......
......@@ -163,6 +163,21 @@ class XRouterPathConstants {
// 订单 — 订单列表
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端页面
*/
......
......@@ -6,7 +6,6 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import com.yidian.bcommon.R
import com.yidian.xpage.XPageManager
fun Activity.hideKeyBoard(): Boolean {
val mInputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
......@@ -24,7 +23,7 @@ fun AppCompatActivity.initTitleBar(toolbar: Toolbar, textView: TextView, title:
it.setDisplayHomeAsUpEnabled(true)
it.setDisplayShowHomeEnabled(true)
}
toolbar.setNavigationIcon(R.drawable.icon_back)
toolbar.setNavigationIcon(R.drawable.bcommon_icon_back)
toolbar.setNavigationOnClickListener {
onBackPressed()
}
......
......@@ -78,7 +78,7 @@ class CommonTopBarView @JvmOverloads constructor(
viewBinding.ivBack.setImageResource(
typeArray.getResourceId(
R.styleable.CommonTopBarView_CommonTopBarView_back_img,
R.drawable.icon_back
R.drawable.bcommon_icon_back
)
)
// 设置横向内边距
......
......@@ -24,7 +24,7 @@
android:paddingStart="@dimen/dp15"
android:paddingEnd="@dimen/dp15"
app:layout_scrollFlags="scroll|enterAlways"
app:navigationIcon="@drawable/icon_back">
app:navigationIcon="@drawable/bcommon_icon_back">
<TextView
android:id="@+id/tv_title"
......
......@@ -23,7 +23,7 @@
android:paddingStart="@dimen/dp15"
android:paddingEnd="@dimen/dp15"
app:layout_scrollFlags="scroll|enterAlways"
app:navigationIcon="@drawable/icon_back">
app:navigationIcon="@drawable/bcommon_icon_back">
<TextView
android:id="@+id/tv_title"
......
......@@ -14,7 +14,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/dp5"
android:src="@drawable/icon_back"
android:src="@drawable/bcommon_icon_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="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
import com.yidian.yac.core.core.YacModuleSpec
@YacModuleSpec
class BOrderApplication: YdBaseApplication() {
class BUserOrderApplication: YdBaseApplication() {
override fun onCreate() {
super.onCreate()
......
......@@ -52,6 +52,8 @@ data class CouponDto(
*/
@Parcelize
data class GoodsDto(
@SerializedName("goods_sku_id")
val goodsSkuId: String? = null,
@SerializedName("goods_name")// 商品名称
val goodsName: String? = null,
@SerializedName("price") // 商品价格
......
......@@ -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(
......
......@@ -102,6 +102,7 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding,
map[IntentConstants.KEY_EXTRA_PICKUP_POINT_ID] = it
map[IntentConstants.KEY_EXTRA_MARKETING_ID] = id
XPageManager.push(XRouterPathConstants.PICKUP_POINT_ACTIVITY, map)
vm.commitClickBuriedPoint(2)
}
}
vm.toOrderDetailEvent.observe(this) {
......@@ -178,7 +179,7 @@ class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding,
override fun onDoBack() {
// 返回按钮
vm.commitBackBuriedPoint()
vm.commitClickBuriedPoint(1)
XPageManager.pop(null)
}
......
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")
}
}
......@@ -33,7 +33,7 @@ class OrderListActivity : BaseMvvmActivity<BorderActivityOrderListBinding, Order
override fun initView() {
initTitleBar(binding.orderListToolbar, binding.tvTitle, "参与的")
SystemBarUtils.setStatusBarTextColorBlack(this)
binding.orderListToolbar.setNavigationIcon(R.drawable.icon_back)
binding.orderListToolbar.setNavigationIcon(R.drawable.bcommon_icon_back)
initRecycleView()
initClickEvent()
}
......
......@@ -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()
}
}
......@@ -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()
}
}
......@@ -5,12 +5,9 @@ import androidx.lifecycle.MutableLiveData
import com.google.gson.Gson
import com.yidian.bcommon.mvvm.BaseViewModel
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.shenghuoquan.buserorder.dto.*
import com.yidian.shenghuoquan.buserorder.http.OrderRemoteDataSource
import com.yidian.yac.core.zap.ZapTicket
import org.json.JSONArray
import org.json.JSONObject
......@@ -197,6 +194,7 @@ class ConfirmOrderViewModel : BaseViewModel() {
}
}
}
commitClickBuriedPoint(3)
}
/**
......@@ -240,8 +238,7 @@ class ConfirmOrderViewModel : BaseViewModel() {
val skuNameText = StringBuilder()
val value = _goodsSuccessEvent.value
value?.forEachIndexed { index, s ->
// todo 改成skuID
skuIdText.append(s.goodsName)
skuIdText.append(s.goodsSkuId)
skuNameText.append(s.goodsName)
if (index < value.size - 1) {
skuIdText.append(",")
......@@ -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()
jsonObject.put("eventName", "CLICK_WIDGET")
val contextJsonObject = JSONObject()
......@@ -286,7 +285,13 @@ class ConfirmOrderViewModel : BaseViewModel() {
val entitiesJsonObject = JSONObject()
val widgetInfoJsonObject = JSONObject()
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)
jsonObject.put("entitiesMap", entitiesJsonObject)
val propertiesJsonObject = JSONObject()
......
......@@ -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
}
}
......@@ -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")
}
}
......@@ -21,7 +21,7 @@
android:paddingStart="@dimen/dp15"
android:paddingEnd="@dimen/dp15"
app:layout_scrollFlags="scroll|enterAlways"
app:navigationIcon="@drawable/icon_back"
app:navigationIcon="@drawable/bcommon_icon_back"
android:background="#FFFFFF">
<TextView
android:id="@+id/tv_title"
......
......@@ -89,13 +89,13 @@ class CommonWebViewActivity : BaseMvvmActivity<XbridActivityCommonWebViewBinding
when (pageName) {
XBirdPageConstants.FIGHT_ORDER_HOME_PAGE -> {
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.setBgColor(R.color.color_FD7823)
}
else -> {
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)
}
}
......
......@@ -35,7 +35,7 @@ allprojects {
ext {
group_id = 'com.yidian.yacmodule.shenghuoquan'
artifact_id = ''
version_name = '0.0.4-SNAPSHOT'
version_name = '0.0.5-SNAPSHOT'
}
task clean(type: Delete) {
......
......@@ -11,3 +11,4 @@ include ':Components:BGeneralBusiness'
include ':Components:BUserOrder'
include ':Components:BMediator'
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