Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
supplier
Overview
Overview
Details
Activity
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王宇航
supplier
Commits
7dc96a6d
Commit
7dc96a6d
authored
Apr 17, 2021
by
宁斌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1、餐牌頁面結構調整
parent
37b96f64
Show whitespace changes
Inline
Side-by-side
Showing
112 changed files
with
5584 additions
and
530 deletions
+5584
-530
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/ui/adapter/HistoryOrderAdapter.kt
+2
-3
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/util/OtherOrderUtils.kt
+2
-2
component-main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/SettlementReportActivity.java
+2
-1
component-main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/HomeFragment.java
+1
-1
component-main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/MainTopFragment.java
+1
-0
component-print/src/main/java/com/joe/print/mvp/print/PrintCleanMachine.java
+2
-1
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/component/MealDiscountComponent.java
+11
-10
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/component/NomalDiscountComponent.java
+42
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/component/SetMealComponent.java
+42
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/module/MealDiscountModule.java
+41
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/module/NomalDiscountModule.java
+4
-5
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/module/SetMealModule.java
+127
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/contract/MealDiscountContract.java
+29
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/contract/MealStandContract.java
+0
-1
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/contract/NomalDiscountContract.java
+1
-1
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/contract/SetMealContract.java
+92
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/MealDiscountModel.java
+47
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/NomalDiscountModel.java
+3
-3
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/SetMealModel.java
+86
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/bean/response/OrderManagerResponse.java
+12
-12
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/BaseOrderPresenter.java
+2
-1
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/OrderPayPresenter.java
+2
-1
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/TablePresenter.java
+2
-11
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/discount/CouponPresenter.java
+1
-1
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/discount/NomalDiscountPresenter.java
+4
-6
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/mealstand/MealDiscountPresenter.java
+53
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/mealstand/MealStandPresenter.java
+2
-1
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/mealstand/SetMealPresenter.java
+1262
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/orderManager/OrderDetailPresenter.java
+2
-2
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/orderManager/OrderCenterActivity.java
+0
-1
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/orderManager/OrderDetailActivity.java
+9
-15
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/adapter/meal/SelectMealAdapter.java
+1
-1
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/discount/CouponFragment.java
+1
-2
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/discount/DiscountDialogFragment.java
+4
-15
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/discount/NomalDiscountFragment.java
+5
-9
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/mealstand/MealDiscountFragment.java
+146
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/mealstand/SetMealFragment.java
+780
-0
component-table/src/main/res/layout/fragment_meal_discount.xml
+19
-0
component-table/src/main/res/layout/fragment_set_meal.xml
+14
-0
component-table/src/main/res/layout/meal_layout_combo_modifier.xml
+33
-0
component-table/src/main/res/layout/meal_layout_food_menu.xml
+56
-0
component-table/src/main/res/layout/meal_layout_food_plate.xml
+203
-0
component-table/src/main/res/layout/meal_layout_meal_fine.xml
+17
-0
component-table/src/main/res/layout/table_activity_meal_stand.xml
+148
-222
component-table/src/main/res/layout/table_activity_meal_stand2.xml
+227
-0
library-base/src/main/java/com/jess/arms/mvp/BaseLocalModel.java
+14
-0
library-base/src/main/java/com/jess/arms/mvp/BaseUseCase.java
+41
-0
library-base/src/main/java/com/jess/arms/utils/ArmsUtils.java
+28
-19
library-common/src/main/java/com/gingersoft/gsa/cloud/app/GsaCloudApplication.java
+3
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/common/config/globalconfig/applyOptions/MyOkhttpConfiguration.java
+17
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/common/config/globalconfig/applyOptions/MyResponseErrorListener.java
+0
-15
library-common/src/main/java/com/gingersoft/gsa/cloud/common/constans/HttpsConstans.java
+5
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/common/pay/PayConstans.java
+13
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/common/rxjava/ErrorHandleSingleSubscriber.java
+4
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/common/rxjava/MyRxSchedulerUtils.java
+95
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/common/utils/AppDevices.java
+35
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/common/utils/okhttpUtils/OkHttp3Utils.java
+11
-0
library-common/src/main/res/color/s_app_color_black_to_blue.xml
+23
-0
library-fragmentation_core/src/main/java/me/yokeyword/fragmentation/SupportActivityDelegate.java
+2
-1
library-order/src/main/AndroidManifest.xml
+10
-1
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/Callback.java
+4
-7
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/EventListener.java
+14
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/OriginFactory.java
+28
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/PayAction.java
+21
-6
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/PayStep.java
+16
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/PaymentControl.java
+70
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/PosPay.java
+81
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/RequestParms.java
+69
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/ResultCallback.java
+14
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/base/BasePayAction.java
+15
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/bean/PosActionStatusExceptionParam.java
+3
-3
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/contract/PayMethodContract.java
+0
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/activity/PayFlowActivity.java
+124
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/case/PayFlowCase.kt
+14
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/contract/PayFlowContract.java
+43
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/di/component/PayFlowComponent.java
+42
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/di/module/PayFlowModule.java
+31
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/fragment/PayFlowFragment.java
+218
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/model/PayFlowModel.java
+65
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/model/bean/YedPayRefundBean.java
+12
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/model/bean/YedpayFindSaleStatusBean.java
+36
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/model/service/PayFlowService.java
+55
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/presenter/PayFlowPresenter.java
+243
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/phone/PhoneCallbackListener.java
+26
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/phone/PhonePayAction.java
+15
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/phone/PhonePayActionImp.java
+26
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/PosPay.java
+0
-80
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/PosPayAction.java
+22
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/bbpos/BBPosManager.java
+59
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/bbpos/BBposCallback.java
+15
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/HywebCallback.java
+17
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/HywebManager.java
+91
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/PosCallbackListener.java
+8
-2
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/command/CommandImpl.java
+9
-9
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/constant/HywebMethodConstant.java
+1
-1
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/IHywebAction.java
+7
-7
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/PrintPaymentStubImpl.java
+4
-4
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/RefundActionImpl.java
+4
-4
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/RetrievalActionImpl.java
+7
-7
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/SaleActionImpl.java
+4
-4
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/SettlementActionImpl.java
+4
-4
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/TipsActionImpl.java
+4
-4
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/VoidActionImpl.java
+4
-4
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/yedpay/YedpayCallback.java
+19
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/yedpay/YedpayManager.java
+85
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/yedpay/constant/YedpayConstant.java
+36
-0
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/util/PayMethodUtils.java
+24
-4
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/widget/StatusLoadingDialog.java
+2
-1
library-order/src/main/res/layout/dialog_pay_loading.xml
+4
-3
library-order/src/main/res/layout/fragment_pay_flow.xml
+10
-0
library-ui/src/main/java/com/gingersoft/gsa/cloud/ui/view/OrderPayView.java
+2
-1
library-ui/src/main/res/layout/item_tag_view.xml
+16
-11
No files found.
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/ui/adapter/HistoryOrderAdapter.kt
View file @
7dc96a6d
...
...
@@ -8,11 +8,10 @@ import android.view.View
import
android.view.ViewGroup
import
android.widget.ImageView
import
android.widget.TextView
import
androidx.annotation.Nullable
import
androidx.core.content.ContextCompat
import
androidx.databinding.DataBindingUtil
import
androidx.recyclerview.widget.RecyclerView
import
com.gingersoft.gsa.cloud.pay.contract.Pay
Type
Contract
import
com.gingersoft.gsa.cloud.pay.contract.Pay
Method
Contract
import
com.gingersoft.gsa.delivery_pick_mode.R
import
com.gingersoft.gsa.delivery_pick_mode.data.model.bean.HistoryOrderBean.Data.OrderItem
import
com.gingersoft.gsa.delivery_pick_mode.databinding.LayoutHistoryOrderItemBinding
...
...
@@ -150,7 +149,7 @@ class HistoryOrderAdapter(var stauts: String?, private val context: Context, var
}
else
->
{
when
(
payType
)
{
Pay
Type
Contract
.
PAY_METHOD_ID_1021
->
{
//Google pay需要5-7天
Pay
Method
Contract
.
PAY_METHOD_ID_1021
->
{
//Google pay需要5-7天
return
"退款中(預計5-7個工作日退回原賬戶)"
}
else
->
{
...
...
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/util/OtherOrderUtils.kt
View file @
7dc96a6d
...
...
@@ -20,7 +20,7 @@ import com.gingersoft.gsa.cloud.common.utils.ClipboardUtils
import
com.gingersoft.gsa.cloud.common.utils.MoneyUtil
import
com.gingersoft.gsa.cloud.common.utils.other.TextUtil
import
com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils
import
com.gingersoft.gsa.cloud.pay.contract.Pay
Type
Contract
import
com.gingersoft.gsa.cloud.pay.contract.Pay
Method
Contract
import
com.gingersoft.gsa.cloud.ui.utils.DialogUtils
import
com.gingersoft.gsa.delivery_pick_mode.R
import
com.gingersoft.gsa.delivery_pick_mode.data.model.bean.BillBean
...
...
@@ -265,7 +265,7 @@ object OtherOrderUtils {
}
else
->
{
when
(
payType
)
{
Pay
Type
Contract
.
PAY_METHOD_ID_1021
->
{
//Google pay需要5-7天
Pay
Method
Contract
.
PAY_METHOD_ID_1021
->
{
//Google pay需要5-7天
return
"退款中(預計5-7個工作日退回原賬戶)"
}
else
->
{
...
...
component-main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/SettlementReportActivity.java
View file @
7dc96a6d
...
...
@@ -39,6 +39,7 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementReportContract;
import
com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement
;
import
com.gingersoft.gsa.cloud.main.mvp.presenter.SettlementReportPresenter
;
import
com.gingersoft.gsa.cloud.pay.bean.PayMethod
;
import
com.gingersoft.gsa.cloud.pay.contract.PayMethodContract
;
import
com.gingersoft.gsa.cloud.print.bean.PrintContent
;
import
com.gingersoft.gsa.cloud.print.bean.adapter.PrintContentAdapter
;
import
com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem5
;
...
...
@@ -377,7 +378,7 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
if
(
cashList
!=
null
&&
cashList
.
size
()
>
0
)
{
for
(
int
i
=
0
;
i
<
cashList
.
size
();
i
++)
{
SettlementReport
.
CashBean
cashBean
=
cashList
.
get
(
i
);
if
(
cashBean
.
getPayType
()
==
PayMethod
.
PAY_TYPE_CASH
)
{
if
(
cashBean
.
getPayType
()
==
PayMethod
Contract
.
PAY_METHOD_ID_1001
)
{
/**現金詳情*/
String
cashDetailText
=
LanguageUtils
.
get_language_system
(
this
,
"credit.cash.detail"
,
"現金詳情"
);
String
cashText
=
LanguageUtils
.
get_language_system
(
this
,
"credit.cash"
,
"現金"
);
...
...
component-main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/HomeFragment.java
View file @
7dc96a6d
...
...
@@ -173,7 +173,7 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements HomeCon
@Override
public
void
initImmersionBar
()
{
ImmersionBar
.
setTitleBar
(
this
,
slideMenu
);
//
ImmersionBar.setTitleBar(this, slideMenu);
}
@Override
...
...
component-main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/MainTopFragment.java
View file @
7dc96a6d
...
...
@@ -15,6 +15,7 @@ import androidx.annotation.Nullable;
import
com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
;
import
com.gingersoft.gsa.cloud.common.utils.MoneyUtil
;
import
com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils
;
import
com.gingersoft.gsa.cloud.common.utils.other.TextUtil
;
import
com.gingersoft.gsa.cloud.common.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.main.R
;
...
...
component-print/src/main/java/com/joe/print/mvp/print/PrintCleanMachine.java
View file @
7dc96a6d
...
...
@@ -13,6 +13,7 @@ import com.gingersoft.gsa.cloud.common.utils.PrintTransitUtils;
import
com.gingersoft.gsa.cloud.common.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.pay.bean.PayMethod
;
import
com.gingersoft.gsa.cloud.pay.contract.PayMethodContract
;
import
com.gingersoft.gsa.cloud.print.bean.PrintCleanMachineContent
;
import
com.joe.print.mvp.model.bean.HtmlLable
;
import
com.joe.print.mvp.print.common.HtmlContract
;
...
...
@@ -182,7 +183,7 @@ public class PrintCleanMachine extends PrinterRoot<PrintCleanMachineContent> {
new
HtmlLable
.
Attributes
(
ATTRIBUTES_ALIGN
,
value_align_center
,
HtmlContract
.
value_type_string
)));
for
(
SettlementReport
.
CashBean
cashBean
:
cashs
)
{
if
(
cashBean
.
getPayType
()
==
PayMethod
.
PAY_TYPE_CASH
)
{
if
(
cashBean
.
getPayType
()
==
PayMethod
Contract
.
PAY_METHOD_ID_1001
)
{
htmlLables
.
addAll
(
getRowInformation
(
new
HtmlLable
[]{
new
HtmlLable
(
LABLE_COLUMN
,
cashBean
.
getPayName
()),
new
HtmlLable
(
LABLE_COLUMN
,
String
.
valueOf
(
cashBean
.
getPayNum
()),
new
HtmlLable
.
Attributes
(
ATTRIBUTES_OFFSET
,
value_offset_percentage60
)),
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/component/
Bil
lDiscountComponent.java
→
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/component/
Mea
lDiscountComponent.java
View file @
7dc96a6d
...
...
@@ -5,18 +5,18 @@ import dagger.Component;
import
com.jess.arms.di.component.AppComponent
;
import
com.gingersoft.gsa.cloud.table.di.module.
Bil
lDiscountModule
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.
Bil
lDiscountContract
;
import
com.gingersoft.gsa.cloud.table.di.module.
Mea
lDiscountModule
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.
Mea
lDiscountContract
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.
discount.Bil
lDiscountFragment
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.
mealstand.Mea
lDiscountFragment
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/
02/2021 17:2
6
* Created by MVPArmsTemplate on 04/
17/2021 10:4
6
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
...
...
@@ -25,17 +25,17 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.BillDiscountFragm
* ================================================
*/
@FragmentScope
@Component
(
modules
=
Bil
lDiscountModule
.
class
,
dependencies
=
AppComponent
.
class
)
public
interface
Bil
lDiscountComponent
{
void
inject
(
Bil
lDiscountFragment
fragment
);
@Component
(
modules
=
Mea
lDiscountModule
.
class
,
dependencies
=
AppComponent
.
class
)
public
interface
Mea
lDiscountComponent
{
void
inject
(
Mea
lDiscountFragment
fragment
);
@Component
.
Builder
interface
Builder
{
@BindsInstance
BillDiscountComponent
.
Builder
view
(
Bil
lDiscountContract
.
View
view
);
MealDiscountComponent
.
Builder
view
(
Mea
lDiscountContract
.
View
view
);
Bil
lDiscountComponent
.
Builder
appComponent
(
AppComponent
appComponent
);
Mea
lDiscountComponent
.
Builder
appComponent
(
AppComponent
appComponent
);
Bil
lDiscountComponent
build
();
Mea
lDiscountComponent
build
();
}
}
\ No newline at end of file
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/component/NomalDiscountComponent.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
di
.
component
;
import
dagger.BindsInstance
;
import
dagger.Component
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.NomalDiscountFragment
;
import
com.jess.arms.di.component.AppComponent
;
import
com.gingersoft.gsa.cloud.table.di.module.NomalDiscountModule
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.NomalDiscountContract
;
import
com.jess.arms.di.scope.FragmentScope
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/02/2021 17:26
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component
(
modules
=
NomalDiscountModule
.
class
,
dependencies
=
AppComponent
.
class
)
public
interface
NomalDiscountComponent
{
void
inject
(
NomalDiscountFragment
fragment
);
@Component
.
Builder
interface
Builder
{
@BindsInstance
NomalDiscountComponent
.
Builder
view
(
NomalDiscountContract
.
View
view
);
NomalDiscountComponent
.
Builder
appComponent
(
AppComponent
appComponent
);
NomalDiscountComponent
build
();
}
}
\ No newline at end of file
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/component/SetMealComponent.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
di
.
component
;
import
dagger.BindsInstance
;
import
dagger.Component
;
import
com.jess.arms.di.component.AppComponent
;
import
com.gingersoft.gsa.cloud.table.di.module.SetMealModule
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.SetMealContract
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.mealstand.SetMealFragment
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:40
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component
(
modules
=
SetMealModule
.
class
,
dependencies
=
AppComponent
.
class
)
public
interface
SetMealComponent
{
void
inject
(
SetMealFragment
fragment
);
@Component
.
Builder
interface
Builder
{
@BindsInstance
SetMealComponent
.
Builder
view
(
SetMealContract
.
View
view
);
SetMealComponent
.
Builder
appComponent
(
AppComponent
appComponent
);
SetMealComponent
build
();
}
}
\ No newline at end of file
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/module/MealDiscountModule.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
di
.
module
;
import
com.gingersoft.gsa.cloud.ui.bean.TagViewItem
;
import
com.jess.arms.di.scope.FragmentScope
;
import
dagger.Binds
;
import
dagger.Module
;
import
dagger.Provides
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.MealDiscountContract
;
import
com.gingersoft.gsa.cloud.table.mvp.model.MealDiscountModel
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:46
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public
abstract
class
MealDiscountModule
{
@Binds
abstract
MealDiscountContract
.
Model
bindMealDiscountModel
(
MealDiscountModel
model
);
@FragmentScope
@Provides
static
List
<
String
>
provideTabTitleList
(){
return
new
ArrayList
<>();
}
}
\ No newline at end of file
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/module/
Bil
lDiscountModule.java
→
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/module/
Noma
lDiscountModule.java
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
di
.
module
;
import
com.gingersoft.gsa.cloud.table.mvp.model.NomalDiscountModel
;
import
com.gingersoft.gsa.cloud.ui.adapter.TagViewAdapter
;
import
com.gingersoft.gsa.cloud.ui.bean.TagViewItem
;
import
com.jess.arms.di.scope.ActivityScope
;
import
com.jess.arms.di.scope.FragmentScope
;
import
dagger.Binds
;
import
dagger.Module
;
import
dagger.Provides
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.BillDiscountContract
;
import
com.gingersoft.gsa.cloud.table.mvp.model.BillDiscountModel
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.NomalDiscountContract
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -29,10 +28,10 @@ import java.util.List;
* ================================================
*/
@Module
public
abstract
class
Bil
lDiscountModule
{
public
abstract
class
Noma
lDiscountModule
{
@Binds
abstract
BillDiscountContract
.
Model
bindBillDiscountModel
(
Bil
lDiscountModel
model
);
abstract
NomalDiscountContract
.
Model
bindBillDiscountModel
(
Noma
lDiscountModel
model
);
@FragmentScope
@Provides
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/di/module/SetMealModule.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
di
.
module
;
import
androidx.recyclerview.widget.GridLayoutManager
;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
com.gingersoft.gsa.cloud.database.bean.ComboItem
;
import
com.gingersoft.gsa.cloud.database.bean.Food
;
import
com.gingersoft.gsa.cloud.database.bean.Modifier
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ModifierAdapter
;
import
com.jess.arms.di.scope.ActivityScope
;
import
com.jess.arms.di.scope.FragmentScope
;
import
dagger.Binds
;
import
dagger.Module
;
import
dagger.Provides
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.SetMealContract
;
import
com.gingersoft.gsa.cloud.table.mvp.model.SetMealModel
;
import
com.jess.arms.mvp.IView
;
import
java.util.ArrayList
;
import
java.util.List
;
import
javax.inject.Named
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:40
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public
abstract
class
SetMealModule
{
@Binds
abstract
SetMealContract
.
Model
bindSetMealModel
(
SetMealModel
model
);
@ActivityScope
@Provides
@Named
(
"foodGroupList"
)
static
List
<
Food
>
provideFoodGroupList
()
{
return
new
ArrayList
<>();
}
@ActivityScope
@Provides
@Named
(
"foodList"
)
static
List
<
Food
>
provideFoodList
()
{
return
new
ArrayList
<>();
}
@ActivityScope
@Provides
static
List
<
ComboItem
>
provideFoodCombo
()
{
return
new
ArrayList
<>();
}
@ActivityScope
@Provides
static
List
<
Modifier
>
provideModifierList
()
{
return
new
ArrayList
<>();
}
@ActivityScope
@Provides
@Named
(
"fineTabTitles"
)
static
List
<
String
>
provideFineTabTitleList
()
{
return
new
ArrayList
<>();
}
@ActivityScope
@Provides
static
FoodGroupAdapter
provideFoodGroupAdapter
(
MealStandContract
.
View
IView
,
@Named
(
"foodGroupList"
)
List
<
Food
>
foodGroupList
)
{
return
new
FoodGroupAdapter
(
IView
.
getActivity
(),
foodGroupList
,
IView
.
getFromType
());
}
@ActivityScope
@Provides
static
FoodAdapter
provideFoodAdapter
(
MealStandContract
.
View
IView
,
@Named
(
"foodList"
)
List
<
Food
>
foodList
)
{
return
new
FoodAdapter
(
IView
.
getActivity
(),
foodList
,
IView
.
getFromType
());
}
@ActivityScope
@Provides
static
ComboAdapter
provideComboAdapter
(
MealStandContract
.
View
IView
,
List
<
ComboItem
>
comboItemList
)
{
return
new
ComboAdapter
(
IView
.
getActivity
(),
comboItemList
);
}
@ActivityScope
@Provides
static
ModifierAdapter
provideModifierAdapter
(
MealStandContract
.
View
IView
,
List
<
Modifier
>
modifierList
)
{
return
new
ModifierAdapter
(
IView
.
getActivity
(),
modifierList
);
}
@ActivityScope
@Provides
static
GridLayoutManager
provideFoodRecycleLayoutManager
(
SetMealContract
.
View
IView
)
{
return
new
GridLayoutManager
(
IView
.
getActivity2
(),
1
,
LinearLayoutManager
.
HORIZONTAL
,
false
);
}
@ActivityScope
@Provides
static
GridLayoutManager
provideComboRecycleLayoutManager
(
SetMealContract
.
View
IView
)
{
return
new
GridLayoutManager
(
IView
.
getActivity2
(),
1
,
LinearLayoutManager
.
HORIZONTAL
,
false
);
}
@ActivityScope
@Provides
static
GridLayoutManager
provideModifierRecycleLayoutManager
(
SetMealContract
.
View
IView
)
{
return
new
GridLayoutManager
(
IView
.
getActivity2
(),
1
,
LinearLayoutManager
.
HORIZONTAL
,
false
);
}
}
\ No newline at end of file
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/contract/MealDiscountContract.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
contract
;
import
com.jess.arms.mvp.IView
;
import
com.jess.arms.mvp.IModel
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:46
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
interface
MealDiscountContract
{
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface
View
extends
IView
{
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface
Model
extends
IModel
{
}
}
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/contract/MealStandContract.java
View file @
7dc96a6d
...
...
@@ -127,7 +127,6 @@ public interface MealStandContract {
Observable
<
BaseOrderResponse
>
loadOrder
(
long
orderId
);
// Observable<BaseOrderResponse> deleteFood(List<Map<Byte, DeleteOrderRequest>> mapsDelete, long orderId, byte type, int reasonId);
Observable
<
BaseOrderResponse
>
deleteFood
(
RequestBody
requestBody
);
Observable
<
BaseOrderResponse
>
printOrder
(
RequestBody
requestBody
);
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/contract/
Bil
lDiscountContract.java
→
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/contract/
Noma
lDiscountContract.java
View file @
7dc96a6d
...
...
@@ -22,7 +22,7 @@ import java.util.List;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
interface
Bil
lDiscountContract
{
public
interface
Noma
lDiscountContract
{
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface
View
extends
IView
{
void
returnBillCoupon
(
List
<
Discount
>
discounts
);
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/contract/SetMealContract.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
contract
;
import
android.app.Activity
;
import
com.gingersoft.gsa.cloud.database.bean.ComboItem
;
import
com.gingersoft.gsa.cloud.database.bean.Food
;
import
com.gingersoft.gsa.cloud.database.bean.FoodCombo
;
import
com.gingersoft.gsa.cloud.database.bean.FoodModifier
;
import
com.gingersoft.gsa.cloud.database.bean.Modifier
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity
;
import
com.jess.arms.mvp.IView
;
import
com.jess.arms.mvp.IModel
;
import
java.util.List
;
import
javax.inject.Inject
;
import
javax.inject.Named
;
import
io.reactivex.Single
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:40
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
interface
SetMealContract
{
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface
View
extends
BaseOrderContract
.
View
{
void
setFoodGroupRecycleSpanCount
(
int
size
);
void
setFoodRecycleSpanCount
(
int
size
);
void
setComboRecycleSpanCount
(
int
size
);
void
setModifierRecycleSpanCount
(
int
size
);
void
showViewModeVisibility
(
int
...
viewMode
);
void
showModifyLayoutVisibility
(
boolean
show
);
void
showBtnMealModifyRestoreVisibility
(
boolean
show
);
void
setOrderFoodCount
(
String
number
);
int
getCurrentViewMode
();
void
setPluMode
();
void
resetPluMode
();
void
setMealRvScrollToPosition
(
int
position
);
void
returnFoodGroupList
(
List
<
Food
>
foodGroupList
);
void
returnFoodList
(
List
<
Food
>
foodList
);
void
returnFoodComboList
(
List
<
ComboItem
>
comboList
);
void
returnModifierList
(
List
<
Modifier
>
modifierList
);
MealStandActivity
getActivity2
();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface
Model
extends
BaseOrderContract
.
Model
{
Single
<
List
<
Food
>>
queryDB_FoodGroupList
(
int
foodSummary
);
Single
<
List
<
Food
>>
queryDB_FoodList
(
long
parentId
,
int
foodSummary
);
Single
<
List
<
Modifier
>>
queryDB_ModifierList
(
long
fid
,
int
mode
);
Single
<
List
<
ComboItem
>>
queryDB_ComboList
(
long
fid
,
int
foodSummary
);
Single
<
List
<
FoodCombo
>>
isComboFood
(
long
fid
);
Single
<
List
<
FoodModifier
>>
queryDB_FoodModifierList
(
long
fid
);
}
interface
}
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/MealDiscountModel.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
model
;
import
android.app.Application
;
import
com.google.gson.Gson
;
import
com.jess.arms.integration.IRepositoryManager
;
import
com.jess.arms.mvp.BaseModel
;
import
com.jess.arms.di.scope.FragmentScope
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.MealDiscountContract
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:46
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
MealDiscountModel
extends
BaseModel
implements
MealDiscountContract
.
Model
{
@Inject
Gson
mGson
;
@Inject
Application
mApplication
;
@Inject
public
MealDiscountModel
(
IRepositoryManager
repositoryManager
)
{
super
(
repositoryManager
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mGson
=
null
;
this
.
mApplication
=
null
;
}
}
\ No newline at end of file
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/
Bil
lDiscountModel.java
→
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/
Noma
lDiscountModel.java
View file @
7dc96a6d
...
...
@@ -13,7 +13,7 @@ import com.jess.arms.di.scope.FragmentScope;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.
Bil
lDiscountContract
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.
Noma
lDiscountContract
;
import
java.util.List
;
...
...
@@ -31,14 +31,14 @@ import java.util.List;
* ================================================
*/
@FragmentScope
public
class
BillDiscountModel
extends
BaseModel
implements
Bil
lDiscountContract
.
Model
{
public
class
NomalDiscountModel
extends
BaseModel
implements
Noma
lDiscountContract
.
Model
{
@Inject
Gson
mGson
;
@Inject
Application
mApplication
;
@Inject
public
Bil
lDiscountModel
(
IRepositoryManager
repositoryManager
)
{
public
Noma
lDiscountModel
(
IRepositoryManager
repositoryManager
)
{
super
(
repositoryManager
);
}
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/SetMealModel.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
model
;
import
android.app.Application
;
import
com.gingersoft.gsa.cloud.database.bean.ComboItem
;
import
com.gingersoft.gsa.cloud.database.bean.Food
;
import
com.gingersoft.gsa.cloud.database.bean.FoodCombo
;
import
com.gingersoft.gsa.cloud.database.bean.FoodModifier
;
import
com.gingersoft.gsa.cloud.database.bean.Modifier
;
import
com.google.gson.Gson
;
import
com.jess.arms.integration.IRepositoryManager
;
import
com.jess.arms.mvp.BaseModel
;
import
com.jess.arms.di.scope.FragmentScope
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.SetMealContract
;
import
java.util.List
;
import
io.reactivex.Single
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:40
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
SetMealModel
extends
BaseModel
implements
SetMealContract
.
Model
{
@Inject
Gson
mGson
;
@Inject
Application
mApplication
;
@Inject
public
SetMealModel
(
IRepositoryManager
repositoryManager
)
{
super
(
repositoryManager
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mGson
=
null
;
this
.
mApplication
=
null
;
}
@Override
public
Single
<
List
<
Food
>>
queryDB_FoodGroupList
(
int
foodSummary
)
{
return
null
;
}
@Override
public
Single
<
List
<
Food
>>
queryDB_FoodList
(
long
parentId
,
int
foodSummary
)
{
return
null
;
}
@Override
public
Single
<
List
<
Modifier
>>
queryDB_ModifierList
(
long
fid
,
int
mode
)
{
return
null
;
}
@Override
public
Single
<
List
<
ComboItem
>>
queryDB_ComboList
(
long
fid
,
int
foodSummary
)
{
return
null
;
}
@Override
public
Single
<
List
<
FoodCombo
>>
isComboFood
(
long
fid
)
{
return
null
;
}
@Override
public
Single
<
List
<
FoodModifier
>>
queryDB_FoodModifierList
(
long
fid
)
{
return
null
;
}
}
\ No newline at end of file
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/model/bean/response/OrderManagerResponse.java
View file @
7dc96a6d
...
...
@@ -8,9 +8,9 @@ import com.gingersoft.gsa.cloud.common.oaId.DeviceID;
import
com.gingersoft.gsa.cloud.common.utils.AppDevices
;
import
com.gingersoft.gsa.cloud.order.bean.response.OrderDiscountResponse
;
import
com.gingersoft.gsa.cloud.order.bean.response.OrderResponse
;
import
com.gingersoft.gsa.cloud.pay.
bean.PayMethod
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.constant.
Pay
MethodConstant
;
import
com.gingersoft.gsa.cloud.pay.
contract.PayMethodContract
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.constant.
Hyweb
MethodConstant
;
import
java.io.Serializable
;
import
java.util.List
;
...
...
@@ -209,18 +209,18 @@ public class OrderManagerResponse implements Serializable {
private
String
payName
;
public
boolean
withHywebPay
()
{
if
(
payType
==
PayMethod
.
HYWEB_POS_TYPE_CC
||
payType
==
PayMethod
.
HYWEB_POS_TYPE_QRC
)
{
if
(
payType
==
PayMethod
Contract
.
PAY_METHOD_ID_1030
||
payType
==
PayMethodContract
.
PAY_METHOD_ID_1030
)
{
return
true
;
}
return
false
;
}
public
String
getHywebPayMethodByType
()
{
if
(
payType
==
PayMethod
.
HYWEB_POS_TYPE_CC
)
{
return
Pay
MethodConstant
.
PAY_TYPE_CC
;
if
(
payType
==
PayMethod
Contract
.
PAY_METHOD_ID_1030
)
{
return
Hyweb
MethodConstant
.
PAY_TYPE_CC
;
}
if
(
payType
==
PayMethod
.
HYWEB_POS_TYPE_QRC
)
{
return
Pay
MethodConstant
.
PAY_TYPE_QRC
;
if
(
payType
==
PayMethod
Contract
.
PAY_METHOD_ID_1031
)
{
return
Hyweb
MethodConstant
.
PAY_TYPE_QRC
;
}
return
""
;
}
...
...
@@ -275,13 +275,13 @@ public class OrderManagerResponse implements Serializable {
return
""
;
}
public
P
os
Action
getPosActionByMatterId
()
{
public
P
ay
Action
getPosActionByMatterId
()
{
if
(!
TextUtils
.
isEmpty
(
tipTxnId
))
{
return
P
os
Action
.
TIP
;
return
P
ay
Action
.
TIP
;
}
else
if
(!
TextUtils
.
isEmpty
(
cancelTxnId
))
{
return
P
os
Action
.
VOID
;
return
P
ay
Action
.
VOID
;
}
else
if
(!
TextUtils
.
isEmpty
(
refundTxnId
))
{
return
P
os
Action
.
REFUND
;
return
P
ay
Action
.
REFUND
;
}
return
null
;
}
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/BaseOrderPresenter.java
View file @
7dc96a6d
...
...
@@ -38,6 +38,7 @@ import com.gingersoft.gsa.cloud.order.order.TakeawayOrder;
import
com.gingersoft.gsa.cloud.table.mvp.contract.BaseOrderContract
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.MealStandPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillItemAdapter
;
...
...
@@ -150,7 +151,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
public
abstract
void
addOrderFood
(
boolean
isPrint
,
Class
<?>
afterToActivity
);
void
saveCreateTime
(
long
createTime
)
{
public
void
saveCreateTime
(
long
createTime
)
{
if
(
mDoshokuOrder
==
null
)
{
mDoshokuOrder
.
setOpenTableInfo
(
new
TableBean
.
DataBean
());
}
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/OrderPayPresenter.java
View file @
7dc96a6d
...
...
@@ -15,6 +15,7 @@ import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import
com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest
;
import
com.gingersoft.gsa.cloud.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.pay.bean.PayMethod
;
import
com.gingersoft.gsa.cloud.pay.contract.PayMethodContract
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.OrderPayContract
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderPayResponse
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderPayActivity
;
...
...
@@ -231,7 +232,7 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
}
else
{
orderPay
.
setTipsPrice
(
orderPayView
.
getTipsPrice
());
}
if
(
orderPay
.
getPayType
()
==
PayMethod
.
PAY_TYPE
_INTEGRAL
)
{
if
(
orderPay
.
getPayType
()
==
PayMethod
Contract
.
PAY_METHOD
_INTEGRAL
)
{
double
consumptionPoints
=
orderPayView
.
getPayForConsumptionPoints
(
null
,
memberInfo
.
getPointRedeemCash
());
orderPay
.
setConsumptionPoints
(
consumptionPoints
);
// //減去積分支付所用的積分
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/TablePresenter.java
View file @
7dc96a6d
...
...
@@ -2,14 +2,9 @@ package com.gingersoft.gsa.cloud.table.mvp.presenter;
import
android.app.Activity
;
import
android.app.Application
;
import
android.content.Intent
;
import
android.graphics.Region
;
import
android.text.TextUtils
;
import
android.view.View
;
import
androidx.lifecycle.Lifecycle
;
import
androidx.lifecycle.OnLifecycleEvent
;
import
com.gingersoft.gsa.cloud.app.GsaCloudApplication
;
import
com.gingersoft.gsa.cloud.common.bean.BaseResult
;
import
com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans
;
...
...
@@ -33,7 +28,7 @@ import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import
com.gingersoft.gsa.cloud.order.order.BaseOrder
;
import
com.gingersoft.gsa.cloud.order.order.DoshokuOrder
;
import
com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment
;
import
com.gingersoft.gsa.cloud.table.FunctionTable
;
import
com.gingersoft.gsa.cloud.table.R
;
...
...
@@ -50,13 +45,11 @@ import com.gingersoft.gsa.cloud.table.mvp.action.table.ResetTableAction;
import
com.gingersoft.gsa.cloud.table.mvp.action.table.SplitTableAction
;
import
com.gingersoft.gsa.cloud.table.mvp.action.table.TableAction
;
import
com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.CoordinatorlayoutActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BottomFunctionAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.widget.SplitTableDialog
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.BaseRetryDialog
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog
;
import
com.google.android.material.internal.NavigationMenuItemView
;
import
com.jess.arms.base.DefaultAdapter
;
import
com.jess.arms.di.scope.ActivityScope
;
import
com.jess.arms.http.imageloader.ImageLoader
;
...
...
@@ -82,12 +75,10 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import
io.reactivex.annotations.NonNull
;
import
io.reactivex.disposables.Disposable
;
import
io.reactivex.functions.Consumer
;
import
io.reactivex.functions.Predicate
;
import
io.reactivex.schedulers.Schedulers
;
import
lombok.Data
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
import
me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber
;
import
me.jessyan.rxerrorhandler.handler.RetryWithDelay
;
import
okhttp3.FormBody
;
import
okhttp3.RequestBody
;
...
...
@@ -513,7 +504,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
statusExceptionParam
.
setOrderId
(
orderBean
.
getId
());
statusExceptionParam
.
setOrderNo
(
orderBean
.
getOrderNo
());
statusExceptionParam
.
setPayMethodName
(
orderBean
.
getPayName
());
statusExceptionParam
.
setPosAction
(
P
os
Action
.
RETRIEVAL
);
statusExceptionParam
.
setPosAction
(
P
ay
Action
.
RETRIEVAL
);
IActivity
.
loadRootFragment
(
R
.
id
.
fl_container
,
PosActionStatusExceptionFragment
.
newInstance
(
statusExceptionParam
));
}
else
{
IActivity
.
start
(
statusExceptionFragment
);
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/CouponPresenter.java
→
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/
discount/
CouponPresenter.java
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
presenter
;
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
presenter
.
discount
;
import
android.app.Application
;
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/
Bil
lDiscountPresenter.java
→
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/
discount/Noma
lDiscountPresenter.java
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
presenter
;
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
presenter
.
discount
;
import
android.app.Application
;
import
com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans
;
import
com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback
;
import
com.gingersoft.gsa.cloud.database.bean.Discount
;
import
com.gingersoft.gsa.cloud.order.order.BaseOrder
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.NomalDiscountContract
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.jess.arms.mvp.BasePresenter
;
...
...
@@ -15,8 +15,6 @@ import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.BillDiscountContract
;
import
java.util.List
;
...
...
@@ -33,7 +31,7 @@ import java.util.List;
* ================================================
*/
@FragmentScope
public
class
BillDiscountPresenter
extends
BasePresenter
<
BillDiscountContract
.
Model
,
Bil
lDiscountContract
.
View
>
{
public
class
NomalDiscountPresenter
extends
BasePresenter
<
NomalDiscountContract
.
Model
,
Noma
lDiscountContract
.
View
>
{
@Inject
RxErrorHandler
mErrorHandler
;
@Inject
...
...
@@ -44,7 +42,7 @@ public class BillDiscountPresenter extends BasePresenter<BillDiscountContract.Mo
AppManager
mAppManager
;
@Inject
public
BillDiscountPresenter
(
BillDiscountContract
.
Model
model
,
Bil
lDiscountContract
.
View
rootView
)
{
public
NomalDiscountPresenter
(
NomalDiscountContract
.
Model
model
,
Noma
lDiscountContract
.
View
rootView
)
{
super
(
model
,
rootView
);
}
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/mealstand/MealDiscountPresenter.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
presenter
.
mealstand
;
import
android.app.Application
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.MealDiscountContract
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:46
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
MealDiscountPresenter
extends
BasePresenter
<
MealDiscountContract
.
Model
,
MealDiscountContract
.
View
>
{
@Inject
RxErrorHandler
mErrorHandler
;
@Inject
Application
mApplication
;
@Inject
ImageLoader
mImageLoader
;
@Inject
AppManager
mAppManager
;
@Inject
public
MealDiscountPresenter
(
MealDiscountContract
.
Model
model
,
MealDiscountContract
.
View
rootView
)
{
super
(
model
,
rootView
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mErrorHandler
=
null
;
this
.
mAppManager
=
null
;
this
.
mImageLoader
=
null
;
this
.
mApplication
=
null
;
}
}
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/MealStandPresenter.java
→
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/
mealstand/
MealStandPresenter.java
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
presenter
;
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
presenter
.
mealstand
;
import
android.app.Application
;
import
android.text.TextUtils
;
...
...
@@ -40,6 +40,7 @@ import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.action.discount.MealDiscountAction
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.BaseOrderPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.DiscountAdapter
;
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/mealstand/SetMealPresenter.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
presenter
.
mealstand
;
import
android.app.Application
;
import
android.text.TextUtils
;
import
android.util.SparseArray
;
import
androidx.annotation.NonNull
;
import
com.gingersoft.gsa.cloud.common.constans.MealConstant
;
import
com.gingersoft.gsa.cloud.common.core.member.MemberInfo
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.common.rxjava.ErrorHandleSingleSubscriber
;
import
com.gingersoft.gsa.cloud.common.rxjava.MyRxSchedulerUtils
;
import
com.gingersoft.gsa.cloud.common.utils.LanguageUtils
;
import
com.gingersoft.gsa.cloud.database.bean.ComboItem
;
import
com.gingersoft.gsa.cloud.database.bean.Discount
;
import
com.gingersoft.gsa.cloud.database.bean.Food
;
import
com.gingersoft.gsa.cloud.database.bean.FoodCombo
;
import
com.gingersoft.gsa.cloud.database.bean.Modifier
;
import
com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils
;
import
com.gingersoft.gsa.cloud.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.order.order.BaseOrder
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.BaseOrderPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ModifierAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog
;
import
com.jess.arms.base.delegate.IActivity
;
import
com.jess.arms.base.delegate.mRootView.getActivity2
();
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
io.reactivex.Observable
;
import
io.reactivex.ObservableEmitter
;
import
io.reactivex.ObservableOnSubscribe
;
import
io.reactivex.Observer
;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
import
io.reactivex.disposables.Disposable
;
import
io.reactivex.schedulers.Schedulers
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
import
me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber
;
import
javax.inject.Inject
;
import
javax.inject.Named
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.SetMealContract
;
import
com.jess.arms.utils.RxLifecycleUtils
;
import
com.xuexiang.rxutil2.rxjava.RxSchedulerUtils
;
import
org.simple.eventbus.Subscriber
;
import
java.util.ArrayList
;
import
java.util.List
;
import
static
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
ui
.
activity
.
SoldoutCtrlActivity
.
FOOD_GROUP_TYPE
;
import
static
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
ui
.
activity
.
SoldoutCtrlActivity
.
FOOD_TYPE
;
import
static
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
ui
.
activity
.
SoldoutCtrlActivity
.
MODIFIER_TYPE
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:40
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
SetMealPresenter
extends
BaseOrderPresenter
<
SetMealContract
.
Model
,
SetMealContract
.
View
>
{
@Inject
RxErrorHandler
mErrorHandler
;
@Inject
Application
mApplication
;
@Inject
ImageLoader
mImageLoader
;
@Inject
AppManager
mAppManager
;
@Inject
@Named
(
"foodGroupList"
)
List
<
Food
>
mFoodGroupList
;
@Inject
@Named
(
"foodList"
)
List
<
Food
>
mFoodList
;
@Inject
List
<
ComboItem
>
mComboList
;
//套餐细项数据
@Inject
List
<
Modifier
>
mModifierList
;
//细项数据
@Inject
FoodGroupAdapter
mFoodGroupAdapter
;
@Inject
FoodAdapter
mFoodAdapter
;
@Inject
ComboAdapter
mComboAdapter
;
@Inject
ModifierAdapter
mModifierAdapter
;
private
OrderDetail
mCurrentOrderDetailBean
;
//沽清食品數據
private
List
<
SoldoutCtrFood
>
mSoldoutCtrList
;
private
boolean
RvMealClicked
;
@Inject
public
SetMealPresenter
(
SetMealContract
.
Model
model
,
SetMealContract
.
View
rootView
)
{
super
(
model
,
rootView
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mErrorHandler
=
null
;
this
.
mAppManager
=
null
;
this
.
mImageLoader
=
null
;
this
.
mApplication
=
null
;
}
public
void
modifierItemClick
(
Modifier
datasBean
)
{
RvMealClicked
=
false
;
if
(!
modifierConditionFilter
(
datasBean
))
{
return
;
}
if
(
cutOutModifier
(
datasBean
)
==
-
100
)
{
//已送單數量已等於最大數,不能繼續添加
return
;
}
addModifierItem
(
datasBean
);
//更新賬單數
updateOrderFoodNumber
();
//沽清細項沽清數
updateModifierSoldoutCtrData
();
}
public
void
comboItemClick
(
ComboItem
datasBean
)
{
RvMealClicked
=
false
;
if
(!
comboConditionFilter
(
datasBean
))
{
return
;
}
if
(
cutOutCombo
(
datasBean
)
==
-
100
)
{
//已送單數量已等於最大數,不能繼續添加
return
;
}
//设置当前操作的套餐细项
long
id
=
mCurrentOrderDetailBean
.
isNew
()
?
mCurrentOrderDetailBean
.
getProductId
()
:
mCurrentOrderDetailBean
.
getId
();
mCurrentOrderDetailBean
=
OrderDetail
.
comboTransOrderDetail
(
datasBean
,
id
,
mCurrentOrderDetailBean
.
getProductId
(),
1
,
OrderDetail
.
COMBO_PROP
,
RvMealClicked
);
//添加子项
addComboItem
(
mCurrentOrderDetailBean
);
//沽清子食品沽清數
updateComboItemSoldoutCtrData
();
//更新賬單金額
updateBillInfo
();
//更新賬單數
updateOrderFoodNumber
();
}
public
void
foodItemClick
(
Food
datasBean
)
{
if
(
mSelectMealAdapter
.
getSelectedMode
()
==
SelectMealAdapter
.
MULTIPLE_SELECTED
)
{
return
;
}
if
(!
foodConditionFilter
(
datasBean
))
{
return
;
}
RvMealClicked
=
false
;
if
(
datasBean
.
getIsParent
()
==
0
)
{
queryFoodListByParentId
(
datasBean
.
getId
());
}
else
{
mCurrentOrderDetailBean
=
OrderDetail
.
foodTransOrderDetails
(
datasBean
,
1
);
int
customType
=
datasBean
.
ableDiscountCastCustomType
();
if
(
customType
!=
Food
.
CUSTOM_TYPE_100
)
{
//自定義食品
mRootView
.
setCustomFoodDialog
(
customType
,
mCurrentOrderDetailBean
);
}
else
{
//加載套餐食品
loadComboData
(
mCurrentOrderDetailBean
,
false
);
}
}
}
private
void
addFoodItemBefore
(
OrderDetail
datasBean
)
{
int
addPosition
=
addFoodItem
(
datasBean
);
//这里主食品作为选中主体
mRootView
.
setMealRvScrollToPosition
(
addPosition
);
}
private
int
addFoodItem
(
OrderDetail
orderDetail
)
{
int
addPosition
=
mSelectMealAdapter
.
addFoodItem
(
orderDetail
);
if
(
orderDetail
.
getComboLevel
()
>
0
)
{
if
(
mComboList
!=
null
&&
mComboList
.
size
()
>
0
)
{
for
(
int
i
=
0
;
i
<
mComboList
.
size
();
i
++)
{
//自动添加组合子食品
ComboItem
comboItem
=
mComboList
.
get
(
i
);
// if (comboItem.isSold()) {
// String msg = "[" + comboItem.getName() + "]" + comboItem.getCurrentMaxNumber();
// CommonTipDialog.showSurpisedDialog(IActivity, msg, null, null, null, null, null);
// continue;
// }
if
(
comboItem
.
getInvisible
()
!=
2
)
{
int
defNumber
=
Integer
.
parseInt
(
comboItem
.
getDefmodifier
());
if
(
defNumber
!=
0
)
{
long
id
=
mCurrentOrderDetailBean
.
isNew
()
?
mCurrentOrderDetailBean
.
getProductId
()
:
mCurrentOrderDetailBean
.
getId
();
mCurrentOrderDetailBean
=
OrderDetail
.
comboTransOrderDetail
(
comboItem
,
id
,
mCurrentOrderDetailBean
.
getProductId
(),
defNumber
,
OrderDetail
.
COMBO_PROP
,
RvMealClicked
);
addPosition
=
addComboItem
(
mCurrentOrderDetailBean
);
}
}
}
}
}
//自动添加mixqty>1細項
for
(
int
i
=
0
;
i
<
mModifierList
.
size
();
i
++)
{
Modifier
modfier
=
mModifierList
.
get
(
i
);
// if (modfier.isSold()) {
// String msg = "[" + modfier.getModifierName() + "]" + modfier.getCurrentMaxNumber();
// CommonTipDialog.showSurpisedDialog(IActivity, msg, null, null, null, null, null);
// continue;
// }
if
(
modfier
.
getInvisible
()
!=
2
)
{
int
defNumber
=
Integer
.
parseInt
(
modfier
.
getDefmodifier
());
if
(
defNumber
!=
0
)
{
long
id
=
mCurrentOrderDetailBean
.
isNew
()
?
mCurrentOrderDetailBean
.
getProductId
()
:
mCurrentOrderDetailBean
.
getId
();
addPosition
=
mSelectMealAdapter
.
addFoodItem
(
OrderDetail
.
modifierTransOrderDetail
(
modfier
,
id
,
mCurrentOrderDetailBean
.
getProductId
(),
defNumber
));
}
}
}
return
addPosition
;
}
private
int
addComboItem
(
OrderDetail
datasBean
)
{
int
addPosition
=
mSelectMealAdapter
.
addFoodItem
(
datasBean
);
mRootView
.
setMealRvScrollToPosition
(
addPosition
);
return
addPosition
;
}
@Subscriber
(
tag
=
MealConstant
.
ADD_FOOD_MODIFIER
)
private
void
addModifierItem
(
Modifier
datasBean
)
{
int
addPosition
=
mOrderMealList
.
size
();
if
(
mSelectMealAdapter
.
getSelectedMode
()
==
SelectMealAdapter
.
MULTIPLE_SELECTED
)
{
addPosition
=
addMultipleModifierItems
(
datasBean
,
addPosition
);
}
else
{
long
id
=
mCurrentOrderDetailBean
.
isNew
()
?
mCurrentOrderDetailBean
.
getProductId
()
:
mCurrentOrderDetailBean
.
getId
();
mCurrentOrderDetailBean
=
OrderDetail
.
modifierTransOrderDetail
(
datasBean
,
id
,
mCurrentOrderDetailBean
.
getProductId
(),
1
);
addPosition
=
mSelectMealAdapter
.
addFoodItem
(
mCurrentOrderDetailBean
);
}
//更新賬單金額
updateBillInfo
();
IActivity
.
setFineItemSlodoutListFull
(
mSoldoutCtrList
);
mRootView
.
setMealRvScrollToPosition
(
addPosition
);
}
private
void
addDiscountItem
(
Discount
datasBean
)
{
//主食品ID
long
id
=
0
;
if
(
mSelectMealAdapter
.
getCurrentMainOrderDetail
()
!=
null
)
{
if
(
mCurrentOrderDetailBean
.
isNew
())
{
id
=
mSelectMealAdapter
.
getCurrentMainOrderDetail
().
getProductId
();
}
else
{
id
=
mSelectMealAdapter
.
getCurrentMainOrderDetail
().
getId
();
}
}
mCurrentOrderDetailBean
=
OrderDetail
.
discountTransOrderDetail
(
datasBean
,
true
,
id
,
getDisountSourcePrice
());
int
addPosition
=
mSelectMealAdapter
.
addFoodItem
(
mCurrentOrderDetailBean
);
mRootView
.
setMealRvScrollToPosition
(
addPosition
);
//更新賬單金額
updateBillInfo
();
}
private
void
loadComboData
(
OrderDetail
food
,
boolean
isSelectedMeal
)
{
Observable
.
create
(
new
ObservableOnSubscribe
<
List
>()
{
@Override
public
void
subscribe
(
ObservableEmitter
<
List
>
emitter
)
throws
Exception
{
long
fid
=
food
.
getProductId
();
int
itemType
=
food
.
getItemType
();
List
<
ComboItem
>
comboItemList
=
new
ArrayList
<>();
if
(
itemType
==
1
)
{
//获取套餐细项数据
List
<
ComboItem
>
comboItems
=
mModel
.
queryDB_ComboList
(
fid
,
BaseOrder
.
orderType
);
comboItemList
.
addAll
(
comboItems
);
}
List
<
Modifier
>
modifierList
=
mModel
.
queryDB_ModifierList
(
fid
,
ModifierDaoUtils
.
modifierMode_All
);
emitter
.
onNext
(
comboItemList
);
emitter
.
onNext
(
modifierList
);
emitter
.
onComplete
();
}
}).
subscribeOn
(
Schedulers
.
io
())
//在IO线程执行数据库处理操作
.
observeOn
(
AndroidSchedulers
.
mainThread
())
//在UI线程
.
compose
(
RxLifecycleUtils
.
bindToLifecycle
(
mRootView
))
.
subscribe
(
new
Observer
<
List
>()
{
private
int
nextCount
=
0
;
private
List
<
ComboItem
>
comboItemList
;
private
List
<
Modifier
>
modifierList
;
@Override
public
void
onSubscribe
(
Disposable
d
)
{
addDispose
(
d
);
nextCount
=
0
;
}
@Override
public
void
onNext
(
List
list
)
{
nextCount
++;
if
(
nextCount
==
1
)
{
comboItemList
=
list
;
//設置默認選中套餐食品
setComboDefModifier
(
comboItemList
);
//更新套餐数据
updateComboData
(
comboItemList
);
}
else
{
modifierList
=
list
;
//設置默認選中細項
setModifierDefModifier
(
modifierList
);
//更新细项数据
updateModifierData
(
modifierList
);
}
}
@Override
public
void
onError
(
Throwable
e
)
{
}
@Override
public
void
onComplete
()
{
boolean
autoMod
=
false
;
if
(
comboItemList
!=
null
)
{
if
(
comboItemList
.
size
()
>
0
)
{
mRootView
.
setModifierTop
(
10
);
}
else
{
mRootView
.
setModifierTop
(
0
);
}
if
(
modifierList
!=
null
)
{
autoMod
=
food
.
getAutoMod
()
==
1
&&
(
comboItemList
.
size
()
>
0
||
modifierList
.
size
()
>
0
);
}
else
{
autoMod
=
food
.
getAutoMod
()
==
1
&&
comboItemList
.
size
()
>
0
;
}
}
if
(
mRootView
.
getCurrentViewMode
()
!=
MealConstant
.
fine_ViewMode
&&
isSelectedMeal
||
autoMod
)
{
mRootView
.
showViewModeVisibility
(
MealConstant
.
combo_ViewMode
);
}
toAddFoodItem
(
mCurrentOrderDetailBean
);
}
});
}
public
void
toAddFoodItem
(
OrderDetail
foodItem
)
{
if
(!
RvMealClicked
)
{
//新增食品
addFoodItemBefore
(
foodItem
);
//更新沽清食品數量
updateFoodSoldoutCtrData
();
//更新賬單金額
updateBillInfo
();
}
updateOrderFoodNumber
();
}
/**
* 裁減掉已超出的細項
*
* @param datasBean
* @return
*/
private
int
cutOutModifier
(
Modifier
datasBean
)
{
int
cutPosition
=
getCutPositionByOutLimitModifier
(
datasBean
);
if
(
cutPosition
!=
-
1
&&
cutPosition
!=
-
100
)
{
mSelectMealAdapter
.
removeItemByPosition
(
cutPosition
);
}
return
cutPosition
;
}
/**
* 裁減掉已超出的套餐食品
*
* @param datasBean
* @return
*/
private
int
cutOutCombo
(
ComboItem
datasBean
)
{
int
cutPosition
=
getCutPositionOutLimitCombo
(
datasBean
);
if
(
cutPosition
!=
-
1
&&
cutPosition
!=
-
100
)
{
mSelectMealAdapter
.
removeItemByPosition
(
cutPosition
);
}
return
cutPosition
;
}
private
int
getCutPositionByOutLimitModifier
(
Modifier
modifier
)
{
int
mainOrderNumber
=
1
;
int
oldCount
=
0
;
SparseArray
<
String
>
numberAndCutPositionMap
=
new
SparseArray
<>();
OrderDetail
currentMainOrderDetail
=
mSelectMealAdapter
.
getCurrentMainOrderDetail
();
if
(
currentMainOrderDetail
!=
null
)
{
int
start_position
=
mSelectMealAdapter
.
getSelect_full_start_position
();
int
end_position
=
mSelectMealAdapter
.
getSelect_full_end_position
();
for
(
int
i
=
mOrderMealList
.
size
()
-
1
;
i
>=
0
;
i
--)
{
if
(
start_position
<=
i
&&
i
<=
end_position
)
{
OrderDetail
item
=
mOrderMealList
.
get
(
i
);
if
(
item
.
getItemType
()
==
1
)
{
mainOrderNumber
=
item
.
getNumber
();
}
if
(
item
.
getItemType
()
==
3
&&
item
.
getTopId
()
==
modifier
.
getTopId
())
{
//同一食品下的細項
String
comboIdAndNumber
=
numberAndCutPositionMap
.
get
((
int
)
item
.
getTopId
());
int
cutPosition
=
i
;
String
value
;
if
(
comboIdAndNumber
!=
null
)
{
String
[]
splitStr
=
numberAndCutPositionMap
.
get
((
int
)
item
.
getTopId
()).
split
(
"_"
);
if
(
item
.
isNew
())
{
value
=
(
Integer
.
parseInt
(
splitStr
[
0
])
+
item
.
getNumber
())
+
"_"
+
cutPosition
;
}
else
{
//已下單不可替換刪除
if
(
splitStr
.
length
>
1
)
{
value
=
(
Integer
.
parseInt
(
splitStr
[
0
])
+
item
.
getNumber
())
+
"_"
+
splitStr
[
1
];
}
else
{
value
=
(
Integer
.
parseInt
(
splitStr
[
0
])
+
item
.
getNumber
())
+
"_"
;
}
oldCount
++;
}
}
else
{
if
(
item
.
isNew
())
{
value
=
item
.
getNumber
()
+
"_"
+
cutPosition
;
}
else
{
//已下單不可替換刪除
value
=
item
.
getNumber
()
+
"_"
;
oldCount
++;
}
}
numberAndCutPositionMap
.
put
((
int
)
item
.
getTopId
(),
value
);
}
}
}
}
for
(
int
i
=
0
;
i
<
numberAndCutPositionMap
.
size
();
i
++)
{
String
[]
numberAndCutPositionStr
=
numberAndCutPositionMap
.
valueAt
(
i
).
split
(
"_"
);
int
number
=
Integer
.
parseInt
(
numberAndCutPositionStr
[
0
]);
int
maxQty
=
modifier
.
getSelectQty
()
*
mainOrderNumber
;
if
(
numberAndCutPositionStr
.
length
>
1
&&
!
TextUtils
.
isEmpty
(
numberAndCutPositionStr
[
1
]))
{
int
cutPosition
=
Integer
.
parseInt
(
numberAndCutPositionStr
[
1
]);
if
(
maxQty
<=
number
&&
cutPosition
<
mOrderMealList
.
size
())
{
return
cutPosition
;
}
}
else
{
if
(
oldCount
==
maxQty
)
{
return
-
100
;
}
}
}
return
-
1
;
}
private
int
getCutPositionOutLimitCombo
(
ComboItem
comboItem
)
{
int
mainOrderNumber
=
1
;
int
oldCount
=
0
;
SparseArray
<
String
>
numberAndCutPositionMap
=
new
SparseArray
<>();
OrderDetail
currentMainOrderDetail
=
mSelectMealAdapter
.
getCurrentMainOrderDetail
();
if
(
currentMainOrderDetail
!=
null
)
{
int
start_position
=
mSelectMealAdapter
.
getSelect_full_start_position
();
int
end_position
=
mSelectMealAdapter
.
getSelect_full_end_position
();
for
(
int
i
=
mOrderMealList
.
size
()
-
1
;
i
>=
0
;
i
--)
{
if
(
start_position
<=
i
&&
i
<=
end_position
)
{
OrderDetail
item
=
mOrderMealList
.
get
(
i
);
if
(
item
.
getItemType
()
==
1
)
{
mainOrderNumber
=
item
.
getNumber
();
}
if
(
item
.
getItemType
()
==
2
&&
item
.
getTopId
()
==
comboItem
.
getComId
())
{
//同一套餐下的子食品
String
comboIdAndNumber
=
numberAndCutPositionMap
.
get
((
int
)
item
.
getTopId
());
int
cutPosition
=
i
;
String
value
;
if
(
comboIdAndNumber
!=
null
)
{
String
[]
splitStr
=
numberAndCutPositionMap
.
get
((
int
)
item
.
getTopId
()).
split
(
"_"
);
if
(
item
.
isNew
())
{
value
=
(
Integer
.
parseInt
(
splitStr
[
0
])
+
item
.
getNumber
())
+
"_"
+
cutPosition
;
}
else
{
//已下單不可替換刪除
if
(
splitStr
.
length
>
1
)
{
value
=
(
Integer
.
parseInt
(
splitStr
[
0
])
+
item
.
getNumber
())
+
"_"
+
splitStr
[
1
];
}
else
{
value
=
(
Integer
.
parseInt
(
splitStr
[
0
])
+
item
.
getNumber
())
+
"_"
;
}
oldCount
++;
}
}
else
{
if
(
item
.
isNew
())
{
value
=
item
.
getNumber
()
+
"_"
+
cutPosition
;
}
else
{
//已下單不可替換刪除
value
=
item
.
getNumber
()
+
"_"
;
oldCount
++;
}
}
numberAndCutPositionMap
.
put
((
int
)
item
.
getTopId
(),
value
);
}
}
}
}
for
(
int
i
=
0
;
i
<
numberAndCutPositionMap
.
size
();
i
++)
{
String
[]
numberAndCutPositionStr
=
numberAndCutPositionMap
.
valueAt
(
i
).
split
(
"_"
);
int
number
=
Integer
.
parseInt
(
numberAndCutPositionStr
[
0
]);
int
maxQty
=
comboItem
.
getSelectQty
()
*
mainOrderNumber
;
if
(
numberAndCutPositionStr
.
length
>
1
&&
!
TextUtils
.
isEmpty
(
numberAndCutPositionStr
[
1
]))
{
int
cutPosition
=
Integer
.
parseInt
(
numberAndCutPositionStr
[
1
]);
if
(
maxQty
<=
number
&&
cutPosition
<
mOrderMealList
.
size
())
{
return
cutPosition
;
}
}
else
{
if
(
oldCount
==
maxQty
)
{
return
-
100
;
}
}
}
return
-
1
;
}
public
void
queryFoodListByParentId
(
long
parentId
)
{
mModel
.
queryDB_FoodList
(
parentId
,
BaseOrder
.
orderType
)
.
compose
(
MyRxSchedulerUtils
.
_io_main_f
())
.
compose
(
RxLifecycleUtils
.
bindToLifecycle
(
mRootView
))
.
subscribe
(
new
ErrorHandleSingleSubscriber
<
List
<
Food
>>(
mErrorHandler
)
{
@Override
public
void
onSuccess
(
List
<
Food
>
foods
)
{
mFoodAdapter
.
resetSelect
(-
1
,
null
);
if
(
foods
!=
null
)
{
updateFoodData
(
foods
,
parentId
);
}
// mRootView.showViewModeVisibility(MealConstant.food_ViewMode, MealConstant.food_group_ViewMode);
}
});
}
/**
* 全選
*/
public
void
setSelectAll
()
{
for
(
OrderDetail
item
:
mOrderMealList
)
{
item
.
setSelected
(
1
);
}
mSelectMealAdapter
.
notifyDataSetChanged
();
}
/**
* 反選
*/
public
void
setAntiSelect
()
{
for
(
OrderDetail
item
:
mOrderMealList
)
{
if
(
item
.
getSelected
()
==
0
)
{
item
.
setSelected
(
1
);
}
else
{
item
.
setSelected
(
0
);
}
}
mSelectMealAdapter
.
notifyDataSetChanged
();
}
/**
* 添加多選細項
*/
public
int
addMultipleModifierItems
(
Modifier
modifierItem
,
int
addPosition
)
{
int
overIndex
=
0
;
for
(
int
i
=
0
;
i
<
mOrderMealList
.
size
();
i
++)
{
if
(
overIndex
>
i
)
{
continue
;
}
OrderDetail
item
=
mOrderMealList
.
get
(
i
);
if
(
item
.
getSelected
()
!=
0
)
{
if
(
item
.
getItemType
()
==
1
)
{
int
j
=
i
;
int
insertPosition
=
getEndInsertPosition
(
mOrderMealList
,
item
,
i
);
if
(
insertPosition
!=
-
1
)
{
if
(
insertPosition
<
mOrderMealList
.
size
())
{
j
=
insertPosition
+
1
;
}
else
{
j
=
insertPosition
;
}
}
overIndex
=
j
;
long
id
=
item
.
isNew
()
?
item
.
getProductId
()
:
item
.
getId
();
OrderDetail
modifierTransOrderDetail
=
OrderDetail
.
modifierTransOrderDetail
(
modifierItem
,
id
,
item
.
getProductId
(),
1
);
mOrderMealList
.
add
(
j
,
modifierTransOrderDetail
);
setIndex
(
mOrderMealList
);
}
}
}
//重新更新下標
mSelectMealAdapter
.
setIndex
();
mSelectMealAdapter
.
notifyDataSetChanged
();
return
addPosition
;
}
private
int
getEndInsertPosition
(
List
<
OrderDetail
>
newOrderList
,
OrderDetail
orderDetail
,
int
currentI
)
{
boolean
hasChildFood
=
false
;
for
(
int
i
=
currentI
;
i
<
newOrderList
.
size
();
i
++)
{
OrderDetail
item
=
newOrderList
.
get
(
i
);
if
(
item
.
getItemType
()
==
2
)
{
continue
;
}
//往下找
int
nextIndex
=
i
+
1
;
if
(
newOrderList
.
size
()
==
nextIndex
)
{
//最後一個
return
nextIndex
;
}
if
(
item
.
getItemType
()
==
1
)
{
hasChildFood
=
mSelectMealAdapter
.
hasChildFood
(
item
);
}
OrderDetail
nextItem
=
newOrderList
.
get
(
nextIndex
);
if
(
item
.
getItemType
()
==
1
)
{
if
(
hasChildFood
)
{
if
(
nextItem
.
getItemType
()
!=
3
)
{
return
i
;
}
}
else
{
return
i
;
}
}
else
{
if
(
hasChildFood
)
{
if
(
nextItem
.
getItemType
()
==
1
||
nextItem
.
getItemType
()
==
2
)
{
return
i
;
}
}
else
{
if
(
nextItem
.
getItemType
()
==
1
)
{
return
nextIndex
;
}
}
}
}
return
-
1
;
}
/**
* 设置关联父子项Index
*/
public
void
setIndex
(
List
<
OrderDetail
>
mInfos
)
{
// 调整myorder中的parent_index及my_index
int
parent_index
=
0
;
int
my_index
=
0
;
int
my_index2
=
0
;
int
t
=
0
;
// 调整myorder中的顺序位
// 获取旧项目的最后的seqno不是新项目开始
int
iseqno
=
1
;
int
isseq
=
0
;
int
imseq
=
0
;
for
(
int
i
=
0
;
i
<
mInfos
.
size
();
i
++)
{
OrderDetail
myorder
=
mInfos
.
get
(
i
);
t
=
t
+
1
;
if
(
myorder
!=
null
)
{
switch
(
myorder
.
getItemType
())
{
case
1
:
parent_index
=
parent_index
+
1
;
my_index
=
t
;
my_index2
=
t
;
myorder
.
setParentIndex
(
0
);
myorder
.
setMyIndex
(
t
);
break
;
case
2
:
myorder
.
setParentIndex
(
my_index
);
myorder
.
setMyIndex
(
t
);
my_index2
=
t
;
break
;
case
3
:
myorder
.
setParentIndex
(
my_index2
);
myorder
.
setMyIndex
(
t
);
break
;
}
}
}
}
/**
* 更新食品數據
*
* @param foodList
* @param parentId
*/
private
void
updateFoodData
(
List
<
Food
>
foodList
,
long
parentId
)
{
setTopId
(
foodList
,
parentId
);
setFoodComboListStatus
(
foodList
);
mFoodList
.
clear
();
mFoodList
.
addAll
(
foodList
);
//根据Item个数显示每一行的个数
mRootView
.
setFoodRecycleSpanCount
(
mFoodList
.
size
());
mFoodAdapter
.
notifyDataSetChanged
();
}
/**
* 更新套餐數據
*
* @param foodComboList
*/
private
void
updateComboData
(
List
<
ComboItem
>
foodComboList
)
{
mComboList
.
clear
();
mComboList
.
addAll
(
foodComboList
);
//更新套餐沽清數據
updateComboItemSoldoutCtrData
();
//根据Item个数显示每一行的个数
mRootView
.
setComboRecycleSpanCount
(
mComboList
.
size
());
mComboAdapter
.
notifyDataSetChanged
();
}
/**
* 更新細項數據
*
* @param modifiers
*/
private
void
updateModifierData
(
List
<
Modifier
>
modifiers
)
{
mModifierList
.
clear
();
mModifierList
.
addAll
(
modifiers
);
//更新細項沽清數據
updateModifierSoldoutCtrData
();
//根据Item个数显示每一行的个数
mRootView
.
setModifierRecycleSpanCount
(
mModifierList
.
size
());
mComboAdapter
.
notifyDataSetChanged
();
}
private
void
setTopId
(
List
<
Food
>
foodList
,
long
topId
)
{
for
(
int
i
=
0
;
i
<
foodList
.
size
();
i
++)
{
Food
datasBean
=
foodList
.
get
(
i
);
datasBean
.
setTopId
(
topId
);
}
}
/**
* 標識食品是否为组合食品
*
* @param foodList
*/
private
void
setFoodComboListStatus
(
List
<
Food
>
foodList
)
{
for
(
int
i
=
0
;
i
<
foodList
.
size
();
i
++)
{
Food
datasBean
=
foodList
.
get
(
i
);
mModel
.
isComboFood
(
datasBean
.
getId
())
.
compose
(
MyRxSchedulerUtils
.
_io_main_f
())
.
compose
(
RxLifecycleUtils
.
bindToLifecycle
(
mRootView
))
.
subscribe
(
new
ErrorHandleSingleSubscriber
<
List
<
FoodCombo
>>(
mErrorHandler
)
{
@Override
public
void
onSuccess
(
List
<
FoodCombo
>
foodFoodComboList
)
{
if
(
foodFoodComboList
.
size
()
>
0
)
{
datasBean
.
setComboFood
(
true
);
}
}
});
}
}
/**
* 細項默認選中
*
* @param modifierList
*/
private
void
setModifierDefModifier
(
List
<
Modifier
>
modifierList
)
{
String
defmodifier
=
null
;
for
(
int
i
=
0
;
i
<
modifierList
.
size
();
i
++)
{
Modifier
item
=
modifierList
.
get
(
i
);
if
(
item
.
getInvisible
()
!=
2
)
{
//過濾掉已暫停細項
String
modifier
=
item
.
getDefmodifier
().
trim
();
if
(!
TextUtils
.
isEmpty
(
modifier
))
{
defmodifier
=
modifier
+
","
;
}
}
}
if
(!
TextUtils
.
isEmpty
(
defmodifier
))
{
if
(
defmodifier
.
startsWith
(
","
))
{
defmodifier
=
defmodifier
.
substring
(
1
,
defmodifier
.
length
());
}
if
(
defmodifier
.
endsWith
(
","
))
{
defmodifier
=
defmodifier
.
substring
(
0
,
defmodifier
.
length
()
-
1
);
}
String
[]
defmodifiers
=
defmodifier
.
split
(
","
);
for
(
int
j
=
0
;
j
<
defmodifiers
.
length
;
j
++)
{
long
def
=
Long
.
parseLong
(
defmodifiers
[
j
]);
for
(
int
k
=
0
;
k
<
modifierList
.
size
();
k
++)
{
Modifier
modifier
=
modifierList
.
get
(
k
);
long
mid
=
modifier
.
getMid
();
if
(
def
==
mid
)
{
modifier
.
setDefmodifier
(
"1"
);
}
else
{
if
(!
modifier
.
getDefmodifier
().
equals
(
"1"
))
{
modifier
.
setDefmodifier
(
"0"
);
}
}
}
}
}
}
/**
* 套餐默認選中
*
* @param comboItemList
*/
private
void
setComboDefModifier
(
List
<
ComboItem
>
comboItemList
)
{
String
defmodifier
=
null
;
for
(
int
i
=
0
;
i
<
comboItemList
.
size
();
i
++)
{
ComboItem
comboItem
=
comboItemList
.
get
(
i
);
if
(
comboItem
.
getInvisible
()
!=
2
)
{
//過濾掉已暫停食品
String
modifier
=
comboItem
.
getDefmodifier
().
trim
();
if
(!
TextUtils
.
isEmpty
(
modifier
))
{
defmodifier
=
modifier
+
","
;
}
}
}
if
(!
TextUtils
.
isEmpty
(
defmodifier
))
{
if
(
defmodifier
.
startsWith
(
","
))
{
defmodifier
=
defmodifier
.
substring
(
1
,
defmodifier
.
length
());
}
if
(
defmodifier
.
endsWith
(
","
))
{
defmodifier
=
defmodifier
.
substring
(
0
,
defmodifier
.
length
()
-
1
);
}
String
[]
defmodifiers
=
defmodifier
.
split
(
","
);
for
(
int
j
=
0
;
j
<
defmodifiers
.
length
;
j
++)
{
long
def
=
Long
.
parseLong
(
defmodifiers
[
j
]);
for
(
int
k
=
0
;
k
<
comboItemList
.
size
();
k
++)
{
ComboItem
comboItem
=
comboItemList
.
get
(
k
);
long
fid
=
comboItem
.
getFid
();
if
(
def
==
fid
)
{
comboItem
.
setDefmodifier
(
"1"
);
}
else
{
if
(!
comboItem
.
getDefmodifier
().
equals
(
"1"
))
{
comboItem
.
setDefmodifier
(
"0"
);
}
}
}
}
}
}
/**
* 更新食品,子項,細項沽清數據
*/
public
void
updateMealSoldoutCtrData
()
{
updateFoodSoldoutCtrData
();
updateComboItemSoldoutCtrData
();
updateModifierSoldoutCtrData
();
}
/**
* 更新食品沽清數據
*/
public
void
updateFoodSoldoutCtrData
()
{
if
(
mSoldoutCtrList
.
size
()
>
0
)
{
clearFoodSoldoutCtrData
();
addFoodSoldoutCtrItem
(
mSoldoutCtrList
);
setFoodSoldoutCtrData
(
mSoldoutCtrList
);
}
}
/**
* 更新套餐食品沽清数据
*/
public
void
updateComboItemSoldoutCtrData
()
{
if
(
mSoldoutCtrList
.
size
()
>
0
)
{
updateFoodSoldoutCtrData
();
mComboAdapter
.
notifyDataSetChanged
();
}
}
/**
* 更新細項沽清數據
*/
public
void
updateModifierSoldoutCtrData
()
{
if
(
mSoldoutCtrList
.
size
()
>
0
)
{
clearModifierSoldoutCtrData
();
addModifierCtrItem
(
mSoldoutCtrList
);
setModifierSoldoutCtrData
(
mModifierList
,
mSoldoutCtrList
);
mModifierAdapter
.
notifyDataSetChanged
();
}
}
private
void
setModifierSoldoutCtrData
(
List
<
Modifier
>
modifierList
,
List
<
SoldoutCtrFood
>
soldoutCtrFoods
)
{
for
(
SoldoutCtrFood
scc
:
soldoutCtrFoods
)
{
for
(
Modifier
modifier
:
modifierList
)
{
if
(
scc
.
getType
()
==
MODIFIER_TYPE
&&
scc
.
getModifierId
()
!=
null
&&
modifier
.
getMid
()
!=
0
&&
modifier
.
getMid
()
==
scc
.
getModifierId
())
{
String
qtyName
=
scc
.
getQtyName
();
modifier
.
setMaxNumber
(
qtyName
);
modifier
.
setCurrentMaxNumber
(
qtyName
);
setModifierMaxQty
(
modifier
);
}
}
}
for
(
Modifier
modifier
:
modifierList
)
{
if
(
modifier
.
getInvisible
()
==
2
)
{
String
qtyName
=
"暫停"
;
modifier
.
setMaxNumber
(
qtyName
);
modifier
.
setCurrentMaxNumber
(
qtyName
);
setModifierMaxQty
(
modifier
);
}
}
}
public
void
setFoodSoldoutCtrData
(
List
<
SoldoutCtrFood
>
soldoutCtrFoods
)
{
for
(
SoldoutCtrFood
scc
:
soldoutCtrFoods
)
{
for
(
Food
foodGroupBean
:
mFoodGroupList
)
{
if
(
scc
.
getType
()
==
FOOD_TYPE
&&
scc
.
getFoodId
()
!=
null
&&
foodGroupBean
.
getId
()
!=
null
&&
foodGroupBean
.
getId
().
equals
(
scc
.
getFoodId
()))
{
String
qtyName
=
scc
.
getQtyName
();
foodGroupBean
.
setMaxNumber
(
qtyName
);
foodGroupBean
.
setCurrentMaxNumber
(
qtyName
);
setFoodMaxQty
(
foodGroupBean
);
}
}
for
(
Food
foodBean
:
mFoodList
)
{
if
(
scc
.
getType
()
==
FOOD_TYPE
&&
scc
.
getFoodId
()
!=
null
&&
foodBean
.
getId
()
!=
null
&&
foodBean
.
getId
().
equals
(
scc
.
getFoodId
()))
{
String
qtyName
=
scc
.
getQtyName
();
foodBean
.
setMaxNumber
(
qtyName
);
foodBean
.
setCurrentMaxNumber
(
qtyName
);
setFoodMaxQty
(
foodBean
);
}
}
}
for
(
Food
foodGroupBean
:
mFoodGroupList
)
{
if
(
foodGroupBean
.
getInvisible
()
==
2
)
{
String
qtyName
=
"暫停"
;
foodGroupBean
.
setMaxNumber
(
qtyName
);
foodGroupBean
.
setCurrentMaxNumber
(
qtyName
);
setFoodMaxQty
(
foodGroupBean
);
}
}
for
(
Food
foodBean
:
mFoodList
)
{
if
(
foodBean
.
getInvisible
()
==
2
)
{
String
qtyName
=
"暫停"
;
foodBean
.
setMaxNumber
(
qtyName
);
foodBean
.
setCurrentMaxNumber
(
qtyName
);
setFoodMaxQty
(
foodBean
);
}
}
if
(
mComboList
!=
null
)
{
for
(
SoldoutCtrFood
scc
:
soldoutCtrFoods
)
{
for
(
ComboItem
comboItem
:
mComboList
)
{
if
(
scc
.
getType
()
==
FOOD_TYPE
&&
scc
.
getFoodId
()
!=
null
&&
comboItem
.
getFid
()
!=
null
&&
comboItem
.
getFid
().
equals
(
scc
.
getFoodId
()))
{
String
qtyName
=
scc
.
getQtyName
();
comboItem
.
setMaxNumber
(
qtyName
);
comboItem
.
setCurrentMaxNumber
(
qtyName
);
setComboItemMaxQty
(
comboItem
);
}
}
}
for
(
ComboItem
comboItem
:
mComboList
)
{
if
(
comboItem
.
getInvisible
()
==
2
)
{
String
qtyName
=
"暫停"
;
comboItem
.
setMaxNumber
(
qtyName
);
comboItem
.
setCurrentMaxNumber
(
qtyName
);
setComboItemMaxQty
(
comboItem
);
}
}
}
if
(
mFoodGroupAdapter
!=
null
)
{
mFoodGroupAdapter
.
notifyDataSetChanged
();
}
mFoodAdapter
.
notifyDataSetChanged
();
}
private
void
addModifierCtrItem
(
List
<
SoldoutCtrFood
>
soldoutCtrFoods
)
{
if
(
mModifierList
!=
null
)
{
for
(
Modifier
modifier
:
mModifierList
)
{
if
(
modifier
.
getInvisible
()
==
2
)
{
SoldoutCtrFood
soldoutCtrFood
=
new
SoldoutCtrFood
();
soldoutCtrFood
.
setType
((
byte
)
MODIFIER_TYPE
);
soldoutCtrFood
.
setStop
(
true
);
soldoutCtrFood
.
setFoodName
(
modifier
.
getModifierName
());
soldoutCtrFood
.
setFoodName1
(
modifier
.
getModifierName1
());
soldoutCtrFood
.
setFoodName2
(
modifier
.
getModifierName2
());
soldoutCtrFood
.
setModifierId
(
modifier
.
getMid
());
if
(!
isContainModifier
(
soldoutCtrFoods
,
modifier
))
{
soldoutCtrFoods
.
add
(
soldoutCtrFood
);
}
}
}
}
}
private
void
addFoodSoldoutCtrItem
(
List
<
SoldoutCtrFood
>
soldoutCtrFoods
)
{
for
(
Food
foodGroupBean
:
mFoodGroupList
)
{
if
(
foodGroupBean
.
getInvisible
()
==
2
)
{
SoldoutCtrFood
soldoutCtrFood
=
new
SoldoutCtrFood
();
soldoutCtrFood
.
setType
((
byte
)
FOOD_GROUP_TYPE
);
soldoutCtrFood
.
setStop
(
true
);
soldoutCtrFood
.
setFoodName
(
foodGroupBean
.
getFoodName
());
soldoutCtrFood
.
setFoodName1
(
foodGroupBean
.
getFoodName1
());
soldoutCtrFood
.
setFoodName2
(
foodGroupBean
.
getFoodName2
());
soldoutCtrFood
.
setFoodId
(
foodGroupBean
.
getId
());
if
(!
isContainFood
(
soldoutCtrFoods
,
foodGroupBean
))
{
soldoutCtrFoods
.
add
(
soldoutCtrFood
);
}
}
}
for
(
Food
foodBean
:
mFoodList
)
{
if
(
foodBean
.
getInvisible
()
==
2
)
{
SoldoutCtrFood
soldoutCtrFood
=
new
SoldoutCtrFood
();
soldoutCtrFood
.
setType
((
byte
)
FOOD_TYPE
);
soldoutCtrFood
.
setStop
(
true
);
soldoutCtrFood
.
setFoodName
(
foodBean
.
getFoodName
());
soldoutCtrFood
.
setFoodName1
(
foodBean
.
getFoodName1
());
soldoutCtrFood
.
setFoodName2
(
foodBean
.
getFoodName2
());
soldoutCtrFood
.
setFoodId
(
foodBean
.
getId
());
soldoutCtrFoods
.
add
(
soldoutCtrFood
);
if
(!
isContainFood
(
soldoutCtrFoods
,
foodBean
))
{
soldoutCtrFoods
.
add
(
soldoutCtrFood
);
}
}
}
}
private
void
clearFoodSoldoutCtrData
()
{
for
(
Food
foodGroupBean
:
mFoodGroupList
)
{
foodGroupBean
.
setMaxNumber
(
""
);
foodGroupBean
.
setCurrentMaxNumber
(
""
);
}
for
(
Food
foodBean
:
mFoodList
)
{
foodBean
.
setMaxNumber
(
""
);
foodBean
.
setCurrentMaxNumber
(
""
);
}
if
(
mComboList
!=
null
)
{
for
(
ComboItem
comboItem
:
mComboList
)
{
comboItem
.
setMaxNumber
(
""
);
comboItem
.
setCurrentMaxNumber
(
""
);
}
}
}
private
void
clearModifierSoldoutCtrData
()
{
if
(
mModifierList
!=
null
)
{
for
(
Modifier
modifier
:
mModifierList
)
{
modifier
.
setMaxNumber
(
""
);
modifier
.
setCurrentMaxNumber
(
""
);
}
}
}
private
boolean
isContainFood
(
List
<
SoldoutCtrFood
>
soldoutCtrFoods
,
Food
food
)
{
for
(
SoldoutCtrFood
soldoutCtrFood
:
soldoutCtrFoods
)
{
if
(
soldoutCtrFood
.
getType
()
==
FOOD_TYPE
&&
soldoutCtrFood
.
getFoodId
()
==
food
.
getId
())
{
return
true
;
}
}
return
false
;
}
private
boolean
isContainModifier
(
List
<
SoldoutCtrFood
>
soldoutCtrFoods
,
Modifier
modifier
)
{
for
(
SoldoutCtrFood
soldoutCtrFood
:
soldoutCtrFoods
)
{
if
(
soldoutCtrFood
.
getType
()
==
MODIFIER_TYPE
&&
soldoutCtrFood
.
getModifierId
()
==
modifier
.
getMid
())
{
return
true
;
}
}
return
false
;
}
/**
* 设置当前食品还可最多选几份
*
* @param foodBean
*/
public
boolean
setFoodMaxQty
(
Food
foodBean
)
{
int
currentSelectNumber
=
0
;
for
(
int
i
=
0
;
i
<
getNewOrderFoodLists
().
size
();
i
++)
{
OrderDetail
orderFood
=
getNewOrderFoodLists
().
get
(
i
);
if
(
orderFood
.
getProductId
()
==
foodBean
.
getId
())
{
currentSelectNumber
+=
orderFood
.
getNumber
();
}
}
String
User_Qty
=
foodBean
.
getMaxNumber
();
if
(!
User_Qty
.
equals
(
""
)
&&
!
User_Qty
.
equals
(
"售罄"
)
&&
!
User_Qty
.
equals
(
"暫停"
))
{
int
maxQty
=
Integer
.
parseInt
(
User_Qty
);
if
(
maxQty
>
0
)
{
int
Currrent_OR_Qty
=
maxQty
-
currentSelectNumber
;
if
(
Currrent_OR_Qty
<
1
)
{
foodBean
.
setCurrentMaxNumber
(
"售罄"
);
return
false
;
}
else
{
foodBean
.
setCurrentMaxNumber
(
Currrent_OR_Qty
+
""
);
}
}
}
return
true
;
}
public
void
setComboItemMaxQty
(
ComboItem
comboItem
)
{
int
currentSelectNumber
=
0
;
for
(
int
i
=
0
;
i
<
getNewOrderFoodLists
().
size
();
i
++)
{
OrderDetail
orderFood
=
getNewOrderFoodLists
().
get
(
i
);
if
(
orderFood
.
getProductId
()
==
comboItem
.
getFid
())
{
currentSelectNumber
+=
orderFood
.
getNumber
();
}
}
String
User_Qty
=
comboItem
.
getMaxNumber
();
if
(!
User_Qty
.
equals
(
""
)
&&
!
User_Qty
.
equals
(
"售罄"
)
&&
!
User_Qty
.
equals
(
"暫停"
))
{
int
maxQty
=
Integer
.
parseInt
(
User_Qty
);
if
(
maxQty
>
0
)
{
int
Currrent_OR_Qty
=
maxQty
-
currentSelectNumber
;
if
(
Currrent_OR_Qty
<
1
)
{
comboItem
.
setCurrentMaxNumber
(
"售罄"
);
}
else
{
comboItem
.
setCurrentMaxNumber
(
Currrent_OR_Qty
+
""
);
}
}
}
mComboAdapter
.
notifyDataSetChanged
();
}
public
void
setModifierMaxQty
(
Modifier
modfier
)
{
int
currentSelectNumber
=
0
;
for
(
int
i
=
0
;
i
<
getNewOrderFoodLists
().
size
();
i
++)
{
OrderDetail
orderFood
=
getNewOrderFoodLists
().
get
(
i
);
if
(
orderFood
.
getMid
()
==
modfier
.
getMid
())
{
currentSelectNumber
+=
orderFood
.
getNumber
();
}
}
String
User_Qty
=
modfier
.
getMaxNumber
();
if
(!
User_Qty
.
equals
(
""
)
&&
!
User_Qty
.
equals
(
"售罄"
)
&&
!
User_Qty
.
equals
(
"暫停"
))
{
int
maxQty
=
Integer
.
parseInt
(
User_Qty
);
if
(
maxQty
>
0
)
{
int
Currrent_OR_Qty
=
maxQty
-
currentSelectNumber
;
if
(
Currrent_OR_Qty
<
1
)
{
modfier
.
setCurrentMaxNumber
(
"售罄"
);
}
else
{
modfier
.
setCurrentMaxNumber
(
Currrent_OR_Qty
+
""
);
}
}
}
mModifierAdapter
.
notifyDataSetChanged
();
}
/**
* 添加食品条件过滤
* 1:售罄、最大选择数
* 2:是否需要会员积分
* 3:
*/
public
boolean
foodGroupConditionFilter
(
Food
foodBean
,
boolean
init
)
{
if
(
init
)
{
return
true
;
}
String
User_Qty
=
foodBean
.
getCurrentMaxNumber
();
if
(!
TextUtils
.
isEmpty
(
User_Qty
))
{
String
msg
=
"["
+
foodBean
.
getFoodName
()
+
"]"
+
LanguageUtils
.
get_language_system
(
mRootView
.
getActivity2
(),
"Comm.pause"
,
"已暫停"
);
CommonTipDialog
.
showSurpisedDialog
(
mRootView
.
getActivity2
(),
msg
,
null
,
null
,
null
,
null
,
null
);
return
false
;
}
return
true
;
}
private
boolean
foodConditionFilter
(
Food
foodBean
)
{
long
Invisible
=
foodBean
.
getInvisible
();
if
(
Invisible
==
2
)
{
String
msg
=
"["
+
foodBean
.
getFoodName
()
+
"]"
+
LanguageUtils
.
get_language_system
(
mRootView
.
getActivity2
(),
"Comm.pause"
,
"已暫停"
);
CommonTipDialog
.
showSurpisedDialog
(
mRootView
.
getActivity2
(),
msg
,
null
,
null
,
null
,
null
,
null
);
return
false
;
}
String
User_Qty
=
foodBean
.
getCurrentMaxNumber
();
if
(!
TextUtils
.
isEmpty
(
User_Qty
))
{
if
(
User_Qty
.
equals
(
"售罄"
)
||
User_Qty
.
equals
(
"暫停"
))
{
String
msg
=
"["
+
foodBean
.
getFoodName
()
+
"]"
+
User_Qty
;
CommonTipDialog
.
showSurpisedDialog
(
mRootView
.
getActivity2
(),
msg
,
null
,
null
,
null
,
null
,
null
);
return
false
;
}
}
if
(!
memberPointsCondition
(
foodBean
.
getPointsRedeem
(),
foodBean
.
getFoodName
()))
{
return
false
;
}
return
true
;
}
private
boolean
comboConditionFilter
(
ComboItem
comboItem
)
{
long
Invisible
=
comboItem
.
getInvisible
();
if
(
Invisible
==
2
)
{
String
msg
=
"["
+
comboItem
.
getName
()
+
"]"
+
LanguageUtils
.
get_language_system
(
mRootView
.
getActivity2
(),
"Comm.pause"
,
"已暫停"
);
CommonTipDialog
.
showSurpisedDialog
(
mRootView
.
getActivity2
(),
msg
,
null
,
null
,
null
,
null
,
null
);
return
false
;
}
String
User_Qty
=
comboItem
.
getCurrentMaxNumber
();
if
(!
TextUtils
.
isEmpty
(
User_Qty
))
{
if
(
User_Qty
.
equals
(
"售罄"
)
||
User_Qty
.
equals
(
"暫停"
))
{
String
msg
=
"["
+
comboItem
.
getName
()
+
"]"
+
User_Qty
;
CommonTipDialog
.
showSurpisedDialog
(
mRootView
.
getActivity2
(),
msg
,
null
,
null
,
null
,
null
,
null
);
return
false
;
}
}
if
(!
memberPointsCondition
(
comboItem
.
getPointsRedeem
(),
comboItem
.
getName
()))
{
return
false
;
}
return
true
;
}
/**
* 積分是否滿足條件
*
* @param pointsRedeem
* @return
*/
public
boolean
memberPointsCondition
(
double
pointsRedeem
,
String
foodName
)
{
if
(
mTakeawayOrder
!=
null
)
{
//外賣新訂單 不需要驗證
return
true
;
}
MemberInfo
memberInfo
=
mDoshokuOrder
.
getMemberInfo
();
if
(
memberInfo
==
null
)
{
//当前食品需要会员积分
if
(
pointsRedeem
>
0
)
{
mRootView
.
showMessage
(
LanguageUtils
.
get_language_system
(
mApplication
,
"unused_members_can.not.order.food"
,
"積分食品,未使用會員,不可點選"
)
+
"\""
+
foodName
+
"\""
);
return
false
;
}
}
else
{
//如果没有会员,则pointsadd=5是加5分 pointsredeem=5是減5分
//當一張臺號沒有會員登錄時判定積分為0 不能為負數
//此時call pointsredeem=5 的食物 不給過
//點選pointsadd=5的食物 0+5 是正數 這個給過
if
(
pointsRedeem
>
0
&&
memberInfo
.
getMemberPoint
()
<
pointsRedeem
)
{
mRootView
.
showMessage
(
LanguageUtils
.
get_language_system
(
mApplication
,
"insufficient.points.can.not.selected"
,
"積分食品,會員積分不足,不可點選"
)
+
"\""
+
foodName
+
"\""
);
return
false
;
}
}
return
true
;
}
private
boolean
modifierConditionFilter
(
Modifier
modifier
)
{
long
Invisible
=
modifier
.
getInvisible
();
if
(
Invisible
==
2
)
{
String
msg
=
"["
+
modifier
.
getName
()
+
"]"
+
LanguageUtils
.
get_language_system
(
mRootView
.
getActivity2
(),
"Comm.pause"
,
"已暫停"
);
CommonTipDialog
.
showSurpisedDialog
(
mRootView
.
getActivity2
(),
msg
,
null
,
null
,
null
,
null
,
null
);
return
false
;
}
String
User_Qty
=
modifier
.
getCurrentMaxNumber
();
if
(!
TextUtils
.
isEmpty
(
User_Qty
))
{
if
(
User_Qty
.
equals
(
"售罄"
)
||
User_Qty
.
equals
(
"暫停"
))
{
String
msg
=
"["
+
modifier
.
getName
()
+
"]"
+
User_Qty
;
CommonTipDialog
.
showSurpisedDialog
(
mRootView
.
getActivity2
(),
msg
,
null
,
null
,
null
,
null
,
null
);
return
false
;
}
}
return
true
;
}
}
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/orderManager/OrderDetailPresenter.java
View file @
7dc96a6d
...
...
@@ -8,6 +8,7 @@ import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import
com.gingersoft.gsa.cloud.order.bean.response.OrderDiscountResponse
;
import
com.gingersoft.gsa.cloud.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.pay.bean.PayMethod
;
import
com.gingersoft.gsa.cloud.pay.contract.PayMethodContract
;
import
com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment
;
import
com.gingersoft.gsa.cloud.pay.util.PayMethodUtils
;
import
com.gingersoft.gsa.cloud.table.R
;
...
...
@@ -17,7 +18,6 @@ import com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem3;
import
com.jess.arms.di.scope.ActivityScope
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.utils.RxLifecycleUtils
;
import
org.simple.eventbus.EventBus
;
...
...
@@ -138,7 +138,7 @@ public class OrderDetailPresenter extends BaseOrderConterPresenter<OrderDetailCo
payMethod
.
setTipsPrice
(
orderPayBean
.
getTipsPrice
());
payMethods
.
add
(
payMethod
);
}
PayMethod
payMethod
=
PayMethodUtils
.
filterPaymentMethodById
(
payMethods
,
PayMethod
.
HYWEB_POS_TYPE_CC
);
PayMethod
payMethod
=
PayMethodUtils
.
filterPaymentMethodById
(
payMethods
,
PayMethod
Contract
.
PAY_METHOD_ID_1030
);
if
(
payMethod
!=
null
)
{
//只有卡片支付才支持補小費
return
true
;
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/orderManager/OrderCenterActivity.java
View file @
7dc96a6d
...
...
@@ -31,7 +31,6 @@ import com.gingersoft.gsa.cloud.table.mvp.presenter.orderManager.OrderCenterPres
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.AllOrderFragment
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog
;
import
com.jess.arms.base.BaseFragmentActivity
;
import
com.jess.arms.base.delegate.IActivity
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.qmuiteam.qmui.alpha.QMUIAlphaButton
;
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/activity/orderManager/OrderDetailActivity.java
View file @
7dc96a6d
...
...
@@ -5,6 +5,7 @@ import android.os.Build;
import
android.os.Bundle
;
import
android.text.TextUtils
;
import
android.view.View
;
import
android.view.Window
;
import
android.widget.FrameLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
...
...
@@ -23,8 +24,12 @@ import com.gingersoft.gsa.cloud.common.utils.LanguageUtils;
import
com.gingersoft.gsa.cloud.common.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.order.contract.OrderStatusContract
;
import
com.gingersoft.gsa.cloud.order.order.DoshokuOrder
;
import
com.gingersoft.gsa.cloud.pay.PayAction
;
import
com.gingersoft.gsa.cloud.pay.RequestParms
;
import
com.gingersoft.gsa.cloud.pay.bean.PayMethod
;
import
com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.fragment.PayFlowFragment
;
import
com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.R2
;
...
...
@@ -171,6 +176,9 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
initOrderDetail
(
mOrderDetailItem
);
setBtnVisible
();
btn_refund
.
setVisibility
(
View
.
GONE
);
if
(
AppDevices
.
isYedpay
())
{
btn_refund
.
setVisibility
(
View
.
VISIBLE
);
}
}
@Subscriber
(
tag
=
PosActionStatusExceptionFragment
.
REFREAFSH_ORDER_EVENT
)
...
...
@@ -308,6 +316,7 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
private
void
setBtnVisible
()
{
if
(
mOrderDetailItem
.
getRestaurantOperationId
()
!=
null
)
{
//已清机
setWithSettlementLayoutVisible
();
}
else
{
if
(
mOrderDetailItem
.
withHywebPay
()
&&
AppDevices
.
isHywebPos
())
{
...
...
@@ -489,21 +498,6 @@ public class OrderDetailActivity extends BaseFragmentActivity<OrderDetailPresent
}
}
private
void
setOrderBtnVisbilityByTxnId
(
String
cancelTxnId
,
String
refundTxnId
)
{
if
(!
TextUtils
.
isEmpty
(
cancelTxnId
))
{
tv_order_status
.
setText
(
"已取消"
);
tv_order_status
.
setVisibility
(
View
.
VISIBLE
);
ll_bottom
.
setVisibility
(
View
.
GONE
);
return
;
}
if
(!
TextUtils
.
isEmpty
(
refundTxnId
))
{
tv_order_status
.
setVisibility
(
View
.
VISIBLE
);
tv_order_status
.
setText
(
"已退款"
);
ll_bottom
.
setVisibility
(
View
.
GONE
);
return
;
}
}
@Override
public
void
returnOrderDetail
(
OrderManagerResponse
orderDetailItem
)
{
this
.
mOrderDetailItem
=
orderDetailItem
;
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/adapter/meal/SelectMealAdapter.java
View file @
7dc96a6d
...
...
@@ -14,7 +14,7 @@ import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import
com.gingersoft.gsa.cloud.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.R2
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.MealStandPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.
mealstand.
MealStandPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.OrderContentPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity
;
import
com.jess.arms.base.BaseHolder
;
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/discount/CouponFragment.java
View file @
7dc96a6d
...
...
@@ -13,12 +13,11 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.gingersoft.gsa.cloud.common.core.discount.MemberCoupon
;
import
com.gingersoft.gsa.cloud.common.loadsir.LoadsirUtil
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.R2
;
import
com.gingersoft.gsa.cloud.table.di.component.DaggerCouponComponent
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.CouponContract
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.CouponPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.
discount.
CouponPresenter
;
import
com.gingersoft.gsa.cloud.ui.adapter.TagViewAdapter
;
import
com.gingersoft.gsa.cloud.ui.bean.TagViewItem
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog
;
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/discount/DiscountDialogFragment.java
View file @
7dc96a6d
...
...
@@ -56,7 +56,7 @@ public class DiscountDialogFragment extends BaseDialogFragment<BasePresenter> {
QMUILinearLayout
llContainer
;
private
CouponFragment
couponFragment
;
private
Bil
lDiscountFragment
billDiscountFragment
;
private
Noma
lDiscountFragment
billDiscountFragment
;
private
List
<
String
>
mTabTitles
=
new
ArrayList
<>();
private
int
mCurrentPageIndex
=
0
;
...
...
@@ -73,6 +73,7 @@ public class DiscountDialogFragment extends BaseDialogFragment<BasePresenter> {
@Override
public
View
initView
(
@NonNull
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
this
.
getDialog
().
requestWindowFeature
(
Window
.
FEATURE_NO_TITLE
);
this
.
getDialog
().
setCanceledOnTouchOutside
(
false
);
return
inflater
.
inflate
(
R
.
layout
.
table_dialog_discout
,
container
,
false
);
}
...
...
@@ -95,7 +96,6 @@ public class DiscountDialogFragment extends BaseDialogFragment<BasePresenter> {
int
mShadowElevationDp
=
14
;
llContainer
.
setRadiusAndShadow
(
15
,
QMUIDisplayHelper
.
dp2px
(
mContext
,
mShadowElevationDp
),
mShadowAlpha
);
initTopbar
();
initTabAndPager
();
}
...
...
@@ -128,8 +128,8 @@ public class DiscountDialogFragment extends BaseDialogFragment<BasePresenter> {
if
(
billDiscountFragment
!=
null
)
{
return
billDiscountFragment
;
}
billDiscountFragment
=
Bil
lDiscountFragment
.
newInstance
();
billDiscountFragment
.
setOnDiscountItemClickListener
(
new
Bil
lDiscountFragment
.
OnBillDiscountItemClickListener
()
{
billDiscountFragment
=
Noma
lDiscountFragment
.
newInstance
();
billDiscountFragment
.
setOnDiscountItemClickListener
(
new
Noma
lDiscountFragment
.
OnBillDiscountItemClickListener
()
{
@Override
public
void
onItemClick
(
Discount
item
,
int
position
)
{
if
(
onDiscountItemClickListener
!=
null
)
{
...
...
@@ -195,17 +195,6 @@ public class DiscountDialogFragment extends BaseDialogFragment<BasePresenter> {
});
}
private
void
initTopbar
()
{
// topbar.setBackgroundColor(ContextCompat.getColor(_mActivity, R.color.theme_color));
// if (canScan) {
// topbar.addRightImageButton(R.mipmap.table_white_scan, R.id.topbar_right_change_button)
// .setOnClickListener(v -> {
// _mActivity.onBackPressedSupport();
// });
// }
// topbar.setTitle("折扣");
}
@Override
public
boolean
onBackPressedSupport
()
{
return
super
.
onBackPressedSupport
();
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/discount/
Bil
lDiscountFragment.java
→
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/discount/
Noma
lDiscountFragment.java
View file @
7dc96a6d
...
...
@@ -12,23 +12,19 @@ import androidx.recyclerview.widget.GridLayoutManager;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.chad.library.adapter.base.BaseQuickAdapter
;
import
com.chad.library.adapter.base.listener.OnItemClickListener
;
import
com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback
;
import
com.gingersoft.gsa.cloud.database.bean.Discount
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.R2
;
import
com.gingersoft.gsa.cloud.table.di.component.DaggerBillDiscountComponent
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.BillDiscountContract
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.BillDiscountPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.NomalDiscountContract
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.discount.NomalDiscountPresenter
;
import
com.gingersoft.gsa.cloud.ui.adapter.TagViewAdapter
;
import
com.gingersoft.gsa.cloud.ui.bean.TagViewItem
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog
;
import
com.jess.arms.base.BaseFragment
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.kingja.loadsir.callback.Callback
;
import
com.kingja.loadsir.core.LoadService
;
import
com.kingja.loadsir.core.LoadSir
;
...
...
@@ -53,7 +49,7 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
class
BillDiscountFragment
extends
BaseFragment
<
BillDiscountPresenter
>
implements
Bil
lDiscountContract
.
View
{
public
class
NomalDiscountFragment
extends
BaseFragment
<
NomalDiscountPresenter
>
implements
Noma
lDiscountContract
.
View
{
@BindView
(
R2
.
id
.
rv_bill_discount
)
RecyclerView
rvBillDiscount
;
...
...
@@ -65,8 +61,8 @@ public class BillDiscountFragment extends BaseFragment<BillDiscountPresenter> im
private
LoadService
loadService
;
public
static
Bil
lDiscountFragment
newInstance
()
{
BillDiscountFragment
fragment
=
new
Bil
lDiscountFragment
();
public
static
Noma
lDiscountFragment
newInstance
()
{
NomalDiscountFragment
fragment
=
new
Noma
lDiscountFragment
();
return
fragment
;
}
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/mealstand/MealDiscountFragment.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
ui
.
fragment
.
mealstand
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
androidx.viewpager.widget.ViewPager
;
import
androidx.viewpager2.widget.ViewPager2
;
import
com.gingersoft.gsa.cloud.common.core.member.MemberInfo
;
import
com.gingersoft.gsa.cloud.order.order.DoshokuOrder
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.MealDiscountContract
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.MealDiscountPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.CouponFragment
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.NomalDiscountFragment
;
import
com.gingersoft.gsa.cloud.ui.adapter.TabFragmentAdapter
;
import
com.gingersoft.gsa.cloud.ui.view.MyTableView
;
import
com.google.android.material.tabs.TabLayout
;
import
com.jess.arms.base.BaseFragment
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.qmuiteam.qmui.widget.tab.QMUITab
;
import
java.util.ArrayList
;
import
java.util.List
;
import
javax.inject.Inject
;
import
butterknife.BindView
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:46
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
class
MealDiscountFragment
extends
BaseFragment
<
MealDiscountPresenter
>
implements
MealDiscountContract
.
View
{
@BindView
(
R
.
id
.
tab_segment
)
MyTableView
tabSegment
;
@BindView
(
R
.
id
.
viewPager
)
ViewPager
viewPager
;
@Inject
List
<
String
>
mTabTitles
;
public
static
MealDiscountFragment
newInstance
()
{
MealDiscountFragment
fragment
=
new
MealDiscountFragment
();
return
fragment
;
}
@Override
public
void
setupFragmentComponent
(
@NonNull
AppComponent
appComponent
)
{
DaggerMealDiscountComponent
//如找不到该类,请编译一下项目
.
builder
()
.
appComponent
(
appComponent
)
.
view
(
this
)
.
build
()
.
inject
(
this
);
}
@Override
public
View
initView
(
@NonNull
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
return
inflater
.
inflate
(
R
.
layout
.
fragment_meal_discount
,
container
,
false
);
}
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
initTabTitles
();
initViewPager
();
}
private
void
initTabTitles
()
{
mTabTitles
.
add
(
"折扣"
);
MemberInfo
memberInfo
=
DoshokuOrder
.
getInstance
().
getMemberInfo
();
if
(
memberInfo
!=
null
)
{
mTabTitles
.
add
(
"優惠券"
);
}
tabSegment
.
setTitles
(
mTabTitles
);
}
private
void
initViewPager
()
{
List
<
Fragment
>
mFragments
=
new
ArrayList
<>();
mFragments
.
add
(
NomalDiscountFragment
.
newInstance
());
mFragments
.
add
(
CouponFragment
.
newInstance
());
//实例化适配器
TabFragmentAdapter
mTabFragmentAdapter
=
new
TabFragmentAdapter
(
getParentFragmentManager
(),
1
);
//设置加载的Fragment集合
mTabFragmentAdapter
.
setFragments
(
mFragments
);
//设置Viewpager的适配器
viewPager
.
setAdapter
(
mTabFragmentAdapter
);
//TabLayout绑定ViewPager
tabSegment
.
setTitles
(
mTabTitles
).
setupWithViewPager
(
viewPager
);
}
@Override
public
void
setData
(
@Nullable
Object
data
)
{
}
@Override
public
void
showLoading
(
String
message
)
{
}
@Override
public
void
hideLoading
()
{
}
@Override
public
void
showMessage
(
@NonNull
String
message
)
{
checkNotNull
(
message
);
ArmsUtils
.
snackbarText
(
message
);
}
@Override
public
void
launchActivity
(
@NonNull
Intent
intent
)
{
checkNotNull
(
intent
);
ArmsUtils
.
startActivity
(
intent
);
}
@Override
public
void
killMyself
()
{
}
}
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/ui/fragment/mealstand/SetMealFragment.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
table
.
mvp
.
ui
.
fragment
.
mealstand
;
import
android.content.Intent
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.util.SparseArray
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewStub
;
import
android.widget.Button
;
import
android.widget.FrameLayout
;
import
android.widget.ImageButton
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
androidx.recyclerview.widget.DefaultItemAnimator
;
import
androidx.recyclerview.widget.GridLayoutManager
;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
androidx.recyclerview.widget.RecyclerView
;
import
androidx.viewpager.widget.ViewPager
;
import
com.billy.cc.core.component.CC
;
import
com.gingersoft.gsa.cloud.app.GsaCloudApplication
;
import
com.gingersoft.gsa.cloud.common.constans.FoodSummaryConstans
;
import
com.gingersoft.gsa.cloud.common.constans.MealConstant
;
import
com.gingersoft.gsa.cloud.common.core.member.MemberInfo
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.common.utils.other.SPUtils
;
import
com.gingersoft.gsa.cloud.component.ComponentName
;
import
com.gingersoft.gsa.cloud.database.bean.ComboItem
;
import
com.gingersoft.gsa.cloud.database.bean.Food
;
import
com.gingersoft.gsa.cloud.database.bean.Modifier
;
import
com.gingersoft.gsa.cloud.order.bean.response.OrderResponse
;
import
com.gingersoft.gsa.cloud.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.order.order.BaseOrder
;
import
com.gingersoft.gsa.cloud.order.order.DoshokuOrder
;
import
com.gingersoft.gsa.cloud.table.BuildConfig
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.R2
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.SetMealContract
;
import
com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.SetMealPresenter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ModifierAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.FineItemAllFragment
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.CouponFragment
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.fragment.discount.NomalDiscountFragment
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog
;
import
com.gingersoft.gsa.cloud.ui.adapter.TabFragmentAdapter
;
import
com.gingersoft.gsa.cloud.ui.view.MyTableView
;
import
com.jess.arms.base.BaseFragment
;
import
com.jess.arms.base.DefaultAdapter
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
org.simple.eventbus.Subscriber
;
import
org.simple.eventbus.ThreadMode
;
import
java.util.ArrayList
;
import
java.util.List
;
import
javax.inject.Inject
;
import
javax.inject.Named
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
butterknife.OnClick
;
import
butterknife.OnLongClick
;
import
dagger.Lazy
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/17/2021 10:40
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
class
SetMealFragment
extends
BaseFragment
<
SetMealPresenter
>
implements
SetMealContract
.
View
{
@BindView
(
R
.
id
.
btn_table
)
Button
btnTable
;
@BindView
(
R
.
id
.
btn_numberman
)
Button
btnNumberman
;
@BindView
(
R
.
id
.
btn_fid
)
TextView
btnFid
;
@BindView
(
R
.
id
.
btn_meal_delete
)
TextView
btnMealDelete
;
@BindView
(
R
.
id
.
btn_meal_modify_restore
)
TextView
btnMealModifyRestore
;
@BindView
(
R
.
id
.
btn_meal_discount
)
TextView
btnMealDiscount
;
@BindView
(
R
.
id
.
btn_multiple_selection
)
TextView
btnMultipleSelection
;
@BindView
(
R
.
id
.
ll_mm
)
LinearLayout
llMm
;
@BindView
(
R
.
id
.
rv_select_meal
)
RecyclerView
rvSelectMeal
;
@BindView
(
R
.
id
.
ll_meals_main
)
LinearLayout
llMealsMain
;
@BindView
(
R
.
id
.
btn_key1
)
Button
btnKey1
;
@BindView
(
R
.
id
.
btn_key2
)
Button
btnKey2
;
@BindView
(
R
.
id
.
btn_key3
)
Button
btnKey3
;
@BindView
(
R
.
id
.
btn_key4
)
Button
btnKey4
;
@BindView
(
R
.
id
.
btn_key5
)
Button
btnKey5
;
@BindView
(
R
.
id
.
btn_keys
)
ImageButton
btnKeys
;
@BindView
(
R
.
id
.
ll_Keys
)
LinearLayout
llKeys
;
@BindView
(
R
.
id
.
ll_meals
)
LinearLayout
llMeals
;
@BindView
(
R
.
id
.
fl_container
)
FrameLayout
flContainer
;
@BindView
(
R2
.
id
.
rv_food_group
)
RecyclerView
rvFoodGroup
;
@BindView
(
R2
.
id
.
ll_food_group_point
)
LinearLayout
llFoodGroupPoint
;
@BindView
(
R2
.
id
.
ll_food_group
)
LinearLayout
llFoodGroup
;
@BindView
(
R2
.
id
.
rv_food
)
RecyclerView
rvFood
;
@BindView
(
R2
.
id
.
vb_combo_modifier
)
ViewStub
vbComboModifier
;
@BindView
(
R2
.
id
.
scroll_combo
)
RecyclerView
rvCombo
;
@BindView
(
R2
.
id
.
rv_modifier
)
RecyclerView
rvModifier
;
@BindView
(
R2
.
id
.
vb_fine
)
ViewStub
vbFine
;
@BindView
(
R2
.
id
.
tab_fine
)
MyTableView
tabLayoutFine
;
@BindView
(
R2
.
id
.
pager_fine
)
ViewPager
viewPagerFine
;
// @Inject
// @Named("foodGroupList")
// List<Food> mFoodGroupList;
// @Inject
// @Named("foodList")
// List<Food> mFoodList;
// @Inject
// Lazy<List<ComboItem>> mComboList; //套餐细项数据
// @Inject
// Lazy<List<Modifier>> mModifierList; //细项数据
@Inject
FoodGroupAdapter
mFoodGroupAdapter
;
@Inject
FoodAdapter
mFoodAdapter
;
@Inject
Lazy
<
ComboAdapter
>
mComboAdapter
;
@Inject
Lazy
<
ModifierAdapter
>
mModifierAdapter
;
@Inject
GridLayoutManager
mFoodRecycleLayoutManager
;
@Inject
Lazy
<
GridLayoutManager
>
mComboRecycleLayoutManager
;
@Inject
Lazy
<
GridLayoutManager
>
mModifierRecycleLayoutManager
;
@Inject
@Named
(
"fineTabTitles"
)
Lazy
<
List
<
String
>>
mFineTabTitles
;
private
SparseArray
<
View
>
map
=
new
SparseArray
<>(
10
);
private
MealStandActivity
mActivity
;
public
static
final
byte
FOOD_LAYOUT
=
1
;
public
static
final
byte
COMBO_LAYOUT
=
2
;
public
static
final
byte
FINE_LAYOUT
=
3
;
private
byte
mCurrLayout
=
FOOD_LAYOUT
;
public
static
final
String
SET_CURR_LAYOUT_EVENT
=
"setCurrLayoutEvent"
;
private
int
mCurrentViewMode
;
private
boolean
isPluMode
=
false
;
private
int
foodGroupRow
=
2
;
private
int
foodGroupColumn
=
6
;
private
int
foodColumn
=
4
;
private
int
comboColumn
=
4
;
private
int
modColumn
=
4
;
public
static
SetMealFragment
newInstance
()
{
SetMealFragment
fragment
=
new
SetMealFragment
();
return
fragment
;
}
@Override
public
void
setupFragmentComponent
(
@NonNull
AppComponent
appComponent
)
{
DaggerSetMealComponent
//如找不到该类,请编译一下项目
.
builder
()
.
appComponent
(
appComponent
)
.
view
(
this
)
.
build
()
.
inject
(
this
);
}
@Override
public
View
initView
(
@NonNull
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
return
inflater
.
inflate
(
R
.
layout
.
fragment_set_meal
,
container
,
false
);
}
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
mActivity
=
(
MealStandActivity
)
_mActivity
;
initUIStyleConfiguration
();
initViewMap
();
initFoodAdapter
();
initFoodLayoutManager
();
initFoodItemClickListener
();
}
private
void
initUIStyleConfiguration
()
{
foodGroupColumn
=
GsaCloudApplication
.
uiStyleConfiguration
.
getFoodGroupColumnValue
();
foodGroupRow
=
GsaCloudApplication
.
uiStyleConfiguration
.
getFoodGroupRowValue
();
foodColumn
=
GsaCloudApplication
.
uiStyleConfiguration
.
getFoodColumnValue
();
comboColumn
=
GsaCloudApplication
.
uiStyleConfiguration
.
getComboColumnValue
();
modColumn
=
GsaCloudApplication
.
uiStyleConfiguration
.
getModColumnValue
();
}
private
void
initViewMap
()
{
map
.
put
(
MealConstant
.
food_group_ViewMode
,
llFoodGroup
);
map
.
put
(
MealConstant
.
food_ViewMode
,
rvFood
);
map
.
put
(
MealConstant
.
combo_ViewMode
,
vbComboModifier
);
map
.
put
(
MealConstant
.
fine_ViewMode
,
vbFine
);
}
@Subscriber
(
tag
=
SET_CURR_LAYOUT_EVENT
,
mode
=
ThreadMode
.
MAIN
)
private
void
setCurrLayout
(
byte
layout
)
{
mCurrLayout
=
layout
;
switch
(
layout
)
{
case
COMBO_LAYOUT:
showComboModifierLayout
();
break
;
case
FINE_LAYOUT:
showFineLayout
();
break
;
default
:
showViewModeVisibility
(
MealConstant
.
food_group_ViewMode
,
MealConstant
.
food_ViewMode
);
break
;
}
}
private
void
showComboModifierLayout
()
{
try
{
View
vsContent
=
vbComboModifier
.
inflate
();
ButterKnife
.
bind
(
this
,
vsContent
);
initComboAdapter
();
initComboLayoutManager
();
initComboItemClickListener
();
}
catch
(
Exception
e
)
{
}
finally
{
showViewModeVisibility
(
MealConstant
.
combo_ViewMode
);
}
}
private
void
showFineLayout
()
{
try
{
View
vsContent
=
vbFine
.
inflate
();
ButterKnife
.
bind
(
this
,
vsContent
);
initFineViewPager
();
}
catch
(
Exception
e
)
{
}
finally
{
showViewModeVisibility
(
MealConstant
.
fine_ViewMode
);
}
}
private
void
initFineViewPager
()
{
List
<
String
>
tabTitles
=
mFineTabTitles
.
get
();
MemberInfo
memberInfo
=
DoshokuOrder
.
getInstance
().
getMemberInfo
();
if
(
memberInfo
!=
null
)
{
tabTitles
.
add
(
"優惠券"
);
}
tabLayoutFine
.
setTitles
(
tabTitles
);
List
<
Fragment
>
mFragments
=
new
ArrayList
<>();
mFragments
.
add
(
FineItemAllFragment
.
newInstance
());
mFragments
.
add
(
FineItemAllFragment
.
newInstance
());
//实例化适配器
TabFragmentAdapter
mTabFragmentAdapter
=
new
TabFragmentAdapter
(
getParentFragmentManager
(),
1
);
//设置加载的Fragment集合
mTabFragmentAdapter
.
setFragments
(
mFragments
);
//设置Viewpager的适配器
viewPagerFine
.
setAdapter
(
mTabFragmentAdapter
);
//TabLayout绑定ViewPager
tabLayoutFine
.
setTitles
(
tabTitles
).
setupWithViewPager
(
viewPagerFine
);
}
private
void
initFoodAdapter
()
{
if
(
mFoodGroupAdapter
!=
null
)
{
rvFoodGroup
.
setAdapter
(
mFoodGroupAdapter
);
}
if
(
mFoodAdapter
!=
null
)
{
rvFood
.
setAdapter
(
mFoodAdapter
);
}
}
private
void
initFoodLayoutManager
()
{
if
(
mFoodRecycleLayoutManager
!=
null
)
{
rvFood
.
setLayoutManager
(
mFoodRecycleLayoutManager
);
rvFood
.
setItemAnimator
(
new
DefaultItemAnimator
());
}
}
public
void
initFoodItemClickListener
()
{
mFoodAdapter
.
setOnItemClickListener
(
new
FoodAdapter
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
Food
datasBean
,
int
position
)
{
mActivity
.
recordOperat
(
true
);
mPresenter
.
foodItemClick
(
datasBean
);
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_ADD
+
"食品【"
+
datasBean
.
getFoodName
()
+
"】"
);
}
});
}
private
void
initComboItemClickListener
()
{
mComboAdapter
.
get
().
setOnItemClickListener
(
new
ComboAdapter
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
ComboItem
datasBean
,
int
position
)
{
mActivity
.
recordOperat
(
true
);
mPresenter
.
comboItemClick
(
datasBean
);
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_ADD
+
"子食品【"
+
datasBean
.
getName
()
+
"】"
);
}
});
mModifierAdapter
.
get
().
setOnItemClickListener
(
new
ModifierAdapter
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
Modifier
datasBean
,
int
position
)
{
mActivity
.
recordOperat
(
true
);
mPresenter
.
modifierItemClick
(
datasBean
);
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_ADD
+
"細項【"
+
datasBean
.
getName
()
+
"】"
);
}
});
}
private
void
initComboAdapter
()
{
if
(
mComboAdapter
!=
null
)
{
rvCombo
.
setAdapter
(
mComboAdapter
.
get
());
}
if
(
mModifierAdapter
!=
null
)
{
rvModifier
.
setAdapter
(
mModifierAdapter
.
get
());
}
}
private
void
initComboLayoutManager
()
{
if
(
mComboRecycleLayoutManager
!=
null
)
{
rvCombo
.
setLayoutManager
(
mComboRecycleLayoutManager
.
get
());
rvCombo
.
setItemAnimator
(
new
DefaultItemAnimator
());
}
if
(
mModifierRecycleLayoutManager
!=
null
)
{
rvModifier
.
setLayoutManager
(
mModifierRecycleLayoutManager
.
get
());
rvModifier
.
setItemAnimator
(
new
DefaultItemAnimator
());
}
}
@Override
public
void
setData
(
@Nullable
Object
data
)
{
}
@Override
public
void
showLoading
(
String
message
)
{
}
@Override
public
void
hideLoading
()
{
}
@Override
public
void
showMessage
(
@NonNull
String
message
)
{
checkNotNull
(
message
);
ArmsUtils
.
snackbarText
(
message
);
}
@Override
public
void
launchActivity
(
@NonNull
Intent
intent
)
{
checkNotNull
(
intent
);
ArmsUtils
.
startActivity
(
intent
);
}
@Override
public
void
killMyself
()
{
}
@Override
public
void
setFoodGroupRecycleSpanCount
(
int
size
)
{
}
@Override
public
void
setFoodRecycleSpanCount
(
int
size
)
{
if
(
size
>
0
)
{
if
(
size
>
foodColumn
)
{
mFoodRecycleLayoutManager
.
setOrientation
(
LinearLayoutManager
.
VERTICAL
);
mFoodRecycleLayoutManager
.
setSpanCount
(
foodColumn
);
}
else
{
//只有一行就使用水平显示以免不能占满
mFoodRecycleLayoutManager
.
setOrientation
(
LinearLayoutManager
.
HORIZONTAL
);
}
}
}
@Override
public
void
setComboRecycleSpanCount
(
int
size
)
{
if
(
size
>
0
)
{
// if (size > comboRow) {
mComboRecycleLayoutManager
.
get
().
setOrientation
(
LinearLayoutManager
.
VERTICAL
);
mComboRecycleLayoutManager
.
get
().
setSpanCount
(
comboColumn
);
// } else if (size <= ComboColCount) {
// } else {
// //只有一行就使用水平显示以免不能占满
// setComboRecycleLayoutManager(LinearLayoutManager.HORIZONTAL);
// }
}
}
@Override
public
void
setModifierRecycleSpanCount
(
int
size
)
{
if
(
size
>
0
)
{
mModifierRecycleLayoutManager
.
get
().
setOrientation
(
LinearLayoutManager
.
VERTICAL
);
mModifierRecycleLayoutManager
.
get
().
setSpanCount
(
modColumn
);
}
}
@Override
public
void
showViewModeVisibility
(
int
...
viewMode
)
{
//將所有的view隱藏
for
(
int
i
=
0
;
i
<
map
.
size
();
i
++)
{
map
.
valueAt
(
i
).
setVisibility
(
View
.
INVISIBLE
);
}
//設置當前mode為第一個傳入的mode
for
(
int
mode
:
viewMode
)
{
this
.
mCurrentViewMode
=
mode
;
break
;
}
//顯示所有傳入的需要顯示的view
for
(
int
mode
:
viewMode
)
{
map
.
get
(
mode
).
setVisibility
(
View
.
VISIBLE
);
}
//設置當前模式為輸入Plu模式
if
(
viewMode
!=
null
&&
viewMode
[
0
]
==
MealConstant
.
ViewMode_keys
)
{
isPluMode
=
true
;
}
else
{
isPluMode
=
false
;
}
switch
(
mCurrentViewMode
)
{
case
MealConstant
.
food_group_ViewMode
:
case
MealConstant
.
food_ViewMode
:
showModifyLayoutVisibility
(
false
);
break
;
case
MealConstant
.
combo_ViewMode
:
// case MealConstant.modifier_ViewMode:
case
MealConstant
.
fine_ViewMode
:
showModifyLayoutVisibility
(
true
);
break
;
default
:
break
;
}
}
@Override
public
void
showModifyLayoutVisibility
(
boolean
show
)
{
}
@Override
public
void
showBtnMealModifyRestoreVisibility
(
boolean
show
)
{
}
@Override
public
void
setOrderFoodCount
(
String
number
)
{
}
@Override
public
int
getCurrentViewMode
()
{
return
mCurrentViewMode
;
}
@Override
public
void
setPluMode
()
{
isPluMode
=
(
boolean
)
SPUtils
.
get
(
MealConstant
.
EXIT_IS_PLU_MODE
,
false
);
if
(
isPluMode
)
{
showViewModeVisibility
(
MealConstant
.
ViewMode_keys
);
btnFid
.
setBackgroundColor
(
ArmsUtils
.
getColor
(
R
.
color
.
theme_hint_color
));
}
else
{
btnFid
.
setBackground
(
ArmsUtils
.
getDrawablebyResource
(
R
.
drawable
.
ui_selector_item_background
));
}
}
@Override
public
void
resetPluMode
()
{
isPluMode
=
false
;
SPUtils
.
put
(
MealConstant
.
EXIT_IS_PLU_MODE
,
false
);
btnFid
.
setBackground
(
ArmsUtils
.
getDrawablebyResource
(
R
.
drawable
.
ui_selector_item_background
));
}
@Override
public
void
setMealRvScrollToPosition
(
int
position
)
{
rvSelectMeal
.
scrollToPosition
(
position
);
}
@Override
public
void
returnFoodGroupList
(
List
<
Food
>
foodGroupList
)
{
}
@Override
public
void
returnFoodList
(
List
<
Food
>
foodList
)
{
}
@Override
public
void
returnFoodComboList
(
List
<
ComboItem
>
comboList
)
{
}
@Override
public
void
returnModifierList
(
List
<
Modifier
>
modifierList
)
{
}
@Override
public
MealStandActivity
getActivity2
()
{
return
(
MealStandActivity
)
_mActivity
;
}
@Override
public
void
recordOperat
(
boolean
isPressButtonSound
)
{
}
@Override
public
void
setFoodAdapter
(
DefaultAdapter
adapter
)
{
}
@Override
public
void
setOrderDetailAdapter
(
DefaultAdapter
adapter
)
{
}
class
OnClickListenter
{
@OnLongClick
({
R2
.
id
.
btn_meal_delete
,
R2
.
id
.
btn_order_printer
})
public
boolean
onLongClick1
(
View
view
)
{
//记录操作 并且震动
recordOperat
(
true
);
int
id
=
view
.
getId
();
if
(
id
==
R
.
id
.
btn_meal_delete
)
{
mPresenter
.
deleteFoodItem
(
2
);
}
else
if
(
id
==
R
.
id
.
btn_order_printer
)
{
}
return
false
;
}
@OnClick
(
R2
.
id
.
btn_meal_discount
)
void
onClickDiscount
()
{
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_CLICK
+
"食品折扣"
);
OrderDetail
mainOrderDetail
=
mPresenter
.
getSelectMealAdapter
().
getCurrentMainOrderDetail
();
if
(
mainOrderDetail
!=
null
&&
mainOrderDetail
.
getAblediscount
()
==
0
)
{
showMessage
(
"此食品不能參與折扣!"
);
return
;
}
//更新折扣数据
mPresenter
.
loadDiscountData
();
showViewModeVisibility
(
MealConstant
.
discount_ViewMode
);
}
@OnClick
(
R2
.
id
.
btn_multiple_selection
)
void
onClickMultipleSelection
()
{
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_CLICK
,
"多选"
);
currentFinePage
=
0
;
if
(
mPresenter
.
getSelectMealAdapter
().
getSelectedMode
()
==
SelectMealAdapter
.
MULTIPLE_SELECTED
)
{
mPresenter
.
getSelectMealAdapter
().
setSelectedMode
(
SelectMealAdapter
.
SINGLE_SELECTED
);
btn_delete
.
setVisibility
(
View
.
VISIBLE
);
setSelectFunctionVisibility
(
View
.
GONE
);
}
else
{
mPresenter
.
getSelectMealAdapter
().
setSelectedMode
(
SelectMealAdapter
.
MULTIPLE_SELECTED
);
btn_delete
.
setVisibility
(
View
.
GONE
);
setSelectFunctionVisibility
(
View
.
VISIBLE
);
loadFineItemData
();
}
showRemarkLayout
();
}
@OnClick
(
R2
.
id
.
btn_select_all
)
void
onClickSelectAll
()
{
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_CLICK
,
"全選"
);
mPresenter
.
setSelectAll
();
}
@OnClick
(
R2
.
id
.
btn_anti_selection
)
void
onClickAntiSelection
()
{
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_CLICK
,
"反選"
);
mPresenter
.
setAntiSelect
();
}
@OnClick
({
R2
.
id
.
btn_key1
,
R2
.
id
.
btn_key2
,
R2
.
id
.
btn_key3
,
R2
.
id
.
btn_key4
,
R2
.
id
.
btn_key5
,
R2
.
id
.
btn_keys
,
R2
.
id
.
btn_numberman
,
R2
.
id
.
btn_fid
,
R2
.
id
.
btn_meal_delete
,
R2
.
id
.
btn_meal_modify_restore
,
R2
.
id
.
btn_send_order
,
R2
.
id
.
tv_no_save_return
,
R2
.
id
.
tv_order_content
,
R2
.
id
.
btn_taste
,
R2
.
id
.
btn_msg
,
R2
.
id
.
btn_delete
,
R2
.
id
.
btn_end
,
R2
.
id
.
iv_fine_back
})
public
void
onClick
(
View
v
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
String
text
=
null
;
if
(
v
instanceof
Button
)
{
Button
button
=
(
Button
)
v
;
text
=
button
.
getText
().
toString
();
}
else
if
(
v
instanceof
TextView
)
{
TextView
textView
=
(
TextView
)
v
;
text
=
textView
.
getText
().
toString
();
}
LoganManager
.
w_tableMode
(
TAG
,
LoganManager
.
EVENT_CLICK
,
text
);
}
recordOperat
(
true
);
//防抖處理
int
id
=
v
.
getId
();
if
(
id
==
R
.
id
.
btn_numberman
)
{
if
(!
BaseOrder
.
isTableToMeal
())
{
return
;
}
showChoosePeopleNumDialog
(
true
);
}
else
if
(
id
==
R
.
id
.
btn_fid
)
{
//搜索
if
(
mCurrentViewMode
==
MealConstant
.
ViewMode_keys
)
{
showViewModeVisibility
(
MealConstant
.
food_group_ViewMode
,
MealConstant
.
food_ViewMode
);
SPUtils
.
put
(
MealConstant
.
EXIT_IS_PLU_MODE
,
false
);
}
else
{
showViewModeVisibility
(
MealConstant
.
ViewMode_keys
);
SPUtils
.
put
(
MealConstant
.
EXIT_IS_PLU_MODE
,
true
);
}
setPluMode
();
}
else
if
(
id
==
R
.
id
.
btn_meal_delete
)
{
if
(
mPresenter
.
getSelectMealAdapter
().
getSelectedMode
()
==
SelectMealAdapter
.
MULTIPLE_SELECTED
)
{
return
;
}
mPresenter
.
deleteFoodItem
(
1
);
showViewModeVisibility
(
MealConstant
.
food_group_ViewMode
,
MealConstant
.
food_ViewMode
);
SPUtils
.
put
(
MealConstant
.
EXIT_IS_PLU_MODE
,
false
);
setPluMode
();
}
else
if
(
id
==
R
.
id
.
btn_meal_modify_restore
)
{
mPresenter
.
restoreDeleteFood
();
showBtnMealModifyRestoreVisibility
(
false
);
}
else
if
(
id
==
R
.
id
.
btn_send_order
)
{
// RxBindingUtils.setViewClicks(v)
// .subscribe(new Consumer<Object>() {
// @Override
// public void accept(Object o) throws Exception {
if
(
BaseOrder
.
isCurrentOrderType
(
FoodSummaryConstans
.
TAKEAWAY_TYPE
))
{
CC
.
obtainBuilder
(
ComponentName
.
COMPONENT_DELIVERYPICK
)
.
setActionName
(
"SendOrder"
)
.
build
()
.
call
();
return
;
}
mPresenter
.
sendOrder
(
false
,
null
);
// }
// });
}
else
if
(
id
==
R
.
id
.
tv_order_content
)
{
//如果打印成功會回調
Intent
intent
=
new
Intent
(
mContext
,
OrderContentActivity
.
class
);
startActivityForResult
(
intent
,
ORDER_CONTENT_CODE
);
}
else
if
(
id
==
R
.
id
.
tv_no_save_return
)
{
returnTableActivity
(
true
);
}
else
if
(
id
==
R
.
id
.
btn_taste
)
{
currentFinePage
=
0
;
showRemarkLayout
();
}
else
if
(
id
==
R
.
id
.
btn_msg
)
{
currentFinePage
=
1
;
showRemarkLayout
();
}
else
if
(
id
==
R
.
id
.
btn_delete
)
{
if
(
mPresenter
.
getSelectMealAdapter
().
getSelectedMode
()
==
SelectMealAdapter
.
SINGLE_SELECTED
)
{
//只有單選操作的時候可以刪除子項
mPresenter
.
deleteChildItem
();
}
}
else
if
(
id
==
R
.
id
.
btn_end
)
{
mPresenter
.
getSelectMealAdapter
().
setSelectedMode
(
SelectMealAdapter
.
SINGLE_SELECTED
);
btn_delete
.
setVisibility
(
View
.
VISIBLE
);
setSelectFunctionVisibility
(
View
.
GONE
);
//從多選頁離開 重置選中
mPresenter
.
resetSelected
();
showViewModeVisibility
(
MealConstant
.
food_group_ViewMode
,
MealConstant
.
food_ViewMode
);
}
else
if
(
id
==
R
.
id
.
btn_key1
||
id
==
R
.
id
.
btn_key2
||
id
==
R
.
id
.
btn_key3
||
id
==
R
.
id
.
btn_key4
||
id
==
R
.
id
.
btn_key5
||
id
==
R
.
id
.
btn_keys
)
{
int
i
=
Integer
.
parseInt
(
v
.
getTag
().
toString
());
switch
(
i
)
{
case
0
:
case
1
:
case
2
:
case
3
:
case
4
:
case
5
:
if
(
BuildConfig
.
DEBUG
&&
BaseOrder
.
isTableToMeal
())
{
if
(
i
==
1
)
{
OrderResponse
order
=
DoshokuOrder
.
getInstance
().
getOrderPlaced
();
if
(
order
!=
null
)
{
ArmsUtils
.
snackbarText
(
"訂單ID:"
+
order
.
getId
());
}
}
else
if
(
i
==
2
)
{
MemberInfo
memberInfo
=
DoshokuOrder
.
getInstance
().
getMemberInfo
();
if
(
memberInfo
!=
null
)
{
showMessage
(
"積分兌現金比例: "
+
memberInfo
.
getPointRedeemCash
());
}
}
}
mPresenter
.
changeNumber
(
i
);
break
;
case
99
:
ChooseNumberDialog
mChooseNumberDialog
=
new
ChooseNumberDialog
(
mContext
);
mChooseNumberDialog
.
builder
();
mChooseNumberDialog
.
setOnClickListener
(
new
ChooseNumberDialog
.
OnClickListener
()
{
@Override
public
void
onComfirmClick
(
String
number
)
{
int
inumber
=
Integer
.
parseInt
(
number
);
if
(
inumber
==
0
)
{
return
;
}
mPresenter
.
changeNumber
(
inumber
);
}
@Override
public
void
onBackPage
()
{
}
});
mChooseNumberDialog
.
setValueHint
(
"請輸入數量"
);
mChooseNumberDialog
.
setCancelable
(
true
);
mChooseNumberDialog
.
show
();
break
;
default
:
break
;
}
}
else
if
(
id
==
R
.
id
.
iv_fine_back
)
{
showViewModeVisibility
(
MealConstant
.
combo_ViewMode
);
}
}
}
}
component-table/src/main/res/layout/fragment_meal_discount.xml
0 → 100644
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<com.gingersoft.gsa.cloud.ui.view.MyTableView
android:id=
"@+id/tab_segment"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
<androidx.viewpager.widget.ViewPager
android:id=
"@+id/viewPager"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
</LinearLayout>
\ No newline at end of file
component-table/src/main/res/layout/fragment_set_meal.xml
0 → 100644
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/fl_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<include
layout=
"@layout/meal_layout_food_plate"
/>
<include
layout=
"@layout/meal_layout_food_menu"
/>
</LinearLayout>
\ No newline at end of file
component-table/src/main/res/layout/meal_layout_combo_modifier.xml
0 → 100644
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/scroll_combo"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<com.gingersoft.gsa.cloud.ui.view.base.NoScrollRecyclerView
android:id=
"@+id/rv_combo"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
android:visibility=
"visible"
/>
<com.gingersoft.gsa.cloud.ui.view.base.NoScrollRecyclerView
android:id=
"@+id/rv_modifier"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_10"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
android:visibility=
"visible"
/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
\ No newline at end of file
component-table/src/main/res/layout/meal_layout_food_menu.xml
0 → 100644
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<merge
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<LinearLayout
android:id=
"@+id/ll_food_group"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
android:visibility=
"visible"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_food_group"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
/>
<LinearLayout
android:id=
"@+id/ll_food_group_point"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:orientation=
"horizontal"
android:visibility=
"visible"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_food"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
/>
</LinearLayout>
<ViewStub
android:id=
"@+id/vb_combo_modifier"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout=
"@layout/meal_layout_combo_modifier"
/>
<ViewStub
android:id=
"@+id/vb_fine"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout=
"@layout/meal_layout_meal_fine"
/>
</merge>
\ No newline at end of file
component-table/src/main/res/layout/meal_layout_food_plate.xml
0 → 100644
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/ll_meals"
android:layout_width=
"match_parent"
android:layout_height=
"266dp"
android:orientation=
"vertical"
>
<LinearLayout
android:id=
"@+id/ll_meals_main"
android:layout_width=
"match_parent"
android:layout_height=
"221dp"
android:layout_weight=
"1"
>
<LinearLayout
android:id=
"@+id/ll_mm"
android:layout_width=
"55dp"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<Button
android:id=
"@+id/btn_table"
android:layout_width=
"match_parent"
android:layout_height=
"36dp"
android:background=
"#336699"
android:text=
"Button"
android:textColor=
"@drawable/ui_selector_black_press"
android:textSize=
"20sp"
android:textStyle=
"bold"
/>
<Button
android:id=
"@+id/btn_numberman"
android:layout_width=
"match_parent"
android:layout_height=
"25dp"
android:background=
"#FF51A933"
android:text=
"人數:0"
android:textColor=
"@drawable/ui_selector_white_press"
/>
<ScrollView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fillViewport=
"true"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/theme_white_color"
android:orientation=
"vertical"
>
<TextView
android:id=
"@+id/btn_fid"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_5"
android:background=
"@drawable/ui_selector_item_background"
android:drawableTop=
"@drawable/meal_info"
android:drawablePadding=
"@dimen/dp_1"
android:gravity=
"center"
android:text=
"PLU"
android:textAllCaps=
"false"
android:textColor=
"@color/theme_black"
android:textSize=
"@dimen/sp_12"
/>
<TextView
android:id=
"@+id/btn_meal_delete"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_8"
android:background=
"@drawable/ui_selector_item_background"
android:drawableTop=
"@drawable/meal_delete"
android:drawablePadding=
"@dimen/dp_1"
android:gravity=
"center"
android:text=
"刪除"
android:textAllCaps=
"false"
android:textColor=
"@color/theme_black"
android:textSize=
"@dimen/sp_12"
/>
<TextView
android:id=
"@+id/btn_meal_modify_restore"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_8"
android:background=
"@drawable/ui_selector_item_background"
android:drawableTop=
"@drawable/meal_modify_restore"
android:drawablePadding=
"@dimen/dp_1"
android:gravity=
"center"
android:text=
"恢復"
android:textAllCaps=
"false"
android:textColor=
"@color/theme_black"
android:textSize=
"@dimen/sp_12"
android:visibility=
"gone"
/>
<TextView
android:id=
"@+id/btn_meal_discount"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_8"
android:background=
"@drawable/ui_selector_item_background"
android:drawableTop=
"@drawable/meal_discount"
android:drawablePadding=
"@dimen/dp_1"
android:gravity=
"center"
android:text=
"折扣"
android:textAllCaps=
"false"
android:textColor=
"@color/theme_black"
android:textSize=
"@dimen/sp_12"
/>
<TextView
android:id=
"@+id/btn_multiple_selection"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_8"
android:background=
"@drawable/ui_selector_item_background"
android:drawableTop=
"@drawable/meal_muleiple_selection"
android:drawablePadding=
"@dimen/dp_1"
android:gravity=
"center"
android:text=
"@string/meal_multiple_selection"
android:textAllCaps=
"false"
android:textColor=
"@color/theme_black"
android:textSize=
"@dimen/sp_12"
/>
</LinearLayout>
</ScrollView>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_select_meal"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/ll_Keys"
android:layout_width=
"match_parent"
android:layout_height=
"42dp"
>
<Button
android:id=
"@+id/btn_key1"
style=
"@style/ButtonBorderless"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_margin=
"@dimen/dp_1"
android:layout_weight=
"0.01"
android:background=
"@drawable/meal_selector_number_keys"
android:tag=
"1"
android:text=
"@string/Key_1"
/>
<Button
android:id=
"@+id/btn_key2"
style=
"@style/ButtonBorderless"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_margin=
"@dimen/dp_1"
android:layout_weight=
"0.01"
android:background=
"@drawable/meal_selector_number_keys"
android:tag=
"2"
android:text=
"@string/Key_2"
/>
<Button
android:id=
"@+id/btn_key3"
style=
"@style/ButtonBorderless"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_margin=
"@dimen/dp_1"
android:layout_weight=
"0.01"
android:background=
"@drawable/meal_selector_number_keys"
android:tag=
"3"
android:text=
"@string/Key_3"
/>
<Button
android:id=
"@+id/btn_key4"
style=
"@style/ButtonBorderless"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_margin=
"@dimen/dp_1"
android:layout_weight=
"0.01"
android:background=
"@drawable/meal_selector_number_keys"
android:tag=
"4"
android:text=
"@string/Key_4"
/>
<Button
android:id=
"@+id/btn_key5"
style=
"@style/ButtonBorderless"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_margin=
"@dimen/dp_1"
android:layout_weight=
"0.01"
android:background=
"@drawable/meal_selector_number_keys"
android:tag=
"5"
android:text=
"@string/Key_5"
/>
<ImageButton
android:id=
"@+id/btn_keys"
style=
"@style/ButtonBorderless"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_margin=
"@dimen/dp_1"
android:layout_weight=
"0.00"
android:background=
"@drawable/meal_selector_number_keys"
android:src=
"@mipmap/meal_number_key"
android:tag=
"99"
/>
</LinearLayout>
</LinearLayout>
component-table/src/main/res/layout/meal_layout_meal_fine.xml
0 → 100644
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<com.gingersoft.gsa.cloud.ui.view.MyTableView
android:id=
"@+id/tab_fine"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
<androidx.viewpager.widget.ViewPager
android:id=
"@+id/pager_fine"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
</LinearLayout>
\ No newline at end of file
component-table/src/main/res/layout/table_activity_meal_stand.xml
View file @
7dc96a6d
...
...
@@ -103,20 +103,6 @@
android:textSize=
"@dimen/sp_12"
android:visibility=
"gone"
/>
<!-- <TextView-->
<!-- android:id="@+id/btn_food_mode"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="堂食"-->
<!-- android:background="@drawable/ui_selector_item_background"-->
<!-- android:drawablePadding="@dimen/dp_1"-->
<!-- android:textAllCaps="false"-->
<!-- android:gravity="center"-->
<!-- android:layout_marginTop="@dimen/dp_8"-->
<!-- android:drawableTop="@drawable/meal_hall_mode"-->
<!-- android:textColor="@color/theme_black"-->
<!-- android:textSize="@dimen/sp_12"/>-->
<TextView
android:id=
"@+id/btn_meal_discount"
android:layout_width=
"match_parent"
...
...
@@ -144,42 +130,6 @@
android:textAllCaps=
"false"
android:textColor=
"@color/theme_black"
android:textSize=
"@dimen/sp_12"
/>
<!-- <ImageButton-->
<!-- android:id="@+id/btn_meal_discount"-->
<!-- style="@style/ButtonBorderless"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="0dp"-->
<!-- android:layout_weight="1"-->
<!-- android:src="@drawable/meal_discount" />-->
<!-- <TextView-->
<!-- android:id="@+id/btn_temporary"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:background="@drawable/ui_selector_item_background"-->
<!-- android:text="暫存"-->
<!-- android:layout_marginTop="@dimen/dp_8"-->
<!-- android:gravity="center"-->
<!-- android:textAllCaps="false"-->
<!-- android:textColor="@color/theme_black"-->
<!-- android:visibility="visible"-->
<!-- android:drawableTop="@drawable/meal_temporary"-->
<!-- android:textSize="@dimen/sp_12"/>-->
<!-- <ImageButton-->
<!-- android:id="@+id/btn_change_Language"-->
<!-- style="@style/ButtonBorderless"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:src="@drawable/meal_change_language_index_1" />-->
<!-- <ImageButton-->
<!-- android:id="@+id/btn_food_merge"-->
<!-- style="@style/ButtonBorderless"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:src="@drawable/meal_food_merge" />-->
</LinearLayout>
</ScrollView>
</LinearLayout>
...
...
@@ -198,16 +148,6 @@
android:layout_width=
"match_parent"
android:layout_height=
"42dp"
>
<!-- <Button-->
<!-- android:id="@+id/btn_key0"-->
<!-- style="@style/ButtonBorderless"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_weight="0.01"-->
<!-- android:background="@drawable/meal_selector_number_keys"-->
<!-- android:tag="1"-->
<!-- android:text="@string/Key_0" />-->
<Button
android:id=
"@+id/btn_key1"
style=
"@style/ButtonBorderless"
...
...
@@ -276,6 +216,154 @@
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id=
"@+id/ll_food_group"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_below=
"@+id/ll_meals"
android:orientation=
"vertical"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_food_group"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
/>
<LinearLayout
android:id=
"@+id/ll_food_group_point"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:orientation=
"horizontal"
android:visibility=
"visible"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_food"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_above=
"@+id/ll_stand_oper"
android:layout_below=
"@+id/ll_food_group"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
/>
<RelativeLayout
android:id=
"@+id/rl_fine_tabs"
android:layout_width=
"match_parent"
android:layout_height=
"38dp"
android:layout_below=
"@+id/ll_meals"
android:background=
"@color/theme_white_color"
android:visibility=
"invisible"
>
<ImageView
android:id=
"@+id/iv_fine_back"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerVertical=
"true"
android:layout_marginLeft=
"@dimen/normal_space"
android:src=
"@drawable/ic_black_back"
android:visibility=
"visible"
/>
<TextView
android:id=
"@+id/tv_fine_type"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerInParent=
"true"
android:text=
""
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_16"
/>
<com.gingersoft.gsa.cloud.ui.view.PagerSlidingTabStrip
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/tabs_fine"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_centerInParent=
"true"
app:pstsDividerColor=
"@color/theme_white_color"
app:pstsIndicatorColor=
"@color/theme_color"
app:pstsIndicatorHeight=
"@dimen/dp_2"
app:pstsTabBackground=
"@android:color/transparent"
app:pstsTabPaddingLeftRight=
"@dimen/dp_16"
app:pstsTabTextSelectedColor=
"@color/theme_color"
app:pstsTabTextSize=
"@dimen/font_normal"
app:pstsUnderlineHeight=
"0dp"
app:theme=
"@style/AppTheme"
/>
</RelativeLayout>
<androidx.viewpager.widget.ViewPager
android:id=
"@+id/pager_fine"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_above=
"@+id/ll_stand_oper"
android:layout_below=
"@+id/rl_fine_tabs"
android:visibility=
"invisible"
/>
<androidx.core.widget.NestedScrollView
android:id=
"@+id/scroll_combo"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_below=
"@+id/ll_meals"
android:layout_above=
"@+id/ll_stand_oper"
>
<RelativeLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<com.gingersoft.gsa.cloud.ui.view.base.NoScrollRecyclerView
android:id=
"@+id/rv_combo"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
android:visibility=
"visible"
/>
<com.gingersoft.gsa.cloud.ui.view.base.NoScrollRecyclerView
android:id=
"@+id/rv_modifier"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_10"
android:layout_below=
"@+id/rv_combo"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
android:visibility=
"visible"
/>
</RelativeLayout>
</androidx.core.widget.NestedScrollView>
<!-- <androidx.recyclerview.widget.RecyclerView-->
<!-- android:id="@+id/rv_discount"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_above="@+id/ll_stand_oper"-->
<!-- android:layout_below="@+id/ll_meals"-->
<!-- android:divider="@null"-->
<!-- android:fadeScrollbars="false"-->
<!-- android:orientation="vertical"-->
<!-- android:visibility="gone" />-->
<FrameLayout
android:id=
"@+id/fl_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_above=
"@+id/ll_stand_oper"
android:layout_below=
"@+id/ll_meals"
/>
<!--鍵盤-->
<com.gingersoft.gsa.cloud.ui.view.SearchKeyBoardView
android:id=
"@+id/meal_stand_search_keyboard_view"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_above=
"@id/ll_stand_oper"
android:layout_below=
"@+id/ll_meals"
android:visibility=
"gone"
/>
<LinearLayout
android:id=
"@+id/ll_modify"
android:layout_width=
"match_parent"
...
...
@@ -381,18 +469,6 @@
android:textColor=
"@drawable/ui_selector_white_press"
android:textSize=
"@dimen/sp_17"
/>
<!-- <TextView-->
<!-- android:id="@+id/tv_send_order"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_weight="1"-->
<!-- android:background="@color/Grass_green"-->
<!-- android:gravity="center"-->
<!-- android:text="send order"-->
<!-- android:textAppearance="?android:attr/textAppearanceLarge"-->
<!-- android:textColor="@drawable/selector_pressed_state_black"-->
<!-- android:textSize="@dimen/sp_17" />-->
<FrameLayout
android:id=
"@+id/fl_order_content"
android:layout_width=
"0dp"
...
...
@@ -471,153 +547,4 @@
android:visibility=
"gone"
/>
</FrameLayout>
</LinearLayout>
<LinearLayout
android:id=
"@+id/ll_food_group"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_below=
"@+id/ll_meals"
android:orientation=
"vertical"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_food_group"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
/>
<LinearLayout
android:id=
"@+id/ll_food_group_point"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:orientation=
"horizontal"
android:visibility=
"visible"
/>
</LinearLayout>
<RelativeLayout
android:id=
"@+id/rl_fine_tabs"
android:layout_width=
"match_parent"
android:layout_height=
"38dp"
android:layout_below=
"@+id/ll_meals"
android:background=
"@color/theme_white_color"
android:visibility=
"invisible"
>
<ImageView
android:id=
"@+id/iv_fine_back"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerVertical=
"true"
android:layout_marginLeft=
"@dimen/normal_space"
android:contentDescription=
"@string/app_name"
android:src=
"@drawable/ic_black_back"
android:visibility=
"visible"
/>
<TextView
android:id=
"@+id/tv_fine_type"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerInParent=
"true"
android:text=
""
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_16"
/>
<com.gingersoft.gsa.cloud.ui.view.PagerSlidingTabStrip
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/tabs_fine"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_centerInParent=
"true"
app:pstsDividerColor=
"@color/theme_white_color"
app:pstsIndicatorColor=
"@color/theme_color"
app:pstsIndicatorHeight=
"@dimen/dp_2"
app:pstsTabBackground=
"@android:color/transparent"
app:pstsTabPaddingLeftRight=
"@dimen/dp_16"
app:pstsTabTextSelectedColor=
"@color/theme_color"
app:pstsTabTextSize=
"@dimen/font_normal"
app:pstsUnderlineHeight=
"0dp"
app:theme=
"@style/AppTheme"
/>
</RelativeLayout>
<ScrollView
android:id=
"@+id/scroll_combo"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_below=
"@+id/ll_meals"
android:layout_above=
"@+id/ll_stand_oper"
>
<RelativeLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<com.gingersoft.gsa.cloud.ui.view.base.NoScrollRecyclerView
android:id=
"@+id/rv_combo"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
android:visibility=
"visible"
/>
<com.gingersoft.gsa.cloud.ui.view.base.NoScrollRecyclerView
android:id=
"@+id/rv_modifier"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_10"
android:layout_below=
"@+id/rv_combo"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
android:visibility=
"visible"
/>
</RelativeLayout>
</ScrollView>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_discount"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_above=
"@+id/ll_stand_oper"
android:layout_below=
"@+id/ll_meals"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
android:visibility=
"gone"
/>
<!-- <androidx.recyclerview.widget.RecyclerView-->
<!-- android:id="@+id/rv_food_group"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_below="@+id/ll_meals"-->
<!-- android:divider="@null"-->
<!-- android:fadeScrollbars="false"-->
<!-- android:orientation="vertical" />-->
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_food"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_above=
"@+id/ll_stand_oper"
android:layout_below=
"@+id/ll_food_group"
android:divider=
"@null"
android:fadeScrollbars=
"false"
android:orientation=
"vertical"
/>
<androidx.viewpager.widget.ViewPager
android:id=
"@+id/pager_fine"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_above=
"@+id/ll_stand_oper"
android:layout_below=
"@+id/rl_fine_tabs"
android:visibility=
"invisible"
/>
<!--鍵盤-->
<com.gingersoft.gsa.cloud.ui.view.SearchKeyBoardView
android:id=
"@+id/meal_stand_search_keyboard_view"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_above=
"@id/ll_stand_oper"
android:layout_below=
"@+id/ll_meals"
android:visibility=
"gone"
/>
</RelativeLayout>
\ No newline at end of file
component-table/src/main/res/layout/table_activity_meal_stand2.xml
0 → 100644
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@color/theme_white_color"
>
<Chronometer
android:id=
"@+id/ctime"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
android:layout_alignParentRight=
"true"
android:layout_centerVertical=
"true"
android:text=
"Chronometer"
/>
<fragment
android:name=
"com.gingersoft.gsa.cloud.table.mvp.ui.fragment.mealstand.SetMealFragment"
android:id=
"@+id/fl_food_plate"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
<FrameLayout
android:id=
"@+id/fl_food_menu"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_below=
"@+id/fl_food_plate"
/>
<!-- <include layout="@layout/meal_layout_food_plate"/>-->
<!-- <include layout="@layout/meal_layout_food_menu"/>-->
<!--鍵盤-->
<com.gingersoft.gsa.cloud.ui.view.SearchKeyBoardView
android:id=
"@+id/meal_stand_search_keyboard_view"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_above=
"@id/ll_stand_oper"
android:layout_below=
"@+id/ll_meals"
android:visibility=
"gone"
/>
<LinearLayout
android:id=
"@+id/ll_modify"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_45"
android:layout_alignParentLeft=
"true"
android:layout_alignParentRight=
"true"
android:layout_alignParentBottom=
"true"
android:visibility=
"invisible"
>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id=
"@+id/btn_select_all"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginRight=
"1dp"
android:layout_weight=
"0.1"
android:background=
"#00B9F7"
android:gravity=
"center"
android:text=
"@string/all_selection"
android:textColor=
"@color/theme_white_color"
android:textSize=
"@dimen/sp_14"
android:visibility=
"gone"
/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id=
"@+id/btn_anti_selection"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginRight=
"1dp"
android:layout_weight=
"0.1"
android:background=
"#00B9F7"
android:gravity=
"center"
android:text=
"@string/anti_selection"
android:textColor=
"@color/theme_white_color"
android:textSize=
"@dimen/sp_14"
android:visibility=
"gone"
/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id=
"@+id/btn_taste"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginRight=
"1dp"
android:layout_weight=
"0.1"
android:background=
"#00B9F7"
android:gravity=
"center"
android:text=
"@string/taste"
android:textColor=
"@color/theme_white_color"
android:textSize=
"@dimen/sp_14"
/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id=
"@+id/btn_msg"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"center"
android:layout_marginRight=
"1dp"
android:layout_weight=
"0.1"
android:background=
"#7D8888"
android:gravity=
"center"
android:text=
"@string/msg"
android:textColor=
"@color/theme_white_color"
android:textSize=
"@dimen/sp_14"
/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id=
"@+id/btn_delete"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginRight=
"1dp"
android:layout_weight=
"0.1"
android:background=
"#FF5024"
android:gravity=
"center"
android:text=
"@string/remove"
android:textColor=
"@color/theme_white_color"
android:textSize=
"@dimen/sp_14"
/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id=
"@+id/btn_end"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginRight=
"1dp"
android:layout_weight=
"0.1"
android:background=
"@color/Grass_green"
android:gravity=
"center"
android:text=
"@string/end"
android:textColor=
"@color/theme_white_color"
android:textSize=
"@dimen/sp_14"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/ll_stand_oper"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_45"
android:layout_alignParentLeft=
"true"
android:layout_alignParentBottom=
"true"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/tv_no_save_return"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:background=
"#A0AAB4"
android:gravity=
"center"
android:text=
"@string/nosaveexit"
android:textAppearance=
"?android:attr/textAppearanceLarge"
android:textColor=
"@drawable/ui_selector_white_press"
android:textSize=
"@dimen/sp_17"
/>
<FrameLayout
android:id=
"@+id/fl_order_content"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:background=
"@color/orange_500"
>
<Button
android:id=
"@+id/btn_order_count"
android:layout_width=
"18dp"
android:layout_height=
"18dp"
android:layout_margin=
"@dimen/dp_2"
android:background=
"@drawable/ui_shape_red_oval"
android:singleLine=
"true"
android:textColor=
"@color/theme_white_color"
android:visibility=
"invisible"
/>
<TextView
android:id=
"@+id/tv_order_content"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:gravity=
"center"
android:text=
"@string/meal_btn_order"
android:textAppearance=
"?android:attr/textAppearanceLarge"
android:textColor=
"@drawable/ui_selector_black_press"
android:textSize=
"@dimen/sp_17"
/>
</FrameLayout>
<FrameLayout
android:id=
"@+id/fl_send_order"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:background=
"@color/Grass_green"
>
<Button
android:id=
"@+id/btn_send_order"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@android:color/transparent"
android:gravity=
"center"
android:text=
"送單"
android:textColor=
"@drawable/ui_selector_black_press"
android:textSize=
"@dimen/sp_17"
/>
</FrameLayout>
<FrameLayout
android:id=
"@+id/fl_printer_order"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:background=
"@color/blue_500"
android:visibility=
"gone"
>
<Button
android:id=
"@+id/btn_order_printer"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@android:color/transparent"
android:gravity=
"center"
android:text=
"@string/meal_print"
android:textColor=
"@drawable/ui_selector_black_press"
android:textSize=
"@dimen/sp_17"
/>
<Button
android:id=
"@+id/btn_printer_machine_name"
android:layout_width=
"40dp"
android:layout_height=
"20dp"
android:layout_alignParentRight=
"true"
android:layout_alignParentBottom=
"true"
android:background=
"@drawable/ui_shape_red_oval"
android:gravity=
"center"
android:singleLine=
"true"
android:textColor=
"@color/theme_white_color"
android:visibility=
"gone"
/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
library-base/src/main/java/com/jess/arms/mvp/BaseLocalModel.java
0 → 100644
View file @
7dc96a6d
package
com
.
jess
.
arms
.
mvp
;
/**
* @作者: bin
* @創建時間: 2021-04-17 12:05
* @更新時間: 2021-04-17 12:05
* @描述:本地模型(与设计图一一对应)
*
*
*/
public
class
BaseLocalModel
{
}
library-base/src/main/java/com/jess/arms/mvp/BaseUseCase.java
0 → 100644
View file @
7dc96a6d
/*
* Copyright 2017 JessYan
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com
.
jess
.
arms
.
mvp
;
import
androidx.lifecycle.Lifecycle
;
import
androidx.lifecycle.LifecycleObserver
;
import
androidx.lifecycle.LifecycleOwner
;
import
androidx.lifecycle.OnLifecycleEvent
;
import
com.jess.arms.integration.IRepositoryManager
;
/**
* 基类 Case
*/
public
class
BaseUseCase
implements
LifecycleObserver
{
public
BaseUseCase
()
{
}
@OnLifecycleEvent
(
Lifecycle
.
Event
.
ON_DESTROY
)
void
onDestroy
(
LifecycleOwner
owner
)
{
owner
.
getLifecycle
().
removeObserver
(
this
);
}
}
library-base/src/main/java/com/jess/arms/utils/ArmsUtils.java
View file @
7dc96a6d
...
...
@@ -72,7 +72,7 @@ public class ArmsUtils {
* @param res
*/
public
static
void
setViewHintSize
(
Context
context
,
int
size
,
TextView
v
,
int
res
)
{
SpannableString
ss
=
new
SpannableString
(
getResources
(
context
).
getString
(
SpannableString
ss
=
new
SpannableString
(
getResources
().
getString
(
res
));
// 新建一个属性对象,设置文字的大小
AbsoluteSizeSpan
ass
=
new
AbsoluteSizeSpan
(
size
,
true
);
...
...
@@ -91,29 +91,29 @@ public class ArmsUtils {
* @return
*/
public
static
int
dip2px
(
Context
context
,
float
dpValue
)
{
final
float
scale
=
getResources
(
context
).
getDisplayMetrics
().
density
;
final
float
scale
=
getResources
().
getDisplayMetrics
().
density
;
return
(
int
)
(
dpValue
*
scale
+
0.5f
);
}
/**
* 获得资源
*/
public
static
Resources
getResources
(
Context
context
)
{
return
context
.
getResources
();
public
static
Resources
getResources
()
{
return
Resources
.
getSystem
();
}
/**
* 得到字符数组
*/
public
static
String
[]
getStringArray
(
Context
context
,
int
id
)
{
return
getResources
(
context
).
getStringArray
(
id
);
return
getResources
().
getStringArray
(
id
);
}
/**
* pix转dip
*/
public
static
int
pix2dip
(
Context
context
,
int
pix
)
{
final
float
densityDpi
=
getResources
(
context
).
getDisplayMetrics
().
density
;
final
float
densityDpi
=
getResources
().
getDisplayMetrics
().
density
;
return
(
int
)
(
pix
/
densityDpi
+
0.5f
);
}
...
...
@@ -126,7 +126,7 @@ public class ArmsUtils {
* @return
*/
public
static
int
getDimens
(
Context
context
,
int
id
)
{
return
(
int
)
getResources
(
context
).
getDimension
(
id
);
return
(
int
)
getResources
().
getDimension
(
id
);
}
/**
...
...
@@ -137,7 +137,7 @@ public class ArmsUtils {
* @return
*/
public
static
float
getDimens
(
Context
context
,
String
dimenName
)
{
return
getResources
(
context
).
getDimension
(
getResources
(
context
).
getIdentifier
(
dimenName
,
"dimen"
,
context
.
getPackageName
()));
return
getResources
(
).
getDimension
(
getResources
(
).
getIdentifier
(
dimenName
,
"dimen"
,
context
.
getPackageName
()));
}
/**
...
...
@@ -147,7 +147,7 @@ public class ArmsUtils {
*/
public
static
String
getString
(
Context
context
,
int
stringID
)
{
return
getResources
(
context
).
getString
(
stringID
);
return
getResources
().
getString
(
stringID
);
}
/**
...
...
@@ -157,7 +157,7 @@ public class ArmsUtils {
*/
public
static
String
getString
(
Context
context
,
String
strName
)
{
return
getString
(
context
,
getResources
(
context
).
getIdentifier
(
strName
,
"string"
,
context
.
getPackageName
()));
return
getString
(
context
,
getResources
().
getIdentifier
(
strName
,
"string"
,
context
.
getPackageName
()));
}
/**
...
...
@@ -169,7 +169,7 @@ public class ArmsUtils {
* @return
*/
public
static
<
T
extends
View
>
T
findViewByName
(
Context
context
,
View
view
,
String
viewName
)
{
int
id
=
getResources
(
context
).
getIdentifier
(
viewName
,
"id"
,
context
.
getPackageName
());
int
id
=
getResources
().
getIdentifier
(
viewName
,
"id"
,
context
.
getPackageName
());
T
v
=
(
T
)
view
.
findViewById
(
id
);
return
v
;
}
...
...
@@ -183,7 +183,7 @@ public class ArmsUtils {
* @return
*/
public
static
<
T
extends
View
>
T
findViewByName
(
Context
context
,
Activity
activity
,
String
viewName
)
{
int
id
=
getResources
(
context
).
getIdentifier
(
viewName
,
"id"
,
context
.
getPackageName
());
int
id
=
getResources
().
getIdentifier
(
viewName
,
"id"
,
context
.
getPackageName
());
T
v
=
(
T
)
activity
.
findViewById
(
id
);
return
v
;
}
...
...
@@ -195,7 +195,7 @@ public class ArmsUtils {
* @return
*/
public
static
int
findLayout
(
Context
context
,
String
layoutName
)
{
int
id
=
getResources
(
context
).
getIdentifier
(
layoutName
,
"layout"
,
context
.
getPackageName
());
int
id
=
getResources
().
getIdentifier
(
layoutName
,
"layout"
,
context
.
getPackageName
());
return
id
;
}
...
...
@@ -258,9 +258,11 @@ public class ArmsUtils {
* @return
*/
public
static
Drawable
getDrawablebyResource
(
Context
context
,
int
rID
)
{
return
getResources
(
context
).
getDrawable
(
rID
);
return
getResources
().
getDrawable
(
rID
);
}
public
static
Drawable
getDrawablebyResource
(
int
rID
)
{
return
getResources
().
getDrawable
(
rID
);
}
/**
* 跳转界面 1 ,通过 {@link AppManager#startActivity(Class)}
...
...
@@ -313,7 +315,7 @@ public class ArmsUtils {
* @return
*/
public
static
int
getScreenWidth
(
Context
context
)
{
return
getResources
(
context
).
getDisplayMetrics
().
widthPixels
;
return
getResources
().
getDisplayMetrics
().
widthPixels
;
}
/**
...
...
@@ -322,7 +324,7 @@ public class ArmsUtils {
* @return
*/
public
static
int
getScreenHeidth
(
Context
context
)
{
return
getResources
(
context
).
getDisplayMetrics
().
heightPixels
;
return
getResources
().
getDisplayMetrics
().
heightPixels
;
}
...
...
@@ -330,14 +332,21 @@ public class ArmsUtils {
* 获得颜色
*/
public
static
int
getColor
(
Context
context
,
int
rid
)
{
return
getResources
(
context
).
getColor
(
rid
);
return
getResources
().
getColor
(
rid
);
}
/**
* 获得颜色
*/
public
static
int
getColor
(
int
rid
)
{
return
getResources
().
getColor
(
rid
);
}
/**
* 获得颜色
*/
public
static
int
getColor
(
Context
context
,
String
colorName
)
{
return
getColor
(
context
,
getResources
(
context
).
getIdentifier
(
colorName
,
"color"
,
context
.
getPackageName
()));
return
getColor
(
context
,
getResources
().
getIdentifier
(
colorName
,
"color"
,
context
.
getPackageName
()));
}
/**
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/app/GsaCloudApplication.java
View file @
7dc96a6d
...
...
@@ -292,8 +292,11 @@ public class GsaCloudApplication extends BaseApplication {
//System請求地址
RetrofitUrlManager
.
getInstance
().
putDomain
(
"system_url"
,
HttpsConstans
.
SYSTEM_URL
);
//後台遷移新地址
RetrofitUrlManager
.
getInstance
().
putDomain
(
"new_base_url"
,
HttpsConstans
.
ricepon_member
);
//ricepon_pay請求地址
RetrofitUrlManager
.
getInstance
().
putDomain
(
"ricepon_pay"
,
HttpsConstans
.
ricepon_pay
);
//ricepon_wechat請求地址
RetrofitUrlManager
.
getInstance
().
putDomain
(
"ricepon_wechat"
,
HttpsConstans
.
ricepon_wechat
);
//ricepon_order請求地址
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/config/globalconfig/applyOptions/MyOkhttpConfiguration.java
View file @
7dc96a6d
...
...
@@ -2,16 +2,32 @@ package com.gingersoft.gsa.cloud.common.config.globalconfig.applyOptions;
import
android.content.Context
;
import
androidx.annotation.NonNull
;
import
com.gingersoft.gsa.cloud.common.config.OkHttpConfig
;
import
com.jess.arms.di.module.ClientModule
;
import
java.io.File
;
import
java.io.IOException
;
import
java.net.InetAddress
;
import
java.net.InetSocketAddress
;
import
java.net.Proxy
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
import
javax.annotation.Nullable
;
import
me.jessyan.progressmanager.ProgressManager
;
import
me.jessyan.retrofiturlmanager.RetrofitUrlManager
;
import
okhttp3.Cache
;
import
okhttp3.Call
;
import
okhttp3.Connection
;
import
okhttp3.Handshake
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Protocol
;
import
okhttp3.Request
;
import
okhttp3.Response
;
import
okhttp3.WebSocket
;
/**
* autour: 宁斌
...
...
@@ -33,5 +49,6 @@ public class MyOkhttpConfiguration implements ClientModule.OkhttpConfiguration {
ProgressManager
.
getInstance
().
with
(
builder
);
//让 Retrofit 同时支持多个 BaseUrl 以及动态改变 BaseUrl. 详细使用请方法查看 https://github.com/JessYanCoding/RetrofitUrlManager
RetrofitUrlManager
.
getInstance
().
with
(
builder
).
build
();
}
}
library-common/src/main/java/com/gingersoft/gsa/cloud/common/config/globalconfig/applyOptions/MyResponseErrorListener.java
View file @
7dc96a6d
...
...
@@ -119,22 +119,7 @@ public class MyResponseErrorListener implements ResponseErrorListener {
private
void
toLoginActivity
(
Activity
context
)
{
ArmsUtils
.
killAll
();
UserContext
.
newInstance
().
logOut
();
// //清空用戶信息
// GsaCloudApplication.clearMemberInfo();
// //修改登錄狀態
// GsaCloudApplication.isLogin = false;
// //清空堂食訂單信息
// CC.obtainBuilder("Component.Base.Order")
// .setActionName("clearDoshokuOrder")
// .build()
// .call();
// //跳轉登錄頁面
// CC.obtainBuilder(ComponentName.COMPONENT_LOGIN)
// .setActionName(ComponentAction.Login.OPEN_LOGIN)
// .build()
// .call();
showloggedDialog
=
false
;
context
.
finish
();
}
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/constans/HttpsConstans.java
View file @
7dc96a6d
...
...
@@ -78,6 +78,9 @@ public class HttpsConstans {
public
static
String
SYSTEM_PATH
=
"/ricepon-system/api/"
;
public
static
String
API_RICEPON_MEMBER
=
"/ricepon-member/api/"
;
//-------------------------------------------支付-------------------------------------------------------------------------------
public
static
String
PAY_PATH
=
"/ricepon-pay/api/"
;
/**
* QRCode相關
*/
...
...
@@ -238,6 +241,7 @@ public class HttpsConstans {
PRINT_QRCODE_ADDRESS
=
PRINT_QRCODE_ADDRESS_URL_HK
+
PRINT_QRCODE_SUFFIX
;
break
;
}
ricepon_pay
=
HttpsConstans
.
ROOT_URL
+
HttpsConstans
.
PAY_PATH
;
ricepon_wechat
=
HttpsConstans
.
ROOT_URL
+
HttpsConstans
.
URL_RICEPON_WECHAT
;
ricepon_order
=
HttpsConstans
.
ROOT_URL
+
HttpsConstans
.
URL_RICEPON_ORDER
;
member_web_ricepon_gsa
=
HttpsConstans
.
ROOT_URL
+
HttpsConstans
.
URL_MEMBER_WEB_RICEPON_GSA
;
...
...
@@ -250,6 +254,7 @@ public class HttpsConstans {
// PRINT_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_FORMAL + PRINT_QRCODE_SUFFIX;
}
public
static
String
ricepon_pay
;
public
static
String
ricepon_wechat
;
public
static
String
ricepon_order
;
public
static
String
member_web_ricepon_gsa
;
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/pay/PayConstans.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
common
.
pay
;
/**
* @作者: bin
* @創建時間: 2021-04-15 9:58
* @更新時間: 2021-04-15 9:58
* @描述:
*/
public
class
PayConstans
{
public
static
final
int
YEDPAY_START_RESULT_CODE
=
100
;
}
library-common/src/main/java/com/gingersoft/gsa/cloud/common/rxjava/ErrorHandleSingleSubscriber.java
View file @
7dc96a6d
...
...
@@ -20,6 +20,10 @@ public abstract class ErrorHandleSingleSubscriber<T> implements SingleObserver<T
private
ErrorHandlerFactory
mHandlerFactory
;
private
LoadService
mLoadService
;
public
ErrorHandleSingleSubscriber
(
RxErrorHandler
rxErrorHandler
)
{
this
.
mHandlerFactory
=
rxErrorHandler
.
getHandlerFactory
();
}
public
ErrorHandleSingleSubscriber
(
RxErrorHandler
rxErrorHandler
,
LoadService
loadService
)
{
this
.
mHandlerFactory
=
rxErrorHandler
.
getHandlerFactory
();
this
.
mLoadService
=
loadService
;
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/rxjava/MyRxSchedulerUtils.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
common
.
rxjava
;
import
com.xuexiang.rxutil2.rxjava.RxSchedulerUtils
;
import
com.xuexiang.rxutil2.rxjava.SchedulerTransformer
;
import
com.xuexiang.rxutil2.rxjava.scheduler.SchedulerType
;
import
java.util.concurrent.Executor
;
import
io.reactivex.Single
;
import
io.reactivex.SingleTransformer
;
import
io.reactivex.Scheduler
;
import
io.reactivex.Single
;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
import
io.reactivex.schedulers.Schedulers
;
/**
* @作者: bin
* @創建時間: 2021-04-17 15:10
* @更新時間: 2021-04-17 15:10
* @描述:自定义Single线程调度器
*/
public
class
MyRxSchedulerUtils
{
public
static
Scheduler
io
()
{
return
io
(
RxSchedulerUtils
.
getIOExecutor
());
}
public
static
Scheduler
io
(
Executor
executor
)
{
return
executor
!=
null
?
Schedulers
.
from
(
executor
)
:
Schedulers
.
io
();
}
//==========================Single===========================//
private
MyRxSchedulerUtils
()
{
throw
new
UnsupportedOperationException
(
"u can't instantiate me..."
);
}
/**
* 回到主线程
*
* @param single 被观察者
*/
public
static
<
T
>
Single
<
T
>
toMain
(
Single
<
T
>
single
)
{
return
single
.
observeOn
(
AndroidSchedulers
.
mainThread
());
}
/**
* 回到io线程
*
* @param single 被观察者
*/
public
static
<
T
>
Single
<
T
>
toIo
(
Single
<
T
>
single
)
{
return
single
.
observeOn
(
Schedulers
.
io
());
}
/**
* 订阅发生在主线程 ( -> -> main)
* 使用compose操作符
*
* @param <T>
* @return
*/
public
static
<
T
>
SingleTransformer
<
T
,
T
>
_main_f
()
{
return
new
SchedulerTransformer
<>(
SchedulerType
.
_main
);
}
/**
* 订阅发生在io线程 ( -> -> io)
* 使用compose操作符
*
* @param <T>
* @return
*/
public
static
<
T
>
SingleTransformer
<
T
,
T
>
_io_f
()
{
return
new
SchedulerTransformer
<>(
SchedulerType
.
_io
);
}
/**
* 处理在io线程,订阅发生在主线程( -> io -> main)
*
* @param <T>
* @return
*/
public
static
<
T
>
SingleTransformer
<
T
,
T
>
_io_main_f
()
{
return
new
SchedulerTransformer
<>(
SchedulerType
.
_io_main
);
}
/**
* 处理在io线程,订阅也发生在io线程( -> io -> io)
*
* @param <T>
* @return
*/
public
static
<
T
>
SingleTransformer
<
T
,
T
>
_io_io_f
()
{
return
new
SchedulerTransformer
<>(
SchedulerType
.
_io_io
);
}
}
library-common/src/main/java/com/gingersoft/gsa/cloud/common/utils/AppDevices.java
View file @
7dc96a6d
...
...
@@ -10,8 +10,28 @@ import android.os.Build;
*/
public
class
AppDevices
{
/**
* 是不是支付POS設備
*
* @return
*/
public
static
final
boolean
isPosPay
()
{
if
(
isYedpay
())
{
return
true
;
}
if
(
isHywebPos
())
{
return
true
;
}
if
(
isBBPos
())
{
return
true
;
}
return
false
;
}
/**
* 是不是N5設備
*
* @return
*/
public
static
final
boolean
isHywebPos
()
{
...
...
@@ -24,6 +44,7 @@ public class AppDevices {
/**
* 是不是BBPOS設備
*
* @return
*/
public
static
final
boolean
isBBPos
()
{
...
...
@@ -36,7 +57,21 @@ public class AppDevices {
/**
* 是不是Yedpay設備
*
* @return
*/
public
static
final
boolean
isYedpay
()
{
String
model
=
Build
.
MODEL
;
if
(
"Yedpay"
.
contains
(
model
))
{
return
true
;
}
return
false
;
}
/**
* 是不是商米設備
*
* @return
*/
public
static
final
boolean
isSunmi
()
{
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/utils/okhttpUtils/OkHttp3Utils.java
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
common
.
utils
.
okhttpUtils
;
import
androidx.annotation.NonNull
;
import
com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
;
import
com.gingersoft.gsa.cloud.common.core.user.UserContext
;
import
com.gingersoft.gsa.cloud.app.GsaCloudApplication
;
...
...
@@ -12,19 +14,28 @@ import com.jess.arms.utils.DeviceUtils;
import
java.io.File
;
import
java.io.IOException
;
import
java.net.InetAddress
;
import
java.net.InetSocketAddress
;
import
java.net.Proxy
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
import
javax.annotation.Nullable
;
import
io.reactivex.Observable
;
import
io.reactivex.schedulers.Schedulers
;
import
okhttp3.Cache
;
import
okhttp3.Call
;
import
okhttp3.Callback
;
import
okhttp3.Connection
;
import
okhttp3.ConnectionPool
;
import
okhttp3.FormBody
;
import
okhttp3.Handshake
;
import
okhttp3.MediaType
;
import
okhttp3.MultipartBody
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Protocol
;
import
okhttp3.Request
;
import
okhttp3.RequestBody
;
import
okhttp3.Response
;
...
...
library-common/src/main/res/color/s_app_color_black_to_blue.xml
0 → 100644
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<!--
Tencent is pleased to support the open source community by making QMUI_Android available.
Copyright (C) 2017-2018 THL A29 Limited, a Tencent company. All rights reserved.
Licensed under the MIT License (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://opensource.org/licenses/MIT
Unless required by applicable law or agreed to in writing, software distributed under the License is
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific language governing permissions and
limitations under the License.
-->
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<item
android:color=
"@color/theme_color"
android:state_enabled=
"false"
/>
<item
android:color=
"@color/theme_color"
android:state_pressed=
"true"
/>
<item
android:color=
"@color/theme_text_color"
/>
</selector>
\ No newline at end of file
library-fragmentation_core/src/main/java/me/yokeyword/fragmentation/SupportActivityDelegate.java
View file @
7dc96a6d
...
...
@@ -154,7 +154,8 @@ public class SupportActivityDelegate {
// 获取activeFragment:即从栈顶开始 状态为show的那个Fragment
ISupportFragment
activeFragment
=
SupportHelper
.
getActiveFragment
(
getSupportFragmentManager
());
if
(
mTransactionDelegate
.
dispatchBackPressedEvent
(
activeFragment
))
return
;
if
(
mTransactionDelegate
.
dispatchBackPressedEvent
(
activeFragment
))
return
;
mSupport
.
onBackPressedSupport
();
}
...
...
library-order/src/main/AndroidManifest.xml
View file @
7dc96a6d
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"com.gingersoft.gsa.cloud.order"
/>
package=
"com.gingersoft.gsa.cloud.order"
>
<application>
<activity
android:name=
"com.gingersoft.gsa.cloud.pay.lifecycle.activity.PayFlowActivity"
/>
</application>
</manifest>
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/
pos/RealPayPos
.java
→
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/
Callback
.java
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
;
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
;
/**
* @作者: bin
* @創建時間: 2021-04-1
3 17:44
* @更新時間: 2021-04-1
3 17:44
* @創建時間: 2021-04-1
4 15:05
* @更新時間: 2021-04-1
4 15:05
* @描述:
*/
public
class
RealPayPos
{
public
interface
Callback
<
T
>
{
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/EventListener.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:28
* @更新時間: 2021-04-14 12:28
* @描述:
*/
public
class
EventListener
{
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/OriginFactory.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
;
import
com.gingersoft.gsa.cloud.common.utils.AppDevices
;
import
com.gingersoft.gsa.cloud.pay.pos.PosPayAction
;
import
com.gingersoft.gsa.cloud.pay.pos.bbpos.BBPosManager
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.HywebManager
;
import
com.gingersoft.gsa.cloud.pay.pos.yedpay.YedpayManager
;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:28
* @更新時間: 2021-04-14 12:28
* @描述:
*/
public
class
OriginFactory
{
public
static
PosPayAction
createPayOrigin
(
RequestParms
requestParms
)
{
if
(
AppDevices
.
isHywebPos
())
{
return
HywebManager
.
newInstance
();
}
else
if
(
AppDevices
.
isBBPos
())
{
return
BBPosManager
.
newInstance
();
}
else
if
(
AppDevices
.
isYedpay
())
{
return
YedpayManager
.
newInstance
(
requestParms
);
}
return
YedpayManager
.
newInstance
(
requestParms
);
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/
pos/Pos
Action.java
→
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/
Pay
Action.java
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
;
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
;
import
lombok.Getter
;
/**
* @作者: bin
...
...
@@ -6,7 +8,8 @@ package com.gingersoft.gsa.cloud.pay.pos;
* @更新時間: 2020-12-26 11:24
* @描述:
*/
public
enum
PosAction
{
@Getter
public
enum
PayAction
{
/**
* 支付、退款、取消、補小費、清機、打印
*/
...
...
@@ -15,17 +18,29 @@ public enum PosAction {
private
String
actionName
;
P
os
Action
(
String
actionName
)
{
P
ay
Action
(
String
actionName
)
{
this
.
actionName
=
actionName
;
}
public
String
getActionName
()
{
return
actionName
;
public
String
getLoadingStepText
(
PayStep
status
)
{
switch
(
status
)
{
case
LOADING:
return
actionName
+
"中..."
;
case
SUCCESS:
return
actionName
+
"成功"
;
case
FAILURE:
return
actionName
+
"失敗"
;
default
:
return
""
;
}
}
public
String
getLoadingStepText
(
String
errMsg
)
{
return
actionName
+
" "
+
errMsg
;
}
public
String
getCallbackExceptionText
()
{
return
actionName
+
"回調異常"
;
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/PayStep.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
;
import
lombok.Getter
;
/**
* @作者: bin
* @創建時間: 2021-04-16 10:17
* @更新時間: 2021-04-16 10:17
* @描述:
*/
@Getter
public
enum
PayStep
{
LOADING
,
SUCCESS
,
FAILURE
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/PaymentControl.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
;
import
com.gingersoft.gsa.cloud.pay.pos.PosPayAction
;
import
com.jess.arms.utils.Preconditions
;
import
lombok.Getter
;
/**
* @作者: bin
* @創建時間: 2021-04-15 16:38
* @更新時間: 2021-04-15 16:38
* @描述:
*/
@Getter
public
class
PaymentControl
{
private
static
PaymentControl
sPaymentControl
;
public
static
PaymentControl
newInstance
()
{
if
(
sPaymentControl
==
null
)
{
sPaymentControl
=
new
PaymentControl
();
}
return
sPaymentControl
;
}
private
PaymentControl
()
{
}
public
void
pay
(
RequestParms
requestParms
)
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
requestParms
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
pay
(
requestParms
);
}
public
void
tip
(
RequestParms
requestParms
)
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
requestParms
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
tip
(
requestParms
);
}
public
void
refund
(
RequestParms
requestParms
)
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
requestParms
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
refund
(
requestParms
);
}
public
void
voidO
(
RequestParms
requestParms
)
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
requestParms
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
void0
(
this
);
}
public
void
retrieval
(
RequestParms
requestParms
)
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
requestParms
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
retrieval
(
this
);
}
public
void
printStub
(
RequestParms
requestParms
)
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
requestParms
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
printStub
(
this
);
}
public
void
settlement
(
RequestParms
requestParms
)
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
requestParms
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
settlement
(
this
);
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/PosPay.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
;
import
android.content.Context
;
import
com.gingersoft.gsa.cloud.pay.pos.PosPayAction
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.BaseBgRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.BasePosRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.yedpay.YedpayCallback
;
import
com.jess.arms.mvp.IView
;
import
com.jess.arms.utils.Preconditions
;
import
lombok.Builder
;
import
lombok.Getter
;
/**
* @作者: bin
* @創建時間: 2020-12-26 10:32
* @更新時間: 2020-12-26 10:32
* @描述:
*/
@Builder
@Getter
public
final
class
PosPay
{
final
Context
context
;
final
IView
lifecycleView
;
final
int
payType
;
final
BasePosRequest
posRequest
;
final
BaseBgRequest
bgRequest
;
final
PayAction
retrievalAction
;
final
Callback
callback
;
final
boolean
showLoading
;
final
long
orderId
;
final
String
txnId
;
//yedpay所需
final
double
payMoney
;
final
YedpayCallback
yedpayCallback
;
public
void
pay
()
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
null
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
pay
(
this
);
}
public
void
tip
()
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
null
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
tip
(
this
);
}
public
void
refund
()
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
null
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
refund
(
this
);
}
public
void
voidO
()
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
null
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
void0
(
this
);
}
public
void
retrieval
()
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
null
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
retrieval
(
this
);
}
public
void
printStub
()
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
null
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
printStub
(
this
);
}
public
void
settlement
()
{
final
PosPayAction
payOrigin
=
OriginFactory
.
createPayOrigin
(
null
);
Preconditions
.
checkNotNull
(
payOrigin
);
payOrigin
.
settlement
(
this
);
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/RequestParms.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
;
import
android.os.Parcel
;
import
android.os.Parcelable
;
import
com.gingersoft.gsa.cloud.pay.Callback
;
import
com.gingersoft.gsa.cloud.pay.PayAction
;
import
com.google.gson.annotations.SerializedName
;
import
java.io.Serializable
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.Getter
;
/**
* @作者: bin
* @創建時間: 2021-04-15 16:46
* @更新時間: 2021-04-15 16:46
* @描述:
*/
@Data
@Builder
public
class
RequestParms
implements
Serializable
{
private
PayAction
action
;
private
Callback
callback
;
private
ResultCallback
resultCallback
;
private
final
int
resturantId
;
private
final
int
payType
;
private
final
long
orderId
;
private
final
double
payMoney
;
/**
* 退款相关
*/
private
final
String
refundReason
;
// @Override
// public int describeContents() {
// return 0;
// }
//
// @Override
// public void writeToParcel(Parcel dest, int flags) {
// dest.writeInt(this.payType);
// dest.writeLong(this.orderId);
// dest.writeDouble(this.payMoney);
// }
//
// protected RequestParms(Parcel in) {
// this.payType = in.readInt();
// this.orderId = in.readLong();
// this.payMoney = in.readDouble();
// }
//
// public static final Creator<RequestParms> CREATOR = new Creator<RequestParms>() {
// @Override
// public RequestParms createFromParcel(Parcel source) {
// return new RequestParms(source);
// }
//
// @Override
// public RequestParms[] newArray(int size) {
// return new RequestParms[size];
// }
// };
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/ResultCallback.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
;
/**
* @作者: bin
* @創建時間: 2021-04-14 15:05
* @更新時間: 2021-04-14 15:05
* @描述:
*/
public
interface
ResultCallback
{
void
onSuccess
();
void
onFailure
(
Throwable
t
);
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/base/BasePayAction.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
base
;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:02
* @更新時間: 2021-04-14 12:02
* @描述:
*/
public
interface
BasePayAction
<
T
>
{
void
pay
(
T
params
);
void
refund
(
T
params
);
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/bean/PosActionStatusExceptionParam.java
View file @
7dc96a6d
...
...
@@ -3,7 +3,7 @@ package com.gingersoft.gsa.cloud.pay.bean;
import
android.os.Parcel
;
import
android.os.Parcelable
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
lombok.Data
;
...
...
@@ -17,7 +17,7 @@ import lombok.Data;
public
class
PosActionStatusExceptionParam
implements
Parcelable
{
private
String
txnId
;
private
P
os
Action
posAction
;
private
P
ay
Action
posAction
;
private
long
orderId
;
private
String
orderNo
;
private
double
amount
;
...
...
@@ -45,7 +45,7 @@ public class PosActionStatusExceptionParam implements Parcelable {
protected
PosActionStatusExceptionParam
(
Parcel
in
)
{
this
.
txnId
=
in
.
readString
();
int
tmpPosAction
=
in
.
readInt
();
this
.
posAction
=
tmpPosAction
==
-
1
?
null
:
P
os
Action
.
values
()[
tmpPosAction
];
this
.
posAction
=
tmpPosAction
==
-
1
?
null
:
P
ay
Action
.
values
()[
tmpPosAction
];
this
.
orderId
=
in
.
readLong
();
this
.
orderNo
=
in
.
readString
();
this
.
amount
=
in
.
readDouble
();
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/contract/Pay
Type
Contract.java
→
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/contract/Pay
Method
Contract.java
View file @
7dc96a6d
File moved
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/activity/PayFlowActivity.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
activity
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.view.Window
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
com.gingersoft.gsa.cloud.pay.RequestParms
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.fragment.PayFlowFragment
;
import
com.jess.arms.base.BaseFragmentActivity
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.mvp.IView
;
import
com.jess.arms.utils.ArmsUtils
;
import
me.yokeyword.fragmentation.anim.DefaultHorizontalAnimator
;
import
me.yokeyword.fragmentation.anim.FragmentAnimator
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 05/13/2020 14:47
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
class
PayFlowActivity
extends
BaseFragmentActivity
<
BasePresenter
>
implements
IView
{
@Override
public
void
setupActivityComponent
(
@NonNull
AppComponent
appComponent
)
{
// DaggerPayFlowComponent //如找不到该类,请编译一下项目
// .builder()
// .appComponent(appComponent)
// .view(this)
// .build()
// .inject(this);
}
@Override
public
int
initView
(
@Nullable
Bundle
savedInstanceState
)
{
return
0
;
//如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
if
(
findFragment
(
PayFlowFragment
.
class
)
==
null
)
{
RequestParms
requestParms
=
(
RequestParms
)
getIntent
().
getSerializableExtra
(
"requestParms"
);
// loadRootFragment(Window.ID_ANDROID_CONTENT, PayFlowFragment.newInstance(requestParms));
PayFlowFragment
statusExceptionFragment
=
PayFlowFragment
.
newInstance
(
requestParms
);
statusExceptionFragment
.
show
(
getSupportFragmentManager
(),
"PayFlowDialogFragment"
);
}
}
@Override
public
void
onBackPressedSupport
()
{
// 对于 4个类别的主Fragment内的回退back逻辑,已经在其onBackPressedSupport里各自处理了
super
.
onBackPressedSupport
();
}
@Override
public
FragmentAnimator
onCreateFragmentAnimator
()
{
// 设置横向(和安卓4.x动画相同)
return
new
DefaultHorizontalAnimator
();
}
@Override
public
void
initIntent
()
{
}
@Override
public
void
initTopBar
()
{
}
@Override
public
void
initLanguage
()
{
}
@Override
public
void
initLayoutParams
()
{
}
@Override
public
void
initLayoutVisible
()
{
}
@Override
public
void
showLoading
(
String
message
)
{
}
@Override
public
void
hideLoading
()
{
}
@Override
public
void
showMessage
(
@NonNull
String
message
)
{
checkNotNull
(
message
);
ArmsUtils
.
makeText
(
this
,
message
);
}
@Override
public
void
launchActivity
(
@NonNull
Intent
intent
)
{
checkNotNull
(
intent
);
ArmsUtils
.
startActivity
(
intent
);
}
@Override
public
void
killMyself
()
{
finish
();
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/case/PayFlowCase.kt
0 → 100644
View file @
7dc96a6d
package
com.gingersoft.gsa.cloud.pay.lifecycle.case
/**
* @作者: bin
* @創建時間: 2021-04-16 10:05
* @更新時間: 2021-04-16 10:05
* @描述:
*/
class
PayFlowCase
{
}
\ No newline at end of file
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/contract/PayFlowContract.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
contract
;
import
android.content.Intent
;
import
com.gingersoft.gsa.cloud.common.bean.BaseResult
;
import
com.gingersoft.gsa.cloud.pay.PayStep
;
import
com.jess.arms.mvp.IView
;
import
com.jess.arms.mvp.IModel
;
import
io.reactivex.Single
;
import
okhttp3.RequestBody
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/15/2021 14:44
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
interface
PayFlowContract
{
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface
View
extends
IView
{
void
showStatusLoadingDialog
(
PayStep
status
);
void
startActivityForResult
(
Intent
intent
);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface
Model
extends
IModel
{
Single
<
BaseResult
>
yedPayFindSaleStatus
(
RequestBody
body
);
Single
<
BaseResult
>
yedPayRefundOrder
(
RequestBody
body
);
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/di/component/PayFlowComponent.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
di
.
component
;
import
dagger.BindsInstance
;
import
dagger.Component
;
import
com.jess.arms.di.component.AppComponent
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.di.module.PayFlowModule
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.contract.PayFlowContract
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.fragment.PayFlowFragment
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/15/2021 14:44
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component
(
modules
=
PayFlowModule
.
class
,
dependencies
=
AppComponent
.
class
)
public
interface
PayFlowComponent
{
void
inject
(
PayFlowFragment
fragment
);
@Component
.
Builder
interface
Builder
{
@BindsInstance
PayFlowComponent
.
Builder
view
(
PayFlowContract
.
View
view
);
PayFlowComponent
.
Builder
appComponent
(
AppComponent
appComponent
);
PayFlowComponent
build
();
}
}
\ No newline at end of file
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/di/module/PayFlowModule.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
di
.
module
;
import
com.jess.arms.di.scope.FragmentScope
;
import
dagger.Binds
;
import
dagger.Module
;
import
dagger.Provides
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.contract.PayFlowContract
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.model.PayFlowModel
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/15/2021 14:44
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public
abstract
class
PayFlowModule
{
@Binds
abstract
PayFlowContract
.
Model
bindPayFlowModel
(
PayFlowModel
model
);
}
\ No newline at end of file
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/fragment/PayFlowFragment.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
fragment
;
import
android.content.Intent
;
import
android.graphics.Color
;
import
android.graphics.drawable.ColorDrawable
;
import
android.os.Bundle
;
import
android.view.Gravity
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.Window
;
import
android.view.WindowManager
;
import
android.widget.FrameLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.order.R
;
import
com.gingersoft.gsa.cloud.order.R2
;
import
com.gingersoft.gsa.cloud.pay.PayAction
;
import
com.gingersoft.gsa.cloud.pay.PayStep
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.di.component.DaggerPayFlowComponent
;
import
com.gingersoft.gsa.cloud.pay.RequestParms
;
import
com.gingersoft.gsa.cloud.pay.view.customstatus.CustomStatusView
;
import
com.gingersoft.gsa.cloud.pay.widget.StatusLoadingDialog
;
import
com.jess.arms.base.BaseDialogFragment
;
import
com.jess.arms.base.BaseFragment
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.contract.PayFlowContract
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.presenter.PayFlowPresenter
;
import
com.qmuiteam.qmui.util.QMUIDisplayHelper
;
import
butterknife.BindView
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/15/2021 14:44
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
class
PayFlowFragment
extends
BaseDialogFragment
<
PayFlowPresenter
>
implements
PayFlowContract
.
View
{
@BindView
(
R2
.
id
.
ll_container
)
LinearLayout
ll_container
;
@BindView
(
R2
.
id
.
as_status
)
CustomStatusView
as_status
;
@BindView
(
R2
.
id
.
tv_status
)
TextView
tv_status
;
private
RequestParms
requestParms
;
private
PayAction
action
;
private
final
long
mCancelDelayMillis
=
2000
;
private
String
mLoadingText
=
"支付中..."
;
public
static
PayFlowFragment
newInstance
(
RequestParms
parms
)
{
PayFlowFragment
fragment
=
new
PayFlowFragment
();
Bundle
bundle
=
new
Bundle
();
bundle
.
putSerializable
(
"requestParms"
,
parms
);
fragment
.
setArguments
(
bundle
);
return
fragment
;
}
@Override
public
void
setupFragmentComponent
(
@NonNull
AppComponent
appComponent
)
{
DaggerPayFlowComponent
//如找不到该类,请编译一下项目
.
builder
()
.
appComponent
(
appComponent
)
.
view
(
this
)
.
build
()
.
inject
(
this
);
}
@Override
public
View
initView
(
@NonNull
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
getDialog
().
requestWindowFeature
(
Window
.
FEATURE_NO_TITLE
);
getDialog
().
setCancelable
(
false
);
return
inflater
.
inflate
(
R
.
layout
.
dialog_pay_loading
,
container
,
false
);
}
@Override
public
void
onStart
()
{
super
.
onStart
();
mWindow
.
setBackgroundDrawable
(
new
ColorDrawable
(
ArmsUtils
.
getColor
(
mContext
,
R
.
color
.
trans
)));
// WindowManager.LayoutParams lp = mWindow.getAttributes();
// lp.width = QMUIDisplayHelper.dp2px(mContext,100);
// lp.height = QMUIDisplayHelper.dp2px(mContext,200);
// lp.gravity = Gravity.CENTER;
// lp.windowAnimations = android.R.style.Animation_InputMethod;
// mWindow.setAttributes(lp);
}
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
Bundle
arguments
=
getArguments
();
requestParms
=
(
RequestParms
)
arguments
.
getSerializable
(
"requestParms"
);
action
=
requestParms
.
getAction
();
tv_status
.
setText
(
mLoadingText
);
ll_container
.
setLayoutParams
(
new
FrameLayout
.
LayoutParams
((
int
)
(
ArmsUtils
.
getScreenWidth
(
mContext
)
*
0.4
),
(
int
)
(
ArmsUtils
.
getScreenWidth
(
mContext
)
*
0.4
)));
showStatusLoadingDialog
(
PayStep
.
LOADING
);
mPresenter
.
excutePayFlow
(
requestParms
);
}
@Override
public
void
showStatusLoadingDialog
(
PayStep
status
)
{
String
loadingText
=
action
.
getLoadingStepText
(
status
);
setStatusText
(
loadingText
);
switch
(
status
)
{
case
LOADING:
loadLoading
();
break
;
case
SUCCESS:
loadSuccess
();
break
;
case
FAILURE:
loadFailure
();
break
;
}
}
public
void
setStatusText
(
String
text
)
{
tv_status
.
setText
(
text
);
}
public
void
loadLoading
()
{
as_status
.
loadLoading
();
}
public
void
loadSuccess
()
{
as_status
.
loadSuccess
();
}
public
void
loadFailure
()
{
as_status
.
loadFailure
();
}
public
void
clearLoadingAnim
()
{
if
(
as_status
!=
null
&&
as_status
.
getAnimation
()
!=
null
)
{
as_status
.
clearAnimation
();
}
}
@Override
public
void
setData
(
@Nullable
Object
data
)
{
}
@Override
public
void
showLoading
(
String
message
)
{
}
@Override
public
void
hideLoading
()
{
}
@Override
public
void
showMessage
(
@NonNull
String
message
)
{
checkNotNull
(
message
);
ArmsUtils
.
makeText
(
mContext
,
message
);
}
@Override
public
void
launchActivity
(
@NonNull
Intent
intent
)
{
checkNotNull
(
intent
);
ArmsUtils
.
startActivity
(
intent
);
}
@Override
public
void
killMyself
()
{
clearLoadingAnim
();
as_status
.
postDelayed
(
new
Runnable
()
{
@Override
public
void
run
()
{
getDialog
().
cancel
();
}
},
mCancelDelayMillis
);
}
@Override
public
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
@Nullable
Intent
intent
)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
intent
);
LoganManager
.
w_code
(
TAG
,
"onActivityResult-》"
+
"resultCode="
+
resultCode
+
" requestCode="
+
requestCode
);
if
(
resultCode
==
android
.
app
.
Activity
.
RESULT_OK
)
{
switch
(
requestCode
)
{
case
555
:
{
if
(
intent
.
getExtras
()
!=
null
)
{
String
status
=
(
String
)
intent
.
getExtras
().
get
(
"status"
);
String
transaction_id
=
(
String
)
intent
.
getExtras
().
get
(
"transaction_id"
);
LoganManager
.
w_code
(
TAG
,
"onActivityResult-》"
+
"status="
+
status
+
" transaction_id="
+
transaction_id
);
mPresenter
.
yedPayUpdateStatus
(
transaction_id
,
requestParms
.
getOrderId
(),
requestParms
.
getPayType
(),
requestParms
.
getResturantId
());
}
break
;
}
}
}
}
@Override
public
void
startActivityForResult
(
Intent
intent
)
{
startActivityForResult
(
intent
,
555
);
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/model/PayFlowModel.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
model
;
import
android.app.Application
;
import
com.gingersoft.gsa.cloud.common.bean.BaseResult
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.model.service.PayFlowService
;
import
com.google.gson.Gson
;
import
com.jess.arms.integration.IRepositoryManager
;
import
com.jess.arms.mvp.BaseModel
;
import
com.jess.arms.di.scope.FragmentScope
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.contract.PayFlowContract
;
import
io.reactivex.Single
;
import
okhttp3.RequestBody
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/15/2021 14:44
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
PayFlowModel
extends
BaseModel
implements
PayFlowContract
.
Model
{
@Inject
Gson
mGson
;
@Inject
Application
mApplication
;
@Inject
public
PayFlowModel
(
IRepositoryManager
repositoryManager
)
{
super
(
repositoryManager
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mGson
=
null
;
this
.
mApplication
=
null
;
}
@Override
public
Single
<
BaseResult
>
yedPayFindSaleStatus
(
RequestBody
body
)
{
return
mRepositoryManager
.
obtainRetrofitService
(
PayFlowService
.
class
)
.
yedPayFindSaleStatus
(
body
);
}
@Override
public
Single
<
BaseResult
>
yedPayRefundOrder
(
RequestBody
body
)
{
return
mRepositoryManager
.
obtainRetrofitService
(
PayFlowService
.
class
)
.
yedPayRefundOrder
(
body
);
}
}
\ No newline at end of file
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/model/bean/YedPayRefundBean.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
model
.
bean
;
/**
* @作者: bin
* @創建時間: 2021-04-15 18:46
* @更新時間: 2021-04-15 18:46
* @描述:
*/
public
class
YedPayRefundBean
{
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/model/bean/YedpayFindSaleStatusBean.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
model
.
bean
;
import
lombok.Data
;
/**
* @作者: bin
* @創建時間: 2021-04-15 18:46
* @更新時間: 2021-04-15 18:46
* @描述:
*/
@Data
public
class
YedpayFindSaleStatusBean
{
/**
* 訂單id
*/
private
long
orderId
=
-
1L
;
/**
* 支付状态:0 未支付 1 支付失败 2 支持成功 3 已支付未到账 4.支付中 5.已退款 6.廢棄(第二次結賬)
*/
private
Integer
status
;
/**
* 交易id
*/
private
String
transactionId
;
/**
* 退款id
*/
private
String
refundId
;
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/model/service/PayFlowService.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
model
.
service
;
import
com.gingersoft.gsa.cloud.common.bean.BaseResult
;
import
io.reactivex.Single
;
import
io.reactivex.Single
;
import
me.jessyan.retrofiturlmanager.RetrofitUrlManager
;
import
okhttp3.RequestBody
;
import
retrofit2.http.Body
;
import
retrofit2.http.GET
;
import
retrofit2.http.Headers
;
import
retrofit2.http.POST
;
import
retrofit2.http.Query
;
/**
* Created by Wyh on 2020/1/17.
*/
public
interface
PayFlowService
{
@Headers
({
"Domain-Name: ricepon_pay"
})
@POST
(
"posPay/getTxnId"
+
RetrofitUrlManager
.
IDENTIFICATION_PATH_SIZE
+
2
)
Single
<
BaseResult
>
getTxnId
(
@Query
(
"type"
)
int
type
,
@Query
(
"parm"
)
String
parm
,
@Query
(
"gsposShopId"
)
String
shopName
,
@Query
(
"tableId"
)
int
tableId
,
@Query
(
"tableNumber"
)
String
tableNumber
);
@Headers
({
"Domain-Name: ricepon_pay"
})
@POST
(
"posPay/getRefundTxnId"
+
RetrofitUrlManager
.
IDENTIFICATION_PATH_SIZE
+
2
)
Single
<
BaseResult
>
getRefundTxnId
(
@Query
(
"tableId"
)
int
tableId
,
@Query
(
"tableNumber"
)
String
tableNumber
,
@Query
(
"memberId"
)
long
memberId
);
@Headers
({
"Domain-Name: ricepon_pay"
})
@POST
(
"posPay/getCancelTxnId"
+
RetrofitUrlManager
.
IDENTIFICATION_PATH_SIZE
+
2
)
Single
<
BaseResult
>
getCancelTxnId
(
@Query
(
"tableId"
)
int
tableId
,
@Query
(
"tableNumber"
)
String
tableNumber
,
@Query
(
"memberId"
)
long
memberId
);
@Headers
({
"Domain-Name: ricepon_pay"
})
@POST
(
"orderPay/updatePosRefund"
+
RetrofitUrlManager
.
IDENTIFICATION_PATH_SIZE
+
2
)
Single
<
BaseResult
>
updatePosRefund
(
@Query
(
"tableId"
)
int
tableId
,
@Query
(
"memberId"
)
Long
memberId
,
@Query
(
"couponMemberId"
)
long
couponMemberId
,
@Query
(
"couponNo"
)
String
couponNo
,
@Query
(
"restaurantId"
)
int
restaurantId
);
@Headers
({
"Domain-Name: ricepon_pay"
})
@POST
(
"member/getMemberWalletList"
+
RetrofitUrlManager
.
IDENTIFICATION_PATH_SIZE
+
2
)
Single
<
BaseResult
>
getMemberWalletList
(
@Query
(
"brandId"
)
int
brandId
,
@Query
(
"memberId"
)
long
memberId
,
@Query
(
"limitType"
)
long
limitType
,
@Query
(
"pageIndex"
)
long
pageIndex
,
@Query
(
"pageSize"
)
long
pageSize
);
@Headers
({
"Domain-Name: ricepon_pay"
})
@POST
(
"orderPay/add"
+
RetrofitUrlManager
.
IDENTIFICATION_PATH_SIZE
+
2
)
Single
<
BaseResult
>
add
(
@Query
(
"tableId"
)
int
tableId
,
@Query
(
"tableNumber"
)
String
tableNumber
,
@Query
(
"memberId"
)
long
memberId
);
@Headers
({
"Domain-Name: ricepon_pay"
})
@POST
(
"posPay/updatePosCancel"
+
RetrofitUrlManager
.
IDENTIFICATION_PATH_SIZE
+
2
)
Single
<
BaseResult
>
updatePosCancel
(
@Query
(
"tableId"
)
int
tableId
,
@Query
(
"tableNumber"
)
String
tableNumber
,
@Query
(
"memberId"
)
long
memberId
);
@Headers
({
"Domain-Name: ricepon_pay"
})
@POST
(
"gsaYedPay/updatePayStatus"
+
RetrofitUrlManager
.
IDENTIFICATION_PATH_SIZE
+
2
)
Single
<
BaseResult
>
yedPayFindSaleStatus
(
@Body
RequestBody
requestBody
);
@Headers
({
"Domain-Name: ricepon_pay"
})
@POST
(
"gsaYedPay/refund"
+
RetrofitUrlManager
.
IDENTIFICATION_PATH_SIZE
+
2
)
Single
<
BaseResult
>
yedPayRefundOrder
(
@Body
RequestBody
requestBody
);
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/lifecycle/presenter/PayFlowPresenter.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
lifecycle
.
presenter
;
import
android.app.Application
;
import
android.content.Intent
;
import
android.net.Uri
;
import
com.gingersoft.gsa.cloud.common.bean.BaseResult
;
import
com.gingersoft.gsa.cloud.common.core.user.UserContext
;
import
com.gingersoft.gsa.cloud.common.rxjava.ErrorHandleSingleSubscriber
;
import
com.gingersoft.gsa.cloud.common.utils.AppDevices
;
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.pay.PayStep
;
import
com.gingersoft.gsa.cloud.pay.PaymentControl
;
import
com.gingersoft.gsa.cloud.pay.RequestParms
;
import
com.gingersoft.gsa.cloud.pay.ResultCallback
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.model.bean.YedpayFindSaleStatusBean
;
import
com.gingersoft.gsa.cloud.pay.phone.PhoneCallbackListener
;
import
com.gingersoft.gsa.cloud.pay.pos.PosPayAction
;
import
com.gingersoft.gsa.cloud.pay.pos.bbpos.BBposCallback
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.HywebCallback
;
import
com.gingersoft.gsa.cloud.pay.pos.yedpay.YedpayCallback
;
import
com.gingersoft.gsa.cloud.pay.pos.yedpay.constant.YedpayConstant
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
import
io.reactivex.schedulers.Schedulers
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
import
okhttp3.FormBody
;
import
okhttp3.RequestBody
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.pay.lifecycle.contract.PayFlowContract
;
import
com.jess.arms.utils.RxLifecycleUtils
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 04/15/2021 14:44
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
PayFlowPresenter
extends
BasePresenter
<
PayFlowContract
.
Model
,
PayFlowContract
.
View
>
{
@Inject
RxErrorHandler
mErrorHandler
;
@Inject
Application
mApplication
;
@Inject
ImageLoader
mImageLoader
;
@Inject
AppManager
mAppManager
;
private
PosPayAction
mPosPayAction
;
private
RequestParms
mRequestParms
;
private
ResultCallback
mResultCallback
;
@Inject
public
PayFlowPresenter
(
PayFlowContract
.
Model
model
,
PayFlowContract
.
View
rootView
)
{
super
(
model
,
rootView
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mErrorHandler
=
null
;
this
.
mAppManager
=
null
;
this
.
mImageLoader
=
null
;
this
.
mApplication
=
null
;
}
public
void
yedPayActivityForResult
()
{
}
public
void
yedPayUpdateStatus
(
String
transactionId
,
long
orderId
,
int
payType
,
int
restaurantId
)
{
RequestBody
requestBody
=
new
FormBody
.
Builder
()
.
add
(
"transactionId"
,
transactionId
)
.
add
(
"orderId"
,
orderId
+
""
)
.
add
(
"payType"
,
payType
+
""
)
.
add
(
"restaurantId"
,
restaurantId
+
""
)
.
build
();
mModel
.
yedPayFindSaleStatus
(
requestBody
)
.
subscribeOn
(
Schedulers
.
io
())
.
subscribeOn
(
AndroidSchedulers
.
mainThread
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
compose
(
RxLifecycleUtils
.
bindToLifecycle
(
mRootView
))
.
subscribe
(
new
ErrorHandleSingleSubscriber
<
BaseResult
>(
mErrorHandler
)
{
@Override
public
void
onSuccess
(
BaseResult
result
)
{
if
(
result
.
isSuccess
())
{
YedpayFindSaleStatusBean
saleStatusBean
=
GsonUtils
.
GsonToBean
(
result
.
getData
(),
YedpayFindSaleStatusBean
.
class
);
if
(
saleStatusBean
!=
null
)
{
if
(
saleStatusBean
.
getStatus
()
==
YedpayConstant
.
Status
.
PAY_STATUS_0
)
{
mRootView
.
showStatusLoadingDialog
(
PayStep
.
SUCCESS
);
if
(
mResultCallback
!=
null
)
{
mResultCallback
.
onSuccess
();
}
}
else
{
mRootView
.
showStatusLoadingDialog
(
PayStep
.
FAILURE
);
if
(
mResultCallback
!=
null
)
{
mResultCallback
.
onFailure
(
null
);
}
}
}
else
{
mRootView
.
showStatusLoadingDialog
(
PayStep
.
FAILURE
);
if
(
mResultCallback
!=
null
)
{
mResultCallback
.
onFailure
(
null
);
}
}
}
else
{
mRootView
.
showStatusLoadingDialog
(
PayStep
.
FAILURE
);
mRootView
.
showMessage
(
result
.
getErrMsg
());
if
(
mResultCallback
!=
null
)
{
mResultCallback
.
onFailure
(
null
);
}
}
mRootView
.
killMyself
();
}
@Override
public
void
onError
(
Throwable
t
)
{
super
.
onError
(
t
);
if
(
mResultCallback
!=
null
)
{
mResultCallback
.
onFailure
(
t
);
}
mRootView
.
killMyself
();
}
});
}
public
void
yedPayRefundOrder
(
String
refundReason
,
long
orderId
,
int
payType
,
int
restaurantId
)
{
RequestBody
requestBody
=
new
FormBody
.
Builder
()
.
add
(
"refundReason"
,
refundReason
)
.
add
(
"orderId"
,
String
.
valueOf
(
orderId
))
.
add
(
"payType"
,
String
.
valueOf
(
payType
))
.
add
(
"restaurantId"
,
String
.
valueOf
(
restaurantId
))
.
build
();
mModel
.
yedPayRefundOrder
(
requestBody
)
.
subscribeOn
(
Schedulers
.
io
())
.
subscribeOn
(
AndroidSchedulers
.
mainThread
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
compose
(
RxLifecycleUtils
.
bindToLifecycle
(
mRootView
))
.
subscribe
(
new
ErrorHandleSingleSubscriber
<
BaseResult
>(
mErrorHandler
)
{
@Override
public
void
onSuccess
(
BaseResult
result
)
{
if
(
result
.
isSuccess
())
{
mRootView
.
showStatusLoadingDialog
(
PayStep
.
SUCCESS
);
if
(
mResultCallback
!=
null
)
{
mResultCallback
.
onSuccess
();
}
}
else
{
mRootView
.
showStatusLoadingDialog
(
PayStep
.
FAILURE
);
if
(
mResultCallback
!=
null
)
{
mResultCallback
.
onFailure
(
null
);
}
}
}
});
}
public
void
excutePayFlow
(
RequestParms
requestParms
)
{
this
.
mRequestParms
=
requestParms
;
this
.
mResultCallback
=
mRequestParms
.
getResultCallback
();
setCallbackBy
(
requestParms
);
switch
(
requestParms
.
getAction
())
{
case
SALE:
PaymentControl
.
newInstance
().
pay
(
requestParms
);
break
;
case
REFUND:
PaymentControl
.
newInstance
().
refund
(
requestParms
);
break
;
}
}
private
void
setCallbackBy
(
RequestParms
requestParms
)
{
if
(
AppDevices
.
isHywebPos
())
{
requestParms
.
setCallback
(
hywebCallback
);
}
else
if
(
AppDevices
.
isBBPos
())
{
requestParms
.
setCallback
(
bBposCallback
);
}
else
if
(
AppDevices
.
isYedpay
())
{
requestParms
.
setCallback
(
yedpayCallback
);
}
else
{
requestParms
.
setCallback
(
yedpayCallback
);
}
}
private
HywebCallback
hywebCallback
=
new
HywebCallback
()
{
};
private
YedpayCallback
yedpayCallback
=
new
YedpayCallback
()
{
@Override
public
void
callSaleUri
(
String
uri
)
{
if
(
mRootView
!=
null
)
{
Uri
uri2
=
Uri
.
parse
(
uri
);
Intent
intent
=
new
Intent
(
Intent
.
ACTION_VIEW
,
uri2
);
mRootView
.
startActivityForResult
(
intent
);
}
}
@Override
public
void
refundResult
(
boolean
result
)
{
yedPayRefundOrder
(
mRequestParms
.
getRefundReason
(),
mRequestParms
.
getOrderId
(),
mRequestParms
.
getPayType
(),
mRequestParms
.
getResturantId
());
}
};
private
BBposCallback
bBposCallback
=
new
BBposCallback
()
{
};
private
PhoneCallbackListener
phoneCallbackListener
=
new
PhoneCallbackListener
()
{
@Override
public
void
onSuccess
(
Object
response
)
{
}
@Override
public
void
onException
(
Object
response
,
Exception
e
)
{
}
};
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/phone/PhoneCallbackListener.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
phone
;
import
com.gingersoft.gsa.cloud.pay.Callback
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.BasePosResponse
;
/**
* @作者: bin
* @創建時間: 2021-04-15 17:18
* @更新時間: 2021-04-15 17:18
* @描述:
*/
public
interface
PhoneCallbackListener
<
T
>
extends
Callback
<
T
>
{
/**
* 支付
* @param response
*/
void
onSuccess
(
T
response
);
/**
* 支付失败
* @param response
* @param e
*/
void
onException
(
T
response
,
Exception
e
);
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/phone/PhonePayAction.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
phone
;
import
com.gingersoft.gsa.cloud.pay.base.BasePayAction
;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:10
* @更新時間: 2021-04-14 12:10
* @描述:
*/
public
interface
PhonePayAction
<
T
>
extends
BasePayAction
<
T
>
{
void
printStub
(
T
params
);
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/phone/PhonePayActionImp.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
phone
;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:10
* @更新時間: 2021-04-14 12:10
* @描述:
*/
public
class
PhonePayActionImp
implements
PhonePayAction
{
@Override
public
void
pay
(
Object
params
)
{
}
@Override
public
void
refund
(
Object
params
)
{
}
@Override
public
void
printStub
(
Object
params
)
{
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/PosPay.java
deleted
100644 → 0
View file @
37b96f64
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
;
import
android.content.Context
;
import
com.etps.aca.lib.activity.CommandActivity
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.BaseBgRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.BasePosRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.bg.GetTxnIdRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.RetrievalRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.SaleRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.command.CommandImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.IHywebAction
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.PrintPaymentStubImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.RefundActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.RetrievalActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.SaleActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.SettlementActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.TipsActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.VoidActionImpl
;
import
com.jess.arms.mvp.IView
;
import
lombok.Builder
;
import
okhttp3.internal.ws.RealWebSocket
;
/**
* @作者: bin
* @創建時間: 2020-12-26 10:32
* @更新時間: 2020-12-26 10:32
* @描述:
*/
@Builder
public
final
class
PosPay
{
final
Context
context
;
final
IView
lifecycleView
;
final
BasePosRequest
posRequest
;
final
BaseBgRequest
bgRequest
;
final
PosAction
retrievalAction
;
final
OnPosActionListener
onPosActionListener
;
final
boolean
showLoading
;
public
static
void
sendRequest
(
IHywebAction
action
)
{
CommandActivity
.
setCommand
(
new
CommandImpl
(
action
));
// if (AppDevice.isHywebPos()) {
if
(
action
!=
null
)
{
action
.
onPosActionBefore
();
}
// } else if (AppDevice.isBBPos()) {
// } else {
// }
}
public
void
pay
()
{
PosPay
.
sendRequest
(
new
SaleActionImpl
(
context
,
lifecycleView
,
PosAction
.
SALE
,
(
SaleRequest
)
posRequest
,
(
GetTxnIdRequest
)
bgRequest
,
onPosActionListener
,
true
));
}
public
void
tip
()
{
PosPay
.
sendRequest
(
new
TipsActionImpl
(
context
,
lifecycleView
,
PosAction
.
TIP
,
txnIdRequest
,
tipRequest
,
onPosActionListener
,
true
));
}
public
void
refund
()
{
PosPay
.
sendRequest
(
new
RefundActionImpl
(
context
,
lifecycleView
,
PosAction
.
REFUND
,
request
,
getTxnIdRequest
,
onPosActionListener
,
true
));
}
public
void
voidO
()
{
PosPay
.
sendRequest
(
new
VoidActionImpl
(
context
,
lifecycleView
,
PosAction
.
VOID
,
request
,
getTxnIdRequest
,
onPosActionListener
,
true
));
}
public
static
void
retrieval
(
Context
context
,
IView
lifecycleView
,
Long
orderId
,
PosAction
retrievalAction
,
RetrievalRequest
request
,
OnPosActionListener
onPosActionListener
)
{
PosPay
.
sendRequest
(
new
RetrievalActionImpl
(
context
,
lifecycleView
,
PosAction
.
RETRIEVAL
,
retrievalAction
,
orderId
,
request
,
onPosActionListener
,
false
));
}
public
void
printStub
()
{
PosPay
.
sendRequest
(
new
PrintPaymentStubImpl
(
context
,
lifecycleView
,
PosAction
.
PRINT
,
txnId
,
onPosActionListener
,
true
));
}
public
void
settlement
()
{
PosPay
.
sendRequest
(
new
SettlementActionImpl
(
context
,
lifecycleView
,
PosAction
.
SETTLEMENT
,
onPosActionListener
,
true
));
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/PosPayAction.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
;
import
com.gingersoft.gsa.cloud.pay.base.BasePayAction
;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:06
* @更新時間: 2021-04-14 12:06
* @描述:
*/
public
interface
PosPayAction
<
T
>
extends
BasePayAction
<
T
>
{
void
void0
(
T
params
);
void
tip
(
T
params
);
void
retrieval
(
T
params
);
void
printStub
(
T
params
);
void
settlement
(
T
params
);
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/bbpos/BBPosManager.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
.
bbpos
;
import
com.gingersoft.gsa.cloud.pay.pos.PosPayAction
;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:08
* @更新時間: 2021-04-14 12:08
* @描述:
*/
public
class
BBPosManager
implements
PosPayAction
{
private
static
BBPosManager
sBBPosManager
;
public
static
BBPosManager
newInstance
()
{
if
(
sBBPosManager
==
null
)
{
sBBPosManager
=
new
BBPosManager
();
}
return
sBBPosManager
;
}
private
BBPosManager
()
{
}
@Override
public
void
void0
(
Object
params
)
{
}
@Override
public
void
tip
(
Object
params
)
{
}
@Override
public
void
retrieval
(
Object
params
)
{
}
@Override
public
void
printStub
(
Object
params
)
{
}
@Override
public
void
settlement
(
Object
params
)
{
}
@Override
public
void
pay
(
Object
params
)
{
}
@Override
public
void
refund
(
Object
params
)
{
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/bbpos/BBposCallback.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
.
bbpos
;
import
com.gingersoft.gsa.cloud.pay.Callback
;
/**
* @作者: bin
* @創建時間: 2021-04-15 9:50
* @更新時間: 2021-04-15 9:50
* @描述:
*/
public
interface
BBposCallback
extends
Callback
{
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/HywebCallback.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
.
hyweb
;
import
android.content.Intent
;
import
com.gingersoft.gsa.cloud.pay.Callback
;
/**
* @作者: bin
* @創建時間: 2021-04-15 9:50
* @更新時間: 2021-04-15 9:50
* @描述:
*/
public
interface
HywebCallback
extends
Callback
{
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/HywebManager.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
.
hyweb
;
import
com.gingersoft.gsa.cloud.pay.PosPay
;
import
com.gingersoft.gsa.cloud.pay.PayAction
;
import
com.gingersoft.gsa.cloud.pay.pos.PosPayAction
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.bg.GetTxnIdRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.AdjustTipRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.RefundRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.RetrievalRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.SaleRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.VoidRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.PrintPaymentStubImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.RefundActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.RetrievalActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.SaleActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.SettlementActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.TipsActionImpl
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.VoidActionImpl
;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:08
* @更新時間: 2021-04-14 12:08
* @描述:
*/
public
class
HywebManager
implements
PosPayAction
<
PosPay
>
{
private
static
HywebManager
sHywebManager
;
public
static
HywebManager
newInstance
()
{
if
(
sHywebManager
==
null
)
{
sHywebManager
=
new
HywebManager
();
}
return
sHywebManager
;
}
private
HywebManager
()
{
}
@Override
public
void
void0
(
PosPay
posPay
)
{
new
VoidActionImpl
(
posPay
.
getContext
(),
posPay
.
getLifecycleView
(),
PayAction
.
VOID
,
(
VoidRequest
)
posPay
.
getPosRequest
(),
(
GetTxnIdRequest
)
posPay
.
getBgRequest
(),
(
PosCallbackListener
)
(
PosCallbackListener
)
posPay
.
getCallback
(),
true
)
.
onPosActionBefore
();
}
@Override
public
void
tip
(
PosPay
posPay
)
{
new
TipsActionImpl
(
posPay
.
getContext
(),
posPay
.
getLifecycleView
(),
PayAction
.
TIP
,
(
GetTxnIdRequest
)
posPay
.
getBgRequest
(),
(
AdjustTipRequest
)
posPay
.
getPosRequest
(),
(
PosCallbackListener
)
posPay
.
getCallback
(),
true
)
.
onPosActionBefore
();
}
@Override
public
void
retrieval
(
PosPay
posPay
)
{
new
RetrievalActionImpl
(
posPay
.
getContext
(),
posPay
.
getLifecycleView
(),
PayAction
.
RETRIEVAL
,
posPay
.
getRetrievalAction
(),
posPay
.
getOrderId
(),
(
RetrievalRequest
)
posPay
.
getPosRequest
(),
(
PosCallbackListener
)
posPay
.
getCallback
(),
false
);
}
@Override
public
void
printStub
(
PosPay
posPay
)
{
new
PrintPaymentStubImpl
(
posPay
.
getContext
(),
posPay
.
getLifecycleView
(),
PayAction
.
PRINT
,
posPay
.
getTxnId
(),
(
PosCallbackListener
)
posPay
.
getCallback
(),
true
)
.
onPosActionBefore
();
}
@Override
public
void
settlement
(
PosPay
posPay
)
{
new
SettlementActionImpl
(
posPay
.
getContext
(),
posPay
.
getLifecycleView
(),
PayAction
.
SETTLEMENT
,
(
PosCallbackListener
)
posPay
.
getCallback
(),
true
)
.
onPosActionBefore
();
}
@Override
public
void
pay
(
PosPay
posPay
)
{
new
SaleActionImpl
(
posPay
.
getContext
(),
posPay
.
getLifecycleView
(),
PayAction
.
SALE
,
(
SaleRequest
)
posPay
.
getPosRequest
(),
(
GetTxnIdRequest
)
posPay
.
getBgRequest
(),
(
PosCallbackListener
)
posPay
.
getCallback
(),
true
)
.
onPosActionBefore
();
}
@Override
public
void
refund
(
PosPay
posPay
)
{
new
RefundActionImpl
(
posPay
.
getContext
(),
posPay
.
getLifecycleView
(),
PayAction
.
REFUND
,
(
RefundRequest
)
posPay
.
getPosRequest
(),
(
GetTxnIdRequest
)
posPay
.
getBgRequest
(),
(
PosCallbackListener
)
posPay
.
getCallback
(),
true
)
.
onPosActionBefore
();
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/
OnPosAction
Listener.java
→
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/
hyweb/PosCallback
Listener.java
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
;
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
.
hyweb
;
import
com.gingersoft.gsa.cloud.pay.Callback
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.BasePosResponse
;
/**
...
...
@@ -8,7 +10,7 @@ import com.gingersoft.gsa.cloud.pay.pos.bean.BasePosResponse;
* @更新時間: 2020-12-29 20:15
* @描述:POS事件回調
*/
public
interface
OnPosActionListener
<
T
extends
BasePosResponse
>
{
public
interface
PosCallbackListener
<
T
extends
BasePosResponse
>
extends
Callback
<
BasePosResponse
>
{
/**
* 回調成功
...
...
@@ -40,4 +42,8 @@ public interface OnPosActionListener<T extends BasePosResponse> {
* @param e
*/
void
onUpdateStatusError
(
Throwable
e
);
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/command/CommandImpl.java
View file @
7dc96a6d
...
...
@@ -16,7 +16,7 @@ import com.gingersoft.gsa.cloud.component.ComponentAction;
import
com.gingersoft.gsa.cloud.component.ComponentName
;
import
com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.imp.IHywebAction
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.response.pos.AdjustTipRespose
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.response.pos.HywebPosResponse
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.response.pos.PrintPaymentStubResponse
;
...
...
@@ -170,21 +170,21 @@ public class CommandImpl implements ICommand {
return
null
;
}
private
HywebPosResponse
returnErrorPosActionResponse
(
P
osAction
posAction
,
String
errorStatus
){
private
HywebPosResponse
returnErrorPosActionResponse
(
P
ayAction
posAction
,
String
errorStatus
){
HywebPosResponse
posResponse
;
if
(
posAction
==
P
os
Action
.
SALE
){
if
(
posAction
==
P
ay
Action
.
SALE
){
posResponse
=
new
SaleRespose
();
}
else
if
(
posAction
==
P
os
Action
.
VOID
){
}
else
if
(
posAction
==
P
ay
Action
.
VOID
){
posResponse
=
new
VoidRespose
();
}
else
if
(
posAction
==
P
os
Action
.
REFUND
){
}
else
if
(
posAction
==
P
ay
Action
.
REFUND
){
posResponse
=
new
RefundRespose
();
}
else
if
(
posAction
==
P
os
Action
.
PRINT
){
}
else
if
(
posAction
==
P
ay
Action
.
PRINT
){
posResponse
=
new
PrintPaymentStubResponse
();
}
else
if
(
posAction
==
P
os
Action
.
TIP
){
}
else
if
(
posAction
==
P
ay
Action
.
TIP
){
posResponse
=
new
AdjustTipRespose
();
}
else
if
(
posAction
==
P
os
Action
.
RETRIEVAL
){
}
else
if
(
posAction
==
P
ay
Action
.
RETRIEVAL
){
posResponse
=
new
RetrievalRespose
();
}
else
if
(
posAction
==
P
os
Action
.
SETTLEMENT
){
}
else
if
(
posAction
==
P
ay
Action
.
SETTLEMENT
){
posResponse
=
new
SettlementRespose
();
}
else
{
posResponse
=
new
HywebPosResponse
();
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/constant/
Pay
MethodConstant.java
→
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/constant/
Hyweb
MethodConstant.java
View file @
7dc96a6d
...
...
@@ -6,7 +6,7 @@ package com.gingersoft.gsa.cloud.pay.pos.hyweb.constant;
* @更新時間: 2020-12-24 9:42
* @描述:
*/
public
interface
Pay
MethodConstant
{
public
interface
Hyweb
MethodConstant
{
/**
* 支付申请清单
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/IHywebAction.java
View file @
7dc96a6d
...
...
@@ -4,8 +4,8 @@ import android.app.Activity;
import
android.content.Context
;
import
com.etps.aca.lib.util.CommandUtil
;
import
com.gingersoft.gsa.cloud.pay.pos.
OnPosAction
Listener
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.
hyweb.PosCallback
Listener
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.response.pos.HywebPosResponse
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.constant.HywebActionStatusCode
;
...
...
@@ -25,8 +25,8 @@ public abstract class IHywebAction<T extends HywebPosResponse> {
protected
final
String
TAG
=
this
.
getClass
().
getSimpleName
();
protected
Context
mContext
;
protected
IView
mView
;
protected
P
os
Action
mPosAction
;
protected
OnPosAction
Listener
mOnPosActionListener
;
protected
P
ay
Action
mPosAction
;
protected
PosCallback
Listener
mOnPosActionListener
;
protected
StatusLoadingDialog
mStatusLoadingDialog
;
...
...
@@ -35,7 +35,7 @@ public abstract class IHywebAction<T extends HywebPosResponse> {
private
final
long
mCancelDelayMillis
=
2000
;
public
IHywebAction
(
Context
context
,
IView
iView
,
P
os
Action
action
,
boolean
showLoading
)
{
public
IHywebAction
(
Context
context
,
IView
iView
,
P
ay
Action
action
,
boolean
showLoading
)
{
this
.
mContext
=
context
;
this
.
mView
=
iView
;
this
.
mPosAction
=
action
;
...
...
@@ -45,14 +45,14 @@ public abstract class IHywebAction<T extends HywebPosResponse> {
}
}
public
P
os
Action
getPosAction
()
{
public
P
ay
Action
getPosAction
()
{
return
mPosAction
;
}
/**
* 對POS幾發起操作前的業務處理,如將操作記錄添加到後台日誌表,事項表
*/
p
rotected
abstract
void
onPosActionBefore
();
p
ublic
abstract
void
onPosActionBefore
();
/**
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/PrintPaymentStubImpl.java
View file @
7dc96a6d
...
...
@@ -4,8 +4,8 @@ import android.app.Activity;
import
android.content.Context
;
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.pay.pos.
OnPosAction
Listener
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.
hyweb.PosCallback
Listener
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.PrintPaymentStubRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.response.pos.HywebPosResponse
;
import
com.jess.arms.mvp.IView
;
...
...
@@ -20,14 +20,14 @@ public class PrintPaymentStubImpl extends IHywebAction {
private
String
mTxnId
;
public
PrintPaymentStubImpl
(
Context
context
,
IView
iView
,
P
osAction
action
,
String
txnId
,
OnPosAction
Listener
onPosActionListener
,
boolean
showLoading
)
{
public
PrintPaymentStubImpl
(
Context
context
,
IView
iView
,
P
ayAction
action
,
String
txnId
,
PosCallback
Listener
onPosActionListener
,
boolean
showLoading
)
{
super
(
context
,
iView
,
action
,
showLoading
);
this
.
mTxnId
=
txnId
;
this
.
mOnPosActionListener
=
onPosActionListener
;
}
@Override
p
rotected
void
onPosActionBefore
()
{
p
ublic
void
onPosActionBefore
()
{
//打印存根
PrintPaymentStubRequest
stub
=
new
PrintPaymentStubRequest
();
stub
.
setTXN_ID
(
mTxnId
);
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/RefundActionImpl.java
View file @
7dc96a6d
...
...
@@ -10,8 +10,8 @@ import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils
;
import
com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode
;
import
com.gingersoft.gsa.cloud.pay.pos.
OnPosAction
Listener
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.
hyweb.PosCallback
Listener
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.bg.GetTxnIdRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.RefundRequest
;
...
...
@@ -40,7 +40,7 @@ public class RefundActionImpl extends IHywebAction<RefundRespose> {
private
RefundRequest
mRefundRequest
;
public
RefundActionImpl
(
Context
context
,
IView
iView
,
P
osAction
action
,
RefundRequest
refundRequest
,
GetTxnIdRequest
getTxnIdRequest
,
OnPosAction
Listener
onPosActionListener
,
boolean
showLoading
)
{
public
RefundActionImpl
(
Context
context
,
IView
iView
,
P
ayAction
action
,
RefundRequest
refundRequest
,
GetTxnIdRequest
getTxnIdRequest
,
PosCallback
Listener
onPosActionListener
,
boolean
showLoading
)
{
super
(
context
,
iView
,
action
,
showLoading
);
this
.
mRefundRequest
=
refundRequest
;
this
.
mGetTxnIdRequest
=
getTxnIdRequest
;
...
...
@@ -48,7 +48,7 @@ public class RefundActionImpl extends IHywebAction<RefundRespose> {
}
@Override
p
rotected
void
onPosActionBefore
()
{
p
ublic
void
onPosActionBefore
()
{
RequestBody
requestBody
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json"
),
GsonUtils
.
GsonString
(
mGetTxnIdRequest
));
String
json
=
GsonUtils
.
GsonString
(
mGetTxnIdRequest
);
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/RetrievalActionImpl.java
View file @
7dc96a6d
...
...
@@ -12,8 +12,8 @@ import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import
com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils
;
import
com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest
;
import
com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode
;
import
com.gingersoft.gsa.cloud.pay.pos.
OnPosAction
Listener
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.
hyweb.PosCallback
Listener
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.RetrievalRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.response.pos.RetrievalRespose
;
...
...
@@ -38,9 +38,9 @@ public class RetrievalActionImpl extends IHywebAction<RetrievalRespose> {
private
RetrievalRequest
mRetrievalRequest
;
private
Long
mOrderId
;
private
P
os
Action
mRetrievalAction
;
private
P
ay
Action
mRetrievalAction
;
public
RetrievalActionImpl
(
Context
context
,
IView
iView
,
P
osAction
action
,
PosAction
retrievalAction
,
Long
orderId
,
RetrievalRequest
request
,
OnPosAction
Listener
onPosActionListener
,
boolean
showLoading
)
{
public
RetrievalActionImpl
(
Context
context
,
IView
iView
,
P
ayAction
action
,
PayAction
retrievalAction
,
Long
orderId
,
RetrievalRequest
request
,
PosCallback
Listener
onPosActionListener
,
boolean
showLoading
)
{
super
(
context
,
iView
,
action
,
showLoading
);
this
.
mOrderId
=
orderId
;
this
.
mRetrievalRequest
=
request
;
...
...
@@ -49,7 +49,7 @@ public class RetrievalActionImpl extends IHywebAction<RetrievalRespose> {
}
@Override
p
rotected
void
onPosActionBefore
()
{
p
ublic
void
onPosActionBefore
()
{
//調起N5狀態查詢
onPosToAction
(
GsonUtils
.
GsonString
(
mRetrievalRequest
));
}
...
...
@@ -84,11 +84,11 @@ public class RetrievalActionImpl extends IHywebAction<RetrievalRespose> {
RequestBody
requestBody
;
switch
(
response
.
getTXN_TYPE
())
{
case
Constant
.
EVENT
.
NAME
.
SALE
:
if
(
mRetrievalAction
==
P
os
Action
.
TIP
)
{
if
(
mRetrievalAction
==
P
ay
Action
.
TIP
)
{
//更新贴士狀態
url
=
"posPay/updatePosTip"
;
requestBody
=
getPosMatterTipsRequest
(
response
);
}
else
if
(
mRetrievalAction
==
P
os
Action
.
VOID
)
{
}
else
if
(
mRetrievalAction
==
P
ay
Action
.
VOID
)
{
//更新取消狀態
url
=
"posPay/updatePosCancel"
;
requestBody
=
getPosMatterVoidRequest
(
response
);
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/SaleActionImpl.java
View file @
7dc96a6d
...
...
@@ -15,8 +15,8 @@ import com.gingersoft.gsa.cloud.component.ComponentName;
import
com.gingersoft.gsa.cloud.order.bean.event.MealPayResultParam
;
import
com.gingersoft.gsa.cloud.order.bean.request.MealOrderPayRequest
;
import
com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode
;
import
com.gingersoft.gsa.cloud.pay.pos.
OnPosAction
Listener
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.
hyweb.PosCallback
Listener
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.bg.GetTxnIdRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.SaleRequest
;
...
...
@@ -50,7 +50,7 @@ public class SaleActionImpl extends IHywebAction<SaleRespose> {
private
GetTxnIdRequest
mTxnIdRequest
;
private
GetTxnIdResponse
mTxnIdResponse
;
public
SaleActionImpl
(
Context
context
,
IView
iView
,
P
osAction
action
,
SaleRequest
saleRequest
,
GetTxnIdRequest
getTxnIdRequest
,
OnPosAction
Listener
onPosActionListener
,
boolean
showLoading
)
{
public
SaleActionImpl
(
Context
context
,
IView
iView
,
P
ayAction
action
,
SaleRequest
saleRequest
,
GetTxnIdRequest
getTxnIdRequest
,
PosCallback
Listener
onPosActionListener
,
boolean
showLoading
)
{
super
(
context
,
iView
,
action
,
showLoading
);
this
.
mSaleRequest
=
saleRequest
;
this
.
mTxnIdRequest
=
getTxnIdRequest
;
...
...
@@ -72,7 +72,7 @@ public class SaleActionImpl extends IHywebAction<SaleRespose> {
}
@Override
p
rotected
void
onPosActionBefore
()
{
p
ublic
void
onPosActionBefore
()
{
RequestBody
requestBody
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json"
),
GsonUtils
.
GsonString
(
mTxnIdRequest
));
String
json
=
GsonUtils
.
GsonString
(
mTxnIdRequest
);
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/SettlementActionImpl.java
View file @
7dc96a6d
...
...
@@ -10,8 +10,8 @@ import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils
;
import
com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode
;
import
com.gingersoft.gsa.cloud.pay.pos.
OnPosAction
Listener
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.
hyweb.PosCallback
Listener
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.SettlementRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.response.pos.SettlementRespose
;
import
com.jess.arms.mvp.IView
;
...
...
@@ -32,13 +32,13 @@ import okhttp3.RequestBody;
public
class
SettlementActionImpl
extends
IHywebAction
<
SettlementRespose
>
{
public
SettlementActionImpl
(
Context
context
,
IView
iView
,
P
osAction
action
,
OnPosAction
Listener
onPosActionListener
,
boolean
showLoading
)
{
public
SettlementActionImpl
(
Context
context
,
IView
iView
,
P
ayAction
action
,
PosCallback
Listener
onPosActionListener
,
boolean
showLoading
)
{
super
(
context
,
iView
,
action
,
showLoading
);
this
.
mOnPosActionListener
=
onPosActionListener
;
}
@Override
p
rotected
void
onPosActionBefore
()
{
p
ublic
void
onPosActionBefore
()
{
SettlementRequest
request
=
new
SettlementRequest
();
onPosToAction
(
GsonUtils
.
GsonString
(
request
));
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/TipsActionImpl.java
View file @
7dc96a6d
...
...
@@ -10,8 +10,8 @@ import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils
;
import
com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode
;
import
com.gingersoft.gsa.cloud.pay.pos.
OnPosAction
Listener
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.
hyweb.PosCallback
Listener
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.bg.GetTxnIdRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.AdjustTipRequest
;
...
...
@@ -41,7 +41,7 @@ public class TipsActionImpl extends IHywebAction<AdjustTipRespose> {
private
GetTxnIdRequest
mTxnIdRequest
;
private
GetTipTxnIdResponse
mTxnIdResponse
;
public
TipsActionImpl
(
Context
context
,
IView
iView
,
P
osAction
action
,
GetTxnIdRequest
txnIdRequest
,
AdjustTipRequest
adjustTipRequest
,
OnPosAction
Listener
onPosActionListener
,
boolean
showLoading
)
{
public
TipsActionImpl
(
Context
context
,
IView
iView
,
P
ayAction
action
,
GetTxnIdRequest
txnIdRequest
,
AdjustTipRequest
adjustTipRequest
,
PosCallback
Listener
onPosActionListener
,
boolean
showLoading
)
{
super
(
context
,
iView
,
action
,
showLoading
);
this
.
mTxnIdRequest
=
txnIdRequest
;
this
.
mAdjustTipRequest
=
adjustTipRequest
;
...
...
@@ -49,7 +49,7 @@ public class TipsActionImpl extends IHywebAction<AdjustTipRespose> {
}
@Override
p
rotected
void
onPosActionBefore
()
{
p
ublic
void
onPosActionBefore
()
{
RequestBody
requestBody
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json"
),
GsonUtils
.
GsonString
(
mTxnIdRequest
));
String
json
=
GsonUtils
.
GsonString
(
mTxnIdRequest
);
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/hyweb/imp/VoidActionImpl.java
View file @
7dc96a6d
...
...
@@ -10,8 +10,8 @@ import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils
;
import
com.gingersoft.gsa.cloud.pay.contract.PayExceptionCode
;
import
com.gingersoft.gsa.cloud.pay.pos.
OnPosAction
Listener
;
import
com.gingersoft.gsa.cloud.pay.
pos.Pos
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.
hyweb.PosCallback
Listener
;
import
com.gingersoft.gsa.cloud.pay.
Pay
Action
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.PosMatter
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.bg.GetTxnIdRequest
;
import
com.gingersoft.gsa.cloud.pay.pos.hyweb.bean.request.pos.VoidRequest
;
...
...
@@ -40,7 +40,7 @@ public class VoidActionImpl extends IHywebAction<VoidRespose> {
private
GetTxnIdRequest
mTxnIdRequest
;
private
GetCancelTxnIdResponse
mTxnIdResponse
;
public
VoidActionImpl
(
Context
context
,
IView
iView
,
P
osAction
action
,
VoidRequest
voidRequest
,
GetTxnIdRequest
txnIdRequest
,
OnPosAction
Listener
onPosActionListener
,
boolean
showLoading
)
{
public
VoidActionImpl
(
Context
context
,
IView
iView
,
P
ayAction
action
,
VoidRequest
voidRequest
,
GetTxnIdRequest
txnIdRequest
,
PosCallback
Listener
onPosActionListener
,
boolean
showLoading
)
{
super
(
context
,
iView
,
action
,
showLoading
);
this
.
mTxnIdRequest
=
txnIdRequest
;
this
.
mVoidRequest
=
voidRequest
;
...
...
@@ -48,7 +48,7 @@ public class VoidActionImpl extends IHywebAction<VoidRespose> {
}
@Override
p
rotected
void
onPosActionBefore
()
{
p
ublic
void
onPosActionBefore
()
{
RequestBody
requestBody
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json"
),
GsonUtils
.
GsonString
(
mTxnIdRequest
));
String
json
=
GsonUtils
.
GsonString
(
mTxnIdRequest
);
...
...
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/yedpay/YedpayCallback.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
.
yedpay
;
import
android.content.Intent
;
import
com.gingersoft.gsa.cloud.pay.Callback
;
import
com.gingersoft.gsa.cloud.pay.pos.bean.BasePosResponse
;
/**
* @作者: bin
* @創建時間: 2021-04-15 9:50
* @更新時間: 2021-04-15 9:50
* @描述:
*/
public
interface
YedpayCallback
extends
Callback
{
void
callSaleUri
(
String
uri
);
void
refundResult
(
boolean
result
);
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/yedpay/YedpayManager.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
.
yedpay
;
import
android.util.SparseArray
;
import
com.gingersoft.gsa.cloud.pay.RequestParms
;
import
com.gingersoft.gsa.cloud.pay.pos.PosPayAction
;
import
com.gingersoft.gsa.cloud.pay.pos.yedpay.constant.YedpayConstant
;
/**
* @作者: bin
* @創建時間: 2021-04-14 12:08
* @更新時間: 2021-04-14 12:08
* @描述:
*/
public
class
YedpayManager
implements
PosPayAction
<
RequestParms
>
{
private
static
YedpayManager
sYedpayManager
;
private
final
SparseArray
<
String
>
mYedpayTypeMap
=
new
SparseArray
<>();
private
RequestParms
mRequestParms
;
private
YedpayCallback
mYedpayCallback
;
public
static
YedpayManager
newInstance
(
RequestParms
requestParms
)
{
if
(
sYedpayManager
==
null
)
{
sYedpayManager
=
new
YedpayManager
(
requestParms
);
}
return
sYedpayManager
;
}
private
YedpayManager
(
RequestParms
requestParms
)
{
this
.
mRequestParms
=
requestParms
;
this
.
mYedpayCallback
=
(
YedpayCallback
)
requestParms
.
getCallback
();
initPayTypeMap
();
}
private
void
initPayTypeMap
()
{
mYedpayTypeMap
.
put
(
1106
,
YedpayConstant
.
Method
.
ALIPAy
);
mYedpayTypeMap
.
put
(
1107
,
YedpayConstant
.
Method
.
wechatpay
);
}
private
String
getPayType
(
int
type
)
{
if
(
mYedpayTypeMap
.
indexOfKey
(
type
)
!=
-
1
)
{
return
mYedpayTypeMap
.
get
(
type
);
}
return
null
;
}
@Override
public
void
void0
(
RequestParms
params
)
{
}
@Override
public
void
tip
(
RequestParms
params
)
{
}
@Override
public
void
retrieval
(
RequestParms
params
)
{
}
@Override
public
void
printStub
(
RequestParms
params
)
{
}
@Override
public
void
settlement
(
RequestParms
params
)
{
}
@Override
public
void
pay
(
RequestParms
params
)
{
String
uriString
=
"yedpayapp://transaction?g="
+
getPayType
(
params
.
getPayType
())
+
"&a="
+
params
.
getPayMoney
()
+
""
;
mYedpayCallback
.
callSaleUri
(
uriString
);
}
@Override
public
void
refund
(
RequestParms
params
)
{
mYedpayCallback
.
refundResult
(
true
);
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/pos/yedpay/constant/YedpayConstant.java
0 → 100644
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
pos
.
yedpay
.
constant
;
/**
* @作者: bin
* @創建時間: 2021-04-16 10:06
* @更新時間: 2021-04-16 10:06
* @描述:
*/
public
interface
YedpayConstant
{
/**
* 支付方式
*/
interface
Method
{
String
ALIPAy
=
"1_1"
;
String
wechatpay
=
"8_1"
;
}
/**
* 支付状态
*/
interface
Status
{
/**
* 0 未支付 1 支付失败 2 支持成功 3 已支付未到账 4.支付中 5.已退款 6.廢棄(第二次結賬)
*/
int
PAY_STATUS_0
=
0
;
int
PAY_STATUS_1
=
1
;
int
PAY_STATUS_2
=
2
;
int
PAY_STATUS_3
=
3
;
int
PAY_STATUS_4
=
4
;
int
PAY_STATUS_5
=
5
;
int
PAY_STATUS_6
=
6
;
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/util/PayMethodUtils.java
View file @
7dc96a6d
package
com
.
gingersoft
.
gsa
.
cloud
.
pay
.
util
;
import
com.gingersoft.gsa.cloud.pay.bean.PayMethod
;
import
com.gingersoft.gsa.cloud.pay.contract.Pay
Type
Contract
;
import
com.gingersoft.gsa.cloud.pay.contract.Pay
Method
Contract
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -50,7 +50,7 @@ public class PayMethodUtils {
if
(
payMethods
!=
null
&&
payMethods
.
size
()
>
0
)
{
for
(
int
i
=
0
;
i
<
payMethods
.
size
();
i
++)
{
PayMethod
payMethod
=
payMethods
.
get
(
i
);
for
(
int
type:
Pay
Type
Contract
.
HYWEB_PAY_METHODS
)
{
for
(
int
type:
Pay
Method
Contract
.
HYWEB_PAY_METHODS
)
{
if
(
payMethod
.
getPayType
()
==
type
)
{
return
i
;
}
...
...
@@ -61,7 +61,7 @@ public class PayMethodUtils {
}
public
static
boolean
withHywebPayMethod
(
PayMethod
payMethod
)
{
for
(
int
type:
Pay
Type
Contract
.
HYWEB_PAY_METHODS
)
{
for
(
int
type:
Pay
Method
Contract
.
HYWEB_PAY_METHODS
)
{
if
(
payMethod
.
getPayType
()
==
type
)
{
return
true
;
}
...
...
@@ -78,7 +78,7 @@ public class PayMethodUtils {
if
(
payMethods
!=
null
&&
payMethods
.
size
()
>
0
)
{
for
(
int
i
=
0
;
i
<
payMethods
.
size
();
i
++)
{
PayMethod
payMethod
=
payMethods
.
get
(
i
);
for
(
int
type:
Pay
Type
Contract
.
HYWEB_PAY_METHODS
)
{
for
(
int
type:
Pay
Method
Contract
.
HYWEB_PAY_METHODS
)
{
if
(
payMethod
.
getPayType
()
==
type
)
{
return
payMethod
;
}
...
...
@@ -88,4 +88,24 @@ public class PayMethodUtils {
return
null
;
}
/**
* 存在Yedpay支付方式
*
* @param payMethods
* @return
*/
public
static
int
hasYedpayMethod
(
List
<
PayMethod
>
payMethods
)
{
if
(
payMethods
!=
null
&&
payMethods
.
size
()
>
0
)
{
for
(
int
i
=
0
;
i
<
payMethods
.
size
();
i
++)
{
PayMethod
payMethod
=
payMethods
.
get
(
i
);
for
(
int
type:
PayMethodContract
.
YEDPAY_PAY_METHODS
)
{
if
(
payMethod
.
getPayType
()
==
type
)
{
return
i
;
}
}
}
}
return
-
1
;
}
}
library-order/src/main/java/com/gingersoft/gsa/cloud/pay/widget/StatusLoadingDialog.java
View file @
7dc96a6d
...
...
@@ -7,6 +7,7 @@ import android.view.View;
import
android.widget.FrameLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
com.gingersoft.gsa.cloud.order.R
;
import
com.gingersoft.gsa.cloud.pay.view.customstatus.CustomStatusView
;
import
com.jess.arms.utils.ArmsUtils
;
...
...
@@ -22,7 +23,7 @@ public class StatusLoadingDialog {
private
TextView
tv_status
;
private
long
mCancelDelayMillis
=
1500
;
private
String
mLoadingText
=
"支付中..."
;
private
String
mLoadingText
=
"支付中..."
;
public
StatusLoadingDialog
(
Context
context
,
String
loadingText
)
{
this
.
mContext
=
context
;
...
...
library-order/src/main/res/layout/dialog_pay_loading.xml
View file @
7dc96a6d
...
...
@@ -2,11 +2,12 @@
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/ll_container"
android:layout_width=
"
wrap_content
"
android:layout_height=
"
wrap_content
"
android:layout_width=
"
@dimen/dp_150
"
android:layout_height=
"
@dimen/dp_150
"
android:layout_gravity=
"center"
android:gravity=
"center"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
android:background=
"@color/transparent"
>
<com.gingersoft.gsa.cloud.pay.view.customstatus.CustomStatusView
android:id=
"@+id/as_status"
...
...
library-order/src/main/res/layout/fragment_pay_flow.xml
0 → 100644
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"1px"
android:layout_height=
"1px"
android:background=
"@color/trans"
android:orientation=
"vertical"
>
</FrameLayout>
\ No newline at end of file
library-ui/src/main/java/com/gingersoft/gsa/cloud/ui/view/OrderPayView.java
View file @
7dc96a6d
...
...
@@ -18,6 +18,7 @@ import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import
com.gingersoft.gsa.cloud.common.utils.VibratorUtils
;
import
com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils
;
import
com.gingersoft.gsa.cloud.pay.bean.PayMethod
;
import
com.gingersoft.gsa.cloud.pay.contract.PayMethodContract
;
import
com.gingersoft.gsa.cloud.pay.util.PayMethodUtils
;
import
com.gingersoft.gsa.cloud.ui.R
;
import
com.gingersoft.gsa.cloud.ui.adapter.BillMethodAdapter
;
...
...
@@ -566,7 +567,7 @@ public class OrderPayView extends LinearLayout {
* @return
*/
private
boolean
isIntegralPayMethod
(
PayMethod
method
)
{
if
(
method
.
getPayType
()
==
PayMethod
.
PAY_TYPE
_INTEGRAL
)
{
if
(
method
.
getPayType
()
==
PayMethod
Contract
.
PAY_METHOD
_INTEGRAL
)
{
return
true
;
}
return
false
;
...
...
library-ui/src/main/res/layout/item_tag_view.xml
View file @
7dc96a6d
<?xml version="1.0" encoding="utf-8"?>
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
xmlns:android=
"http://schemas.android.com/apk/res/android"
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/btn_tag"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_margin=
"@dimen/dp_8"
android:paddingLeft=
"@dimen/dp_15"
android:paddingRight=
"@dimen/dp_15"
android:paddingTop=
"@dimen/dp_12"
android:paddingBottom=
"@dimen/dp_12"
android:textSize=
"@dimen/dp_16"
android:textColor=
"@color/theme_grey_color"
android:layout_gravity=
"center_horizontal"
android:layout_margin=
"@dimen/dp_6"
android:paddingLeft=
"@dimen/dp_10"
android:paddingTop=
"@dimen/dp_8"
android:paddingRight=
"@dimen/dp_10"
android:paddingBottom=
"@dimen/dp_8"
android:text=
"草莓派"
app:qmui_radius=
"@dimen/dp_5"
app:qmui_borderColor=
"@color/theme_grey_color"
>
android:textColor=
"@color/theme_text_color"
android:textSize=
"@dimen/dp_16"
app:qmui_backgroundColor=
"@color/s_app_color_blue_3"
app:qmui_borderColor=
"@color/s_app_color_blue_to_red"
app:qmui_borderWidth=
"1px"
app:qmui_skin_background=
"?attr/app_skin_btn_test_bg"
app:qmui_skin_border=
"?attr/app_skin_btn_test_border"
app:qmui_skin_text_color=
"?attr/app_skin_btn_test_border"
>
</com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton>
\ No newline at end of file
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