Commit e84ec885 by 宁斌

bbpos打印堂食印單,結賬單調整

parent 9029ddf2
......@@ -7,6 +7,8 @@ import android.os.Bundle;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.common.core.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.common.core.order.order.TakeawayOrder;
import com.gingersoft.gsa.cloud.common.utils.CommonConfiguration;
import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
......@@ -22,7 +24,7 @@ import io.reactivex.schedulers.Schedulers;
public class MyActivityLifecycle implements Application.ActivityLifecycleCallbacks {
private static final String TAG = MyActivityLifecycle.class.getSimpleName();
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityCreated");
......@@ -38,13 +40,13 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac
@Override
public void onActivityStarted(Activity activity) {
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityStarted");
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityStarted");
}
@Override
public void onActivityResumed(Activity activity) {
String name = activity.getClass().getSimpleName();
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityResumed");
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityResumed");
if (name.equals("NewMainActivity")) {
Observable.create(new ObservableOnSubscribe<Void>() {
......@@ -59,40 +61,33 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac
}
}).subscribeOn(Schedulers.io()).subscribe();
} else if (name.equals("TableActivity")) {
//清空堂食訂單信息
CC.obtainBuilder("Component.Base.Order")
.setActionName("clearDoshokuOrder")
.build()
.call();
} else if (name.equals("OrderCenterActivity") || name.equals("OrderDetailActivity")) {
//清空堂食訂單信息
CC.obtainBuilder("Component.Base.Order")
.setActionName("clearDoshokuOrder")
.build()
.call();
} else if (name.equals("TableActivity") || name.equals("OrderCenterActivity") || name.equals("OrderDetailActivity")) {
//初始化堂食賬單類
DoshokuOrder.getInstance().initialization();
//初始化外賣賬單類
TakeawayOrder.getInstance().initialization();
}
GsaCloudApplication.getAppContext().setCurrentActivity(activity);
}
@Override
public void onActivityPaused(Activity activity) {
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityPaused");
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityPaused");
}
@Override
public void onActivityStopped(Activity activity) {
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityStopped");
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityStopped");
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivitySaveInstanceState");
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivitySaveInstanceState");
}
@Override
public void onActivityDestroyed(Activity activity) {
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityDestroyed");
LoganManager.w_action(TAG, activity.getClass().getSimpleName() + ": onActivityDestroyed");
// EventBus.getDefault().unregister(activity);
//横竖屏切换或配置改变时, Activity 会被重新创建实例, 但 Bundle 中的基础数据会被保存下来,移除该数据是为了保证重新创建的实例可以正常工作
activity.getIntent().removeExtra("isInitToolbar");
......
......@@ -75,4 +75,5 @@ public abstract class BaseOrder {
orderNo = null;
shoppingCart.initialization(false);
}
}
......@@ -19,4 +19,7 @@ public class OrderFactory {
return DoshokuOrder.getInstance();
}
}
}
......@@ -4,6 +4,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import com.gingersoft.gsa.cloud.common.core.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.common.core.print.bean.base.PrintFoodItem;
import java.util.List;
......@@ -20,10 +21,11 @@ public class PrintServingPaperContent implements PrintContent {
private String brand;
private String resturantName;
private String tableName;
private String orderNo;
private int person;
private String createTime;
private List<OrderDetail> foodList;
private List<PrintFoodItem> foodItemList;
//禮貌用語
private String politeLanguage;
}
......@@ -4,6 +4,8 @@ import android.os.Parcelable;
import com.gingersoft.gsa.cloud.common.core.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.common.core.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.common.core.print.bean.base.PrintBillItem;
import com.gingersoft.gsa.cloud.common.core.print.bean.base.PrintFoodItem;
import java.util.ArrayList;
import java.util.List;
......@@ -25,8 +27,8 @@ public class PrintSlipContent implements PrintContent {
private String orderNo;
private int person;
private String createTime;
private List<OrderDetail> foodList;
private List<BillItem> billItemList;
private List<PrintFoodItem> foodItemList;
private List<PrintBillItem> billItemList;
private double wholeAmount;
private double totalAmount;
//禮貌用語
......
package com.gingersoft.gsa.cloud.common.function.jump;
import java.util.ArrayList;
import java.util.List;
/**
* @author : bin
* @create date: 2020-11-26
* @update date: 2020-11-26
* @description:頁面跳轉管理類
*/
public class ActivityJumpManager{
private static ActivityJumpManager sActivityJumpManager;
private List<ActivityJumpStrategy> mJumpStrategies = new ArrayList<>();
public static ActivityJumpManager getDefault() {
if (sActivityJumpManager == null) {
sActivityJumpManager = new ActivityJumpManager();
}
return sActivityJumpManager;
}
}
......@@ -12,13 +12,13 @@ dependencies {
if (project.name != 'base-module' && project.name != 'database-module' &&project.name != 'arms' && project.name != 'fragmentation_core' && project.name != 'qm-qmui' && project.name != 'qm-arch' && project.name != 'qm-skin-maker') {
api project(':base-module')
}
if (project.name != 'base-module' && project.name != 'database-module' && project.name != 'table-base' && (project.name == 'table-module' || project.name == 'manager-module' || project.name == 'order-base')) {
api project(':table-base')
}
if (project.name != 'base-module' && project.name != 'order-base' && project.name != 'database-module' && (project.name == 'table-module' || project.name == 'print-module' ||
project.name == 'coldchain-module'|| project.name == 'delivery_pick_module' || project.name == 'order-advance-module')) {
api project(':order-base')
}
// if (project.name != 'base-module' && project.name != 'database-module' && project.name != 'table-base' && (project.name == 'table-module' || project.name == 'manager-module' || project.name == 'order-base')) {
// api project(':table-base')
// }
// if (project.name != 'base-module' && project.name != 'order-base' && project.name != 'database-module' && (project.name == 'table-module' || project.name == 'print-module' ||
// project.name == 'coldchain-module'|| project.name == 'delivery_pick_module' || project.name == 'order-advance-module')) {
// api project(':order-base')
// }
if (project.name == 'table-module' ) {
api project(':pay-module')
}
......
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// 避免 lint 检测出错时停止构建
lintOptions {
abortOnError false
}
defaultConfig {
if (project.ext.runAsApp) {
applicationId "com.gingersoft.orderAdvance"
}
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
multiDexEnabled true
//配置注解处理器
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
}
dataBinding {
enabled = true
}
resourcePrefix "order-advance"
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
kapt rootProject.ext.dependencies["dagger2-compiler"]
kapt rootProject.ext.dependencies["butterknife-compiler"]
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
# 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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.order_advance_module">
<application>
<activity
android:name=".mvp.ui.activity.DiningTableActivity"
android:screenOrientation="portrait"/>
<!-- arms配置 -->
<meta-data
android:name="com.gingersoft.gsa.cloud.common.config.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
</application>
</manifest>
\ 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.gingersoft.order_advance_module">
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name="com.gingersoft.gsa.cloud.app.GsaCloudApplication"
android:allowBackup="true"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_android">
<activity android:name=".mvp.ui.activity.DiningTableActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
<!-- arms配置 -->
<meta-data
android:name="com.gingersoft.gsa.cloud.common.config.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
<meta-data
android:name="design_width_in_dp"
android:value="360" />
<meta-data
android:name="design_height_in_dp"
android:value="640" />
</application>
</manifest>
\ No newline at end of file
package debug;
import com.billy.cc.core.component.CC;
import com.jess.arms.base.BaseApplication;
/**
* @author billy.qi
* @since 17/11/20 20:02
*/
public class MyApp extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
CC.enableVerboseLog(true);
CC.enableDebug(true);
CC.enableRemoteCC(true);
}
}
<resources>
<string name="app_name">預點餐</string>
</resources>
package com.gingersoft.order_advance_module;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.IComponent;
public class ComponentOrderAdvance implements IComponent {
@Override
public String getName() {
//组件的名称,调用此组件的方式:
// CC.obtainBuilder("ComponentA")...build().callAsync()
return "Component.OrderAdvance";
}
/**
* 组件被调用时的入口
* 要确保每个逻辑分支都会调用到CC.sendCCResult,
* 包括try-catch,if-else,switch-case-default,startActivity
* @param cc 组件调用对象,可从此对象中获取相关信息
* @return true:将异步调用CC.sendCCResult(...),用于异步实现相关功能,例如:文件加载、网络请求等
* false:会同步调用CC.sendCCResult(...),即在onCall方法return之前调用,否则将被视为不合法的实现
*/
@Override
public boolean onCall(CC cc) {
String actionName = cc.getActionName();
switch (actionName) {
default:
//这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例
//并且方法的返回值为false,代表不会异步调用CC.sendCCResult(...)
//在LocalCCInterceptor中将会返回错误码为-10的CCResult
break;
}
return false;
}
}
package com.gingersoft.order_advance_module.di.component;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.order_advance_module.di.module.DiningTableModule;
import com.jess.arms.di.scope.ActivityScope;
import com.gingersoft.order_advance_module.mvp.ui.activity.DiningTableActivity;
@ActivityScope
@Component(modules = DiningTableModule.class, dependencies = AppComponent.class)
public interface DiningTableComponent {
void inject(DiningTableActivity activity);
}
\ No newline at end of file
package com.gingersoft.order_advance_module.di.module;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.order_advance_module.mvp.contract.DiningTableContract;
import com.gingersoft.order_advance_module.mvp.model.DiningTableModel;
@Module
public class DiningTableModule {
private DiningTableContract.View view;
/**
* 构建DiningTableModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public DiningTableModule(DiningTableContract.View view) {
this.view = view;
}
@ActivityScope
@Provides
DiningTableContract.View provideDiningTableView() {
return this.view;
}
@ActivityScope
@Provides
DiningTableContract.Model provideDiningTableModel(DiningTableModel model) {
return model;
}
}
\ No newline at end of file
package com.gingersoft.order_advance_module.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
public interface DiningTableContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
}
}
package com.gingersoft.order_advance_module.mvp.model;
import android.app.Application;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.ActivityScope;
import javax.inject.Inject;
import com.gingersoft.order_advance_module.mvp.contract.DiningTableContract;
@ActivityScope
public class DiningTableModel extends BaseModel implements DiningTableContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public DiningTableModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
}
\ No newline at end of file
package com.gingersoft.order_advance_module.mvp.presenter;
import android.app.Application;
import com.gingersoft.order_advance_module.mvp.contract.DiningTableContract;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import javax.inject.Inject;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
@ActivityScope
public class DiningTablePresenter extends BasePresenter<DiningTableContract.Model, DiningTableContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public DiningTablePresenter(DiningTableContract.Model model, DiningTableContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
}
package com.gingersoft.order_advance_module.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.order_advance_module.di.component.DaggerDiningTableComponent;
import com.gingersoft.order_advance_module.di.module.DiningTableModule;
import com.gingersoft.order_advance_module.mvp.contract.DiningTableContract;
import com.gingersoft.order_advance_module.mvp.presenter.DiningTablePresenter;
import com.gingersoft.order_advance_module.R;
import static com.jess.arms.utils.Preconditions.checkNotNull;
public class DiningTableActivity extends BaseActivity<DiningTablePresenter> implements DiningTableContract.View {
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerDiningTableComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.diningTableModule(new DiningTableModule(this))
.build()
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.activity_dining_table; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
}
@Override
public void initIntent() {
}
@Override
public void initTopBar() {
}
@Override
public void initLanguage() {
}
@Override
public void initLayoutParams() {
}
@Override
public void initLayoutVisible() {
}
@Override
public void showLoading(String message) {
}
@Override
public void hideLoading() {
}
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.snackbarText(message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
finish();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
\ No newline at end of file
<resources>
<!-- <string name="app_name">預點餐</string>-->
</resources>
ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为library编译,否则别的组件依赖此module时会报错
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
// 避免 lint 检测出错时停止构建
lintOptions {
abortOnError false
}
defaultConfig {
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
multiDexEnabled true
//配置注解处理器
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
}
resourcePrefix "order_base"
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
shrinkResources false
zipAlignEnabled false
proguardFiles 'proguard.cfg'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
debugImplementation rootProject.ext.dependencies["canary-debug"]
releaseImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["junit"]
}
# 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
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.gsa.cloud.order.base" />
package com.gingersoft.gsa.cloud.common.order;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.IComponent;
import com.gingersoft.gsa.cloud.common.core.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.common.core.order.order.TakeawayOrder;
public class ComponentBaseOrder implements IComponent {
@Override
public String getName() {
//组件的名称,调用此组件的方式:
return "Component.Base.Order";
}
/**
* 组件被调用时的入口
* 要确保每个逻辑分支都会调用到CC.sendCCResult,
* 包括try-catch,if-else,switch-case-default,startActivity
*
* @param cc 组件调用对象,可从此对象中获取相关信息
* @return true:将异步调用CC.sendCCResult(...),用于异步实现相关功能,例如:文件加载、网络请求等
* false:会同步调用CC.sendCCResult(...),即在onCall方法return之前调用,否则将被视为不合法的实现
*/
@Override
public boolean onCall(CC cc) {
String actionName = cc.getActionName();
switch (actionName) {
case "clearDoshokuOrder":
clearOrder(cc);
break;
default:
//这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例
//并且方法的返回值为false,代表不会异步调用CC.sendCCResult(...)
//在LocalCCInterceptor中将会返回错误码为-10的CCResult
break;
}
return false;
}
private void clearOrder(CC cc) {
//初始化堂食賬單類
DoshokuOrder.getInstance().initialization();
//初始化外賣賬單類
TakeawayOrder.getInstance().initialization();
}
}
package com.gingersoft.gsa.cloud.common.order;
import com.gingersoft.gsa.cloud.common.core.member.MemberInfo;
/**
* @author : bin
* @create date: 2020-10-15
* @update date: 2020-10-15
* @description:會員接口
*
*/
public interface Member {
/**
* 會員會員信息
* @return
*/
MemberInfo getMemberInfo();
}
<resources>
<string name="app_name">order-base</string>
</resources>
package com.gingersoft.gsa.cloud.order.base;
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
......@@ -23,7 +23,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.joe.print.mvp.print.common.HtmlContract.LABLE_COLUMN;
import static com.joe.print.mvp.print.common.HtmlContract.LABLE_DIV;
import static com.joe.print.mvp.print.common.HtmlContract.LABLE_P;
/**
* 上菜紙打印 已改新版
......@@ -49,7 +51,7 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
@Override
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
if(mPrintServingPaperContent == null){
if (mPrintServingPaperContent == null) {
return new String[]{"<html><body></body></html>"};
}
List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList();
......@@ -60,11 +62,13 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
}
String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) +
generateHtmlFoodInfoTwoColumns(foodList) +
getWholeLine() +
getHtmlFooter() + "</body></html>";
// getHtmlPrintHeadInfo() +
// getHtmlPrintHeadOrderInfo(tableBean) +
// generateHtmlFoodInfoTwoColumns(foodList) +
// getWholeLine() +
// getHtmlFooter() +
getHtmlContent(deviceBean) +
"</body></html>";
int printCount = getPrintCount(mContext);
String[] pritContent = new String[printCount];
......@@ -74,7 +78,7 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
return pritContent;
}
private String getHtmlContent() {
private String getHtmlContent(PrinterDeviceBean deviceBean) {
List<HtmlLable> htmlLables = new ArrayList<>();
......@@ -87,24 +91,38 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
htmlLables.add(new HtmlLable(LABLE_DIV, mPrintServingPaperContent.getResturantName(),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_ALIGN, HtmlContract.value_align_center, HtmlContract.value_type_string),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_FONT_SIZE, "28")));
htmlLables.add(new HtmlLable(LABLE_P, HtmlContract.dividing_line));
/**
* 訂單
*/
String orderNum = "單號:";
if (TextUtil.isNotEmptyOrNullOrUndefined(DoshokuOrder.getInstance().getOrderNo())) {
orderNum = "單號:" + DoshokuOrder.getInstance().getOrderNo();
}
htmlLables.addAll(getRowInformation(new HtmlLable[]{new HtmlLable(LABLE_COLUMN, "餐檯:" + mPrintServingPaperContent.getTableName())}, 24));
htmlLables.addAll(getRowInformation(new HtmlLable[]{new HtmlLable(LABLE_COLUMN, "人數:" + mPrintServingPaperContent.getPerson())}, 24));
htmlLables.addAll(getRowInformation(new HtmlLable[]{new HtmlLable(LABLE_COLUMN, orderNum)}, 24));
htmlLables.addAll(getRowInformation(new HtmlLable[]{new HtmlLable(LABLE_COLUMN, "日期:" + TimeUtils.parseTimeRepeat(mPrintServingPaperContent.getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT))}, 24));
htmlLables.add(new HtmlLable(LABLE_P, HtmlContract.dividing_line));
/**
* 食品
*/
/**
* 賬單項
*/
if (mPrintServingPaperContent.getFoodItemList() != null && mPrintServingPaperContent.getFoodItemList().size() > 0) {
htmlLables.addAll(getBBPosFoodLineString(mPrintServingPaperContent.getFoodItemList(), deviceBean));
htmlLables.add(new HtmlLable(LABLE_P, HtmlContract.dividing_line));
}
/**
* 底部
*/
htmlLables.add(new HtmlLable(LABLE_DIV, mPrintServingPaperContent.getPoliteLanguage(),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_ALIGN, HtmlContract.value_align_center, HtmlContract.value_type_string),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_FONT_SIZE, "24")));
htmlLables.add(new HtmlLable(LABLE_DIV, TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_ALIGN, HtmlContract.value_align_center, HtmlContract.value_type_string),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_FONT_SIZE, "24")));
return getHtmlLables(htmlLables.toArray(new HtmlLable[htmlLables.size()]));
......@@ -115,7 +133,6 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
return 1;
}
private Bitmap getBitmap(Context mContext, PrinterDeviceBean printerDeviceBean) {
List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList();
if (foodList == null || foodList.size() <= 0) {
......
......@@ -6,6 +6,7 @@ import android.view.Gravity;
import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.common.core.print.bean.PrintSlipContent;
import com.gingersoft.gsa.cloud.common.core.print.bean.base.PrintBillItem;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.joe.print.mvp.model.bean.BillingBean;
import com.gingersoft.gsa.cloud.common.core.order.billItem.BillItem;
......@@ -74,12 +75,14 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
}
String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) +
generateHtmlFoodInfo(foodList) +
getHtmlBillInfo() +
getWholeLine() +
getHtmlFooter() + "</body></html>";
// getHtmlPrintHeadInfo() +
// getHtmlPrintHeadOrderInfo(tableBean) +
// generateHtmlFoodInfo(foodList) +
// getHtmlBillInfo() +
// getWholeLine() +
// getHtmlFooter() +
getHtmlContent(deviceBean) +
"</body></html>";
int printCount = getPrintCount(mContext);
String[] pritContent = new String[printCount];
......@@ -89,7 +92,7 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
return pritContent;
}
private String getHtmlContent() {
private String getHtmlContent(PrinterDeviceBean deviceBean) {
List<HtmlLable> htmlLables = new ArrayList<>();
......@@ -102,7 +105,7 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
htmlLables.add(new HtmlLable(LABLE_DIV, mPrintSlipContent.getResturantName(),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_ALIGN, HtmlContract.value_align_center, HtmlContract.value_type_string),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_FONT_SIZE, "28")));
htmlLables.add(new HtmlLable(LABLE_P, HtmlContract.dividing_line));
/**
* 訂單
*/
......@@ -115,19 +118,41 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
htmlLables.addAll(getRowInformation(new HtmlLable[]{new HtmlLable(LABLE_COLUMN, orderNum)}, 24));
htmlLables.addAll(getRowInformation(new HtmlLable[]{new HtmlLable(LABLE_COLUMN, "日期:" + TimeUtils.parseTimeRepeat(mPrintSlipContent.getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT))}, 24));
htmlLables.add(new HtmlLable(LABLE_P, HtmlContract.dividing_line));
/**
* 食品
*/
if (mPrintSlipContent.getFoodItemList() != null && mPrintSlipContent.getFoodItemList().size() > 0) {
htmlLables.addAll(getBBPosFoodLineString(mPrintSlipContent.getFoodItemList(), deviceBean));
htmlLables.add(new HtmlLable(LABLE_P, HtmlContract.dividing_line));
}
/**
* 賬單項
* 賬單項、總金額
*/
List<PrintBillItem> billItemList = mPrintSlipContent.getBillItemList();
if (billItemList.size() > 0) {
for (PrintBillItem billItem : billItemList) {
htmlLables.addAll(getRowInformation(new HtmlLable[]{
new HtmlLable(LABLE_COLUMN, billItem.getBillName()),
new HtmlLable(LABLE_COLUMN, billItem.getBillAmount(), new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_OFFSET, HtmlContract.value_offset_last))}, 28));
}
htmlLables.add(new HtmlLable(LABLE_P, HtmlContract.dividing_line));
}
//總金額
htmlLables.addAll(getRowInformation(new HtmlLable[]{
new HtmlLable(LABLE_COLUMN, "總金額:"),
new HtmlLable(LABLE_COLUMN, String.valueOf(mPrintSlipContent.getTotalAmount()), new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_OFFSET, HtmlContract.value_offset_last))}, 35));
htmlLables.add(new HtmlLable(LABLE_P, HtmlContract.dividing_line));
/**
* 底部
*/
htmlLables.add(new HtmlLable(LABLE_DIV, mPrintSlipContent.getPoliteLanguage(),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_ALIGN, HtmlContract.value_align_center, HtmlContract.value_type_string),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_FONT_SIZE, "24")));
htmlLables.add(new HtmlLable(LABLE_DIV, TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_ALIGN, HtmlContract.value_align_center, HtmlContract.value_type_string),
new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_FONT_SIZE, "24")));
return getHtmlLables(htmlLables.toArray(new HtmlLable[htmlLables.size()]));
......
......@@ -14,8 +14,6 @@ include 'cc-register',
'base-module',
'database-module',
'pay-module',
'table-base',
'order-base',
'login-module',
'main-module',
'download-module',
......
ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为library编译,否则别的组件依赖此module时会报错
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
// 避免 lint 检测出错时停止构建
lintOptions {
abortOnError false
}
defaultConfig {
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
multiDexEnabled true
}
resourcePrefix "table_base"
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
shrinkResources false
zipAlignEnabled false
proguardFiles 'proguard.cfg'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
debugImplementation rootProject.ext.dependencies["canary-debug"]
releaseImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["junit"]
implementation 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.projectlombok:lombok:1.18.10'
}
# 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
package com.gingersoft.gsa.cloud;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.gingersoft.gsa.table_base.test", appContext.getPackageName());
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.gsa.cloud" />
<resources>
<string name="app_name">table-base</string>
</resources>
package com.gingersoft.gsa.cloud;
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
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