Commit 480f0737 by 王宇航

打印,结账

parent 92720ce0
......@@ -16,6 +16,7 @@
package com.jess.arms.http.log;
import android.text.TextUtils;
import android.util.Log;
import com.jess.arms.di.module.GlobalConfigModule;
import com.jess.arms.utils.CharacterHandler;
......@@ -172,6 +173,7 @@ public class DefaultFormatPrinter implements FormatPrinter {
int end = (i + 1) * MAX_LONG_SIZE;
end = end > line.length() ? line.length() : end;
Timber.tag(tag).i(DEFAULT_LINE + line.substring(start, end));
Log.e("aaa", "" + DEFAULT_LINE + line.substring(start, end));
}
}
}
......
......@@ -115,7 +115,8 @@ ext {
"arms" : "me.jessyan:arms:2.5.2",
"fastjson" : "com.alibaba:fastjson:1.2.46",
"zxing" : "cn.yipianfengye.android:zxing-library:2.2",
"BaseRecyclerViewAdapter" : "com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46"
"BaseRecyclerViewAdapter" : "com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46",
"yzjRecyclerView" : "com.yanzhenjie.recyclerview:x:1.3.2"
]
}
ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为library编译,否则别的组件依赖此module时会报错
apply from: rootProject.file('cc-settings.gradle')
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]
defaultConfig {
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
<manifest package="com.billy.cc.demo.interceptors" />
package com.billy.cc.demo.interceptors;
import android.util.Log;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.Chain;
import com.billy.cc.core.component.IGlobalCCInterceptor;
/**
* 示例全局拦截器:日志打印
* @author billy.qi
* @since 18/5/26 11:42
*/
public class LogInterceptor implements IGlobalCCInterceptor {
private static final String TAG = "LogInterceptor";
@Override
public int priority() {
return 1;
}
@Override
public CCResult intercept(Chain chain) {
Log.i(TAG, "============log before:" + chain.getCC());
CCResult result = chain.proceed();
Log.i(TAG, "============log after:" + result);
return result;
}
}
......@@ -8,6 +8,7 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/download_data_app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:networkSecurityConfig="@xml/network_android"
android:supportsRtl="true"
android:theme="@style/AppTheme">
......
package debug;
import android.app.Application;
import com.billy.cc.core.component.CC;
import com.jess.arms.base.BaseApplication;
/**
* @author billy.qi
* @since 17/11/20 20:02
*/
public class MyApp extends Application {
public class MyApp extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
......
package debug.di.component;
import com.gingersoft.gsa.cloud.download.mvp.contract.DownloadContract;
import com.gingersoft.gsa.cloud.download.mvp.ui.activity.DownloadActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.di.scope.ActivityScope;
import dagger.BindsInstance;
import dagger.Component;
import debug.di.module.DownloadModule;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 12/26/2019 17:59
* <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>
* ================================================
*/
@ActivityScope
@Component(modules = DownloadModule.class, dependencies = AppComponent.class)
public interface DownloadComponent {
void inject(DownloadActivity activity);
@Component.Builder
interface Builder {
@BindsInstance
DownloadComponent.Builder view(DownloadContract.View view);
DownloadComponent.Builder appComponent(AppComponent appComponent);
DownloadComponent build();
}
}
\ No newline at end of file
package debug.di.module;
import com.gingersoft.gsa.cloud.download.mvp.contract.DownloadContract;
import com.gingersoft.gsa.cloud.download.mvp.model.DownloadModel;
import dagger.Binds;
import dagger.Module;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 12/26/2019 17:59
* <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 DownloadModule {
@Binds
abstract DownloadContract.Model bindDownloadModel(DownloadModel model);
}
\ No newline at end of file
......@@ -2,7 +2,7 @@ package com.gingersoft.gsa.cloud.download.mvp.contract;
import android.content.Context;
import com.gingersoft.gsa.cloud.base.bean.FoodBean;
import com.gingersoft.gsa.cloud.base.common.bean.FoodBean;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.download.mvp.model.bean.FunctionBean;
import com.jess.arms.base.DefaultAdapter;
......
......@@ -3,7 +3,7 @@ package com.gingersoft.gsa.cloud.download.mvp.model;
import android.app.Application;
import android.content.Context;
import com.gingersoft.gsa.cloud.base.bean.FoodBean;
import com.gingersoft.gsa.cloud.base.common.bean.FoodBean;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.download.mvp.model.bean.FunctionBean;
......
package com.gingersoft.gsa.cloud.download.mvp.model.service;
import com.gingersoft.gsa.cloud.base.bean.FoodBean;
import com.gingersoft.gsa.cloud.base.common.bean.FoodBean;
import com.gingersoft.gsa.cloud.download.mvp.model.bean.FunctionBean;
import io.reactivex.Observable;
......
......@@ -4,7 +4,7 @@ import android.app.Application;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.Api;
import com.gingersoft.gsa.cloud.base.bean.FoodBean;
import com.gingersoft.gsa.cloud.base.common.bean.FoodBean;
import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
......@@ -31,8 +31,6 @@ import com.gingersoft.gsa.cloud.download.mvp.contract.DownloadContract;
import com.jess.arms.utils.DeviceUtils;
import com.jess.arms.utils.RxLifecycleUtils;
import org.simple.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
......@@ -114,7 +112,6 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
.observeOn(AndroidSchedulers.mainThread())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<Object>(mErrorHandler) {
@Override
public void onSubscribe(Disposable d) {
//订阅前先清空正在执行的订阅
......
......@@ -13,6 +13,7 @@
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_android"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
......
......@@ -104,8 +104,6 @@ public class MainActivity extends BaseFragmentActivity<MainPresenter> implements
};
mViewPager.setAdapter(pagerAdapter);
mTabSegment.setupWithViewPager(mViewPager, false);
}
private void initTabs() {
......
......@@ -50,7 +50,7 @@ public class HomeFunctionAdapter extends QMUIDefaultStickySectionAdapter<Section
viewHolder.tvFun.setText(section.getItemAt(itemIndex).getText());
}
class ViewHolder extends QMUIStickySectionAdapter.ViewHolder {
public class ViewHolder extends QMUIStickySectionAdapter.ViewHolder {
@BindView(R2.id.iv_main_home_item_function_icon)
ImageView ivFun;//功能圖標
@BindView(R2.id.tv_main_home_item_function_name)
......@@ -59,5 +59,9 @@ public class HomeFunctionAdapter extends QMUIDefaultStickySectionAdapter<Section
super(itemView);
ButterKnife.bind(this, itemView);
}
public TextView getTvFun() {
return tvFun;
}
}
}
......@@ -4,6 +4,7 @@ import android.content.Intent;
import android.media.Image;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -12,6 +13,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2;
......@@ -32,7 +34,9 @@ import com.qmuiteam.qmui.widget.section.QMUIStickySectionLayout;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......@@ -78,13 +82,10 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements HomeCon
private RecyclerView.LayoutManager mLayoutManager;
private HomeFunctionAdapter mAdapter;
private String[] title = new String[]{"點餐", "管理", "員工"};
private String[] functionTitles = {
"餐檯模式", "外送模式", "外賣模式", "預點餐模式",
"快速收款", "餐牌管理", "選項管理", "餐桌管理",
"時段管理", "支付管理", "折扣管理", "員工管理",
"權限管理", "操作記錄"
};
private Map<String, String[]> function = new HashMap<>();
private ArrayList<QMUISection<SectionHeader, SectionItem>> list;
public static HomeFragment newInstance() {
HomeFragment fragment = new HomeFragment();
......@@ -108,7 +109,7 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements HomeCon
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mPresenter.getRestaurantReport("26");
mPresenter.getRestaurantReport(GsaCloudApplication.getRestaurantId(mContext) + "");
// mPresenter.getRestaurantFunList("26");
initTopBar();
initStickyLayout();
......@@ -147,13 +148,26 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements HomeCon
@Override
public void onItemClick(QMUIStickySectionAdapter.ViewHolder holder, int position) {
switch (position) {
case 1:
CC.obtainBuilder("Component.Table")
.setActionName("showTableActivity")
.build()
.call();
break;
if (holder instanceof HomeFunctionAdapter.ViewHolder) {
HomeFunctionAdapter.ViewHolder viewHolder = (HomeFunctionAdapter.ViewHolder) holder;
if (viewHolder.getTvFun().getText() != null) {
switch (viewHolder.getTvFun().getText().toString()) {
case "餐檯模式":
CC.obtainBuilder("Component.Table")
.setActionName("showTableActivity")
.build()
.call();
break;
case "打印管理":
CC.obtainBuilder("Component.Print")
.setActionName("showPrintActivity")
.build()
.call();
break;
}
}
} else {
//點擊的頭部,折疊
}
}
......@@ -162,26 +176,30 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements HomeCon
return false;
}
});
String[] title = new String[]{"點餐", "管理", "員工"};
function.put(title[0], new String[]{"餐檯模式", "外送模式", "外賣模式", "預點餐模式", "快速收款"});
function.put(title[1], new String[]{"餐牌管理", "選項管理", "餐桌管理", "打印管理", "時段管理", "支付管理", "折扣管理", "員工管理"});
function.put(title[2], new String[]{"權限管理", "操作記錄"});
mSectionLayout.setAdapter(mAdapter, true);
ArrayList<QMUISection<SectionHeader, SectionItem>> list = new ArrayList<>();
for (String s : title) {
list.add(createSection(s));
list = new ArrayList<>();
for (int i = 0; i < function.size(); i++) {
list.add(createSection(title[i]));
}
mAdapter.setData(list);
}
private QMUISection<SectionHeader, SectionItem> createSection(String headerText) {
SectionHeader header = new SectionHeader(headerText);
private QMUISection<SectionHeader, SectionItem> createSection(String title) {
SectionHeader header = new SectionHeader(title);
ArrayList<SectionItem> contents = new ArrayList<>();
for (int i = 0; i < 5; i++) {
contents.add(new SectionItem(R.drawable.ic_dining_table, functionTitles[i]));
for (int i = 0; i < Objects.requireNonNull(function.get(title)).length; i++) {
contents.add(new SectionItem(R.drawable.ic_dining_table, Objects.requireNonNull(function.get(title))[i]));
}
QMUISection<SectionHeader, SectionItem> section = new QMUISection<>(header, contents, false);
// QMUISection<SectionHeader, SectionItem> section = new QMUISection<>(header, contents, false);
// if test load more, you can open the code
// section.setExistAfterDataToLoad(true);
// section.setExistBeforeDataToLoad(true);
return section;
return new QMUISection<>(header, contents, false);
}
private RecyclerView.LayoutManager createLayoutManager() {
......
apply from: rootProject.file('cc-settings.gradle')
apply plugin: 'com.jakewharton.butterknife'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
// 避免 lint 检测出错时停止构建
lintOptions {
abortOnError false
}
defaultConfig {
if (project.ext.runAsApp) {
applicationId "com.gingersoft.gsa.cloud.mealstand"
}
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
includeCompileClasspath true
}
}
}
resourcePrefix "meal"
buildTypes {
release {
postprocessing {
removeUnusedCode false
removeUnusedResources false
obfuscate false
optimizeCode false
proguardFiles 'proguard.cfg'
}
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// if (project.ext.runAsApp) {
annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]
debugImplementation rootProject.ext.dependencies["canary-debug"]
releaseImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["canary-release"]
// }else {
// compileOnly rootProject.ext.dependencies["dagger2-compiler"]
// compileOnly rootProject.ext.dependencies["canary-debug"]
// compileOnly rootProject.ext.dependencies["canary-release"]
// compileOnly rootProject.ext.dependencies["canary-release"]
// }
// test
testImplementation rootProject.ext.dependencies["junit"]
// debugImplementation rootProject.ext.dependencies["canary-debug"]
// releaseImplementation rootProject.ext.dependencies["canary-release"]
// testImplementation rootProject.ext.dependencies["canary-release"]
}
package com.gingersoft.cloud.gsa;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.gingersoft.cloud.gsa", appContext.getPackageName());
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.gsa.cloud.meal">
<application>
<activity android:name=".mvp.ui.activity.MealStandActivity"/>
<activity android:name=".mvp.ui.activity.OrderPayActivity"/>
<activity android:name=".mvp.ui.activity.OrderContentActivity" />
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.gsa.cloud.meal">
<application
android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/meal_app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.OrderPayActivity"></activity>
<activity android:name=".mvp.ui.activity.OrderContentActivity" />
<activity
android:name=".mvp.ui.activity.MealStandActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="network.config.GlobalConfiguration"
android:value="ConfigModule" />
<meta-data
android:name="design_width_in_dp"
android:value="360" />
<meta-data
android:name="design_height_in_dp"
android:value="540" />
</application>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
\ No newline at end of file
package debug;
import android.app.Application;
import com.billy.cc.core.component.CC;
/**
* @author billy.qi
* @since 17/11/20 20:02
*/
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
CC.enableVerboseLog(true);
CC.enableDebug(true);
CC.enableRemoteCC(true);
}
}
package com.gingersoft.gsa.cloud.meal;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent;
import com.gingersoft.gsa.cloud.base.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.MealStandActivity;
public class ComponentMealStand implements IComponent {
@Override
public String getName() {
//组件的名称,调用此组件的方式:
// CC.obtainBuilder("ComponentA")...build().callAsync()
return "Component.Meal";
}
/**
* 组件被调用时的入口
* 要确保每个逻辑分支都会调用到CC.sendCCResult,
* 包括try-catch,if-else,switch-case-default,startActivity
*
* @param cc 组件调用对象,可从此对象中获取相关信息
* @return true:将异步调用CC.sendCCResult(...),用于异步实现相关功能,例如:文件加载、网络请求等
* false:会同步调用CC.sendCCResult(...),即在onCall方法return之前调用,否则将被视为不合法的实现
*/
@Override
public boolean onCall(CC cc) {
String actionName = cc.getActionName();
switch (actionName) {
case "showMealStandActivity":
openActivity(cc);
break;
case "clearOrderList":
clearOrderList(cc);
break;
case "getLifecycleFragment":
//demo for provide fragment object to other component
getLifecycleFragment(cc);
break;
case "lifecycleFragment.addText":
lifecycleFragmentDoubleText(cc);
break;
case "getInfo":
getInfo(cc);
break;
default:
//这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例
//并且方法的返回值为false,代表不会异步调用CC.sendCCResult(...)
//在LocalCCInterceptor中将会返回错误码为-10的CCResult
break;
}
return false;
}
private void clearOrderList(CC cc) {
MyOrderManage.getInstance().clear();
}
private void lifecycleFragmentDoubleText(CC cc) {
// LifecycleFragment lifecycleFragment = cc.getParamItem("fragment");
// if (lifecycleFragment != null) {
// String text = cc.getParamItem("text", "");
// lifecycleFragment.addText(text);
// CC.sendCCResult(cc.getCallId(), CCResult.success());
// } else {
// CC.sendCCResult(cc.getCallId(), CCResult.error("no fragment params"));
// }
}
private void getLifecycleFragment(CC cc) {
// CC.sendCCResult(cc.getCallId(), CCResult.successWithNoKey(new LifecycleFragment()));
}
private void getInfo(CC cc) {
String userName = "billy";
CC.sendCCResult(cc.getCallId(), CCResult.success("userName", userName));
}
private void openActivity(CC cc) {
CCUtil.navigateTo(cc, MealStandActivity.class);
CC.sendCCResult(cc.getCallId(), CCResult.success());
}
}
package com.gingersoft.gsa.cloud.meal;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.MealStandActivity;
public class ComponentOrderContent implements IComponent {
@Override
public String getName() {
//组件的名称,调用此组件的方式:
// CC.obtainBuilder("ComponentA")...build().callAsync()
return "Component.OrderContent";
}
/**
* 组件被调用时的入口
* 要确保每个逻辑分支都会调用到CC.sendCCResult,
* 包括try-catch,if-else,switch-case-default,startActivity
*
* @param cc 组件调用对象,可从此对象中获取相关信息
* @return true:将异步调用CC.sendCCResult(...),用于异步实现相关功能,例如:文件加载、网络请求等
* false:会同步调用CC.sendCCResult(...),即在onCall方法return之前调用,否则将被视为不合法的实现
*/
@Override
public boolean onCall(CC cc) {
String actionName = cc.getActionName();
switch (actionName) {
case "showOrderContentActivity":
openActivity(cc);
break;
case "getLifecycleFragment":
//demo for provide fragment object to other component
getLifecycleFragment(cc);
break;
case "lifecycleFragment.addText":
lifecycleFragmentDoubleText(cc);
break;
case "getInfo":
getInfo(cc);
break;
default:
//这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例
//并且方法的返回值为false,代表不会异步调用CC.sendCCResult(...)
//在LocalCCInterceptor中将会返回错误码为-10的CCResult
break;
}
return false;
}
private void lifecycleFragmentDoubleText(CC cc) {
// LifecycleFragment lifecycleFragment = cc.getParamItem("fragment");
// if (lifecycleFragment != null) {
// String text = cc.getParamItem("text", "");
// lifecycleFragment.addText(text);
// CC.sendCCResult(cc.getCallId(), CCResult.success());
// } else {
// CC.sendCCResult(cc.getCallId(), CCResult.error("no fragment params"));
// }
}
private void getLifecycleFragment(CC cc) {
// CC.sendCCResult(cc.getCallId(), CCResult.successWithNoKey(new LifecycleFragment()));
}
private void getInfo(CC cc) {
String userName = "billy";
CC.sendCCResult(cc.getCallId(), CCResult.success("userName", userName));
}
private void openActivity(CC cc) {
CCUtil.navigateTo(cc, MealStandActivity.class);
CC.sendCCResult(cc.getCallId(), CCResult.success());
}
}
package com.gingersoft.gsa.cloud.meal.app;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-01-08
* 修订历史:2020-01-08
* 描述:
*/
public interface GoldConstants {
int DetailColCount = 5;
}
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeColor="#00000000"
android:strokeWidth="1">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M6.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeColor="#00000000"
android:strokeWidth="1" />
</vector>
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillColor="#008577"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF"
android:strokeWidth="0.8" />
</vector>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="meal_colorPrimary">#008577</color>
<color name="meal_colorPrimaryDark">#00574B</color>
<color name="meal_colorAccent">#D81B60</color>
</resources>
<resources>
<dimen name="meal_fab_margin">16dp</dimen>
</resources>
<resources>
<string name="meal_app_name">GSA-Mealstand</string>
<string name="meal_send_order">送單</string>
<string name="meal_print_order">印單</string>
<string name="meal_pay_order">結賬</string>
</resources>
<resources>
<!-- Base application theme. -->
<style name="meal_AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/meal_colorPrimary</item>
<item name="colorPrimaryDark">@color/meal_colorPrimaryDark</item>
<item name="colorAccent">@color/meal_colorAccent</item>
</style>
</resources>
package com.gingersoft.cloud.gsa;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}
\ No newline at end of file
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'com.jakewharton.butterknife'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
......@@ -38,11 +38,17 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation rootProject.ext.dependencies["zxing"]
annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]
implementation 'am.util:printer:2.1.0'
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
implementation rootProject.ext.dependencies["yzjRecyclerView"]
// implementation rootProject.ext.dependencies["fastjson"]
debugImplementation rootProject.ext.dependencies["canary-debug"]
releaseImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["junit"]
}
package com.joe.print;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.joe.print.test", appContext.getPackageName());
}
}
......@@ -2,7 +2,9 @@
package="com.joe.print">
<application>
<activity android:name=".PrintActivity"/>
<activity android:name=".mvp.ui.activity.PrintActivity" android:theme="@style/print_TranslucentTheme"/>
<activity android:name=".mvp.ui.activity.PrinterListActivity"/>
<activity android:name=".mvp.ui.activity.PrinterAddActivity"/>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.joe.print" >
package="com.joe.print">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name=".MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".MyApp"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/user_register_AppTheme">
<activity android:name=".PrintActivity">
android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.PrinterAddActivity"/>
<activity android:name=".mvp.ui.activity.PrintActivity" android:theme="@style/print_TranslucentTheme"/> <!-- android:theme="@style/print_TranslucentTheme" -->
<activity android:name=".mvp.ui.activity.PrinterListActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
</manifest>
\ No newline at end of file
......@@ -2,22 +2,6 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
android:orientation="vertical">
<Button
android:id="@+id/btn_print"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="打印"
android:layout_marginTop="50dp"
android:textColor="#333"
android:textSize="16sp" />
<ImageView
android:id="@+id/iv_print"
android:layout_width="match_parent"
android:layout_gravity="center"
android:layout_height="wrap_content"/>
</LinearLayout>
\ No newline at end of file
package com.joe.print;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import com.billy.cc.core.component.CCUtil;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.ui.dialog.LoadingDialog;
import com.joe.print.adapter.BillAdapter;
import com.joe.print.adapter.FoodAdapter;
import com.joe.print.bean.BillingBean;
import com.joe.print.bean.FoodBean;
import com.joe.print.print.SendPrint;
import java.util.ArrayList;
import java.util.List;
import am.util.printer.PrintExecutor;
import am.util.printer.PrintSocketHolder;
import am.util.printer.PrinterWriter58mm;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
/**
* Created by Wyh on 2020/1/7.
*/
public class PrintActivity extends Activity implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener {
private ImageView view;
private PrintExecutor executor;
private SendPrint maker;
private TextView tv_dining_table_number;
private TextView tv_people;
private TextView tv_order_num;
private TextView tv_date;
private RecyclerView rvFood;
private RecyclerView rvBill;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_print);
setContentView(R.layout.print_layout_print);
tv_dining_table_number= findViewById(R.id.tv_dining_table_number);
tv_people= findViewById(R.id.tv_people);
tv_order_num= findViewById(R.id.tv_order_num);
tv_date= findViewById(R.id.tv_date);
rvFood = findViewById(R.id.rv_food);
rvBill = findViewById(R.id.rv_bill_amount);
List<Food> foodList = MyOrderManage.getInstance().getOrderFoodList();
TableBean.DataBean tableBean = OpenTableContract.getDefault().getTableBean();
tv_dining_table_number.setText(tableBean.getTableName());
tv_people.setText(tableBean.getPeopleNumber()+"");
// tv_order_num.setText();
tv_date.setText(tableBean.getCreateTime());
// List<FoodBean> data = new ArrayList<>();
// data.add(new FoodBean("包子(主項)", 1, 13.54));
// data.add(new FoodBean("番薯爸爸", 2, 8.0));
// data.add(new FoodBean("包子(主項)", 3, 37.34));
// data.add(new FoodBean("測卡很快就酸辣粉十大減肥和思考", 33, 1334.2254));
FoodAdapter foodAdapter = new FoodAdapter(foodList);
rvFood.setLayoutManager(new LinearLayoutManager(this));
rvFood.setAdapter(foodAdapter);
List<BillingBean> billingBeans = new ArrayList<>();
billingBeans.add(new BillingBean("合計", 58.88));
billingBeans.add(new BillingBean("10%服務費", 5.08));
billingBeans.add(new BillingBean("賬單小數", -0.06));
billingBeans.add(new BillingBean("上課交電話費扣水電費可接受的咖啡機", 837248.8829372));
BillAdapter billAdapter = new BillAdapter(billingBeans);
rvBill.setLayoutManager(new LinearLayoutManager(this));
rvBill.setAdapter(billAdapter);
// view = findViewById(R.id.iv_print);
LoadingDialog.showDialogForLoading(this,"打印中...",false);
// findViewById(R.id.btn_print).setOnClickListener(v -> {
if (executor == null) {
executor = new PrintExecutor("192.168.1.217", 9100, PrinterWriter58mm.TYPE_58);
executor.setOnStateChangedListener(PrintActivity.this::onResult);
executor.setOnPrintResultListener(PrintActivity.this);
}
executor.setIp("192.168.1.217", 9100);
executor.doPrinterRequestAsync(maker);
// });
}
public void loadImage(Bitmap bitmap) {
runOnUiThread(() -> view.setImageBitmap(bitmap));
}
@Override
public void onResult(int errorCode) {
switch (errorCode) {
case PrintSocketHolder.ERROR_0:
break;
case PrintSocketHolder.ERROR_1:
break;
case PrintSocketHolder.ERROR_2:
break;
case PrintSocketHolder.ERROR_3:
break;
case PrintSocketHolder.ERROR_4:
break;
case PrintSocketHolder.ERROR_5:
break;
}
LoadingDialog.cancelDialogForLoading();
finish();
}
@Override
public void onStateChanged(int state) {
switch (state) {
case PrintSocketHolder.STATE_0:
break;
case PrintSocketHolder.STATE_1:
break;
case PrintSocketHolder.STATE_2:
break;
case PrintSocketHolder.STATE_3:
break;
case PrintSocketHolder.STATE_4:
break;
}
}
}
package com.joe.print;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent;
import com.joe.print.mvp.ui.activity.PrintActivity;
import com.joe.print.mvp.ui.activity.PrinterListActivity;
public class PrintComponent implements IComponent {
......@@ -41,7 +47,15 @@ public class PrintComponent implements IComponent {
case "getInfo":
getInfo(cc);
break;
case "print_order":
return printOrderInfo(cc);
default:
// cc.callAsync(new IComponentCallback() {
// @Override
// public void onResult(CC cc, CCResult result) {
//
// }
// });
//这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例
//并且方法的返回值为false,代表不会异步调用CC.sendCCResult(...)
//在LocalCCInterceptor中将会返回错误码为-10的CCResult
......@@ -71,8 +85,28 @@ public class PrintComponent implements IComponent {
}
private void openActivity(CC cc) {
CCUtil.navigateTo(cc, PrintActivity.class);
CCUtil.navigateTo(cc, PrinterListActivity.class);
CC.sendCCResult(cc.getCallId(), CCResult.success());
}
private boolean printOrderInfo(CC cc){
// Print.getInstance().printOrder(cc.getContext());
Context context = cc.getContext();
Intent intent = new Intent(context, PrintActivity.class);
if (!(context instanceof Activity)) {
//调用方没有设置context或app间组件跳转,context为application
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
//将cc的callId传给Activity,登录完成后通过这个callId来回传结果
intent.putExtra("callId", cc.getCallId());
context.startActivity(intent);
// CCUtil.navigateTo(cc, PrintActivity.class);
// CC.sendCCResult(cc.getCallId(), CCResult.success());
//返回true,不立即调用CC.sendCCResult
return true;
}
}
package com.joe.print.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.joe.print.di.module.PrintListModule;
import com.joe.print.mvp.contract.PrintListContract;
import com.jess.arms.di.scope.ActivityScope;
import com.joe.print.mvp.ui.activity.PrinterListActivity;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 10:24
* <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>
* ================================================
*/
@ActivityScope
@Component(modules = PrintListModule.class, dependencies = AppComponent.class)
public interface PrintListComponent {
void inject(PrinterListActivity activity);
@Component.Builder
interface Builder {
@BindsInstance
PrintListComponent.Builder view(PrintListContract.View view);
PrintListComponent.Builder appComponent(AppComponent appComponent);
PrintListComponent build();
}
}
\ No newline at end of file
package com.joe.print.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.joe.print.di.module.PrinterAddModule;
import com.joe.print.mvp.contract.PrinterAddContract;
import com.jess.arms.di.scope.ActivityScope;
import com.joe.print.mvp.ui.activity.PrinterAddActivity;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 16:23
* <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>
* ================================================
*/
@ActivityScope
@Component(modules = PrinterAddModule.class, dependencies = AppComponent.class)
public interface PrinterAddComponent {
void inject(PrinterAddActivity activity);
@Component.Builder
interface Builder {
@BindsInstance
PrinterAddComponent.Builder view(PrinterAddContract.View view);
PrinterAddComponent.Builder appComponent(AppComponent appComponent);
PrinterAddComponent build();
}
}
\ No newline at end of file
package com.joe.print.di.module;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.joe.print.mvp.contract.PrintListContract;
import com.joe.print.mvp.model.PrintListModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 10:24
* <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 PrintListModule {
@Binds
abstract PrintListContract.Model bindPrintListModel(PrintListModel model);
}
\ No newline at end of file
package com.joe.print.di.module;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.joe.print.mvp.contract.PrinterAddContract;
import com.joe.print.mvp.model.PrinterAddModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 16:23
* <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 PrinterAddModule {
@Binds
abstract PrinterAddContract.Model bindPrinterAddModel(PrinterAddModel model);
}
\ No newline at end of file
package com.joe.print.mvp.contract;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import java.util.List;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 10:24
* <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 PrintListContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadPrinterList(List<PrinterDeviceBean> deviceBeans);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<BaseResult> getPrinterList(int restaurantId);
Observable<BaseResult> deletePrinter(RequestBody requestBody);
}
}
package com.joe.print.mvp.contract;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 16:23
* <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 PrinterAddContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void addPrinterSuccess();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<BaseResult> addPrinter(RequestBody requestBody);
Observable<BaseResult> updatePrinter(RequestBody requestBody);
}
}
package com.joe.print.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.ActivityScope;
import javax.inject.Inject;
import com.joe.print.mvp.contract.PrintListContract;
import com.joe.print.mvp.model.server.PrinterService;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 10:24
* <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>
* ================================================
*/
@ActivityScope
public class PrintListModel extends BaseModel implements PrintListContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public PrintListModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<BaseResult> getPrinterList(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
.getPrinterList(restaurantId);
}
@Override
public Observable<BaseResult> deletePrinter(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
.deletePrinterList(requestBody);
}
}
\ No newline at end of file
package com.joe.print.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.ActivityScope;
import javax.inject.Inject;
import com.joe.print.mvp.contract.PrinterAddContract;
import com.joe.print.mvp.model.server.PrinterService;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 16:23
* <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>
* ================================================
*/
@ActivityScope
public class PrinterAddModel extends BaseModel implements PrinterAddContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public PrinterAddModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<BaseResult> addPrinter(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
.addPrinter(requestBody);
}
@Override
public Observable<BaseResult> updatePrinter(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(PrinterService.class)
.updatePrinter(requestBody);
}
}
\ No newline at end of file
package com.joe.print.mvp.model;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import java.util.List;
/**
* Created by Wyh on 2020/1/17.
*/
public class PrinterManager {
private static PrinterManager printerManager;
public static PrinterManager getPrinterManager() {
if (printerManager == null) {
printerManager = new PrinterManager();
}
return printerManager;
}
public List<PrinterDeviceBean> deviceBeans;
public List<PrinterDeviceBean> getDeviceBeans() {
return deviceBeans;
}
public void setDeviceBeans(List<PrinterDeviceBean> deviceBeans) {
this.deviceBeans = deviceBeans;
}
}
package com.joe.print.bean;
package com.joe.print.mvp.model.bean;
/**
* Created by Wyh on 2020/1/9.
......
//package com.joe.print.mvp.model.bean;
//
//import java.io.Serializable;
//
///**
// * Created by Wyh on 2020/1/16.
// * 打印機實體類
// */
//public class PrinterDeviceBean implements Serializable {
// private int id; //這個類是用來“新增”打印機的,不能有id。解析打印機列表用另一個類
//// private int uid;
// private int restaurantId;
// private String ip;
// private int port;
// private int type;
//// private long createTime;
//
// public PrinterDeviceBean() {
// }
//
// public PrinterDeviceBean(int id, int restaurantId, String ip, int port, int type) {
// this.id = id;
// this.restaurantId = restaurantId;
// this.ip = ip;
// this.port = port;
// this.type = type;
// }
//
// public PrinterDeviceBean(int restaurantId, String ip, int port, int type) {
// this.restaurantId = restaurantId;
// this.ip = ip;
// this.port = port;
// this.type = type;
// }
//
// public int getRestaurantId() {
// return restaurantId;
// }
//
// public void setRestaurantId(int restaurantId) {
// this.restaurantId = restaurantId;
// }
//
// public String getIp() {
// return ip;
// }
//
// public void setIp(String ip) {
// this.ip = ip;
// }
//
// public int getPort() {
// return port;
// }
//
// public void setPort(int port) {
// this.port = port;
// }
//
// public int getType() {
// return type;
// }
//
// public void setType(int type) {
// this.type = type;
// }
//
// public int getId() {
// return id;
// }
//
// public void setId(int id) {
// this.id = id;
// }
//
//// public int getUid() {
//// return uid;
//// }
////
//// public void setUid(int uid) {
//// this.uid = uid;
//// }
////
//// public long getCreateTime() {
//// return createTime;
//// }
////
//// public void setCreateTime(long createTime) {
//// this.createTime = createTime;
//// }
//}
package com.joe.print.mvp.model.server;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
/**
* Created by Wyh on 2019/12/20.
*/
public interface PrinterService {
@POST("PrinterDevice/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> addPrinter(@Body RequestBody requestBody);
@GET("PrinterDevice/list?" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getPrinterList(@Query("restaurantId") int restaurantId);
@POST("PrinterDevice/deletes" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> deletePrinterList(@Body RequestBody requestBody);
@POST("PrinterDevice/update" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> updatePrinter(@Body RequestBody requestBody);
}
package com.joe.print.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
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 com.joe.print.mvp.contract.PrintListContract;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 10:24
* <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>
* ================================================
*/
@ActivityScope
public class PrintListPresenter extends BasePresenter<PrintListContract.Model, PrintListContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public PrintListPresenter(PrintListContract.Model model, PrintListContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
/**
* 獲取打印機列表
*
* @param restaurantId 餐廳id
*/
public void getPrinterList(int restaurantId) {
mModel.getPrinterList(restaurantId)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
if(baseResult.isSuccess()){
List<PrinterDeviceBean> deviceBeans = JsonUtils.parseArray(baseResult.getData(), PrinterDeviceBean.class);
if(deviceBeans != null && deviceBeans.size() > 0){
mRootView.loadPrinterList(deviceBeans);
}
}
}
});
}
/**
* 刪除打印機
* @param ids 打印機id,可以傳多個 例如:1,2,3
*/
public void deletePrinter(String ids){
RequestBody requestBody = new FormBody.Builder()
.add("ids", ids)
.build();
mModel.deletePrinter(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
}
});
}
}
package com.joe.print.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
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 com.joe.print.mvp.contract.PrinterAddContract;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.MediaType;
import okhttp3.RequestBody;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 16:23
* <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>
* ================================================
*/
@ActivityScope
public class PrinterAddPresenter extends BasePresenter<PrinterAddContract.Model, PrinterAddContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public PrinterAddPresenter(PrinterAddContract.Model model, PrinterAddContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
/**
* 添加打印機
*
* @param restaurantId 餐廳id
* @param ip 打印機ip
* @param port 打印機端口號
* @param type 類型1 :55mm, 2:88mm
*/
public void addPrinter(int restaurantId, String ip, String port, int type) {
PrinterDeviceBean printerDeviceBean = new PrinterDeviceBean(restaurantId, ip, Integer.parseInt(port), type);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(printerDeviceBean));
mModel.addPrinter(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
if (baseResult.isSuccess()) {
mRootView.addPrinterSuccess();
} else {
mRootView.showMessage("保存失敗");
}
}
});
}
/**
* 更新打印機信息
*
* @param id 打印機id
* @param restaurantId 餐廳id
* @param ip 打印機ip地址
* @param port 打印機端口號
* @param type 打印機類型 1 :55mm, 2:88mm
*/
public void updatePrinterInfo(int id, int restaurantId, String ip, String port, int type) {
PrinterDeviceBean printerDeviceBean = new PrinterDeviceBean(id, restaurantId, ip, Integer.parseInt(port), type);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(printerDeviceBean));
mModel.updatePrinter(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
if (baseResult.isSuccess()) {
}
}
});
}
}
package com.joe.print.mvp.print;
import android.content.Context;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.ui.dialog.LoadingDialog;
import am.util.printer.PrintExecutor;
import am.util.printer.PrintSocketHolder;
import am.util.printer.PrinterWriter58mm;
/**
* Created by Wyh on 2020/1/15.
*/
public class Print implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener {
private PrintExecutor executor;
private SendPrint maker;
private static Print print;
private Context mContext;
public static Print getInstance() {
synchronized (Print.class) {
if (print == null) {
print = new Print();
}
}
return print;
}
public void printOrder(Context context) {
this.mContext = context;
LoadingDialog.showNewDialogForLoading(GsaCloudApplication.getAppContext(),"初始化...",false);
if (executor == null) {
executor = new PrintExecutor("192.168.1.217", 9100, PrinterWriter58mm.TYPE_58);
executor.setOnStateChangedListener(this);
executor.setOnPrintResultListener(this);
}
if (maker == null) {
maker = new SendPrint(context, 255, 580);
}
executor.setIp("192.168.1.218", 9100);
executor.doPrinterRequestAsync(maker);
}
@Override
public void onResult(int errorCode) {
String msg;
switch (errorCode) {
case PrintSocketHolder.ERROR_0:
//打印成功
msg = "打印成功";
break;
case PrintSocketHolder.ERROR_2:
//创建Socket失败
msg = "連接打印機失敗";
break;
case PrintSocketHolder.ERROR_1:
case PrintSocketHolder.ERROR_3:
case PrintSocketHolder.ERROR_4:
case PrintSocketHolder.ERROR_5:
default:
//打印失敗
msg = "打印失敗";
// LoadingDialog.cancelDialogForLoading();
break;
}
LoadingDialog.setText(msg);
}
@Override
public void onStateChanged(int state) {
String msg = "";
switch (state) {
case PrintSocketHolder.STATE_0:
case PrintSocketHolder.STATE_1:
//创建Socket连接
msg = "連接打印機...";
break;
case PrintSocketHolder.STATE_2:
case PrintSocketHolder.STATE_3:
//写入测试页面数据
msg = "正在打印...";
break;
case PrintSocketHolder.STATE_4:
msg = "正在關閉...";
// LoadingDialog.cancelDialogForLoading();
break;
}
LoadingDialog.setText(msg);
}
}
package com.joe.print.print;
package com.joe.print.mvp.print;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.joe.print.LayoutToBitmapUtils;
import com.gingersoft.gsa.cloud.base.utils.view.LayoutToBitmapUtils;
import com.joe.print.R;
import com.joe.print.adapter.BillAdapter;
import com.joe.print.adapter.FoodAdapter;
import com.joe.print.bean.BillingBean;
import com.joe.print.bean.FoodBean;
import com.joe.print.utils.BitmapUtil;
import com.joe.print.utils.ImageUtils;
import com.joe.print.mvp.ui.adapter.BillAdapter;
import com.joe.print.mvp.ui.adapter.FoodAdapter;
import com.joe.print.mvp.model.bean.BillingBean;
import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
......@@ -59,8 +63,9 @@ public class SendPrint implements PrintDataMaker {
LayoutToBitmapUtils.layoutView(context, view);//先测量view
Bitmap bitmap = LayoutToBitmapUtils.loadBitmapFromView(view);//将view轉bitmap
//壓縮bitmap到指定大小
bitmap = ImageUtils.scalingBitmap(bitmap, width);
bitmap = ImageUtils.zoomDrawable(bitmap, width, bitmap.getHeight());
ArrayList<byte[]> image1 = PrinterUtils.decodeBitmapToDataList(bitmap, parting);//bitmap转字节码
data.addAll(image1);
......@@ -86,32 +91,74 @@ public class SendPrint implements PrintDataMaker {
}
}
private View view;
private TextView brandName;
private TextView restaurantName;
private TextView tableNum;//台號
private TextView people;//人數
private TextView orderNum;//單號
private TextView orderData;
private RecyclerView rvFood;
private RecyclerView rvBillAmount;
private TextView mTvTotalAmount;//總金額
private TextView checkOutTime;
private TextView line_food_info;
@NotNull
private View initView() {
View view = LinearLayout.inflate(context, R.layout.print_layout_print, null);
RecyclerView rvFood = view.findViewById(R.id.rv_food);
RecyclerView rvBill = view.findViewById(R.id.rv_bill_amount);
if (view == null) {
view = LinearLayout.inflate(context, R.layout.print_layout_print, null);
brandName = view.findViewById(R.id.tv_brand_name);
restaurantName = view.findViewById(R.id.tv_restaurant_name);
tableNum = view.findViewById(R.id.tv_dining_table_number);
people = view.findViewById(R.id.tv_people);
orderNum = view.findViewById(R.id.tv_order_num);
orderData = view.findViewById(R.id.tv_date);
rvFood = view.findViewById(R.id.rv_food);
rvBillAmount = view.findViewById(R.id.rv_bill_amount);
mTvTotalAmount = view.findViewById(R.id.tv_total_amount);
checkOutTime = view.findViewById(R.id.tv_checkout_time);
line_food_info = view.findViewById(R.id.line_food_info);
}
List<Food> foodList = MyOrderManage.getInstance().getOrderFoodList();
TableBean.DataBean tableBean = OpenTableContract.getDefault().getTableBean();
// List<Food> foodBeans = new ArrayList<>();
// foodBeans.add(new FoodBean("包子(主項)", 1, 13.54));
// foodBeans.add(new FoodBean("番薯爸爸", 2, 8.0));
// foodBeans.add(new FoodBean("包子(主項)", 3, 37.34));
// foodBeans.add(new FoodBean("測卡很快就酸辣粉十大減肥和思考", 33, 1334.2254));
tableNum.setText(tableBean.getTableName());
people.setText(tableBean.getPeopleNumber() + "");
orderData.setText(tableBean.getCreateTime());
// FoodAdapter foodAdapter = new FoodAdapter(foodBeans);
// rvFood.setLayoutManager(new LinearLayoutManager(context));
// rvFood.setAdapter(foodAdapter);
checkOutTime.setText(TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT));
FoodAdapter foodAdapter = new FoodAdapter(foodList);
rvFood.setLayoutManager(new LinearLayoutManager(context));
rvFood.setAdapter(foodAdapter);
List<BillingBean> billingBeans = new ArrayList<>();
billingBeans.add(new BillingBean("合計", 58.88));
billingBeans.add(new BillingBean("10%服務費", 5.08));
billingBeans.add(new BillingBean("賬單小數", -0.06));
billingBeans.add(new BillingBean("上課交電話費扣水電費可接受的咖啡機", 837248.8829372));
BillAdapter billAdapter = new BillAdapter(billingBeans);
rvBill.setLayoutManager(new LinearLayoutManager(context));
rvBill.setAdapter(billAdapter);
// billingBeans.add(new BillingBean("合計", 58.88));
// billingBeans.add(new BillingBean("10%服務費", 5.08));
// billingBeans.add(new BillingBean("賬單小數", -0.06));
if (billingBeans.size() <= 0) {
line_food_info.setVisibility(View.GONE);
} else {
BillAdapter billAdapter = new BillAdapter(billingBeans);
rvBillAmount.setLayoutManager(new LinearLayoutManager(context));
rvBillAmount.setAdapter(billAdapter);
}
if(OpenTableContract.getDefault().getTableBean() != null) {
tableNum.setText(OpenTableContract.getDefault().getTableBean().getTableName());
people.setText(OpenTableContract.getDefault().getTableBean().getPeopleNumber() + "");
}
if(MyOrderManage.getInstance().getOrderId() != -1){
orderNum.setText(MyOrderManage.getInstance().getOrderId() + "");
}
BigDecimal totalAmount = new BigDecimal(0);
for (Food food : MyOrderManage.getInstance().getOrderFoodList()) {
totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(food.getPrice(), food.getNumber()));
}
//總金額
mTvTotalAmount.setText(totalAmount +"");
//加载条形码
// ImageView ivBarCode = view.findViewById(R.id.iv_bar_code);
// ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150));
......
package com.joe.print.mvp.ui.activity;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.WindowManager;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.database.DaoManager;
import com.gingersoft.gsa.cloud.database.greendao.PrinterDeviceBeanDao;
import com.gingersoft.gsa.cloud.ui.dialog.LoadingDialog;
import com.joe.print.mvp.print.SendPrint;
import am.util.printer.PrintExecutor;
import am.util.printer.PrintSocketHolder;
import am.util.printer.PrinterWriter58mm;
import androidx.annotation.Nullable;
import static com.gingersoft.gsa.cloud.database.DaoManager.getInstance;
/**
* Created by Wyh on 2020/1/7.
*/
public class PrintActivity extends Activity implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener, DialogInterface.OnDismissListener {
private PrintExecutor executor;
private SendPrint maker;
private Dialog dialog;
private String callId;
/**
* 是否打印成功 true:成功
*/
private boolean printStatus = false;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setBackgroundDrawable(null);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
callId = getIntent().getStringExtra("callId");
// if(callId != null){
// PrinterDeviceBeanDao deviceBeanDao = getInstance().getDaoSession().getPrinterDeviceBeanDao();
// }
printOrder(this);
}
public void printOrder(Context context) {
if (dialog != null) {
dialog.dismiss();
}
dialog = LoadingDialog.showNewDialogForLoading(this, "初始化...", false);
dialog.setOnDismissListener(this);
if (executor == null) {
executor = new PrintExecutor("192.168.1.217", 9100, PrinterWriter58mm.TYPE_58);
executor.setOnStateChangedListener(this);
executor.setOnPrintResultListener(this);
}
if (maker == null) {
maker = new SendPrint(context, 255, 560);
}
executor.setIp("192.168.1.217", 9100);
executor.doPrinterRequestAsync(maker);
}
@Override
public void onResult(int errorCode) {
String msg = "";
switch (errorCode) {
case PrintSocketHolder.ERROR_0:
//打印成功
msg = "打印成功";
printStatus = true;
dismiss(msg);
break;
case PrintSocketHolder.ERROR_2:
//创建Socket失败
msg = "連接打印機失敗";
printStatus = false;
dismiss(msg);
break;
case PrintSocketHolder.ERROR_1:
case PrintSocketHolder.ERROR_3:
case PrintSocketHolder.ERROR_4:
case PrintSocketHolder.ERROR_5:
//打印失敗
msg = "打印失敗";
dismiss(msg);
printStatus = false;
break;
default:
break;
}
LoadingDialog.setText(msg);
}
@Override
public void onStateChanged(int state) {
String msg = "";
switch (state) {
case PrintSocketHolder.STATE_0:
case PrintSocketHolder.STATE_1:
//创建Socket连接
msg = "連接打印機...";
break;
case PrintSocketHolder.STATE_2:
case PrintSocketHolder.STATE_3:
//写入测试页面数据
msg = "正在打印...";
break;
case PrintSocketHolder.STATE_4:
msg = "正在關閉...";
dismiss(msg);
break;
}
LoadingDialog.setText(msg);
}
private void dismiss(String msg) {
ToastUtils.show(this, msg);
dialog.dismiss();
//判断是否为CC调用打开本页面
if (callId != null) {
CCResult result;
if (printStatus) {
result = CCResult.success();
} else {
result = CCResult.error("print error");
}
//为确保不管登录成功与否都会调用CC.sendCCResult,在onDestroy方法中调用
CC.sendCCResult(callId, result);
}
finish();
}
@Override
public void onDismiss(DialogInterface dialog) {
finish();
}
}
package com.joe.print.mvp.ui.activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.ui.view.MyEditText;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.joe.print.R;
import com.joe.print.R2;
import com.joe.print.di.component.DaggerPrinterAddComponent;
import com.joe.print.mvp.contract.PrinterAddContract;
import com.joe.print.mvp.presenter.PrinterAddPresenter;
import com.qmuiteam.qmui.widget.QMUITopBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView;
import butterknife.BindViews;
import butterknife.OnClick;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* 新增或編輯打印機
*/
public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implements PrinterAddContract.View, View.OnClickListener {
// EditText ipEdit1, ipEdit2, ipEdit3, ipEdit4;
@BindViews({R2.id.ip_edit_1, R2.id.ip_edit_2, R2.id.ip_edit_3, R2.id.ip_edit_4})
EditText[] ipEdits = new EditText[4];
@BindView(R2.id.add_printer_topbar)
QMUITopBar topBar;
@BindView(R2.id.add_printer_ed_port)
MyEditText etPort;
@BindView(R2.id.print_test)
TextView printTest;
@BindView(R2.id.printer_type)
RadioGroup rgPaperType;
private PrinterDeviceBean printerDeviceBean;
private boolean isEditPrinter = false;//是否是編輯打印機
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerPrinterAddComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.printer_activity_add; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
etPort.getEditText().setInputType(EditorInfo.TYPE_CLASS_NUMBER);
String[] ips = new String[4];
//如果不為空,則是編輯打印機,初始化信息
if (printerDeviceBean != null) {
ips = printerDeviceBean.getIp().split("[.]");
etPort.setText(printerDeviceBean.getPort() + "");
if (printerDeviceBean.getType() == 1) {
rgPaperType.check(R.id.print_paper_size_58);
} else {
rgPaperType.check(R.id.print_paper_size_88);
}
}
//添加監聽
for (int i = 0; i < ipEdits.length; i++) {
MyTextWatcher myTextWatchers = new MyTextWatcher(ipEdits[i]);
ipEdits[i].addTextChangedListener(myTextWatchers);
if (ips.length > i) {
ipEdits[i].setText(ips[i]);
}
}
}
@Override
public void initIntent() {
printerDeviceBean = (PrinterDeviceBean) getIntent().getSerializableExtra("printerInfo");
isEditPrinter = printerDeviceBean != null;
}
@Override
public void initTopBar() {
String title = "添加打印機";
if (isEditPrinter) {
title = "編輯打印機";
}
topBar.setTitle(title);
topBar.addLeftImageButton(R.drawable.icon_back, R.id.iv_left_back).setOnClickListener(v -> finish());
topBar.addRightTextButton("保存", R.id.printer_add).setOnClickListener(this);
}
@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.snackbarText(message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
finish();
}
@OnClick({R2.id.print_test})
@Override
public void onClick(View v) {
if (v.getId() == R.id.print_test) {
//打印測試
startActivity(new Intent(mContext, PrintActivity.class));
} else if (v.getId() == R.id.printer_add) {
//保存打印機信息
StringBuilder ipAddress = new StringBuilder();
for (EditText editText : ipEdits) {
if (editText.getText() == null || editText.getText().toString().equals("")) {
showMessage("請輸入完整的IP地址");
return;
}
ipAddress.append(editText.getText());
ipAddress.append(".");
}
if (etPort.getText() == null || etPort.getText().toString().equals("")) {
showMessage("請輸入端口號");
return;
}
hideKeyBoard();
int paperType = 1;
if (rgPaperType.getCheckedRadioButtonId() != R.id.print_paper_size_58) {
paperType = 2;
}
if (isEditPrinter && printerDeviceBean != null) {
mPresenter.updatePrinterInfo(printerDeviceBean.getId(), GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), etPort.getText().toString(), paperType);
} else {
mPresenter.addPrinter(GsaCloudApplication.getRestaurantId(mContext), ipAddress.substring(0, ipAddress.lastIndexOf(".")), etPort.getText().toString(), paperType);
}
}
}
private void hideKeyBoard() {
//收起鍵盤
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
// 隐藏软键盘
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
}
@Override
public void addPrinterSuccess() {
//添加或編輯打印機成功
showMessage("保存成功");
finish();
}
class MyTextWatcher implements TextWatcher {
public EditText mEditText;
public MyTextWatcher(EditText mEditText) {
super();
this.mEditText = mEditText;
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if (s.length() == 3) {
if (Integer.parseInt(mEditText.getEditableText().toString()) > 255) {
mEditText.setText("255");
}
if (this.mEditText == ipEdits[0]) {
ipEdits[1].requestFocus();
} else if (this.mEditText == ipEdits[1]) {
ipEdits[2].requestFocus();
} else if (this.mEditText == ipEdits[2]) {
ipEdits[3].requestFocus();
}
if (this.mEditText == ipEdits[3]) {
ipEdits[3].setSelection(3);
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
}
}
package com.joe.print.mvp.ui.activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ViewGroup;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.joe.print.R;
import com.joe.print.R2;
import com.joe.print.di.component.DaggerPrintListComponent;
import com.joe.print.mvp.contract.PrintListContract;
import com.joe.print.mvp.model.PrinterManager;
import com.joe.print.mvp.presenter.PrintListPresenter;
import com.joe.print.mvp.ui.adapter.PrinterListAdapter;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.yanzhenjie.recyclerview.SwipeMenuCreator;
import com.yanzhenjie.recyclerview.SwipeMenuItem;
import com.yanzhenjie.recyclerview.SwipeRecyclerView;
import com.yanzhenjie.recyclerview.touch.OnItemMoveListener;
import com.yanzhenjie.recyclerview.touch.OnItemStateChangedListener;
import com.yanzhenjie.recyclerview.widget.DefaultItemDecoration;
import java.util.Collections;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.core.view.ViewCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/16/2020 10:24
* <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 PrinterListActivity extends BaseActivity<PrintListPresenter> implements PrintListContract.View {
@BindView(R2.id.rc_print_list)
SwipeRecyclerView mRvPrintList;
@BindView(R2.id.printer_home_bar)
QMUITopBar topBar;
private PrinterListAdapter printListAdapter;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerPrintListComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.printer_activity_list; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
// mPresenter.getPrinterList(GsaCloudApplication.getRestaurantId(mContext));
}
@Override
protected void onResume() {
super.onResume();
mPresenter.getPrinterList(GsaCloudApplication.getRestaurantId(mContext));
}
/**
* 創建右側刪除按鈕
*/
private SwipeMenuCreator mSwipeMenuCreator = (swipeLeftMenu, swipeRightMenu, position) -> {
int width = getResources().getDimensionPixelSize(R.dimen.dp_70);
// 1. MATCH_PARENT 自适应高度,保持和Item一样高;
// 2. 指定具体的高,比如80;
// 3. WRAP_CONTENT,自身高度,不推荐;
int height = ViewGroup.LayoutParams.MATCH_PARENT;
// 添加右侧的按鈕。
SwipeMenuItem deleteItem = new SwipeMenuItem(mContext).setBackground(
R.color.theme_color)
// .setImage(R.drawable.ic_action_delete)
.setText("刪除")
.setTextColor(Color.WHITE)
.setWidth(width)
.setHeight(height);
swipeRightMenu.addMenuItem(deleteItem);// 添加一个按钮到右侧侧菜单。
};
/**
* Item的拖拽/侧滑删除时,手指状态发生变化监听。
*/
private OnItemStateChangedListener mOnItemStateChangedListener = (viewHolder, actionState) -> {
if (actionState == OnItemStateChangedListener.ACTION_STATE_DRAG) {
// mActionBar.setSubtitle("状态:拖拽");
// // 拖拽的时候背景就透明了,这里我们可以添加一个特殊背景。
viewHolder.itemView.setBackgroundColor(ContextCompat.getColor(mContext, R.color.color_ccc));
} else if (actionState == OnItemStateChangedListener.ACTION_STATE_SWIPE) {
// mActionBar.setSubtitle("状态:滑动删除");
} else if (actionState == OnItemStateChangedListener.ACTION_STATE_IDLE) {
// mActionBar.setSubtitle("状态:手指松开");
// 在手松开的时候还原背景。
ViewCompat.setBackground(viewHolder.itemView,
ContextCompat.getDrawable(mContext, R.color.white));
}
};
@Override
public void initIntent() {
}
@Override
public void initTopBar() {
topBar.setTitle("打印機列表");
topBar.addLeftImageButton(R.drawable.icon_back, R.id.iv_left_back).setOnClickListener(v -> finish());
topBar.addRightTextButton("新增", R.id.printer_add).setOnClickListener(v -> startActivity(new Intent(mContext, PrinterAddActivity.class)));
}
@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.snackbarText(message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
finish();
}
@Override
public void loadPrinterList(List<PrinterDeviceBean> deviceBeans) {
PrinterManager.getPrinterManager().setDeviceBeans(deviceBeans);
printListAdapter = new PrinterListAdapter(deviceBeans);
mRvPrintList.setLayoutManager(new LinearLayoutManager(this));
//分割线
mRvPrintList.addItemDecoration(new DefaultItemDecoration(ContextCompat.getColor(this, R.color.line_color)));
mRvPrintList.setOnItemClickListener((view, adapterPosition) -> {
//打開打印機詳情
Intent intent = new Intent(mContext, PrinterAddActivity.class);
intent.putExtra("printerInfo", deviceBeans.get(adapterPosition));
startActivity(intent);
});
//menu 右侧菜單點擊事件
mRvPrintList.setOnItemMenuClickListener((menuBridge, position) -> {
menuBridge.closeMenu();
// mPresenter.deletePrinter(deviceBeans.get(position).getId() + "");
deviceBeans.remove(position);
printListAdapter.notifyItemRemoved(position);
}); // Item的Menu点击。
mRvPrintList.setSwipeMenuCreator(mSwipeMenuCreator); // 菜单创建器。
mRvPrintList.setOnItemStateChangedListener(mOnItemStateChangedListener); // 监听Item的手指状态,拖拽、侧滑、松开。
mRvPrintList.setLongPressDragEnabled(true); // 长按拖拽,默认关闭。
mRvPrintList.setOnItemMoveListener(new OnItemMoveListener() {
@Override
public boolean onItemMove(RecyclerView.ViewHolder srcHolder, RecyclerView.ViewHolder targetHolder) {
// 不同的ViewType不能拖拽换位置。
if (srcHolder.getItemViewType() != targetHolder.getItemViewType()) return false;
// 真实的Position:通过ViewHolder拿到的position都需要减掉HeadView的数量。
int fromPosition = srcHolder.getAdapterPosition() - mRvPrintList.getHeaderCount();
int toPosition = targetHolder.getAdapterPosition() - mRvPrintList.getHeaderCount();
if (fromPosition < toPosition) {
for (int i = fromPosition; i < toPosition; i++) {
Collections.swap(deviceBeans, i, i + 1);
}
} else {
for (int i = fromPosition; i > toPosition; i--) {
Collections.swap(deviceBeans, i, i - 1);
}
}
printListAdapter.notifyItemMoved(fromPosition, toPosition);
return true;// 返回true表示处理了,返回false表示你没有处理。
}
@Override
public void onItemDismiss(RecyclerView.ViewHolder srcHolder) {
// int adapterPosition = srcHolder.getAdapterPosition();
// int position = adapterPosition - mRvPrintList.getHeaderCount();
}
});// 监听拖拽和侧滑删除,更新UI和数据源。
mRvPrintList.setAdapter(printListAdapter);
}
}
package com.joe.print.adapter;
package com.joe.print.mvp.ui.adapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.joe.print.R;
import com.joe.print.bean.BillingBean;
import com.joe.print.mvp.model.bean.BillingBean;
import java.util.List;
......
package com.joe.print.adapter;
package com.joe.print.mvp.ui.adapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.joe.print.R;
import com.joe.print.bean.FoodBean;
import java.util.List;
......
package com.joe.print.mvp.ui.adapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.joe.print.R;
import java.util.List;
import androidx.annotation.Nullable;
/**
* Created by Wyh on 2020/1/16.
*/
public class PrinterListAdapter extends BaseQuickAdapter<PrinterDeviceBean, BaseViewHolder> {
public PrinterListAdapter(@Nullable List<PrinterDeviceBean> data) {
super(R.layout.printer_item, data);
}
@Override
protected void convert(BaseViewHolder helper, PrinterDeviceBean item) {
helper.setText(R.id.tv_printer_name, item.getIp() +"");
}
}
......@@ -34,7 +34,7 @@
android:text="yan"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_brand_name" />
app:layout_constraintTop_toBottomOf="@id/tv_brand_name" />
<TextView
android:id="@+id/line_restaurant_name"
......@@ -46,7 +46,7 @@
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_restaurant_name" />
app:layout_constraintTop_toBottomOf="@id/tv_restaurant_name" />
<TextView
......@@ -54,11 +54,11 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="餐檯"
android:text="餐檯"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/line_restaurant_name" />
app:layout_constraintTop_toBottomOf="@id/line_restaurant_name" />
<TextView
android:id="@+id/tv_dining_table_number"
......@@ -66,12 +66,11 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="@dimen/dp_5"
android:text="108"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/tv_dining_table_text"
app:layout_constraintLeft_toRightOf="@+id/tv_dining_table_text"
app:layout_constraintTop_toTopOf="@+id/tv_dining_table_text" />
app:layout_constraintBottom_toBottomOf="@id/tv_dining_table_text"
app:layout_constraintLeft_toRightOf="@id/tv_dining_table_text"
app:layout_constraintTop_toTopOf="@id/tv_dining_table_text" />
<TextView
......@@ -83,10 +82,10 @@
android:text="人數:"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/tv_dining_table_text"
app:layout_constraintBottom_toBottomOf="@id/tv_dining_table_text"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_dining_table_text" />
app:layout_constraintTop_toTopOf="@id/tv_dining_table_text" />
<TextView
android:id="@+id/tv_people"
......@@ -94,12 +93,11 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="@dimen/dp_5"
android:text="5"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/tv_people_text"
app:layout_constraintRight_toRightOf="@+id/tv_people_text"
app:layout_constraintTop_toTopOf="@+id/tv_people_text" />
app:layout_constraintBottom_toBottomOf="@id/tv_people_text"
app:layout_constraintLeft_toRightOf="@id/tv_people_text"
app:layout_constraintTop_toTopOf="@id/tv_people_text" />
<TextView
android:id="@+id/tv_order_number_text"
......@@ -109,18 +107,17 @@
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_dining_table_text" />
app:layout_constraintTop_toBottomOf="@id/tv_dining_table_text" />
<TextView
android:id="@+id/tv_order_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="000013"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/tv_order_number_text"
app:layout_constraintLeft_toRightOf="@+id/tv_order_number_text"
app:layout_constraintTop_toTopOf="@+id/tv_order_number_text" />
app:layout_constraintBottom_toBottomOf="@id/tv_order_number_text"
app:layout_constraintLeft_toRightOf="@id/tv_order_number_text"
app:layout_constraintTop_toTopOf="@id/tv_order_number_text" />
<TextView
android:id="@+id/tv_data_text"
......@@ -130,17 +127,16 @@
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_order_number_text" />
app:layout_constraintTop_toBottomOf="@id/tv_order_number_text" />
<TextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2020-01-09 上午 11:16:15"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintLeft_toRightOf="@+id/tv_data_text"
app:layout_constraintTop_toBottomOf="@+id/tv_order_number_text" />
app:layout_constraintLeft_toRightOf="@id/tv_data_text"
app:layout_constraintTop_toBottomOf="@id/tv_order_number_text" />
<TextView
android:id="@+id/line_order_info"
......@@ -150,25 +146,13 @@
android:text="——————————————————————————————————————————————————"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@+id/tv_date" />
app:layout_constraintTop_toBottomOf="@id/tv_date" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_food"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/line_order_info" />
<TextView
android:id="@+id/line_food_false"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:maxLines="1"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintHorizontal_weight="0.4"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/line_food_info"
app:layout_constraintTop_toBottomOf="@+id/rv_food" />
app:layout_constraintTop_toBottomOf="@id/line_order_info" />
<TextView
android:id="@+id/line_food_info"
......@@ -179,9 +163,9 @@
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintHorizontal_weight="0.6"
app:layout_constraintLeft_toRightOf="@+id/line_food_false"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rv_food" />
app:layout_constraintTop_toBottomOf="@id/rv_food"
app:layout_constraintWidth_percent="0.6" />
<androidx.recyclerview.widget.RecyclerView
......@@ -190,7 +174,7 @@
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/line_food_info" />
app:layout_constraintTop_toBottomOf="@id/line_food_info" />
<TextView
android:id="@+id/line_price_info"
......@@ -200,9 +184,9 @@
android:text="——————————————————————————————————————————————————"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="@+id/line_food_info"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rv_bill_amount" />
app:layout_constraintTop_toBottomOf="@id/rv_bill_amount"
app:layout_constraintWidth_percent="0.6" />
<TextView
android:id="@+id/tv_total_amount_text"
......@@ -213,9 +197,21 @@
android:text="總金額:"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/tv_total_amount"
app:layout_constraintRight_toLeftOf="@+id/tv_total_amount"
app:layout_constraintTop_toTopOf="@+id/tv_total_amount" />
app:layout_constraintBottom_toBottomOf="@id/tv_amount"
app:layout_constraintRight_toLeftOf="@id/tv_amount"
app:layout_constraintTop_toTopOf="@id/tv_amount" />
<TextView
android:id="@+id/tv_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="@dimen/dp_5"
android:text="$"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintRight_toLeftOf="@id/tv_total_amount"
app:layout_constraintTop_toBottomOf="@id/line_price_info" />
<TextView
android:id="@+id/tv_total_amount"
......@@ -223,11 +219,12 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="@dimen/dp_5"
android:text="$1231231"
android:text="0"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@id/tv_amount"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/line_price_info" />
app:layout_constraintTop_toTopOf="@id/tv_amount" />
<TextView
android:id="@+id/line_amount_info"
......@@ -237,7 +234,7 @@
android:text="——————————————————————————————————————————————————"
android:textColor="#333"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@+id/tv_total_amount" />
app:layout_constraintTop_toBottomOf="@id/tv_amount" />
<!-- <ImageView-->
<!-- android:id="@+id/iv_qr_code"-->
......@@ -259,7 +256,7 @@
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/line_amount_info" />
app:layout_constraintTop_toBottomOf="@id/line_amount_info" />
<TextView
android:id="@+id/tv_checkout_time"
......@@ -271,7 +268,7 @@
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_thank_you_text" />
app:layout_constraintTop_toBottomOf="@id/tv_thank_you_text" />
<ImageView
android:id="@+id/iv_bar_code"
......@@ -280,7 +277,7 @@
android:layout_marginLeft="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_50"
app:layout_constraintTop_toBottomOf="@+id/tv_checkout_time" />
app:layout_constraintTop_toBottomOf="@id/tv_checkout_time" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
\ No newline at end of file
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.qmuiteam.qmui.widget.QMUITopBar
android:id="@+id/add_printer_topbar"
android:layout_width="match_parent"
android:layout_height="@dimen/head_height" />
<LinearLayout
style="@style/print_add_printer_input_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:text="打印機IP"
android:textColor="@color/normal_color"
android:textSize="@dimen/sp_14"
android:textStyle="bold" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:orientation="horizontal">
<EditText
android:id="@+id/ip_edit_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:hint="0"
android:text="192"
android:inputType="number"
android:maxLength="3"
android:minWidth="@dimen/dp_30"
android:singleLine="true"
android:textColor="@color/normal_color"
android:textCursorDrawable="@null"
android:textSize="15sp">
<requestFocus />
</EditText>
<TextView
android:id="@+id/dot_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="."
android:textColor="#000"
android:textSize="20sp"
android:textStyle="bold" />
<EditText
android:id="@+id/ip_edit_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:hint="0"
android:text="168"
android:inputType="number"
android:maxLength="3"
android:minWidth="@dimen/dp_30"
android:singleLine="true"
android:textColor="@color/normal_color"
android:textCursorDrawable="@null"
android:textSize="15sp" />
<TextView
android:id="@+id/dot_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="."
android:textColor="#000"
android:textSize="20sp"
android:textStyle="bold" />
<EditText
android:id="@+id/ip_edit_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:hint="0"
android:text="125"
android:inputType="number"
android:maxLength="3"
android:minWidth="@dimen/dp_30"
android:singleLine="true"
android:textColor="@color/normal_color"
android:textCursorDrawable="@null"
android:textSize="15sp" />
<TextView
android:id="@+id/dot_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="."
android:textColor="#000"
android:textSize="20sp"
android:textStyle="bold" />
<EditText
android:id="@+id/ip_edit_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:hint="0"
android:text="075"
android:inputType="number"
android:maxLength="3"
android:minWidth="@dimen/dp_30"
android:singleLine="true"
android:textColor="@color/normal_color"
android:textCursorDrawable="@null"
android:textSize="15sp" />
</LinearLayout>
</LinearLayout>
<include layout="@layout/include_dividing_line" />
<LinearLayout
style="@style/print_add_printer_input_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:text="端口號"
android:textColor="@color/normal_color"
android:textSize="@dimen/sp_14"
android:textStyle="bold" />
<com.gingersoft.gsa.cloud.ui.view.MyEditText
android:id="@+id/add_printer_ed_port"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:gravity="center_vertical"
app:ed_MaxLength="6"
app:ed_text="8856"
app:ed_hint="請輸入端口號"
app:ed_hintColor="@color/hint_color"
app:ed_textColor="@color/normal_color"
app:ed_textSize="@dimen/sp_14" />
</LinearLayout>
<include layout="@layout/include_dividing_line" />
<LinearLayout
style="@style/print_add_printer_input_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:text="紙張規格"
android:textColor="@color/normal_color"
android:textSize="@dimen/sp_14"
android:textStyle="bold" />
<RadioGroup
android:id="@+id/printer_type"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:checkedButton="@id/print_paper_size_58"
android:orientation="horizontal">
<RadioButton
android:id="@+id/print_paper_size_58"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="58mm"
android:textColor="@color/normal_color"
android:textSize="@dimen/sp_14" />
<RadioButton
android:id="@+id/print_paper_size_88"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:text="88mm"
android:textColor="@color/normal_color"
android:textSize="@dimen/sp_14" />
</RadioGroup>
</LinearLayout>
<include layout="@layout/include_dividing_line" />
<TextView
android:id="@+id/print_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/printer_add_input_paddingLeft"
android:layout_marginRight="@dimen/printer_add_input_paddingLeft"
android:gravity="center"
android:layout_marginTop="@dimen/dp_30"
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10"
android:background="@drawable/shape_app_btn"
android:text="打印測試"
android:textColor="@color/white"
android:textSize="@dimen/sp_16" />
</LinearLayout>
\ No newline at end of file
<?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="match_parent"
android:orientation="vertical">
<com.qmuiteam.qmui.widget.QMUITopBar
android:id="@+id/printer_home_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/head_height"
android:fitsSystemWindows="true" />
<com.yanzhenjie.recyclerview.SwipeRecyclerView
android:id="@+id/rc_print_list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
\ No newline at end of file
<?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"
android:orientation="vertical">
<TextView
android:id="@+id/tv_printer_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center"
android:padding="@dimen/dp_10"
android:textColor="@color/normal_color"
android:textSize="@dimen/dp_16" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="print_TranslucentTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
</style>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 添加打印機 輸入信息的間距-->
<dimen name="printer_add_input_paddingLeft">@dimen/dp_10</dimen>
<dimen name="printer_add_input_paddingTop">@dimen/dp_20</dimen>
<dimen name="printer_add_input_paddingBottom">@dimen/dp_10</dimen>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>
<item name="printer_add" type="id"/>
</resources>
\ No newline at end of file
......@@ -4,5 +4,19 @@
<item name="android:textColor">#333</item>
<item name="android:textSize">16sp</item>
</style>
<style name="print_TranslucentTheme" parent="Theme.AppCompat">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="print_add_printer_input_style">
<item name="android:gravity">center_vertical</item>
<item name="android:paddingLeft">@dimen/printer_add_input_paddingLeft</item>
<item name="android:paddingTop">@dimen/printer_add_input_paddingTop</item>
<item name="android:paddingBottom">@dimen/printer_add_input_paddingBottom</item>
</style>
</resources>
\ No newline at end of file
package com.joe.print;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}
\ No newline at end of file
......@@ -39,7 +39,8 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation rootProject.ext.dependencies["fastjson"]
//日誌管理
implementation 'com.elvishew:xlog:1.6.1'
implementation rootProject.ext.dependencies["zxing"]
}
package com.gingersoft.gsa.cloud.base.bean;
package com.gingersoft.gsa.cloud.base.common.bean;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-01-02
* 修订历史:2020-01-02
* 描述:
* Created by Wyh on 2020/1/15.
*/
public class BaseRespose {
public class BaseResult {
/**
* success : true
* sysTime : 1577960831043
* sysTime : 1579079565872
* data : 40560
*/
private boolean success;
private String errMsg;
private long sysTime;
private Object data;
public boolean isSuccess() {
return success;
......@@ -27,14 +23,6 @@ public class BaseRespose {
this.success = success;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public long getSysTime() {
return sysTime;
}
......@@ -42,4 +30,12 @@ public class BaseRespose {
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
package com.gingersoft.gsa.cloud.base.bean;
package com.gingersoft.gsa.cloud.base.common.bean;
import com.gingersoft.gsa.cloud.database.bean.Food;
......
package com.gingersoft.gsa.cloud.base.common.bean;
import com.gingersoft.gsa.cloud.database.bean.Food;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Wyh on 2020/1/17.
*/
public class OrderBean {
/**
* id : 40553
* orderNo : gs204650350122922
* status : 0
* totalAmount : 141.0
* totalPoints : 0.0
* createTime : Jan 14, 2020 7:49:50 PM
* orderDetails : [{"id":1621502,"productName":"胡椒排骨涼瓜煲","productId":"4257","price":58,"lunchboxPrice":0,"number":1,"createTime":"Jan 14, 2020 8:00:11 PM","status":0},{"id":1621503,"productName":"海南雞(例牌)","productId":"4258","price":83,"lunchboxPrice":0,"number":1,"createTime":"Jan 14, 2020 8:00:11 PM","status":0}]
*/
private int id;
private String orderNo;
private int status;
private double totalAmount;
private double totalPoints;
private String createTime;
private List<OrderDetailsBean> orderDetails;
public OrderBean() {
}
public OrderBean(int id, String orderNo, int status, String createTime) {
this.id = id;
this.orderNo = orderNo;
this.status = status;
this.createTime = createTime;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public double getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(double totalAmount) {
this.totalAmount = totalAmount;
}
public double getTotalPoints() {
return totalPoints;
}
public void setTotalPoints(double totalPoints) {
this.totalPoints = totalPoints;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public List<OrderDetailsBean> getOrderDetails() {
return orderDetails;
}
public void setOrderDetails(List<OrderDetailsBean> orderDetails) {
this.orderDetails = orderDetails;
}
public static class OrderDetailsBean {
/**
* id : 1621502
* productName : 胡椒排骨涼瓜煲
* productId : 4257
* price : 58.0
* lunchboxPrice : 0.0
* number : 1
* createTime : Jan 14, 2020 8:00:11 PM
* status : 0
*/
private int id;
private String productName;
private String productId;
private double price;
private double lunchboxPrice;
private int number;
private String createTime;
private int status;
private long orderId;
public OrderDetailsBean() {
}
public OrderDetailsBean(String productName, String productId, double price, double lunchboxPrice, int number, long orderId) {
this.productName = productName;
this.productId = productId;
this.price = price;
this.lunchboxPrice = lunchboxPrice;
this.number = number;
this.orderId = orderId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getLunchboxPrice() {
return lunchboxPrice;
}
public void setLunchboxPrice(double lunchboxPrice) {
this.lunchboxPrice = lunchboxPrice;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public long getOrderId() {
return orderId;
}
public void setOrderId(long orderId) {
this.orderId = orderId;
}
}
public static List<OrderDetailsBean> transOrderDetails(List<Food> foods) {
List<OrderDetailsBean> orderDetailsBeans = new ArrayList<>();
for (Food food : foods) {
OrderDetailsBean orderDetailsBean = new OrderDetailsBean(food.getFoodName(), food.getParentId()+ "", food.getPrice(), food.getLunchboxPrice(), food.getNumber(), food.getOrderId());
orderDetailsBeans.add(orderDetailsBean);
}
return orderDetailsBeans;
}
}
package com.gingersoft.gsa.cloud.base.bean;
package com.gingersoft.gsa.cloud.base.common.bean;
import java.util.List;
......@@ -93,6 +93,7 @@ public class TableBean {
*/
private int status;
private int useStatus;
//是否刷新數據
private boolean isRefresh = false;
//開台人數
......@@ -209,5 +210,13 @@ public class TableBean {
public void setStatus(int status) {
this.status = status;
}
public int getUseStatus() {
return useStatus;
}
public void setUseStatus(int useStatus) {
this.useStatus = useStatus;
}
}
}
package com.gingersoft.gsa.cloud.base.mealManage;
package com.gingersoft.gsa.cloud.base.common.bean.mealManage;
import android.app.Activity;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
import com.gingersoft.gsa.cloud.database.bean.Food;
import java.util.ArrayList;
import java.util.List;
......@@ -43,6 +45,8 @@ public class MyOrderManage {
private int sseq = 0;//二级序
private int mseq = 0;//三级序
private OrderBean orderBean;
//食品列表
private List<Food> orderFoodList = new ArrayList<>();
// private List<DatasBean> comboOrders = new ArrayList<>();
// private List<MixOldOrder> MixOldOrders = new ArrayList<>();
......@@ -56,8 +60,32 @@ public class MyOrderManage {
public static final int ADD_OPERAT = 1;
public static final int DELETE_OPERAT = 2;
public int getOrderId(){
if(orderBean != null){
return orderBean.getId();
}
return -1;
}
public String getOrderNo(){
if(orderBean != null){
return orderBean.getOrderNo();
}
return "";
}
public int getOrderStatus(){
if(orderBean != null){
return orderBean.getStatus();
}
return 0;
}
// public void changeNumber(int number) {
public void setOrderBean(OrderBean orderBean) {
this.orderBean = orderBean;
}
// public void changeNumber(int number) {
//
// if (orderFoodList.size() <= 0) {
// return;
......@@ -700,9 +728,9 @@ public class MyOrderManage {
* 设置所有价格相关字段数据
* Qty、Itemtype、Itemno、Advprice、MixGroupDiscPrice字段需提前设置值
*
* @param datasBean
* @param isFuncmoney
* @param Money
// * @param datasBean
// * @param isFuncmoney
// * @param Money
*/
// public void setCalculatePrice(OrderDetail.DatasBean datasBean, boolean isFuncmoney, double Money) {
// double money = 0.00;
......@@ -1148,4 +1176,5 @@ public class MyOrderManage {
public void setAllowAddAutoDiscount(boolean allowAddAutoDiscount) {
this.allowAddAutoDiscount = allowAddAutoDiscount;
}
}
package com.gingersoft.gsa.cloud.base.mealManage;
package com.gingersoft.gsa.cloud.base.common.bean.mealManage;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
/**
* 作者:ELEGANT_BIN
......@@ -19,11 +20,7 @@ public class OpenTableContract {
//記錄訂單信息
//訂單ID
private int orderId ;
public OpenTableContract() {
orderId = -1;
}
// private int orderId ;
public static OpenTableContract getDefault() {
if (sDefaultOpenTableManage == null) {
......@@ -40,11 +37,11 @@ public class OpenTableContract {
this.tableBean = tableBean;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
// public int getOrderId() {
// return orderId;
// }
//
// public void setOrderId(int orderId) {
// this.orderId = orderId;
// }
}
package com.gingersoft.gsa.cloud.base.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
/**
* Created by Wyh on 2020/1/16.
*/
public class JsonUtils {
private static JsonUtils gsonUtils;
public static JsonUtils getInstance() {
if (gsonUtils == null) {
synchronized (JsonUtils.class) {
if (gsonUtils == null) {
gsonUtils = new JsonUtils();
}
}
}
return gsonUtils;
}
/**
* json字符串转换bean对象,异常捕捉
*/
public static <T> T parseObject(String json, Class<T> classOfT) {
try {
if (null == json) {
return null;
}
return JSON.parseObject(json, classOfT);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* object转换List对象,异常捕捉
*/
public static <T> List<T> parseArray(Object object, Class<T> classOfT) {
try {
if (null == object) {
return null;
}
return parseArray(JSONObject.toJSONString(object), classOfT);
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* json字符串转换List对象,异常捕捉
*/
public static <T> List<T> parseArray(String json, Class<T> classOfT) {
try {
if (null == json) {
return null;
}
return JSON.parseArray(json, classOfT);
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String toJson(Object o){
return JSON.toJSONString(o);
}
}
......@@ -250,6 +250,7 @@ public class MoneyUtil {
/**
* 计算总价
* 乘
*
* @param price
* @param number
......@@ -260,4 +261,55 @@ public class MoneyUtil {
BigDecimal b2 = new BigDecimal(number);
return (b1.multiply(b2)).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 计算总价
* 計算和
*
* @param price
* @param number
* @return
*/
public static double sum(double price, double number) {
BigDecimal b1 = new BigDecimal(Double.toString(price));
BigDecimal b2 = new BigDecimal(Double.toString(number));
return b1.add(b2).doubleValue();
}
/**
* 计算总价
* 計算和
*
* @param price
* @param price2
* @return
*/
public static BigDecimal sum(BigDecimal price, double price2) {
BigDecimal b2 = new BigDecimal(Double.toString(price2));
return price.add(b2);
}
/**
* 計算差
*
* @param v1
* @param v2
* @return
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 食品总价保留两位
*
* @param totalPrice
* @return
*/
public static double totalFoodPrice(double totalPrice) {
BigDecimal b = new BigDecimal(totalPrice);
return b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
......@@ -4,6 +4,8 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
/**
* @ClassName: TimeUtils
......@@ -14,6 +16,27 @@ public class TimeUtils {
public static final SimpleDateFormat DATE_FORMAT_DATE = new SimpleDateFormat("yyyy-MM-dd");
public static final SimpleDateFormat DATE_FORMAT_DATE1 = new SimpleDateFormat(
"HH:mm");
/**
* 时间日期格式化到年月日.
*/
public static String dateFormatYMD = "yyyy-MM-dd";
/**
* 时分秒.
*/
public static String dateFormatHMS = "HH:mm:ss";
/**
* 时分.
*/
public static String dateFormatHM = "HH:mm";
/**
* 上午/下午时分
*/
public static String dateFormatAHM = "aHH:mm";
public static String dateFormatYMDE = "yyyy/MM/dd E";
public static String dateFormatYMD2 = "yyyy/MM/dd";
private TimeUtils() {
throw new AssertionError();
......@@ -246,4 +269,76 @@ public class TimeUtils {
SimpleDateFormat format = new SimpleDateFormat(yearTimeFormat);
return format.format(new Date(time));
}
/**
* 描述:获取milliseconds表示的日期时间的字符串.
*
* @param format 格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
* @return String 日期时间字符串
*/
public static String getStringByFormat(long milliseconds, String format) {
String thisDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
thisDateTime = mSimpleDateFormat.format(milliseconds);
} catch (Exception e) {
e.printStackTrace();
}
return thisDateTime;
}
/**
* 描述:获取表示当前日期时间的字符串.
*
* @param format 格式化字符串,如:"yyyy-MM-dd HH:mm:ss"
* @return String String类型的当前日期时间
*/
public static String getCurrentDate(String format) {
String curDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
Calendar c = new GregorianCalendar();
curDateTime = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return curDateTime;
}
/**
* 区分白天还是夜晚
*
* @param time
* @return
*/
public static boolean getDuringOrNight(String time) {
String before = formatDate(time, "yyyy-MM-dd HH:mm:ss", "HH");
int k = Integer.parseInt(before);
if ((k >= 0 && k < 6) || (k >= 18 && k < 24)) {
return true;
} else {
return false;
}
}
/***
* from yyyy-MM-dd HH:mm:ss to MM-dd HH:mm
* @param before 之前的时间
* @param beforeformat 之前的时间格式
* @param afterformat 之后的时间格式
* @return
*/
public static String formatDate(String before, String beforeformat, String afterformat) {
String after;
try {
Date date = new SimpleDateFormat(beforeformat, Locale.getDefault())
.parse(before);
after = new SimpleDateFormat(afterformat, Locale.getDefault()).format(date);
} catch (ParseException e) {
return before;
}
return after;
}
}
package com.joe.print.utils;
package com.gingersoft.gsa.cloud.base.utils.view;
import android.graphics.Bitmap;
......
package com.joe.print.utils;
package com.gingersoft.gsa.cloud.base.utils.view;
import android.graphics.Bitmap;
import android.graphics.Canvas;
......
package com.joe.print;
package com.gingersoft.gsa.cloud.base.utils.view;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.os.Environment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.widget.ScrollView;
......
package com.joe.print.utils;
package com.gingersoft.gsa.cloud.base.utils.view;
import android.graphics.Bitmap;
import android.graphics.Canvas;
......
package com.gingersoft.gsa.cloud.base.utils;
package com.gingersoft.gsa.cloud.base.utils.view;
/**
* 作者:ELEGANT_BIN
......
......@@ -3,7 +3,7 @@
<string name="base_loading">加載中...</string>
<string name="currency_unit">$</string>
<string name="Key_0">0</string>
<string name="Key_1">1</string>
<string name="Key_2">2</string>
......
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
\ No newline at end of file
......@@ -32,18 +32,15 @@ public class DaoManager {
*
* @return
*/
public static DaoManager getInstance()
{
public static DaoManager getInstance() {
return manager;
}
private DaoManager()
{
private DaoManager() {
setDebug();
}
public void init(Context context)
{
public void init(Context context) {
this.context = context;
}
......@@ -52,10 +49,8 @@ public class DaoManager {
*
* @return
*/
public DaoMaster getDaoMaster()
{
if (sDaoMaster == null)
{
public DaoMaster getDaoMaster() {
if (sDaoMaster == null) {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
sDaoMaster = new DaoMaster(helper.getWritableDatabase());
}
......@@ -67,12 +62,9 @@ public class DaoManager {
*
* @return
*/
public DaoSession getDaoSession()
{
if (sDaoSession == null)
{
if (sDaoMaster == null)
{
public DaoSession getDaoSession() {
if (sDaoSession == null) {
if (sDaoMaster == null) {
sDaoMaster = getDaoMaster();
}
sDaoSession = sDaoMaster.newSession();
......@@ -83,10 +75,8 @@ public class DaoManager {
/**
* 打开输出日志,默认关闭
*/
public void setDebug()
{
if (BuildConfig.DEBUG)
{
public void setDebug() {
if (BuildConfig.DEBUG) {
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
}
......@@ -95,25 +85,20 @@ public class DaoManager {
/**
* 关闭所有的操作,数据库开启后,使用完毕要关闭
*/
public void closeConnection()
{
public void closeConnection() {
closeHelper();
closeDaoSession();
}
public void closeHelper()
{
if (sHelper != null)
{
public void closeHelper() {
if (sHelper != null) {
sHelper.close();
sHelper = null;
}
}
public void closeDaoSession()
{
if (sDaoSession != null)
{
public void closeDaoSession() {
if (sDaoSession != null) {
sDaoSession.clear();
sDaoSession = null;
}
......
......@@ -3,8 +3,8 @@ package com.gingersoft.gsa.cloud.database.bean;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.NotNull;
import org.greenrobot.greendao.annotation.Transient;
import org.jetbrains.annotations.NotNull;
/**
* 作者:ELEGANT_BIN
......@@ -19,16 +19,18 @@ public class Food {
@Id(autoincrement = true)
private Long id;
private long orderId;
@NotNull
private int parentId;
private String foodName;
private int restaurantId;
private double price;
private int totalSold;
private int isSold;
private String plu;
private double lunchboxPrice;
/**
* 自定義字段
*/
......@@ -41,7 +43,7 @@ public class Food {
@Transient
private int myIndex = 0;
@Transient
private boolean isNew = true;
private boolean isNew = true;//是否是新添加的食品(未送單)
@Transient
private boolean visible = true;
......@@ -50,18 +52,14 @@ public class Food {
public Food() {
}
@Generated(hash = 278629678)
public Food(Long id, int parentId, String foodName, int restaurantId,
double price, int totalSold, int isSold, String plu) {
public Food(Long id, int parentId, String foodName, double price, int number, boolean visible, double lunchboxPrice) {
this.id = id;
this.parentId = parentId;
this.foodName = foodName;
this.restaurantId = restaurantId;
this.price = price;
this.totalSold = totalSold;
this.isSold = isSold;
this.plu = plu;
this.number = number;
this.visible = visible;
this.lunchboxPrice = lunchboxPrice;
}
public Food(Food addFood) {
......@@ -76,6 +74,37 @@ public class Food {
this.number = 1;
}
@Generated(hash = 55791116)
public Food(Long id, long orderId, int parentId, String foodName, int restaurantId, double price, int totalSold,
int isSold, String plu, double lunchboxPrice) {
this.id = id;
this.orderId = orderId;
this.parentId = parentId;
this.foodName = foodName;
this.restaurantId = restaurantId;
this.price = price;
this.totalSold = totalSold;
this.isSold = isSold;
this.plu = plu;
this.lunchboxPrice = lunchboxPrice;
}
public double getLunchboxPrice() {
return lunchboxPrice;
}
public void setLunchboxPrice(double lunchboxPrice) {
this.lunchboxPrice = lunchboxPrice;
}
public long getOrderId() {
return orderId;
}
public void setOrderId(long orderId) {
this.orderId = orderId;
}
public boolean isSelected() {
return isSelected;
}
......
package com.gingersoft.gsa.cloud.database.bean;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
import java.io.Serializable;
/**
* Created by Wyh on 2020/1/17.
*/
@Entity
public class PrinterDeviceBean implements Serializable {
private static final long serialVersionUID = 4583366043598445115L;
private int id;
@Property(nameInDb = "_id")
@Id(autoincrement = true)
private Long dbid;
private int restaurantId;
private String ip;
private int port;
private int type;
@Generated(hash = 626885316)
public PrinterDeviceBean() {
}
@Generated(hash = 922136225)
public PrinterDeviceBean(int id, Long dbid, int restaurantId, String ip, int port,
int type) {
this.id = id;
this.dbid = dbid;
this.restaurantId = restaurantId;
this.ip = ip;
this.port = port;
this.type = type;
}
public PrinterDeviceBean(int id, int restaurantId, String ip, int port, int type) {
this.id = id;
this.restaurantId = restaurantId;
this.ip = ip;
this.port = port;
this.type = type;
}
public PrinterDeviceBean(int restaurantId, String ip, int port, int type) {
this.restaurantId = restaurantId;
this.ip = ip;
this.port = port;
this.type = type;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public Long getDbid() {
return this.dbid;
}
public void setDbid(Long dbid) {
this.dbid = dbid;
}
public int getRestaurantId() {
return this.restaurantId;
}
public void setRestaurantId(int restaurantId) {
this.restaurantId = restaurantId;
}
public String getIp() {
return this.ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPort() {
return this.port;
}
public void setPort(int port) {
this.port = port;
}
public int getType() {
return this.type;
}
public void setType(int type) {
this.type = type;
}
}
......@@ -23,12 +23,14 @@ public class DaoMaster extends AbstractDaoMaster {
public static void createAllTables(Database db, boolean ifNotExists) {
FoodDao.createTable(db, ifNotExists);
FunctionDao.createTable(db, ifNotExists);
PrinterDeviceBeanDao.createTable(db, ifNotExists);
}
/** Drops underlying database table using DAOs. */
public static void dropAllTables(Database db, boolean ifExists) {
FoodDao.dropTable(db, ifExists);
FunctionDao.dropTable(db, ifExists);
PrinterDeviceBeanDao.dropTable(db, ifExists);
}
/**
......@@ -49,6 +51,7 @@ public class DaoMaster extends AbstractDaoMaster {
super(db, SCHEMA_VERSION);
registerDaoClass(FoodDao.class);
registerDaoClass(FunctionDao.class);
registerDaoClass(PrinterDeviceBeanDao.class);
}
public DaoSession newSession() {
......
......@@ -10,9 +10,11 @@ import org.greenrobot.greendao.internal.DaoConfig;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.database.greendao.FoodDao;
import com.gingersoft.gsa.cloud.database.greendao.FunctionDao;
import com.gingersoft.gsa.cloud.database.greendao.PrinterDeviceBeanDao;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
......@@ -25,9 +27,11 @@ public class DaoSession extends AbstractDaoSession {
private final DaoConfig foodDaoConfig;
private final DaoConfig functionDaoConfig;
private final DaoConfig printerDeviceBeanDaoConfig;
private final FoodDao foodDao;
private final FunctionDao functionDao;
private final PrinterDeviceBeanDao printerDeviceBeanDao;
public DaoSession(Database db, IdentityScopeType type, Map<Class<? extends AbstractDao<?, ?>>, DaoConfig>
daoConfigMap) {
......@@ -39,16 +43,22 @@ public class DaoSession extends AbstractDaoSession {
functionDaoConfig = daoConfigMap.get(FunctionDao.class).clone();
functionDaoConfig.initIdentityScope(type);
printerDeviceBeanDaoConfig = daoConfigMap.get(PrinterDeviceBeanDao.class).clone();
printerDeviceBeanDaoConfig.initIdentityScope(type);
foodDao = new FoodDao(foodDaoConfig, this);
functionDao = new FunctionDao(functionDaoConfig, this);
printerDeviceBeanDao = new PrinterDeviceBeanDao(printerDeviceBeanDaoConfig, this);
registerDao(Food.class, foodDao);
registerDao(Function.class, functionDao);
registerDao(PrinterDeviceBean.class, printerDeviceBeanDao);
}
public void clear() {
foodDaoConfig.clearIdentityScope();
functionDaoConfig.clearIdentityScope();
printerDeviceBeanDaoConfig.clearIdentityScope();
}
public FoodDao getFoodDao() {
......@@ -59,4 +69,8 @@ public class DaoSession extends AbstractDaoSession {
return functionDao;
}
public PrinterDeviceBeanDao getPrinterDeviceBeanDao() {
return printerDeviceBeanDao;
}
}
......@@ -25,13 +25,15 @@ public class FoodDao extends AbstractDao<Food, Long> {
*/
public static class Properties {
public final static Property Id = new Property(0, Long.class, "id", true, "_id");
public final static Property ParentId = new Property(1, int.class, "parentId", false, "PARENT_ID");
public final static Property FoodName = new Property(2, String.class, "foodName", false, "FOOD_NAME");
public final static Property RestaurantId = new Property(3, int.class, "restaurantId", false, "RESTAURANT_ID");
public final static Property Price = new Property(4, double.class, "price", false, "PRICE");
public final static Property TotalSold = new Property(5, int.class, "totalSold", false, "TOTAL_SOLD");
public final static Property IsSold = new Property(6, int.class, "isSold", false, "IS_SOLD");
public final static Property Plu = new Property(7, String.class, "plu", false, "PLU");
public final static Property OrderId = new Property(1, long.class, "orderId", false, "ORDER_ID");
public final static Property ParentId = new Property(2, int.class, "parentId", false, "PARENT_ID");
public final static Property FoodName = new Property(3, String.class, "foodName", false, "FOOD_NAME");
public final static Property RestaurantId = new Property(4, int.class, "restaurantId", false, "RESTAURANT_ID");
public final static Property Price = new Property(5, double.class, "price", false, "PRICE");
public final static Property TotalSold = new Property(6, int.class, "totalSold", false, "TOTAL_SOLD");
public final static Property IsSold = new Property(7, int.class, "isSold", false, "IS_SOLD");
public final static Property Plu = new Property(8, String.class, "plu", false, "PLU");
public final static Property LunchboxPrice = new Property(9, double.class, "lunchboxPrice", false, "LUNCHBOX_PRICE");
}
......@@ -48,13 +50,15 @@ public class FoodDao extends AbstractDao<Food, Long> {
String constraint = ifNotExists? "IF NOT EXISTS ": "";
db.execSQL("CREATE TABLE " + constraint + "\"FOOD\" (" + //
"\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
"\"PARENT_ID\" INTEGER NOT NULL ," + // 1: parentId
"\"FOOD_NAME\" TEXT," + // 2: foodName
"\"RESTAURANT_ID\" INTEGER NOT NULL ," + // 3: restaurantId
"\"PRICE\" REAL NOT NULL ," + // 4: price
"\"TOTAL_SOLD\" INTEGER NOT NULL ," + // 5: totalSold
"\"IS_SOLD\" INTEGER NOT NULL ," + // 6: isSold
"\"PLU\" TEXT);"); // 7: plu
"\"ORDER_ID\" INTEGER NOT NULL ," + // 1: orderId
"\"PARENT_ID\" INTEGER NOT NULL ," + // 2: parentId
"\"FOOD_NAME\" TEXT," + // 3: foodName
"\"RESTAURANT_ID\" INTEGER NOT NULL ," + // 4: restaurantId
"\"PRICE\" REAL NOT NULL ," + // 5: price
"\"TOTAL_SOLD\" INTEGER NOT NULL ," + // 6: totalSold
"\"IS_SOLD\" INTEGER NOT NULL ," + // 7: isSold
"\"PLU\" TEXT," + // 8: plu
"\"LUNCHBOX_PRICE\" REAL NOT NULL );"); // 9: lunchboxPrice
}
/** Drops the underlying database table. */
......@@ -71,21 +75,23 @@ public class FoodDao extends AbstractDao<Food, Long> {
if (id != null) {
stmt.bindLong(1, id);
}
stmt.bindLong(2, entity.getParentId());
stmt.bindLong(2, entity.getOrderId());
stmt.bindLong(3, entity.getParentId());
String foodName = entity.getFoodName();
if (foodName != null) {
stmt.bindString(3, foodName);
stmt.bindString(4, foodName);
}
stmt.bindLong(4, entity.getRestaurantId());
stmt.bindDouble(5, entity.getPrice());
stmt.bindLong(6, entity.getTotalSold());
stmt.bindLong(7, entity.getIsSold());
stmt.bindLong(5, entity.getRestaurantId());
stmt.bindDouble(6, entity.getPrice());
stmt.bindLong(7, entity.getTotalSold());
stmt.bindLong(8, entity.getIsSold());
String plu = entity.getPlu();
if (plu != null) {
stmt.bindString(8, plu);
stmt.bindString(9, plu);
}
stmt.bindDouble(10, entity.getLunchboxPrice());
}
@Override
......@@ -96,21 +102,23 @@ public class FoodDao extends AbstractDao<Food, Long> {
if (id != null) {
stmt.bindLong(1, id);
}
stmt.bindLong(2, entity.getParentId());
stmt.bindLong(2, entity.getOrderId());
stmt.bindLong(3, entity.getParentId());
String foodName = entity.getFoodName();
if (foodName != null) {
stmt.bindString(3, foodName);
stmt.bindString(4, foodName);
}
stmt.bindLong(4, entity.getRestaurantId());
stmt.bindDouble(5, entity.getPrice());
stmt.bindLong(6, entity.getTotalSold());
stmt.bindLong(7, entity.getIsSold());
stmt.bindLong(5, entity.getRestaurantId());
stmt.bindDouble(6, entity.getPrice());
stmt.bindLong(7, entity.getTotalSold());
stmt.bindLong(8, entity.getIsSold());
String plu = entity.getPlu();
if (plu != null) {
stmt.bindString(8, plu);
stmt.bindString(9, plu);
}
stmt.bindDouble(10, entity.getLunchboxPrice());
}
@Override
......@@ -122,13 +130,15 @@ public class FoodDao extends AbstractDao<Food, Long> {
public Food readEntity(Cursor cursor, int offset) {
Food entity = new Food( //
cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
cursor.getInt(offset + 1), // parentId
cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // foodName
cursor.getInt(offset + 3), // restaurantId
cursor.getDouble(offset + 4), // price
cursor.getInt(offset + 5), // totalSold
cursor.getInt(offset + 6), // isSold
cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7) // plu
cursor.getLong(offset + 1), // orderId
cursor.getInt(offset + 2), // parentId
cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // foodName
cursor.getInt(offset + 4), // restaurantId
cursor.getDouble(offset + 5), // price
cursor.getInt(offset + 6), // totalSold
cursor.getInt(offset + 7), // isSold
cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // plu
cursor.getDouble(offset + 9) // lunchboxPrice
);
return entity;
}
......@@ -136,13 +146,15 @@ public class FoodDao extends AbstractDao<Food, Long> {
@Override
public void readEntity(Cursor cursor, Food entity, int offset) {
entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
entity.setParentId(cursor.getInt(offset + 1));
entity.setFoodName(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
entity.setRestaurantId(cursor.getInt(offset + 3));
entity.setPrice(cursor.getDouble(offset + 4));
entity.setTotalSold(cursor.getInt(offset + 5));
entity.setIsSold(cursor.getInt(offset + 6));
entity.setPlu(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7));
entity.setOrderId(cursor.getLong(offset + 1));
entity.setParentId(cursor.getInt(offset + 2));
entity.setFoodName(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
entity.setRestaurantId(cursor.getInt(offset + 4));
entity.setPrice(cursor.getDouble(offset + 5));
entity.setTotalSold(cursor.getInt(offset + 6));
entity.setIsSold(cursor.getInt(offset + 7));
entity.setPlu(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8));
entity.setLunchboxPrice(cursor.getDouble(offset + 9));
}
@Override
......
package com.gingersoft.gsa.cloud.database.greendao;
import android.database.Cursor;
import android.database.sqlite.SQLiteStatement;
import org.greenrobot.greendao.AbstractDao;
import org.greenrobot.greendao.Property;
import org.greenrobot.greendao.internal.DaoConfig;
import org.greenrobot.greendao.database.Database;
import org.greenrobot.greendao.database.DatabaseStatement;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/**
* DAO for table "PRINTER_DEVICE_BEAN".
*/
public class PrinterDeviceBeanDao extends AbstractDao<PrinterDeviceBean, Long> {
public static final String TABLENAME = "PRINTER_DEVICE_BEAN";
/**
* Properties of entity PrinterDeviceBean.<br/>
* Can be used for QueryBuilder and for referencing column names.
*/
public static class Properties {
public final static Property Id = new Property(0, int.class, "id", false, "ID");
public final static Property Dbid = new Property(1, Long.class, "dbid", true, "_id");
public final static Property RestaurantId = new Property(2, int.class, "restaurantId", false, "RESTAURANT_ID");
public final static Property Ip = new Property(3, String.class, "ip", false, "IP");
public final static Property Port = new Property(4, int.class, "port", false, "PORT");
public final static Property Type = new Property(5, int.class, "type", false, "TYPE");
}
public PrinterDeviceBeanDao(DaoConfig config) {
super(config);
}
public PrinterDeviceBeanDao(DaoConfig config, DaoSession daoSession) {
super(config, daoSession);
}
/** Creates the underlying database table. */
public static void createTable(Database db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": "";
db.execSQL("CREATE TABLE " + constraint + "\"PRINTER_DEVICE_BEAN\" (" + //
"\"ID\" INTEGER NOT NULL ," + // 0: id
"\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 1: dbid
"\"RESTAURANT_ID\" INTEGER NOT NULL ," + // 2: restaurantId
"\"IP\" TEXT," + // 3: ip
"\"PORT\" INTEGER NOT NULL ," + // 4: port
"\"TYPE\" INTEGER NOT NULL );"); // 5: type
}
/** Drops the underlying database table. */
public static void dropTable(Database db, boolean ifExists) {
String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"PRINTER_DEVICE_BEAN\"";
db.execSQL(sql);
}
@Override
protected final void bindValues(DatabaseStatement stmt, PrinterDeviceBean entity) {
stmt.clearBindings();
stmt.bindLong(1, entity.getId());
Long dbid = entity.getDbid();
if (dbid != null) {
stmt.bindLong(2, dbid);
}
stmt.bindLong(3, entity.getRestaurantId());
String ip = entity.getIp();
if (ip != null) {
stmt.bindString(4, ip);
}
stmt.bindLong(5, entity.getPort());
stmt.bindLong(6, entity.getType());
}
@Override
protected final void bindValues(SQLiteStatement stmt, PrinterDeviceBean entity) {
stmt.clearBindings();
stmt.bindLong(1, entity.getId());
Long dbid = entity.getDbid();
if (dbid != null) {
stmt.bindLong(2, dbid);
}
stmt.bindLong(3, entity.getRestaurantId());
String ip = entity.getIp();
if (ip != null) {
stmt.bindString(4, ip);
}
stmt.bindLong(5, entity.getPort());
stmt.bindLong(6, entity.getType());
}
@Override
public Long readKey(Cursor cursor, int offset) {
return cursor.isNull(offset + 1) ? null : cursor.getLong(offset + 1);
}
@Override
public PrinterDeviceBean readEntity(Cursor cursor, int offset) {
PrinterDeviceBean entity = new PrinterDeviceBean( //
cursor.getInt(offset + 0), // id
cursor.isNull(offset + 1) ? null : cursor.getLong(offset + 1), // dbid
cursor.getInt(offset + 2), // restaurantId
cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // ip
cursor.getInt(offset + 4), // port
cursor.getInt(offset + 5) // type
);
return entity;
}
@Override
public void readEntity(Cursor cursor, PrinterDeviceBean entity, int offset) {
entity.setId(cursor.getInt(offset + 0));
entity.setDbid(cursor.isNull(offset + 1) ? null : cursor.getLong(offset + 1));
entity.setRestaurantId(cursor.getInt(offset + 2));
entity.setIp(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
entity.setPort(cursor.getInt(offset + 4));
entity.setType(cursor.getInt(offset + 5));
}
@Override
protected final Long updateKeyAfterInsert(PrinterDeviceBean entity, long rowId) {
entity.setDbid(rowId);
return rowId;
}
@Override
public Long getKey(PrinterDeviceBean entity) {
if(entity != null) {
return entity.getDbid();
} else {
return null;
}
}
@Override
public boolean hasKey(PrinterDeviceBean entity) {
return entity.getDbid() != null;
}
@Override
protected final boolean isEntityUpdateable() {
return true;
}
}
//package com.gingersoft.gsa.cloud.database.utils;
//
//import android.content.Context;
//import android.util.Log;
//
//import com.gingersoft.gsa.cloud.database.DaoManager;
//import com.gingersoft.gsa.cloud.database.greendao.FunctionDao;
//
///**
// * Created by Wyh on 2020/1/17.
// */
//public class CommonDaoUtils<T, K> {
//
// private final String TAG = this.getClass().getSimpleName();
// private DaoManager mManager;
//
// public CommonDaoUtils(Context context) {
// mManager = DaoManager.getInstance();
// mManager.init(context);
// }
//
//
// /**
// * 完成Function记录的插入,如果表未创建,先创建Function表
// * @return
// */
// public boolean insertFunction(T entity){
// boolean flag = false;
// flag = mManager.getDaoSession().getFunctionDao().insert(entity) == -1 ? false : true;
// Log.i(TAG, "insert function :" + flag + "-->" + function.toString());
// return flag;
// }
//
// /**
// * 插入多条数据,在子线程操作
// * @param functionList
// * @return
// */
// public boolean insertMultFunction(final List<Function> functionList) {
// boolean flag = false;
// try {
// mManager.getDaoSession().runInTx(new Runnable() {
// @Override
// public void run() {
// for (Function Function : functionList) {
// mManager.getDaoSession().insertOrReplace(Function);
// }
// }
// });
// flag = true;
// } catch (Exception e) {
// e.printStackTrace();
// }
// return flag;
// }
//
// /**
// * 修改一条数据
// * @param function
// * @return
// */
// public boolean updateFunction(Function function){
// boolean flag = false;
// try {
// mManager.getDaoSession().update(function);
// flag = true;
// }catch (Exception e){
// e.printStackTrace();
// }
// return flag;
// }
//
// /**
// * 删除单条记录
// * @param function
// * @return
// */
// public boolean deleteFunction(Function function){
// boolean flag = false;
// try {
// //按照id删除
// mManager.getDaoSession().delete(function);
// flag = true;
// }catch (Exception e){
// e.printStackTrace();
// }
// return flag;
// }
//
// /**
// * 删除所有记录
// * @return
// */
// public boolean deleteAll(){
// boolean flag = false;
// try {
// //按照id删除
// mManager.getDaoSession().deleteAll(Function.class);
// flag = true;
// }catch (Exception e){
// e.printStackTrace();
// }
// return flag;
// }
//
// /**
// * 查询所有记录
// * @return
// */
// public List<Function> queryAllFunction(){
// return mManager.getDaoSession().loadAll(Function.class);
// }
//
// /**
// * 根据主键id查询记录
// * @param key
// * @return
// */
// public Function queryFunctionById(long key){
// return mManager.getDaoSession().load(Function.class, key);
// }
//
// /**
// * 使用native sql进行查询操作
// */
// public List<Function> queryFunctionByNativeSql(String sql, String[] conditions){
// return mManager.getDaoSession().queryRaw(Function.class, sql, conditions);
// }
//
// /**
// * 使用queryBuilder进行查询
// * @return
// */
// public List<Function> queryFunctionByQueryBuilder(long FunctionId){
// QueryBuilder<Function> queryBuilder = mManager.getDaoSession().queryBuilder(Function.class);
// return queryBuilder.where(FunctionDao.Properties.Id.eq(FunctionId)).list();
//// return queryBuilder.where(FunctionDao.Properties._id.ge(id)).list();
// }
//
//}
//package com.gingersoft.gsa.cloud.database.utils;
//
//import android.content.Context;
//import android.util.Log;
//
//import com.gingersoft.gsa.cloud.database.DaoManager;
//import com.gingersoft.gsa.cloud.database.greendao.FunctionDao;
//
//import org.greenrobot.greendao.AbstractDao;
//
///**
// * Created by Wyh on 2020/1/17.
// */
//public class PrinterDeviceDaoUtils {
//
// private static final String TAG = FunctionDaoUtils.class.getSimpleName();
// private DaoManager mManager;
//
// public PrinterDeviceDaoUtils(Context context) {
// mManager = DaoManager.getInstance();
// mManager.init(context);
// }
//
//
// /**
// * 完成Function记录的插入,如果表未创建,先创建Function表
// * @return
// */
// public boolean insertFunction(AbstractDao entity){
// boolean flag = false;
// flag = mManager.getDaoSession().getFunctionDao().insert(function) == -1 ? false : true;
// Log.i(TAG, "insert function :" + flag + "-->" + function.toString());
// return flag;
// }
//
// /**
// * 插入多条数据,在子线程操作
// * @param functionList
// * @return
// */
// public boolean insertMultFunction(final List<Function> functionList) {
// boolean flag = false;
// try {
// mManager.getDaoSession().runInTx(new Runnable() {
// @Override
// public void run() {
// for (Function Function : functionList) {
// mManager.getDaoSession().insertOrReplace(Function);
// }
// }
// });
// flag = true;
// } catch (Exception e) {
// e.printStackTrace();
// }
// return flag;
// }
//
// /**
// * 修改一条数据
// * @param function
// * @return
// */
// public boolean updateFunction(Function function){
// boolean flag = false;
// try {
// mManager.getDaoSession().update(function);
// flag = true;
// }catch (Exception e){
// e.printStackTrace();
// }
// return flag;
// }
//
// /**
// * 删除单条记录
// * @param function
// * @return
// */
// public boolean deleteFunction(Function function){
// boolean flag = false;
// try {
// //按照id删除
// mManager.getDaoSession().delete(function);
// flag = true;
// }catch (Exception e){
// e.printStackTrace();
// }
// return flag;
// }
//
// /**
// * 删除所有记录
// * @return
// */
// public boolean deleteAll(){
// boolean flag = false;
// try {
// //按照id删除
// mManager.getDaoSession().deleteAll(Function.class);
// flag = true;
// }catch (Exception e){
// e.printStackTrace();
// }
// return flag;
// }
//
// /**
// * 查询所有记录
// * @return
// */
// public List<Function> queryAllFunction(){
// return mManager.getDaoSession().loadAll(Function.class);
// }
//
// /**
// * 根据主键id查询记录
// * @param key
// * @return
// */
// public Function queryFunctionById(long key){
// return mManager.getDaoSession().load(Function.class, key);
// }
//
// /**
// * 使用native sql进行查询操作
// */
// public List<Function> queryFunctionByNativeSql(String sql, String[] conditions){
// return mManager.getDaoSession().queryRaw(Function.class, sql, conditions);
// }
//
// /**
// * 使用queryBuilder进行查询
// * @return
// */
// public List<Function> queryFunctionByQueryBuilder(long FunctionId){
// QueryBuilder<Function> queryBuilder = mManager.getDaoSession().queryBuilder(Function.class);
// return queryBuilder.where(FunctionDao.Properties.Id.eq(FunctionId)).list();
//// return queryBuilder.where(FunctionDao.Properties._id.ge(id)).list();
// }
//
//
//}
......@@ -71,7 +71,7 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler {
msg = msg.substring(max_str_length);
}
//剩余部分
LogUtil.e(TAG, msg);
// LogUtil.e(TAG, msg);
}
......
ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为library编译,否则别的组件依赖此module时会报错
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'com.jakewharton.butterknife'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
......
package com.gingersoft.gsa.cloud.ui.adapter;
import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.gingersoft.gsa.cloud.ui.R;
import com.gingersoft.gsa.cloud.ui.R2;
import com.gingersoft.gsa.cloud.ui.bean.TagViewBean;
import com.gingersoft.gsa.cloud.ui.widget.RoundButton;
import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.utils.ArmsUtils;
import java.util.List;
import butterknife.BindView;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2018/11/27
* 修订历史:2018/11/27
* 描述:
*/
public class SkyorderMealKindAdapter extends DefaultAdapter<TagViewBean> {
private Context mContext;
private int mCurrentSelectedTagId;
private boolean firstInit = true;
//默认选中那一个
private int defaultCheckedIndex = -1;
//一行多少个
private int colCount = 3;
//每个Item的宽度
private int itemWidth = 0;
//每个Item的高度
private int itemHegiht = 0;
//显示布局的宽度
private int showLayoutWidth;
public SkyorderMealKindAdapter(Context context, List<TagViewBean> infos) {
super(infos);
this.mContext = context;
}
@Override
public int getItemCount() {
return mInfos.size();
}
@Override
public BaseHolder<TagViewBean> getHolder(View v, int viewType) {
return new TagViewItemHolder(v);
}
@Override
public int getLayoutId(int viewType) {
return R.layout.item_skyorder_meal_kind;
}
class TagViewItemHolder extends BaseHolder<TagViewBean> {
@BindView(R2.id.btn_meal_kind)
RoundButton btn_meal_kind;
@BindView(R2.id.iv_selected)
ImageView iv_selected;
public TagViewItemHolder(View itemView) {
super(itemView);
}
@Override
public void setData(TagViewBean tagViewBean, int position) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) btn_meal_kind.getLayoutParams();
// //設置Tag宽高以及间距
// if (itemWidth != 0) {
// params.width = itemWidth - ArmsUtils.dip2px(mContext, 8);
// params.leftMargin = ArmsUtils.dip2px(mContext, 7);
// }
if (itemHegiht != 0) {
params.height = ArmsUtils.dip2px(mContext, itemHegiht);
}
// params.leftMargin = ArmsUtils.dip2px(mContext, 7);
btn_meal_kind.setLayoutParams(params);
btn_meal_kind.setText(tagViewBean.getTagName());
if (!firstInit) {
if (tagViewBean.isChecked()) {
mCurrentSelectedTagId = tagViewBean.getId();
iv_selected.setVisibility(View.VISIBLE);
} else {
iv_selected.setVisibility(View.INVISIBLE);
}
} else {
if (defaultCheckedIndex != -1 && defaultCheckedIndex == position) {
mCurrentSelectedTagId = tagViewBean.getId();
tagViewBean.setChecked(true);
iv_selected.setVisibility(View.VISIBLE);
} else {
tagViewBean.setChecked(false);
iv_selected.setVisibility(View.INVISIBLE);
}
}
if (firstInit) {
firstInit = false;
}
btn_meal_kind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
//现将所有Tag点击状态初始化
for (int i = 0; i < mInfos.size(); i++) {
TagViewBean tagViewBean1 = mInfos.get(i);
tagViewBean1.setChecked(false);
}
tagViewBean.setChecked(true);
mCurrentSelectedTagId = tagViewBean.getId();
listener.onClickChecked(tagViewBean);
notifyDataSetChanged();
}
}
});
}
}
private OnClickCheckedListener listener;
public void setOnClickCheckedListener(OnClickCheckedListener listener) {
this.listener = listener;
}
public interface OnClickCheckedListener {
void onClickChecked(TagViewBean tagViewBean);
}
public void setDefaultCheckedIndex(int defaultCheckedIndex) {
this.defaultCheckedIndex = defaultCheckedIndex;
}
public void setColCount(int colCount) {
this.colCount = colCount;
setItemWidth();
}
public void setItemWidth() {
this.itemWidth = showLayoutWidth - ArmsUtils.dip2px(mContext, 5) / colCount;
}
public void setShowLayoutWidth(int showLayoutWidth) {
this.showLayoutWidth = showLayoutWidth;
}
public void setItemHegiht(int itemHegiht) {
this.itemHegiht = itemHegiht;
}
public int getCurrentSelectedTagId() {
return mCurrentSelectedTagId;
}
}
package com.gingersoft.gsa.cloud.ui.bean;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2018/11/27
* 修订历史:2018/11/27
* 描述:
*/
public class TagViewBean {
private boolean checked = false;
private String tagName;
private int id;
public TagViewBean(boolean checked, String tagName, int id) {
this.checked = checked;
this.tagName = tagName;
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public String getTagName() {
return tagName;
}
public void setTagName(String tagName) {
this.tagName = tagName;
}
}
......@@ -3,11 +3,15 @@ package com.gingersoft.gsa.cloud.ui.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.ui.R;
/**
......@@ -21,6 +25,7 @@ public class LoadingDialog {
*/
private static Dialog mLoadingDialog;
private static AnimationDrawable animationDrawable;
private static TextView loadingText;
/**
* 显示加载对话框
......@@ -31,12 +36,17 @@ public class LoadingDialog {
*/
public static Dialog showDialogForLoading(Context context, String msg, boolean cancelable) {
View view = LayoutInflater.from(context).inflate(R.layout.ui_dialog_loading, null);
TextView loadingText = (TextView) view.findViewById(R.id.tv_loading_dialog_text);
TextView loadingText = view.findViewById(R.id.tv_loading_dialog_text);
loadingText.setText(msg);
if (mLoadingDialog == null) {
mLoadingDialog = new Dialog(context, R.style.ui_loading_dialog);
}
//不設置會有黑邊
Window window = mLoadingDialog.getWindow();
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.getDecorView().setBackgroundResource(android.R.color.transparent);
mLoadingDialog.setCancelable(cancelable);
mLoadingDialog.setCanceledOnTouchOutside(false);
mLoadingDialog.setContentView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
......@@ -44,9 +54,34 @@ public class LoadingDialog {
return mLoadingDialog;
}
/**
* 重新显示一個加载对话框,上面靜態的加載框,其他頁面的加載關閉了,會導致影響到當前頁面的加載框。
*
* @param context 上下文
* @param msg 对话框显示内容
* @param cancelable 对话框是否可以取消
*/
public static Dialog showNewDialogForLoading(Context context, String msg, boolean cancelable) {
View view = LayoutInflater.from(context).inflate(R.layout.ui_dialog_loading, null);
loadingText = view.findViewById(R.id.tv_loading_dialog_text);
loadingText.setText(msg);
Dialog mLoadingDialog = new Dialog(context, R.style.ui_loading_dialog);
mLoadingDialog.setCancelable(cancelable);
mLoadingDialog.setCanceledOnTouchOutside(false);
Window window = mLoadingDialog.getWindow();
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.getDecorView().setBackgroundResource(android.R.color.transparent);
mLoadingDialog.setContentView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
mLoadingDialog.show();
return mLoadingDialog;
}
public static Dialog showDialogForLoading(Activity context) {
View view = LayoutInflater.from(context).inflate(R.layout.ui_dialog_loading, null);
TextView loadingText = (TextView) view.findViewById(R.id.tv_loading_dialog_text);
TextView loadingText = view.findViewById(R.id.tv_loading_dialog_text);
loadingText.setText(context.getString(R.string.base_loading));
if (mLoadingDialog == null) {
......@@ -59,6 +94,12 @@ public class LoadingDialog {
return mLoadingDialog;
}
public static void setText(String msg) {
if (loadingText != null) {
loadingText.setText(msg);
}
}
/**
* 关闭加载对话框
*/
......@@ -71,5 +112,6 @@ public class LoadingDialog {
mLoadingDialog.dismiss();
mLoadingDialog = null;
}
loadingText = null;
}
}
package com.gingersoft.gsa.cloud.ui.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.ui.R;
import com.gingersoft.gsa.cloud.ui.R2;
import com.gingersoft.gsa.cloud.ui.adapter.SkyorderMealKindAdapter;
import com.gingersoft.gsa.cloud.ui.bean.TagViewBean;
import com.gingersoft.gsa.cloud.ui.utils.MathUtils;
import com.gingersoft.gsa.cloud.ui.widget.RoundButton;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.ThirdViewUtil;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import com.qmuiteam.qmui.widget.QMUIWrapContentListView;
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import java.util.ArrayList;
import java.util.List;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.OnClick;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2018/5/24
* 修订历史:2018/5/24
* 描述:打印QRCode
*/
public class PrintQRCodeDialog {
private Activity mContext;
private Dialog dialog;
@BindView(R2.id.lLayout_bg)
LinearLayout lLayout_bg;
@BindView(R2.id.tv_table_name)
TextView tv_table_name;
@BindView(R2.id.btn_delivery_time)
RoundButton btn_delivery_time;
@BindView(R2.id.tv_hour)
TextView tv_hour;
@BindView(R2.id.tv_minute)
TextView tv_minute;
@BindView(R2.id.recycler_food_kind)
RecyclerView recycler_food_kind;
@BindView(R2.id.ed_value)
EditText ed_value;
@BindView(R2.id.btn_0)
Button btn_0;
@BindView(R2.id.btn_1)
Button btn_1;
@BindView(R2.id.btn_2)
Button btn_2;
@BindView(R2.id.btn_3)
Button btn_3;
@BindView(R2.id.btn_4)
Button btn_4;
@BindView(R2.id.btn_5)
Button btn_5;
@BindView(R2.id.btn_6)
Button btn_6;
@BindView(R2.id.btn_7)
Button btn_7;
@BindView(R2.id.btn_8)
Button btn_8;
@BindView(R2.id.btn_9)
Button btn_9;
@BindView(R2.id.btn_back)
Button btn_back;
@BindView(R2.id.btn_ten_plus)
Button btn_ten_plus;
private QMUIPopup mHoursPopup;
private QMUIPopup mMinutePopup;
private List<Integer> mDeliveryHours = new ArrayList<>();
private List<Integer> mDeliveryMinute = new ArrayList<>();
private List<TagViewBean> mSummarys = new ArrayList<>();
private SkyorderMealKindAdapter skyorderMealKindAdapter;
private int hourSelectPosition = -1;
private int minuteSelectPosition = -1;
private int summaryId = 2;
private int[] chooseDeliveryTimes = new int[2];
private String currentTimes[];
//选中10+的次数
private int currentTenPlus = 0;
private final String checkStatusKey = "check_status";
private final String deliveryTimeHourKey = "delivery_time_hour";
private final String deliveryTimeMinuteKey = "delivery_time_minute";
public PrintQRCodeDialog(Activity context) {
this.mContext = context;
initView();
}
private void initView() {
// 获取Dialog布局
View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_print_qrcode, null);
ThirdViewUtil.bindTarget(this, view);//绑定
// 定义Dialog布局和参数
dialog = new Dialog(mContext, R.style.AlertDialogStyle);
dialog.setContentView(view);
dialog.setCancelable(true);
// 调整dialog背景大小
lLayout_bg.setLayoutParams(
new FrameLayout.LayoutParams((int) (ArmsUtils.getScreenWidth(mContext) * 0.95), ViewGroup.LayoutParams.WRAP_CONTENT));
ed_value.setTextSize(ArmsUtils.dip2px(mContext, 12));
ed_value.setHintTextColor(ArmsUtils.getColor(mContext, R.color.theme_hint_color));
ed_value.setHint("請輸入人數");
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
//恢复刷新餐台数据标志
// GSAApplication.isRefreshData = true;
cancelRecycler();
}
});
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
//恢复刷新餐台数据标志
// GSAApplication.isRefreshData = true;
cancelRecycler();
}
});
}
private void cancelRecycler() {
if (mDeliveryHours != null) {
mDeliveryHours.clear();
mDeliveryHours = null;
}
if (mDeliveryMinute != null) {
mDeliveryMinute.clear();
mDeliveryMinute = null;
}
if (mSummarys != null) {
mSummarys.clear();
mSummarys = null;
}
chooseDeliveryTimes = null;
skyorderMealKindAdapter = null;
}
public PrintQRCodeDialog builder() {
initDeliveryHourTime();
initDeliveryTimeClickListener();
initDeliveryTimePopup();
initSummaryAdapter();
initSummaryDefaultSelect();
initSummaryRecycleView();
return this;
}
public void initDeliveryHourTime() {
long currentTimeMillis = System.currentTimeMillis();
//设置交檯时间(时)当前时间往后六小时
currentTimes = TimeUtils.getStringByFormat(currentTimeMillis, TimeUtils.dateFormatHM).split(":");
int currentHour = Integer.parseInt(currentTimes[0]);
for (int i = currentHour; i < currentHour + 7; i++) {
mDeliveryHours.add(i);
}
boolean isCheckLockedDeliveryTime = (boolean) SPUtils.get(mContext, checkStatusKey, false);
if (isCheckLockedDeliveryTime) {
Drawable drawable = mContext.getResources().getDrawable(R.drawable.qrcode_time_lock);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
btn_delivery_time.setCompoundDrawables(null, null, drawable, null);
//交檯时间已锁定
setLockedDeliveryTime();
} else {
//交檯时间未锁定,给一个默认选中时间
setDefaultDeliveryTime();
}
}
private void setLockedDeliveryTime() {
String lockedHour = (String) SPUtils.get(mContext, deliveryTimeHourKey, "0");
String lockedMinute = (String) SPUtils.get(mContext, deliveryTimeMinuteKey, "0");
if (!TextUtils.isEmpty(lockedHour)) {
chooseDeliveryTimes[0] = Integer.parseInt(lockedHour);
}
if (!TextUtils.isEmpty(lockedMinute)) {
chooseDeliveryTimes[1] = Integer.parseInt(lockedMinute);
}
for (int i = 0; i < mDeliveryHours.size(); i++) {
if (chooseDeliveryTimes.length > 0 && chooseDeliveryTimes[0] == mDeliveryHours.get(i)) {
//找到当前选择的小时数下标
hourSelectPosition = i;
break;
}
}
for (int j = 0; j < mDeliveryMinute.size(); j++) {
if (chooseDeliveryTimes.length > 1 && chooseDeliveryTimes[1] == mDeliveryMinute.get(j)) {
//找到当前选择的分钟数下标
minuteSelectPosition = j;
break;
}
}
}
private void setDefaultDeliveryTime() {
/**
* 设置默认小时数
*/
long currentTimeMillis = System.currentTimeMillis();
//设置默认交台时间为当前时间往后推多少分钟(可配置)
long defaultDeliveryLater = currentTimeMillis;// + (GSAApplication.androidSetting.getQR_DeliveryLaterDefault() * 60 * 1000)
String defaultDeliveryLaterTimes[] = TimeUtils.getStringByFormat(defaultDeliveryLater, TimeUtils.dateFormatHM).split(":");
for (int i = 0; i < mDeliveryHours.size(); i++) {
int hour = mDeliveryHours.get(i);
if (hour == Integer.parseInt(defaultDeliveryLaterTimes[0])) {
//设置默认交檯小时数
chooseDeliveryTimes[0] = Integer.parseInt(defaultDeliveryLaterTimes[0]);
hourSelectPosition = i;
break;
}
}
if (hourSelectPosition == -1) {
//未设置默认交檯时,默认选中下一个小时
chooseDeliveryTimes[0] = mDeliveryHours.get(1);
hourSelectPosition = 1;
}
/**
* 设置默认分钟数
*/
//获取当前分钟
int currentMinute = Integer.parseInt(currentTimes[1]);
//找回与当前分钟数相近的整数
int needNum = MathUtils.findRecentNum(mDeliveryMinute, currentMinute);
//设置默认分钟数
chooseDeliveryTimes[1] = needNum;
for (int i = 0; i < mDeliveryMinute.size(); i++) {
if (mDeliveryMinute.get(i) == chooseDeliveryTimes[1]) {
minuteSelectPosition = i;
}
}
}
private void initDeliveryTimeClickListener() {
btn_delivery_time.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isCheckLockedDeliveryTime = !(boolean) SPUtils.get(mContext, checkStatusKey, false);
if (isCheckLockedDeliveryTime) {
SPUtils.put(mContext, deliveryTimeHourKey, String.valueOf(chooseDeliveryTimes[0]));
SPUtils.put(mContext, deliveryTimeMinuteKey, String.valueOf(chooseDeliveryTimes[1]));
Drawable drawable = mContext.getResources().getDrawable(R.drawable.qrcode_time_lock);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
btn_delivery_time.setCompoundDrawables(null, null, drawable, null);
} else {
SPUtils.put(mContext, deliveryTimeHourKey, "");
SPUtils.put(mContext, deliveryTimeMinuteKey, "");
btn_delivery_time.setCompoundDrawables(null, null, null, null);
}
SPUtils.put(mContext, checkStatusKey, isCheckLockedDeliveryTime);
}
});
}
private void initDeliveryTimePopup() {
if (hourSelectPosition != -1 && mDeliveryHours.size() > hourSelectPosition) {
tv_hour.setText(mDeliveryHours.get(hourSelectPosition) + "");
}
if (minuteSelectPosition != -1 && mDeliveryMinute.size() > minuteSelectPosition) {
tv_minute.setText(mDeliveryMinute.get(minuteSelectPosition) + "");
}
if (mHoursPopup == null) {
mHoursPopup = initPopup(mDeliveryHours, (parent, view, position, id) -> {
mHoursPopup.dismiss();
chooseDeliveryTimes[0] = mDeliveryHours.get(position);
tv_hour.setText(mDeliveryHours.get(position) + "");
boolean isCheckLockedDeliveryTime = (boolean) SPUtils.get(mContext, checkStatusKey, false);
if (isCheckLockedDeliveryTime) {
SPUtils.put(mContext, deliveryTimeHourKey, String.valueOf(chooseDeliveryTimes[0]));
}
});
mHoursPopup.offsetYIfBottom(10);
// mHoursPopup.setPopupTopBottomMinMargin(10);
// mHoursPopup.setPositionOffsetYWhenBottom(10);
}
if (mMinutePopup == null) {
mMinutePopup = initPopup(mDeliveryMinute, (parent, view, position, id) -> {
mMinutePopup.dismiss();
chooseDeliveryTimes[1] = mDeliveryMinute.get(position);
tv_minute.setText(mDeliveryMinute.get(position) + "");
boolean isCheckLockedDeliveryTime = (boolean) SPUtils.get(mContext, checkStatusKey, false);
if (isCheckLockedDeliveryTime) {
SPUtils.put(mContext, deliveryTimeMinuteKey, String.valueOf(chooseDeliveryTimes[1]));
}
});
}
}
private QMUIPopup initPopup(List<Integer> mDelivery, AdapterView.OnItemClickListener onItemClickListener) {
int mHeight = QMUIDisplayHelper.dp2px(mContext, 200);
int mWidth = QMUIDisplayHelper.dp2px(mContext, 150);
ArrayAdapter hoursAdapter = new ArrayAdapter<>(mContext, R.layout.spinner_item_select, mDelivery);
QMUIPopup popup = new QMUIPopup(mContext, mWidth, mHeight);
ListView listView = new QMUIWrapContentListView(mContext, mHeight);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
listView.setLayoutParams(lp);
listView.setAdapter(hoursAdapter);
listView.setVerticalScrollBarEnabled(false);
listView.setOnItemClickListener(onItemClickListener);
listView.setDivider(null);
popup.view(listView);
return popup;
}
private void initSummaryAdapter() {
if (skyorderMealKindAdapter == null) {
//当餐台有多种餐种时才显示 选择餐种
skyorderMealKindAdapter = new SkyorderMealKindAdapter(mContext, mSummarys);
// if (mSummarys.size() >= GSAApplication.androidSetting.getQR_SummaryIndexDefault()) {
// //設置,默認選中餐種
// skyorderMealKindAdapter.setDefaultCheckedIndex(GSAApplication.androidSetting.getQR_SummaryIndexDefault());
// }
recycler_food_kind.setAdapter(skyorderMealKindAdapter);
skyorderMealKindAdapter.setOnClickCheckedListener(tagViewBean -> summaryId = tagViewBean.getId());
}
}
private void initSummaryDefaultSelect() {
if (mSummarys.size() > 0) {
if (mSummarys.size() == 1) {
//只有一种餐种 直接选中
summaryId = mSummarys.get(0).getId();
} else {
// if (mSummarys.size() >= GSAApplication.androidSetting.getQR_SummaryIndexDefault()) {
// 后台设置默认选中餐种的餐种在,可选数量范围内
// summaryId = mSummarys.get(GSAApplication.androidSetting.getQR_SummaryIndexDefault()).getId();
// } else {
//后台设置默认选中餐种不在可选数量范围内 ,默认选中第一个
summaryId = mSummarys.get(0).getId();
// }
}
}
}
@OnClick({R2.id.tv_hour, R2.id.tv_minute, R2.id.btn_0, R2.id.btn_1, R2.id.btn_2, R2.id.btn_3, R2.id.btn_4, R2.id.btn_5, R2.id.btn_6, R2.id.btn_7, R2.id.btn_8
, R2.id.btn_9, R2.id.btn_back, R2.id.btn_ten_plus})
public void onClick(View v) {
if (v.getId() == R.id.tv_hour) {
mHoursPopup.animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER);
mHoursPopup.preferredDirection(QMUIPopup.DIRECTION_BOTTOM);
mHoursPopup.show(v);
} else if (v.getId() == R.id.tv_minute) {
mMinutePopup.animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER);
mMinutePopup.preferredDirection(QMUIPopup.DIRECTION_BOTTOM);
mMinutePopup.show(v);
} else if (v.getId() == R.id.btn_0 | v.getId() == R.id.btn_1 | v.getId() == R.id.btn_2 |
v.getId() == R.id.btn_3 | v.getId() == R.id.btn_4 | v.getId() == R.id.btn_5 |
v.getId() == R.id.btn_6 | v.getId() == R.id.btn_7 | v.getId() == R.id.btn_8 |
v.getId() == R.id.btn_9) {
int i = Integer.parseInt(v.getTag().toString());
String values = String.valueOf(i);
if (currentTenPlus > 0) {
//有选择十整位
values = currentTenPlus + values;
}
if (values.length() > 0 && Integer.parseInt(values) > 99) {
values = "99";
ed_value.setText(values);
} else {
ed_value.setText(values);
}
if (!TextUtils.isEmpty(getInputNumber())) {
comfirm();
cancel();
}
} else if (v.getId() == R.id.btn_back) {
cancel();
} else if (v.getId() == R.id.btn_ten_plus) {
currentTenPlus++;
ed_value.setText(String.valueOf(currentTenPlus));
}
}
private void comfirm() {
if (TextUtils.isEmpty(getInputNumber())) {
ArmsUtils.makeText(mContext, "請輸入人數");
return;
}
int person = Integer.parseInt(getInputNumber());
String endTime = chooseDeliveryTimes[0] + ":" + chooseDeliveryTimes[1];
if (TextUtils.isEmpty(endTime)) {
ArmsUtils.makeText(mContext, "請選擇交檯時間");
return;
}
if (summaryId == -1) {
ArmsUtils.makeText(mContext, "請選擇餐種");
return;
}
if (onComfirmListener != null) {
onComfirmListener.onComfirm(person, formatEndTime(endTime), summaryId);
}
cancel();
}
public void initSummaryRecycleView() {
GridLayoutManager manager = new GridLayoutManager(mContext, 4, LinearLayoutManager.VERTICAL, false);
ArmsUtils.configRecyclerView(recycler_food_kind, manager);
recycler_food_kind.setLayoutManager(manager);
recycler_food_kind.setItemAnimator(new DefaultItemAnimator());
}
private String formatEndTime(String endTime) {
String day = TimeUtils.getStringByFormat(System.currentTimeMillis(), TimeUtils.dateFormatYMD);
return day + " " + endTime + ":00";
}
public PrintQRCodeDialog setCancelable(boolean cancelable) {
dialog.setCancelable(cancelable);
return this;
}
public void setMinute(List<Integer> mMinute) {
this.mDeliveryMinute.addAll(mMinute);
}
public String getInputNumber() {
return ed_value.getText().toString().trim();
}
public void setTableName(String name) {
tv_table_name.setText(name);
}
public void show() {
dialog.show();
//先停止刷新餐台数据,避免卡顿
// GSAApplication.isRefreshData = false;
}
public void cancel() {
dialog.dismiss();
}
private OnComfirmListener onComfirmListener;
public void setComfirmListener(OnComfirmListener onComfirmListener) {
this.onComfirmListener = onComfirmListener;
}
public interface OnComfirmListener {
void onComfirm(int person, String endTime, int summaryId);
}
}
package com.gingersoft.gsa.cloud.ui.utils;
import java.util.List;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019/3/14
* 修订历史:2019/3/14
* 描述:
*/
public class MathUtils {
/**
* 在一組数据内,找相近的数
*
* @param list
* @param targetNum 接近的数字
*/
public static int findRecentNum(List<Integer> list, int targetNum) {
// 差值实始化
int diffNum = Math.abs(list.get(0) - targetNum);
// 最终结果
int result = list.get(0);
for (Integer integer : list) {
int diffNumTemp = Math.abs(integer - targetNum);
if (diffNumTemp < diffNum) {
diffNum = diffNumTemp;
result = integer;
}
}
return result;
}
}
......@@ -11,6 +11,7 @@ import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
......@@ -19,8 +20,10 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.gingersoft.gsa.cloud.base.utils.screen.ConvertDpAndPx;
import com.gingersoft.gsa.cloud.ui.R;
import java.util.ArrayList;
import java.util.List;
......@@ -157,6 +160,18 @@ public class MyEditText extends RelativeLayout {
initLookIcon();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int height = 0;
for (int i = 0; i < getChildCount(); i++) {
View childView = getChildAt(i);
measureChild(childView, widthMeasureSpec, heightMeasureSpec);
height += childView.getMeasuredHeight();
}
setMeasuredDimension(widthMeasureSpec, height);
}
private void initEditText() {
if (!isInputIcon) {
mInputFilter.add(new EmojiInputFilter());
......@@ -291,6 +306,11 @@ public class MyEditText extends RelativeLayout {
return editText.getText();
}
public EditText setText(String text){
editText.setText(text);
return editText;
}
private void setMaxLengthText(int currentLenght) {
if (maxLenghtTextView != null)
maxLenghtTextView.setText(currentLenght + "/" + maxLeght);
......
package com.gingersoft.gsa.cloud.ui.widget;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.GradientDrawable;
import android.os.Build;
import android.util.AttributeSet;
import android.view.Gravity;
import com.gingersoft.gsa.cloud.ui.R;
import androidx.appcompat.widget.AppCompatTextView;
public class RoundButton extends AppCompatTextView {
private RoundDrawable rd;
private int strokeWidth;
public RoundButton(Context context) {
this(context, null);
}
public RoundButton(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public RoundButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundButton);
float pressedRatio = a.getFloat(R.styleable.RoundButton_btnPressedRatio, 0.80f);
int cornerRadius = a.getLayoutDimension(R.styleable.RoundButton_btnCornerRadius, 0);
ColorStateList solidColor = a.getColorStateList(R.styleable.RoundButton_btnSolidColor);
int strokeColor = a.getColor(R.styleable.RoundButton_btnStrokeColor, 0x0);
strokeWidth = a.getDimensionPixelSize(R.styleable.RoundButton_btnStrokeWidth, 0);
int strokeDashWidth = a.getDimensionPixelSize(R.styleable.RoundButton_btnStrokeDashWidth, 0);
int strokeDashGap = a.getDimensionPixelSize(R.styleable.RoundButton_btnStrokeDashGap, 0);
a.recycle();
setSingleLine(true);
setGravity(Gravity.CENTER);
rd = new RoundDrawable(cornerRadius == -1);
rd.setCornerRadius(cornerRadius == -1 ? 0 : cornerRadius);
rd.setStroke(strokeWidth, strokeColor, strokeDashWidth, strokeDashGap);
if (solidColor == null) {
solidColor = ColorStateList.valueOf(0);
}
if (solidColor.isStateful()) {
rd.setSolidColors(solidColor);
} else if (pressedRatio > 0.0001f) {
rd.setSolidColors(csl(solidColor.getDefaultColor(), pressedRatio));
} else {
rd.setColor(solidColor.getDefaultColor());
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
this.setBackground(rd);
}
}
public void setStrokeColor(int color) {
rd.setStroke(strokeWidth, color);
}
public void setSolidColors(ColorStateList solidColor) {
rd.setSolidColors(solidColor);
}
public void setSolidColors(int solidColor) {
rd.setColor(solidColor);
}
// 灰度
int greyer(int color) {
int blue = (color & 0x000000FF) >> 0;
int green = (color & 0x0000FF00) >> 8;
int red = (color & 0x00FF0000) >> 16;
int grey = Math.round(red * 0.299f + green * 0.587f + blue * 0.114f);
return Color.argb(0xff, grey, grey, grey);
}
// 明度
int darker(int color, float ratio) {
color = (color >> 24) == 0 ? 0x22808080 : color;
float[] hsv = new float[3];
Color.colorToHSV(color, hsv);
hsv[2] *= ratio;
return Color.HSVToColor(color >> 24, hsv);
}
ColorStateList csl(int normal, float ratio) {
// int disabled = greyer(normal);
int pressed = darker(normal, ratio);
int[][] states = new int[][]{{android.R.attr.state_pressed}, {}};
int[] colors = new int[]{pressed, normal};
return new ColorStateList(states, colors);
}
public static class RoundDrawable extends GradientDrawable {
private boolean mIsStadium = false;
private ColorStateList mSolidColors;
private int mFillColor;
public RoundDrawable(boolean isStadium) {
mIsStadium = isStadium;
}
public void setSolidColors(ColorStateList colors) {
mSolidColors = colors;
setColor(colors.getDefaultColor());
}
@Override
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);
if (mIsStadium) {
RectF rect = new RectF(getBounds());
setCornerRadius((rect.height() > rect.width() ? rect.width() : rect.height()) / 2);
}
}
@Override
public void setColor(int argb) {
mFillColor = argb;
super.setColor(argb);
}
@Override
protected boolean onStateChange(int[] stateSet) {
if (mSolidColors != null) {
final int newColor = mSolidColors.getColorForState(stateSet, 0);
if (mFillColor != newColor) {
setColor(newColor);
return true;
}
}
return false;
}
@Override
public boolean isStateful() {
return super.isStateful() || (mSolidColors != null && mSolidColors.isStateful());
}
}
}
\ No newline at end of file
......@@ -16,7 +16,7 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/qmui_config_color_50_white" android:state_enabled="false"/>
<item android:color="@color/qmui_config_color_75_white" android:state_pressed="true"/>
<item android:color="@color/qmui_config_color_white"/>
<item android:color="@color/normal_color" android:state_enabled="false"/>
<item android:color="@color/normal_color" android:state_pressed="true"/>
<item android:color="@color/normal_color"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<stroke android:color="@color/black" />
<solid android:color="@color/keyboard_press" />
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<stroke android:color="@color/black" />
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>
</item>
<item>
<shape>
<!-- <gradient android:angle="270" android:endColor="@drawable/black" android:startColor="@drawable/light_grayish" /> -->
<solid android:color="@color/keyboard_normal" />
<stroke android:color="@color/black" />
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<stroke android:color="@color/black" />
<solid android:color="@color/Dark_grayish" />
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<stroke android:color="@color/black" />
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>
</item>
<item>
<shape>
<!-- <gradient android:angle="270" android:endColor="@drawable/black" android:startColor="@drawable/light_grayish" /> -->
<solid android:color="#999999" />
<stroke android:color="@color/black" />
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<stroke android:color="@color/black" />
<solid android:color="@color/keyboard_press" />
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<stroke android:color="@color/black" />
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>
</item>
<item>
<shape>
<!-- <gradient android:angle="270" android:endColor="@drawable/black" android:startColor="@drawable/light_grayish" /> -->
<solid android:color="@color/theme_color" />
<stroke android:color="@color/black" />
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/dp_3" />
<solid android:color="@color/theme_color" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#2B2B2B" />
<corners android:radius="@dimen/normal_space5" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/theme_white_color"/>
<corners android:radius="@dimen/normal_space5"/>
</shape>
\ No newline at end of file
......@@ -3,5 +3,5 @@
<solid android:color="@color/transparent"/>
<corners android:radius="6dp"/>
<corners android:radius="@dimen/dp_6"/>
</shape>
\ No newline at end of file
<?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/lLayout_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_rect_fillet_theme_black_5"
android:orientation="vertical"
android:paddingLeft="3dp"
android:paddingTop="@dimen/normal_space"
android:paddingRight="3dp"
android:paddingBottom="@dimen/normal_space">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/normal_space8"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_table_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text=""
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_large"
android:textStyle="bold" />
<EditText
android:id="@+id/ed_value"
android:layout_width="wrap_content"
android:layout_height="45dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_gravity="right"
android:layout_marginLeft="@dimen/normal_space15"
android:layout_toRightOf="@+id/tv_table_name"
android:background="@drawable/shape_rect_fillet_white_5"
android:ems="10"
android:enabled="false"
android:gravity="right|center_vertical"
android:hint="@string/malnumber"
android:inputType="numberDecimal"
android:paddingRight="@dimen/normal_space"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="#FF0000"
android:textSize="28sp"
android:textStyle="bold">
<requestFocus />
</EditText>
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_food_kind"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/normal_space8"
android:layout_marginRight="3dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="@dimen/normal_space8"
android:layout_marginRight="@dimen/normal_space8"
android:layout_marginBottom="@dimen/normal_space8"
android:gravity="right|center_vertical"
android:orientation="horizontal"
android:weightSum="5">
<com.gingersoft.gsa.cloud.ui.widget.RoundButton
android:id="@+id/btn_delivery_time"
style="@style/RoundButton.One"
android:layout_width="120dp"
android:layout_height="35dp"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:text="交檯时间"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_normal2"
app:btnCornerRadius="@dimen/normal_space5"
app:btnSolidColor="#329966" />
<TextView
android:id="@+id/tv_hour"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:layout_weight="2"
android:background="@drawable/shape_rect_fillet_white_5"
android:drawableRight="@drawable/black_dropdown"
android:gravity="center"
android:paddingLeft="@dimen/normal_space"
android:paddingRight="@dimen/normal_space"
android:text="時"
android:textColor="@color/black"
android:textSize="@dimen/font_normal3"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/normal_space"
android:layout_marginRight="@dimen/normal_space"
android:text=":"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_large"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_minute"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:background="@drawable/shape_rect_fillet_white_5"
android:drawableRight="@drawable/black_dropdown"
android:gravity="center"
android:paddingLeft="@dimen/normal_space"
android:paddingRight="@dimen/normal_space"
android:text="分"
android:textColor="@color/black"
android:textSize="@dimen/font_normal3"
android:textStyle="bold" />
</LinearLayout>
<include layout="@layout/include_number_keyboard" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0_5"
android:background="@color/color_ccc" />
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="*"
android:stretchColumns="*">
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/btn_7"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="7"
android:text="@string/Key_7"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_8"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginRight="1dp"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="8"
android:text="@string/Key_8"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_9"
android:layout_width="1dip"
android:layout_height="match_parent"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="9"
android:text="@string/Key_9"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/btn_4"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:layout_marginRight="1dp"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="4"
android:text="@string/Key_4"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_5"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:layout_marginRight="1dp"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="5"
android:text="@string/Key_5"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_6"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="6"
android:text="@string/Key_6"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/btn_1"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:layout_marginRight="1dp"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="1"
android:text="@string/Key_1"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_2"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:layout_marginRight="1dp"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="2"
android:text="@string/Key_2"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_3"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="3"
android:text="@string/Key_3"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/btn_back"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:layout_marginRight="1dp"
android:layout_weight="1"
android:background="@drawable/selector_keyboard_gary_bg"
android:focusable="true"
android:longClickable="true"
android:tag="99"
android:text="返回"
android:textColor="@color/theme_white_color"
android:textSize="40sp" />
<Button
android:id="@+id/btn_0"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:layout_marginRight="1dp"
android:layout_weight="1"
android:background="@drawable/selector_input_number_keyboard"
android:focusable="true"
android:tag="0"
android:text="@string/Key_0"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_ten_plus"
android:layout_width="1dip"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:background="@drawable/selector_keyboard_theme_bg"
android:focusable="true"
android:tag="98"
android:text="10+"
android:textColor="@color/theme_white_color"
android:textSize="40sp"
android:textStyle="bold" />
</TableRow>
</TableLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:layout_marginLeft="3dp"
android:layout_marginTop="3dp"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.gingersoft.gsa.cloud.ui.widget.RoundButton
android:id="@+id/btn_meal_kind"
style="@style/RoundButton.One"
android:layout_width="match_parent"
android:layout_height="38dp"
android:text=""
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_normal"
android:textStyle="bold"
app:btnCornerRadius="3dp"
app:btnSolidColor="#fd9704" />
</RelativeLayout>
<ImageView
android:id="@+id/iv_selected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/icon_green_selected" />
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/normal_space"
android:gravity="center_vertical"
android:paddingLeft="?attr/qmui_content_padding_horizontal"
android:paddingRight="?attr/qmui_content_padding_horizontal"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textColor="@color/black"
android:textStyle="bold"
android:textSize="@dimen/font_normal3" />
\ No newline at end of file
......@@ -2,17 +2,17 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:background="@drawable/ui_shape_rect_loading"
android:gravity="center"
android:minHeight="120dp"
android:minWidth="120dp"
android:minHeight="120dp"
android:orientation="vertical"
android:padding="10dp" >
android:padding="10dp">
<ProgressBar
style="@style/AppTheme.Base"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv_loading_dialog_text"
......
......@@ -250,6 +250,24 @@
</attr>
</declare-styleable>
<declare-styleable name="RoundButton">
<!-- 背景色 -->
<attr name="btnSolidColor" format="color" />
<!-- 边框色 -->
<attr name="btnStrokeColor" format="color" />
<!-- 边框厚度 -->
<attr name="btnStrokeWidth" format="dimension" />
<!-- 边框虚线长度 -->
<attr name="btnStrokeDashWidth" format="dimension" />
<!-- 边框虚线间隙 -->
<attr name="btnStrokeDashGap" format="dimension" />
<!-- 圆角半径,stadium 表示半径为 min(height,width) / 2-->
<attr name="btnCornerRadius" format="dimension">
<enum name="stadium" value="-1" />
</attr>
<!-- 自动计算按下(pressed)状态颜色的系数, 值为0时不自动计算 -->
<attr name="btnPressedRatio" format="float" />
</declare-styleable>
<!-- <declare-styleable name="CustomStatusView">-->
<!-- <attr name="progress_color" format="color" />-->
......
......@@ -26,7 +26,7 @@
<color name="theme_text_color_black">#444242</color><!-- 黑色-->
<color name="theme_text_pice_color">#ff531e</color>
<color name="theme_black">#000000</color> <!--顶部标题栏文字、图片颜色 -->
<color name="black">#000000</color> <!--顶部标题栏文字、图片颜色 -->
<color name="transparent">#aa000000</color>
<color name="trans">#00000000</color>
......@@ -406,5 +406,7 @@
<color name="line_color">#CCC</color>
<color name="scroll_bar_color">#CACACA</color>
<color name="hint_color">#676767</color>
<color name="main_home_function_head_bg">#F4F4F4</color>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>
<item name="iv_left_back" type="id"/>
</resources>
\ No newline at end of file
......@@ -40,7 +40,7 @@
</item><!-- 设置activity切换动画 -->
</style>
<!-- Theme.AppCompat.Light.Dialog -->
<style name="ui_loading_dialog" parent="@style/Animation.AppCompat.Dialog">
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowFrame">@null</item>
......@@ -48,6 +48,7 @@
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:background">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
......@@ -109,8 +110,8 @@
<style name="QDTopBar" parent="QMUI.TopBar">
<!-- <item name="qmui_topbar_bg_color">?attr/app_primary_color</item>-->
<item name="qmui_topbar_title_color">@color/qmui_config_color_white</item>
<item name="qmui_topbar_subtitle_color">@color/qmui_config_color_white</item>
<item name="qmui_topbar_title_color">@color/normal_color</item>
<item name="qmui_topbar_subtitle_color">@color/theme_color</item>
<item name="qmui_topbar_text_btn_color_state_list">@color/ui_s_topbar_btn_color</item>
<item name="qmui_topbar_height">@dimen/head_height</item>
<item name="qmui_topbar_image_btn_height">@dimen/head_height</item>
......@@ -140,7 +141,7 @@
<item name="android:gravity">center</item>
</style>
<style name="DialogTheme2" parent="QMUI.Dialog">
<style name="MyDialogTheme2" parent="QMUI.Dialog">
<!-- <item name="qmui_dialog_wrapper_style">@style/dialog_wrapper_style_63</item>-->
<item name="qmui_dialog_title_style">@style/DialogTheme2TitleStyle</item>
<item name="qmui_dialog_action_container_style">@style/DialogTheme2ActionContainerStyle
......@@ -150,7 +151,7 @@
<item name="qmui_dialog_menu_container_style">@style/DialogTheme2MenuContainerStyle</item>
<item name="qmui_dialog_menu_item_style">@style/DialogTheme2MenuItemStyle</item>
</style>
<style name="ReleaseDialogTheme" parent="DialogTheme2">
<style name="ReleaseDialogTheme" parent="MyDialogTheme2">
<!-- <item name="qmui_dialog_wrapper_style">@style/QMUI.Dialog.Wrapper</item>-->
<item name="qmui_dialog_message_content_style">@style/ReleaseMessageContentStyle</item>
</style>
......@@ -216,9 +217,43 @@
<item name="android:paddingRight">32dp</item>
</style>
<!-- 自定义仿IOS的AlertDialog的样式 -->
<style name="AlertDialogStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowFrame">@null</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>
</style>
<style name="RoundButton">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">30dp</item>
<item name="android:paddingLeft">10dp</item>
<item name="android:paddingRight">10dp</item>
<item name="android:layout_gravity">center</item>
<item name="android:gravity">center</item>
<item name="android:clickable">true</item>
<item name="android:enabled">true</item>
</style>
<!--固体蓝RoundButton -->
<style name="RoundButton.One">
<item name="android:layout_height">30dp</item>
<item name="android:textColor">@color/theme_white_color</item>
<item name="btnSolidColor">@color/theme_color</item>
<item name="btnCornerRadius">@dimen/normal_space5</item>
<item name="btnPressedRatio">0.9</item>
</style>
<style name="DialogTheme2MenuContainerStyle" parent="@style/QMUI.Dialog.MenuContainer">
<item name="qmui_dialog_menu_item_height">52dp</item>
<item name="qmui_dialog_menu_container_padding_top_when_title_exist">23dp</item>
<item name="qmui_dialog_menu_container_padding_bottom_when_action_exist">24dp</item>
</style>
</resources>
......@@ -13,7 +13,6 @@ include 'cc-register',
'order-detail',
'order-list',
'table-mode',
'mealstand-mode',
'demo_interceptors',
'print-module',
......
......@@ -59,6 +59,8 @@ dependencies {
}
// test
testImplementation rootProject.ext.dependencies["junit"]
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
// debugImplementation rootProject.ext.dependencies["canary-debug"]
// releaseImplementation rootProject.ext.dependencies["canary-release"]
// testImplementation rootProject.ext.dependencies["canary-release"]
......
package com.gingersoft.cloud.gsa;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.gingersoft.cloud.gsa", appContext.getPackageName());
}
}
......@@ -2,8 +2,11 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.gsa.cloud.table">
<application>
<activity android:name=".mvp.ui.activity.TableActivity">
</activity>
<application
android:networkSecurityConfig="@xml/network_android">
<activity android:name=".mvp.ui.activity.TableActivity"/>
<activity android:name=".mvp.ui.activity.MealStandActivity"/>
<activity android:name=".mvp.ui.activity.OrderPayActivity"/>
<activity android:name=".mvp.ui.activity.OrderContentActivity" />
</application>
</manifest>
......@@ -50,6 +50,7 @@ public class ComponentTable implements IComponent {
return false;
}
private void lifecycleFragmentDoubleText(CC cc) {
// LifecycleFragment lifecycleFragment = cc.getParamItem("fragment");
// if (lifecycleFragment != null) {
......
......@@ -12,10 +12,10 @@ public interface GoldConstants {
int bottomFunctionColCount = 4;
int restaurantId = 26;
int refreshTime = 5;
boolean isRefreshData = false;
int refreshTime = 3;
// boolean isRefreshData = false;
int DetailColCount = 4;
......
package com.gingersoft.gsa.cloud.meal.di.component;
import dagger.BindsInstance;
import dagger.Component;
package com.gingersoft.gsa.cloud.table.di.component;
import com.gingersoft.gsa.cloud.table.di.module.MealStandModule;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.meal.di.module.MealStandModule;
import com.gingersoft.gsa.cloud.meal.mvp.contract.MealStandContract;
import com.jess.arms.di.scope.ActivityScope;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.MealStandActivity;
import dagger.BindsInstance;
import dagger.Component;
/**
......
package com.gingersoft.gsa.cloud.meal.di.component;
import dagger.BindsInstance;
import dagger.Component;
package com.gingersoft.gsa.cloud.table.di.component;
import com.gingersoft.gsa.cloud.table.di.module.OrderContentModule;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.meal.di.module.OrderContentModule;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderContentContract;
import com.jess.arms.di.scope.ActivityScope;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.OrderContentActivity;
import dagger.BindsInstance;
import dagger.Component;
/**
......
package com.gingersoft.gsa.cloud.meal.di.component;
import dagger.BindsInstance;
import dagger.Component;
package com.gingersoft.gsa.cloud.table.di.component;
import com.gingersoft.gsa.cloud.table.di.module.OrderPayModule;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderPayContract;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderPayActivity;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.meal.di.module.OrderPayModule;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderPayContract;
import com.jess.arms.di.scope.ActivityScope;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.OrderPayActivity;
import dagger.BindsInstance;
import dagger.Component;
/**
......
package com.gingersoft.gsa.cloud.meal.di.module;
package com.gingersoft.gsa.cloud.table.di.module;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.MealStandModel;
import dagger.Binds;
import dagger.Module;
import com.gingersoft.gsa.cloud.meal.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.meal.mvp.model.MealStandModel;
/**
* ================================================
......
package com.gingersoft.gsa.cloud.meal.di.module;
package com.gingersoft.gsa.cloud.table.di.module;
import com.jess.arms.di.scope.ActivityScope;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.table.mvp.model.OrderContentModel;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.meal.mvp.model.OrderContentModel;
/**
......
package com.gingersoft.gsa.cloud.meal.di.module;
package com.gingersoft.gsa.cloud.table.di.module;
import com.jess.arms.di.scope.ActivityScope;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderPayContract;
import com.gingersoft.gsa.cloud.table.mvp.model.OrderPayModel;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderPayContract;
import com.gingersoft.gsa.cloud.meal.mvp.model.OrderPayModel;
/**
......
package com.gingersoft.gsa.cloud.meal.mvp.contract;
package com.gingersoft.gsa.cloud.table.mvp.contract;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IModel;
......
package com.gingersoft.gsa.cloud.meal.mvp.contract;
package com.gingersoft.gsa.cloud.table.mvp.contract;
import android.app.Activity;
import android.widget.BaseAdapter;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.meal.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import java.util.List;
......@@ -93,11 +94,11 @@ public interface MealStandContract {
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<Object> loadOrder(int orderId);
// Observable<Object> loadOrder(int orderId);
Observable<BaseRespose> createOrder(OrderRequest request);
Observable<BaseResult> createOrder(RequestBody requestBody);
Observable<BaseRespose> addFood(OrderRequest request);
Observable<BaseResult> addFood(RequestBody requestBody);
Observable<BaseRespose> deleteFood(RequestBody requestBody);
......
package com.gingersoft.gsa.cloud.meal.mvp.contract;
package com.gingersoft.gsa.cloud.table.mvp.contract;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.meal.mvp.model.bean.request.OrderRequest;
import android.app.Activity;
import android.content.Intent;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import io.reactivex.Observable;
import okhttp3.RequestBody;
......@@ -41,14 +43,20 @@ public interface OrderContentContract {
void setTvWhole(double whole);
void setTvTotal(double total);
void printSuccess();
void startActivityForResult(int Code, Class clazz, Intent intent);
void sendSuccess();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends BaseOrderContract.Model {
Observable<BaseRespose> createOrder(OrderRequest request);
Observable<BaseResult> createOrder(RequestBody requestBody);
Observable<BaseRespose> addFood(OrderRequest request);
Observable<BaseResult> addFood(RequestBody requestBody);
Observable<BaseRespose> printOrder(RequestBody request);
}
......
package com.gingersoft.gsa.cloud.meal.mvp.contract;
package com.gingersoft.gsa.cloud.table.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
* ================================================
......@@ -19,11 +21,11 @@ import com.jess.arms.mvp.IModel;
public interface OrderPayContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends BaseOrderContract.View {
void paySuccess();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends BaseOrderContract.Model {
Observable<BaseResult> updateOrderStatus(RequestBody requestBody);
}
}
package com.gingersoft.gsa.cloud.table.mvp.contract;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
......@@ -45,6 +45,8 @@ public interface TableContract {
void setOperatContentText(String contentText);
void canceOperat();
void startMealStandActivity();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......
package com.gingersoft.gsa.cloud.meal.mvp.model;
package com.gingersoft.gsa.cloud.table.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.meal.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.meal.mvp.model.service.MealService;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.service.MealService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.ActivityScope;
import java.util.List;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.meal.mvp.contract.MealStandContract;
import java.util.List;
import io.reactivex.Observable;
import okhttp3.RequestBody;
......@@ -54,22 +53,22 @@ public class MealStandModel extends BaseModel implements MealStandContract.Model
this.mApplication = null;
}
@Override
public Observable<Object> loadOrder(int orderId) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.loadOrder(orderId);
}
// @Override
// public Observable<Object> loadOrder(int orderId) {
// return mRepositoryManager.obtainRetrofitService(MealService.class)
// .loadOrder(orderId);
// }
@Override
public Observable<BaseRespose> createOrder( OrderRequest request) {
public Observable<BaseResult> createOrder(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.createOrder(request);
.createOrder(requestBody);
}
@Override
public Observable<BaseRespose> addFood(OrderRequest request) {
public Observable<BaseResult> addFood(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.addFood(request);
.addFood(requestBody);
}
@Override
......
package com.gingersoft.gsa.cloud.meal.mvp.model;
package com.gingersoft.gsa.cloud.table.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.meal.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.meal.mvp.model.service.MealService;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.service.MealService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.ActivityScope;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderContentContract;
import io.reactivex.Observable;
import okhttp3.RequestBody;
......@@ -51,15 +50,15 @@ public class OrderContentModel extends BaseModel implements OrderContentContract
}
@Override
public Observable<BaseRespose> createOrder(OrderRequest request) {
public Observable<BaseResult> createOrder(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.createOrder(request);
.createOrder(requestBody);
}
@Override
public Observable<BaseRespose> addFood(OrderRequest request) {
public Observable<BaseResult> addFood(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.addFood(request);
.addFood(requestBody);
}
@Override
......
package com.gingersoft.gsa.cloud.meal.mvp.model;
package com.gingersoft.gsa.cloud.table.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderPayContract;
import com.gingersoft.gsa.cloud.table.mvp.model.service.OrderPayService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.ActivityScope;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderPayContract;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
......@@ -43,4 +45,10 @@ public class OrderPayModel extends BaseModel implements OrderPayContract.Model {
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<BaseResult> updateOrderStatus(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderPayService.class)
.updateOrderStatus(requestBody);
}
}
\ No newline at end of file
......@@ -2,8 +2,8 @@ package com.gingersoft.gsa.cloud.table.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.model.service.TableService;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
......
package com.gingersoft.gsa.cloud.table.mvp.model.bean;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
import com.gingersoft.gsa.cloud.database.bean.Food;
import java.util.ArrayList;
import java.util.List;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-01-02
* 修订历史:2020-01-02
* 描述:
*/
public class BaseRespose {
/**
* success : true
* sysTime : 1579003211275
* data : {"id":40553,"orderNo":"gs204650350122922","status":0,"totalAmount":141,"totalPoints":0,"createTime":"Jan 14, 2020 7:49:50 PM","orderDetails":[{"id":1621502,"productName":"胡椒排骨涼瓜煲","productId":"4257","price":58,"lunchboxPrice":0,"number":1,"createTime":"Jan 14, 2020 8:00:11 PM","status":0},{"id":1621503,"productName":"海南雞(例牌)","productId":"4258","price":83,"lunchboxPrice":0,"number":1,"createTime":"Jan 14, 2020 8:00:11 PM","status":0}]}
*/
private String errMsg;
private boolean success;
private long sysTime;
private OrderBean data;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public long getSysTime() {
return sysTime;
}
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
public OrderBean getData() {
return data;
}
public void setData(OrderBean data) {
this.data = data;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public static List<Food> TransFoods(List<OrderBean.OrderDetailsBean> orderDetails) {
List<Food> foods = new ArrayList<>();
for (OrderBean.OrderDetailsBean orderDetailsBean : orderDetails) {
Food food = new Food((long) orderDetailsBean.getId(),
Integer.parseInt(orderDetailsBean.getProductId()),
orderDetailsBean.getProductName(),
orderDetailsBean.getPrice(),
orderDetailsBean.getNumber(),
orderDetailsBean.getStatus() == 0, orderDetailsBean.getLunchboxPrice());
foods.add(food);
}
return foods;
}
}
package com.gingersoft.gsa.cloud.table.mvp.model.bean;
/**
* Created by Wyh on 2020/1/17.
* 結賬方式
*/
public class BillMethodBean {
private int id;
private String name;
private double money;
public BillMethodBean() {
}
public BillMethodBean(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
package com.gingersoft.gsa.cloud.meal.mvp.model.bean;
package com.gingersoft.gsa.cloud.table.mvp.model.bean;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.meal.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.table.mvp.model.constant.MealConstant;
import java.util.List;
......
package com.gingersoft.gsa.cloud.meal.mvp.model.bean.request;
package com.gingersoft.gsa.cloud.table.mvp.model.bean.request;
import java.util.List;
......
package com.gingersoft.gsa.cloud.meal.mvp.model.constant;
package com.gingersoft.gsa.cloud.table.mvp.model.constant;
/**
* 作者:ELEGANT_BIN
......
package com.gingersoft.gsa.cloud.meal.mvp.model.service;
package com.gingersoft.gsa.cloud.table.mvp.model.service;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.meal.mvp.model.bean.request.OrderRequest;
import java.util.List;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
......@@ -23,13 +24,14 @@ import retrofit2.http.Query;
public interface MealService {
@POST("order/send" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseRespose> createOrder(@Body OrderRequest request);
Observable<BaseResult> createOrder(@Body RequestBody requestBody);
@POST("orderDetails/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseRespose> addFood(@Body OrderRequest request);
Observable<BaseResult> addFood(@Body RequestBody requestBody);
@GET("orderDetails/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<Object> loadOrder(@Query("orderId") int orderId);
// @FormUrlEncoded
// @POST("order/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
// Observable<Object> loadOrder(@Field("orderId") int orderId);
@POST("orderDetails/delete" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseRespose> deleteFood(@Body RequestBody requestBody);
......
package com.gingersoft.gsa.cloud.table.mvp.model.service;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.POST;
/**
* Created by Wyh on 2020/1/17.
*/
public interface OrderPayService {
@POST("order/update" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> updateOrderStatus(@Body RequestBody requestBody);
}
package com.gingersoft.gsa.cloud.table.mvp.model.service;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
......
......@@ -4,8 +4,7 @@ import android.app.Application;
import android.content.Context;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.base.utils.ViewUtils;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.TableAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.AllTableFragment;
......
package com.gingersoft.gsa.cloud.meal.mvp.presenter;
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Activity;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.meal.mvp.contract.BaseOrderContract;
import com.gingersoft.gsa.cloud.base.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.meal.SelectMealAdapter;
import com.gingersoft.gsa.cloud.table.mvp.contract.BaseOrderContract;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
......@@ -55,9 +55,7 @@ public class BaseOrderPresenter <M extends BaseOrderContract.Model, V extends Ba
this.mModel = (M) model;
this.mRootView = (V) rootView;
this.IActivity = (Activity) mRootView;
this.myOrderManage = MyOrderManage.getInstance();
initFoodAdapter();
}
......
package com.gingersoft.gsa.cloud.meal.mvp.presenter;
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Application;
import android.content.Intent;
import android.widget.BaseAdapter;
import com.gingersoft.gsa.cloud.base.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.meal.R;
import com.gingersoft.gsa.cloud.meal.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.meal.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.base.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.meal.FoodAdapter;
import com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.meal.SelectMealAdapter;
import com.jess.arms.integration.AppManager;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.mvp.BasePresenter;
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 com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
......@@ -26,19 +40,9 @@ import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.meal.mvp.contract.MealStandContract;
import com.jess.arms.utils.RxLifecycleUtils;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
import java.util.ArrayList;
import java.util.List;
/**
* ================================================
......@@ -94,27 +98,6 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
this.mApplication = null;
}
public void loadOrderBefore() {
// 无帐单号
// if (GSAApplication.tableContract.getOrderid() == -1) {
// if (GSAApplication.androidSetting.isOrder_InputPax()) {
// // 选择人数
// mRootView.showChoosePeopleNumDialog(false);
// }
// //设置开台时间
// GSAApplication.tableContract.setDt_createtime(new Date());
// }
// if (GSAApplication.tableContract.getMember() != null) {
// GSAApplication.tableContract.setMember(null);
// }
if (OpenTableContract.getDefault().getOrderId() != -1) {
//获取订单数据
loadOrder(OpenTableContract.getDefault().getOrderId());
}
}
public void initMealData() {
mFoodGroupList = mModel.queryDB_FoodGroupList();
......@@ -129,6 +112,8 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
public void initAdapter() {
if (mSelectMealAdapter == null) {
// List<Food> foods = new ArrayList<>();
// foods.addAll(myOrderManage.getOrderFoodList());
mSelectMealAdapter = new SelectMealAdapter(IActivity, myOrderManage.getOrderFoodList(), this);
mRootView.setSelectFoodAdapter(mSelectMealAdapter);
}
......@@ -172,42 +157,23 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
});
}
public void loadOrder(int orderId) {
mModel.loadOrder(orderId)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<Object>(mErrorHandler) {
@Override
public void onNext(@NonNull Object info) {
// if (info != null && info.isSuccess()) {
//
// } else {
// }
}
});
}
public void createOrder() {
OrderRequest request = getCreateOrderRequest(getOrderFoodLists());
mModel.createOrder(request)
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(request));
mModel.createOrder(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseRespose>(mErrorHandler) {
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull BaseRespose info) {
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
mRootView.showMessage("送單成功");
IActivity.returnTableActivity(false);
IActivity.returnTableActivity(true);
} else {
mRootView.showMessage("送單失敗");
}
......@@ -215,23 +181,69 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
});
}
public void addOrderFood() {
OrderRequest request = getAddOrderFoodRequest(getOrderFoodLists());
/**
* 篩選出兩個list不同的對象
*
* @param listA
* @param listB
* @param <T>
* @return
*/
private <T> List<T> getDiff(List<T> listA, List<T> listB) {
List<T> diff = new ArrayList<>();
List<T> maxList = listA;
List<T> minList = listB;
if (listB.size() > listA.size()) {
maxList = listB;
minList = listA;
}
Map<T, Integer> map = new HashMap<>(maxList.size());
for (T t : maxList) {
map.put(t, 1);
}
for (T t : minList) {
if (map.get(t) != null) {
map.put(t, 2);
continue;
}
diff.add(t);
}
for (Map.Entry<T, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
diff.add(entry.getKey());
}
}
return diff;
}
mModel.addFood(request)
public void addOrderFood() {
// List<Food> foods = getDiff(MyOrderManage.getInstance().getOrderFoodList(), mSelectMealAdapter.getInfos());
List<Food> foods = MyOrderManage.getInstance().getOrderFoodList();
List<Food> newFoods = new ArrayList<>();
for (Food food : foods) {
if (food.getIsNew()) {
newFoods.add(food);
}
}
for (Food food : newFoods) {
food.setOrderId(MyOrderManage.getInstance().getOrderId());
}
List<OrderBean.OrderDetailsBean> orderBeans = OrderBean.transOrderDetails(newFoods);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(orderBeans));
mModel.addFood(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseRespose>(mErrorHandler) {
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull BaseRespose info) {
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
mRootView.showMessage("送單成功");
mRootView.launchActivity(new Intent(IActivity, MealStandActivity.class));
// mRootView.launchActivity(new Intent(IActivity, MealStandActivity.class));
mRootView.killMyself();
} else {
mRootView.showMessage("送單失敗");
}
......@@ -265,7 +277,7 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
}
public void sendOrder() {
if (OpenTableContract.getDefault().getOrderId() == -1) {
if (MyOrderManage.getInstance().getOrderId() == -1) {
createOrder();
} else {
addOrderFood();
......@@ -276,18 +288,12 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(IActivity);
dialogBuilder.setTitle("溫馨提示");
dialogBuilder.setMessage("是否確認刪除該食品?");
dialogBuilder.addAction("取消", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss();
deleteFood(id);
}
});
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss();
}
dialogBuilder.addAction("取消", (dialog, index) -> dialog.dismiss());
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialog.dismiss();
int deletePosition = mSelectMealAdapter.removeFoodItem();
mRootView.setMealRvScrollToPosition(deletePosition);
deleteFood(id);
});
dialogBuilder.create(R.style.QMUI_Dialog).show();
}
......@@ -302,7 +308,12 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
if (mSelectMealAdapter.getSelect_position() >= getOrderFoodLists().size()) {
return;
}
//未選擇食品時,設置默認選擇最後一個
if (mSelectMealAdapter.getSelect_position() == -1) {
if (getOrderFoodLists().size() > 0) {
mSelectMealAdapter.setSelectPosition(getOrderFoodLists().size() - 1);
}
}
Food deleteFood = getOrderFoodLists().get(mSelectMealAdapter.getSelect_position());
if (!deleteFood.isNew()) {
......@@ -314,9 +325,9 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
} else {
int deletePosition = mSelectMealAdapter.removeFoodItem();
mRootView.setMealRvScrollToPosition(deletePosition);
deleteFood(deleteFood.getId());
}
}
updateOrderFoodNumber();
}
......@@ -469,11 +480,13 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
Food foodBean = mFoodList.get(i);
foodBean.setNumber(0);
int iNumber = 0;
for (int j = 0; j < getOrderFoodLists().size(); j++) {
Food food = getOrderFoodLists().get(j);
if (food.isNew() && food.getId() == foodBean.getId()) {
iNumber = iNumber + food.getNumber();
foodBean.setNumber(iNumber);
if (getOrderFoodLists() != null) {
for (int j = 0; j < getOrderFoodLists().size(); j++) {
Food food = getOrderFoodLists().get(j);
if (food.isNew() && food.getId() == foodBean.getId()) {
iNumber = iNumber + food.getNumber();
foodBean.setNumber(iNumber);
}
}
}
}
......@@ -485,11 +498,13 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
Food foodBean = foodGroupList.get(i);
foodBean.setNumber(0);
int iNumber = 0;
for (int j = 0; j < getOrderFoodLists().size(); j++) {
Food food = getOrderFoodLists().get(j);
if (food.isNew() && food.getId() == foodBean.getId()) {
iNumber = iNumber + food.getNumber();
foodBean.setNumber(iNumber);
if (getOrderFoodLists() != null) {
for (int j = 0; j < getOrderFoodLists().size(); j++) {
Food food = getOrderFoodLists().get(j);
if (food.isNew() && food.getId() == foodBean.getId()) {
iNumber = iNumber + food.getNumber();
foodBean.setNumber(iNumber);
}
}
}
}
......@@ -499,10 +514,12 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
private String getOrderFoodNumber() {
int i = 0;
for (int j = 0; j < getOrderFoodLists().size(); j++) {
Food order = getOrderFoodLists().get(j);
if (order.isNew()) {
i = i + order.getNumber();
if (getOrderFoodLists() != null) {
for (int j = 0; j < getOrderFoodLists().size(); j++) {
Food order = getOrderFoodLists().get(j);
if (order.isNew()) {
i = i + order.getNumber();
}
}
}
return String.valueOf(i);
......@@ -524,14 +541,16 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
private List<OrderRequest.Request> foodBeanToFoodRequest(List<Food> foodList) {
List<OrderRequest.Request> requests = new ArrayList<>();
for (Food food : foodList) {
OrderRequest.Request request = new OrderRequest.Request();
request.setProductName(food.getFoodName());
request.setProductId(food.getId());
request.setNumber(food.getNumber());
request.setPrice(food.getPrice());
request.setLunchboxPrice(0);
requests.add(request);
if (foodList != null) {
for (Food food : foodList) {
OrderRequest.Request request = new OrderRequest.Request();
request.setProductName(food.getFoodName());
request.setProductId(food.getId());
request.setNumber(food.getNumber());
request.setPrice(food.getPrice());
request.setLunchboxPrice(0);
requests.add(request);
}
}
return requests;
}
......@@ -546,7 +565,6 @@ public class MealStandPresenter extends BasePresenter<MealStandContract.Model, M
return null;
}
public List<Food> getOrderFoodLists() {
return myOrderManage.getOrderFoodList();
}
......
package com.gingersoft.gsa.cloud.meal.mvp.presenter;
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Activity;
import android.app.Application;
import android.content.Intent;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.IComponentCallback;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.meal.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.OrderContentActivity;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.OrderPayActivity;
import com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.OrderTopFunctionAdapter;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
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.activity.OrderPayActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.OrderTopFunctionAdapter;
import com.gingersoft.gsa.cloud.ui.dialog.LoadingDialog;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.RxLifecycleUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
......@@ -26,17 +44,9 @@ import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderContentContract;
import com.jess.arms.utils.RxLifecycleUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* ================================================
......@@ -109,7 +119,8 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
printOrder(OpenTableContract.getDefault().getTableBean().getId());
break;
case 2:
mRootView.launchActivity(new Intent(IActivity, OrderPayActivity.class));
//結賬
mRootView.startActivityForResult(OrderContentActivity.BILL_CODE, OrderPayActivity.class, null);
break;
}
}
......@@ -130,18 +141,20 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
private void createOrder() {
OrderRequest request = getCreateOrderRequest(getOrderFoodLists());
mModel.createOrder(request)
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(request));
mModel.createOrder(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseRespose>(mErrorHandler) {
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull BaseRespose info) {
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
mRootView.sendSuccess();
mRootView.showMessage("送單成功");
mAppManager.killActivity(MealStandActivity.class);
mRootView.killMyself();
......@@ -153,22 +166,33 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
private void addOrderFood() {
OrderRequest request = getAddOrderFoodRequest(getOrderFoodLists());
mModel.addFood(request)
List<Food> foods = MyOrderManage.getInstance().getOrderFoodList();
List<Food> newFoods = new ArrayList<>();
for (Food food : foods) {
if (food.getIsNew()) {
newFoods.add(food);
}
}
for (Food food : newFoods) {
food.setOrderId(MyOrderManage.getInstance().getOrderId());
}
List<OrderBean.OrderDetailsBean> orderBeans = OrderBean.transOrderDetails(newFoods);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(orderBeans));
// RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(getOrderFoodLists()));
mModel.addFood(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseRespose>(mErrorHandler) {
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull BaseRespose info) {
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
mRootView.showMessage("送單成功");
mRootView.launchActivity(new Intent(IActivity, MealStandActivity.class));
mRootView.sendSuccess();
// mRootView.launchActivity(new Intent(IActivity, MealStandActivity.class));
} else {
mRootView.showMessage("送單失敗");
}
......@@ -194,10 +218,17 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
@Override
public void onNext(@NonNull BaseRespose info) {
if (info != null && info.isSuccess()) {
// CC.obtainBuilder("Component.Print")
// .setActionName("showPrintActivity")
// .build()
// .call();
CC.obtainBuilder("Component.Print")
.setActionName("print_order")
.build()
.callAsync((cc, result) -> {
if (result.isSuccess()) {
//打印成功
mRootView.printSuccess();
}
});
// mRootView.killMyself();
//打印
} else {
mRootView.showMessage("印單失敗!");
}
......@@ -206,7 +237,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
public void sendOrder() {
if (OpenTableContract.getDefault().getOrderId() == -1) {
if (MyOrderManage.getInstance().getOrderId() == -1) {
createOrder();
} else {
addOrderFood();
......@@ -226,7 +257,6 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
request.setPerson(OpenTableContract.getDefault().getTableBean().getPeopleNumber());
return request;
}
private OrderRequest getAddOrderFoodRequest(List<Food> foodList) {
OrderRequest request = new OrderRequest();
request.setOrderDetails(foodBeanToFoodRequest(foodList));
......@@ -246,4 +276,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
return requests;
}
}
package com.gingersoft.gsa.cloud.meal.mvp.presenter;
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.OrderTopFunctionAdapter;
import com.jess.arms.integration.AppManager;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderPayContract;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.RxLifecycleUtils;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderPayContract;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
/**
......@@ -56,6 +63,36 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
mRootView.setFoodAdapter(mSelectMealAdapter);
}
/**
* 修改訂單狀態
*
* @param //orderId 訂單號
* @param //person 人數
* @param statius 訂單狀態 4 已結賬
*/
public void updateOrderState(String statius) {
RequestBody requestBody = new FormBody.Builder()
.add("orderId", MyOrderManage.getInstance().getOrderId() + "")
.add("person", OpenTableContract.getDefault().getTableBean().getPeopleNumber() + "")
.add("status", statius)
.build();
mModel.updateOrderStatus(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(()-> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
if(baseResult.isSuccess()){
//結賬成功
mRootView.paySuccess();
}
}
});
}
}
......@@ -4,8 +4,7 @@ import android.app.Application;
import android.content.Context;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.base.utils.ViewUtils;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.TableAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.StateTableFragment;
......
......@@ -2,16 +2,19 @@ package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Application;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.app.GoldConstants;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.app.TableOperatTypeConstant;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BottomFunctionAdapter;
......@@ -212,18 +215,25 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
@Override
public void onNext(@NonNull BaseRespose respose) {
if (respose.isSuccess()) {
//設置當前開台數據
TableBean.DataBean openTableBean = getTableById(id);
OpenTableContract.getDefault().setTableBean(openTableBean);
CC.obtainBuilder("Component.Meal")
.setActionName("showMealStandActivity")
.build()
.call();
if (respose.getData() != null && respose.getData().getOrderDetails() != null) {
//緩存訂單信息
MyOrderManage.getInstance().setOrderBean(new OrderBean(respose.getData().getId(), respose.getData().getOrderNo(), respose.getData().getStatus(), respose.getData().getCreateTime()));
//緩存食品信息
List<Food> foods = BaseRespose.TransFoods(respose.getData().getOrderDetails());
for (Food food : foods) {
food.setIsNew(false);
}
MyOrderManage.getInstance().setOrderFoodList(foods);
} else {
MyOrderManage.getInstance().setOrderBean(null);
MyOrderManage.getInstance().setOrderFoodList(new ArrayList<>());
}
mRootView.startMealStandActivity();
} else {
mRootView.showMessage(respose.getErrMsg());
}
......@@ -297,7 +307,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
// break;
case TableOperatTypeConstant.init_table_3:
for (int i = 0; i < mTableList.size(); i++) {
if (mTableList.get(i).getStatus() == 1) {
if (mTableList.get(i).getUseStatus() == 1) {
filterTableBeanList.add(mTableList.get(i));
}
}
......@@ -366,7 +376,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
}
}
});
dialogBuilder.create(R.style.DialogTheme2).show();
dialogBuilder.create(R.style.MyDialogTheme2).show();
}
......@@ -386,6 +396,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
if (tableTimer == null) {
tableTimer = new GetTableTimer(GoldConstants.refreshTime * 1000, GoldConstants.refreshTime * 1000);
}
TableActivity.isRefreshData = true;
tableTimer.start();
}
......
package com.gingersoft.gsa.cloud.meal.mvp.ui.activity;
package com.gingersoft.gsa.cloud.table.mvp.ui.activity;
import android.app.Activity;
import android.content.Intent;
......@@ -16,19 +16,22 @@ import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.base.utils.ViewUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ViewUtils;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.meal.R2;
import com.gingersoft.gsa.cloud.meal.app.GoldConstants;
import com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.MyViewPagerAdapter;
import com.gingersoft.gsa.cloud.meal.di.component.DaggerMealStandComponent;
import com.gingersoft.gsa.cloud.meal.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.HorizontalGridViewAdpter;
import com.gingersoft.gsa.cloud.meal.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.app.GoldConstants;
import com.gingersoft.gsa.cloud.table.di.component.DaggerMealStandComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.table.mvp.presenter.MealStandPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.HorizontalGridViewAdpter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.MyViewPagerAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.ui.dialog.LoadingDialog;
import com.gingersoft.gsa.cloud.ui.view.LineGridView;
import com.gingersoft.gsa.cloud.ui.view.PagerSlidingTabStrip;
......@@ -38,9 +41,6 @@ import com.jess.arms.base.BaseActivity;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.meal.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.meal.mvp.presenter.MealStandPresenter;
import com.gingersoft.gsa.cloud.meal.R;
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
import org.simple.eventbus.EventBus;
......@@ -210,7 +210,8 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
private int mPageSize = 12;
//GridView作为一个View对象添加到ViewPager集合中
private List<View> viewPagerList;
private static final int FINISH = 101;
private static final int ORDER_CONTENT_CODE = 1002;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
......@@ -234,7 +235,6 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
@Override
public void initData(@Nullable Bundle savedInstanceState) {
initViewMap();
//初始化Plu模式
setPluMode();
......@@ -243,8 +243,6 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
mPresenter.initItemClickListener();
//初始化默认食品组
mPresenter.initMealData();
//获取订单数据
mPresenter.loadOrderBefore();
//搜索
keyView.setOnConfirmCallBack(inputText -> {
if (TextUtils.isEmpty(inputText))
......@@ -258,7 +256,7 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
TableBean.DataBean dataBean = OpenTableContract.getDefault().getTableBean();
if (dataBean != null) {
btn_table.setText(dataBean.getTableName());
btn_numberman.setText(dataBean.getPeopleNumber()+"");
btn_numberman.setText(dataBean.getPeopleNumber() + "");
}
}
......@@ -438,7 +436,7 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
mPresenter.sendOrder();
} else if (id == R.id.fl_order_content) {
Intent intent = new Intent(this, OrderContentActivity.class);
startActivity(intent);
startActivityForResult(intent, ORDER_CONTENT_CODE);//如果打印成功會回調
} else if (id == R.id.tv_no_save_return) {
returnTableActivity(true);
}
......@@ -508,7 +506,7 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
if (Integer.parseInt(number) > 0) {
OpenTableContract.getDefault().getTableBean().setPeopleNumber(Integer.parseInt(number));
}
btn_numberman.setText(number);
btn_numberman.setText("人數:" + number);
}
@Override
......@@ -518,6 +516,7 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
});
chooseNumberDialog.setCancelable(isNeedCancel);
}
chooseNumberDialog.show();
}
@Override
......@@ -750,4 +749,19 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
public HorizontalGridViewAdpter getFoodGroupGridViewAdapter() {
return mFoodGroupGridViewAdapter;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == ORDER_CONTENT_CODE){
//訂單內容回調
if(resultCode == Activity.RESULT_OK){
//打印成功
//結賬成功
//,關閉當前頁面
killMyself();
}
}
}
}
package com.gingersoft.gsa.cloud.meal.mvp.ui.activity;
package com.gingersoft.gsa.cloud.table.mvp.ui.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
......@@ -8,25 +9,24 @@ import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.base.utils.ViewUtils;
import com.gingersoft.gsa.cloud.meal.R2;
import com.gingersoft.gsa.cloud.meal.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.base.utils.view.ViewUtils;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerOrderContentComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.table.mvp.presenter.OrderContentPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.ui.dialog.LoadingDialog;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.meal.di.component.DaggerOrderContentComponent;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.meal.mvp.presenter.OrderContentPresenter;
import com.gingersoft.gsa.cloud.meal.R;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import org.simple.eventbus.EventBus;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......@@ -78,6 +78,7 @@ public class OrderContentActivity extends BaseActivity<OrderContentPresenter> im
private ChooseNumberDialog chooseNumberDialog;
public static final int BILL_CODE = 1002;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerOrderContentComponent //如找不到该类,请编译一下项目
......@@ -95,7 +96,6 @@ public class OrderContentActivity extends BaseActivity<OrderContentPresenter> im
@Override
public void initData(@Nullable Bundle savedInstanceState) {
QMUIDisplayHelper.cancelFullScreen(this);
initOrderDetail();
......@@ -292,4 +292,44 @@ public class OrderContentActivity extends BaseActivity<OrderContentPresenter> im
tv_total.setText("$" + total);
}
@Override
public void printSuccess() {
// Intent intent = new Intent();
// 设置返回码和返回携带的数据
if (OpenTableContract.getDefault() != null) {
//通知更新餐台状态
EventBus.getDefault().post(OpenTableContract.getDefault().getTableBean().getId(), "initTable_status_event");
}
setResult(Activity.RESULT_OK, null);
killMyself();
}
@Override
public void startActivityForResult(int Code, Class clazz, Intent intent) {
if (intent == null) {
intent = new Intent(mContext, clazz);
}
startActivityForResult(intent, Code);
}
@Override
public void sendSuccess() {
if (OpenTableContract.getDefault() != null) {
//通知更新餐台状态
EventBus.getDefault().post(OpenTableContract.getDefault().getTableBean().getId(), "initTable_status_event");
}
setResult(Activity.RESULT_OK, null);
killMyself();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == BILL_CODE){
if(resultCode == Activity.RESULT_OK){
setResult(Activity.RESULT_OK, null);
killMyself();
}
}
}
}
package com.gingersoft.gsa.cloud.meal.mvp.ui.activity;
package com.gingersoft.gsa.cloud.table.mvp.ui.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableContract;
import com.gingersoft.gsa.cloud.base.qmui.arch.Utils;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.base.utils.ViewUtils;
import com.gingersoft.gsa.cloud.meal.R2;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ViewUtils;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerOrderPayComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderPayContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BillMethodBean;
import com.gingersoft.gsa.cloud.table.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.table.mvp.presenter.OrderPayPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillMethodAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillMoneyAdapter;
import com.gingersoft.gsa.cloud.ui.dialog.LoadingDialog;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.meal.di.component.DaggerOrderPayComponent;
import com.gingersoft.gsa.cloud.meal.mvp.contract.OrderPayContract;
import com.gingersoft.gsa.cloud.meal.mvp.presenter.OrderPayPresenter;
import com.gingersoft.gsa.cloud.meal.R;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import com.qmuiteam.qmui.layout.QMUIButton;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import org.simple.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.OnClick;
......@@ -65,9 +79,24 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
TextView tv_whole;
@BindView(R2.id.tv_total)
TextView tv_total;
@BindView(R2.id.tv_owe_money)
TextView mTvOwnMoney;
@BindView(R2.id.btn_order_count)
Button btn_order_count;
@BindView(R2.id.rv_select_pay)
RecyclerView rvSelectedPay;
@BindView(R2.id.rv_pay)
RecyclerView rvPay;
@BindView(R2.id.btn_exact)
QMUIAlphaButton btn_exact;
@BindView(R2.id.btn_keypad)
QMUIAlphaButton btn_keypad;
//尚欠金額
private double ownMoney;
private List<BillMethodBean> billMoney;
private BillMoneyAdapter billMoneyAdapter;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
......@@ -90,9 +119,9 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
QMUIDisplayHelper.cancelFullScreen(this);
mPresenter.initAdapter();
initOrderDetail();
initBillMethod();
}
public void initOrderDetail() {
int foodCount = mPresenter.getFoodCout();
......@@ -106,11 +135,58 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
double total = mPresenter.getTotal();
tv_whole.setText("合計 $" + total);
tv_total.setText("$" + total);
// setTvWhole(total);
ownMoney = total;
setOwnMoney(ownMoney);
// setTvWhole(total);
// setTvTotal(total);
}
@OnClick({R2.id.btn_pay,R2.id.btn_table})
/**
* @param money 尚欠金額
*/
private void setOwnMoney(double money) {
if (money != 0) {
mTvOwnMoney.setText("-$" + money);
} else {
mTvOwnMoney.setText("$" + money);
}
}
public void initBillMethod() {
rvPay.setLayoutManager(new GridLayoutManager(mContext, 4));
//每一種結賬方式的金額
billMoney = new ArrayList<>();
//結賬方式
List<BillMethodBean> data = new ArrayList<>();
data.add(new BillMethodBean(1, "現金"));
BillMethodAdapter adapter = new BillMethodAdapter(data);
rvPay.setAdapter(adapter);
billMoneyAdapter = new BillMoneyAdapter(billMoney);
rvSelectedPay.setLayoutManager(new LinearLayoutManager(mContext));
rvSelectedPay.setAdapter(billMoneyAdapter);
adapter.setOnItemClickListener((adapter13, view, position) -> {
if (!billMoney.containsAll(data)) {
billMoney.add(data.get(position));
billMoneyAdapter.notifyDataSetChanged();
}
});
billMoneyAdapter.setOnItemChildClickListener((adapter12, view, position) -> {
if (view.getId() == R.id.iv_bill_delete) {
//刪除當前付款方式
ownMoney = MoneyUtil.sum(ownMoney, billMoney.get(position).getMoney());//還原尚欠金額;
billMoney.get(position).setMoney(0);
billMoney.remove(position);
billMoneyAdapter.notifyDataSetChanged();
setOwnMoney(ownMoney);
}
});
}
@OnClick({R2.id.btn_pay, R2.id.btn_table, R2.id.btn_sure_pay, R2.id.btn_exact, R2.id.btn_keypad})
public void onClick(View v) {
recordOperat(true);
......@@ -122,8 +198,25 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
int id = v.getId();
if (id == R.id.btn_pay) {
} else if(id == R.id.btn_table){
} else if (id == R.id.btn_table) {
killMyself();
} else if (id == R.id.btn_sure_pay) {
//確認結賬,修改訂單狀態為已結賬
if (ownMoney <= 0) {
mPresenter.updateOrderState("4");
} else {
ToastUtils.show(mContext, "尚欠" + ownMoney + "未選擇支付方式");
}
} else if (id == R.id.btn_exact) {
if (billMoney.size() > 0) {
billMoney.get(billMoney.size() - 1).setMoney(ownMoney);
ownMoney = 0;
billMoneyAdapter.notifyDataSetChanged();
setOwnMoney(MoneyUtil.sub(mPresenter.getTotal(), billMoney.get(billMoney.size() - 1).getMoney()));
}
} else if (id == R.id.btn_keypad) {
//顯示鍵盤
}
}
......@@ -168,7 +261,8 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.snackbarText(message);
ToastUtils.show(mContext, message);
// ArmsUtils.snackbarText(message);
}
@Override
......@@ -194,4 +288,14 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
rv_food.setAdapter(adapter);
}
@Override
public void paySuccess() {
if (OpenTableContract.getDefault() != null) {
//通知更新餐台状态
EventBus.getDefault().post(OpenTableContract.getDefault().getTableBean().getId(), "initTable_status_event");
}
showMessage("支付成功");
setResult(Activity.RESULT_OK, null);
killMyself();
}
}
......@@ -11,13 +11,13 @@ import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.app.GoldConstants;
import com.gingersoft.gsa.cloud.table.app.TableOperatTypeConstant;
import com.gingersoft.gsa.cloud.table.di.component.DaggerTableComponent;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BaseFragmentAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.AllTableFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.InputTableFragment;
......@@ -284,6 +284,11 @@ public class TableActivity extends BaseActivity<TablePresenter> implements Table
}
@Override
public void startMealStandActivity() {
startActivity(new Intent(this, MealStandActivity.class));
}
@Override
public void setOperatContentText(String contentText) {
tv_operat_content.setText(contentText);
}
......@@ -491,12 +496,12 @@ public class TableActivity extends BaseActivity<TablePresenter> implements Table
@Override
protected void onResume() {
super.onResume();
//清空食品數據
CC.obtainBuilder("Component.Meal")
.setActionName("clearOrderList")
.build()
.call();
// CC.obtainBuilder("Component.Meal")
// .setActionName("clearOrderList")
// .build()
// .call();
MyOrderManage.getInstance().clear();
}
@Override
......
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BillMethodBean;
import java.util.List;
import androidx.annotation.Nullable;
/**
* Created by Wyh on 2020/1/17.
*/
public class BillMethodAdapter extends BaseQuickAdapter<BillMethodBean, BaseViewHolder> {
public BillMethodAdapter(@Nullable List<BillMethodBean> data) {
super(R.layout.item_bill_method, data);
}
@Override
protected void convert(BaseViewHolder helper, BillMethodBean item) {
helper.setText(R.id.tv_bill_method_name, item.getName());
}
}
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter;
import android.view.View;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BillMethodBean;
import java.util.List;
import androidx.annotation.Nullable;
/**
* Created by Wyh on 2020/1/17.
*/
public class BillMoneyAdapter extends BaseQuickAdapter<BillMethodBean, BaseViewHolder> {
public View.OnClickListener onDeleteClickListenter;
public BillMoneyAdapter(@Nullable List<BillMethodBean> data) {
super(R.layout.item_bill_money, data);
}
public void setDeleteClickListenter(View.OnClickListener onClickListener){
this.onDeleteClickListenter = onClickListener;
}
@Override
protected void convert(BaseViewHolder helper, BillMethodBean item) {
helper.setText(R.id.tv_bill_method_name, item.getName() + ":");
helper.setText(R.id.tv_bill_money, "$" + item.getMoney() + "");
helper.addOnClickListener(R.id.iv_bill_delete);
}
}
......@@ -8,7 +8,7 @@ import android.widget.TextView;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter;
......
package com.gingersoft.gsa.cloud.meal.mvp.ui.adapter;
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.meal.R;
import com.gingersoft.gsa.cloud.table.R;
import com.jess.arms.utils.ArmsUtils;
import java.util.List;
import androidx.recyclerview.widget.GridLayoutManager;
public class HorizontalGridViewAdpter extends BaseAdapter {
private Context context;
......
package com.gingersoft.gsa.cloud.meal.mvp.ui.adapter;
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
import androidx.viewpager.widget.PagerAdapter;
......
package com.gingersoft.gsa.cloud.meal.mvp.ui.adapter;
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.meal.R;
import com.gingersoft.gsa.cloud.meal.R2;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
......
......@@ -10,10 +10,10 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.utils.ViewUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ViewUtils;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.utils.ArmsUtils;
......@@ -114,14 +114,14 @@ public class TableAdapter extends DefaultAdapter<TableBean.DataBean> {
// if (btn_showMain.getVisibility() != View.GONE) {
// btn_showMain.setVisibility(View.GONE);
// }
if (btn_table.getGravity() != Gravity.CENTER) {
btn_table.setGravity(Gravity.CENTER);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) btn_table.getLayoutParams();
lp.height = ItemColHeight;
btn_table.setLayoutParams(lp);
}
if (btn_table.getGravity() != Gravity.CENTER) {
btn_table.setGravity(Gravity.CENTER);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) btn_table.getLayoutParams();
lp.height = ItemColHeight;
btn_table.setLayoutParams(lp);
}
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) btn_table.getLayoutParams();
btn_table.setLayoutParams(lp);
// } else {
// if (btn_showMain.getVisibility() == View.VISIBLE) {
// return;
......@@ -166,33 +166,33 @@ public class TableAdapter extends DefaultAdapter<TableBean.DataBean> {
// if (item.getSplitStatus() != 0) {
// setBackGroundWork(item, "888", R.drawable.tablebutton_splite, R.drawable.tablebutton_splite_new, R.color.black);
// } else {
// if (item.getStatus() == true) {
// setBackGroundWork(item, "999", R.drawable.tablebutton_red, R.drawable.tablebutton_red_new, R.color.black);
// } else {
switch (item.getStatus()) {
case 0:
setBackGroundWork(item, "0", R.drawable.tablebutton_skyblue, R.drawable.tablebutton_skyblue_new, R.color.theme_white_color);
break;
case 1:
setBackGroundWork(item, "1", R.drawable.tablebutton_default, R.drawable.tablebutton_default_new, R.color.theme_white_color);
break;
case 2:
setBackGroundWork(item, "2", R.drawable.tablebutton_glassgreen, R.drawable.tablebutton_glassgreen_new, R.color.theme_black);
break;
case 3:
setBackGroundWork(item, "3", R.drawable.tablebutton_yellow, R.drawable.tablebutton_yellow_new, R.color.theme_black);
break;
case 4:
setBackGroundWork(item, "4", R.drawable.tablebutton_violet, R.drawable.tablebutton_violet_new, R.color.theme_black);
break;
case 5:
setBackGroundWork(item, "5", R.drawable.tablebutton_default, R.drawable.tablebutton_default_new, R.color.theme_white_color);
break;
case 6:
setBackGroundWork(item, "6", R.drawable.tablebutton_default, R.drawable.tablebutton_default_new, R.color.theme_white_color);
break;
if (item.getUseStatus() == 1) {
setBackGroundWork(item, "999", R.drawable.tablebutton_red, R.drawable.tablebutton_red_new, R.color.black);
} else {
switch (item.getStatus()) {
case 0:
setBackGroundWork(item, "0", R.drawable.tablebutton_skyblue, R.drawable.tablebutton_skyblue_new, R.color.theme_white_color);
break;
case 1:
setBackGroundWork(item, "1", R.drawable.tablebutton_default, R.drawable.tablebutton_default_new, R.color.theme_white_color);
break;
case 2:
setBackGroundWork(item, "2", R.drawable.tablebutton_glassgreen, R.drawable.tablebutton_glassgreen_new, R.color.theme_black);
break;
case 3:
setBackGroundWork(item, "3", R.drawable.tablebutton_yellow, R.drawable.tablebutton_yellow_new, R.color.theme_black);
break;
case 4:
setBackGroundWork(item, "4", R.drawable.tablebutton_violet, R.drawable.tablebutton_violet_new, R.color.theme_black);
break;
case 5:
setBackGroundWork(item, "5", R.drawable.tablebutton_default, R.drawable.tablebutton_default_new, R.color.theme_white_color);
break;
case 6:
setBackGroundWork(item, "6", R.drawable.tablebutton_default, R.drawable.tablebutton_default_new, R.color.theme_white_color);
break;
}
}
// }
}
private void initItemTableClick(TableBean.DataBean item, int position) {
......@@ -200,7 +200,7 @@ public class TableAdapter extends DefaultAdapter<TableBean.DataBean> {
@Override
public void onClick(View v) {
if(ViewUtils.isFastClick5()) {
if (ViewUtils.isFastClick5()) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(item, position);
}
......@@ -263,10 +263,7 @@ public class TableAdapter extends DefaultAdapter<TableBean.DataBean> {
}
private void setBackGroundWork(TableBean.DataBean item, String workstatu, int defaultMainback, int defaultChildBack, int defaultFontColor) {
String tableName = item.getTableName();
if (defaultMainback != -1) {
fl_container.setBackgroundDrawable(mContext.getResources().getDrawable(defaultMainback));
}
......@@ -289,25 +286,26 @@ public class TableAdapter extends DefaultAdapter<TableBean.DataBean> {
GradientDrawable d = (GradientDrawable) bgShape.getCurrent();
switch (workstatu) {
case "0":
d.setColor(ArmsUtils.getColor(mContext,R.color.app_color_blue));
d.setColor(ArmsUtils.getColor(mContext, R.color.app_color_blue));
break;
case "1":
d.setColor(ArmsUtils.getColor(mContext,R.color.red));
break;
case "2":
d.setColor(ArmsUtils.getColor(mContext,R.color.green_500));
d.setColor(ArmsUtils.getColor(mContext, R.color.green_500));
break;
case "3":
d.setColor(ArmsUtils.getColor(mContext,R.color.yellow_500));
d.setColor(ArmsUtils.getColor(mContext, R.color.yellow_500));
break;
case "4":
d.setColor(ArmsUtils.getColor(mContext,R.color.app_color_blue));
d.setColor(ArmsUtils.getColor(mContext, R.color.app_color_blue));
break;
case "5":
d.setColor(ArmsUtils.getColor(mContext,R.color.app_color_blue));
d.setColor(ArmsUtils.getColor(mContext, R.color.app_color_blue));
break;
case "6":
d.setColor(ArmsUtils.getColor(mContext,R.color.Violet));
d.setColor(ArmsUtils.getColor(mContext, R.color.Violet));
break;
case "999":
d.setColor(ArmsUtils.getColor(mContext, R.color.red));
break;
}
......
package com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.meal;
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal;
import android.content.Context;
import android.graphics.Color;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
......@@ -10,11 +9,11 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.bean.FoodBean;
import com.gingersoft.gsa.cloud.base.utils.ViewUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ViewUtils;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.meal.R;
import com.gingersoft.gsa.cloud.meal.R2;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.app.GoldConstants;
import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.utils.ArmsUtils;
......@@ -56,8 +55,8 @@ public class FoodAdapter extends DefaultAdapter<Food> {
this.mOrderNumberShowSize = 10;
this.mOrderNumberFontSize = 7;
this.mFoodFontSize = 14;
this.mColwidth = (int) ((DeviceUtils.getScreenWidth(context) / 5));
this.mColHeight = 80;
this.mColwidth = (int) ((DeviceUtils.getScreenWidth(context) / GoldConstants.DetailColCount));
this.mColHeight = 160;
this.mLayoutQtyHeight = 10;
}
......@@ -190,7 +189,7 @@ public class FoodAdapter extends DefaultAdapter<Food> {
tv_soldout.setMaxHeight(mOrderNumberShowSize);
tv_soldout.setMinHeight(mOrderNumberShowSize);
tv_soldout.setTextSize(mOrderNumberShowSize);
tv_soldout.setTextColor(android.graphics.Color.parseColor("#000000"));
tv_soldout.setTextColor(Color.parseColor("#000000"));
tv_soldout.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.ui_selector_white_rect));
tv_soldout.setMinWidth(20);
tv_soldout.setTextSize(10);
......
package com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.meal;
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal;
import android.content.Context;
import android.graphics.Color;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.bean.FoodBean;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.meal.R;
import com.gingersoft.gsa.cloud.meal.R2;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.DeviceUtils;
import java.util.List;
import androidx.recyclerview.widget.GridLayoutManager;
import butterknife.BindView;
......
package com.gingersoft.gsa.cloud.meal.mvp.ui.adapter.meal;
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal;
import android.content.Context;
import android.text.TextUtils;
......@@ -8,19 +8,20 @@ import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.meal.R2;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.meal.R;
import com.gingersoft.gsa.cloud.meal.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.meal.mvp.presenter.MealStandPresenter;
import com.gingersoft.gsa.cloud.meal.mvp.presenter.OrderContentPresenter;
import com.gingersoft.gsa.cloud.meal.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.mvp.model.constant.MealConstant;
import com.gingersoft.gsa.cloud.table.mvp.presenter.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;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.ArmsUtils;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
......@@ -86,7 +87,7 @@ public class SelectMealAdapter extends DefaultAdapter<Food> {
@Override
public int getItemCount() {
return mInfos.size();
return mInfos == null ? 0 : mInfos.size();
}
@Override
......@@ -301,7 +302,6 @@ public class SelectMealAdapter extends DefaultAdapter<Food> {
//设置Item选中颜色
if (!datasBean.isNew()) {
iv_lock.setVisibility(View.INVISIBLE);
rl_container.setBackgroundColor(ArmsUtils.getColor(mContext, R.color.theme_background_color));
tv_name.setTextColor(ArmsUtils.getColor(mContext, R.color.Grass_green));
......@@ -344,7 +344,7 @@ public class SelectMealAdapter extends DefaultAdapter<Food> {
}
}
private void setSelectPosition(int position) {
public void setSelectPosition(int position) {
resetSelected();
select_position = position;
mInfos.get(select_position).setIsSelected(true);
......@@ -352,9 +352,10 @@ public class SelectMealAdapter extends DefaultAdapter<Food> {
}
public int addFoodItem(Food food) {
select_position += 1;
if(mInfos == null){
mInfos = new ArrayList<>();
}
mInfos.add(new Food(food));
setSelectPosition(select_position);
......@@ -368,14 +369,12 @@ public class SelectMealAdapter extends DefaultAdapter<Food> {
public void removeAllNewFoodItem() {
for (int i = mInfos.size() - 1; i >= 0; i--) {
Food orderItem = mInfos.get(i);
if (orderItem.isNew()) {
if (orderItem != null && orderItem.isNew()) {
mInfos.remove(i);
notifyItemChanged(i);
if (orderItem != null) {
Food orderBean = mMealStandPresenter.getOrderFoodById(orderItem.getId());
if (orderBean != null) {
mMealStandPresenter.setUserMaxQty(orderBean);
}
Food orderBean = mMealStandPresenter.getOrderFoodById(orderItem.getId());
if (orderBean != null) {
mMealStandPresenter.setUserMaxQty(orderBean);
}
}
}
......@@ -403,10 +402,10 @@ public class SelectMealAdapter extends DefaultAdapter<Food> {
select_position -= 1;
}
}
mInfos.get(select_position).setIsSelected(true);
notifyItemChanged(select_position);
if (select_position != -1) {
mInfos.get(select_position).setIsSelected(true);
notifyItemChanged(select_position);
}
mMealStandActivity.showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
return select_position;
......
......@@ -10,7 +10,7 @@ import android.view.ViewGroup;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.di.component.DaggerAllTableComponent;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.base.DefaultAdapter;
......
......@@ -13,7 +13,7 @@ import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerInputTableComponent;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
......
......@@ -9,7 +9,7 @@ import android.view.View;
import android.view.ViewGroup;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerStateTableComponent;
import com.gingersoft.gsa.cloud.base.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.base.DefaultAdapter;
......
package com.gingersoft.gsa.cloud.meal.mvp.ui.widget;
package com.gingersoft.gsa.cloud.table.mvp.ui.widget;
import android.app.Dialog;
import android.content.Context;
......@@ -11,10 +11,11 @@ import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.meal.R;
import com.gingersoft.gsa.cloud.meal.R2;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.ThirdViewUtil;
import butterknife.BindView;
import butterknife.OnClick;
......@@ -105,7 +106,7 @@ public class ChooseNumberDialog {
private void initLanguage() {
btn_back.setText("返回");
ed_value.setHint( "請按鍵錄入數量");
ed_value.setHint("請按鍵錄入數量");
}
public void setValueHint(String hint) {
......@@ -114,59 +115,43 @@ public class ChooseNumberDialog {
@OnClick({R2.id.btn_0, R2.id.btn_1, R2.id.btn_2, R2.id.btn_3, R2.id.btn_4, R2.id.btn_5, R2.id.btn_6, R2.id.btn_7, R2.id.btn_8, R2.id.btn_9, R2.id.btn_back, R2.id.btn_ten_plus})
public void onClick(View v) {
switch (v.getId()) {
case R2.id.btn_0:
case R2.id.btn_1:
case R2.id.btn_2:
case R2.id.btn_3:
case R2.id.btn_4:
case R2.id.btn_5:
case R2.id.btn_6:
case R2.id.btn_7:
case R2.id.btn_8:
case R2.id.btn_9:
int i = Integer.parseInt(v.getTag().toString());
String values = String.valueOf(i);
if (currentTenPlus > 0) {
//有选择十整位
values = (currentTenPlus * 10) + "_" + values;
}
if (values.length() > 0 && Integer.parseInt(split_value(values)) > 99) {
//最大选择数99
values = "99";
ed_value.setText(values);
} else {
ed_value.setText(values);
}
if (!TextUtils.isEmpty(getInputNumber())) {
if (onClickListener != null) {
onClickListener.onComfirmClick(getInputNumber());
clearValueText();
}
cancel();
}
break;
case R2.id.btn_back:
if (onBackClickListener != null) {
onBackClickListener.OnBackClick();
}
cancel();
break;
// case R.id.ib_back_page:
// if (onClickListener != null) {
// onClickListener.onBackPage();
// }
// break;
case R2.id.btn_ten_plus:
currentTenPlus++;
ed_value.setText(currentTenPlus + "_");
break;
if (v.getId() == R.id.btn_0 || v.getId() == R.id.btn_1 || v.getId() == R.id.btn_2 ||
v.getId() == R.id.btn_3 || v.getId() == R.id.btn_4 || v.getId() == R.id.btn_5 ||
v.getId() == R.id.btn_6 || v.getId() == R.id.btn_7 || v.getId() == R.id.btn_8 ||
v.getId() == R.id.btn_9) {
inputNum(v);
} else if (v.getId() == R.id.btn_back) {
//返回
if (onBackClickListener != null) {
onBackClickListener.OnBackClick();
}
cancel();
} else if (v.getId() == R.id.btn_ten_plus) {
currentTenPlus++;
ed_value.setText(currentTenPlus + "_");
}
}
private void inputNum(View v) {
int i = Integer.parseInt(v.getTag().toString());
String values = String.valueOf(i);
if (currentTenPlus > 0) {
//有选择十整位
values = (currentTenPlus * 10) + "_" + values;
}
if (values.length() > 0 && Integer.parseInt(split_value(values)) > 99) {
//最大选择数99
values = "99";
ed_value.setText(values);
} else {
ed_value.setText(values);
}
if (!TextUtils.isEmpty(getInputNumber())) {
if (onClickListener != null) {
onClickListener.onComfirmClick(getInputNumber());
clearValueText();
}
cancel();
}
}
......
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_bill_method_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/shape_bill_method_pressed" android:state_checkable="true" />
<item android:drawable="@drawable/shape_bill_method_pressed" android:state_checked="true" />
<item android:drawable="@drawable/shape_bill_method_pressed" android:state_focused="true" />
<item android:drawable="@drawable/shape_bill_method_normal" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white"/>
<stroke android:color="@color/color_ccc" android:width="@dimen/dp_0_5"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_ccc"/>
<stroke android:color="@color/color_ccc" android:width="@dimen/dp_0_5"/>
</shape>
\ No newline at end of file
......@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/theme_background_color"
android:orientation="vertical">
<Chronometer
......@@ -92,11 +93,22 @@
</RelativeLayout>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_food"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="@null"
android:fadeScrollbars="false"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<TextView
android:id="@+id/tv_whole"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_10"
android:gravity="right|center_vertical"
android:paddingRight="@dimen/dp_10"
android:text="合計 $1328.0"
......@@ -104,104 +116,117 @@
android:textSize="@dimen/font_large"
android:textStyle="bold" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_food"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="@null"
android:fadeScrollbars="false"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
android:layout_height="@dimen/dp_50"
android:background="#006666"
android:gravity="center"
android:orientation="horizontal"
android:padding="@dimen/dp_5">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:orientation="horizontal"
android:gravity="center"
android:background="#006666"
android:padding="@dimen/dp_5">
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="match_parent"-->
<!-- android:text="Total:"-->
<!-- android:textSize="@dimen/font_large"-->
<!-- android:textStyle="bold"-->
<!-- android:layout_gravity="left"-->
<!-- android:textColor="@color/theme_white_color"-->
<!-- android:paddingRight="@dimen/dp_10"-->
<!-- android:gravity="right|center_vertical"/>-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="match_parent"-->
<!-- android:text="Total:"-->
<!-- android:textSize="@dimen/font_large"-->
<!-- android:textStyle="bold"-->
<!-- android:layout_gravity="left"-->
<!-- android:textColor="@color/theme_white_color"-->
<!-- android:paddingRight="@dimen/dp_10"-->
<!-- android:gravity="right|center_vertical"/>-->
<RelativeLayout
android:id="@+id/fl_order_content"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<TextView
android:id="@+id/tv_total_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Total:"
android:textSize="@dimen/font_large"
android:textStyle="bold"
android:layout_gravity="left"
android:textColor="@color/theme_white_color"
android:paddingRight="@dimen/dp_10"
android:gravity="right|center_vertical"/>
<Button
android:id="@+id/btn_order_count"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/ui_shape_red_oval"
android:singleLine="true"
android:gravity="center"
android:text=""
android:layout_margin="@dimen/dp_2"
android:layout_toRightOf="@+id/tv_total_text"
android:visibility="invisible"
android:textColor="@color/theme_white_color" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/fl_order_content"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<TextView
android:id="@+id/tv_total"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/tv_total_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="$1328.0"
android:layout_gravity="left"
android:gravity="right|center_vertical"
android:paddingRight="@dimen/dp_10"
android:text="Total:"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_large"
android:textStyle="bold"
android:layout_gravity="right"
android:textStyle="bold" />
<Button
android:id="@+id/btn_order_count"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="@dimen/dp_2"
android:layout_toRightOf="@+id/tv_total_text"
android:background="@drawable/ui_shape_red_oval"
android:gravity="center"
android:singleLine="true"
android:text=""
android:textColor="@color/theme_white_color"
android:paddingRight="@dimen/dp_10"
android:gravity="right|center_vertical"/>
</LinearLayout>
android:visibility="invisible" />
</RelativeLayout>
<TextView
android:id="@+id/tv_total"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:layout_weight="1"
android:gravity="right|center_vertical"
android:paddingRight="@dimen/dp_10"
android:text="$1328.0"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/font_large"
android:textStyle="bold" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_select_pay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:fadeScrollbars="false"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/yellow"
android:padding="@dimen/dp_5">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_select_pay"
android:layout_width="match_parent"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@null"
android:fadeScrollbars="false"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pay"
android:layout_width="match_parent"
android:text="尚欠:"
android:textSize="@dimen/dp_22"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_owe_money"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@null"
android:fadeScrollbars="false"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
android:layout_alignParentRight="true"
android:textColor="@color/red"
android:textSize="@dimen/dp_22"
android:textStyle="bold" />
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:fadeScrollbars="false"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/dp_1"
android:orientation="horizontal">
android:orientation="horizontal"
android:padding="@dimen/dp_1">
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_keypad"
......@@ -209,26 +234,26 @@
android:layout_height="match_parent"
android:background="#2F6666"
android:text="Keypad"
android:textColor="@color/theme_white_color"/>
android:textColor="@color/theme_white_color" />
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_exact"
android:layout_width="@dimen/dp_100"
android:layout_height="match_parent"
android:background="#315FC5"
android:layout_marginLeft="@dimen/dp_1"
android:background="#315FC5"
android:text="Exact"
android:textColor="@color/theme_white_color"/>
android:textColor="@color/theme_white_color" />
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_sure_pay"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginLeft="@dimen/dp_1"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_1"
android:layout_weight="1"
android:background="@color/Grass_green"
android:text="確認"
android:textColor="@color/theme_white_color"/>
android:textColor="@color/theme_white_color" />
</LinearLayout>
......
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_bill_method_name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10"
android:background="@drawable/selector_bill_method"
android:text="現金結賬"
android:textColor="@color/normal_color"
android:textSize="@dimen/dp_18" />
<?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="wrap_content"
android:orientation="horizontal"
android:padding="@dimen/dp_5"
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10">
<ImageView
android:id="@+id/iv_bill_delete"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="left"
android:src="@drawable/ic_delete_bill_method" />
<TextView
android:id="@+id/tv_bill_method_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:text="Visa:"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_22"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_bill_money"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="$3826.0"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_22"
android:textStyle="bold" />
</LinearLayout>
......@@ -39,8 +39,8 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingLeft="@dimen/dp_5"
android:gravity="center_vertical"
android:padding="@dimen/dp_5"
android:background="#0E655F">
<TextView
......
......@@ -11,6 +11,7 @@
android:layout_marginRight="1px"
android:layout_marginTop="1px"
android:text="food"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@drawable/meal_selector_food_backgroup" />
......@@ -50,8 +51,8 @@
<ImageView
android:id="@+id/iv_qtySold"
android:layout_width="40dp"
android:layout_height="20dp"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_20"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_gravity="right"
......
package com.gingersoft.cloud.gsa;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}
\ No newline at end of file
......@@ -68,7 +68,6 @@ dependencies {
addComponent 'main'
addComponent 'download-data'
addComponent 'table-mode'
addComponent 'mealstand-mode'
addComponent 'print-module'
annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]
......
......@@ -15,6 +15,7 @@
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/user_login_name"
android:networkSecurityConfig="@xml/network_android"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
......
......@@ -68,16 +68,18 @@ public class LoginPresenter extends BasePresenter<LoginContract.Model, LoginCont
public void login(String account, String pwd) {
// RequestBody requestBody = new FormBody.Builder()
// .add("userName", account.trim() + "")
// .add("passWord", pwd.trim() + "")
// .build();
RequestBody requestBody = new FormBody.Builder()
.add("userName", "admin")
.add("passWord", "123456")
.build();
RequestBody requestBody;
if (account.equals("")) {
requestBody = new FormBody.Builder()
.add("userName", "admin")
.add("passWord", "123456")
.build();
} else {
requestBody = new FormBody.Builder()
.add("userName", account.trim() + "")
.add("passWord", pwd.trim() + "")
.build();
}
mModel.login(requestBody)
.subscribeOn(Schedulers.io())
......
......@@ -101,7 +101,7 @@
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_marginRight="10dp"
android:background="@color/theme_color"
android:background="@drawable/shape_app_btn"
android:gravity="center"
android:padding="10dp"
android:text="登錄"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment