Commit d1f85c82 by Wyh

Merge remote-tracking branch 'origin/dev' into dev

parents 2a495b3e 8d5d9976
/build
\ No newline at end of file
ext.mainApp = true //设置为true,表示此module为主app module,一直以application方式编译
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'com.didi.dokit'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
applicationId 'com.gingersoft.gsa.cloud'
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
multiDexEnabled true
// ndk{
// abiFilters "armeabi-v7a"
// }
}
resourcePrefix "app"
buildTypes {
debug {
buildConfigField "boolean", "LOG_DEBUG", "true"
buildConfigField "boolean", "USE_CANARY", "true"
minifyEnabled false
proguardFiles 'proguard.cfg'
}
release {
buildConfigField "boolean", "LOG_DEBUG", "false"
buildConfigField "boolean", "USE_CANARY", "false"
minifyEnabled false
zipAlignEnabled false
proguardFiles 'proguard.cfg'
}
}
lintOptions {
abortOnError false
}
dataBinding {
enabled = true
}
//修改生成的apk名字
applicationVariants.all { variant ->
variant.outputs.all {
def fileName
def date = new Date()
def formattedDate = date.format('yyyy-MM-dd')
if (variant.buildType.name == 'release') {
fileName = "${formattedDate}_GSA-Cloud_${variant.mergedFlavor.versionName}_正式版_.apk"
} else if (variant.buildType.name == 'Test') {
fileName = "${formattedDate}_GSA-Cloud_${variant.mergedFlavor.versionName}_測試版_.apk"
} else if (variant.buildType.name == 'debug') {
fileName = "${formattedDate}_GSA-Cloud_${variant.mergedFlavor.versionName}_debug_.apk"
}
outputFileName = fileName
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
\ No newline at end of file
package com.example.gsa_cloud2;
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.example.gsa_cloud2", appContext.getPackageName());
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gsa_cloud2">
<!-- <application-->
<!-- android:allowBackup="true"-->
<!-- android:icon="@mipmap/ic_launcher"-->
<!-- android:label="@string/app_name"-->
<!-- android:roundIcon="@mipmap/ic_launcher_round"-->
<!-- android:supportsRtl="true"-->
<!-- android:theme="@style/AppTheme">-->
<!-- <activity android:name=".MainActivity">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
<!-- </application>-->
</manifest>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
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="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>
<?xml version="1.0" encoding="utf-8"?>
<LinerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinerLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">GSA-Cloud2</string>
</resources>
\ No newline at end of file
<resources>
<!-- &lt;!&ndash; Base application theme. &ndash;&gt;-->
<!-- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">-->
<!-- &lt;!&ndash; Customize your theme here. &ndash;&gt;-->
<!-- <item name="colorPrimary">@color/colorPrimary</item>-->
<!-- <item name="colorPrimaryDark">@color/colorPrimaryDark</item>-->
<!-- <item name="colorAccent">@color/colorAccent</item>-->
<!-- </style>-->
</resources>
\ No newline at end of file
package com.example.gsa_cloud2;
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
......@@ -166,7 +166,7 @@ class ComponentManager {
//异步调用,放到线程池中运行
if (cc.isAsync()) {
if (CC.VERBOSE_LOG) {
CC.verboseLog(callId, "put into thread pool");
CC.verboseLog(callId, "put into thread po ol");
}
CC_THREAD_POOL.submit(processor);
//异步调用时此方法返回null,CCResult通过callback回调
......
......@@ -123,7 +123,7 @@ dependencies {
addComponent 'component-delivery-pick'
addComponent 'component-manager'
addComponent 'component-coldchain'
addComponent 'component-supply-chain'
// addComponent 'component-supply-chain'
addComponent 'component-webview'
addComponent 'component-scan'
addComponent 'component-pay'
......
......@@ -3,23 +3,63 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.gingersoft.gsa.cloud.login">
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:resizeable="true"
android:smallScreens="true" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission
android:name="android.permission.ACCESS_MOCK_LOCATION"
tools:ignore="MockLocation" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--相机权限-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 使用照相机权限 -->
<uses-permission android:name="android.permission.REORDER_TASKS" />
<!-- 自动聚焦权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!--相机权限-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!--获取Activity任务栈 权限-->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<application
android:name="com.gingersoft.gsa.cloud.app.GsaCloudApplication"
android:allowBackup="true"
......@@ -27,13 +67,24 @@
android:label="@string/user_login_name"
android:maxAspectRatio="2.4"
android:networkSecurityConfig="@xml/network_android"
android:requestLegacyExternalStorage="true"
android:resizeableActivity="true"
android:roundIcon="@mipmap/ic_launcher"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:label">
<!--适配android 7.0文件访问 -->
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.gingersoft.gsa.cloud.login"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<activity
android:name=".mvp.ui.activity.mvp.ui.activity.WelcomeActivity"
android:launchMode="singleTop"
......@@ -46,7 +97,7 @@
</intent-filter>
</activity>
<!-- HywebPOS支付頁 -->
<!-- HywebPOS支付頁 -->
<activity
android:name="com.etps.aca.lib.activity.CommandActivity"
android:exported="true" />
......@@ -64,6 +115,7 @@
<activity
android:name=".mvp.ui.activity.mvp.ui.activity.ChooseRestaurantActivity"
android:screenOrientation="portrait" />
<meta-data
android:name="com.gingersoft.gsa.cloud.common.config.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
......@@ -85,16 +137,6 @@
android:name="notch.config"
android:value="portrait|landscape" />
<!--适配android 7.0文件访问 -->
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.gingersoft.gsa.cloud.login"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
</manifest>
......@@ -2,6 +2,13 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.gsa.cloud.login">
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<application
android:name="com.gingersoft.gsa.cloud.app.GsaCloudApplication"
android:allowBackup="true"
......@@ -54,5 +61,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<!--获取Activity任务栈 权限-->
<uses-permission android:name="android.permission.GET_TASKS" />
</manifest>
package com.gingersoft.gsa.cloud.login;
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.etps.aca.lib.activity.CommandActivity;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.ChooseRestaurantActivity;
......@@ -42,6 +46,9 @@ public class ComponentLogin implements IComponent {
case ComponentAction.Login.OPEN_LOGIN:
openLoginActivity(cc);
break;
case ComponentAction.Login.OPEN_INIT_HYWEB_PAGE:
hywebOpenActivity();
break;
case "getInfo":
getInfo(cc);
break;
......@@ -82,4 +89,9 @@ public class ComponentLogin implements IComponent {
CC.sendCCResult(cc.getCallId(), CCResult.success());
}
private void hywebOpenActivity(){
Intent intent = new Intent(GsaCloudApplication.getAppContext(),LoginActivity.class);
GsaCloudApplication.getAppContext().startActivity(intent);
}
}
package com.gingersoft.gsa.cloud.login.mvp.presenter;
import android.app.Application;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.oaId.DeviceID;
import com.gingersoft.gsa.cloud.common.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.login.R;
import com.gingersoft.gsa.cloud.login.mvp.contract.LoginContract;
......@@ -68,6 +71,10 @@ public class LoginPresenter extends BaseLoginPresenter<LoginContract.Model, Logi
PermissionUtil.externalStorage(new PermissionUtil.RequestPermission() {
@Override
public void onRequestPermissionSuccess() {
if (TextUtils.isEmpty(DeviceID.getDeviceId())) {
//獲取權限成功重新獲取deviceId
GsaCloudApplication.initDeviceId();
}
}
@Override
......@@ -78,6 +85,8 @@ public class LoginPresenter extends BaseLoginPresenter<LoginContract.Model, Logi
@Override
public void onRequestPermissionFailureWithAskNeverAgain(List<String> permissions) {
mRootView.showMessage(LanguageUtils.get_language_system(mApplication, "external.storage.permission.hint", ArmsUtils.getString(mApplication, R.string.queue_write_external_storage_permission_hint)));
mRootView.killMyself();
}
}, new RxPermissions(IAcitivty), mErrorHandler);
}
......
......@@ -36,8 +36,10 @@ import com.gingersoft.gsa.cloud.login.mvp.ui.adapter.GuideAdapter;
import com.gingersoft.gsa.cloud.ui.widget.Indicator.UIndicator;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
......@@ -80,6 +82,11 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
ScaleAnimation animation = new ScaleAnimation(1.0f, 1.06f, 1.0f, 1.06f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setDuration(2000);
......
......@@ -9,7 +9,7 @@
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.NewMainActivity"
android:launchMode="singleTask" />
android:launchMode="singleTop" />
<activity
android:name=".mvp.ui.activity.ExpandListActivity"
android:screenOrientation="portrait" />
......
......@@ -18,7 +18,9 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.menu.ShellActivity" />
<activity android:name=".mvp.ui.activity.NewMainActivity" />
<activity
android:name=".mvp.ui.activity.NewMainActivity"
android:launchMode="singleTop" />
<activity android:name=".mvp.ui.activity.ExpandListActivity" />
<activity android:name=".mvp.ui.activity.RestaurantQrCodeActivity" />
<activity android:name=".mvp.ui.activity.LanguageActivity" />
......
package com.gingersoft.gsa.cloud.main;
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.IComponent;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.common.function.FModule;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.NewMainActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.SettlementReportActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.menu.FoodMenuManageActivity;
import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.ArmsUtils;
public class ComponentMain implements IComponent {
......@@ -33,10 +39,11 @@ public class ComponentMain implements IComponent {
new FModule("main/manager/bill", R.drawable.ic_meals_menu_management, R.drawable.ic_meals_menu_management_close),
new FModule("main/manager/table", R.drawable.ic_dining_table_management, R.drawable.ic_dining_table_management_close),
new FModule("main/manager/printer", R.drawable.ic_print_management, R.drawable.ic_print_management_close),
new FModule("main/manager/printQuery", R.drawable.ic_kitchen_print_query, R.drawable.ic_kitchen_print_query),
new FModule("main/manager/pay", R.drawable.ic_pay_management, R.drawable.ic_pay_management_close),
new FModule("main/manager/discout", R.drawable.ic_discount_management, R.drawable.ic_discount_management_close),
new FModule("main/manager/soldoutCtr", R.drawable.ic_sell_off_manger, R.drawable.ic_sell_off_manger),
new FModule("main/manager/qrCode", R.drawable.ic_discount_management, R.drawable.ic_discount_management_close)
new FModule("main/manager/qrCode", R.drawable.ic_qr_code, R.drawable.ic_qr_code)
};
/**
* 首頁- 員工管理
......@@ -67,6 +74,7 @@ public class ComponentMain implements IComponent {
*/
@Override
public boolean onCall(CC cc) {
Context context = cc.getContext();
String actionName = cc.getActionName();
switch (actionName) {
case "showMainActivity":
......
......@@ -37,10 +37,11 @@ public class FunctionMain {
new FModule(MANAGER_GROUP + "bill", R.drawable.ic_meals_menu_management, R.drawable.ic_meals_menu_management_close),
new FModule(MANAGER_GROUP + "table", R.drawable.ic_dining_table_management, R.drawable.ic_dining_table_management_close),
new FModule(MANAGER_GROUP + "printer", R.drawable.ic_print_management, R.drawable.ic_print_management_close),
new FModule(MANAGER_GROUP + "printQuery", R.drawable.ic_kitchen_print_query, R.drawable.ic_kitchen_print_query),
new FModule(MANAGER_GROUP + "pay", R.drawable.ic_pay_management, R.drawable.ic_pay_management_close),
new FModule(MANAGER_GROUP + "discout", R.drawable.ic_discount_management, R.drawable.ic_discount_management_close),
new FModule(MANAGER_GROUP + "soldoutCtr", R.drawable.ic_sell_off_manger, R.drawable.ic_sell_off_manger),
new FModule(MANAGER_GROUP + "qrCode", R.drawable.ic_discount_management, R.drawable.ic_discount_management_close)
new FModule(MANAGER_GROUP + "qrCode", R.drawable.ic_qr_code, R.drawable.ic_qr_code)
};
/**
......
......@@ -42,5 +42,9 @@ public interface NewMainContract {
Observable<Object> clearHeartbeat(RequestBody requestBody);
Observable<BaseResult> addSettlementOperation();
Observable<BaseResult> updateSettlementOperation(RequestBody requestBody);
}
}
......@@ -73,4 +73,16 @@ public class NewMainModel extends BaseModel implements NewMainContract.Model {
return mRepositoryManager.obtainRetrofitService(MainService.class)
.clearHeartbeat(requestBody);
}
@Override
public Observable<BaseResult> addSettlementOperation() {
return mRepositoryManager.obtainRetrofitService(MainService.class)
.addSettlementOperation();
}
@Override
public Observable<BaseResult> updateSettlementOperation(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(MainService.class)
.updateSettlementOperation(requestBody);
}
}
\ No newline at end of file
......@@ -40,4 +40,14 @@ public interface MainService {
@GET("restaurant/getUrlInfo" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<RestaurantQrBean> getRestaurantQrCode(@Query("restaurantId") String restaurantId);
@POST("SystemButtonLanguage/getLanguageByBrandId" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getLanguageByBrandId(@Body RequestBody requestBody);
@POST("posPay/addOperation" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> addSettlementOperation();
@POST("posPay/updateOperation" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> updateSettlementOperation(@Body RequestBody requestBody);
}
......@@ -8,11 +8,15 @@ import android.text.TextUtils;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.common.webview.WebviewHelper;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.main.mvp.contract.NewMainContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.CheckVersionRequest;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.NewMainActivity;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
......@@ -157,6 +161,95 @@ public class NewMainPresenter extends BasePresenter<NewMainContract.Model, NewMa
});
}
public void addSettlementOperation(int restaurantId) {
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId",String.valueOf(restaurantId))
.build();
mModel.addSettlementOperation()
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("調起POS清機中..."))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
if (info.getData() != null) {
PosPay.settlement(IActivity, IActivity, new OnPosActionListener() {
@Override
public void onPosSuccess(HywebPosResponse response) {
mRootView.showMessage("清機成功!");
updateSettlementOperation(restaurantId, GsonUtils.GsonString(response),1);
}
@Override
public void onPosException(Exception e) {
mRootView.showMessage("清機Exception :"+e.getMessage());
updateSettlementOperation(restaurantId, e.getMessage(),0);
}
@Override
public void onPosInvalid(String e) {
mRootView.showMessage(e);
updateSettlementOperation(restaurantId, e,2);
}
@Override
public void onUpdateStatusSuccess(HywebPosResponse response) {
}
@Override
public void onUpdateStatusError(Throwable e) {
}
});
}
} else {
mRootView.showMessage("調起POS清機失敗");
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.showMessage("調起POS清機失敗: "+t.getMessage());
}
});
}
public void updateSettlementOperation(int restaurantId,String content,int status) {
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId",String.valueOf(restaurantId))
.add("content",content)
.add("status",String.valueOf(status))
.build();
mModel.updateSettlementOperation(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(null))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
mRootView.showMessage("更新清機狀態成功");
}else {
mRootView.showMessage("更新清機狀態無效");
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.showMessage("更新清機狀態失敗: "+t.getMessage());
}
});
}
public void clearHeartbeat(){
RequestBody requestBody = new FormBody.Builder()
......
......@@ -7,6 +7,7 @@ import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.gingersoft.gsa.cloud.common.config.LoganConfig
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
import com.gingersoft.gsa.cloud.common.utils.FileUtils
import com.gingersoft.gsa.cloud.main.R
......@@ -26,10 +27,14 @@ class LookLogActivity : AppCompatActivity() {
log_top_bar.setBackgroundColor(ContextCompat.getColor(this, R.color.theme_color))
val file = File(FileUtils.ERRORLOG_PATH)
// val file = File((getExternalFilesDir(null)!!.absolutePath
// + File.separator + LoganConfig.FILE_NAME))
val files = file.listFiles()
files?.let {
val ml = ArrayList<File>()
for(i in files.size-1 downTo 0){
for (i in files.size - 1 downTo 0) {
ml.add(files[i])
}
rv_log.layoutManager = LinearLayoutManager(this)
......
......@@ -33,6 +33,7 @@ import com.gingersoft.gsa.cloud.common.core.user.UserContext;
import com.gingersoft.gsa.cloud.common.function.FunctionManager;
import com.gingersoft.gsa.cloud.common.function.jump.ActivityJumpBean;
import com.gingersoft.gsa.cloud.common.function.jump.ActivityJumpStrategy;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
......@@ -224,13 +225,14 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
if (BuildConfig.DEBUG) {
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "複製Token"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "查看日誌"));
// mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "查看日誌"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_mall_center, "商城中心"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_about_us, "關於我們"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_password, "修改密碼"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "設置"));
}
// mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "查看日誌"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "查看日誌"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "上傳日誌"));
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_settlement_report, "清機"));
if (BuildConfig.DEBUG) {
mainSideMenuBeans.add(new MainSideMenuBean(R.drawable.ic_setting, "切換環境"));
......@@ -265,6 +267,9 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
case "查看日誌":
launchActivity(new Intent(mContext, LookLogActivity.class));
break;
case "上傳日誌":
LoganManager.uploadLog(mContext, true);
break;
}
});
}
......@@ -284,11 +289,11 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
}
List<Function> managerFuncations = FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.main.class, ComponentMain.main.manager, "manager");
managerFuncations.add(new Function(171, 163, 5, "二維碼", R.drawable.ic_qr_code, 0));
managerFuncations.add(new Function(172, 163, 5, "N5清機", R.drawable.ic_expand_list, 0));
managerFuncations.add(new Function(171, 163, 5, "配置列表", R.drawable.ic_expand_list, 0));
managerFuncations.add(new Function(171, 163, 5, "廚房打印查詢", R.drawable.ic_kitchen_print_query, 0));
managerFuncations.add(new Function(171, 163, 5, "餐牌管理", R.drawable.ic_food_menu_manger, 0));
managerFuncations.add(new Function(171, 163, 5, "採購", R.drawable.ic_purchase, 0));
// managerFuncations.add(new Function(171, 163, 5, "廚房打印查詢", R.drawable.ic_kitchen_print_query, 0));
// managerFuncations.add(new Function(171, 163, 5, "餐牌管理", R.drawable.ic_food_menu_manger, 0));
// managerFuncations.add(new Function(171, 163, 5, "採購", R.drawable.ic_purchase, 0));
if (managerFuncations.size() > 0) {
functions.addAll(managerFuncations);
......@@ -367,6 +372,9 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
private void functionClick(String name, int status) {
switch (name) {
case "N5清機":
mPresenter.addSettlementOperation(RestaurantInfoManager.newInstance().getRestaurantId());
break;
case "餐檯模式":
CC.obtainBuilder(ComponentName.COMPONENT_TABLE)
.setActionName("showTableActivity")
......
......@@ -3,7 +3,9 @@
package="com.gingersoft.gsa.cloud.pay">
<application>
<activity android:name=".mvp.ui.activity.PayResultActivity" />
<activity
android:name=".mvp.ui.activity.PayResultActivity"
android:launchMode="singleTop"/>
</application>
</manifest>
\ No newline at end of file
......@@ -11,7 +11,9 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.PayResultActivity" />
<activity
android:name=".mvp.ui.activity.PayResultActivity"
android:launchMode="singleTop"/>
<meta-data
android:name="com.gingersoft.gsa.cloud.common.config.globalconfig.GlobalConfiguration"
......
......@@ -7,6 +7,7 @@ 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.component.ComponentName;
import com.jess.arms.utils.ArmsUtils;
import com.joe.print.mvp.print.service.PrjService;
import com.joe.print.mvp.ui.activity.PrintActivity;
import com.joe.print.mvp.ui.activity.PrinterListActivity;
......@@ -35,6 +36,9 @@ public class PrintComponent implements IComponent {
public boolean onCall(CC cc) {
String actionName = cc.getActionName();
switch (actionName) {
case "killPrintActivity":
break;
case "showPrintActivity":
openActivity(cc);
break;
......
......@@ -19,6 +19,7 @@ import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.print.bean.PrintBillContent;
import com.gingersoft.gsa.cloud.print.bean.base.PrintBillItem;
import com.gingersoft.gsa.cloud.print.bean.base.PrintFoodItem;
import com.joe.print.mvp.model.bean.BillingBean;
import com.joe.print.mvp.model.bean.HtmlLable;
import com.joe.print.mvp.print.common.HtmlContract;
......@@ -72,53 +73,6 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
pritContent[i] = stringBuilder;
}
return pritContent;
// DoshokuOrder doshokuOrder = DoshokuOrder.getInstance();
// ShoppingCart shoppingCart = doshokuOrder.getShoppingCart();
//
// List<OrderDetail> foodList = shoppingCart.getOrderCommodityList();
// TableBean.DataBean tableBean = doshokuOrder.getOpenTableInfo();
//
// StringBuilder payInfo = new StringBuilder();
// for (PayMethod payMethod : doshokuOrder.getBillMoney()) {
// payInfo.append(payMethod.getPayName() + " ").append(payMethod.getPayMoney());
// }
//
// StringBuilder memberIntegerInfo = new StringBuilder();
// OrderDetails.DataBean data = getOrderMemberInfo();
// if (data.getAddPoints() != 0 || data.getOldPoints() != 0 || data.getAddPoints() != 0) {
// memberIntegerInfo.append(getPLable("本次積分:" + data.getAddPoints(), HTML_PRINT_GRAVITY_LEFT))
// .append(getPLable("結餘積分:" + data.getNowPoints(), HTML_PRINT_GRAVITY_LEFT))
// .append(getPLable("上次積分:" + data.getOldPoints(), HTML_PRINT_GRAVITY_LEFT));
// //名稱中間替換為*號
// if (data.getMEMBER_NAME() != null && data.getMEMBER_NAME().length() > 0) {
// memberIntegerInfo.append(getPLable("會員名稱:" + getReplaceAfter(data.getMEMBER_NAME()), HTML_PRINT_GRAVITY_LEFT));
// }
// if (data.getPHONE() != null && data.getPHONE().length() > 0) {
// memberIntegerInfo.append(getPLable("會員電話:" + getReplaceAfter(data.getPHONE()), HTML_PRINT_GRAVITY_LEFT));
// }
// }
//
// String stringBuilder = "<html><body>" +
// getHtmlPrintHeadInfo() +
// getHtmlPrintHeadOrderInfo(tableBean) +
// generateHtmlFoodInfo(foodList) +
// getHtmlBillInfo() +
// getWholeLine() +
// getPLable(payInfo.toString(), HTML_PRINT_GRAVITY_LEFT) +
// getWholeLine() +
// getPLable(memberIntegerInfo.toString(), HTML_PRINT_GRAVITY_LEFT);
//
// String integralQrCode = doshokuOrder.getIntegralQrcode();
// if (!TextUtils.isEmpty(integralQrCode) && (boolean) RestaurantExpandInfoUtils.getValue(ExpandConstant.ToPrintQRCode, false)) {
// stringBuilder += getPLable("請掃描二維碼", HTML_PRINT_GRAVITY_CENTER) +
// getHtmlQrCode(doshokuOrder.getIntegralQrcode()) +
// getPLable("《追加積分到個人賬戶》", HTML_PRINT_GRAVITY_CENTER);
// }
// stringBuilder += "</body></html>";
// String[] pritContent = new String[1];
// pritContent[0] = stringBuilder;
// return pritContent;
}
private String getHtmlContent(PrinterDeviceBean deviceBean) {
......@@ -235,13 +189,6 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
private Bitmap getBitmap(Context mContext, PrinterDeviceBean deviceBean) {
DoshokuOrder doshokuOrder = DoshokuOrder.getInstance();
ShoppingCart shoppingCart = doshokuOrder.getShoppingCart();
List<OrderDetail> foodList = shoppingCart.getOrderCommodityList();
TableBean.DataBean tableBean = doshokuOrder.getOpenTableInfo();
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
......@@ -250,28 +197,28 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
layout.addView(getLine(mContext));
//訂單信息
String tableName = "餐檯:" + tableBean.getTableName();
String peopleNum = "人數:" + doshokuOrder.getOpenTableInfo().getPerson();
String tableName = "餐檯:" + mPrintBillContent.getTableName();
String peopleNum = "人數:" + mPrintBillContent.getPerson();
String orderNum = "單號:";
if (TextUtil.isNotEmptyOrNullOrUndefined(doshokuOrder.getOrderNo())) {
orderNum = "單號:" + doshokuOrder.getOrderNo();
if (TextUtil.isNotEmptyOrNullOrUndefined(mPrintBillContent.getOrderNo())) {
orderNum = "單號:" + mPrintBillContent.getOrderNo();
}
String createTime = "日期:" + TimeUtils.parseTimeRepeat(tableBean.getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT);
String createTime = "日期:" + TimeUtils.parseTimeRepeat(mPrintBillContent.getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT);
layout.addView(getDiningTableOrderInfo(mContext, tableName, peopleNum, orderNum, createTime));
layout.addView(getLine(mContext));
//食品信息
layout.addView(getDiningFoodList(mContext, foodList, deviceBean, 1, true));
layout.addView(getDiningFoodList(mContext, mPrintBillContent.getFoodItemList(), deviceBean, 1, true));
layout.addView(getHalfLine(mContext));
//訂單金額信息
List<BillingBean> billingBeans = new ArrayList<>();
//添加合計項
billingBeans.add(new BillingBean("合計", shoppingCart.getWholeAmount()));
billingBeans.add(new BillingBean("合計", mPrintBillContent.getWholeAmount()));
//添加其他金額項
if (shoppingCart.getBillItemList().size() > 0) {
for (BillItem item : shoppingCart.getBillItemList()) {
billingBeans.add(new BillingBean(item.getName(), item.getMoney()));
if (mPrintBillContent.getBillItemList().size() > 0) {
for (PrintBillItem item : mPrintBillContent.getBillItemList()) {
billingBeans.add(new BillingBean(item.getBillName(), Double.parseDouble(item.getBillAmount())));
}
}
layout.addView(getDiningBillInfo(mContext, billingBeans));
......@@ -281,12 +228,12 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
// for (OrderDetail OrderDetail : MyOrderManage.getInstance().getOrderFoodList()) {
// totalAmount = MoneyUtil.sum(totalAmount, OrderDetail.getPrice());
// }
layout.addView(getAmountText(mContext, "總金額:" + shoppingCart.getTotalAmount()));
layout.addView(getAmountText(mContext, "總金額:" + mPrintBillContent.getTotalAmount()));
layout.addView(getLine(mContext));
layout.addView(getDiningBillPayMethod(mContext, doshokuOrder.getBillMoney()));
layout.addView(getDiningBillPayMethod(mContext, mPrintBillContent.getPayMethodItemList()));
layout.addView(getLine(mContext));
layout.addView(getTableMealMemberIntegerView(mContext, getOrderMemberInfo(), doshokuOrder.getIntegralQrcode()));
layout.addView(getTableMealMemberIntegerView(mContext, getOrderMemberInfo(), mPrintBillContent.getIntegralQrCode()));
return zoomBitmap(deviceBean, viewToBitmap(mContext, layout));
}
......
......@@ -85,7 +85,7 @@ public class PrintOtherOrder extends PrinterRoot<PrintTakeawayFormContent> {
layout.addView(getTakeawayOrderInfo(mContext, data));
//食品
layout.addView(getTextLine(mContext, "項目"));
layout.addView(getDiningFoodList(mContext, OrderDetail.productMameBeanToOrderDetail(0, data.getPRODUCT_NAME()), deviceBean, 1, true));
layout.addView(getDiningFoodList(mContext, orderDetailCastPrintFoodItem(OrderDetail.productMameBeanToOrderDetail(0, data.getPRODUCT_NAME())), deviceBean, 1, true));
layout.addView(getLine(mContext));
//訂單金額信息
List<PrintBillItem> billData = new ArrayList<>();
......
......@@ -216,7 +216,7 @@ public class PrintOtherOrderClosing extends PrinterRoot<PrintTakeawayCheckoutCon
layout.addView(getTakeawayOrderInfo(mContext, data));
//食品
layout.addView(getTextLine(mContext, "項目"));
layout.addView(getDiningFoodList(mContext, OrderDetail.productMameBeanToOrderDetail(1, data.getPRODUCT_NAME()), deviceBean, 1, true));
layout.addView(getDiningFoodList(mContext, orderDetailCastPrintFoodItem(OrderDetail.productMameBeanToOrderDetail(1, data.getPRODUCT_NAME())), deviceBean, 1, true));
layout.addView(getLine(mContext));
//訂單金額信息
List<PrintBillItem> billData = new ArrayList<>();
......
......@@ -14,6 +14,10 @@ import com.joe.print.R;
import com.joe.print.mvp.model.bean.HtmlLable;
import com.joe.print.mvp.print.common.HtmlContract;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -50,28 +54,18 @@ public class PrintQRCode extends PrinterRoot<PrintQRCodeContent> {
if (mQRCodeBean == null) {
return new String[]{"<html><body></body></html>"};
}
//http://m.ricepon.com/member-web/qrcode/qrcode.html?WMP2&?arg={"type":2,"QR":"a7fbc0570c974287a5df7fc149348599"}
// String stringBuilder = "<html><body>" +
// getHtmlContent() +
// "</body></html>";
// int printCount = getPrintCount(mContext);
// String[] pritContent = new String[printCount];
// for (int i = 0; i < printCount; i++) {
// pritContent[i] = stringBuilder;
// }
// baseContent = mQRCodeBean.getPrintQrcode();
return getPrintContent(baseContent + "http://m.ricepon.com/member-web/qrcode/qrcode.html?WMP2&arg={\"type\":2,\"QR\":\"a7fbc0570c974287a5df7fc149348599\"}");
}
private String baseContent = "Thank you";
private String[] getPrintContent(String... qrcodes) {
String[] pritContent = new String[qrcodes.length];
for (int i = 0; i < qrcodes.length; i++) {
String stringBuilder = "<html><body>" +
getHtmlContent(qrcodes[i]) +
"</body></html>";
String qrcode = null;
try {
qrcode = URLEncoder.encode(mQRCodeBean.getPrintQrcode(),"UTF-8") ;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String stringBuilder = "<html><body>" +
getHtmlContent(qrcode) +
"</body></html>";
int printCount = getPrintCount(mContext);
String[] pritContent = new String[printCount];
for (int i = 0; i < printCount; i++) {
pritContent[i] = stringBuilder;
}
return pritContent;
......
......@@ -12,6 +12,7 @@ import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.print.bean.PrintServingPaperContent;
import com.gingersoft.gsa.cloud.print.bean.base.PrintFoodItem;
import com.joe.print.R;
import com.joe.print.mvp.model.bean.HtmlLable;
import com.joe.print.mvp.print.common.HtmlContract;
......@@ -131,11 +132,11 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
}
private Bitmap getBitmap(Context mContext, PrinterDeviceBean printerDeviceBean) {
List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList();
if (foodList == null || foodList.size() <= 0) {
List<PrintFoodItem> foodItemList = mPrintServingPaperContent.getFoodItemList();
if (foodItemList == null || foodItemList.size() <= 0) {
return null;
}
TableBean.DataBean tableBean = DoshokuOrder.getInstance().getOpenTableInfo();
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
......@@ -144,14 +145,14 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
layout.addView(getHeader(mContext));
layout.addView(getLine(mContext));
String orderNo = "單號:";
if (TextUtil.isNotEmptyOrNullOrUndefined(DoshokuOrder.getInstance().getOrderNo())) {
orderNo = "單號:" + DoshokuOrder.getInstance().getOrderNo();
if (TextUtil.isNotEmptyOrNullOrUndefined(mPrintServingPaperContent.getOrderNo())) {
orderNo = "單號:" + mPrintServingPaperContent.getOrderNo();
}
//訂單信息
layout.addView(getDiningTableOrderInfo(mContext, "餐檯:" + tableBean.getTableName(), "人數:" + DoshokuOrder.getInstance().getOpenTableInfo().getPerson(), orderNo, "日期:" + TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)));
layout.addView(getDiningTableOrderInfo(mContext, "餐檯:" + mPrintServingPaperContent.getTableName(), "人數:" + mPrintServingPaperContent.getPerson(), orderNo, "日期:" + TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)));
layout.addView(getLine(mContext));
layout.addView(getDiningFoodList(mContext, foodList, printerDeviceBean, 0, false));
layout.addView(getDiningFoodList(mContext, foodItemList, printerDeviceBean, 0, false));
layout.addView(getLine(mContext));
layout.addView(getTextView(mContext, "Thank you!", Gravity.CENTER_HORIZONTAL, getDimensionPixelSize(mContext, R.dimen.dp_8)));
layout.addView(getTextView(mContext, TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT), Gravity.CENTER_HORIZONTAL, getDimensionPixelSize(mContext, R.dimen.dp_8)));
......
......@@ -17,6 +17,7 @@ import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.print.bean.PrintSlipContent;
import com.gingersoft.gsa.cloud.print.bean.base.PrintBillItem;
import com.gingersoft.gsa.cloud.print.bean.base.PrintFoodItem;
import com.joe.print.R;
import com.joe.print.mvp.model.bean.BillingBean;
import com.joe.print.mvp.model.bean.HtmlLable;
......@@ -66,10 +67,9 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
return new String[]{"<html><body></body></html>"};
}
List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList();
TableBean.DataBean tableBean = DoshokuOrder.getInstance().getOpenTableInfo();
List<PrintFoodItem> foodList = mPrintSlipContent.getFoodItemList();
if (foodList.size() == 0 || tableBean == null) {
if (foodList.size() == 0 ) {
return new String[]{"<html><body></body></html>"};
}
......@@ -109,8 +109,8 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
* 訂單
*/
String orderNum = "單號:";
if (TextUtil.isNotEmptyOrNullOrUndefined(DoshokuOrder.getInstance().getOrderNo())) {
orderNum = "單號:" + DoshokuOrder.getInstance().getOrderNo();
if (TextUtil.isNotEmptyOrNullOrUndefined(mPrintSlipContent.getOrderNo())) {
orderNum = "單號:" + mPrintSlipContent.getOrderNo();
}
htmlLables.addAll(getRowInformation(new HtmlLable[]{new HtmlLable(LABLE_COLUMN, "餐檯:" + mPrintSlipContent.getTableName())}, 24));
htmlLables.addAll(getRowInformation(new HtmlLable[]{new HtmlLable(LABLE_COLUMN, "人數:" + mPrintSlipContent.getPerson())}, 24));
......@@ -173,14 +173,10 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
private Bitmap getBitmap(Context mContext, PrinterDeviceBean printerDeviceBean) {
DoshokuOrder doshokuOrder = DoshokuOrder.getInstance();
ShoppingCart shoppingCart = doshokuOrder.getShoppingCart();
List<OrderDetail> foodList = shoppingCart.getOrderCommodityList();
List<PrintFoodItem> foodList = mPrintSlipContent.getFoodItemList();
if (foodList == null || foodList.size() <= 0) {
return null;
}
TableBean.DataBean tableBean = doshokuOrder.getOpenTableInfo();
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
......@@ -190,23 +186,23 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
layout.addView(getLine(mContext));
//訂單信息
layout.addView(getDiningTableOrderInfo(mContext, "餐檯:" + tableBean.getTableName(), "人數:" + doshokuOrder.getOpenTableInfo().getPerson(), "單號:" + doshokuOrder.getOrderNo(), "日期:" + TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)));
layout.addView(getDiningTableOrderInfo(mContext, "餐檯:" + mPrintSlipContent.getTableName(), "人數:" + mPrintSlipContent.getPerson(), "單號:" + mPrintSlipContent.getOrderNo(), "日期:" + TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)));
layout.addView(getLine(mContext));
layout.addView(getDiningFoodList(mContext, foodList, printerDeviceBean, 0, true));
layout.addView(getHalfLine(mContext));
List<BillingBean> billingBeans = new ArrayList<>();
//添加合計項
billingBeans.add(new BillingBean("合計", shoppingCart.getWholeAmount()));
billingBeans.add(new BillingBean("合計", mPrintSlipContent.getWholeAmount()));
//添加其他金額項
if (shoppingCart.getBillItemList().size() > 0) {
for (BillItem item : shoppingCart.getBillItemList()) {
billingBeans.add(new BillingBean(item.getName(), item.getMoney()));
if (mPrintSlipContent.getBillItemList().size() > 0) {
for (PrintBillItem item : mPrintSlipContent.getBillItemList()) {
billingBeans.add(new BillingBean(item.getBillName(), Double.parseDouble(item.getBillAmount())));
}
}
layout.addView(getDiningBillInfo(mContext, billingBeans));
layout.addView(getHalfLine(mContext));
layout.addView(getAmountText(mContext, "總金額:" + shoppingCart.getTotalAmount()));
layout.addView(getAmountText(mContext, "總金額:" + mPrintSlipContent.getTotalAmount()));
layout.addView(getLine(mContext));
layout.addView(getTextView(mContext, "Thank you!", Gravity.CENTER_HORIZONTAL, getDimensionPixelSize(mContext, R.dimen.dp_8)));
layout.addView(getTextView(mContext, TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT), Gravity.CENTER_HORIZONTAL, getDimensionPixelSize(mContext, R.dimen.dp_8)));
......
......@@ -10,6 +10,7 @@ import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.print.bean.base.PrintFoodItem;
import com.joe.print.R;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -77,22 +78,21 @@ public class PrintTest extends PrinterRoot {
layout.addView(getTextView(mContext, "時間:" + TimeUtils.getCurrentDate(TimeUtils.DEFAULT_DATE_FORMAT), Gravity.LEFT, getDimensionPixelSize(mContext, R.dimen.dp_8)));
layout.addView(getTextLine(mContext, "項目"));
List<OrderDetails.DataBean.PRODUCTNAMEBean> productnameBeans = new ArrayList<>();
OrderDetails.DataBean.PRODUCTNAMEBean productnameBean = new OrderDetails.DataBean.PRODUCTNAMEBean();
productnameBean.setPRODUCT_NAME("測試食品");
productnameBean.setNum("1");
productnameBean.setPRICE("10.0");
List<PrintFoodItem> printFoodItemList = new ArrayList<>();
PrintFoodItem productnameBean = new PrintFoodItem();
productnameBean.setName("測試食品");
productnameBean.setNum(1);
productnameBean.setPrice(10.0);
List<OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX> childBeanXES = new ArrayList<>();
OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX = new OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX();
childBeanX.setPRODUCT_NAME("測試子食品");
childBeanX.setNum("1");
childBeanX.setPRICE("10.0");
childBeanXES.add(childBeanX);
productnameBean.setChild(childBeanXES);
productnameBeans.add(productnameBean);
PrintFoodItem productnameBean2 = new PrintFoodItem();
productnameBean.setName("測試食品2");
productnameBean.setNum(2);
productnameBean.setPrice(30.0);
layout.addView(getDiningFoodList(mContext, OrderDetail.productMameBeanToOrderDetail(0, productnameBeans), deviceBean, 0, true));
printFoodItemList.add(productnameBean);
printFoodItemList.add(productnameBean2);
layout.addView(getDiningFoodList(mContext,printFoodItemList, deviceBean, 0, true));
layout.addView(getTextLine(mContext, "Powered by Gingersoft"));
// layout.addView(getTextView(mContext, "(USB)", Gravity.CENTER_HORIZONTAL, getDimensionPixelSize(mContext, R.dimen.dp_8)));
......
......@@ -798,6 +798,17 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
return view;
}
protected List<PrintFoodItem> orderDetailCastPrintFoodItem(List<OrderDetail> orderDetailList) {
List<PrintFoodItem> foodItemList = new ArrayList<>();
if (orderDetailList != null && orderDetailList.size() > 0) {
for (int i = 0; i < orderDetailList.size(); i++) {
OrderDetail orderDetail = orderDetailList.get(i);
foodItemList.add(new PrintFoodItem(orderDetail.getProductName(), orderDetail.getNumber(), orderDetail.getPrice(), orderDetail.getItemType()));
}
}
return foodItemList;
}
/**
* @param mContext
* @param foodList
......@@ -806,7 +817,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
* @param showPrice 是否顯示價格
* @return
*/
public View getDiningFoodList(Context mContext, List<OrderDetail> foodList, PrinterDeviceBean deviceBean, int type, boolean showPrice) {
public View getDiningFoodList(Context mContext, List<PrintFoodItem> foodList, PrinterDeviceBean deviceBean, int type, boolean showPrice) {
// List<OrderDetail> newsFoodList = new ArrayList<>();
// for (OrderDetail orderDetail : foodList) {
// //如果食品設置了0元不打印並且食品等於0元,或者設置了不打印到單,就不打印
......@@ -818,13 +829,12 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
return getVerticalRecyclerView(mContext, new FoodAdapter(foodList, deviceBean, showPrice));
}
public View getDiningBillInfo(Context mContext, List<BillingBean> billingBeans) {
return getVerticalRecyclerView(mContext, new BillAdapter(billingBeans));
}
public View getDiningBillPayMethod(Context mContext, List<PayMethod> payBillMoneys) {
public View getDiningBillPayMethod(Context mContext, List<PrintBillItem> payBillMoneys) {
return getVerticalRecyclerView(mContext, new BillTypeAdapter(payBillMoneys));
}
......
......@@ -27,6 +27,7 @@ import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
......@@ -255,6 +256,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
//開錢箱
PrintExecutor executor = new PrintExecutor(defaultPrint);
executor.doPrinterRequestAsync(new OpenCashBoxMaker());
CC.sendCCResult(callId, CCResult.success());
} else {
if (isShowDialog) {
initDialog();
......@@ -466,6 +468,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
printFailure("打印機缺紙");
break;
}
LoganManager.w_printer(TAG,"printStateChanged state--->" + tip);
setLoadingText(tip);
}
......@@ -474,6 +477,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
*/
@Override
public void printSuccess() {
LoganManager.w_printer(TAG,"printFailure 打印成功");
// if (printCount <= 1) {
CC.sendCCResult(callId, CCResult.success());
disLoadingDialog();
......@@ -486,10 +490,11 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void printFailure(String msg) {
LoganManager.w_printer(TAG,"printFailure 打印失敗--->" + msg);
if (!TextUtil.isEmptyOrNullOrUndefined(msg)) {
ToastUtils.show(GsaCloudApplication.getAppContext(), msg);
CC.sendCCResult(callId, CCResult.error(msg));
}else {
} else {
CC.sendCCResult(callId, CCResult.error("print error"));
}
// if (printCount <= 1) {
......
......@@ -4,6 +4,7 @@ import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.print.bean.base.PrintBillItem;
import com.joe.print.R;
import java.util.List;
......@@ -11,15 +12,15 @@ import java.util.List;
* Created by Wyh on 2020/1/9.
* 結賬方式
*/
public class BillTypeAdapter extends BaseQuickAdapter<PayMethod, BaseViewHolder> {
public class BillTypeAdapter extends BaseQuickAdapter<PrintBillItem, BaseViewHolder> {
public BillTypeAdapter(@Nullable List<PayMethod> data) {
public BillTypeAdapter(@Nullable List<PrintBillItem> data) {
super(R.layout.base_print_item_bill_type, data);
}
@Override
protected void convert(BaseViewHolder helper, PayMethod item) {
helper.setText(R.id.tv_total_amount_text, item.getPayName());
helper.setText(R.id.tv_total_amount, "$" + item.getPayMoney());
protected void convert(BaseViewHolder helper, PrintBillItem item) {
helper.setText(R.id.tv_total_amount_text, item.getBillName());
helper.setText(R.id.tv_total_amount, "$" + item.getBillAmount());
}
}
......@@ -7,7 +7,7 @@ import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.print.bean.base.PrintFoodItem;
import com.joe.print.R;
import java.util.List;
......@@ -15,7 +15,7 @@ import java.util.List;
/**
* Created by Wyh on 2020/1/9.
*/
public class FoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> {
public class FoodAdapter extends BaseQuickAdapter<PrintFoodItem, BaseViewHolder> {
private int foodFontSize = 24;
private int modifierFontSize = 24;
......@@ -27,7 +27,7 @@ public class FoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> {
private boolean showPrice = true;
public FoodAdapter(@Nullable List<OrderDetail> data, PrinterDeviceBean deviceBean, boolean showPrice) {
public FoodAdapter(@Nullable List<PrintFoodItem> data, PrinterDeviceBean deviceBean, boolean showPrice) {
super(R.layout.print_item_food, data);
try {
this.foodFontSize = Integer.parseInt(deviceBean.getFoodFont()) * 2;//36
......@@ -47,7 +47,7 @@ public class FoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> {
* @param data
* @param deviceBean 打印機信息
*/
public FoodAdapter(@Nullable List<OrderDetail> data, PrinterDeviceBean deviceBean) {
public FoodAdapter(@Nullable List<PrintFoodItem> data, PrinterDeviceBean deviceBean) {
super(R.layout.print_item_food, data);
try {
this.foodFontSize = Integer.parseInt(deviceBean.getFoodFont()) * 2;
......@@ -62,13 +62,13 @@ public class FoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> {
this.numberIsFlip = deviceBean.getNumberIsFlip();
}
public FoodAdapter(@Nullable List<OrderDetail> data) {
public FoodAdapter(@Nullable List<PrintFoodItem> data) {
super(R.layout.print_item_food, data);
}
@Override
protected void convert(BaseViewHolder helper, OrderDetail item) {
protected void convert(BaseViewHolder helper, PrintFoodItem item) {
TextView tvFoodName = helper.getView(R.id.tv_food_name);
TextView tvNum = helper.getView(R.id.tv_food_quantity);
TextView tvPrice = helper.getView(R.id.tv_food_price);
......@@ -80,7 +80,7 @@ public class FoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> {
boolean isBold, isItalic;
if (item.getItemType() == 2) {
//細項,縮進
helper.setText(R.id.tv_food_name, "\u3000" + item.getProductName());
helper.setText(R.id.tv_food_name, "\u3000" + item.getName());
tvFoodName.setTextSize(modifierFontSize);
tvNum.setTextSize(modifierFontSize);
tvPrice.setTextSize(modifierFontSize);
......@@ -89,14 +89,14 @@ public class FoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> {
isItalic = modifierIsItalic == 1;
} else if (item.getItemType() == 3) {
//細項,縮進
helper.setText(R.id.tv_food_name, "\u3000\u3000" + item.getProductName());
helper.setText(R.id.tv_food_name, "\u3000\u3000" + item.getName());
tvFoodName.setTextSize(modifierFontSize);
tvNum.setTextSize(modifierFontSize);
tvPrice.setTextSize(modifierFontSize);
isBold = modifierIsBold == 1;
isItalic = modifierIsItalic == 1;
} else {
helper.setText(R.id.tv_food_name, item.getProductName());
helper.setText(R.id.tv_food_name, item.getName());
tvFoodName.setTextSize(foodFontSize);
tvNum.setTextSize(foodFontSize);
tvPrice.setTextSize(foodFontSize);
......@@ -125,7 +125,7 @@ public class FoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> {
// tvFoodName.setTypeface(null, Typeface.BOLD);
// tvFoodName.setTypeface(null, Typeface.ITALIC);
// tvFoodName.setTypeface(null, Typeface.NORMAL);
tvNum.setText("X" + item.getNumber());
tvNum.setText("X" + item.getNum());
tvPrice.setText("$" + item.getPrice());
}
}
......@@ -20,10 +20,10 @@
android:name="design_height_in_dp"
android:value="640" />
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
<!-- <activity-->
<!-- android:name="com.yalantis.ucrop.UCropActivity"-->
<!-- android:screenOrientation="portrait"-->
<!-- android:theme="@style/Theme.AppCompat.Light.NoActionBar" />-->
</application>
</manifest>
\ No newline at end of file
......@@ -15,22 +15,26 @@
<activity
android:name=".mvp.ui.activity.TableActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.MealStandActivity"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.OrderPayActivity"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.OrderContentActivity"
android:screenOrientation="portrait" />
<activity
android:name=".mvp.ui.activity.orderManager.OrderCenterActivity"
android:screenOrientation="portrait" />
android:name=".mvp.ui.activity.OrderPayActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.orderManager.OrderDetailActivity"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.orderManager.OrderCenterActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.SoldoutCtrlActivity"
android:screenOrientation="portrait" />
......
......@@ -10,10 +10,19 @@
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_android"
android:theme="@style/AppTheme">
<activity android:name="com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderDetailActivity"/>
<activity android:name="com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity" />
<activity
android:name=".mvp.ui.activity.orderManager.OrderDetailActivity"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.orderManager.OrderCenterActivity"
android:launchMode="singleTop"/>
<activity
android:name=".mvp.ui.activity.OrderPayActivity"
android:screenOrientation="portrait" />
<activity android:name="com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity" />
<activity android:name="com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity">
<activity android:name="com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
......
package com.gingersoft.gsa.cloud.table;
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.etps.aca.lib.activity.CommandActivity;
import com.gingersoft.gsa.cloud.common.function.FModule;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.order.order.TakeawayOrder;
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.activity.SoldoutCtrlActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderDetailActivity;
import com.jess.arms.integration.AppManager;
import javax.inject.Inject;
import com.jess.arms.utils.ArmsUtils;
public class ComponentTable implements IComponent {
@Inject
AppManager mAppManager;
public static final class table {
/**
* 餐檯頁
......@@ -57,7 +61,7 @@ public class ComponentTable implements IComponent {
public String getName() {
//组件的名称,调用此组件的方式:
// CC.obtainBuilder("ComponentA")...build().callAsync()
return com.gingersoft.gsa.cloud.component.ComponentName.COMPONENT_TABLE ;
return com.gingersoft.gsa.cloud.component.ComponentName.COMPONENT_TABLE;
}
/**
......@@ -71,6 +75,7 @@ public class ComponentTable implements IComponent {
*/
@Override
public boolean onCall(CC cc) {
Context context = cc.getContext();
String actionName = cc.getActionName();
switch (actionName) {
case "showTableActivity":
......@@ -98,11 +103,17 @@ public class ComponentTable implements IComponent {
case "getInfo":
getInfo(cc);
break;
case ComponentAction.Table.INT_ORDER:
//初始化堂食賬單類
DoshokuOrder.getInstance().initialization();
//初始化外賣賬單類
TakeawayOrder.getInstance().initialization();
break;
case ComponentAction.Table.KILL_MEAL_ORDER_PAY:
mAppManager.findActivity(OrderPayActivity.class);
mAppManager.findActivity(OrderContentActivity.class);
mAppManager.findActivity(MealStandActivity.class);
AppManager appManager = ArmsUtils.obtainAppComponentFromContext(context).appManager();
appManager.killActivity(OrderPayActivity.class);
appManager.killActivity(OrderContentActivity.class);
appManager.killActivity(MealStandActivity.class);
break;
default:
//这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例
......@@ -114,6 +125,7 @@ public class ComponentTable implements IComponent {
}
private void lifecycleFragmentDoubleText(CC cc) {
// LifecycleFragment lifecycleFragment = cc.getParamItem("fragment");
// if (lifecycleFragment != null) {
......
package com.gingersoft.gsa.cloud.table.mvp.model.discount;
package com.gingersoft.gsa.cloud.table.mvp.action.discount;
import android.app.Activity;
import android.text.InputType;
......@@ -76,6 +76,11 @@ public class BillDiscountAction implements Strategy<Discount> {
}
}
@Override
public void destroy() {
}
private void exclusiveDiscount(Discount discount) {
if (mListener != null) {
showExclusiveTipDialog(discount);
......
package com.gingersoft.gsa.cloud.table.mvp.model.discount;
package com.gingersoft.gsa.cloud.table.mvp.action.discount;
import android.app.Activity;
import android.text.InputType;
......@@ -93,6 +93,11 @@ public class MealDiscountAction implements Strategy<Discount> {
}
}
@Override
public void destroy() {
}
private void exclusiveDiscount(Discount discount) {
if (mListener != null) {
showExclusiveTipDialog(discount);
......
package com.gingersoft.gsa.cloud.table.mvp.action.order;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.patterns.Strategy;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.VoidRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.VoidRespose;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.mvp.IView;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
/**
* @作者: bin
* @創建時間: 2021-01-15 15:19
* @更新時間: 2021-01-15 15:19
* @描述:取消订单
*/
public class CancelOrder implements Strategy<OrderManagerResponse> {
private final String TAG = "CancelOrder";
private BaseFragmentActivity mActivity;
private IView mRootView;
public CancelOrder(BaseFragmentActivity fragmentActivity, IView rootView){
this.mActivity = fragmentActivity;
this.mRootView = rootView;
}
@Override
public void action(OrderManagerResponse orderItem) {
showCancelDialog(orderItem);
}
@Override
public void destroy() {
}
private void showCancelDialog(OrderManagerResponse datasBean) {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(mActivity);
dialogBuilder.setTitle("溫馨提示");
dialogBuilder.setTitleIcon(R.drawable.qmui_icon_dialog_doubt);
dialogBuilder.setMessage("是否取消訂單?");
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialog.dismiss();
if (datasBean.withHywebPay()) {
hywebOrderCancle(datasBean);
} else {
if(cancelListener != null){
cancelListener.cancel(datasBean.getId());
}
}
});
dialogBuilder.addAction("取消", (dialog, index) -> dialog.dismiss());
dialogBuilder.create(R.style.MyDialogTheme2).show();
}
private void hywebOrderCancle(OrderManagerResponse datasBean) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(datasBean.getId());
if (!TextUtils.isEmpty(datasBean.getTableNumber())) {
txnIdRequest.setTableExtId(datasBean.getTableId());
} else {
txnIdRequest.setTableId(datasBean.getTableId());
}
txnIdRequest.setAmount(datasBean.getAmount());
VoidRequest voidRequest = new VoidRequest();
PosPay.voidO(mActivity, mRootView, voidRequest, txnIdRequest, new OnPosActionListener<VoidRespose>() {
@Override
public void onPosSuccess(VoidRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
if(cancelListener != null){
cancelListener.refeshOrders();
}
}
@Override
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.VOID);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
@Override
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e);
}
@Override
public void onUpdateStatusSuccess(VoidRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.VOID);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
private OnCancelListener cancelListener;
public void setCancelListener(OnCancelListener cancelListener) {
this.cancelListener = cancelListener;
}
public interface OnCancelListener{
void cancel(long orderId);
void refeshOrders();
}
}
package com.gingersoft.gsa.cloud.table.mvp.action.order;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.patterns.Strategy;
import com.gingersoft.gsa.cloud.common.utils.AppDevices;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.order.cart.ShoppingCart;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.HywebPosResponse;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.gingersoft.gsa.cloud.print.bean.adapter.PrintContentAdapter;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.base.delegate.IActivity;
import com.jess.arms.mvp.IView;
import java.util.Date;
import java.util.List;
/**
* @作者: bin
* @創建時間: 2021-01-15 15:19
* @更新時間: 2021-01-15 15:19
* @描述:修改订单
*/
public class ModifyOrderAction implements Strategy<OrderManagerResponse> {
private final String TAG = "ModifyOrderAction";
private BaseFragmentActivity mActivity;
private IView mRootView;
public ModifyOrderAction(BaseFragmentActivity fragmentActivity, IView rootView){
this.mActivity = fragmentActivity;
this.mRootView = rootView;
}
@Override
public void action(OrderManagerResponse orderItem) {
DoshokuOrder doshokuOrder = DoshokuOrder.getInstance();
//設置為修改訂單操作
doshokuOrder.setModifyOrder(true);
/**
* 緩存訂單信息
*/
OrderResponse orderBean = new OrderResponse();
orderBean.setId(orderItem.getId());
orderBean.setStatus(orderItem.getStatus());
orderBean.setOrderNo(orderItem.getOrderNo());
orderBean.setPerson(orderItem.getPerson());
orderBean.setCreateTime(orderItem.getCreateTime());
if (orderItem.getDiscountDetails() != null) {
orderBean.setDiscountDetails(orderItem.getDiscountDetails());
}
doshokuOrder.setOrderId(orderItem.getId());
doshokuOrder.setOrderPlaced(orderBean);
TableBean.DataBean tableBean = new TableBean.DataBean(orderItem.getRestaurantTable());
if (!TextUtils.isEmpty(tableBean.getTableNumber())) {
tableBean.setTableName(tableBean.getTableName() + "-" + tableBean.getTableNumber());
} else {
tableBean.setTableName(tableBean.getTableName());
}
tableBean.setId(orderItem.getTableId());
tableBean.setPerson(orderItem.getPerson());
doshokuOrder.setOpenTableInfo(tableBean);
List<OrderResponse.OrderDetailsBean> orderDetailsBeans = orderItem.getOrderDetails();
List<OrderDetail> orderDetailList = OrderAssemblyUtil.assemblyOrder(OrderDetail.orderTransOrderDetails(orderDetailsBeans));
doshokuOrder.getShoppingCart().addCommodityList(orderDetailList);
if (orderItem.getMemberInfo() != null) {
doshokuOrder.setMemberInfo(orderItem.getMemberInfo());
}
Intent intent = new Intent(mActivity, MealStandActivity.class);
mActivity.startActivityForResult(intent, OrderCenterActivity.MODIFY_ORDER_RETURN_CODE);
}
@Override
public void destroy() {
}
}
package com.gingersoft.gsa.cloud.table.mvp.action.order;
import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.patterns.Strategy;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.RefundRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.RefundRespose;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.mvp.IView;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import java.util.List;
/**
* @作者: bin
* @創建時間: 2021-01-15 15:19
* @更新時間: 2021-01-15 15:19
* @描述:订单退款
*/
public class RefundOrder implements Strategy<OrderManagerResponse> {
private final String TAG = "RefundlOrder";
private BaseFragmentActivity mActivity;
private IView mRootView;
public RefundOrder(BaseFragmentActivity fragmentActivity, IView rootView){
this.mActivity = fragmentActivity;
this.mRootView = rootView;
}
@Override
public void action(OrderManagerResponse orderItem) {
showHywebRefundDialog(orderItem);
}
@Override
public void destroy() {
}
private void showHywebRefundDialog(OrderManagerResponse datasBean) {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(mActivity);
dialogBuilder.setTitle("溫馨提示");
dialogBuilder.setTitleIcon(R.drawable.qmui_icon_dialog_doubt);
dialogBuilder.setMessage("是否退款?");
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialog.dismiss();
hywebRefund(datasBean);
});
dialogBuilder.addAction("取消", (dialog, index) -> dialog.dismiss());
dialogBuilder.create(R.style.MyDialogTheme2).show();
}
private void hywebRefund(OrderManagerResponse datasBean) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(datasBean.getId());
if (!TextUtils.isEmpty(datasBean.getTableNumber())) {
txnIdRequest.setTableExtId(datasBean.getTableId());
} else {
txnIdRequest.setTableId(datasBean.getTableId());
}
txnIdRequest.setAmount(datasBean.getAmount());
RefundRequest refundRequest = new RefundRequest();
refundRequest.setPAYMENT_APP_ID(getPaymentAppIdByPays(datasBean.getOrderPays()));
refundRequest.setTXN_AMT(datasBean.getAmount());
PosPay.refund(mActivity, mRootView, refundRequest, txnIdRequest, new OnPosActionListener<RefundRespose>() {
@Override
public void onPosSuccess(RefundRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
if(refundListener != null){
refundListener.refeshOrders();
}
}
@Override
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.REFUND);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
@Override
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e);
}
@Override
public void onUpdateStatusSuccess(RefundRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.REFUND);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
private String getPaymentAppIdByPays(List<OrderManagerResponse.OrderPayBean> orderPays) {
String hywebPayMethod = "";
for (OrderManagerResponse.OrderPayBean orderPayBean : orderPays) {
hywebPayMethod = orderPayBean.getHywebPayMethodByType();
}
return hywebPayMethod;
}
private RefundOrder.OnRefundListener refundListener;
public void setRefundListener(RefundOrder.OnRefundListener refundListener) {
this.refundListener = refundListener;
}
public interface OnRefundListener{
void refeshOrders();
}
}
package com.gingersoft.gsa.cloud.table.mvp.action.order;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.patterns.Strategy;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.OnPosActionListener;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.PosPay;
import com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.bg.GetTxnIdRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.request.pos.AdjustTipRequest;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.bean.response.pos.AdjustTipRespose;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.gingersoft.gsa.cloud.ui.widget.dialog.KeyboardDialog;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.mvp.IView;
/**
* @作者: bin
* @創建時間: 2021-01-15 15:19
* @更新時間: 2021-01-15 15:19
* @描述:補小費
*/
public class TipsOrder implements Strategy<OrderManagerResponse> {
private final String TAG = "TipsOrder";
private BaseFragmentActivity mActivity;
private IView mRootView;
public TipsOrder(BaseFragmentActivity fragmentActivity, IView rootView){
this.mActivity = fragmentActivity;
this.mRootView = rootView;
}
@Override
public void action(OrderManagerResponse orderItem) {
showKeyboardDialog(orderItem);
}
@Override
public void destroy() {
}
private void showKeyboardDialog(OrderManagerResponse datasBean) {
new KeyboardDialog(mActivity)
.build()
.setOnCallBackListener(new KeyboardDialog.OnCallBackListener() {
@Override
public void onSure(String number) {
if (!TextUtils.isEmpty(number)) {
GetTxnIdRequest txnIdRequest = new GetTxnIdRequest();
txnIdRequest.setOrderId(datasBean.getId());
if (!TextUtils.isEmpty(datasBean.getTableNumber())) {
txnIdRequest.setTableExtId(datasBean.getTableId());
} else {
txnIdRequest.setTableId(datasBean.getTableId());
}
txnIdRequest.setAmount(datasBean.getAmount());
PosPay.tip(mActivity, mRootView, txnIdRequest,
getTipsRequest(datasBean.getPayTxnId(), datasBean.getAmount(), Double.parseDouble(number)), new OnPosActionListener<AdjustTipRespose>() {
@Override
public void onPosSuccess(AdjustTipRespose response) {
LoganManager.w_code(TAG, "onPosSuccess: " + response.toString());
if(tipsListener != null){
tipsListener.refeshOrders();
}
}
@Override
public void onPosException(Exception e) {
LoganManager.w_code(TAG, "onPosException: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.TIP);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
@Override
public void onPosInvalid(String e) {
LoganManager.w_code(TAG, "onPosInvalid: " + e.toString());
}
@Override
public void onUpdateStatusSuccess(AdjustTipRespose response) {
LoganManager.w_code(TAG, "onUpdateStatusSuccess: " + response.toString());
}
@Override
public void onUpdateStatusError(Throwable e) {
LoganManager.w_code(TAG, "onUpdateStatusError: " + e.getMessage());
if (mActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(datasBean.getPayTxnId());
statusExceptionParam.setAmount(datasBean.getAmount());
statusExceptionParam.setOrderId(datasBean.getId());
statusExceptionParam.setOrderNo(datasBean.getOrderNo());
statusExceptionParam.setPayMethodName("VISA測試");
statusExceptionParam.setPosAction(PosAction.TIP);
mActivity.loadRootFragment(R.id.rl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
}
});
}
}
})
.show();
}
private AdjustTipRequest getTipsRequest(String txnId, double amount, double tips) {
AdjustTipRequest tipRequest = new AdjustTipRequest();
tipRequest.setTXN_ID(txnId);
tipRequest.setTOTAL_TXN_AMT(MoneyUtil.sum(amount, tips));
return tipRequest;
}
private TipsOrder.OnRefundListener tipsListener;
public void setTipsListener(TipsOrder.OnRefundListener tipsListener) {
this.tipsListener = tipsListener;
}
public interface OnRefundListener{
void refeshOrders();
}
}
package com.gingersoft.gsa.cloud.table.mvp.model.table.action;
package com.gingersoft.gsa.cloud.table.mvp.action.table;
import android.app.Activity;
......
package com.gingersoft.gsa.cloud.table.mvp.model.table.action;
package com.gingersoft.gsa.cloud.table.mvp.action.table;
import android.app.Activity;
......@@ -12,6 +12,7 @@ import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.gingersoft.gsa.cloud.print.bean.adapter.PrintContentAdapter;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.action.OnNetworkCallbackListener;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.BaseOrderResponse;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.presenter.TablePresenter;
......@@ -100,7 +101,7 @@ public class PrintServingPaperAction extends TableAction {
}
doshokuOrder.setOpenTableInfo(tableBean);
printParper();
printParper(tableBean);
} else {
CommonTipDialog.showSurpisedDialog(mContext, respose.getErrMsg(), null, null, null, null, null);
}
......@@ -133,8 +134,8 @@ public class PrintServingPaperAction extends TableAction {
/**
* 打印上菜紙
*/
private void printParper() {
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance());
private void printParper(TableBean.DataBean tableBean) {
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance(),tableBean);
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.setActionName("printActivity")
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_SERVE)
......
package com.gingersoft.gsa.cloud.table.mvp.model.table.action;
package com.gingersoft.gsa.cloud.table.mvp.action.table;
import android.app.Activity;
import android.text.TextUtils;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
......@@ -14,6 +15,7 @@ import com.gingersoft.gsa.cloud.common.core.user.UserContext;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.table.mvp.action.OnNetworkCallbackListener;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.FoodSummary;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.PrintQRCodeResponse;
import com.gingersoft.gsa.cloud.table.mvp.presenter.TablePresenter;
......@@ -21,6 +23,7 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.widget.SkyOrderDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.BaseRetryDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.DialogAnimationListener;
import com.jess.arms.utils.ArmsUtils;
import java.util.ArrayList;
import java.util.List;
......@@ -125,7 +128,11 @@ public class PrintSkyorderAction extends TableAction {
if (result.isSuccess()) {
printSkyorderSuccess();
} else {
ArmsUtils.makeText(mContext, "打印失敗");
if (!TextUtils.isEmpty(result.getErrorMessage())) {
ArmsUtils.makeText(mContext, result.getErrorMessage());
} else {
ArmsUtils.makeText(mContext, "打印失敗");
}
}
mSkyOrderDialog.dismiss();
});
......
package com.gingersoft.gsa.cloud.table.mvp.model.table.action;
package com.gingersoft.gsa.cloud.table.mvp.action.table;
import android.app.Activity;
......
package com.gingersoft.gsa.cloud.table.mvp.model.table.action;
package com.gingersoft.gsa.cloud.table.mvp.action.table;
import android.app.Activity;
......
package com.gingersoft.gsa.cloud.table.mvp.model.table.action;
package com.gingersoft.gsa.cloud.table.mvp.action.table;
import android.app.Activity;
......@@ -37,7 +37,7 @@ public abstract class TableAction implements Strategy<TableBean.DataBean> {
*/
public abstract boolean filterTableCondition(TableBean.DataBean dataBean);
public abstract void destroy();
// public abstract void destroy();
protected void setOperatContentText(String content) {
if (actionListener != null) {
......
......@@ -26,6 +26,8 @@ public interface AllOrderContract {
void setAllOrderAdapter(DefaultAdapter adapter);
String getOrderType();
String getStatusByFragmentIndex();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......
package com.gingersoft.gsa.cloud.table.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import io.reactivex.Observable;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/13/2020 16:25
* <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 BaseOrderConterContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
}
}
......@@ -35,15 +35,19 @@ public interface OrderCenterContract {
AllOrderFragment getCurrentOrderFragment();
int getCurrentFragmentIndex();
String getStatusByFragmentIndex();
int getPageSize();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<BaseResult> loadOrderList(int restaurantId, String orderType, int pageIndex, int pageSize);
Observable<BaseResult> loadOrderList(int restaurantId, String orderType,String status, int pageIndex, int pageSize);
Observable<BaseResult> cancelOrder(long orderId, int restaurantId, String orderType);
Observable<BaseResult> cancelOrder(long orderId, int restaurantId, String orderType,String status);
}
}
......@@ -23,6 +23,16 @@ public interface OrderDetailContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void setWithSettlementLayoutVisible();
void setCurrPosDeviceLayoutVisible();
void setNotCurrPosDeviceLayoutVisible();
void setNomalDeviceLayoutVisible();
void setPublicLayoutVisible();
void returnOrderDetail(OrderManagerResponse orderDetailItem);
}
......
......@@ -3,7 +3,7 @@ package com.gingersoft.gsa.cloud.table.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.BaseOrderResponse;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.TableAction;
import com.gingersoft.gsa.cloud.table.mvp.action.table.TableAction;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.AllTableFragment;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
......
......@@ -50,20 +50,20 @@ public class OrderCenterModel extends BaseModel implements OrderCenterContract.M
}
@Override
public Observable<BaseResult> loadOrderList(int restaurantId,String orderType, int pageIndex, int pageSize) {
public Observable<BaseResult> loadOrderList(int restaurantId,String orderType,String status, int pageIndex, int pageSize) {
return mRepositoryManager.obtainRetrofitService(OrderService.class)
.loadOrderList(restaurantId, orderType,pageIndex, pageSize);
.loadOrderList(restaurantId, orderType,status,pageIndex, pageSize);
}
@Override
public Observable<BaseResult> cancelOrder(long orderId, int restaurantId,String orderType) {
public Observable<BaseResult> cancelOrder(long orderId, int restaurantId,String orderType,String status) {
return mRepositoryManager.obtainRetrofitService(OrderService.class)
.cancelOrder(orderId)
.flatMap(new Function<BaseResult, Observable<BaseResult>>() {
@Override
public Observable<BaseResult> apply(BaseResult info) throws Exception {
if (info != null && info.isSuccess()) {
return loadOrderList(restaurantId, orderType,0, 10);
return loadOrderList(restaurantId, orderType,status,0, 10);
}
return Observable.just(info);
}
......
package com.gingersoft.gsa.cloud.table.mvp.model.bean.response;
import android.text.TextUtils;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
import com.gingersoft.gsa.cloud.common.core.table.TableBean;
import com.gingersoft.gsa.cloud.common.oaId.DeviceID;
import com.gingersoft.gsa.cloud.common.utils.AppDevices;
import com.gingersoft.gsa.cloud.order.bean.response.OrderDiscountResponse;
import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.pos.hywebpos.constant.PayMethodConstant;
import java.io.Serializable;
import java.util.List;
......@@ -39,9 +47,13 @@ public class OrderManagerResponse implements Serializable {
* orderDetails : [{"id":1639952,"orderId":47040,"parentId":0,"productName":"包子","productId":"14520","price":5,"lunchboxPrice":0,"number":1,"type":3,"createTime":"Mar 14, 2020 2:55:02 PM","status":0},{"id":1639953,"orderId":47040,"parentId":0,"productName":"燒麥","productId":"14522","price":5,"lunchboxPrice":0,"number":1,"type":3,"createTime":"Mar 14, 2020 2:55:02 PM","status":0}]
*/
private long id;
/**
* 订单状态
*/
private int status;
private String orderNo;
private String tableName;
private String tableNumber;
private int tableId;
private int person;
/**
......@@ -53,40 +65,103 @@ public class OrderManagerResponse implements Serializable {
* 7:自取
*/
private int orderType;
/**總金額*/
/**
* 總金額
*/
private double totalAmount;
private int totalPoints;
/**支付金額*/
/**
* 支付金額
*/
private double amount;
/**賬單小數*/
/**
* 賬單小數
*/
private Double rounding;
/**服務費*/
/**
* 服務費
*/
private Double serviceAmount;
/**訂單碼*/
/**
* 訂單碼
*/
private String billNo;
/**取餐碼*/
/**
* 取餐碼
*/
private String takeFoodCode;
/**生成訂單時間*/
/**
* 生成訂單時間
*/
private String createTime;
/**結賬時間*/
/**
* 結賬時間
*/
private String endTime;
/**訂單食品詳情*/
/**
* 訂單食品詳情
*/
private List<OrderResponse.OrderDetailsBean> orderDetails;
/**折扣詳情*/
/**
* 折扣詳情
*/
private List<OrderDiscountResponse> discountDetails;
/**支付詳情*/
/**
* 支付詳情
*/
private List<OrderPayBean> orderPays;
/**餐檯信息*/
/**
* 餐檯信息
*/
private TableBean.DataBean restaurantTable;
/**會員信息*/
/**
* 會員信息
*/
private MemberInfo memberInfo;
/**會員積分碼*/
/**
* 會員積分碼
*/
private String verifyCode;
/**會員積分相关实体*/
/**
* 會員積分相关实体
*/
private OrderPayResponse integralInfo;
/******************** N5相關**************************/
/**
* N5支付TXN_ID
*/
private String payTxnId;
/**
* 事項狀態 0:異常未處理,1: 成功
* 以下哪個參數不為Null說明有事项未消费,需要重试上传
*/
private int matterStatus = MATTER_STATUS_SUCCESS;
/**
* 取消事项ID
*/
private String cancelTxnId;
/**
* 退款事项ID
*/
private String refundTxnId;
/**
* 补小费事项ID
*/
private String tipTxnId;
/**
* 清機ID,已清機則不為null
*/
private Integer restaurantOperationId;
/**
* 設備ID,用來區分每台N5設備支付的訂單
*/
private String deviceId;
/**
* 訂單狀態:0:未支付;1:待確認(已支付, 待餐廳確認);2:制作中(餐厅确认);3:派送中;4:确认收货(完成);5:是否评论;6:取消;
*/
......@@ -98,7 +173,6 @@ public class OrderManagerResponse implements Serializable {
public static final byte STATUS_COMMENT = 5;
public static final byte STATUS_CANCEL = 6;
/**
* 订单类型1:堂食2:外賣3:掃碼點餐5:預點餐7:自取
*/
......@@ -106,8 +180,19 @@ public class OrderManagerResponse implements Serializable {
public static final byte ORDER_TYPE_TAKEAWAY = 2;
public static final byte ORDER_TYPE_SELFCOLLECTION = 7;
/**
* 事項狀態 0:異常未處理,1: 成功
*/
public static final byte MATTER_STATUS_SUCCESS = 1;
public static final byte MATTER_STATUS_EXCEPTION = 0;
/**
* 是否選中
*/
private boolean checked = false;
@Data
public static final class OrderPayBean implements Serializable{
public static final class OrderPayBean implements Serializable {
private long id;
private long lineOrderId;
private int payType;
......@@ -116,8 +201,93 @@ public class OrderManagerResponse implements Serializable {
private double tipsPrice;
private int status;
private int linePayType;
private double paySales;
/**
* 0=非營業額(非收入)
* 1=營業額(收入)
* 2=非項目銷售(Non gross item, 獨佔的支付方式)
*/
private int paySales;
private String payName;
public boolean withHywebPay() {
if (payType == PayMethod.HYWEB_POS_TYPE_CC || payType == PayMethod.HYWEB_POS_TYPE_QRC) {
return true;
}
return false;
}
public String getHywebPayMethodByType() {
if (payType == PayMethod.HYWEB_POS_TYPE_CC) {
return PayMethodConstant.PAY_TYPE_CC;
}
if (payType == PayMethod.HYWEB_POS_TYPE_QRC) {
return PayMethodConstant.PAY_TYPE_QRC;
}
return "";
}
}
public boolean withHywebPay() {
if (!TextUtils.isEmpty(payTxnId) || !TextUtils.isEmpty(cancelTxnId) || !TextUtils.isEmpty(refundTxnId)) {
return true;
}
return false;
}
/**
* 支付方式名稱拼接,已逗號分開
* @return
*/
public String getPayNames(){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < orderPays.size(); i++) {
OrderPayBean orderPayBean = orderPays.get(i);
sb.append(orderPayBean.getPayName());
if(orderPays.size() > 1 && i != (orderPays.size() - 1)){
sb.append(",");
}
}
return sb.toString();
}
public String getExceptionReloadText() {
if(!TextUtils.isEmpty(tipTxnId)){
return "貼士狀態異常,輕觸重試";
}
if(!TextUtils.isEmpty(cancelTxnId)){
return "取消狀態異常,輕觸重試";
}
if(!TextUtils.isEmpty(refundTxnId)){
return "退款狀態異常,輕觸重試";
}
return "";
}
public String getMatterTxnId() {
if(!TextUtils.isEmpty(tipTxnId)){
return tipTxnId;
}
if(!TextUtils.isEmpty(cancelTxnId)){
return cancelTxnId;
}
if(!TextUtils.isEmpty(refundTxnId)){
return refundTxnId;
}
return "";
}
/**
* 是不是當前設備的訂單
* @return
*/
public boolean isCurrDeviceOrder(){
if(!AppDevices.isHywebPos() || !AppDevices.isBBPos()){
return true;
}
if(TextUtils.isEmpty(deviceId) && deviceId.equals(DeviceID.getDeviceId())){
return true;
}
return false;
}
}
package com.gingersoft.gsa.cloud.table.mvp.model.function;
import com.gingersoft.gsa.cloud.common.function.FModule;
import com.gingersoft.gsa.cloud.table.R;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
public class TableFunctionFactory {
public static final String BottomGroup = "/bottom/";
public static final class Bottom {
}
/**
* 餐檯頁
*/
public static final FModule[] bottom = {
new FModule("init", R.mipmap.table_init, 0),
new FModule("initSkyorder", R.mipmap.table_paper, 0),
new FModule("move", R.mipmap.table_move, 0),
new FModule("skyorder", 0, 0),
new FModule("splite", R.mipmap.table_splite, 0),
new FModule("table/bottom/parper", R.mipmap.table_paper, 0),
};
}
......@@ -20,7 +20,7 @@ public interface OrderService {
@FormUrlEncoded
@POST("order/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> loadOrderList(@Field("restaurantId") int restaurantId, @Field("orderType") String orderType, @Field("pageIndex") int pageIndex, @Field("pageSize") int pageSize);
Observable<BaseResult> loadOrderList(@Field("restaurantId") int restaurantId, @Field("orderType") String orderType,@Field("status") String status ,@Field("pageIndex") int pageIndex, @Field("pageSize") int pageSize);
@GET("order/pay/success" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getOrderDetail(@Query("orderId") long orderId);
......
......@@ -15,7 +15,7 @@ import java.util.List;
public class OrderAssemblyUtil {
/**
* 組裝食品結構
* 組裝食品位置和結構
* @param orderDetails
* @return
*/
......@@ -28,7 +28,7 @@ public class OrderAssemblyUtil {
newOrderDetails.addAll(getOrdersItem2ByParentId(orderDetails, order.getId(),order.getProductId(), i));
}
}
return newOrderDetails;
return newOrderDetails;//10 + 7
}
private static List<OrderDetail> getOrdersItem2ByParentId(List<OrderDetail> orderDetails, long id, long productId,int startIndex) {
......
......@@ -1099,7 +1099,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
OrderDetail item = foodList.get(j);
boolean myIndex = item.getMyIndex() != parentItem.getMyIndex();
boolean parentIndex = item.getParentIndex() != parentItem.getMyIndex();
if (myIndex && parentIndex) {
if (myIndex && parentIndex && item.getType() != OrderDetail.MODIFIER_TYPE) {
//已經循環過當前套餐 退出循環
break;
}
......
......@@ -38,7 +38,7 @@ import com.gingersoft.gsa.cloud.table.mvp.model.bean.FoodReason;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.discount.MealDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.action.discount.MealDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.DiscountAdapter;
......@@ -199,6 +199,9 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
if(mMealDiscountAction != null){
mMealDiscountAction.destroy();
}
}
public void startScanActivity() {
......@@ -211,6 +214,9 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
if (foodGroupList != null && foodGroupList.size() > 0) {
// for (Food foodGroup: foodGroupList) {
// foodGroup.setColorBean(foodGroup.getColorBean());
// }
mFoodGroupList.addAll(foodGroupList);
Food defalutFoodGroup = getDefalutFoodGroup(mFoodGroupList);
......@@ -884,7 +890,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
mergeMainFoodNumber(mOrderMealList);
}
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance());
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance(),mTableInfo);
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.setActionName("printActivity")
......
......@@ -39,7 +39,7 @@ import com.gingersoft.gsa.cloud.table.mvp.contract.OrderContentContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.BaseOrderResponse;
import com.gingersoft.gsa.cloud.table.mvp.model.discount.BillDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.action.discount.BillDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
......@@ -150,7 +150,9 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
if(mNomalDiscountAction != null){
mNomalDiscountAction.destroy();
}
stopTablePolling();
}
......@@ -198,7 +200,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
// if (!canPay()) {
// return;
// }
if (hasNesOrderFoods() || getNewDiscount() != null || mDoshokuOrder.needUpdateMemberInfo()) {
if (hasNesOrderFoods() || getNewDiscount() != null || hasModifyFoods() || mDoshokuOrder.needUpdateMemberInfo()) {
Class[] parameterTypes = {boolean.class, Class.class};
Object[] parameters = {false, OrderPayActivity.class};
CommonTipDialog.showDoubtDialog(IActivity, "賬單已變化,是否送單后去結賬", BaseOrderPresenter.class, mBaseOrderPresenter,
......@@ -383,7 +385,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mergeMainFoodNumber(mOrderMealList);
}
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance());
PrintContent printContent = new PrintContentAdapter().adaptationServingPaperContent(DoshokuOrder.getInstance(),mTableInfo);
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.setActionName("printActivity")
......@@ -430,7 +432,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mergeMainFoodNumber(mOrderMealList);
}
PrintContent printContent = new PrintContentAdapter().adaptationPrintSlipContent(DoshokuOrder.getInstance());
PrintContent printContent = new PrintContentAdapter().adaptationPrintSlipContent(DoshokuOrder.getInstance(),mTableInfo);
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_SLIP)//印單
......@@ -814,6 +816,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
//緩存訂單信息
mDoshokuOrder.setOrderPlaced(new OrderResponse(info.getData()));
//緩存食品信息
// List<OrderDetail> orderDetailList = OrderDetail.orderTransOrderDetails(info.getData().getOrderDetails());
List<OrderDetail> orderDetailList = OrderAssemblyUtil.assemblyOrder(OrderDetail.orderTransOrderDetails(info.getData().getOrderDetails()));
mOrderMealList.clear();
......@@ -883,6 +886,18 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
}
/**
* 修改訂單包含修改或刪除過的的食品
* @return
*/
private boolean hasModifyFoods() {
for (OrderDetail orderDetail : getOrderFoodLists()) {
if(orderDetail.isModify()){
return true;
}
}
return false;
}
private boolean canPrint() {
if (getFoodCount() == 0) {
......
......@@ -180,6 +180,7 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
}
}
}
mRootView.showMessage("支付成功");
//結賬成功
mRootView.paySuccess();
} else {
......
......@@ -276,6 +276,7 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
public void initFoodData() {
List<Food> foodGroupList = mModel.queryDB_FoodGroupList();
IActivity.initFoodGroupAdapter(foodGroupList);
if (foodGroupList != null && foodGroupList.size() > 0) {
mFoodGroupList.addAll(foodGroupList);
//默認選中第一組
......
......@@ -26,25 +26,30 @@ import com.gingersoft.gsa.cloud.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.pay.bean.PosActionStatusExceptionParam;
import com.gingersoft.gsa.cloud.pay.pos.PosAction;
import com.gingersoft.gsa.cloud.pay.pos.fragment.PosActionStatusExceptionFragment;
import com.gingersoft.gsa.cloud.table.FunctionTable;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.TableContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.FoodSummary;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.BaseOrderResponse;
import com.gingersoft.gsa.cloud.table.mvp.model.constant.SkyOrderConstant;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.MoveTableAction;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.OnNetworkCallbackListener;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.PrintServingPaperAction;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.PrintSkyorderAction;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.ResetSkyorderAction;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.ResetTableAction;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.SplitTableAction;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.TableAction;
import com.gingersoft.gsa.cloud.table.mvp.action.table.MoveTableAction;
import com.gingersoft.gsa.cloud.table.mvp.action.OnNetworkCallbackListener;
import com.gingersoft.gsa.cloud.table.mvp.action.table.PrintServingPaperAction;
import com.gingersoft.gsa.cloud.table.mvp.action.table.PrintSkyorderAction;
import com.gingersoft.gsa.cloud.table.mvp.action.table.ResetSkyorderAction;
import com.gingersoft.gsa.cloud.table.mvp.action.table.ResetTableAction;
import com.gingersoft.gsa.cloud.table.mvp.action.table.SplitTableAction;
import com.gingersoft.gsa.cloud.table.mvp.action.table.TableAction;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BottomFunctionAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.SplitTableDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.BaseRetryDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.google.android.material.internal.NavigationMenuItemView;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
......@@ -375,6 +380,22 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
OrderResponse orderBean = respose.getData();
if (orderBean != null && respose.getData().getOrderDetails() != null) {
if (!TextUtils.isEmpty(orderBean.getTxnId())) {
//有支付異常事項需要處理
if (IActivity.findFragment(PosActionStatusExceptionFragment.class) == null) {
PosActionStatusExceptionParam statusExceptionParam = new PosActionStatusExceptionParam();
statusExceptionParam.setTxnId(orderBean.getTxnId());
statusExceptionParam.setAmount(orderBean.getTotalAmount());
statusExceptionParam.setOrderId(orderBean.getId());
statusExceptionParam.setOrderNo(orderBean.getOrderNo());
statusExceptionParam.setPayMethodName(orderBean.getPayName());
statusExceptionParam.setPosAction(PosAction.RETRIEVAL);
IActivity.loadRootFragment(R.id.fl_container, PosActionStatusExceptionFragment.newInstance(statusExceptionParam));
}
return;
}
if (respose.getData().getCreateTime() != null && openTableBean != null) {
//將開台時間設置為訂單創建時間
openTableBean.setCreateTime(respose.getData().getCreateTime());
......@@ -392,7 +413,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
doshokuOrder.setOrderId(orderBean.getId());
doshokuOrder.setOrderNo(orderBean.getOrderNo());
doshokuOrder.setOrderPlaced(new OrderResponse(orderBean));
doshokuOrder.getShoppingCart().addCommodityList(OrderDetail.orderTransOrderDetails(mealCommoditysBeans));
doshokuOrder.getShoppingCart().addCommodityList(OrderAssemblyUtil.assemblyOrder(OrderDetail.orderTransOrderDetails(mealCommoditysBeans)));
if (orderBean.getMemberInfo() != null) {
//设置会员信息
doshokuOrder.setMemberInfo(orderBean.getMemberInfo());
......
package com.gingersoft.gsa.cloud.table.mvp.presenter.orderManager;
import android.app.Application;
import com.gingersoft.gsa.cloud.table.mvp.action.order.CancelOrder;
import com.gingersoft.gsa.cloud.table.mvp.action.order.ModifyOrderAction;
import com.gingersoft.gsa.cloud.table.mvp.action.order.PrintOrderAction;
import com.gingersoft.gsa.cloud.table.mvp.action.order.RefundOrder;
import com.gingersoft.gsa.cloud.table.mvp.action.order.TipsOrder;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import javax.inject.Inject;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 03/13/2020 16:25
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class BaseOrderConterPresenter<M extends IModel,V extends IView> extends BasePresenter{
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
protected M mModel;
protected V mRootView;
@Inject
public BaseOrderConterPresenter(IModel model, IView rootView) {
super(model, rootView);
this.mModel = (M) model;
this.mRootView = (V) rootView;
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void printOrder(BaseFragmentActivity activity,OrderManagerResponse orderItem){
new PrintOrderAction(activity,mRootView)
.action(orderItem);
}
public void modifyOrder(BaseFragmentActivity activity,OrderManagerResponse orderItem){
new ModifyOrderAction(activity,mRootView)
.action(orderItem);
}
public void orderTips(BaseFragmentActivity activity,OrderManagerResponse orderItem,TipsOrder.OnRefundListener listener){
TipsOrder tipsOrder = new TipsOrder(activity,mRootView);
tipsOrder.action(orderItem);
tipsOrder.setTipsListener(listener);
}
public void orderCancel(BaseFragmentActivity activity,OrderManagerResponse orderItem,CancelOrder.OnCancelListener listener){
CancelOrder cancelOrder = new CancelOrder(activity,mRootView);
cancelOrder.action(orderItem);
cancelOrder.setCancelListener(listener);
}
public void orderRefund(BaseFragmentActivity activity,OrderManagerResponse orderItem,RefundOrder.OnRefundListener listener){
RefundOrder refundOrder = new RefundOrder(activity,mRootView);
refundOrder.action(orderItem);
refundOrder.setRefundListener(listener);
}
}
......@@ -5,8 +5,11 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.order.contract.OrderStatusContract;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderCenterContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.orderManager.OrderCenterActivity;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
......@@ -40,7 +43,7 @@ import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
* ================================================
*/
@ActivityScope
public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Model, OrderCenterContract.View> {
public class OrderCenterPresenter extends BaseOrderConterPresenter<OrderCenterContract.Model, OrderCenterContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
......@@ -50,15 +53,12 @@ public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Mode
@Inject
AppManager mAppManager;
private OrderCenterActivity IActivity;
//是否可以繼續上拉刷新
private boolean noMoreData = false;
@Inject
public OrderCenterPresenter(OrderCenterContract.Model model, OrderCenterContract.View rootView) {
super(model, rootView);
this.IActivity = (OrderCenterActivity) rootView;
}
......@@ -74,18 +74,19 @@ public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Mode
/***
* 獲取訂單列表
* @param orderType
* @param status
* @param pageIndex
* @param pageSize
* @param refreshLayout
* @param isLoadMore
*/
public void loadOrderList(String orderType, int pageIndex, int pageSize, RefreshLayout refreshLayout, boolean isLoadMore) {
public void loadOrderList(String orderType,String status, int pageIndex, int pageSize, RefreshLayout refreshLayout, boolean isLoadMore) {
int restaurantId = RestaurantInfoManager.newInstance().getRestaurantId();
if (pageIndex != 0) {
//根據數據庫下標分頁
pageIndex = pageIndex * pageSize;
}
mModel.loadOrderList(restaurantId, orderType, pageIndex, pageSize)
mModel.loadOrderList(restaurantId, orderType,status, pageIndex, pageSize)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
if (refreshLayout == null) {
......@@ -114,6 +115,7 @@ public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Mode
List<OrderManagerResponse> orderItemList = JsonUtils.parseArray(result.getData(), OrderManagerResponse.class);
if (orderItemList != null && orderItemList.size() > 0) {
if (!noMoreData) {
// filterOrderItemsByStatus(orderItemList);
mRootView.returnOrderItemList(orderItemList);
//每次更新完數據,頁碼+1
mRootView.setPageIndex(mRootView.getPageIndex() + 1);
......@@ -166,9 +168,9 @@ public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Mode
*
* @param orderId
*/
public void cancelOrder(long orderId, String orderType) {
public void cancelOrder(long orderId, String orderType,String status) {
int restaurantId = RestaurantInfoManager.newInstance().getRestaurantId();
mModel.cancelOrder(orderId, restaurantId, orderType)
mModel.cancelOrder(orderId, restaurantId, orderType,status)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(null))
.subscribeOn(AndroidSchedulers.mainThread())
......@@ -183,6 +185,7 @@ public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Mode
if (result.getData() != null) {
List<OrderManagerResponse> orderItemList = JsonUtils.parseArray(result.getData(), OrderManagerResponse.class);
if (orderItemList.size() > 0) {
// filterOrderItemsByStatus(orderItemList);
mRootView.setPageIndex(0);
mRootView.returnOrderItemList(orderItemList);
//每次更新完數據,頁碼+1
......@@ -206,7 +209,6 @@ public class OrderCenterPresenter extends BasePresenter<OrderCenterContract.Mode
});
}
public boolean isNoMoreData() {
return noMoreData;
}
......
......@@ -4,8 +4,15 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.utils.JsonUtils;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.order.bean.response.OrderDiscountResponse;
import com.gingersoft.gsa.cloud.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.pay.bean.PayMethod;
import com.gingersoft.gsa.cloud.pay.util.PayMethodUtils;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderDetailContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderManagerResponse;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem3;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
......@@ -14,6 +21,9 @@ import com.jess.arms.utils.RxLifecycleUtils;
import org.simple.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
......@@ -36,7 +46,7 @@ import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
* ================================================
*/
@ActivityScope
public class OrderDetailPresenter extends BasePresenter<OrderDetailContract.Model, OrderDetailContract.View> {
public class OrderDetailPresenter extends BaseOrderConterPresenter<OrderDetailContract.Model, OrderDetailContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
......@@ -49,6 +59,7 @@ public class OrderDetailPresenter extends BasePresenter<OrderDetailContract.Mode
@Inject
public OrderDetailPresenter(OrderDetailContract.Model model, OrderDetailContract.View rootView) {
super(model, rootView);
}
@Override
......@@ -115,4 +126,157 @@ public class OrderDetailPresenter extends BasePresenter<OrderDetailContract.Mode
}
});
}
public boolean containCardPayment(List<OrderManagerResponse.OrderPayBean> orderPays){
if (orderPays != null && orderPays.size() > 0) {
List<PayMethod> payMethods = new ArrayList<>();
for (OrderManagerResponse.OrderPayBean orderPayBean : orderPays) {
PayMethod payMethod = new PayMethod();
payMethod.setPayType(orderPayBean.getPayType());
payMethod.setPayMoney(orderPayBean.getAmount());
payMethod.setTipsPrice(orderPayBean.getTipsPrice());
payMethods.add(payMethod);
}
PayMethod payMethod = PayMethodUtils.filterPaymentMethodById(payMethods, PayMethod.HYWEB_POS_TYPE_CC);
if (payMethod != null) {
//只有卡片支付才支持補小費
return true;
}
}
return false;
}
public List<SectionTextItem3> orderPayMethodTransSectionTextItem3(List<PayMethod> payMethodList) {
List<SectionTextItem3> sectionTextItem3List = new ArrayList<>();
for (PayMethod payMethod : payMethodList) {
SectionTextItem3 sectionTextItem3 = new SectionTextItem3();
sectionTextItem3.setLeftText(payMethod.getPayName());
sectionTextItem3.setCenterText(String.valueOf(0));
sectionTextItem3.setRightText(String.valueOf(payMethod.getPayMoney()));
sectionTextItem3.setLeftTextStyle(R.style.order_paymethod_text_style);
sectionTextItem3.setRightTextStyle(R.style.order_paymethod_text_style);
sectionTextItem3List.add(sectionTextItem3);
}
return sectionTextItem3List;
}
public List<SectionTextItem3> orderDetailTransSectionTextItem3(List<OrderDetail> orderDetailList) {
List<SectionTextItem3> sectionTextItem3List = new ArrayList<>();
for (OrderDetail orderDetail : orderDetailList) {
SectionTextItem3 sectionTextItem3 = new SectionTextItem3();
String foodName;
switch (orderDetail.getItemType()) {
case 2:
foodName = " " + orderDetail.getProductName();
break;
case 3:
foodName = " " + orderDetail.getProductName();
break;
default:
foodName = orderDetail.getProductName();
break;
}
sectionTextItem3.setLeftText(foodName);
sectionTextItem3.setCenterText(String.valueOf(orderDetail.getNumber()));
sectionTextItem3.setRightText(String.valueOf(orderDetail.getPrice()));
sectionTextItem3List.add(sectionTextItem3);
}
return sectionTextItem3List;
}
/**
* 獲取支付方式
*
* @param orderPays
* @return
*/
public List<PayMethod> getPayMethodList(List<OrderManagerResponse.OrderPayBean> orderPays) {
List<PayMethod> payMethodList = new ArrayList<>();
if (orderPays != null) {
for (OrderManagerResponse.OrderPayBean orderPayBean : orderPays) {
PayMethod payMethod = new PayMethod();
payMethod.setPayName(orderPayBean.getPayName());
payMethod.setPayMoney(orderPayBean.getAmount());
payMethodList.add(payMethod);
if (orderPayBean.getTipsPrice() != 0) {
//打印添加找零或貼士行
String linePayType = orderPayBean.getLinePayType() == 1 ? "找零" : "貼士";
PayMethod payMethod2 = new PayMethod();
//這裡打印退一格
payMethod2.setPayName(" " + linePayType);
payMethod2.setPayMoney(orderPayBean.getTipsPrice());
payMethodList.add(payMethod2);
}
}
}
return payMethodList;
}
/**
* 獲取賬單折扣列
*
* @param orderDetailItem
* @return
*/
public List<SectionTextItem3> getOrderDiscountSections(OrderManagerResponse orderDetailItem) {
List<SectionTextItem3> sectionTextItem3s = null;
if (orderDetailItem.getDiscountDetails() != null) {
sectionTextItem3s = new ArrayList<>();
//折扣
for (OrderDiscountResponse discount : orderDetailItem.getDiscountDetails()) {
sectionTextItem3s.add(discountTransSectionTextItem3(discount));
}
}
return sectionTextItem3s;
}
public SectionTextItem3 discountTransSectionTextItem3(OrderDiscountResponse discount) {
SectionTextItem3 sectionTextItem3 = new SectionTextItem3();
sectionTextItem3.setLeftText(discount.getRemark());
sectionTextItem3.setCenterText(String.valueOf(0));
sectionTextItem3.setRightText(String.valueOf(discount.getDiscountAmount()));
sectionTextItem3.setLeftTextStyle(com.gingersoft.gsa.cloud.common.R.style.order_paymethod_text_style);
sectionTextItem3.setRightTextStyle(com.gingersoft.gsa.cloud.common.R.style.order_paymethod_text_style);
return sectionTextItem3;
}
/**
* 獲取賬單小數列
*
* @param orderDetailItem
* @return
*/
public SectionTextItem3 getOrderRoudingSection(OrderManagerResponse orderDetailItem) {
if (orderDetailItem.getRounding() != null && orderDetailItem.getRounding() != 0) {
return SectionTextItem3.roundingTransSectionTextItem3(orderDetailItem.getRounding());
}
return null;
}
/**
* 获取服務費
*
* @param orderDetailItem
* @return
*/
public SectionTextItem3 getOrderServiceAmountSection(OrderManagerResponse orderDetailItem) {
if (orderDetailItem.getServiceAmount() != null && orderDetailItem.getServiceAmount() != 0) {
return SectionTextItem3.serviceAmountTransSectionTextItem3(orderDetailItem.getServiceAmount());
}
return null;
}
/**
* 返回合計金額
*
* @return
*/
public double getTotalMoney(List<SectionTextItem3> orderCenterDetailFoodList) {
double otherMoney = 0.0;
for (SectionTextItem3 item : orderCenterDetailFoodList) {
otherMoney = MoneyUtil.sum(otherMoney, Double.parseDouble(item.getRightText()));
}
return MoneyUtil.get_ItemDecimals_money(otherMoney);
}
}
......@@ -380,7 +380,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
public void initFoodGroupView(List<Food> foodGroupList) {
//总的页数向上取整
totalPage = (int) Math.ceil(foodGroupList.size() * 1.0 / GoldConstants.foodGriupPageSize);
totalPage = (int) Math.ceil(foodGroupList.size() * 1.0 / (foodGroupColumn * foodGroupRow));
int Rows = foodGroupRow;
if (foodGroupList.size() <= foodGroupColumn) {
......@@ -440,13 +440,11 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
} else {
ivPoints[i].setImageResource(R.drawable.meal_food_group_point_unfocused);
}
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ArmsUtils.dip2px(this,20),ArmsUtils.dip2px(this,12));
lp.leftMargin = ArmsUtils.dip2px(this,5);
ivPoints[i].setLayoutParams(lp);
ivPoints[i].setPadding(0, 0, 0, 0);
ll_food_group_point.addView(ivPoints[i]);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) ivPoints[i].getLayoutParams();
layoutParams.height = ll_food_group_point.getLayoutParams().height;
layoutParams.width = ArmsUtils.getScreenWidth(this) / totalPage;
ivPoints[i].setLayoutParams(layoutParams);
}
if (foodGroupList.size() > (Rows * foodGroupColumn)) {
ll_food_group_point.setVisibility(View.VISIBLE);
......
This diff is collapsed. Click to expand it.
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