Commit 97c4767f by Wyh

8.07 1、是否打印賬單上問題 2、報警推送內容優化 3、心跳斷開報警優化 3、套餐不能打印PRJ問題 4、賬單印單打印多張功能…

8.07 1、是否打印賬單上問題 2、報警推送內容優化 3、心跳斷開報警優化 3、套餐不能打印PRJ問題 4、賬單印單打印多張功能 5、歷史訂單詳情顯示多種支付方式 6、加入lalamove配送方式 7、打印機默認字體大小調整 8、針式打印流程優化

Signed-off-by: Wyh <1239658231>
parent 98706bfa
......@@ -44,7 +44,7 @@ android {
/**
* 版本号
*/
schemaVersion 13
schemaVersion 14
/**
* greendao输出dao的数据库操作实体类文件夹(相对路径 包名+自定义路径名称,包将创建于包名的直接路径下)
*/
......
......@@ -705,14 +705,14 @@ public class OrderDetail implements Serializable {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX : productnameBean.getChild()) {
if (childBeanX != null) {
//判斷是否打印,為true的時候會同時打印主項
if (isPrint(childBeanX.getPrintTo(), type)) {
if (childBeanX.getPrintToBill() == 1) {
isCheck = true;
break;
}
if (childBeanX.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) {
//判斷是否打印,為true的時候會同時打印主項
if (isPrint(childBean.getPrintTo(), type)) {
if (childBean.getPrintToBill() == 1) {
isCheck2 = true;
break;
}
......@@ -721,7 +721,7 @@ public class OrderDetail implements Serializable {
}
}
}
if (isCheck || isPrint(productnameBean.getPrintToBill(), Double.valueOf(productnameBean.getPRICE()), productnameBean.getPrintTo(), type)) {
if (isCheck || isPrintTo(productnameBean.getPrintToBill(), Double.valueOf(productnameBean.getPRICE()), productnameBean.getPrintTo(), type)) {
// 細項勾選了||主項勾選了||主項價格不為0 主項就會打印
orderDetailList.add(getOrderDetailByProductnameBean(productnameBean.getPRODUCT_NAME(), Integer.parseInt(productnameBean.getNum()), Double.valueOf(productnameBean.getPRICE()), 1));
addFoodItem(type, orderDetailList, productnameBean, isCheck2);
......@@ -750,8 +750,8 @@ public class OrderDetail implements Serializable {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX : productnameBean.getChild()) {
if (childBeanX != null) {
if (isCheck2 || isPrint(childBeanX.getPrintToBill(), Double.valueOf(childBeanX.getPRICE()), childBeanX.getPrintTo(), type)) {
// 二級細項勾選了||細項勾選了||細項價格不為0 項就會打印
if (isCheck2 || isPrintToBill(childBeanX.getPrintToBill(), Double.valueOf(childBeanX.getPRICE()))) {
// 二級細項勾選了||細項勾選了||細項價格不為0 項就會打印
orderDetailList.add(getOrderDetailByProductnameBean(childBeanX.getPRODUCT_NAME(), Integer.parseInt(childBeanX.getNum()), Double.valueOf(childBeanX.getPRICE()), 2));
addSecondFood(type, orderDetailList, childBeanX);
} else {
......@@ -773,7 +773,7 @@ public class OrderDetail implements Serializable {
private static void addSecondFood(int type, List<OrderDetail> orderDetailList, OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX) {
if (childBeanX.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) {
if (isPrint(childBeanX.getPrintToBill(), Double.valueOf(childBeanX.getPRICE()), childBeanX.getPrintTo(), type)) {
if (isPrintToBill(childBeanX.getPrintToBill(), Double.valueOf(childBeanX.getPRICE()))) {
//如果二級細項勾選了||價格不為0 二級細項就打印
orderDetailList.add(getOrderDetailByProductnameBean(childBean.getPRODUCT_NAME(), Integer.parseInt(childBean.getNum()), Double.valueOf(childBean.getPRICE()), 3));
}
......@@ -782,9 +782,13 @@ public class OrderDetail implements Serializable {
}
private static boolean isPrint(int printToBill, double price, int printTo, int type) {
private static boolean isPrintTo(int printToBill, double price, int printTo, int type) {
//printTo和price不為0 都會打印
return (!(printToBill == 0 && price == 0) || isPrint(printTo, type));
return isPrintToBill(printToBill, price) || isPrint(printTo, type);
}
private static boolean isPrintToBill(int printToBill, double price) {
return !(printToBill == 0 && price == 0);
}
/**
......@@ -1009,6 +1013,7 @@ public class OrderDetail implements Serializable {
orderDetail.setType(FOOD_TYPE);
orderDetail.setItemType(2);
orderDetail.setProp(prop);
orderDetail.setPrintseting(foodCombo.getPrintSeting());
// orderDetail.setComboAuto(foodCombo.isAutoMode());
if (isRvMealClicked) {
//手动点击细项 才将子食品作为主体被选中
......
......@@ -256,11 +256,21 @@ public class OkHttp3Utils {
* 心跳接口報錯,推送給相關人員
*/
public static void noticePersonnel(String errCode, String pushContent) {
String restaurantInfo = "品牌名:" +
GsaCloudApplication.getBrandName(GsaCloudApplication.getAppContext()) +
"餐廳名:" +
GsaCloudApplication.getRestaurantName(GsaCloudApplication.getAppContext()) +
"餐廳ID:" +
GsaCloudApplication.getRestaurantId(GsaCloudApplication.getAppContext()) +
"報錯CODE:" +
errCode +
"報錯原因:" +
pushContent;
RequestBody requestBody = new FormBody.Builder()
.add("code", errCode)//錯誤碼
.add("shopId", GsaCloudApplication.getGsPosShopId(GsaCloudApplication.getAppContext()))
.add("source", GsaCloudApplication.getAppName() + "")//錯誤來源
.add("pushContent", "報錯內容:" + pushContent)//推送內容
.add("pushContent", restaurantInfo)//推送內容
.add("version", DeviceUtils.getVersionName(GsaCloudApplication.getAppContext()))//系統版本
.build();
OkHttp3Utils.post(HttpsConstans.ROOT_URL + "/member-web/api/monitor/pushAlarm", requestBody)
......
......@@ -18,6 +18,11 @@ public class TextUtil {
str.equals("null") || str.equals("undefined");
}
public static boolean isNotEmptyOrNullOrUndefined(String str) {
return str != null && str.length() != 0 &&
!str.equals("null") && !str.equals("undefined");
}
public static String isEmptyReturnString(String str) {
if (str == null || str.length() == 0 ||
str.equals("null") || str.equals("undefined")) {
......
package com.gingersoft.gsa.cloud.constans;
public class PrintConstans {
//默認打印機數據
public static final String DEFAULT_PRINT_IP = "default_print_ip";
public static final String DEFAULT_PRINT_PORT = "default_print_port";
public static final String DEFAULT_PRINT_PAPER = "default_print_paper";
public static final int SO_TIMEOUT = 10000;//讀取/輸入io流數據超時的時間
public static final int PRINT_TIMEOUT = 5000;//打印機連接超時時間
public static final int SO_TIMEOUT = 10 * 1000;//讀取/輸入io流數據超時的時間
public static final int PRINT_TIMEOUT = 5 * 1000;//打印機連接超時時間
//默認打印方式
public final static String DEFAULT_PRINT_METHOD = "default_print";
......@@ -34,7 +30,7 @@ public class PrintConstans {
public final static int PRINT_SERVE = 0;//上菜紙
public final static int PRINT_SLIP = 1;//印單
public final static int PRINT_BILL = 2;//結賬單
public final static int PRINT_KITCHEN = 3;//送單,廚房單
public final static int PRINT_KITCHEN = 3;//廚房單
public final static int PRINT_CLEAN_MACHINE = 4;//清機報表 或者其他View
public final static int PRINT_OTHER_ORDER = 5;//接單內容打印 外送印單
public final static int PRINT_INSTRUCTION = 6;//開錢箱
......
......@@ -93,6 +93,27 @@ public class ComboItem {
private byte isMainAccount;
// /**
// * 廚房單打印主項
// */
// private long ktPrintMainItem;
//
// /**
// * 0=系統顏色, 1=黑色, 2=紅色
// */
// private long printFont;
// /**
// * 當金額=0時, 是否打印在帳單上
// */
// private long printToBill;
// /**
// * 0食品清单打印 账单打印//1食品清单不打印 账单不打印//2食品清单打印 账单不打印//3食品清单不打印 账单打印
// */
// private long printTo;
// /**
// * 是否打印价格
// */
// private long ktShowPrice;
/**
* 自定義字段
*/
......@@ -145,12 +166,15 @@ public class ComboItem {
/*** 套餐細項*/
@Transient
private Modifier modifier;
/**
* 打印設定, 用逗號分隔, *=切紙
*/
private String printSeting="";
@Generated(hash = 1123579083)
@Generated(hash = 426398155)
public ComboItem(Long id, long comId, long fid, long qty, double diffAmt, long seqNo, long visible, Date createTime,
String createBy, Date updateTime, long conditions, long isRT, byte deletes, long posId, long restaurant_id,
byte isMainAccount) {
byte isMainAccount, String printSeting) {
this.id = id;
this.comId = comId;
this.fid = fid;
......@@ -167,6 +191,7 @@ public class ComboItem {
this.posId = posId;
this.restaurant_id = restaurant_id;
this.isMainAccount = isMainAccount;
this.printSeting = printSeting;
}
@Generated(hash = 435228340)
......@@ -489,5 +514,52 @@ public class ComboItem {
public void setIsMainAccount(byte isMainAccount) {
this.isMainAccount = isMainAccount;
}
//
// public long getKtPrintMainItem() {
// return ktPrintMainItem;
// }
//
// public void setKtPrintMainItem(long ktPrintMainItem) {
// this.ktPrintMainItem = ktPrintMainItem;
// }
//
// public long getPrintFont() {
// return printFont;
// }
//
// public void setPrintFont(long printFont) {
// this.printFont = printFont;
// }
//
// public long getPrintToBill() {
// return printToBill;
// }
//
// public void setPrintToBill(long printToBill) {
// this.printToBill = printToBill;
// }
//
// public long getPrintTo() {
// return printTo;
// }
//
// public void setPrintTo(long printTo) {
// this.printTo = printTo;
// }
//
// public long getKtShowPrice() {
// return ktShowPrice;
// }
//
// public void setKtShowPrice(long ktShowPrice) {
// this.ktShowPrice = ktShowPrice;
// }
public String getPrintSeting() {
return printSeting;
}
public void setPrintSeting(String printSeting) {
this.printSeting = printSeting;
}
}
......@@ -40,6 +40,7 @@ public class ComboItemDao extends AbstractDao<ComboItem, Long> {
public final static Property PosId = new Property(13, long.class, "posId", false, "POS_ID");
public final static Property Restaurant_id = new Property(14, long.class, "restaurant_id", false, "RESTAURANT_ID");
public final static Property IsMainAccount = new Property(15, byte.class, "isMainAccount", false, "IS_MAIN_ACCOUNT");
public final static Property PrintSeting = new Property(16, String.class, "printSeting", false, "PRINT_SETING");
}
......@@ -70,7 +71,8 @@ public class ComboItemDao extends AbstractDao<ComboItem, Long> {
"\"DELETES\" INTEGER NOT NULL ," + // 12: deletes
"\"POS_ID\" INTEGER NOT NULL ," + // 13: posId
"\"RESTAURANT_ID\" INTEGER NOT NULL ," + // 14: restaurant_id
"\"IS_MAIN_ACCOUNT\" INTEGER NOT NULL );"); // 15: isMainAccount
"\"IS_MAIN_ACCOUNT\" INTEGER NOT NULL ," + // 15: isMainAccount
"\"PRINT_SETING\" TEXT);"); // 16: printSeting
}
/** Drops the underlying database table. */
......@@ -114,6 +116,11 @@ public class ComboItemDao extends AbstractDao<ComboItem, Long> {
stmt.bindLong(14, entity.getPosId());
stmt.bindLong(15, entity.getRestaurant_id());
stmt.bindLong(16, entity.getIsMainAccount());
String printSeting = entity.getPrintSeting();
if (printSeting != null) {
stmt.bindString(17, printSeting);
}
}
@Override
......@@ -151,6 +158,11 @@ public class ComboItemDao extends AbstractDao<ComboItem, Long> {
stmt.bindLong(14, entity.getPosId());
stmt.bindLong(15, entity.getRestaurant_id());
stmt.bindLong(16, entity.getIsMainAccount());
String printSeting = entity.getPrintSeting();
if (printSeting != null) {
stmt.bindString(17, printSeting);
}
}
@Override
......@@ -176,7 +188,8 @@ public class ComboItemDao extends AbstractDao<ComboItem, Long> {
(byte) cursor.getShort(offset + 12), // deletes
cursor.getLong(offset + 13), // posId
cursor.getLong(offset + 14), // restaurant_id
(byte) cursor.getShort(offset + 15) // isMainAccount
(byte) cursor.getShort(offset + 15), // isMainAccount
cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16) // printSeting
);
return entity;
}
......@@ -199,6 +212,7 @@ public class ComboItemDao extends AbstractDao<ComboItem, Long> {
entity.setPosId(cursor.getLong(offset + 13));
entity.setRestaurant_id(cursor.getLong(offset + 14));
entity.setIsMainAccount((byte) cursor.getShort(offset + 15));
entity.setPrintSeting(cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16));
}
@Override
......
......@@ -14,10 +14,10 @@ import org.greenrobot.greendao.identityscope.IdentityScopeType;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/**
* Master of DAO (schema version 13): knows all DAOs.
* Master of DAO (schema version 14): knows all DAOs.
*/
public class DaoMaster extends AbstractDaoMaster {
public static final int SCHEMA_VERSION = 13;
public static final int SCHEMA_VERSION = 14;
/** Creates underlying database table using DAOs. */
public static void createAllTables(Database db, boolean ifNotExists) {
......
......@@ -162,7 +162,7 @@ public class ComboItemDaoUtils {
ArrayList<ComboItem> comboItems = new ArrayList<>();
// String sql = "SELECT c.*,f.FOOD_NAME,f.FOOD_NAME1,f.FOOD_NAME2,f.PRICE,f.AUTO_MOD FROM COMBO_ITEM c join FOOD f on c.FID=f.FID and f.INVISIBLE=0 join FOOD_COMBO r on r.COM_ID=c.COM_ID ";
String sql = "SELECT c.*,f.FOOD_NAME,f.FOOD_NAME1,f.FOOD_NAME2,f.PRICE,f.AUTO_MOD,SELECT_QTY,DEF_MODIFIER,INVISIBLE FROM COMBO_ITEM c join FOOD f on c.FID=f.FID and f.INVISIBLE!=1 join FOOD_COMBO r on r.COM_ID=c.COM_ID and r.DELETES!=1";
String sql = "SELECT c.*,f.FOOD_NAME,f.FOOD_NAME1,f.FOOD_NAME2,f.PRICE,f.AUTO_MOD,f.PRINT_SETING,SELECT_QTY,DEF_MODIFIER,INVISIBLE FROM COMBO_ITEM c join FOOD f on c.FID=f.FID and f.INVISIBLE!=1 join FOOD_COMBO r on r.COM_ID=c.COM_ID and r.DELETES!=1";
if (fid > 0) {
sql = sql + " where r.FID='" + fid + "'";
......@@ -182,6 +182,7 @@ public class ComboItemDaoUtils {
order.setAutoMode(c.getInt(c.getColumnIndex("AUTO_MOD")));
order.setSelectQty(c.getInt(c.getColumnIndex("SELECT_QTY")));
order.setInvisible(c.getLong(c.getColumnIndex("INVISIBLE")));
order.setPrintSeting(c.getString(c.getColumnIndex("PRINT_SETING")));
int deletes = c.getInt(c.getColumnIndex("DELETES"));
String defmodifier = c.getString(c.getColumnIndex("DEF_MODIFIER"));
if (!TextUtils.isEmpty(defmodifier) && !", ".equals(defmodifier)) {
......
......@@ -18,7 +18,6 @@ package com.gingersoft.gsa.cloud.print;
import android.bluetooth.BluetoothDevice;
import android.os.AsyncTask;
import android.util.Log;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
......@@ -190,7 +189,6 @@ public class PrintExecutor {
protected Integer doInBackground(PrintDataMaker... makers) {
if (makers == null || makers.length < 1)
return PrintSocketHolder.ERROR_0;
Log.e("eee", "個數:" + makers.length);
return doRequest(makers[0]);
}
......
......@@ -45,11 +45,12 @@ public class PrintSocketHolder {
public static final int STATE_4 = 4;// 关闭输出流
public static final int ERROR_0 = 0;// 成功
public static final int ERROR_1 = -1;// 生成测试页面数据失败
public static final int ERROR_2 = -2;// 创建Socket失败
public static final int ERROR_2 = -2;// 创建Socket失败,未連接到打印機
public static final int ERROR_3 = -3;// 获取输出流失败
public static final int ERROR_4 = -4;// 写入测试页面数据失败
public static final int ERROR_5 = -5;// 必要参数不能为空
public static final int ERROR_6 = -6;// 关闭Socket出错
public static final int ERROR_100 = -100;// 失败
private static final UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");//蓝牙打印UUID
// private String ip;
......
......@@ -186,7 +186,6 @@ public class PrinterUtils {
return null;
}
ArrayList<byte[]> data = decodeBitmapToDataList(resizeImage, parting);
resizeImage.recycle();
return data;
}
......
......@@ -435,7 +435,6 @@ public abstract class PrinterWriter {
if (scalingImage == null)
return null;
ArrayList<byte[]> data = PrinterUtils.decodeBitmapToDataList(image, heightParting);
image.recycle();
return data;
}
......
......@@ -76,7 +76,6 @@ class OrderDetails {
var orderPayType: Int = 0//0店內支付,1為貨到付款,2是在線支付
var isDelete: Int = 1 //默認為1,為0是第三方物流,其他則是本店配送
var payTime: String? = null
//
var payType: Int = 0//1:積分支付;2:支付寶;3:财付通;4:微信支付;5:貨到付款;6:其他支付
var payName: String? = null
var payAmount: Double = 0.0
......@@ -107,6 +106,7 @@ class OrderDetails {
// * * Order Cancelled Before Collection - 訂單已取消 - 取餐前 8
// * * Order Cancelled After Collection - 訂單已取消 - 取餐后 9
// * * Order Assigned To Another Delivery Man - 已指派另一位配送員 10
var payMultiple: List<PayMultiple>? = null
class PRODUCTNAMEBean : Serializable {
/**
......@@ -124,8 +124,6 @@ class OrderDetails {
var PRODUCT_NAME: String? = null
var child: List<ChildBeanX>? = null
var printseting: String? = null
var printToBill: Int = 1 //當金額=0時,是否打印在賬單上 0 否 1 是
//0食品清单打印 账单打印
//1食品清单不打印 账单不打印
......@@ -154,7 +152,7 @@ class OrderDetails {
//1食品清单不打印 账单不打印
//2食品清单打印 账单不打印
//3食品清单不打印 账单打印
var printTo: Int = 0
// var printTo: Int = 0
class ChildBean : Serializable {
/**
......@@ -175,12 +173,14 @@ class OrderDetails {
//1食品清单不打印 账单不打印
//2食品清单打印 账单不打印
//3食品清单不打印 账单打印
var printTo: Int = 0
// var printTo: Int = 0
}
}
}
data class OrderPayAmountVo(var payTypeId: Int, var amount: Double, var payName: String) : Serializable
data class CouponBean(val couponName: String, val discount_amount: Float) : Serializable
data class PayMultiple(val payTypeId: String, val amount: Double, val payName: String, val points: Double) : Serializable
}
}
\ No newline at end of file
......@@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal">
<TextView
......@@ -10,16 +10,18 @@
style="@style/Print_text_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
tools:text="食品名食品名食品名食品名食品名食品名"
android:layout_weight="0.6" />
<TextView
android:id="@+id/tv_food_quantity"
style="@style/Print_text_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:layout_weight="0.15"
android:layout_gravity="bottom"
android:gravity="right" />
tools:text="X1100024242211222220"
android:gravity="right|center_vertical" />
<TextView
android:id="@+id/tv_food_price"
......@@ -27,6 +29,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="0.3"
android:gravity="right" />
tools:text="價格:$100000"
android:layout_weight="0.25"
android:gravity="right|center_vertical" />
</LinearLayout>
\ No newline at end of file
......@@ -6,5 +6,6 @@
<item name="QMUITabSegmentStyle">@style/QMUITabSegmentStyle</item>
<!-- <item name="android:windowActivityTransitions">false</item>-->
<!-- <item name="android:windowDisablePreview">true</item>-->
<!-- <item name="android:forceDarkAllowed"></item>-->
</style>
</resources>
\ No newline at end of file
......@@ -25,4 +25,6 @@
<item name="layout_for_test" type="id"/>
<item name="topbar_heart_disconnect" type="id"/>
<item type="id" name="statusbarutil_fake_status_bar_view" />
<item type="id" name="statusbarutil_translucent_view" />
</resources>
\ No newline at end of file
......@@ -7,8 +7,8 @@ ext {
targetSdkVersion : 28,
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
versionCode : 21,
versionName : "1.2.1"
versionCode : 5,
versionName : "1.0.5"
]
version = [
......
......@@ -5,15 +5,13 @@ import android.content.Intent;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.constans.UserConstans;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.UserConstans;
import com.gingersoft.gsa.cloud.login.mvp.presenter.BaseLoginPresenter;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.SwitchServerActivity;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionRestaurantItem;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem;
import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog;
import com.gingersoft.gsa.cloud.login.mvp.presenter.BaseLoginPresenter;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.SwitchServerActivity;
import com.jess.arms.base.BaseActivity;
import java.util.ArrayList;
......
......@@ -97,7 +97,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
@Override
public void onError(Throwable t) {
super.onError(t);
OkHttp3Utils.noticePersonnel(AppConstans.RP_LOGIN_ERROR, t.getMessage());
OkHttp3Utils.noticePersonnel(AppConstans.RP_LOGIN_ERROR, "登陸報錯:"+t.getMessage());
if (IAcitivity instanceof LoginActivity) {
} else {
mRootView.launchActivity(new Intent(IAcitivity, LoginActivity.class));
......
......@@ -15,21 +15,22 @@ import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.constans.UserConstans;
import com.gingersoft.gsa.cloud.base.utils.StatusBarUtil;
import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gingersoft.gsa.cloud.constans.UserConstans;
import com.gingersoft.gsa.cloud.login.R;
import com.gingersoft.gsa.cloud.login.R2;
import com.gingersoft.gsa.cloud.login.di.component.DaggerLoginComponent;
import com.gingersoft.gsa.cloud.login.mvp.contract.LoginContract;
import com.gingersoft.gsa.cloud.login.mvp.contract.LoginInterfaceImpl;
import com.gingersoft.gsa.cloud.login.mvp.presenter.LoginPresenter;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.google.android.material.textfield.TextInputEditText;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.integration.AppManager;
......@@ -95,6 +96,8 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
@Override
public int initView(@Nullable Bundle savedInstanceState) {
StatusBarUtil.setTransparent(this);
StatusBarUtil.setDarkMode(this);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);//SOFT_INPUT_ADJUST_NOTHING
return R.layout.user_login_activity_login; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
......@@ -102,18 +105,6 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
@Override
public void initData(@Nullable Bundle savedInstanceState) {
((ImageView)findViewById(R.id.iv_top_bg)).setAdjustViewBounds(true);
// inside your activity (if you did not enable transitions in your theme)
// getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
// set an exit transition
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// getWindow().setExitTransition(new Explode());
// }
//
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Slide slide = new Slide();
// slide.setDuration(1000);
// getWindow().setExitTransition(slide);
// }
mPresenter.requestExternalStoragePermission();
//顯示記住的登錄名
if (!Objects.equals(SPUtils.get(mContext, UserConstans.LOGIN_USERNAME, ""), "")) {
......
......@@ -15,8 +15,10 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import androidx.viewpager2.widget.ViewPager2;
import com.gingersoft.gsa.cloud.base.utils.StatusBarUtil;
import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.UserConstans;
......@@ -78,6 +80,7 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem
@Override
public int initView(@Nullable Bundle savedInstanceState) {
StatusBarUtil.setColorNoTranslucent(this, ContextCompat.getColor(this, R.color.white));
return R.layout.activity_welcome; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
......
<?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:background="@color/white"
android:orientation="vertical">
<RadioGroup
......
......@@ -2,6 +2,7 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="match_parent">
<RelativeLayout
......
......@@ -5,6 +5,7 @@
android:layout_height="match_parent"
android:background="@color/theme_white_color"
android:fillViewport="true"
android:fitsSystemWindows="false"
android:orientation="vertical">
<LinearLayout
......@@ -15,18 +16,18 @@
<ImageView
android:id="@+id/iv_top_bg"
android:layout_width="match_parent"
android:scaleType="fitXY"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/img_login_top_bg" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_20"
android:layout_weight="1"
android:orientation="vertical"
android:paddingLeft="@dimen/dp_19"
android:paddingRight="@dimen/dp_19"
android:layout_marginTop="@dimen/dp_20"
android:orientation="vertical">
android:paddingRight="@dimen/dp_19">
<TextView
android:id="@+id/login_title"
......@@ -83,8 +84,8 @@
android:layout_toLeftOf="@id/iv_clear_account"
android:layout_toRightOf="@id/iv_account"
android:hint="請輸入賬戶名或手機號"
android:maxLines="1"
android:maxLength="16"
android:maxLines="1"
android:paddingRight="@dimen/dp_10" />
</RelativeLayout>
......@@ -138,8 +139,8 @@
android:layout_toRightOf="@id/iv_pwd"
android:hint="輸入6~20個字符"
android:inputType="textPassword"
android:maxLines="1"
android:maxLength="20"
android:maxLines="1"
android:paddingRight="@dimen/dp_10" />
</RelativeLayout>
......@@ -208,17 +209,18 @@
</LinearLayout>
</LinearLayout>
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_gsa_user_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_login_btn"
android:gravity="center"
android:layout_gravity="bottom"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginRight="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginRight="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_60"
android:background="@drawable/selector_login_btn"
android:gravity="center"
android:text="登錄"
android:textColor="@color/white"
android:textSize="@dimen/dp_16" />
......
......@@ -255,11 +255,14 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
functions.add(new Function((long) 139, 150, 5, "外送/自取", R.drawable.ic_delivery_mode, 0));
// functions.add(new Function((long) 140, 150, 5, "外賣模式", R.drawable.ic_outsourcing_model_close, 0));
// functions.add(new Function((long) 141, 150, 5, "預點餐模式", R.drawable.ic_pre_order_mode_close, 1));
if (BuildConfig.DEBUG) {
functions.add(new Function((long) 151, 0, 5, "管理", 0, 0));
if (BuildConfig.DEBUG) {
functions.add(new Function((long) 142, 151, 5, "賬單管理", R.drawable.ic_meals_menu_management, 0));
functions.add(new Function((long) 143, 151, 5, "餐檯管理", R.drawable.ic_dining_table_management, 0));
}
functions.add(new Function((long) 144, 151, 5, "打印管理", R.drawable.ic_print_management, 0));
if (BuildConfig.DEBUG) {
functions.add(new Function((long) 145, 151, 5, "支付管理", R.drawable.ic_pay_management_close, 1));
functions.add(new Function((long) 146, 151, 5, "折扣管理", R.drawable.ic_discount_management_close, 1));
functions.add(new Function((long) 147, 151, 5, "沽清管理", R.drawable.ic_sell_off_manger, 0));
......
......@@ -2,7 +2,8 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:background="@color/white">
<androidx.constraintlayout.widget.ConstraintLayout
......@@ -113,13 +114,13 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="@dimen/dp_5"
android:focusableInTouchMode="true"
android:focusable="true"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:focusable="true"
android:focusableInTouchMode="true"
app:layout_constraintBottom_toTopOf="@id/tv_more_report"
app:layout_constraintLeft_toLeftOf="@id/cv_white_bg"
app:layout_constraintRight_toRightOf="@id/cv_white_bg"
app:layout_constraintBottom_toTopOf="@id/tv_more_report"
app:layout_constraintTop_toBottomOf="@id/tv_today_time" />
......@@ -132,9 +133,9 @@
android:id="@+id/tv_more_report"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/dp_10"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10"
android:text="更多報表 >"
android:textColor="#3c3c3c"
android:textSize="@dimen/sp_12"
......
......@@ -160,12 +160,13 @@ class WeatherRepository private constructor(private val network: CoolWeatherNetw
network.cancelOrder(getBody("memberId" to memberId, "orderId" to orderId, "status" to status, "type" to "2", "updateBy" to updateBy, "reasonId" to reasonId, "reasonDesc" to reasonDesc))
}
suspend fun getCancelReason(restaurantId: String, type: String) = withContext(Dispatchers.IO) {
val requestBody = FormBody.Builder()
.add("restaurantId", restaurantId)
.add("type", type)//取消原因類型,1食品取消,2,物流取消,3,訂單取消
.build()
network.getCancelReason(requestBody)
suspend fun getCancelReason(brandId: Int, restaurantId: Int, type: Int) = withContext(Dispatchers.IO) {
// val requestBody = FormBody.Builder()
// .add("brandId", brandId)
// .add("restaurantId", restaurantId)
// .add("type", type)//取消原因類型,1食品取消,2,物流取消,3,訂單取消
// .build()
network.getCancelReason(brandId, restaurantId, type)
}
suspend fun getPayMethod(orderId: String) = withContext(Dispatchers.IO) {
......
......@@ -14,7 +14,7 @@ data class CancelReason(
val id: Int,
val restaurantId: Int,
val sort: Int,
val type: Int,
val type: String,
val uid: Int,
val updateTime: Long
)
......
package com.gingersoft.gsa.other_order_mode.data.model.bean
data class MessageBean(val code: String, val errorMsg: String, val success: Boolean = false, val sysTime: Long = 0, val data: Any? = null)
\ No newline at end of file
......@@ -5,7 +5,9 @@ data class ThirdSend(
val success: Boolean,
val errCode: String,
val errMsg: String,
val sysTime: Long
val sysTime: Long,
val code: String,
val message: String
) {
data class Data(
val createTime: Long,
......
......@@ -72,7 +72,7 @@ class CoolWeatherNetwork {
suspend fun cancelOrder(requestBody: RequestBody) = service.cancelOrder(requestBody).await()
//獲取商家配置的取消訂單的原因
suspend fun getCancelReason(requestBody: RequestBody) = service.getCancelReason(requestBody).await()
suspend fun getCancelReason(brandId: Int, restaurantId: Int, type: Int) = cloudService.getCancelReason(brandId, restaurantId, type).await()
//獲取商家配置的支付方式
suspend fun getPayMethod(requestBody: RequestBody) = service.getPayMethod(requestBody).await()
......
......@@ -20,7 +20,10 @@ import java.util.concurrent.TimeUnit
object ServiceCreator {
private val httpClient = OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.connectTimeout(30, TimeUnit.SECONDS)
.callTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.addInterceptor(LoggingInterceptor())
.addInterceptor(UserAgentIntercepter())
......@@ -33,7 +36,6 @@ object ServiceCreator {
private var BASE_URL3 = "$ROOT_URL/member-web/ricepon-gsa/api/"
private var BASE_URL4 = "$ROOT_URL/ricepon-order/api/"
private val builder = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(httpClient.build())
......@@ -63,6 +65,7 @@ object ServiceCreator {
.client(httpClient.build())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
fun <T> create(serviceClass: Class<T>): T = builder.build().create(serviceClass)
fun <T> create2(serviceClass: Class<T>): T = builder2.build().create(serviceClass)
......
package com.gingersoft.gsa.other_order_mode.data.network.api
import com.gingersoft.gsa.other_order_mode.data.model.bean.MessageBean
import com.gingersoft.gsa.other_order_mode.data.model.bean.DeliveryAddSuccessConfig
import com.gingersoft.gsa.other_order_mode.data.model.bean.DeliveryConfig
import com.gingersoft.gsa.other_order_mode.data.model.bean.MessageBean
import okhttp3.RequestBody
import retrofit2.Call
import retrofit2.http.Body
......
package com.gingersoft.gsa.other_order_mode.data.network.api
import com.gingersoft.gsa.other_order_mode.data.model.bean.MessageBean
import com.gingersoft.gsa.cloud.print.bean.OrderDetails
import com.gingersoft.gsa.other_order_mode.data.model.bean.*
import okhttp3.RequestBody
import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query
interface WeatherService {
......@@ -57,8 +60,8 @@ interface WeatherService {
@POST("order/updateOrderStatus")
fun cancelOrder(@Body requestBody: RequestBody): Call<CancelLogisticsBean>
@POST("restaurantFoodReason/config/list")
fun getCancelReason(@Body requestBody: RequestBody): Call<CancelReason>
@GET("restaurantFoodReason/config/list")
fun getCancelReason(@Query("brandId") brandId:Int, @Query("restaurantId") restaurantId:Int, @Query("type") type:Int): Call<CancelReason>
@POST("order/confirmPay")
fun getPayMethod(@Body requestBody: RequestBody): Call<PayTypeInfo>
......
package com.gingersoft.gsa.other_order_mode.model.viewModel
import androidx.lifecycle.MutableLiveData
import com.gingersoft.gsa.other_order_mode.data.model.bean.MessageBean
import com.gingersoft.gsa.other_order_mode.data.DeliveryRepository
import com.gingersoft.gsa.other_order_mode.data.model.bean.DeliveryAddSuccessConfig
import com.gingersoft.gsa.other_order_mode.data.model.bean.DeliveryConfig
import com.gingersoft.gsa.other_order_mode.data.model.bean.MessageBean
class DeliveryViewModel(private val repository: DeliveryRepository) : BaseViewModel() {
......
......@@ -35,7 +35,6 @@ class HistoryOrderViewModel(private val historyOrderRepository: HistoryOrderRepo
} else {
orderNumber = orderNum
}
historyOrderRepository.getHistoryOrderList(GsaCloudApplication.getRestaurantId(context).toString(), status, startDate, endDate, pageIndex, "10", orderNumber, phone).apply {
this.data?.let {
if (it.size > 0) {
......
......@@ -2,7 +2,6 @@ package com.gingersoft.gsa.other_order_mode.model.viewModel
import android.app.Dialog
import android.content.Context
import android.os.Message
import android.util.Log
import android.view.Gravity
import android.view.WindowManager
......@@ -23,6 +22,7 @@ import com.gingersoft.gsa.cloud.base.utils.other.TextUtil
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils
import com.gingersoft.gsa.cloud.base.widget.DialogUtils
import com.gingersoft.gsa.other_order_mode.data.model.bean.MessageBean
import com.gingersoft.gsa.cloud.constans.AppConstans
import com.gingersoft.gsa.cloud.constans.PrintConstans
import com.gingersoft.gsa.cloud.print.bean.OrderDetails
......@@ -37,9 +37,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.json.JSONArray
import org.json.JSONException
import org.json.JSONObject
import java.lang.NullPointerException
class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
......@@ -146,7 +144,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}, {
//出錯
mOrderList[position].value = null
OkHttp3Utils.noticePersonnel(AppConstans.RP_ORDER_LIST_ERROR, it.message)
OkHttp3Utils.noticePersonnel(AppConstans.RP_ORDER_LIST_ERROR, "獲取訂單列表報錯" + it.message)
OtherOrderUtils.initSoundPool(GsaCloudApplication.getAppContext(), R.raw.raw_get_order_list_error)
})
}
......@@ -308,7 +306,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
break
}
}
if (third) {
if (third && dataBean.isDelete != 0) {
// 如果是第三方物流,調用第三方接口
thirdSend(restaurantId, dataBean, 2, listener)
} else {
......@@ -400,7 +398,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
/**
* 修改訂單狀態並打印
*/
private suspend fun updateOrderAndPrint(restaurantId: String, dataBean: OrderDetails.DataBean, status: Int, listener: (MessageBean) -> Unit) {
private fun updateOrderAndPrint(restaurantId: String, dataBean: OrderDetails.DataBean, status: Int, listener: (MessageBean) -> Unit) {
launch({
repository.gsUpdateOrderStatus(dataBean.ID, status, dataBean.order_type, 1, "", "", "", "0", "", 1, 0).apply {
if (status == 0 || status == 1 || status == 2) {
......@@ -455,7 +453,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
}
} else {
OkHttp3Utils.noticePersonnel(AppConstans.RP_UPDATE_ORDER_STATE_ERROR, errorMsg)
OkHttp3Utils.noticePersonnel(AppConstans.RP_UPDATE_ORDER_STATE_ERROR, "修改訂單狀態未成功:$errorMsg")
listener.invoke(getMsgBean(OrderDelivery, errorMsg, false))
}
}
......@@ -521,7 +519,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
/**
* 第三方派送
*/
private suspend fun thirdSend(restaurantId: String, dataBean: OrderDetails.DataBean, status: Int, listener: (MessageBean) -> Unit) {
private fun thirdSend(restaurantId: String, dataBean: OrderDetails.DataBean, status: Int, listener: (MessageBean) -> Unit) {
val third = ThirdItem()
//將食品數據轉為第三方需要的數據
dataBean.PRODUCT_NAME?.let {
......@@ -535,24 +533,43 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
third.add(thirdItem)
}
}
launch({
//調用第三方物流接口
callThird(dataBean, third, restaurantId, status, listener)
}
private fun callThird(dataBean: OrderDetails.DataBean, third: ThirdItem, restaurantId: String, status: Int, listener: (MessageBean) -> Unit) {
launch({
repository.thirdDelivery(dataBean.ID.toString(), third).apply {
if (success) {
// listener.invoke(OrderDelivery, true)
updateOrderAndPrint(restaurantId, dataBean, status, listener)
} else if (!TextUtil.isEmptyOrNullOrUndefined(errMsg)) {
listener.invoke(getMsgBean(OrderDelivery, errMsg, false))
//第三方物流接口異常
OkHttp3Utils.noticePersonnel(AppConstans.RP_THIRE_LOGISTICS_ERROR, errMsg)
OkHttp3Utils.noticePersonnel(AppConstans.RP_THIRE_LOGISTICS_ERROR, "第三方物流請求失敗:$errMsg")
} else if (!TextUtil.isEmptyOrNullOrUndefined(message)) {
listener.invoke(getMsgBean(OrderDelivery, message, false))
//第三方物流接口異常
OkHttp3Utils.noticePersonnel(AppConstans.RP_THIRE_LOGISTICS_ERROR, "第三方物流請求失敗:$message")
} else {
listener.invoke(getMsgBean(OrderDelivery, "指派物流失敗", false))
OkHttp3Utils.noticePersonnel(AppConstans.RP_THIRE_LOGISTICS_ERROR, "第三方物流失敗")
OkHttp3Utils.noticePersonnel(AppConstans.RP_THIRE_LOGISTICS_ERROR, "第三方物流請求失敗")
}
}
}, {
OkHttp3Utils.noticePersonnel(AppConstans.RP_THIRE_LOGISTICS_ERROR, it.message)
}, { it ->
if (it is java.io.InterruptedIOException) {
//超時了,獲取訂單詳情,如果訂單未指派物流,那麼再次調用第三方物流接口
getOrderInfo(dataBean.ID.toString()) {
if (it?.data != null && it.data!!.isNotEmpty() && it.data!![0].isDelete == 0) {
//已經指派第三方物流,就調用修改訂單狀態接口
updateOrderAndPrint(restaurantId, dataBean, status, listener)
} else {
callThird(dataBean, third, restaurantId, status, listener)
}
}
} else {
OkHttp3Utils.noticePersonnel(AppConstans.RP_THIRE_LOGISTICS_ERROR, "請求第三方物流接口報錯:" + it.message)
listener.invoke(getMsgBean(OrderDelivery, "", false))
}
})
}
......@@ -732,9 +749,9 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
/**
* 獲取餐廳配置的取消原因
*/
fun getCancelReason(restaurantId: String, type: String, listener: (CancelReason?) -> Unit) {
fun getCancelReason(brandId: Int, restaurantId: Int, type: Int, listener: (CancelReason?) -> Unit) {
launch({
repository.getCancelReason(restaurantId, type).apply {
repository.getCancelReason(brandId, restaurantId, type).apply {
listener.invoke(this)
}
}, {
......
......@@ -258,18 +258,18 @@ class GetInfoUpdateService : Service() {
if (!this@GetInfoUpdateService.isDestroy) {
// Log.e(TAG, "沒銷毀")
// initSocket()//创建一个新的连接Expected HTTP 101 response but was '502 Bad Gateway'
} else {
webSocket?.cancel()
it.dispatcher().cancelAll()
}
//連接斷開,定時五秒,如果未重連,播放提示音
RxTimerUtil.delayFun({
initSoundPool(R.raw.raw_disconnect)
myBind?.block?.invoke(true)
//推送給相關人員
OkHttp3Utils.noticePersonnel(AppConstans.RP_HEART_ERROR, t.message)
OkHttp3Utils.noticePersonnel(AppConstans.RP_HEART_ERROR, "心跳斷開十秒以上未連接成功:" + t.message)
}, 10)
putTimeLog("onFailure連接失敗,等待一分鐘後重新連接")
} else {
webSocket?.cancel()
it.dispatcher().cancelAll()
}
}
})
it.dispatcher().executorService().shutdown()
......@@ -280,14 +280,14 @@ class GetInfoUpdateService : Service() {
private var lastSoundTime: Long = 0L
fun initSoundPool(resId: Int) {
val nowTime = System.currentTimeMillis()//當前時間減去上次播放的時間,如果超過五秒,那麼才會再次播放提示聲
if (resId == R.raw.newordervocal && nowTime - lastSoundTime > 5000) {
Log.e("eee", "間隔時間" + (nowTime - lastSoundTime))
putTimeLog("現在時間:$nowTime 上次播放時間:$lastSoundTime")
putTimeLog("新訂單播放:$nowTime")
if (resId == R.raw.newordervocal && nowTime - lastSoundTime > 5000) {
lastSoundTime = System.currentTimeMillis()
lastSoundTime = nowTime
OtherOrderUtils.initSoundPool(this, resId)
} else {
lastSoundTime = System.currentTimeMillis()
lastSoundTime = nowTime
OtherOrderUtils.initSoundPool(this, resId)
}
}
......@@ -308,7 +308,6 @@ class GetInfoUpdateService : Service() {
override fun onDestroy() {
super.onDestroy()
Log.e("eee", "onDestroy")
putTimeLog("服務銷毀onDestroy")
//清除心跳
......
......@@ -44,6 +44,7 @@ class OrderDetailsActivity : BaseActivity() {
private var orderType: Int = 0
private var orderPayType: Int = 0
private var isRead: Int = -1
private var state: Int = -1
lateinit var skeletonScreen: ViewSkeletonScreen
override fun onCreate(savedInstanceState: Bundle?) {
......@@ -63,6 +64,7 @@ class OrderDetailsActivity : BaseActivity() {
orderType = intent.getIntExtra("orderType", 0)//訂單類型
orderPayType = intent.getIntExtra("orderPayType", 0)//訂單支付方式
isRead = intent.getIntExtra("isRead", -1)//是否已讀訂單
state = intent.getIntExtra("orderStatus", -1)//訂單狀態
pageViewModel = ViewModelProvider(this, InjectorUtil.getWeatherModelFactory())[PageViewModel::class.java].apply {
if (isRead == 0) {
......@@ -99,6 +101,15 @@ class OrderDetailsActivity : BaseActivity() {
when (orderDetails.orderStatus) {
2 -> {//製作中
if (state == 0) {
//防止調用了第三方物流接口,沒調用到確認訂單接口
btnList.add(BtnBuilder().getSureBtn())
orderStatusText = "待確認"
tv_order_state.setTextColor(ContextCompat.getColor(this@OrderDetailsActivity, R.color.order_state0_color))
if (orderDetails.isDelete == 0) {
btnList.add(BtnBuilder().getLogisticsBtn())
}
} else {
btnList.add(BtnBuilder().getPrintBtn())
if (orderDetails.order_type == 7) {
//製作中的自取,應該製作完成、打印、取消訂單
......@@ -114,10 +125,8 @@ class OrderDetailsActivity : BaseActivity() {
tv_order_state.setTextColor(resources.getColor(R.color.order_state1_color))
}
orderStatusText = "製作中"
// if (orderDetails.isDelete != 0) {
//不是第三方物流才顯示取消訂單
}
btnList.add(BtnBuilder().getCancelBtn())
// }
}
3 -> {//外賣是送貨中,自取是待取餐
btnList.add(BtnBuilder().getPrintBtn())
......@@ -193,7 +202,7 @@ class OrderDetailsActivity : BaseActivity() {
}
else -> {
showLoading()
updateOrderStatusByBtn(btnList[position].type, orderDetails, GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity).toString()) { msg->
updateOrderStatusByBtn(btnList[position].type, orderDetails, GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity).toString()) { msg ->
cancelDialogForLoading()
when (msg.code) {
DeliveryPrint.toString() -> {//訂單已確認,是否打印成功
......@@ -205,21 +214,21 @@ class OrderDetailsActivity : BaseActivity() {
})
}
PrintCode.toString() -> {
ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
"打印成功"
} else {
"打印失敗"
})
// ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
// "打印成功"
// } else {
// "打印失敗"
// })
}
SendCode.toString() -> {
ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
"已成功指派"
} else if(!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)){
} else if (!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)) {
msg.errorMsg
} else {
"指派送貨失敗"
})
if(msg.success){
if (msg.success) {
finish()
}
}
......@@ -228,7 +237,7 @@ class OrderDetailsActivity : BaseActivity() {
if (msg.success) {
finish()
ToastUtils.show(this@OrderDetailsActivity, "訂單已確認")
} else if(!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)){
} else if (!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)) {
ToastUtils.show(this@OrderDetailsActivity, msg.errorMsg)
} else {
ToastUtils.show(this@OrderDetailsActivity, "訂單確認失敗")
......@@ -238,7 +247,7 @@ class OrderDetailsActivity : BaseActivity() {
Closing.toString() -> {
ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
"結賬成功"
} else if(!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)){
} else if (!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)) {
msg.errorMsg
} else {
"結賬失敗"
......@@ -250,7 +259,7 @@ class OrderDetailsActivity : BaseActivity() {
}
ToastUtils.show(this@OrderDetailsActivity, if (msg.success) {
"製作完成"
} else if(!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)){
} else if (!TextUtil.isEmptyOrNullOrUndefined(msg.errorMsg)) {
msg.errorMsg
} else {
"修改訂單狀態失敗"
......@@ -281,7 +290,7 @@ class OrderDetailsActivity : BaseActivity() {
private fun PageViewModel.cancelOrder(orderDetails: OrderDetails.DataBean) {
//獲取取消原因讓用戶選擇
showLoading()
getCancelReason(GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity).toString(), "3") { cancelReson ->
getCancelReason(GsaCloudApplication.getBrandId(this@OrderDetailsActivity), GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity), 3) { cancelReson ->
cancelDialogForLoading()
if (cancelReson != null && cancelReson.data.isNotEmpty()) {
//如果有配置取消原因
......@@ -339,7 +348,7 @@ class OrderDetailsActivity : BaseActivity() {
private fun PageViewModel.cancelLogistics(orderDetails: OrderDetails.DataBean) {
//獲取取消原因讓用戶選擇
showLoading()
getCancelReason(GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity).toString(), "2") { cancelReson ->
getCancelReason(GsaCloudApplication.getBrandId(this@OrderDetailsActivity), GsaCloudApplication.getRestaurantId(this@OrderDetailsActivity), 2) { cancelReson ->
cancelDialogForLoading()
if (cancelReson != null && cancelReson.data.isNotEmpty()) {
//如果有配置取消原因
......
......@@ -105,8 +105,7 @@ class PayActivity : BaseActivity() {
}
billBeans.add(BillBean("支付金額:", MoneyUtil.sub(orderDetails.TOTAL_AMOUNT!!.toDouble(), orderDetails.discount_amount)))
rv_order_pay_bill.layoutManager = LinearLayoutManager(this)
rv_order_pay_bill.adapter = PayBillAdapter(billBeans)
rv_order_pay_bill.adapter = PayBillAdapter(R.layout.item_pay_bill, billBeans)
}
......
......@@ -10,6 +10,7 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.gingersoft.gsa.other_order_mode.R
import com.gingersoft.gsa.other_order_mode.data.model.bean.DeliveryConfig
import com.gingersoft.gsa.other_order_mode.databinding.ItemDeliveryLayoutBinding
import com.gingersoft.gsa.other_order_mode.ui.fragment.UpdateDeliveryFragment
class DeliveryListAdapter(data: MutableList<DeliveryConfig.Data.DeliveryInfo>) : BaseQuickAdapter<DeliveryConfig.Data.DeliveryInfo, DeliveryListAdapter.ViewHolder>(R.layout.item_delivery_layout, data) {
......@@ -26,7 +27,7 @@ class DeliveryListAdapter(data: MutableList<DeliveryConfig.Data.DeliveryInfo>) :
// deliveryType = it.distributionType
deliveryExpenses = "${it.distributionFeeMin}-${it.distributionFeeMax}"
deliveryFee = it.deliveryCost.toString()
deliveryMethod = if (it.type == 1) "物流配送" else "本店配送"
deliveryMethod = UpdateDeliveryFragment.deliveryMethod[it.type]
deliveryDifference = it.lackPrice.toString()
}
}
......
......@@ -6,17 +6,17 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.gingersoft.gsa.other_order_mode.R
import com.gingersoft.gsa.other_order_mode.data.model.bean.BillBean
class PayBillAdapter(billBeans: MutableList<BillBean>) : BaseQuickAdapter<BillBean, BaseViewHolder>(R.layout.item_pay_bill, billBeans) {
class PayBillAdapter(layoutId:Int, billBeans: MutableList<BillBean>) : BaseQuickAdapter<BillBean, BaseViewHolder>(layoutId, billBeans) {
override fun convert(holder: BaseViewHolder, item: BillBean) {
holder.setText(R.id.tv_item_pay_name, item.name)
holder.setText(R.id.tv_item_pay_amount, item.amount.toString())
if(item.isRed == 0){
holder.setTextColor(R.id.tv_item_pay_name, ContextCompat.getColor(context, R.color.color_3c))
holder.setTextColor(R.id.tv_item_pay_name, ContextCompat.getColor(context, R.color.color_3c))
holder.setTextColor(R.id.tv_item_pay_amount, ContextCompat.getColor(context, R.color.color_3c))
} else {
holder.setTextColor(R.id.tv_item_pay_name, ContextCompat.getColor(context, R.color.discount_red))
holder.setTextColor(R.id.tv_item_pay_name,ContextCompat.getColor(context, R.color.discount_red))
holder.setTextColor(R.id.tv_item_pay_amount,ContextCompat.getColor(context, R.color.discount_red))
}
}
......
......@@ -25,6 +25,8 @@ import kotlinx.android.synthetic.main.update_delivery_fragment.*
class UpdateDeliveryFragment : BaseFragment(R.layout.update_delivery_fragment) {
companion object {
var deliveryMethod = arrayListOf("本店配送", "zeek", "lalamove")
private const val info = "info"
@JvmStatic
fun newInstance(deliveryConfig: DeliveryConfig.Data.DeliveryInfo?): UpdateDeliveryFragment {
......@@ -41,7 +43,6 @@ class UpdateDeliveryFragment : BaseFragment(R.layout.update_delivery_fragment) {
var pop: QMUIPopup? = null
var deliveryType = arrayListOf("短途送", "中途送", "長途送")
var deliveryMethod = arrayListOf("本店配送", "第三方")
var deliveryTypeTag = arrayListOf("SHORT_RANGE", "STANDARD", "LONG_DISTANCE")
var selectDeliveryType = deliveryTypeTag[0]//用戶當前選中的配送類型
......@@ -75,11 +76,7 @@ class UpdateDeliveryFragment : BaseFragment(R.layout.update_delivery_fragment) {
}
selectDeliveryType = it.distributionType
//備送方式
tv_delivery_method.text = when (it.type) {
0 -> "本店配送"
1 -> "第三方"
else -> ""
}
tv_delivery_method.text = deliveryMethod[it.type]
selectDeliveryMethodPosition = it.type
}
......@@ -115,7 +112,7 @@ class UpdateDeliveryFragment : BaseFragment(R.layout.update_delivery_fragment) {
if (deliveryConfig == null) {
//新增
viewModel.addDeliveryConfig(et_min_delivery_fee.text.toString(), et_max_delivery_fee.text.toString(), ed_delivery_fee.text.toString(), ed_start_delivery_fee.text.toString(), selectDeliveryType, selectDeliveryMethodPosition,
ed_desc.text.toString(), GsaCloudApplication.getRestaurantId(context), GsaCloudApplication.getMemberId(context), ed_difference_fee.text.toString()) { it ->
ed_desc.text.toString(), GsaCloudApplication.getRestaurantId(context), GsaCloudApplication.getMemberId(context), ed_difference_fee.text.toString()) {
cancelDialogForLoading()
if (it != null && it.success) {
ToastUtils.show(context, "保存成功")
......@@ -127,7 +124,7 @@ class UpdateDeliveryFragment : BaseFragment(R.layout.update_delivery_fragment) {
} else {
//編輯
viewModel.updateDeliveryConfig(et_min_delivery_fee.text.toString(), et_max_delivery_fee.text.toString(), ed_delivery_fee.text.toString(), ed_start_delivery_fee.text.toString(), selectDeliveryType, selectDeliveryMethodPosition,
ed_desc.text.toString(), deliveryConfig!!.id, GsaCloudApplication.getRestaurantId(context), GsaCloudApplication.getMemberId(context), ed_difference_fee.text.toString(), 0) { it ->
ed_desc.text.toString(), deliveryConfig!!.id, GsaCloudApplication.getRestaurantId(context), GsaCloudApplication.getMemberId(context), ed_difference_fee.text.toString(), 0) {
cancelDialogForLoading()
if (it != null && it.success) {
ToastUtils.show(context, "修改成功")
......@@ -147,7 +144,7 @@ class UpdateDeliveryFragment : BaseFragment(R.layout.update_delivery_fragment) {
val listView = view.findViewById<RecyclerView>(R.id.ryview)
listView.layoutManager = LinearLayoutManager(context)
adapter = TextAdapter(list)
adapter?.setOnItemClickListener { _, _, _ ->}
adapter?.setOnItemClickListener { _, _, _ -> }
listView.layoutParams.width = (ArmsUtils.getScreenWidth(context) * 0.7).toInt()
listView.adapter = adapter
......
......@@ -14,12 +14,17 @@ import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil
import com.gingersoft.gsa.cloud.base.widget.DialogUtils
import com.gingersoft.gsa.cloud.print.bean.OrderDetails
import com.gingersoft.gsa.other_order_mode.R
import com.gingersoft.gsa.other_order_mode.data.model.bean.BillBean
import com.gingersoft.gsa.other_order_mode.databinding.LayoutOrderInfoDialogNewBinding
import com.gingersoft.gsa.other_order_mode.ui.adapter.FoodListAdapter
import com.gingersoft.gsa.other_order_mode.ui.adapter.PayBillAdapter
import com.jess.arms.utils.ArmsUtils
import java.lang.Double.parseDouble
object OtherOrderUtils {
......@@ -30,9 +35,11 @@ object OtherOrderUtils {
val tvStatus = hepler.getView<TextView>(R.id.tv_order_state)
val orderData = data.data!![0]
val layoutOrderInfoDialogBinding: LayoutOrderInfoDialogNewBinding = DataBindingUtil.bind(hepler.contentView)!!
val totalAmount = orderData.TOTAL_AMOUNT!!.toDouble()
layoutOrderInfoDialogBinding.data = orderData
layoutOrderInfoDialogBinding.isSelf = orderType == 7
layoutOrderInfoDialogBinding.totalAmount = orderData.TOTAL_AMOUNT!!.toDouble()
layoutOrderInfoDialogBinding.totalAmount = totalAmount
//是歷史訂單,就不顯示訂單狀態
layoutOrderInfoDialogBinding.isHistory = isHistory
var btnContent = ""
......@@ -82,15 +89,61 @@ object OtherOrderUtils {
cancelBtnContent = "取消訂單"
}
}
layoutOrderInfoDialogBinding.patMethod = when (orderData.payType) {
1 -> "積分支付"
2 -> "支付寶"
3 -> "财付通"
4 -> "微信支付"
5 -> "貨到付款"
6 -> "其他支付"
else -> ""
// val payName = StringBuffer()
// if (orderData.payMultiple != null) {
// for (payMethod in orderData.payMultiple!!) {
// if (!TextUtil.isEmptyOrNullOrUndefined(payMethod.payName)) {
// payName.append(payMethod.payName)
// payName.append(",")
// }
// }
// if (payName.isNotEmpty()) {
// payName.deleteCharAt(payName.length - 1)
// }
// layoutOrderInfoDialogBinding.payMethod = payName.toString()
// } else {
// layoutOrderInfoDialogBinding.payMethod = when (orderData.payType) {
// 1 -> "積分支付"
// 2 -> "支付寶"
// 3 -> "财付通"
// 4 -> "微信支付"
// 5 -> "貨到付款"
// 6 -> "其他支付"
// else -> ""
// }
// }
val billBeans = ArrayList<BillBean>()
billBeans.add(BillBean("合計:", MoneyUtil.sub(MoneyUtil.sub(totalAmount, orderData.Lunchbox), orderData.DELIVERY_CHARGE), 0))
if (orderData.Lunchbox != 0.0) {
billBeans.add(BillBean("餐盒費:", orderData.Lunchbox, 0))
}
if (orderData.DELIVERY_CHARGE != 0.0) {
billBeans.add(BillBean("送貨費:", orderData.DELIVERY_CHARGE, 0))
}
if (orderData.discount_amount != 0.0) {
billBeans.add(BillBean("折扣:", orderData.discount_amount, 0))
}
billBeans.add(BillBean("總金額:", MoneyUtil.sub(totalAmount, orderData.discount_amount), 0))
// billBeans.add(BillBean("支付金額:", MoneyUtil.sub(totalAmount, orderData.discount_amount), 1))
orderData.couponList?.let {
for (coupon in it) {
if (TextUtil.isNotEmptyOrNullOrUndefined(coupon.couponName)) {
billBeans.add(BillBean(coupon.couponName, parseDouble(coupon.discount_amount.toString()), 1))
}
}
}
orderData.payMultiple?.let {
for (payMultiple in it) {
if (TextUtil.isNotEmptyOrNullOrUndefined(payMultiple.payName)) {
billBeans.add(BillBean(payMultiple.payName + ":", payMultiple.amount, 1))
}
}
}
val rvBillInfo = hepler.getView<RecyclerView>(R.id.recycler_order_details_pay_info)
rvBillInfo.layoutManager = LinearLayoutManager(context)
rvBillInfo.adapter = PayBillAdapter(R.layout.item_orderdetails_bill_info, billBeans)
if (isHistory) {
cancelBtnContent = ""
......
package com.joe.print.mvp.print;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.util.Log;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.print.PrintDataMaker;
import com.gingersoft.gsa.cloud.print.PrinterWriter;
import com.gingersoft.gsa.cloud.print.PrinterWriterExecutor;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
......@@ -22,12 +15,10 @@ import java.util.List;
*/
public class IpPrintMaker implements PrintDataMaker {
private Context mContext;
private int width; // 打印的圖片寬度,紙張寬度
private List<Bitmap> bitmaps;
public IpPrintMaker(Context context, int width, List<Bitmap> bitmaps) {
this.mContext = context;
public IpPrintMaker(int width, List<Bitmap> bitmaps) {
this.width = width;
this.bitmaps = bitmaps;
}
......@@ -40,23 +31,17 @@ public class IpPrintMaker implements PrintDataMaker {
printer = new PrinterWriterExecutor(255, width);
printer.setAlignCenter();
data.add(printer.getDataAndReset());
if (bitmaps.size() <= 0) {
ToastUtils.show(mContext, "打印失敗");
return null;
}
Log.e("eee", "個數:" + bitmaps.size());
for (int i = 0; i < bitmaps.size(); i++) {
ArrayList<byte[]> image1 = printer.getImageByte(bitmaps.get(i));//將bitmap縮放到打印機紙張大小再添加到集合中。
data.addAll(image1);//draw2PxPoint2(bitmaps.get(i)
printer.printLineFeed();
printer.printLineFeed();
printer.printLineFeed();
// printer.printLineFeed();
// printer.printLineFeed();
printer.printLineFeed(3);
printer.feedPaperCutPartial();
data.add(printer.getDataAndReset());
}
data.add(printer.getDataAndClose());
for (int i = 0; i < bitmaps.size(); i++){
bitmaps.get(i).recycle();
}
return data;
} catch (Exception e) {
return new ArrayList<>();
......
......@@ -5,5 +5,5 @@ public interface PrintListener {
void printSuccess();
void printFile();
void printFile(String msg);
}
......@@ -160,6 +160,15 @@ public class PrintOtherOrder extends PrinterRoot {
//總金額34sp
layout.addView(getTakeawayLargeAmount(mContext, "總金額:", MONETARY_UNIT + data.getTOTAL_AMOUNT()));
layout.addView(getLine(mContext));
if (data.getPayMultiple() != null) {
for (OrderDetails.DataBean.PayMultiple payMultiple : data.getPayMultiple()) {
if (!TextUtil.isEmptyOrNullOrUndefined(payMultiple.getPayName())) {
layout.addView(getTakeawayLargeAmount(mContext, payMultiple.getPayName(), MONETARY_UNIT + payMultiple.getAmount()));
}
}
layout.addView(getLine(mContext));
}
//支付金額
layout.addView(getTakeawayLargeAmount(mContext, "支付金額:", MONETARY_UNIT + MoneyUtil.sub(Double.parseDouble(data.getTOTAL_AMOUNT()), data.getDiscount_amount()) + ""));
layout.addView(getLine(mContext));
......
......@@ -222,15 +222,16 @@ public class PrintOtherOrderClosing extends PrinterRoot {
//總金額34sp
layout.addView(getTakeawayLargeAmount(mContext, "總金額:", MONETARY_UNIT + data.getTOTAL_AMOUNT()));
layout.addView(getLine(mContext));
//多種支付方式
if(data.getOrderPayInfoVO() != null){
for (OrderDetails.DataBean.OrderPayAmountVo orderPayAmountVo : data.getOrderPayInfoVO()) {
layout.addView(getTakeawayLargeAmount(mContext, orderPayAmountVo.getPayName(), MONETARY_UNIT + orderPayAmountVo.getAmount()));
if (data.getPayMultiple() != null) {
for (OrderDetails.DataBean.PayMultiple payMultiple : data.getPayMultiple()) {
if (!TextUtil.isEmptyOrNullOrUndefined(payMultiple.getPayName())) {
layout.addView(getTakeawayLargeAmount(mContext, payMultiple.getPayName(), MONETARY_UNIT + payMultiple.getAmount()));
}
}
// layout.addView(getTakeawayLargeAmount(mContext, "支付金額:", MONETARY_UNIT + MoneyUtil.sub(Double.parseDouble(data.getTOTAL_AMOUNT()), data.getDiscount_amount()) + ""));
layout.addView(getLine(mContext));
} else {
layout.addView(getTakeawayLargeAmount(mContext, "支付金額:", MONETARY_UNIT + MoneyUtil.sub(Double.parseDouble(data.getTOTAL_AMOUNT()), data.getDiscount_amount()) + ""));
}
//會員信息
layout.addView(getTakeawayMemberIntegerView(mContext, data));
layout.addView(getLine(mContext));
......
......@@ -11,10 +11,12 @@ import android.util.Log;
import androidx.annotation.Nullable;
import com.epson.epos2.Epos2Exception;
import com.epson.epos2.printer.Printer;
import com.epson.epos2.printer.PrinterStatusInfo;
import com.epson.epos2.printer.ReceiveListener;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.threadPool.ThreadPoolManager;
import com.gingersoft.gsa.cloud.base.utils.AidlUtil;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
......@@ -29,9 +31,7 @@ import com.gingersoft.gsa.cloud.print.PrinterWriter58mm;
import com.hyweb.n5.lib.constant.PrinterConstant;
import com.hyweb.n5.lib.util.PrinterUtil;
import com.hyweb.n5.server.aidl.IOnPrintCallback;
import com.joe.print.mvp.model.bean.PrintInfoBean;
import com.joe.print.mvp.model.bean.PrjBean;
import com.joe.print.mvp.print.EpsonPrint;
import com.joe.print.mvp.print.PrintPrjKitchen;
import com.joe.print.mvp.print.PrinterRoot;
import com.joe.print.mvp.print.common.PrinterFinderCallback;
......@@ -81,17 +81,19 @@ public class PrjService extends Service implements ReceiveListener {
public void onCreate() {
super.onCreate();
mContext = this;
initUsbPrint();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mContext = this;
Log.e("eee", "開啟打印服務");
ThreadPoolManager.getInstence().putExecutableTasks(()->{
getPrintList();
//開始請求
startGetPrjInfo();
});
return super.onStartCommand(intent, flags, startId);
}
......@@ -311,7 +313,6 @@ public class PrjService extends Service implements ReceiveListener {
// }
// }
// }
private void newPrint(String json) {
printDatas.clear();
listMap.clear();
......@@ -383,22 +384,73 @@ public class PrjService extends Service implements ReceiveListener {
}
//打印回調了多少次都要記錄下來,所以一次只能傳遞一張prj過去,等到打印回調再打第二張
private String EpsIds = "";
/**
* 生成用於打印的prj的Bitmap
*/
private void generatePrintData(String key, List<PrjBean.DataBean.Bean> beans, PrinterDeviceBean printerDeviceBean) {
if (isPinPrinter(printerDeviceBean) && printerDeviceBean.getPrinterDeviceType() == 1) {
//針式打印機並且打印機類型為IP打印,生成獨特的格式
EpsonPrint mPrinter = EpsonPrint.getInstance();
mPrinter.initializeObject(GsaCloudApplication.getAppContext(), this);
int paperWidth = 42;
if (printerDeviceBean.getPaperSpecification() != null) {
paperWidth = (int) (Double.parseDouble(printerDeviceBean.getPaperSpecification()) / 6);
List<Map<String, Bitmap>> bitmapMaps = generatePrintMaps(key, beans, printerDeviceBean);
EpsIds = getPrintIds(bitmapMaps);
//第一個參數是機型,第二個參數是語言,
Printer mPrinter = null;
try {
mPrinter = new Printer(Printer.TM_U220, Printer.MODEL_KOREAN, this);
mPrinter.setReceiveEventListener(this);
} catch (Epos2Exception e) {
e.printStackTrace();
updatePrjFailure(getPrintIds(bitmapMaps));
}
List<List<PrintInfoBean>> prjBeans = PrintInfoBean.transPrjBean(beans, key, printerDeviceBean);
for (List<PrintInfoBean> prjPrintBean : prjBeans) {
mPrinter.putPrintString(printerDeviceBean.getIp(), paperWidth, prjPrintBean);
if (mPrinter != null) {
try {
mPrinter.clearCommandBuffer();
for (int i = 0; i < bitmapMaps.size(); i++) {
for (Map.Entry<String, Bitmap> mapEntry : bitmapMaps.get(i).entrySet()) {
mPrinter.addImage(mapEntry.getValue(), 0, 0,
mapEntry.getValue().getWidth(),
mapEntry.getValue().getHeight(),
Printer.COLOR_1,
Printer.MODE_MONO_HIGH_DENSITY,//高密度
Printer.HALFTONE_DITHER,//半色調抖動
Printer.PARAM_DEFAULT,
Printer.COMPRESS_NONE);//壓縮
mPrinter.addCut(Printer.CUT_FEED);
}
}
} catch (Epos2Exception e) {
e.printStackTrace();
updatePrjFailure(getPrintIds(bitmapMaps));
mPrinter.clearCommandBuffer();
}
try {
mPrinter.connect("TCP:" + printerDeviceBean.getIp(), Printer.PARAM_DEFAULT);
mPrinter.sendData(Printer.PARAM_DEFAULT);
} catch (Exception e) {
e.printStackTrace();
updatePrjFailure(getPrintIds(bitmapMaps));
while (true) {
try {
mPrinter.disconnect();
break;
} catch (final Exception ex) {
if (ex instanceof Epos2Exception) {
//Note: If printer is processing such as printing and so on, the disconnect API returns ERR_PROCESSING.
if (((Epos2Exception) ex).getErrorStatus() == Epos2Exception.ERR_PROCESSING) {
} else {
break;
}
} else {
break;
}
}
}
mPrinter.clearCommandBuffer();
mPrinter.setReceiveEventListener(null);
}
} else {
updatePrjFailure(EpsIds);
}
} else {
List<Map<String, Bitmap>> bitmapMaps = generatePrintMaps(key, beans, printerDeviceBean);
......@@ -492,6 +544,11 @@ public class PrjService extends Service implements ReceiveListener {
//N5打印
n5Print(bitmapMaps);
} else {
updatePrjFailure(getPrintIds(bitmapMaps));
}
}
private String getPrintIds(List<Map<String, Bitmap>> bitmapMaps){
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < bitmapMaps.size(); i++) {
for (Map.Entry<String, Bitmap> mapEntry : bitmapMaps.get(i).entrySet()) {
......@@ -502,8 +559,7 @@ public class PrjService extends Service implements ReceiveListener {
}
}
}
updatePrjFailure(stringBuilder.toString());
}
return stringBuilder.toString();
}
private final static int SUNMI_PAPER_WIDTH = 360;//商米打印機紙張寬度
......@@ -651,8 +707,10 @@ public class PrjService extends Service implements ReceiveListener {
}
List<UpdateBean> updateBeans = new ArrayList<>();
updateBeans.add(new UpdateBean(ids, printState, time));
String[] idArrays = ids.split(",");
for (String id : idArrays) {
updateBeans.add(new UpdateBean(id, printState, time));
}
String json = JsonUtils.toJson(updateBeans);
Log.e("eee", "" + json);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), json);
......@@ -683,6 +741,7 @@ public class PrjService extends Service implements ReceiveListener {
}
});
EpsIds = "";
}
// @Override
......@@ -753,10 +812,10 @@ public class PrjService extends Service implements ReceiveListener {
//針式打印回調
if (i == 0) {
//打印成功
// updatePrjState(3);
updatePrjFailure(EpsIds);
} else {
//打印失敗
// updatePrjState(1);
updatePrjFailure(EpsIds);
}
startGetPrjInfo();
}
......
......@@ -134,6 +134,16 @@ public class MyPrintUtils {
defaultPrint.setNumberIsFlip(printCurrencyBean.getNumberIsFlip());
}
}
if (printCurrencyBean == null) {
// 如果沒有預設,那麼判斷打印機字體大小是不是設置為預設
// 如果是預設,那麼手動給設置食品字體大小,不然打印不出來食品
if (defaultPrint.getFoodFont().equals("0")) {
defaultPrint.setFoodFont("20");
}
if (defaultPrint.getModifierFont().equals("0")) {
defaultPrint.setModifierFont("18");
}
}
return defaultPrint;
}
......
......@@ -26,6 +26,7 @@ import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.base.widget.DialogUtils;
import com.gingersoft.gsa.cloud.constans.PrintConstans;
......@@ -50,6 +51,7 @@ import com.yanzhenjie.recyclerview.widget.DefaultItemDecoration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static com.gingersoft.gsa.cloud.constans.PrintConstans.PRINT_TYPE;
import static com.jess.arms.utils.Preconditions.checkNotNull;
......@@ -119,16 +121,14 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void initData(@Nullable Bundle savedInstanceState) {
Log.e("eee", "打開打印界面");
callId = CCUtil.getNavigateCallId(this);
//獲取打印類型,根據打印類型生成對應的bitmap
type = CCUtil.getNavigateParam(this, PRINT_TYPE, PrintConstans.PRINT_TEST);
isShowDialog = CCUtil.getNavigateParam(this, PrintConstans.PRINT_LOADING, true);
printerInIt = PrinterRoot.getPrinterByType(type);
if (printerInIt != null) {
printerInIt.setmContext(mContext).setPrintListener(this).initUsbPrint();
printerInIt.setPrintListener(this);
}
initPrintConfig();
}
......@@ -190,6 +190,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
}
//打印邏輯,獲取對應的打印配置--打印機或是通用配置
//根據配置生成配置好的圖片----生成圖片邏輯:把打印的單分為幾個模塊,再由不同的單拼接出對應的單,(如果是針式,生成對應的文字)
//再獲取打印方式(IP、本機、USB、藍牙或其他的),調用打印
......@@ -204,10 +205,10 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
initDialog();
}
//獲得對應的圖片
List<Bitmap> zoomBitmaps = printerInIt.getPrintBitmap(mContext, defaultPrint).get("");
Map<String, List<Bitmap>> listMap = printerInIt.getPrintBitmapByCount(mContext, defaultPrint);
if (listMap != null) {
List<Bitmap> zoomBitmaps = listMap.get("");
if (zoomBitmaps != null && zoomBitmaps.size() > 0) {
int printCount = printerInIt.getPrintCount(mContext);
for (int i = 0; i < printCount; i++) {
if (defaultPrint.getPrinterDeviceType() == 1) {
//IP打印
printerInIt.ipDevicePrint(defaultPrint, zoomBitmaps);
......@@ -218,14 +219,14 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
//USB打印打印
printerInIt.usbPrint(mContext, zoomBitmaps);
} else {
ToastUtils.show(mContext, "未找到對應的打印類型");
printFile();
}
printFile("未找到對應的打印類型");
}
} else {
//打印失敗
Log.e("eee", "打印失敗,沒有生成對應的圖片");
printFile();
printFile("打印失敗,生成打印數據失敗");
}
} else {
printFile("打印失敗,打印次數為0");
}
}
}
......@@ -269,9 +270,16 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
* 打印失敗
*/
@Override
public void printFile() {
public void printFile(String msg) {
if (!TextUtil.isEmptyOrNullOrUndefined(msg)) {
ToastUtils.show(mContext, msg);
}
// if (printCount <= 1) {
CC.sendCCResult(callId, CCResult.error("print error"));
finish();
// } else {
// printCount--;
// }
}
@Override
......@@ -331,8 +339,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
break;
case LACK_OF_PAPER:
//缺紙
ToastUtils.show(mContext, "打印機缺紙");
printFile();
printFile("打印機缺紙");
break;
}
setLoadingText(tip);
......@@ -343,9 +350,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
*/
@Override
public void printSuccess() {
// if (printCount <= 1) {
CC.sendCCResult(callId, CCResult.success());
disLoadingDialog();
finish();
// } else {
// printCount--;
// }
}
@Override
......@@ -407,8 +418,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
private void addPrintDevice() {
ToastUtils.show(mContext, "沒有打印機,請添加");
printFile();
printFile("沒有打印機,請添加");
// startActivityForResult(new Intent(mContext, PrinterAddActivity.class), ADD_PRINT_CODE);
}
......@@ -440,9 +450,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
protected void onDestroy() {
super.onDestroy();
disLoadingDialog();
if (printerInIt != null) {
printerInIt.onDestroy();
}
}
private void disLoadingDialog() {
......
......@@ -162,9 +162,9 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
// TestPrintMaker maker = new TestPrintMaker(printInfoBeans);
// executor.doPrinterRequestAsync(maker);
EpsonPrint mPrinter = new EpsonPrint();
mPrinter.initializeObject(GsaCloudApplication.getAppContext(), this);
mPrinter.putPrintString(ed_ip.getText().toString(), 42, printInfoBeans, this);
// EpsonPrint mPrinter = new EpsonPrint();
// mPrinter.initializeObject(GsaCloudApplication.getAppContext(), this);
// mPrinter.putPrintString(ed_ip.getText().toString(), 42, printInfoBeans, this);
});
}
......
......@@ -244,7 +244,7 @@
android:background="@null"
android:hint="請輸入端口號,默認9100"
android:inputType="number"
android:maxLength="4"
android:maxLength="6"
android:textColor="@color/normal_color"
android:textColorHint="@color/hint_color"
android:textSize="@dimen/dp_14" />
......
......@@ -34,8 +34,8 @@
<attr name="app_skin_span_pressed_bg_color" format="color"/>
<attr name="app_skin_alpha_test" format="float"/>
<style name="AppTheme" parent="QMUI.Compat.NoActionBar">
<!-- 配置Android提供的theme -->
<item name="android:textAppearanceListItemSmall">@style/QDTextAppearanceListItemSmall</item>
<item name="android:textAppearanceListItem">@style/QDtextAppearanceListItem</item>
......@@ -92,7 +92,8 @@
<style name="AppTheme.Launcher">
<item name="android:windowFullscreen">true</item>
<!-- <item name="android:windowBackground">@drawable/launcher_bg</item>-->
<!-- <item name="android:windowBackground">@drawable/launcher_bg</item>-->
</style>
<!-- blue skin -->
......
......@@ -777,30 +777,19 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
* @param initTable 是否是開台
*/
private void printSendOrder(boolean initTable) {
CC.obtainBuilder("Component.Print")
.setActionName("printActivity")
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_KITCHEN)
.build()
.callAsyncCallbackOnMainThread((cc, result) -> {
// if (result.isSuccess()) {
//打印成功
IActivity.returnBeforeActivity(initTable);
// } else {
// mRootView.showMessage("打印失敗");
// }
});
//打印上菜紙
// CC.obtainBuilder("Component.Print")
// .setActionName("printActivity")
// .addParam("NewFoods", newFoods)
// .addParam("type", 0)
// .addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_KITCHEN)
// .build()
// .callAsyncCallbackOnMainThread((cc, result) -> {
// if (result.isSuccess()) {
//// if (result.isSuccess()) {
// //打印成功
// mRootView.killMyself();
// }
// IActivity.returnBeforeActivity(initTable);
//// } else {
//// mRootView.showMessage("打印失敗");
//// }
// });
IActivity.returnBeforeActivity(initTable);
}
/**
......@@ -1856,7 +1845,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
}
mCurrentOrderDetailBean = currentOrderBean;
List<Discount> discountList = filterDiscountByType(mModel.queryDB_DiscountList("0"),"0");
List<Discount> discountList = filterDiscountByType(mModel.queryDB_DiscountList("0"), "0");
mDiscountList.clear();
mDiscountList.addAll(discountList);
......
......@@ -346,19 +346,19 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
* 送單
*/
private void printSendOrder(List<OrderDetail> newFoods) {
MyOrderManage.getInstance().setNewFoodList(newFoods);
CC.obtainBuilder("Component.Print")
.setActionName("printActivity")
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_KITCHEN)
.build()
.callAsyncCallbackOnMainThread((cc, result) -> {
Log.e("error", "是否成功打印:" + result.isSuccess());
// if (result.isSuccess()) {
// //打印成功
//
// }
mRootView.sendSuccess();
});
// MyOrderManage.getInstance().setNewFoodList(newFoods);
// CC.obtainBuilder("Component.Print")
// .setActionName("printActivity")
// .addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_KITCHEN)
// .build()
// .callAsyncCallbackOnMainThread((cc, result) -> {
// Log.e("error", "是否成功打印:" + result.isSuccess());
//// if (result.isSuccess()) {
//// //打印成功
////
//// }
// mRootView.sendSuccess();
// });
}
public void printOrder(long tableId, boolean isSend) {
......
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