Commit ea7060d3 by Wyh

8.13 1、物流取消提示 2、lalamove選擇運輸工具 3、lalamove取消物流後可再次選擇運輸工具

Signed-off-by: Wyh <1239658231>
parent 275bd337
......@@ -40,12 +40,12 @@ public class AppDialog {
}.show();
}
public void showSelectDialog(Context context, String title, RecyclerView.Adapter adapter, DialogOnClickListenter sureOnclickListenter) {
public void showSelectDialog(Context context, String title, int spanCount, RecyclerView.Adapter adapter, DialogOnClickListenter sureOnclickListenter) {
new DialogUtils(context, R.layout.dialog_select_layout) {
@Override
public void initLayout(ViewHepler hepler, Dialog dialog) {
hepler.setText(R.id.tv_title, title);
hepler.setAdapter(R.id.rv_delivery, new GridLayoutManager(context, 4), adapter);
hepler.setAdapter(R.id.rv_delivery, new GridLayoutManager(context, spanCount), adapter);
hepler.setOnClickListenter(R.id.tv_delivery_confirm, v -> sureOnclickListenter.onclick(v, dialog));
hepler.setOnClickListenter(R.id.tv_delivery_cancel, v -> sureOnclickListenter.onclick(v, dialog));
}
......
......@@ -2,15 +2,15 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:paddingBottom="@dimen/dp_20">
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_white_eight_corners_bg"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:paddingBottom="@dimen/dp_20"
android:orientation="vertical">
<FrameLayout
......@@ -46,7 +46,7 @@
android:layout_marginLeft="@dimen/dp_16"
android:layout_marginRight="@dimen/dp_16"
android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/shape_fifty_tran_green_btn"
android:background="@drawable/shape_green_btn"
android:gravity="center"
android:paddingTop="@dimen/dp_12"
android:paddingBottom="@dimen/dp_12"
......
......@@ -7,8 +7,8 @@ ext {
targetSdkVersion : 28,
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
versionCode : 5,
versionName : "1.0.5"
versionCode : 6,
versionName : "1.0.6"
]
version = [
......
package com.gingersoft.gsa.other_order_mode.data
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
import com.gingersoft.gsa.cloud.base.utils.JsonUtils
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils
import com.gingersoft.gsa.cloud.constans.AppConstans
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil
import com.gingersoft.gsa.cloud.print.bean.OrderDetails
import com.gingersoft.gsa.other_order_mode.R
import com.gingersoft.gsa.other_order_mode.data.model.bean.ThirdItem
import com.gingersoft.gsa.other_order_mode.data.model.bean.UpdateOrderStatusBean
import com.gingersoft.gsa.other_order_mode.data.network.CoolWeatherNetwork
......@@ -15,7 +13,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.FormBody
import okhttp3.MediaType
import okhttp3.MultipartBody
import okhttp3.RequestBody
import kotlin.Pair as Pair1
......@@ -117,12 +114,14 @@ class WeatherRepository private constructor(private val network: CoolWeatherNetw
}
suspend fun thirdDelivery(orderId: String, thirdItem: ThirdItem) = withContext(Dispatchers.IO) {
suspend fun thirdDelivery(orderId: String, trafficType: String = "", thirdItem: ThirdItem) = withContext(Dispatchers.IO) {
val requestBody = FormBody.Builder()
.add("orderId", orderId)
.add("items", Gson().toJson(thirdItem))
.build()
network.thirdDelivery(requestBody)
if (TextUtil.isNotEmptyOrNullOrUndefined(trafficType)) {
requestBody.add("trafficType", trafficType)//運輸類型 1摩托車 2麵包車 3卡車
}
network.thirdDelivery(requestBody.build())
}
suspend fun updateSelfOrderStatus(ids: String, status: String, restaurantId: String) = withContext(Dispatchers.IO) {
......@@ -135,6 +134,9 @@ class WeatherRepository private constructor(private val network: CoolWeatherNetw
data
}
suspend fun getTransportationConfig(restaurantId: String) = withContext(Dispatchers.IO) {
network.getTransportationConfig(restaurantId)
}
suspend fun getDeliveryInfo(restId: String, userId: String) = withContext(Dispatchers.IO) {
val requestBody = FormBody.Builder()
......@@ -152,8 +154,8 @@ class WeatherRepository private constructor(private val network: CoolWeatherNetw
network.getDeliveryConfigDTO(requestBody)
}
suspend fun cancelLogistics(shopId: String, orderId: String, reasonId: String, reasonDesc: String) = withContext(Dispatchers.IO) {
network.cancelLogistics(getBody("restaurantId" to shopId, "orderId" to orderId, "reasonId" to reasonId, "reasonDesc" to reasonDesc))
suspend fun cancelLogistics(restaurantId: String, orderId: String, reasonId: String, reasonDesc: String) = withContext(Dispatchers.IO) {
network.cancelLogistics(getBody("restaurantId" to restaurantId, "orderId" to orderId, "reasonId" to reasonId, "reasonDesc" to reasonDesc))
}
suspend fun updateOrderStates(memberId: String, orderId: String, status: String, updateBy: String, reasonId: String, reasonDesc: String) = withContext(Dispatchers.IO) {
......@@ -161,7 +163,7 @@ class WeatherRepository private constructor(private val network: CoolWeatherNetw
}
suspend fun getCancelReason(brandId: Int, restaurantId: Int, type: Int) = withContext(Dispatchers.IO) {
// val requestBody = FormBody.Builder()
// val requestBody = FormBody.Builder()
// .add("brandId", brandId)
// .add("restaurantId", restaurantId)
// .add("type", type)//取消原因類型,1食品取消,2,物流取消,3,訂單取消
......
......@@ -12,6 +12,7 @@ class BtnBuilder {
val assignDeliveryBtn = 4
val closingBtn = 5
val ProductionCompletedBtn = 6
val TransportationBtn = 7//選擇運輸工具
}
class BtnBean(val type: Int, val btnContent: String, val btnColor: Int, val btnImg: Int)
......@@ -44,5 +45,9 @@ class BtnBuilder {
return BtnBean(closingBtn, "結賬", R.color.other_order_details_cancel_btn_color, R.drawable.ic_closing)
}
fun getTransportationBtn():BtnBean{
return BtnBean(TransportationBtn, "運輸工具", R.color.other_order_details_cancel_logistics_btn_color, R.drawable.ic_logistics)
}
}
......@@ -36,8 +36,6 @@ import com.jess.arms.utils.ArmsUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.json.JSONArray
import org.json.JSONObject
class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
......@@ -232,7 +230,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
var orderDetails = MutableLiveData<OrderDetails>()
//獲取訂單詳情和物流送達時間
fun getShipanyAndOrderInfo(restaurantId: String, orderId: String) {
fun getShipanyAndOrderInfo(restaurantId: Int, orderId: String) {
launch({
withContext(Dispatchers.IO) {
val orderDetail = withContext(Dispatchers.Default) { repository.getOrderInfo(orderId) }
......@@ -262,7 +260,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
estimatedTime = "預計整張訂單完成時間:"
}
}
val estimatedBean = withContext(Dispatchers.Default) { repository.getShipanyOrderTime(restaurantId, orderId, type) }//1、预计整张订单完成时间2、預計配送員接單時間3、預計配送員到店時間4、配送員預計送達時間
val estimatedBean = withContext(Dispatchers.Default) { repository.getShipanyOrderTime(restaurantId.toString(), orderId, type) }//1、预计整张订单完成时间2、預計配送員接單時間3、預計配送員到店時間4、配送員預計送達時間
// if (estimatedBean.data.estimated_time > 0) {
if (estimatedBean.data != null) {
data.estimatedTime = estimatedTime + ("${estimatedBean.data.estimated_time}分鐘後")
......@@ -290,39 +288,20 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
fun updateOrderStatusByBtn(btnId: Int, dataBean: OrderDetails.DataBean, restaurantId: String, listener: (MessageBean) -> Unit) {
fun confirmOrder(dataBean: OrderDetails.DataBean, trafficType: String = "", restaurantId: Int, listener: (MessageBean) -> Unit) {
launch({
when (btnId) {
BtnBuilder.sureBtn -> {
// 確認訂單
// 1、如果是外賣,指派到第三方物流
// 2、如果是自取,狀態改為製作中
repository.getDeliveryConfigDTO(restaurantId).apply {
var third = false
//獲取配送設置,查看當前單是否是第三方物流
for (i in 0 until data.list.size) {
if (data.list[i].distributionType == dataBean.deliveryMode) {
third = data.list[i].type != 0
break
}
}
if (third && dataBean.isDelete != 0) {
// 如果是第三方物流,調用第三方接口
thirdSend(restaurantId, dataBean, 2, listener)
} else {
updateOrderAndPrint(restaurantId, dataBean, 2, listener)
}
}
when (dataBean.companyType) {
0 -> {
//本店
updateOrderAndPrint(restaurantId, dataBean, 2, listener)
}
BtnBuilder.printBtn -> {
//打印
printOrder(PrintCode, dataBean, listener)
1 -> {
//zeek
thirdSend(restaurantId, dataBean, trafficType, 2, listener)
}
BtnBuilder.ProductionCompletedBtn -> {
//製作完成
repository.gsUpdateOrderStatus(dataBean.ID, 3, dataBean.order_type, 1, "", "", "", "0", "", 1, 0).apply {
listener.invoke(getMsgBean(ProductionComplete, errorMsg, code == "1"))
}
2 -> {
//lalamove
thirdSend(restaurantId, dataBean, trafficType, 2, listener)
}
}
}, {
......@@ -334,6 +313,39 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
})
}
/**
* 判斷是否需要修改交通工具
*/
fun getIsUpdateTransportation(dataBean: OrderDetails.DataBean, restaurantId: Int, listener: (List<TransportationBean.DataX.Transportation>?) -> Unit) {
launch({
val data = getTransportationConfig(restaurantId)
if (data.success) {
data.data?.list?.let {
for (value in it) {
if (value.status == 1) {
//默認交通工具,判斷價格是不是在這個金額範圍內,如果在,則不提示,如果不在,提示用戶修改交通工具
if (dataBean.PRICE > value.amountUnder && dataBean.PRICE < value.amountOn) {
//價格在範圍內
listener.invoke(listOf(value))
} else {
//價格不在默認交通工具範圍內,回到activity中彈出彈窗,讓用戶選擇交通工具
listener.invoke(it)
}
return@launch
}
}
//如果執行到這一步,可能是沒有默認交通工具
listener.invoke(it)
return@launch
}
}
listener.invoke(null)
}, {
listener.invoke(null)
})
}
fun closingBill(orderDetails: OrderDetails.DataBean, payMethods: List<PayMethod>, listener: (Int, Boolean) -> Unit) {
launch({
val payMultiple = ArrayList<OrderDetails.DataBean.PayMultiple>()
......@@ -383,23 +395,10 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
})
}
fun converToJson(vararg pair: Pair<String, String>): String {
val array = JSONArray()
array.apply {
pair.forEach {
val obj = JSONObject()
obj.put(it.first, it.second)
put(obj)
}
}
return array.toString()
}
/**
* 修改訂單狀態並打印
* 修改訂單狀態並打印,狀態為0,1,2才打印
*/
private fun updateOrderAndPrint(restaurantId: String, dataBean: OrderDetails.DataBean, status: Int, listener: (MessageBean) -> Unit) {
fun updateOrderAndPrint(restaurantId: Int, dataBean: OrderDetails.DataBean, status: Int, listener: (MessageBean) -> Unit) {
launch({
repository.gsUpdateOrderStatus(dataBean.ID, status, dataBean.order_type, 1, "", "", "", "0", "", 1, 0).apply {
if (status == 0 || status == 1 || status == 2) {
......@@ -429,7 +428,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
launch({
//添加PRJ
//單獨包起來,哪怕這接口報錯也不要影響到正常的邏輯
repository.addPrj(dataBean.Order_ID.toString(), restaurantId, ids.toString())
repository.addPrj(dataBean.Order_ID.toString(), restaurantId.toString(), ids.toString())
GetInfoUpdateService.loginfo.append("添加PRJ:orderId:" + dataBean.Order_ID.toString() + "restaurantId:" + restaurantId + "orderDetailsIds:" + ids.toString())
GetInfoUpdateService.loginfo.append("\n")
}, {
......@@ -457,6 +456,8 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
OkHttp3Utils.noticePersonnel(AppConstans.RP_UPDATE_ORDER_STATE_ERROR, "修改訂單狀態未成功:$errorMsg")
listener.invoke(getMsgBean(OrderDelivery, errorMsg, false))
}
} else if (status == 3) {
listener.invoke(getMsgBean(ProductionComplete, errorMsg, code == "1"))
}
}
}, {
......@@ -466,9 +467,17 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
/**
* 獲取交通工具配置
*/
private suspend fun getTransportationConfig(restaurantId: Int) = withContext(Dispatchers.IO) {
repository.getTransportationConfig(restaurantId.toString())
}
/**
* 打印訂單
*/
private fun printOrder(code: Int, dataBean: OrderDetails.DataBean, listener: (MessageBean) -> Unit) {
fun printOrder(code: Int, dataBean: OrderDetails.DataBean, listener: (MessageBean) -> Unit) {
//訂單信息和廚房單,打印前需要修改dataBean的order_type和orderPayType
MyOrderManage.setDataBean(dataBean)
CC.obtainBuilder("Component.Print")
......@@ -520,7 +529,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
/**
* 第三方派送
*/
private fun thirdSend(restaurantId: String, dataBean: OrderDetails.DataBean, status: Int, listener: (MessageBean) -> Unit) {
private fun thirdSend(restaurantId: Int, dataBean: OrderDetails.DataBean, trafficType: String, status: Int, listener: (MessageBean) -> Unit) {
val third = ThirdItem()
//將食品數據轉為第三方需要的數據
dataBean.PRODUCT_NAME?.let {
......@@ -535,12 +544,12 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
}
//調用第三方物流接口
callThird(dataBean, third, restaurantId, status, listener)
callThird(dataBean, trafficType, third, restaurantId, status, listener)
}
private fun callThird(dataBean: OrderDetails.DataBean, third: ThirdItem, restaurantId: String, status: Int, listener: (MessageBean) -> Unit) {
private fun callThird(dataBean: OrderDetails.DataBean, trafficType: String, third: ThirdItem, restaurantId: Int, status: Int, listener: (MessageBean) -> Unit) {
launch({
repository.thirdDelivery(dataBean.ID.toString(), third).apply {
repository.thirdDelivery(dataBean.ID.toString(), trafficType, third).apply {
if (success) {
updateOrderAndPrint(restaurantId, dataBean, status, listener)
} else if (!TextUtil.isEmptyOrNullOrUndefined(errMsg)) {
......@@ -564,7 +573,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
//已經指派第三方物流,就調用修改訂單狀態接口
updateOrderAndPrint(restaurantId, dataBean, status, listener)
} else {
callThird(dataBean, third, restaurantId, status, listener)
callThird(dataBean, trafficType, third, restaurantId, status, listener)
}
}
} else {
......@@ -596,7 +605,12 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
val recycler = hepler.getView<RecyclerView>(R.id.rv_delivery)
recycler.layoutManager = GridLayoutManager(context, 4)
val deliveryAdapter = DeliveryAdapter(deliveryBean!!.data)
val data = ArrayList<String>()
for (value in deliveryBean!!.data) {
data.add(value.userName)
}
val deliveryAdapter = DeliveryAdapter(data)
recycler.adapter = deliveryAdapter
deliveryAdapter.setOnItemClickListener { adapter, view, position ->
......@@ -666,7 +680,11 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
cancelReasons.add(data)
}
val deliveryAdapter = DeliveryAdapter(cancelReasons)
val data = ArrayList<String>()
for (value in cancelReasons) {
data.add(value.userName)
}
val deliveryAdapter = DeliveryAdapter(data)
recycler.adapter = deliveryAdapter
deliveryAdapter.setOnItemClickListener { adapter, view, position ->
......@@ -720,9 +738,9 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
/**
* 取消物流
*/
fun cancelLogistics(shopId: String, orderId: String, reasonId: String, reasonDesc: String, listener: (String) -> Unit) {
fun cancelLogistics(restaurantId: Int, orderId: String, reasonId: String, reasonDesc: String, listener: (String) -> Unit) {
launch({
repository.cancelLogistics(shopId, orderId, reasonId, reasonDesc).apply {
repository.cancelLogistics(restaurantId.toString(), orderId, reasonId, reasonDesc).apply {
if (success) {
listener.invoke("已取消物流")
} else {
......
......@@ -214,13 +214,11 @@ class GetInfoUpdateService : Service() {
}
//-1斷開連接,\n-2:消息傳輸錯誤,\n0:連接消息,\n1:登錄通知,\n2:登出通知,\n3:外賣送單通知,\n4:自取送單通知,\n5:歷史訂單通知,\n6:修改訂單狀態通知,\n7:支付成功通知"
if (type == 3 || type == 4 || type == 5
|| type == 6 || type == 7) {
if (type == 6) {
} else {
//播放提示音
initSoundPool(R.raw.newordervocal)
}
|| type == 7) {
//播放提示音
initSoundPool(R.raw.newordervocal)
} else if (type == 8) {
initSoundPool(R.raw.raw_logistics_cancel)
}
//收到服务器端传过来的消息text
Log.e(TAG, "onMessage:" + text!!)
......@@ -280,23 +278,23 @@ class GetInfoUpdateService : Service() {
private var lastSoundTime: Long = 0L
fun initSoundPool(resId: Int) {
val nowTime = System.currentTimeMillis()//當前時間減去上次播放的時間,如果超過五秒,那麼才會再次播放提示聲
if (resId == R.raw.newordervocal) {
if (nowTime - lastSoundTime > 5000) {
Log.e("eee", "間隔時間" + (nowTime - lastSoundTime))
putTimeLog("現在時間:$nowTime 上次播放時間:$lastSoundTime")
putTimeLog("新訂單播放:$nowTime")
lastSoundTime = nowTime
OtherOrderUtils.initSoundPool(this, resId)
}
} else {
// if (resId == R.raw.newordervocal) {
if (nowTime - lastSoundTime > 5000) {
Log.e("eee", "間隔時間" + (nowTime - lastSoundTime))
putTimeLog("現在時間:$nowTime 上次播放時間:$lastSoundTime")
putTimeLog("新訂單播放:$nowTime")
lastSoundTime = nowTime
OtherOrderUtils.initSoundPool(this, resId)
}
// } else {
// lastSoundTime = nowTime
// OtherOrderUtils.initSoundPool(this, resId)
// }
}
/*获取一条随机字符串*/
fun getRandomString(length: Int): String { //length表示生成字符串的长度
val base = "abcdefghijklmnopqrstuvwxyz0123456789" + System.currentTimeMillis()
val base = "abcdefghijklmnopqrstuvwxyz0123456789"
val random = Random()
val sb = StringBuffer()
for (i in 0 until length) {
......
......@@ -2,7 +2,6 @@ package com.gingersoft.gsa.other_order_mode.ui.activity
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
......@@ -10,8 +9,7 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.listener.OnItemClickListener
import androidx.recyclerview.widget.RecyclerView
import com.ethanhua.skeleton.Skeleton
import com.ethanhua.skeleton.ViewSkeletonScreen
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
......@@ -21,18 +19,18 @@ import com.gingersoft.gsa.cloud.print.bean.OrderDetails
import com.gingersoft.gsa.cloud.ui.utils.AppDialog
import com.gingersoft.gsa.other_order_mode.R
import com.gingersoft.gsa.other_order_mode.data.model.bean.BtnBuilder
import com.gingersoft.gsa.other_order_mode.data.model.bean.TransportationBean
import com.gingersoft.gsa.other_order_mode.databinding.ActivityOrderDetailsBinding
import com.gingersoft.gsa.other_order_mode.model.viewModel.PageViewModel
import com.gingersoft.gsa.other_order_mode.model.viewModel.PageViewModel.Companion.Closing
import com.gingersoft.gsa.other_order_mode.model.viewModel.PageViewModel.Companion.DeliveryPrint
import com.gingersoft.gsa.other_order_mode.model.viewModel.PageViewModel.Companion.OrderDelivery
import com.gingersoft.gsa.other_order_mode.model.viewModel.PageViewModel.Companion.PrintCode
import com.gingersoft.gsa.other_order_mode.model.viewModel.PageViewModel.Companion.ProductionComplete
import com.gingersoft.gsa.other_order_mode.model.viewModel.PageViewModel.Companion.SendCode
import com.gingersoft.gsa.other_order_mode.ui.adapter.DeliveryAdapter
import com.gingersoft.gsa.other_order_mode.ui.adapter.FoodListAdapter
import com.gingersoft.gsa.other_order_mode.ui.adapter.OrderDetailsAdapter
import com.gingersoft.gsa.other_order_mode.ui.base.BaseActivity
import com.gingersoft.gsa.other_order_mode.util.InjectorUtil
import com.gingersoft.gsa.other_order_mode.util.showSelectDialog
import com.gingersoft.gsa.other_order_mode.util.showWaringDialog
import com.qmuiteam.qmui.widget.QMUITopBar
import kotlinx.android.synthetic.main.activity_order_details.*
......@@ -48,6 +46,7 @@ class OrderDetailsActivity : BaseActivity() {
private var isRead: Int = -1
private var state: Int = -1
lateinit var skeletonScreen: ViewSkeletonScreen
var restaurantId: Int = -1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -61,7 +60,7 @@ class OrderDetailsActivity : BaseActivity() {
.angle(20)
.color(R.color.white)
.show()
restaurantId = GsaCloudApplication.getRestaurantId(this)
orderId = intent.getStringExtra("orderId")//訂單id
orderType = intent.getIntExtra("orderType", 0)//訂單類型
orderPayType = intent.getIntExtra("orderPayType", 0)//訂單支付方式
......@@ -86,7 +85,7 @@ class OrderDetailsActivity : BaseActivity() {
}
private fun PageViewModel.getOrderDetails(orderId: String, binding: ActivityOrderDetailsBinding) {
orderDetails.observe(this@OrderDetailsActivity, Observer {
orderDetails.observe(this@OrderDetailsActivity, Observer { it ->
skeletonScreen.hide()//隱藏骨架屏
if (it?.data != null && it.data!!.isNotEmpty()) {
//初始化頁面佈局
......@@ -123,6 +122,9 @@ class OrderDetailsActivity : BaseActivity() {
if (orderDetails.isDelete == 0) {
btnList.add(BtnBuilder().getLogisticsBtn())
} else {
if (orderDetails.companyType == 2) {
btnList.add(BtnBuilder().getTransportationBtn())
}
btnList.add(BtnBuilder().getAssignDeliveryBtn())
}
tv_order_state.setTextColor(resources.getColor(R.color.order_state1_color))
......@@ -137,7 +139,7 @@ class OrderDetailsActivity : BaseActivity() {
//自取待取餐,有打印和結賬
orderStatusText = "待取餐"
btnList.add(BtnBuilder().getClosingBtn())
tv_order_state.setTextColor(resources.getColor(R.color.order_state3_color))
tv_order_state.setTextColor(ContextCompat.getColor(this@OrderDetailsActivity, R.color.order_state3_color))
} else {
// 外賣有打印
// 如果是第三方物流,不顯示結賬
......@@ -185,6 +187,7 @@ class OrderDetailsActivity : BaseActivity() {
val orderBtnAdapter = OrderDetailsAdapter(btnList)
rv_order_details_btn.adapter = orderBtnAdapter
//亂糟糟的代碼,該優化了
//--------------------------------------------------------------不同按鈕點擊事件----------------------------------------------------------------------------------------
orderBtnAdapter.setOnItemClickListener { adapter, view, position ->
when (btnList[position].type) {
......@@ -197,6 +200,12 @@ class OrderDetailsActivity : BaseActivity() {
BtnBuilder.cancelBtn ->
//取消訂單
cancelOrder(orderDetails)
BtnBuilder.TransportationBtn -> {
//lalamove重新選擇運輸工具
selectLalaMove(orderDetails) { it, orderDetails ->
showSelectTransportation(it, orderDetails)
}
}
BtnBuilder.closingBtn -> {
//如果是在線支付的訂單,就直接修改訂單狀態
if (orderPayType != 1) {
......@@ -212,90 +221,144 @@ class OrderDetailsActivity : BaseActivity() {
intent.putExtra("orderDetails", orderDetails)
startActivityForResult(intent, 1001)
}
} else -> {
showLoading()
updateOrderStatusByBtn(btnList[position].type, orderDetails, GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity).toString()) { msg ->
cancelDialogForLoading()
when (msg.code) {
DeliveryPrint.toString() -> {//訂單已確認,是否打印成功
finish()
ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
"打印成功"
} else {
"打印失敗"
})
}
PrintCode.toString() -> {
// ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
// "打印成功"
// } else {
// "打印失敗"
// })
}
SendCode.toString() -> {
ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
"已成功指派"
} else if (!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)) {
msg.errorMsg
} else {
"指派送貨失敗"
})
if (msg.success) {
finish()
}
}
OrderDelivery.toString() -> {
//已確認訂單,重新刷新當前頁面
if (msg.success) {
finish()
ToastUtils.show(this@OrderDetailsActivity, "訂單已確認")
} else if (!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)) {
ToastUtils.show(this@OrderDetailsActivity, msg.errorMsg)
} else {
ToastUtils.show(this@OrderDetailsActivity, "訂單確認失敗")
}
// getOrderDetails(orderId, binding)
}
Closing.toString() -> {
ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
"結賬成功"
} else if (!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)) {
msg.errorMsg
} else {
"結賬失敗"
})
}
ProductionComplete.toString() -> {
if (msg.success) {
finish()
}
ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
"製作完成"
} else if (!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)) {
msg.errorMsg
} else {
"修改訂單狀態失敗"
})
// getOrderDetails(orderId, binding)
}
else -> {
cancelDialogForLoading()
// ToastUtils.show(this@OrderDetailsActivity, "修改訂單狀態失敗")
}
BtnBuilder.sureBtn -> {
//確認訂單,判斷是本店還是zeek或是lalamove
when (orderDetails.companyType) {
0, 1 -> {
//本店配送和zeek
confirmOrder(orderDetails)
}
2 -> {
//lalamove
selectLalaMove(orderDetails) { it, orderDetails ->
showIsUpdateTransportation(it, orderDetails)
}
}
}
}
BtnBuilder.printBtn -> {
//打印
printOrder(PrintCode, orderDetails) {}
}
BtnBuilder.ProductionCompletedBtn -> {
//製作完成
updateOrderAndPrint(restaurantId, orderDetails, 3) {
if (it.success) {
finish()
}
ToastUtils.show(this@OrderDetailsActivity, if (it.success) {
"製作完成"
} else if (!TextUtil.isEmptyOrNullOrUndefined(it.errorMsg)) {
it.errorMsg
} else {
"修改訂單狀態失敗"
})
}
}
else -> {
showLoading()
confirmOrder(orderDetails)
}
}
}
} else {
ToastUtils.show(this@OrderDetailsActivity, "獲取訂單詳情失敗")
finish()
}
})
getShipanyAndOrderInfo(GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity).toString(), orderId)
getShipanyAndOrderInfo(restaurantId, orderId)
}
private fun PageViewModel.selectLalaMove(orderDetails: OrderDetails.DataBean, black: (it: List<TransportationBean.DataX.Transportation>, orderDetails: OrderDetails.DataBean) -> Unit) {
showLoading()
getIsUpdateTransportation(orderDetails, restaurantId) {
cancelDialogForLoading()
when {
it == null -> { //沒有交通工具
ToastUtils.show(this@OrderDetailsActivity, "未獲取到交通工具")
}
it.size == 1 -> { //如果只有一個交通工具,就選這個
confirmOrder(orderDetails, it[0].type.toString())
}
else -> {
//否則彈窗讓用戶手動選擇
black(it, orderDetails)
}
}
}
}
private fun PageViewModel.showIsUpdateTransportation(it: List<TransportationBean.DataX.Transportation>, orderDetails: OrderDetails.DataBean) {
showWaringDialog("金額範圍和對應的運輸工具不符,是否修改運輸工具", { dialog ->
//要修改運輸工具,彈出彈窗讓用戶選擇
showSelectTransportation(it, orderDetails)
dialog.dismiss()
}, { dialog ->
//不修改運輸工具,使用默認的
for (value in it) {
if (value.status == 1) {
confirmOrder(orderDetails, value.type.toString())
break
}
}
dialog.dismiss()
})
}
private fun PageViewModel.showSelectTransportation(it: List<TransportationBean.DataX.Transportation>, orderDetails: OrderDetails.DataBean) {
val data = ArrayList<String>()
for (value in it) {
data.add(when (value.type) {
1 -> "摩托車($" + value.amountUnder + "-$" + value.amountOn + ")"
2 -> "麵包車($" + value.amountUnder + "-$" + value.amountOn + ")"
3 -> "卡車($" + value.amountUnder + "-$" + value.amountOn + ")"
else -> "($" + value.amountUnder + "-$" + value.amountOn + ")"
})
}
val adapter = DeliveryAdapter(data)
showSelectDialog("選擇運輸工具", 2, adapter as RecyclerView.Adapter<RecyclerView.ViewHolder>, { dialog ->
if (adapter.selectIndex == -1) {
ToastUtils.show(this@OrderDetailsActivity, "請選擇交通工具")
} else {
confirmOrder(orderDetails, it[adapter.selectIndex].type.toString())
}
}, {
it.dismiss()
})
}
private fun PageViewModel.confirmOrder(orderDetails: OrderDetails.DataBean, trafficType: String = "") {
showLoading()
confirmOrder(orderDetails, trafficType, restaurantId) { msg ->
cancelDialogForLoading()
when (msg.code) {
DeliveryPrint.toString() -> {//訂單已確認,是否打印成功
finish()
ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
"打印成功"
} else {
"打印失敗"
})
}
OrderDelivery.toString() -> {
//已確認訂單,重新刷新當前頁面
if (msg.success) {
ToastUtils.show(this@OrderDetailsActivity, "訂單已確認")
} else if (!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)) {
ToastUtils.show(this@OrderDetailsActivity, msg.errorMsg)
} else {
ToastUtils.show(this@OrderDetailsActivity, "訂單確認失敗")
}
finish()
}
else -> {
cancelDialogForLoading()
}
}
}
}
/**
* 取消訂單,獲取取消原因
......@@ -303,7 +366,7 @@ class OrderDetailsActivity : BaseActivity() {
private fun PageViewModel.cancelOrder(orderDetails: OrderDetails.DataBean) {
//獲取取消原因讓用戶選擇
showLoading()
getCancelReason(GsaCloudApplication.getBrandId(this@OrderDetailsActivity), GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity), 3) { cancelReson ->
getCancelReason(GsaCloudApplication.getBrandId(this@OrderDetailsActivity), restaurantId, 3) { cancelReson ->
cancelDialogForLoading()
if (cancelReson != null && cancelReson.data.isNotEmpty()) {
//如果有配置取消原因
......@@ -327,7 +390,7 @@ class OrderDetailsActivity : BaseActivity() {
showLoading()
if (orderDetails.isDelete == 0) {
//是第三方物流單,先取消物流,再取消訂單
cancelLogistics(GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity).toString(), orderId, reasonId, reasonDesc) {
cancelLogistics(restaurantId, orderId, reasonId, reasonDesc) {
cancelOrder(GsaCloudApplication.getMemberId(this@OrderDetailsActivity).toString(), GsaCloudApplication.getMemberName(this@OrderDetailsActivity), orderId, reasonId, reasonDesc) {
cancelDialogForLoading()
if (it) {
......@@ -361,7 +424,7 @@ class OrderDetailsActivity : BaseActivity() {
private fun PageViewModel.cancelLogistics(orderDetails: OrderDetails.DataBean) {
//獲取取消原因讓用戶選擇
showLoading()
getCancelReason(GsaCloudApplication.getBrandId(this@OrderDetailsActivity), GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity), 2) { cancelReson ->
getCancelReason(GsaCloudApplication.getBrandId(this@OrderDetailsActivity), restaurantId, 2) { cancelReson ->
cancelDialogForLoading()
if (cancelReson != null && cancelReson.data.isNotEmpty()) {
//如果有配置取消原因
......@@ -385,7 +448,7 @@ class OrderDetailsActivity : BaseActivity() {
R.id.tv_dialog_confirm -> {
dialog.dismiss()
showLoading()
cancelLogistics(GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity).toString(), orderId, reasonId, reasonDesc) {
cancelLogistics(restaurantId, orderId, reasonId, reasonDesc) {
cancelDialogForLoading()
ToastUtils.show(this@OrderDetailsActivity, it)
finish()
......
......@@ -309,7 +309,6 @@ class OtherOrderActivity : BaseActivity() {
}
})
bind?.execute {
Log.e("eee", "執行" + it)
if (it) {
ivDisconnectView.visibility = View.VISIBLE
} else {
......
package com.gingersoft.gsa.other_order_mode.ui.adapter
import androidx.core.content.ContextCompat
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.gingersoft.gsa.other_order_mode.R
import com.gingersoft.gsa.other_order_mode.data.model.bean.DeliveryBean
class DeliveryAdapter(data: MutableList<DeliveryBean.Data>) : BaseQuickAdapter<DeliveryBean.Data, BaseViewHolder>(R.layout.other_order_delivery_item, data) {
override fun convert(holder: BaseViewHolder, item: DeliveryBean.Data) {
holder.setText(R.id.tv_delivery_name, item.userName)
class DeliveryAdapter(data: MutableList<String>) : BaseQuickAdapter<String, BaseViewHolder>(R.layout.other_order_delivery_item, data) {
init {
setOnItemClickListener { adapter, view, position ->
selectIndex = position
adapter.notifyDataSetChanged()
}
}
override fun convert(holder: BaseViewHolder, item: String) {
holder.setText(R.id.tv_delivery_name, item)
if (holder.adapterPosition == selectIndex) {
holder.setBackgroundResource(R.id.layout_delivery_item, R.drawable.shape_delivery_item_btn)
holder.setTextColor(R.id.tv_delivery_name, context.resources.getColor(R.color.order_state0_color))
holder.setTextColor(R.id.tv_delivery_name, ContextCompat.getColor(context, R.color.order_state0_color))
} else {
holder.setBackgroundResource(R.id.layout_delivery_item, R.drawable.shape_delivery_item_btn_normal)
holder.setTextColor(R.id.tv_delivery_name, context.resources.getColor(R.color.color_c8))
holder.setTextColor(R.id.tv_delivery_name, ContextCompat.getColor(context, R.color.color_c8))
}
}
var selectIndex = -1
}
......@@ -35,7 +35,7 @@ class OtherOrdersAdapter(var context: Context) : Adapter<OtherOrdersAdapter.View
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_other_order_item, parent, false))
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_delivery_order_item, parent, false))
}
......@@ -65,31 +65,23 @@ class OtherOrdersAdapter(var context: Context) : Adapter<OtherOrdersAdapter.View
val bg = GradientDrawable()
bg.cornerRadius = dp2px(5f).toFloat()
holder.flBorder.visibility = View.GONE//隱藏邊框
//執行動畫
if (data.isRead == 0) {
holder.flBorder.visibility = View.VISIBLE//顯示邊框
alphaAnimator(holder.flBorder)
} else {
holder.flBorder.visibility = View.GONE
holder.flBorder.clearAnimation()
}
when {
data.STATUS == 0 -> {
state = "待確認"
bg.setColor(getColor(R.color.order_state0_color))
//執行動畫
if (data.isRead == 0) {
holder.flBorder.visibility = View.VISIBLE//顯示邊框
alphaAnimator(holder.flBorder)
} else {
holder.flBorder.visibility = View.GONE
holder.flBorder.clearAnimation()
}
}
data.STATUS == 1 -> {
state = "待確認"
bg.setColor(getColor(R.color.order_state0_color))
holder.flBorder.visibility = View.VISIBLE//顯示邊框
//執行動畫
if (data.isRead == 0) {
holder.flBorder.visibility = View.VISIBLE//顯示邊框
alphaAnimator(holder.flBorder)
} else {
holder.flBorder.visibility = View.GONE
holder.flBorder.clearAnimation()
}
}
data.STATUS == 2 -> {
state = "製作中"
......@@ -183,7 +175,7 @@ class OtherOrdersAdapter(var context: Context) : Adapter<OtherOrdersAdapter.View
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var binding: LayoutOtherOrderItemBinding = DataBindingUtil.bind(itemView)!!
var binding: LayoutDeliveryOrderItemBinding = DataBindingUtil.bind(itemView)!!
var flBorder: FrameLayout = itemView.findViewById(R.id.fl_border)
}
}
\ No newline at end of file
......@@ -29,8 +29,8 @@ fun Activity.showWaringDialog(title: String, confirm: (Dialog) -> Unit, cancel:
}
}
fun Activity.showSelectDialog(title: String, adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>, confirm: (Dialog) -> Unit, cancel: (Dialog) -> Unit){
AppDialog().showSelectDialog(this, title, adapter){view, dialog->
fun Activity.showSelectDialog(title: String, spanCount:Int,adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>, confirm: (Dialog) -> Unit, cancel: (Dialog) -> Unit){
AppDialog().showSelectDialog(this, title, spanCount, adapter){view, dialog->
when (view.id) {
R.id.tv_delivery_confirm -> {
confirm.invoke(dialog)
......
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