Commit 5e45c2a8 by Wyh

10.15 1、BBpos打印印單、上菜紙、處方單 2、PRJ打印頁數優化 3、新訂單頁面

Signed-off-by: Wyh <1239658231>
parent cc2bb8ac
...@@ -51,7 +51,7 @@ android { ...@@ -51,7 +51,7 @@ android {
/** /**
* 版本号 * 版本号
*/ */
schemaVersion 16 schemaVersion 17
/** /**
* greendao输出dao的数据库操作实体类文件夹(相对路径 包名+自定义路径名称,包将创建于包名的直接路径下) * greendao输出dao的数据库操作实体类文件夹(相对路径 包名+自定义路径名称,包将创建于包名的直接路径下)
*/ */
......
...@@ -30,13 +30,13 @@ import com.gingersoft.gsa.cloud.base.utils.crash.AppCrashHandler; ...@@ -30,13 +30,13 @@ import com.gingersoft.gsa.cloud.base.utils.crash.AppCrashHandler;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil; 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.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.xlog.MyBackupStrategy; import com.gingersoft.gsa.cloud.base.utils.xlog.MyBackupStrategy;
import com.gingersoft.gsa.cloud.bean.RestaurantExpandInfo;
import com.gingersoft.gsa.cloud.constans.HttpsConstans; import com.gingersoft.gsa.cloud.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.constans.PrintConstans; import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.constans.UserConstans; import com.gingersoft.gsa.cloud.constans.UserConstans;
import com.gingersoft.gsa.cloud.database.DaoManager; import com.gingersoft.gsa.cloud.database.DaoManager;
import com.gingersoft.gsa.cloud.database.bean.ExpandInfo; import com.gingersoft.gsa.cloud.database.bean.ExpandInfo;
import com.gingersoft.gsa.cloud.database.utils.ExpandInfoDaoUtils; import com.gingersoft.gsa.cloud.database.utils.ExpandInfoDaoUtils;
import com.gingersoft.gsa.cloud.bean.RestaurantExpandInfo;
import com.hyweb.n5.lib.exception.NoInitPrinterException; import com.hyweb.n5.lib.exception.NoInitPrinterException;
import com.hyweb.n5.lib.util.PrinterUtil; import com.hyweb.n5.lib.util.PrinterUtil;
import com.jess.arms.base.BaseApplication; import com.jess.arms.base.BaseApplication;
...@@ -105,7 +105,7 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -105,7 +105,7 @@ public class GsaCloudApplication extends BaseApplication {
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
this.mAppContext = this; mAppContext = this;
CC.enableVerboseLog(true); CC.enableVerboseLog(true);
CC.enableDebug(true); CC.enableDebug(true);
CC.enableRemoteCC(true); CC.enableRemoteCC(true);
...@@ -227,6 +227,8 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -227,6 +227,8 @@ public class GsaCloudApplication extends BaseApplication {
RetrofitUrlManager.getInstance().putDomain("ricepon_activities", HttpsConstans.ricepon_activities); RetrofitUrlManager.getInstance().putDomain("ricepon_activities", HttpsConstans.ricepon_activities);
///ricepon-cloud-gsa/api/請求地址 ///ricepon-cloud-gsa/api/請求地址
RetrofitUrlManager.getInstance().putDomain("ricepon_cloud_gsa", HttpsConstans.ricepon_cloud_gsa); RetrofitUrlManager.getInstance().putDomain("ricepon_cloud_gsa", HttpsConstans.ricepon_cloud_gsa);
//61177
RetrofitUrlManager.getInstance().putDomain("ricepon_member", HttpsConstans.RICEPON_MEMBER_61177);
} }
private void initPrint() { private void initPrint() {
......
...@@ -20,4 +20,43 @@ public class BaseResult { ...@@ -20,4 +20,43 @@ public class BaseResult {
private String errMsg; private String errMsg;
private Object data; private Object data;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public long getSysTime() {
return sysTime;
}
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
} }
...@@ -344,4 +344,508 @@ public class MemberInfo implements Serializable { ...@@ -344,4 +344,508 @@ public class MemberInfo implements Serializable {
private int year; private int year;
} }
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getMemberNo() {
return memberNo;
}
public void setMemberNo(String memberNo) {
this.memberNo = memberNo;
}
public int getMemberDiscount() {
return memberDiscount;
}
public void setMemberDiscount(int memberDiscount) {
this.memberDiscount = memberDiscount;
}
public void setMemberPoint(float memberPoint) {
MemberPoint = memberPoint;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getLevelName3() {
return levelName3;
}
public void setLevelName3(String levelName3) {
this.levelName3 = levelName3;
}
public String getLevelName2() {
return levelName2;
}
public void setLevelName2(String levelName2) {
this.levelName2 = levelName2;
}
public String getLevelName1() {
return levelName1;
}
public void setLevelName1(String levelName1) {
this.levelName1 = levelName1;
}
public void setLevelName(String levelName) {
this.levelName = levelName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getBirthdaybonusratio() {
return birthdaybonusratio;
}
public void setBirthdaybonusratio(int birthdaybonusratio) {
this.birthdaybonusratio = birthdaybonusratio;
}
public int getCreditPoints() {
return creditPoints;
}
public void setCreditPoints(int creditPoints) {
this.creditPoints = creditPoints;
}
public int getBirthdayperiod() {
return birthdayperiod;
}
public void setBirthdayperiod(int birthdayperiod) {
this.birthdayperiod = birthdayperiod;
}
public int getExtendExpirePeriod() {
return extendExpirePeriod;
}
public void setExtendExpirePeriod(int extendExpirePeriod) {
this.extendExpirePeriod = extendExpirePeriod;
}
public int getBrCouponTypeId() {
return brCouponTypeId;
}
public void setBrCouponTypeId(int brCouponTypeId) {
this.brCouponTypeId = brCouponTypeId;
}
public int getLevelUpPeriod() {
return levelUpPeriod;
}
public void setLevelUpPeriod(int levelUpPeriod) {
this.levelUpPeriod = levelUpPeriod;
}
public int getGroupId() {
return groupId;
}
public void setGroupId(int groupId) {
this.groupId = groupId;
}
public int getSeq1() {
return seq1;
}
public void setSeq1(int seq1) {
this.seq1 = seq1;
}
public int getNextDownLevel() {
return nextDownLevel;
}
public void setNextDownLevel(int nextDownLevel) {
this.nextDownLevel = nextDownLevel;
}
public int getDiscount() {
return discount;
}
public void setDiscount(int discount) {
this.discount = discount;
}
public int getLanguage() {
return language;
}
public void setLanguage(int language) {
this.language = language;
}
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
public int getNegativePoints() {
return negativePoints;
}
public void setNegativePoints(int negativePoints) {
this.negativePoints = negativePoints;
}
public int getCouponTypeId() {
return couponTypeId;
}
public void setCouponTypeId(int couponTypeId) {
this.couponTypeId = couponTypeId;
}
public int getIsdefault() {
return isdefault;
}
public void setIsdefault(int isdefault) {
this.isdefault = isdefault;
}
public int getPointsVariable() {
return pointsVariable;
}
public void setPointsVariable(int pointsVariable) {
this.pointsVariable = pointsVariable;
}
public String getBrandName() {
return brandName;
}
public void setBrandName(String brandName) {
this.brandName = brandName;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int getNewCouponNum() {
return newCouponNum;
}
public void setNewCouponNum(int newCouponNum) {
this.newCouponNum = newCouponNum;
}
public int getIsVisible() {
return isVisible;
}
public void setIsVisible(int isVisible) {
this.isVisible = isVisible;
}
public int getIsDisplay() {
return isDisplay;
}
public void setIsDisplay(int isDisplay) {
this.isDisplay = isDisplay;
}
public int getVaildDays() {
return vaildDays;
}
public void setVaildDays(int vaildDays) {
this.vaildDays = vaildDays;
}
public int getBrandId() {
return brandId;
}
public void setBrandId(int brandId) {
this.brandId = brandId;
}
public float getPointRedeemCash() {
return pointRedeemCash;
}
public void setPointRedeemCash(float pointRedeemCash) {
this.pointRedeemCash = pointRedeemCash;
}
public int getAblediscount() {
return ablediscount;
}
public void setAblediscount(int ablediscount) {
this.ablediscount = ablediscount;
}
public float getExpireAfterDayClearPoints() {
return expireAfterDayClearPoints;
}
public void setExpireAfterDayClearPoints(float expireAfterDayClearPoints) {
this.expireAfterDayClearPoints = expireAfterDayClearPoints;
}
public double getExtendExpireAmount() {
return extendExpireAmount;
}
public void setExtendExpireAmount(double extendExpireAmount) {
this.extendExpireAmount = extendExpireAmount;
}
public String getFoodDesc3() {
return foodDesc3;
}
public void setFoodDesc3(String foodDesc3) {
this.foodDesc3 = foodDesc3;
}
public int getScCharge() {
return scCharge;
}
public void setScCharge(int scCharge) {
this.scCharge = scCharge;
}
public int getExtendValidDays() {
return extendValidDays;
}
public void setExtendValidDays(int extendValidDays) {
this.extendValidDays = extendValidDays;
}
public double getLevelUpAmount() {
return levelUpAmount;
}
public void setLevelUpAmount(double levelUpAmount) {
this.levelUpAmount = levelUpAmount;
}
public int getOptTimes() {
return optTimes;
}
public void setOptTimes(int optTimes) {
this.optTimes = optTimes;
}
public int getUpdateTimes() {
return updateTimes;
}
public void setUpdateTimes(int updateTimes) {
this.updateTimes = updateTimes;
}
public String getFoodDesc1() {
return foodDesc1;
}
public void setFoodDesc1(String foodDesc1) {
this.foodDesc1 = foodDesc1;
}
public String getFoodDesc2() {
return foodDesc2;
}
public void setFoodDesc2(String foodDesc2) {
this.foodDesc2 = foodDesc2;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getPointenddate() {
return pointenddate;
}
public void setPointenddate(String pointenddate) {
this.pointenddate = pointenddate;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public int getBrPoints() {
return brPoints;
}
public void setBrPoints(int brPoints) {
this.brPoints = brPoints;
}
public String getOptTime() {
return optTime;
}
public void setOptTime(String optTime) {
this.optTime = optTime;
}
public int getCreateTimes() {
return createTimes;
}
public void setCreateTimes(int createTimes) {
this.createTimes = createTimes;
}
public int getBrCouponNum() {
return brCouponNum;
}
public void setBrCouponNum(int brCouponNum) {
this.brCouponNum = brCouponNum;
}
public int getPointRule() {
return pointRule;
}
public void setPointRule(int pointRule) {
this.pointRule = pointRule;
}
public int getFoodPrice() {
return foodPrice;
}
public void setFoodPrice(int foodPrice) {
this.foodPrice = foodPrice;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public int getPointoveryear() {
return pointoveryear;
}
public void setPointoveryear(int pointoveryear) {
this.pointoveryear = pointoveryear;
}
public String getLevelDesc() {
return levelDesc;
}
public void setLevelDesc(String levelDesc) {
this.levelDesc = levelDesc;
}
public int getPointUnit() {
return pointUnit;
}
public void setPointUnit(int pointUnit) {
this.pointUnit = pointUnit;
}
public int getNextUpLevel() {
return nextUpLevel;
}
public void setNextUpLevel(int nextUpLevel) {
this.nextUpLevel = nextUpLevel;
}
public int getRestaurantId() {
return restaurantId;
}
public void setRestaurantId(int restaurantId) {
this.restaurantId = restaurantId;
}
public CreateTimeBean getCreateTime() {
return createTime;
}
public void setCreateTime(CreateTimeBean createTime) {
this.createTime = createTime;
}
public UpdateTimeBean getUpdateTime() {
return updateTime;
}
public void setUpdateTime(UpdateTimeBean updateTime) {
this.updateTime = updateTime;
}
public MemberExpireDateBean getMemberExpireDate() {
return memberExpireDate;
}
public void setMemberExpireDate(MemberExpireDateBean memberExpireDate) {
this.memberExpireDate = memberExpireDate;
}
public VaildTimeBean getVaildTime() {
return vaildTime;
}
public void setVaildTime(VaildTimeBean vaildTime) {
this.vaildTime = vaildTime;
}
} }
...@@ -234,4 +234,332 @@ public class PayMethod { ...@@ -234,4 +234,332 @@ public class PayMethod {
this.nameSecond = name; this.nameSecond = name;
this.nameThird = name; this.nameThird = name;
} }
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getBrandId() {
return brandId;
}
public void setBrandId(int brandId) {
this.brandId = brandId;
}
public int getRestaurantId() {
return restaurantId;
}
public void setRestaurantId(int restaurantId) {
this.restaurantId = restaurantId;
}
public String getNameFirst() {
return nameFirst;
}
public void setNameFirst(String nameFirst) {
this.nameFirst = nameFirst;
}
public String getNameSecond() {
return nameSecond;
}
public void setNameSecond(String nameSecond) {
this.nameSecond = nameSecond;
}
public String getNameThird() {
return nameThird;
}
public void setNameThird(String nameThird) {
this.nameThird = nameThird;
}
public int getWhetherSales() {
return whetherSales;
}
public void setWhetherSales(int whetherSales) {
this.whetherSales = whetherSales;
}
public int getWhetherManagerAuthority() {
return whetherManagerAuthority;
}
public void setWhetherManagerAuthority(int whetherManagerAuthority) {
this.whetherManagerAuthority = whetherManagerAuthority;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getFont_color() {
return font_color;
}
public void setFont_color(String font_color) {
this.font_color = font_color;
}
public int getWhetherReportCount() {
return whetherReportCount;
}
public void setWhetherReportCount(int whetherReportCount) {
this.whetherReportCount = whetherReportCount;
}
public int getInteractiveType() {
return interactiveType;
}
public void setInteractiveType(int interactiveType) {
this.interactiveType = interactiveType;
}
public int getWhetherFixedAmount() {
return whetherFixedAmount;
}
public void setWhetherFixedAmount(int whetherFixedAmount) {
this.whetherFixedAmount = whetherFixedAmount;
}
public double getAmountValue() {
return amountValue;
}
public void setAmountValue(double amountValue) {
this.amountValue = amountValue;
}
public int getPayType() {
return payType;
}
public void setPayType(int payType) {
this.payType = payType;
}
public double getMinPayAmount() {
return minPayAmount;
}
public void setMinPayAmount(double minPayAmount) {
this.minPayAmount = minPayAmount;
}
public int getWhetherFreeService() {
return whetherFreeService;
}
public void setWhetherFreeService(int whetherFreeService) {
this.whetherFreeService = whetherFreeService;
}
public int getWhetherTaxExemption() {
return whetherTaxExemption;
}
public void setWhetherTaxExemption(int whetherTaxExemption) {
this.whetherTaxExemption = whetherTaxExemption;
}
public int getWhetherSignatureLine() {
return whetherSignatureLine;
}
public void setWhetherSignatureLine(int whetherSignatureLine) {
this.whetherSignatureLine = whetherSignatureLine;
}
public int getPaySeq() {
return paySeq;
}
public void setPaySeq(int paySeq) {
this.paySeq = paySeq;
}
public int getWhetherOpenBox() {
return whetherOpenBox;
}
public void setWhetherOpenBox(int whetherOpenBox) {
this.whetherOpenBox = whetherOpenBox;
}
public int getGetIntegral() {
return getIntegral;
}
public void setGetIntegral(int getIntegral) {
this.getIntegral = getIntegral;
}
public int getIntegralMultiple() {
return integralMultiple;
}
public void setIntegralMultiple(int integralMultiple) {
this.integralMultiple = integralMultiple;
}
public float getDeductionIntegral() {
return deductionIntegral;
}
public void setDeductionIntegral(float deductionIntegral) {
this.deductionIntegral = deductionIntegral;
}
public int getDockingType() {
return dockingType;
}
public void setDockingType(int dockingType) {
this.dockingType = dockingType;
}
public String getBillType() {
return billType;
}
public void setBillType(String billType) {
this.billType = billType;
}
public int getTablePrintingAmount() {
return tablePrintingAmount;
}
public void setTablePrintingAmount(int tablePrintingAmount) {
this.tablePrintingAmount = tablePrintingAmount;
}
public int getTakeOutPrintingAmount() {
return takeOutPrintingAmount;
}
public void setTakeOutPrintingAmount(int takeOutPrintingAmount) {
this.takeOutPrintingAmount = takeOutPrintingAmount;
}
public long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(long updateTime) {
this.updateTime = updateTime;
}
public long getCreateTimeX() {
return createTimeX;
}
public void setCreateTimeX(long createTimeX) {
this.createTimeX = createTimeX;
}
public int getUpdateUid() {
return updateUid;
}
public void setUpdateUid(int updateUid) {
this.updateUid = updateUid;
}
public int getCreateUid() {
return createUid;
}
public void setCreateUid(int createUid) {
this.createUid = createUid;
}
public double getPayMoney() {
return payMoney;
}
public void setPayMoney(double payMoney) {
this.payMoney = payMoney;
}
public double getTipsPrice() {
return TipsPrice;
}
public void setTipsPrice(double tipsPrice) {
TipsPrice = tipsPrice;
}
public int getPayModeTextColor() {
return payModeTextColor;
}
public void setPayModeTextColor(int payModeTextColor) {
this.payModeTextColor = payModeTextColor;
}
public int getPayMoneyTextColor() {
return payMoneyTextColor;
}
public void setPayMoneyTextColor(int payMoneyTextColor) {
this.payMoneyTextColor = payMoneyTextColor;
}
public int getPayModeTextSelectColor() {
return payModeTextSelectColor;
}
public void setPayModeTextSelectColor(int payModeTextSelectColor) {
this.payModeTextSelectColor = payModeTextSelectColor;
}
public int getPayMoneyTextSelectColor() {
return payMoneyTextSelectColor;
}
public void setPayMoneyTextSelectColor(int payMoneyTextSelectColor) {
this.payMoneyTextSelectColor = payMoneyTextSelectColor;
}
public int getPayModeSize() {
return payModeSize;
}
public void setPayModeSize(int payModeSize) {
this.payModeSize = payModeSize;
}
public int getPayMoneySize() {
return payMoneySize;
}
public void setPayMoneySize(int payMoneySize) {
this.payMoneySize = payMoneySize;
}
public static int getPayTypeCash() {
return PAY_TYPE_CASH;
}
public static int getPayTypeIntegral() {
return PAY_TYPE_INTEGRAL;
}
} }
package com.gingersoft.gsa.cloud.base.utils.other; package com.gingersoft.gsa.cloud.base.utils.other;
import android.widget.EditText;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
...@@ -23,6 +25,15 @@ public class TextUtil { ...@@ -23,6 +25,15 @@ public class TextUtil {
!str.equals("null") && !str.equals("undefined"); !str.equals("null") && !str.equals("undefined");
} }
public static boolean isNotEmptyOrNullOrUndefined(EditText editText) {
if (editText != null && editText.getText() != null) {
String str = editText.getText().toString();
return str.length() != 0 && !str.equals("null") && !str.equals("undefined");
} else {
return false;
}
}
public static String isEmptyReturnString(String str) { public static String isEmptyReturnString(String str) {
if (str == null || str.length() == 0 || if (str == null || str.length() == 0 ||
str.equals("null") || str.equals("undefined")) { str.equals("null") || str.equals("undefined")) {
...@@ -53,9 +64,10 @@ public class TextUtil { ...@@ -53,9 +64,10 @@ public class TextUtil {
c[i] = (char) 32; c[i] = (char) 32;
continue; continue;
} }
if (c[i] > 65280 && c[i] < 65375) if (c[i] > 65280 && c[i] < 65375) {
c[i] = (char) (c[i] - 65248); c[i] = (char) (c[i] - 65248);
} }
}
return new String(c); return new String(c);
} }
......
...@@ -94,4 +94,43 @@ public class TimePickerUtils { ...@@ -94,4 +94,43 @@ public class TimePickerUtils {
} }
/**
* 顯示報表頁面時間選擇樣式
* @param mContext
* @param defaultTime 默認選中時間
* @param onTimeSelectListener 選中時間回調
*/
public static TimePickerView showTimePicker(Context mContext, Calendar defaultTime, TimePickerView.OnTimeSelectListener onTimeSelectListener) {
//獲取今年第一天的日期
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, cal.getActualMaximum(Calendar.HOUR_OF_DAY));
//打開時間選擇器
TimePickerView pvTime = new TimePickerView.Builder(mContext, onTimeSelectListener)
.setType(TimePickerView.Type.HOURS_MINS)//默认全部显示
.setCancelText("取消")//取消按钮文字
.setSubmitText("確認")//确认按钮文字
.setContentSize(20)//滚轮文字大小
.setTitleSize(20)//标题文字大小
// .setTitleText("请选择时间")//标题文字
.setOutSideCancelable(true)//点击屏幕,点在控件外部范围时,是否取消显示
.isCyclic(false)//是否循环滚动
.setTextColorCenter(Color.BLACK)//设置选中项的颜色
.setTitleColor(Color.BLACK)//标题文字颜色
.setSubmitColor(Color.BLUE)//确定按钮文字颜色
.setCancelColor(Color.BLUE)//取消按钮文字颜色
// .setTitleBgColor(0xFF666666)//标题背景颜色 Night mode
// .setBgColor(0xFF333333)//滚轮背景颜色 Night mode
// .setRange(Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.YEAR))
// .setDate(selectedDate)// 如果不设置的话,默认是系统时间*/
.setRangDate(Calendar.getInstance(), cal)//時間是今年第一天到今天
.setLabel("", "", "", "", "", "")
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
// .isDialog(true)//是否显示为对话框样式
.build();
//設置默認選中時間
// pvTime.setDate(defaultTime);//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。
pvTime.show();
return pvTime;
}
} }
...@@ -22,6 +22,67 @@ import timber.log.Timber; ...@@ -22,6 +22,67 @@ import timber.log.Timber;
* @Description: TODO(时间工具类) * @Description: TODO(时间工具类)
*/ */
public class TimeUtils { public class TimeUtils {
/**
* SimpleDateFormat.format把date转成String
* SimpleDateFormat.parse把String转成date。
*
* SimpleDateFormat.parse的时候,经常会有ParseException原因是输入的字符串格式跟SimpleDateFormat定义的格式不一致。
* 这时候,可以先通过SimpleDateFormat.format把参数转成符合格式的字符串,然后再调用SimpleDateFormat.parse
*
* G 年代标志符
* y 年
* M 月
* d 日
* h 时 在上午或下午 (1~12)
* H 时 在一天中 (0~23)
* m 分
* s 秒
* S 毫秒
* E 星期
* D 一年中的第几天
* F 一月中第几个星期几
* w 一年中第几个星期
* W 一月中第几个星期
* a 上午 / 下午 标记符
* k 时 在一天中 (1~24)
* K 时 在上午或下午 (0~11)
* z 时区
* <p>
* yyyy : 代表年(不去区分大小写) 假设年份为 2017
* <p>
* "y" , "yyy" , "yyyy" 匹配的都是4位完整的年 如 : "2017"
* "yy" 匹配的是年分的后两位 如 : "15"
* 超过4位,会在年份前面加"0"补位 如 "YYYYY"对应"02017"
* <p>
* MM : 代表月(只能使用大写) 假设月份为 9
* "M" 对应 "9"
* "MM" 对应 "09"
* "MMM" 对应 "Sep"
* "MMMM" 对应 "Sep"
* 超出3位,仍然对应 "September"
* <p>
* dd : 代表日(只能使用小写) 假设为13号
* "d" , "dd" 都对应 "13"
* 超出2位,会在数字前面加"0"补位. 例如 "dddd" 对应 "0013"
* <p>
* hh : 代表时(区分大小写,大写为24进制计时,小写为12进制计时) 假设为15时
* "H" , "HH" 都对应 "15" , 超出2位,会在数字前面加"0"补位. 例如 "HHHH" 对应 "0015"
* "h" 对应 "3"
* "hh" 对应 "03" , 超出2位,会在数字前面加"0"补位. 例如 "hhhh" 对应 "0003"
* <p>
* mm : 代表分(只能使用小写) 假设为32分
* "m" , "mm" 都对应 "32" , 超出2位,会在数字前面加"0"补位. 例如 "mmmm" 对应 "0032"
* <p>
* ss : 代表秒(只能使用小写) 假设为15秒
* "s" , "ss" 都对应 "15" , 超出2位,会在数字前面加"0"补位. 例如 "ssss" 对应 "0015"
* <p>
* E : 代表星期(只能使用大写) 假设为 Sunday
* "E" , "EE" , "EEE" 都对应 "Sun"
* "EEEE" 对应 "Sunday" , 超出4位 , 仍然对应 "Sunday"
* <p>
* a : 代表上午还是下午,如果是上午就对应 "AM" , 如果是下午就对应 "PM"
*/
public static final SimpleDateFormat ENGLISH_DATE_FORMAT = new SimpleDateFormat("MMM d, yyyy K:m:s a", Locale.ENGLISH);
public static final SimpleDateFormat DEFAULT_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//, Locale.CHINESE public static final SimpleDateFormat DEFAULT_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//, Locale.CHINESE
public static final SimpleDateFormat DEFAULT_DATE_FORMAT_YMDHM = new SimpleDateFormat("yyyy-MM-dd HH:mm");//, Locale.CHINESE public static final SimpleDateFormat DEFAULT_DATE_FORMAT_YMDHM = new SimpleDateFormat("yyyy-MM-dd HH:mm");//, Locale.CHINESE
...@@ -1446,7 +1507,7 @@ public class TimeUtils { ...@@ -1446,7 +1507,7 @@ public class TimeUtils {
return time; return time;
} }
public static String parseDateToString(Date date, SimpleDateFormat dateFormat){ public static String parseDateToString(Date date, SimpleDateFormat dateFormat) {
return dateFormat.format(date); return dateFormat.format(date);
} }
......
...@@ -49,6 +49,182 @@ public class RestaurantExpandInfo { ...@@ -49,6 +49,182 @@ public class RestaurantExpandInfo {
//估清控制食品字體大小 //估清控制食品字體大小
private int soldoutCtrlFoodFontSize = 16; private int soldoutCtrlFoodFontSize = 16;
public int getFoodGroupRow() {
return foodGroupRow;
}
public void setFoodGroupRow(int foodGroupRow) {
this.foodGroupRow = foodGroupRow;
}
public int getFoodGroupColumn() {
return foodGroupColumn;
}
public void setFoodGroupColumn(int foodGroupColumn) {
this.foodGroupColumn = foodGroupColumn;
}
public int getFoodColumn() {
return foodColumn;
}
public void setFoodColumn(int foodColumn) {
this.foodColumn = foodColumn;
}
public int getComboColumn() {
return comboColumn;
}
public void setComboColumn(int comboColumn) {
this.comboColumn = comboColumn;
}
public int getModColumn() {
return modColumn;
}
public void setModColumn(int modColumn) {
this.modColumn = modColumn;
}
public int getDiscountColumn() {
return discountColumn;
}
public void setDiscountColumn(int discountColumn) {
this.discountColumn = discountColumn;
}
public int getFoodGroupBtnHeight() {
return foodGroupBtnHeight;
}
public void setFoodGroupBtnHeight(int foodGroupBtnHeight) {
this.foodGroupBtnHeight = foodGroupBtnHeight;
}
public int getFoodBtnHeight() {
return foodBtnHeight;
}
public void setFoodBtnHeight(int foodBtnHeight) {
this.foodBtnHeight = foodBtnHeight;
}
public int getModBtnHeight() {
return modBtnHeight;
}
public void setModBtnHeight(int modBtnHeight) {
this.modBtnHeight = modBtnHeight;
}
public int getComboHeight() {
return comboHeight;
}
public void setComboHeight(int comboHeight) {
this.comboHeight = comboHeight;
}
public int getDiscountHeight() {
return discountHeight;
}
public void setDiscountHeight(int discountHeight) {
this.discountHeight = discountHeight;
}
public int getLayoutQtyHeight() {
return LayoutQtyHeight;
}
public void setLayoutQtyHeight(int layoutQtyHeight) {
LayoutQtyHeight = layoutQtyHeight;
}
public int getFoodGroupFontSize() {
return foodGroupFontSize;
}
public void setFoodGroupFontSize(int foodGroupFontSize) {
this.foodGroupFontSize = foodGroupFontSize;
}
public int getFoodFontSize() {
return foodFontSize;
}
public void setFoodFontSize(int foodFontSize) {
this.foodFontSize = foodFontSize;
}
public int getComboFontSize() {
return comboFontSize;
}
public void setComboFontSize(int comboFontSize) {
this.comboFontSize = comboFontSize;
}
public int getModFontSize() {
return modFontSize;
}
public void setModFontSize(int modFontSize) {
this.modFontSize = modFontSize;
}
public int getDiscountFontSize() {
return discountFontSize;
}
public void setDiscountFontSize(int discountFontSize) {
this.discountFontSize = discountFontSize;
}
public int getOrderNumberShowSize() {
return OrderNumberShowSize;
}
public void setOrderNumberShowSize(int orderNumberShowSize) {
OrderNumberShowSize = orderNumberShowSize;
}
public int getOrderNumberFontSize() {
return OrderNumberFontSize;
}
public void setOrderNumberFontSize(int orderNumberFontSize) {
OrderNumberFontSize = orderNumberFontSize;
}
public int getOrderNumberChildShowSize() {
return OrderNumberChildShowSize;
}
public void setOrderNumberChildShowSize(int orderNumberChildShowSize) {
OrderNumberChildShowSize = orderNumberChildShowSize;
}
public int getOrderNumberChildFontSize() {
return OrderNumberChildFontSize;
}
public void setOrderNumberChildFontSize(int orderNumberChildFontSize) {
OrderNumberChildFontSize = orderNumberChildFontSize;
}
public int getSoldoutCtrlFoodFontSize() {
return soldoutCtrlFoodFontSize;
}
public void setSoldoutCtrlFoodFontSize(int soldoutCtrlFoodFontSize) {
this.soldoutCtrlFoodFontSize = soldoutCtrlFoodFontSize;
}
} }
...@@ -76,6 +252,149 @@ public class RestaurantExpandInfo { ...@@ -76,6 +252,149 @@ public class RestaurantExpandInfo {
private int AutoPrinterPaper;//送單自動打印上菜紙 private int AutoPrinterPaper;//送單自動打印上菜紙
private int ToPrintQRCode;//結賬是否打印積分二維碼 private int ToPrintQRCode;//結賬是否打印積分二維碼
private int AutoQuitTime = 600;//餐檯模式下單頁多少秒不操作返回餐檯頁面 private int AutoQuitTime = 600;//餐檯模式下單頁多少秒不操作返回餐檯頁面
public int getRounding() {
return Rounding;
}
public void setRounding(int rounding) {
Rounding = rounding;
}
public int getRoundingDecimal() {
return RoundingDecimal;
}
public void setRoundingDecimal(int roundingDecimal) {
RoundingDecimal = roundingDecimal;
}
public int getItemDecimals() {
return ItemDecimals;
}
public void setItemDecimals(int itemDecimals) {
ItemDecimals = itemDecimals;
}
public int getDeliveryPrintCount() {
return DeliveryPrintCount;
}
public void setDeliveryPrintCount(int deliveryPrintCount) {
DeliveryPrintCount = deliveryPrintCount;
}
public int getDeliveryClosingPC() {
return DeliveryClosingPC;
}
public void setDeliveryClosingPC(int deliveryClosingPC) {
DeliveryClosingPC = deliveryClosingPC;
}
public int getTableModePrintCount() {
return TableModePrintCount;
}
public void setTableModePrintCount(int tableModePrintCount) {
TableModePrintCount = tableModePrintCount;
}
public int getTableModeClosingPC() {
return TableModeClosingPC;
}
public void setTableModeClosingPC(int tableModeClosingPC) {
TableModeClosingPC = tableModeClosingPC;
} }
public int getOrderReceivingTimeout() {
return OrderReceivingTimeout;
}
public void setOrderReceivingTimeout(int orderReceivingTimeout) {
OrderReceivingTimeout = orderReceivingTimeout;
}
public int getPrintMemberInfo() {
return PrintMemberInfo;
}
public void setPrintMemberInfo(int printMemberInfo) {
PrintMemberInfo = printMemberInfo;
}
public int getPrintPage() {
return PrintPage;
}
public void setPrintPage(int printPage) {
PrintPage = printPage;
}
public int getPrintMergerFood() {
return PrintMergerFood;
}
public void setPrintMergerFood(int printMergerFood) {
PrintMergerFood = printMergerFood;
}
public int getPrintStatisticsAmount() {
return PrintStatisticsAmount;
}
public void setPrintStatisticsAmount(int printStatisticsAmount) {
PrintStatisticsAmount = printStatisticsAmount;
}
public int getPrintFirstOrder() {
return PrintFirstOrder;
}
public void setPrintFirstOrder(int printFirstOrder) {
PrintFirstOrder = printFirstOrder;
}
public int getFrozenChainAutoOrder() {
return FrozenChainAutoOrder;
}
public void setFrozenChainAutoOrder(int frozenChainAutoOrder) {
FrozenChainAutoOrder = frozenChainAutoOrder;
}
public int getMergeSendFood() {
return MergeSendFood;
}
public void setMergeSendFood(int mergeSendFood) {
MergeSendFood = mergeSendFood;
}
public int getAutoPrinterPaper() {
return AutoPrinterPaper;
}
public void setAutoPrinterPaper(int autoPrinterPaper) {
AutoPrinterPaper = autoPrinterPaper;
}
public int getToPrintQRCode() {
return ToPrintQRCode;
}
public void setToPrintQRCode(int toPrintQRCode) {
ToPrintQRCode = toPrintQRCode;
}
public int getAutoQuitTime() {
return AutoQuitTime;
}
public void setAutoQuitTime(int autoQuitTime) {
AutoQuitTime = autoQuitTime;
}
}
} }
...@@ -73,6 +73,7 @@ public class HttpsConstans { ...@@ -73,6 +73,7 @@ public class HttpsConstans {
//---------------------------------------System請求地址---------------------------------------------------------------------------------- //---------------------------------------System請求地址----------------------------------------------------------------------------------
public static String SYSTEM_PATH = "/ricepon-system/api/"; public static String SYSTEM_PATH = "/ricepon-system/api/";
public static String API_RICEPON_MEMBER = "/ricepon-member/api/";
//--------------------------------------配置----------------------------------------------------------------------------------- //--------------------------------------配置-----------------------------------------------------------------------------------
...@@ -86,7 +87,6 @@ public class HttpsConstans { ...@@ -86,7 +87,6 @@ public class HttpsConstans {
*/ */
public static int isFormal = 0; public static int isFormal = 0;
//沽清控制地址 //沽清控制地址
public static String _SERVER_ADDRESS;// = (isFormal ? HTTP_ADDRESS_URL_FORMAL : "http://a.ricepon.com:61177") + "/member-web/api/"; public static String _SERVER_ADDRESS;// = (isFormal ? HTTP_ADDRESS_URL_FORMAL : "http://a.ricepon.com:61177") + "/member-web/api/";
...@@ -109,6 +109,10 @@ public class HttpsConstans { ...@@ -109,6 +109,10 @@ public class HttpsConstans {
public static String SYSTEM_URL; public static String SYSTEM_URL;
public static String RICEPON_MEMBER_SERVER_ADDRESS;
public static String RICEPON_MEMBER_61177;
public static void init(Context context) { public static void init(Context context) {
isFormal = (int) SPUtils.get(context, "isFormal", -1); isFormal = (int) SPUtils.get(context, "isFormal", -1);
if (isFormal == -1 && BuildConfig.DEBUG) { if (isFormal == -1 && BuildConfig.DEBUG) {
...@@ -119,17 +123,20 @@ public class HttpsConstans { ...@@ -119,17 +123,20 @@ public class HttpsConstans {
} }
switch (isFormal) { switch (isFormal) {
default: default:
_SERVER_ADDRESS = HTTP_ADDRESS_URL_FORMAL + "/member-web/api/"; RICEPON_MEMBER_61177 = HTTP_ADDRESS_URL_FORMAL + API_RICEPON_MEMBER;
_SERVER_ADDRESS = HTTP_ADDRESS_URL_FORMAL + WECHAR_REPORT_PATH;
ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL; ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL;
ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL + CLOUD_GSA_API_PATH; ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL + CLOUD_GSA_API_PATH;
ROOT_URL = ROOT_FORMAL_URL; ROOT_URL = ROOT_FORMAL_URL;
REPORT_SERVER_ADDRESS = REPORT_FORMAL_ADDRESS + REPORT_PATH; REPORT_SERVER_ADDRESS = REPORT_FORMAL_ADDRESS + REPORT_PATH;
WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_FORMAL_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_FORMAL_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS
RICEPON_MEMBER_SERVER_ADDRESS = WECHAR_REPORT_FORMAL_ADDRESS + WECHAR_REPORT_PATH;
SYSTEM_URL = HTTP_ADDRESS_URL_FORMAL + SYSTEM_PATH; SYSTEM_URL = HTTP_ADDRESS_URL_FORMAL + SYSTEM_PATH;
ROOT_SERVER = HTTP_ADDRESS_URL_FORMAL; ROOT_SERVER = HTTP_ADDRESS_URL_FORMAL;
break; break;
case 1: case 1:
_SERVER_ADDRESS = "http://a.ricepon.com:61177" + "/member-web/api/"; RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER;
_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;
ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS; ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS;
ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_HK + CLOUD_GSA_API_PATH; ROOT_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_HK + CLOUD_GSA_API_PATH;
ROOT_URL = ROOT_HK_TEST_URL; ROOT_URL = ROOT_HK_TEST_URL;
...@@ -139,7 +146,8 @@ public class HttpsConstans { ...@@ -139,7 +146,8 @@ public class HttpsConstans {
ROOT_SERVER = HTTP_ADDRESS_URL_HK; ROOT_SERVER = HTTP_ADDRESS_URL_HK;
break; break;
case 2: case 2:
_SERVER_ADDRESS = ROOT_SERVER_ZHI_WANG_HK + "/member-web/api/"; RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER;
_SERVER_ADDRESS = ROOT_SERVER_ZHI_WANG_HK + WECHAR_REPORT_PATH;
ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS; ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS;
ROOT_SERVER_ADDRESS_FORMAL = ROOT_SERVER_ZHI_WANG_HK; ROOT_SERVER_ADDRESS_FORMAL = ROOT_SERVER_ZHI_WANG_HK;
ROOT_URL = ROOT_SZ_URL; ROOT_URL = ROOT_SZ_URL;
...@@ -148,7 +156,8 @@ public class HttpsConstans { ...@@ -148,7 +156,8 @@ public class HttpsConstans {
SYSTEM_URL = ROOT_SERVER_ZHI_WANG_HK + SYSTEM_PATH; SYSTEM_URL = ROOT_SERVER_ZHI_WANG_HK + SYSTEM_PATH;
break; break;
case 3: case 3:
_SERVER_ADDRESS = ROOT_SERVER_YOU_CHANG_HK + "/member-web/api/"; RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER;
_SERVER_ADDRESS = ROOT_SERVER_YOU_CHANG_HK + WECHAR_REPORT_PATH;
ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS; ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS;
ROOT_SERVER_ADDRESS_FORMAL = ROOT_SERVER_YOU_CHANG_HK; ROOT_SERVER_ADDRESS_FORMAL = ROOT_SERVER_YOU_CHANG_HK;
ROOT_URL = ROOT_SZ_URL; ROOT_URL = ROOT_SZ_URL;
...@@ -157,7 +166,8 @@ public class HttpsConstans { ...@@ -157,7 +166,8 @@ public class HttpsConstans {
SYSTEM_URL = ROOT_SERVER_YOU_CHANG_HK + SYSTEM_PATH; SYSTEM_URL = ROOT_SERVER_YOU_CHANG_HK + SYSTEM_PATH;
break; break;
case 4: case 4:
_SERVER_ADDRESS = ROOT_SERVER_SHI_SHU_HK + "/member-web/api/"; RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER;
_SERVER_ADDRESS = ROOT_SERVER_SHI_SHU_HK + WECHAR_REPORT_PATH;
ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS; ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = REPORT_TEST_ADDRESS;
ROOT_SERVER_ADDRESS_FORMAL = ROOT_SERVER_SHI_SHU_HK; ROOT_SERVER_ADDRESS_FORMAL = ROOT_SERVER_SHI_SHU_HK;
ROOT_URL = ROOT_SZ_URL; ROOT_URL = ROOT_SZ_URL;
...@@ -173,8 +183,9 @@ public class HttpsConstans { ...@@ -173,8 +183,9 @@ public class HttpsConstans {
ricepon_gsa = HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_GSA; ricepon_gsa = HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_GSA;
ricepon_activities = HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_ACTIVITIES; ricepon_activities = HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_ACTIVITIES;
ricepon_cloud_gsa = HttpsConstans.ROOT_URL + HttpsConstans.CLOUD_GSA_API_PATH; ricepon_cloud_gsa = HttpsConstans.ROOT_URL + HttpsConstans.CLOUD_GSA_API_PATH;
ricepon_member = HttpsConstans.ROOT_URL + "/ricepon-member/api/"; ricepon_member = HttpsConstans.ROOT_URL + API_RICEPON_MEMBER;
} }
public static String ricepon_wechat; public static String ricepon_wechat;
public static String ricepon_order; public static String ricepon_order;
public static String member_web_ricepon_gsa; public static String member_web_ricepon_gsa;
...@@ -185,7 +196,4 @@ public class HttpsConstans { ...@@ -185,7 +196,4 @@ public class HttpsConstans {
public static String ricepon_member; public static String ricepon_member;
} }
\ No newline at end of file
...@@ -4,14 +4,13 @@ import android.graphics.Color; ...@@ -4,14 +4,13 @@ import android.graphics.Color;
import android.text.TextUtils; import android.text.TextUtils;
import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property; import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Transient;
import java.util.Date; import java.util.Date;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Transient;
import lombok.Data; import lombok.Data;
/** /**
...@@ -414,4 +413,163 @@ public class ComboItem { ...@@ -414,4 +413,163 @@ public class ComboItem {
this.printSeting = printSeting; this.printSeting = printSeting;
} }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getName1() {
return name1;
}
public void setName1(String name1) {
this.name1 = name1;
}
public String getName2() {
return name2;
}
public void setName2(String name2) {
this.name2 = name2;
}
public long getParentId() {
return parentId;
}
public void setParentId(long parentId) {
this.parentId = parentId;
}
public int getSelectQty() {
return selectQty;
}
public void setSelectQty(int selectQty) {
this.selectQty = selectQty;
}
public String getDefmodifier() {
return defmodifier;
}
public void setDefmodifier(String defmodifier) {
this.defmodifier = defmodifier;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public long getAblediscount() {
return ablediscount;
}
public void setAblediscount(long ablediscount) {
this.ablediscount = ablediscount;
}
public int getServiceCharge() {
return serviceCharge;
}
public void setServiceCharge(int serviceCharge) {
this.serviceCharge = serviceCharge;
}
public int getAutoMode() {
return autoMode;
}
public void setAutoMode(int autoMode) {
this.autoMode = autoMode;
}
public boolean isModifier() {
return isModifier;
}
public void setModifier(boolean modifier) {
isModifier = modifier;
}
public long getInvisible() {
return invisible;
}
public void setInvisible(long invisible) {
this.invisible = invisible;
}
public String getMaxNumber() {
return maxNumber;
}
public void setMaxNumber(String maxNumber) {
this.maxNumber = maxNumber;
}
public String getCurrentMaxNumber() {
return currentMaxNumber;
}
public void setCurrentMaxNumber(String currentMaxNumber) {
this.currentMaxNumber = currentMaxNumber;
}
public int getBgColor() {
return bgColor;
}
public void setBgColor(int bgColor) {
this.bgColor = bgColor;
}
public int getFontColor() {
return fontColor;
}
public void setFontColor(int fontColor) {
this.fontColor = fontColor;
}
public Modifier getModifier() {
return modifier;
}
public void setModifier(Modifier modifier) {
this.modifier = modifier;
}
public double getPointsAdd() {
return pointsAdd;
}
public void setPointsAdd(double pointsAdd) {
this.pointsAdd = pointsAdd;
}
public long getPointsRatio() {
return pointsRatio;
}
public void setPointsRatio(long pointsRatio) {
this.pointsRatio = pointsRatio;
}
public double getPointsRedeem() {
return pointsRedeem;
}
public void setPointsRedeem(double pointsRedeem) {
this.pointsRedeem = pointsRedeem;
}
} }
...@@ -85,6 +85,13 @@ public class Discount { ...@@ -85,6 +85,13 @@ public class Discount {
public Discount() { public Discount() {
} }
public long getMemberId() {
return memberId;
}
public void setMemberId(long memberId) {
this.memberId = memberId;
}
/** /**
* 計算折扣金額 * 計算折扣金額
......
...@@ -50,16 +50,16 @@ public class ExpandInfo { ...@@ -50,16 +50,16 @@ public class ExpandInfo {
//是否被編輯了 //是否被編輯了
@Transient @Transient
private boolean isUpdate = false; private boolean isUpdate = false;
private String showName;
public static final int data_type_int = 1; public static final int data_type_int = 1;
public static final int data_type_string = 2; public static final int data_type_string = 2;
public static final int data_type_boolean = 3; public static final int data_type_boolean = 3;
public static final int data_type_date = 4; public static final int data_type_date = 4;
@Generated(hash = 372331474) @Generated(hash = 1155994232)
public ExpandInfo(Long id, int restaurantId, String settingName, public ExpandInfo(Long id, int restaurantId, String settingName,
Integer valueInt, String valueChar, String valueDatetime, String remark, Integer valueInt, String valueChar, String valueDatetime, String remark,
int dataType) { int dataType, String showName) {
this.id = id; this.id = id;
this.restaurantId = restaurantId; this.restaurantId = restaurantId;
this.settingName = settingName; this.settingName = settingName;
...@@ -68,6 +68,7 @@ public class ExpandInfo { ...@@ -68,6 +68,7 @@ public class ExpandInfo {
this.valueDatetime = valueDatetime; this.valueDatetime = valueDatetime;
this.remark = remark; this.remark = remark;
this.dataType = dataType; this.dataType = dataType;
this.showName = showName;
} }
@Generated(hash = 9429432) @Generated(hash = 9429432)
public ExpandInfo() { public ExpandInfo() {
...@@ -128,4 +129,12 @@ public class ExpandInfo { ...@@ -128,4 +129,12 @@ public class ExpandInfo {
public void setUpdate(boolean update) { public void setUpdate(boolean update) {
isUpdate = update; isUpdate = update;
} }
public String getShowName() {
return showName;
}
public void setShowName(String showName) {
this.showName = showName;
}
} }
package com.gingersoft.gsa.cloud.database.greendao;
import android.database.Cursor;
import android.database.sqlite.SQLiteStatement;
import com.gingersoft.gsa.cloud.database.bean.ColorBean;
import org.greenrobot.greendao.AbstractDao;
import org.greenrobot.greendao.Property;
import org.greenrobot.greendao.database.Database;
import org.greenrobot.greendao.database.DatabaseStatement;
import org.greenrobot.greendao.internal.DaoConfig;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/**
* DAO for table "COLOR_BEAN".
*/
public class ColorBeanDao extends AbstractDao<ColorBean, Void> {
public static final String TABLENAME = "COLOR_BEAN";
/**
* Properties of entity ColorBean.<br/>
* Can be used for QueryBuilder and for referencing column names.
*/
public static class Properties {
public final static Property ColorId = new Property(0, int.class, "colorId", false, "COLOR_ID");
public final static Property ColorStart = new Property(1, String.class, "colorStart", false, "COLOR_START");
public final static Property ColorStop = new Property(2, String.class, "colorStop", false, "COLOR_STOP");
public final static Property FontColor = new Property(3, String.class, "fontColor", false, "FONT_COLOR");
public final static Property AndroidColor = new Property(4, String.class, "androidColor", false, "ANDROID_COLOR");
public final static Property AndroidFontColor = new Property(5, String.class, "androidFontColor", false, "ANDROID_FONT_COLOR");
public final static Property CreateTime = new Property(6, String.class, "createTime", false, "CREATE_TIME");
public final static Property EditTime = new Property(7, String.class, "editTime", false, "EDIT_TIME");
}
public ColorBeanDao(DaoConfig config) {
super(config);
}
public ColorBeanDao(DaoConfig config, DaoSession daoSession) {
super(config, daoSession);
}
/** Creates the underlying database table. */
public static void createTable(Database db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": "";
db.execSQL("CREATE TABLE " + constraint + "\"COLOR_BEAN\" (" + //
"\"COLOR_ID\" INTEGER NOT NULL ," + // 0: colorId
"\"COLOR_START\" TEXT," + // 1: colorStart
"\"COLOR_STOP\" TEXT," + // 2: colorStop
"\"FONT_COLOR\" TEXT," + // 3: fontColor
"\"ANDROID_COLOR\" TEXT," + // 4: androidColor
"\"ANDROID_FONT_COLOR\" TEXT," + // 5: androidFontColor
"\"CREATE_TIME\" TEXT," + // 6: createTime
"\"EDIT_TIME\" TEXT);"); // 7: editTime
}
/** Drops the underlying database table. */
public static void dropTable(Database db, boolean ifExists) {
String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"COLOR_BEAN\"";
db.execSQL(sql);
}
@Override
protected final void bindValues(DatabaseStatement stmt, ColorBean entity) {
stmt.clearBindings();
stmt.bindLong(1, entity.getColorId());
String colorStart = entity.getColorStart();
if (colorStart != null) {
stmt.bindString(2, colorStart);
}
String colorStop = entity.getColorStop();
if (colorStop != null) {
stmt.bindString(3, colorStop);
}
String fontColor = entity.getFontColor();
if (fontColor != null) {
stmt.bindString(4, fontColor);
}
String androidColor = entity.getAndroidColor();
if (androidColor != null) {
stmt.bindString(5, androidColor);
}
String androidFontColor = entity.getAndroidFontColor();
if (androidFontColor != null) {
stmt.bindString(6, androidFontColor);
}
String createTime = entity.getCreateTime();
if (createTime != null) {
stmt.bindString(7, createTime);
}
String editTime = entity.getEditTime();
if (editTime != null) {
stmt.bindString(8, editTime);
}
}
@Override
protected final void bindValues(SQLiteStatement stmt, ColorBean entity) {
stmt.clearBindings();
stmt.bindLong(1, entity.getColorId());
String colorStart = entity.getColorStart();
if (colorStart != null) {
stmt.bindString(2, colorStart);
}
String colorStop = entity.getColorStop();
if (colorStop != null) {
stmt.bindString(3, colorStop);
}
String fontColor = entity.getFontColor();
if (fontColor != null) {
stmt.bindString(4, fontColor);
}
String androidColor = entity.getAndroidColor();
if (androidColor != null) {
stmt.bindString(5, androidColor);
}
String androidFontColor = entity.getAndroidFontColor();
if (androidFontColor != null) {
stmt.bindString(6, androidFontColor);
}
String createTime = entity.getCreateTime();
if (createTime != null) {
stmt.bindString(7, createTime);
}
String editTime = entity.getEditTime();
if (editTime != null) {
stmt.bindString(8, editTime);
}
}
@Override
public Void readKey(Cursor cursor, int offset) {
return null;
}
@Override
public ColorBean readEntity(Cursor cursor, int offset) {
ColorBean entity = new ColorBean( //
cursor.getInt(offset + 0), // colorId
cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // colorStart
cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // colorStop
cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // fontColor
cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // androidColor
cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // androidFontColor
cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // createTime
cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7) // editTime
);
return entity;
}
@Override
public void readEntity(Cursor cursor, ColorBean entity, int offset) {
entity.setColorId(cursor.getInt(offset + 0));
entity.setColorStart(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
entity.setColorStop(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
entity.setFontColor(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
entity.setAndroidColor(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
entity.setAndroidFontColor(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
entity.setCreateTime(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6));
entity.setEditTime(cursor.isNull(offset + 7) ? null : cursor.getString(offset + 7));
}
@Override
protected final Void updateKeyAfterInsert(ColorBean entity, long rowId) {
// Unsupported or missing PK type
return null;
}
@Override
public Void getKey(ColorBean entity) {
return null;
}
@Override
public boolean hasKey(ColorBean entity) {
// TODO
return false;
}
@Override
protected final boolean isEntityUpdateable() {
return true;
}
}
...@@ -14,10 +14,10 @@ import org.greenrobot.greendao.identityscope.IdentityScopeType; ...@@ -14,10 +14,10 @@ import org.greenrobot.greendao.identityscope.IdentityScopeType;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/** /**
* Master of DAO (schema version 16): knows all DAOs. * Master of DAO (schema version 17): knows all DAOs.
*/ */
public class DaoMaster extends AbstractDaoMaster { public class DaoMaster extends AbstractDaoMaster {
public static final int SCHEMA_VERSION = 16; public static final int SCHEMA_VERSION = 17;
/** Creates underlying database table using DAOs. */ /** Creates underlying database table using DAOs. */
public static void createAllTables(Database db, boolean ifNotExists) { public static void createAllTables(Database db, boolean ifNotExists) {
......
...@@ -32,6 +32,7 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> { ...@@ -32,6 +32,7 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
public final static Property ValueDatetime = new Property(5, String.class, "valueDatetime", false, "VALUE_DATETIME"); public final static Property ValueDatetime = new Property(5, String.class, "valueDatetime", false, "VALUE_DATETIME");
public final static Property Remark = new Property(6, String.class, "remark", false, "REMARK"); public final static Property Remark = new Property(6, String.class, "remark", false, "REMARK");
public final static Property DataType = new Property(7, int.class, "dataType", false, "DATA_TYPE"); public final static Property DataType = new Property(7, int.class, "dataType", false, "DATA_TYPE");
public final static Property ShowName = new Property(8, String.class, "showName", false, "SHOW_NAME");
} }
...@@ -54,7 +55,8 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> { ...@@ -54,7 +55,8 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
"\"VALUE_CHAR\" TEXT," + // 4: valueChar "\"VALUE_CHAR\" TEXT," + // 4: valueChar
"\"VALUE_DATETIME\" TEXT," + // 5: valueDatetime "\"VALUE_DATETIME\" TEXT," + // 5: valueDatetime
"\"REMARK\" TEXT," + // 6: remark "\"REMARK\" TEXT," + // 6: remark
"\"DATA_TYPE\" INTEGER NOT NULL );"); // 7: dataType "\"DATA_TYPE\" INTEGER NOT NULL ," + // 7: dataType
"\"SHOW_NAME\" TEXT);"); // 8: showName
} }
/** Drops the underlying database table. */ /** Drops the underlying database table. */
...@@ -98,6 +100,11 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> { ...@@ -98,6 +100,11 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
stmt.bindString(7, remark); stmt.bindString(7, remark);
} }
stmt.bindLong(8, entity.getDataType()); stmt.bindLong(8, entity.getDataType());
String showName = entity.getShowName();
if (showName != null) {
stmt.bindString(9, showName);
}
} }
@Override @Override
...@@ -135,6 +142,11 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> { ...@@ -135,6 +142,11 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
stmt.bindString(7, remark); stmt.bindString(7, remark);
} }
stmt.bindLong(8, entity.getDataType()); stmt.bindLong(8, entity.getDataType());
String showName = entity.getShowName();
if (showName != null) {
stmt.bindString(9, showName);
}
} }
@Override @Override
...@@ -152,7 +164,8 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> { ...@@ -152,7 +164,8 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // valueChar cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // valueChar
cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // valueDatetime cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // valueDatetime
cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // remark cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6), // remark
cursor.getInt(offset + 7) // dataType cursor.getInt(offset + 7), // dataType
cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8) // showName
); );
return entity; return entity;
} }
...@@ -167,6 +180,7 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> { ...@@ -167,6 +180,7 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
entity.setValueDatetime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5)); entity.setValueDatetime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
entity.setRemark(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6)); entity.setRemark(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6));
entity.setDataType(cursor.getInt(offset + 7)); entity.setDataType(cursor.getInt(offset + 7));
entity.setShowName(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8));
} }
@Override @Override
......
package com.gingersoft.gsa.cloud.function;
import android.content.Context;
import android.util.DisplayMetrics;
import android.util.Log;
import com.jess.arms.utils.DeviceUtils;
import java.util.HashSet;
import java.util.Set;
import lombok.Data;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2018/8/11
* 修订历史:2018/8/11
* 描述:
*/
@Data
public class FunctionStyleUtils {
private int ID;
private String TableNumPadChar;
private String PLUNumPadChar;
private int FoodTypeFontSize = 12;
private int FoodFontSize = 12;
private String TableExt = "";
private int BaseDpi = 480;
private int BaseHeight = 1920;
private int BaseWidth = 1080;
private int ModFontSize = 14;
private int BillListFontSize = 12;
private int BillTotalFontSize = 12;
private int FoodlListFontSize = 18;
private int LayoutBillListHeight = 40;
private int LayoutQtyHeight = 40;
private int LayoutQuitHeight = 40;
private int LayoutFoodTypeHeight = 100;
private int FoodBtnHeight = 120;
private int ModBtnHeight = 75;
private int FoodTypeCol = 4;
private int FoodTypeRow = 1;
private int FoodCol = 4;
private int ModCol = 5;
private int DiscountCol = 5;
private int TableDirection;
private int RefreshTime = 1;
private String ShowTableType = "1,2,3,5";
private int servicecharge_tablemode;
private int servicecharge_tablemode_setting;
private int servicecharge_takeoutmode;
private int servicecharge_deliverymode;
private int servicecharge_pickupmode;
private int tableType = 1;
private boolean ServiceChargeIncludeItemDiscount;
private boolean BillDiscountIncludeServiceCharge;
private boolean Edit_Send;
private int ItemDecimals;
private int RoundingDecimal = 1;
private int Rounding;
private int SystemLanguage = 2;
private int OpenTableVipFrontColor = 1;
private int OpenTableVipBackColor = 2;
private int nowLanguageIndex = 1;
private String orderlanguage = "1,2,3";
private boolean MemberLoginCover = true;
private String LanageName = "中文,粵語,英文";
private int DataLanguage = 2;
private int AutoQuitTime = 600;
private int ModFunctionBarHeight = 60;
private int BottomBarHeight = 160;
private int ReportFontSize = 15;
private String ShopId = "";
private boolean OrderFunction_Discount;
private boolean OrderFunction_Transfer;
private boolean OrderFunction_Print;
private boolean MainFunction_Report;
private int printerServerReadTime = 10;
private boolean OrderFunction_VoidSentItem = false;
private boolean OrderFunction_ItemDiscount = false;
private boolean OrderFunction_ItemFoodMerge = false;
private boolean OrderFunction_FoodTableMode = true;
private boolean OrderFunction_FoodTemporay = true;
private boolean Order_InputPax = true;
private boolean Order_GetTables = true;
private int OrderOperButtonHeight = 40;
private int orderInfoHeight = 40;
private int orderInfoFontSize = 16;
private int OrderDataOperBtnWidth = 50;
private int OrderDataOperBtnHeight = 50;
private boolean BillTextScroll = true;
private int TableFunctionTopHeight = 100;
private int TableFunctionBottomHeight = 100;
private int TableFunctionFontSize = 20;
private int TableFunctionTopFontSize = 20;
private int TableFunctionBottomFontSize = 20;
private String Memberinfo = "MEM_MemberNo,MEM_Phone,MEM_NAME,MEM_Points";
private String MemberHttp = "http://m.ricepon.com:9090/member-web";
private boolean EnableErrorLog = true;
private boolean TableFunction_SplitTable = true;
private boolean TableFunction_FoodList = true;
private boolean TableFunction_OfflineOrder = true;
private boolean MainFunction_TableMode = true;
private boolean TableFunction_ScanBarcode = true;
private boolean OrderFunction_send = true;
private boolean TableFunction_PayBill = true;
private boolean OrderFunction_PrePay = true;
private int AutoOpen = 0;
private int OrderNumberShowSize = 20;
private int OrderNumberFontSize = 7;
private int OrderNumberChildShowSize = 20;
private int OrderNumberChildFontSize = 10;
/**
* 送單是否自動合併未送食品(只處理未有細項的食品)
*/
private boolean MergeSendFood = true;
/**
* 送單是否自動打印上菜纸
*/
private boolean AutoPrinterParper = true;
private Set<String> customizeSetting = new HashSet<>();
private int screen_w = 1080;
private int screen_h = 1920;
private int screen_density_dpi;
public void adjustSize(Context context, FunctionStyleUtils setting) {
DisplayMetrics metrics = DeviceUtils.getDisplayMetrics(context);
screen_w = metrics.widthPixels;
screen_h = metrics.heightPixels;
screen_density_dpi = metrics.densityDpi;
if (!setting.customizeSetting.contains("TableFunctionBottomHeight")) {
//计算高度/
setting.TableFunctionBottomHeight = (int) Math.ceil((float) setting.TableFunctionBottomHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("TableFunctionTopHeight")) {
//计算高度/
setting.TableFunctionTopHeight = (int) Math.ceil((float) setting.TableFunctionTopHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("OrderOperButtonHeight")) {
//计算高度/
setting.OrderOperButtonHeight = (int) Math.ceil((float) setting.OrderOperButtonHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("LayoutBillListHeight")) {
//计算高度/
setting.LayoutBillListHeight = (int) Math.ceil((float) setting.LayoutBillListHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("LayoutQtyHeight")) {
//计算高度/
setting.LayoutQtyHeight = (int) Math.ceil((float) setting.LayoutQtyHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("LayoutQuitHeight")) {
//计算高度/
setting.LayoutQuitHeight = (int) Math.ceil((float) setting.LayoutQuitHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("LayoutFoodTypeHeight")) {
//计算高度/
setting.LayoutFoodTypeHeight = (int) Math.ceil((float) setting.LayoutFoodTypeHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("FoodBtnHeight")) {
//计算高度/
Log.e("初始FoodBtnHeight", FoodBtnHeight + "");
setting.FoodBtnHeight = (int) Math.ceil((float) setting.FoodBtnHeight / (float) setting.BaseHeight * (float) setting.screen_h);
Log.e("最后得出的FoodBtnHeight", setting.FoodBtnHeight + "");
}
if (!setting.customizeSetting.contains("ModBtnHeight")) {
//计算高度/
setting.ModBtnHeight = (int) Math.ceil((float) setting.ModBtnHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("ModFunctionBarHeight")) {
//计算高度/
setting.ModFunctionBarHeight = (int) Math.ceil((float) setting.ModFunctionBarHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("BottomBarHeight")) {
//计算高度/
setting.BottomBarHeight = (int) Math.ceil((float) setting.BottomBarHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
if (!setting.customizeSetting.contains("OrderDataOperBtnWidth")) {
//计算高度/
OrderDataOperBtnWidth = (int) Math.ceil((float) OrderDataOperBtnWidth / (float) BaseWidth * (float) screen_w);
}
if (!customizeSetting.contains("OrderDataOperBtnHeight")) {
//计算高度/
setting.OrderDataOperBtnHeight = (int) Math.ceil((float) setting.OrderDataOperBtnHeight / (float) setting.BaseHeight * (float) setting.screen_h);
}
float screen_scaledDensity = (float) setting.screen_density_dpi / 160;
float base_scaledDensity = (float) setting.BaseDpi / 160;
float rate = (float) (base_scaledDensity / screen_scaledDensity);
if (!setting.customizeSetting.contains("TableFunctionTopFontSize")) {
setting.TableFunctionTopFontSize = (int) Math.ceil((float) setting.TableFunctionTopFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);///base_scaledDensity*(float)privateClass.screen_scaledDensity);
}
if (!setting.customizeSetting.contains("TableFunctionBottomFontSize")) {
setting.TableFunctionBottomFontSize = (int) Math.ceil((float) setting.TableFunctionBottomFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
}
if (!setting.customizeSetting.contains("FoodTypeFontSize")) {
setting.FoodTypeFontSize = (int) Math.ceil((float) setting.FoodTypeFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
}
if (!setting.customizeSetting.contains("FoodFontSize")) {
setting.FoodFontSize = (int) Math.ceil((float) setting.FoodFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
}
if (!setting.customizeSetting.contains("ModFontSize")) {
setting.ModFontSize = (int) Math.ceil((float) setting.ModFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
}
if (!setting.customizeSetting.contains("BillTotalFontSize")) {
setting.BillTotalFontSize = (int) Math.ceil((float) setting.BillTotalFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
}
if (!setting.customizeSetting.contains("BillListFontSize")) {
Log.e("初始BillListFontSize", setting.BillListFontSize + "");
setting.BillListFontSize = (int) Math.ceil((float) setting.BillListFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
Log.e("最后得出的BillListFontSize", BillListFontSize + "");
}
if (!setting.customizeSetting.contains("FoodlListFontSize")) {
setting.FoodlListFontSize = (int) Math.ceil((float) setting.FoodlListFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
}
if (!setting.customizeSetting.contains("orderInfoFontSize")) {
Log.e("初始orderInfoFontSize", setting.orderInfoFontSize + "");
setting.orderInfoFontSize = (int) Math.ceil((float) setting.orderInfoFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
Log.e("最后得出的orderInfoFontSize", setting.orderInfoFontSize + "");
}
if (!setting.customizeSetting.contains("TableFunctionFontSize")) {
setting.TableFunctionFontSize = (int) Math.ceil((float) setting.TableFunctionFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
}
if (!setting.customizeSetting.contains("OrderNumberFontSize")) {
setting.OrderNumberFontSize = (int) Math.ceil((float) setting.OrderNumberFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
}
if (!setting.customizeSetting.contains("OrderNumberChildFontSize")) {
setting.OrderNumberChildFontSize = (int) Math.ceil((float) setting.OrderNumberChildFontSize / (float) setting.BaseWidth * (float) setting.screen_w * rate);
}
}
}
package com.gingersoft.gsa.cloud.ui.adapter;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.TextView;
import androidx.core.content.ContextCompat;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.base.R;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class ListSelectAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
private int textSize;
private int selectTextColor;
private int normalTextColor;
private Drawable normalBg;
private Drawable selectBg;
private int selectIndex = 0;
private int paddingLeft = 0;
private int paddingTop = 0;
private int paddingRight = 0;
private int paddingBottom = 0;
private Context mContext;
// public ListSelectAdapter(List<String> data) {
// super(layoutResId, data);
// }
public ListSelectAdapter(Context context, int layoutResId, @Nullable List<String> data) {
super(layoutResId, data);
this.mContext = context;
textSize = 16;
selectBg = ContextCompat.getDrawable(context, R.drawable.s_tran_twenty_blue);
selectTextColor = ContextCompat.getColor(context, R.color.other_order_details_sure_btn_color);
normalTextColor = ContextCompat.getColor(context, R.color.color_c9);
}
@Override
protected void convert(@NotNull BaseViewHolder baseViewHolder, String s) {
TextView title = baseViewHolder.getView(R.id.cb_select_title);
title.setText(s);
title.setTextSize(textSize);
title.setBackground(selectBg);
title.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
if (baseViewHolder.getAdapterPosition() == selectIndex) {
title.setBackground(selectBg);
title.setTextColor(selectTextColor);
} else {
title.setBackground(normalBg);
title.setTextColor(normalTextColor);
}
}
public ListSelectAdapter setSelectTextColor(int textColor) {
this.selectTextColor = textColor;
return this;
}
public ListSelectAdapter setNormalTextColor(int textColor) {
this.normalTextColor = textColor;
return this;
}
public ListSelectAdapter setTextSize(int textSize) {
this.textSize = textSize;
return this;
}
public ListSelectAdapter setNormalBg(Drawable bg) {
this.normalBg = bg;
return this;
}
public ListSelectAdapter setSelectBg(Drawable bg) {
this.selectBg = bg;
return this;
}
public ListSelectAdapter setNormalBg(int bg) {
return setNormalBg(ContextCompat.getDrawable(mContext, bg));
}
public ListSelectAdapter setSelectBg(int bg) {
return setSelectBg(ContextCompat.getDrawable(mContext, bg));
}
public ListSelectAdapter setDefaultSelect(int select) {
this.selectIndex = select;
return this;
}
public ListSelectAdapter setPadding(int paddingLeft, int paddingTop, int paddingRight, int paddingBottom) {
this.paddingLeft = paddingLeft;
this.paddingBottom = paddingBottom;
this.paddingTop = paddingTop;
this.paddingRight = paddingRight;
return this;
}
public ListSelectAdapter notifyAdapter() {
notifyDataSetChanged();
return this;
}
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/other_order_details_sure_btn_color" android:state_checked="true"/>
<item android:color="@color/color_66"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/tran_twenty_send_order_btn_bg_color" android:state_checked="true"/>
<item android:drawable="@color/color_ea"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/other_order_details_sure_btn_color" android:state_checked="true"/>
<item android:drawable="@drawable/shape_delivery_item_btn_normal"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cb_select_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
\ No newline at end of file
...@@ -21,13 +21,14 @@ ...@@ -21,13 +21,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0.15" android:layout_weight="0.15"
android:layout_gravity="bottom" android:layout_gravity="bottom"
tools:text="x1111111111111111111111111" tools:text="x11111111111111111000011111111"
android:gravity="right|center_vertical" /> android:gravity="right|center_vertical" />
<TextView <TextView
android:id="@+id/tv_food_price" android:id="@+id/tv_food_price"
style="@style/Print_text_style" style="@style/Print_text_style"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_weight="0.25"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom" android:layout_gravity="bottom"
android:layout_marginLeft="@dimen/dp_5" android:layout_marginLeft="@dimen/dp_5"
......
...@@ -467,7 +467,9 @@ ...@@ -467,7 +467,9 @@
<color name="color_3b">#3b3b3b</color> <color name="color_3b">#3b3b3b</color>
<color name="color_18">#181818</color> <color name="color_18">#181818</color>
<color name="color_e8">#e8e8e8</color> <color name="color_e8">#e8e8e8</color>
<color name="color_ea">#EAEAEA</color>
<color name="tran_twenty_send_order_btn_bg_color">#331196DB</color>
<color name="tran_fifty_order_state0_color">#7F009788</color> <color name="tran_fifty_order_state0_color">#7F009788</color>
<!-- 待確認背景色--> <!-- 待確認背景色-->
<color name="order_state0_color">#009788</color> <color name="order_state0_color">#009788</color>
......
package com.gingersoft.gsa.delivery_pick_mode.mvp.contract; package com.gingersoft.gsa.delivery_pick_mode.mvp.contract;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.delivery_pick_mode.mvp.model.MemberAddressInfoBean;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
import java.util.Map; import java.util.Map;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.RequestBody;
/** /**
...@@ -22,7 +25,7 @@ import io.reactivex.Observable; ...@@ -22,7 +25,7 @@ import io.reactivex.Observable;
*/ */
public interface SendOrderContract { public interface SendOrderContract {
interface View extends IView { interface View extends IView {
void loadMemberInfo(MemberAddressInfoBean.DataBean data);
} }
interface Model extends IModel { interface Model extends IModel {
...@@ -30,5 +33,9 @@ public interface SendOrderContract { ...@@ -30,5 +33,9 @@ public interface SendOrderContract {
* 獲取配送信息 * 獲取配送信息
*/ */
Observable<String> getConfirmTakeawayOrderData(Map<String, Object> map); Observable<String> getConfirmTakeawayOrderData(Map<String, Object> map);
Observable<BaseResult> submitOrder(RequestBody requestBody);
Observable<MemberAddressInfoBean> getMemberAddressInfo(String phone);
} }
} }
package com.gingersoft.gsa.delivery_pick_mode.mvp.model;
public class MemberAddressInfoBean {
/**
* success : true
* sysTime : 1602675733309
* data : {"id":57172,"receiver":"王","sex":1,"phone":"18384840551","addressDetail":"455","currentAddress":"美丽华商场","isDefault":1}
*/
private boolean success;
private long sysTime;
private String errorMsg;
private DataBean data;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public long getSysTime() {
return sysTime;
}
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
public static class DataBean {
/**
* id : 57172
* receiver : 王
* sex : 1
* phone : 18384840551
* addressDetail : 455
* currentAddress : 美丽华商场
* isDefault : 1
*/
private int id;
private String receiver;
private int sex;
private String phone;
private String addressDetail;
private String currentAddress;
private int isDefault;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddressDetail() {
return addressDetail;
}
public void setAddressDetail(String addressDetail) {
this.addressDetail = addressDetail;
}
public String getCurrentAddress() {
return currentAddress;
}
public void setCurrentAddress(String currentAddress) {
this.currentAddress = currentAddress;
}
public int getIsDefault() {
return isDefault;
}
public void setIsDefault(int isDefault) {
this.isDefault = isDefault;
}
}
}
...@@ -2,6 +2,7 @@ package com.gingersoft.gsa.delivery_pick_mode.mvp.model; ...@@ -2,6 +2,7 @@ package com.gingersoft.gsa.delivery_pick_mode.mvp.model;
import android.app.Application; import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.delivery_pick_mode.mvp.contract.SendOrderContract; import com.gingersoft.gsa.delivery_pick_mode.mvp.contract.SendOrderContract;
import com.gingersoft.gsa.delivery_pick_mode.mvp.server.SendOrderServer; import com.gingersoft.gsa.delivery_pick_mode.mvp.server.SendOrderServer;
import com.google.gson.Gson; import com.google.gson.Gson;
...@@ -14,6 +15,7 @@ import java.util.Map; ...@@ -14,6 +15,7 @@ import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.RequestBody;
/** /**
...@@ -52,4 +54,14 @@ public class SendOrderModel extends BaseModel implements SendOrderContract.Model ...@@ -52,4 +54,14 @@ public class SendOrderModel extends BaseModel implements SendOrderContract.Model
public Observable<String> getConfirmTakeawayOrderData(Map<String, Object> map) { public Observable<String> getConfirmTakeawayOrderData(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SendOrderServer.class).getConfirmTakeawayOrderData(map); return mRepositoryManager.obtainRetrofitService(SendOrderServer.class).getConfirmTakeawayOrderData(map);
} }
@Override
public Observable<BaseResult> submitOrder(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(SendOrderServer.class).submitOrder(requestBody);
}
@Override
public Observable<MemberAddressInfoBean> getMemberAddressInfo(String phone) {
return mRepositoryManager.obtainRetrofitService(SendOrderServer.class).getMemberAddressInfo(phone);
}
} }
\ No newline at end of file
...@@ -2,22 +2,36 @@ package com.gingersoft.gsa.delivery_pick_mode.mvp.presenter; ...@@ -2,22 +2,36 @@ package com.gingersoft.gsa.delivery_pick_mode.mvp.presenter;
import android.app.Application; import android.app.Application;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.delivery_pick_mode.mvp.contract.SendOrderContract; import com.gingersoft.gsa.delivery_pick_mode.mvp.contract.SendOrderContract;
import com.gingersoft.gsa.delivery_pick_mode.mvp.model.MemberAddressInfoBean;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader; import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager; import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter; import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils; import com.jess.arms.utils.RxLifecycleUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
/** /**
...@@ -79,7 +93,149 @@ public class SendOrderPresenter extends BasePresenter<SendOrderContract.Model, S ...@@ -79,7 +93,149 @@ public class SendOrderPresenter extends BasePresenter<SendOrderContract.Model, S
public void onNext(String s) { public void onNext(String s) {
// https://hktest.ricepon.com:64377/member-web/api/member/getAddressAndResSetting?&pageSize=15&shopId=26&isdefault=1&pageIndex=1&price=0&memberId=515 // https://hktest.ricepon.com:64377/member-web/api/member/getAddressAndResSetting?&pageSize=15&shopId=26&isdefault=1&pageIndex=1&price=0&memberId=515
} }
@Override
public void onError(Throwable t) {
super.onError(t);
}
});
}
public void getMemberAddressInfo(String phone) {
mModel.getMemberAddressInfo(phone)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("查詢會員信息..."))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<MemberAddressInfoBean>(mErrorHandler) {
@Override
public void onNext(@NonNull MemberAddressInfoBean info) {
if (info != null) {
if (info.isSuccess() && info.getData() != null) {
mRootView.loadMemberInfo(info.getData());
} else if (TextUtil.isNotEmptyOrNullOrUndefined(info.getErrorMsg())) {
mRootView.showMessage(info.getErrorMsg());
} else {
mRootView.showMessage("會員信息獲取失敗");
}
} else {
mRootView.showMessage("會員信息獲取失敗");
}
}
}); });
} }
public void submitOrder(String name, String phone, String address) {
RequestBody requestBody = new FormBody.Builder()
.add("order", getOrderJson(name, phone, address))
.add("apiversion", "1")
.build();
mModel.submitOrder(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("正在創建訂單..."))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull BaseResult info) {
}
@Override
public void onError(Throwable t) {
super.onError(t);
}
});
}
/**
* 订单提交
*/
private String getOrderJson(String name, String phone, String address) {
JSONObject json;
json = new JSONObject();
try {
json.put("shopId", GsaCloudApplication.getRestaurantId());
json.put("phone", phone);
json.put("replenishmentType", "1");
json.put("transportationType", "3");
json.put("memberId", GsaCloudApplication.getMemberId());
json.put("addressDetail", address);
json.put("orderRemark", "");
json.put("payType", 1);
//原价
json.put("originalAmount", MyOrderManage.getInstance().getWholeAmount());
json.put("orderType", 8);
//实际总价
json.put("totalPrice", MyOrderManage.getInstance().getTotalAmount());
// json.put("waimaiSendTime", waimaiSendTime);//送单时间
JSONArray array = new JSONArray();
List<OrderDetail> orderDetails = MyOrderManage.getInstance().getOrderFoodList();
for (int i = 0; i < orderDetails.size(); i++) {
OrderDetail orderDetail = orderDetails.get(i);
JSONObject food = getFoodJson(orderDetail);
if (i + 1 < orderDetails.size() && orderDetails.get(i + 1).getParentId() == orderDetail.getId()
&& orderDetails.get(i + 1).getItemType() != 0) {
//如果下一個食品的父級id是當前食品的id
JSONArray foodArray = new JSONArray();
long foodId = orderDetail.getId();
for (int j = i + 1; j < orderDetails.size(); j++) {
OrderDetail secondOrderDetail = orderDetails.get(j);
JSONObject secondFood = getFoodJson(secondOrderDetail);
JSONArray secondArray = new JSONArray();
if (orderDetails.get(j).getParentId() == foodId) {
secondArray.put(secondFood);
long secondFoodId = secondOrderDetail.getId();
if (j + 1 < orderDetails.size() && orderDetails.get(j + 1).getParentId() == secondOrderDetail.getId()) {
for (int k = j + 1; k < orderDetails.size(); k++) {
JSONObject thirdFood = getFoodJson(secondOrderDetail);
JSONArray thirdArray = new JSONArray();
if (orderDetails.get(k).getParentId() == secondFoodId) {
thirdArray.put(getFoodJson(orderDetails.get(k)));
} else {
thirdFood.put("itemDetail", thirdArray);
secondArray.put(thirdFood);
i = k;
break;
}
}
}
} else {
secondFood.put("itemDetail", secondArray);
foodArray.put(secondFood);
i = j;
break;
}
}
} else {
array.put(food);
}
}
json.put("foods", array);
} catch (JSONException e) {
e.printStackTrace();
}
return json.toString();
}
private JSONObject getFoodJson(OrderDetail orderDetail) {
JSONObject object = new JSONObject();
try {
object.put("posFid", orderDetail.getParentId());
object.put("productId", orderDetail.getId());
object.put("productName", orderDetail.getProductName());
object.put("number", orderDetail.getNumber());
object.put("price", orderDetail.getPrice());
object.put("lunchboxPrice", orderDetail.getLunchboxPrice());
} catch (JSONException e) {
e.printStackTrace();
}
return object;
}
} }
package com.gingersoft.gsa.delivery_pick_mode.mvp.server; package com.gingersoft.gsa.delivery_pick_mode.mvp.server;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.delivery_pick_mode.mvp.model.MemberAddressInfoBean;
import java.util.Map; import java.util.Map;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager; import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.Headers; import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.QueryMap; import retrofit2.http.QueryMap;
public interface SendOrderServer { public interface SendOrderServer {
...@@ -14,4 +21,12 @@ public interface SendOrderServer { ...@@ -14,4 +21,12 @@ public interface SendOrderServer {
@GET("member/getAddressAndResSetting?" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("member/getAddressAndResSetting?" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<String> getConfirmTakeawayOrderData(@QueryMap Map<String, Object> map); Observable<String> getConfirmTakeawayOrderData(@QueryMap Map<String, Object> map);
@Headers({"Domain-Name: update_version"})
@POST("order/addOrder2" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> submitOrder(@Body RequestBody requestBody);
@Headers({"Domain-Name: ricepon_member"})
@GET("member/getMemberAddressInfo" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<MemberAddressInfoBean> getMemberAddressInfo(@Query("phone") String phone);
} }
...@@ -5,27 +5,36 @@ import android.os.Bundle; ...@@ -5,27 +5,36 @@ import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimePickerUtils;
import com.gingersoft.gsa.cloud.ui.adapter.ListSelectAdapter;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gingersoft.gsa.delivery_pick_mode.R; import com.gingersoft.gsa.delivery_pick_mode.R;
import com.gingersoft.gsa.delivery_pick_mode.R2; import com.gingersoft.gsa.delivery_pick_mode.R2;
import com.gingersoft.gsa.delivery_pick_mode.di.component.DaggerSendOrderComponent; import com.gingersoft.gsa.delivery_pick_mode.di.component.DaggerSendOrderComponent;
import com.gingersoft.gsa.delivery_pick_mode.mvp.contract.SendOrderContract; import com.gingersoft.gsa.delivery_pick_mode.mvp.contract.SendOrderContract;
import com.gingersoft.gsa.delivery_pick_mode.mvp.model.MemberAddressInfoBean;
import com.gingersoft.gsa.delivery_pick_mode.mvp.presenter.SendOrderPresenter; import com.gingersoft.gsa.delivery_pick_mode.mvp.presenter.SendOrderPresenter;
import com.gingersoft.gsa.delivery_pick_mode.ui.adapter.DeliveryAdapter;
import com.jess.arms.base.BaseActivity; import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent; import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.widget.QMUITopBar; import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar;
import java.util.List; import java.util.List;
import butterknife.BindView; import butterknife.BindView;
...@@ -38,8 +47,9 @@ import static com.jess.arms.utils.Preconditions.checkNotNull; ...@@ -38,8 +47,9 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
*/ */
public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implements SendOrderContract.View, View.OnClickListener { public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implements SendOrderContract.View, View.OnClickListener {
@BindView(R2.id.send_order_top_bar) @BindView(R2.id.send_order_top_bar)
QMUITopBar topBar; QMUITopBar sendOrderTopBar;
@BindView(R2.id.rv_send_order_foods) @BindView(R2.id.rv_send_order_foods)
RecyclerView rvSendOrderFoods; RecyclerView rvSendOrderFoods;
@BindView(R2.id.rv_send_order_bills) @BindView(R2.id.rv_send_order_bills)
...@@ -60,30 +70,36 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen ...@@ -60,30 +70,36 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen
EditText edSendOrderAddress; EditText edSendOrderAddress;
@BindView(R2.id.iv_select_address_arrow) @BindView(R2.id.iv_select_address_arrow)
ImageView ivSelectAddressArrow; ImageView ivSelectAddressArrow;
@BindView(R2.id.tv_send_order_label_text)
TextView tvSendOrderLabelText;
@BindView(R2.id.rv_send_order_label)
RecyclerView rvSendOrderLabel;
@BindView(R2.id.tv_send_order_distribution_mode_text) @BindView(R2.id.tv_send_order_distribution_mode_text)
TextView tvSendOrderDistributionModeText; TextView tvSendOrderDistributionModeText;
@BindView(R2.id.rv_send_order_distribution_mode) @BindView(R2.id.rg_send_order_distribution_mode)
RecyclerView rvSendOrderDistributionMode; RadioGroup rgSendOrderDistributionMode;
@BindView(R2.id.tv_send_order_pay_mode_text) @BindView(R2.id.tv_send_order_pay_mode_text)
TextView tvSendOrderPayModeText; TextView tvSendOrderPayModeText;
@BindView(R2.id.rv_send_order_pay_mode) @BindView(R2.id.rg_send_order_pay_mode)
RecyclerView rvSendOrderPayMode; RadioGroup rgSendOrderPayMode;
@BindView(R2.id.tv_send_order_delivery_time_text) @BindView(R2.id.tv_send_order_delivery_time_text)
TextView tvSendOrderDeliveryTimeText; TextView tvSendOrderDeliveryTimeText;
@BindView(R2.id.tv_delivery_time_type) @BindView(R2.id.tv_delivery_time_type)
TextView tvDeliveryTimeType; TextView tvDeliveryTimeType;
@BindView(R2.id.iv_select_delivery_time)
ImageView ivSelectDeliveryTime;
@BindView(R2.id.tv_delivery_time_hour)
TextView tvDeliveryTimeHour;
@BindView(R2.id.tv_delivery_time_colon)
TextView tvDeliveryTimeColon;
@BindView(R2.id.tv_delivery_time_min)
TextView tvDeliveryTimeMin;
@BindView(R2.id.tv_continue_add_food) @BindView(R2.id.tv_continue_add_food)
TextView tvContinueAddFood; TextView tvContinueAddFood;
@BindView(R2.id.tv_confirm_order) @BindView(R2.id.tv_confirm_order)
TextView tvConfirmOrder; TextView tvConfirmOrder;
@BindView(R2.id.layout_btn)
private List<String> labelStrings = Arrays.asList("家", "公司", "學校", "醫院"); LinearLayout layoutBtn;
private List<String> distributionModes = Arrays.asList("本店配送", "物流配送"); @BindView(R2.id.view_delivery_time_mode_line)
private List<String> payTypes = Arrays.asList("貨到付款", "立即支付"); View deliveryTimeLine;
@BindView(R2.id.group_time)
Group timeGroup;
@Override @Override
public void setupActivityComponent(@NonNull AppComponent appComponent) { public void setupActivityComponent(@NonNull AppComponent appComponent) {
...@@ -102,17 +118,7 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen ...@@ -102,17 +118,7 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen
@Override @Override
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
mPresenter.getConfirmTakeawayOrderData();
DeliveryAdapter deliveryAdapter = new DeliveryAdapter(labelStrings);
rvSendOrderLabel.setLayoutManager(new GridLayoutManager(mContext, 4));
rvSendOrderLabel.setAdapter(deliveryAdapter);
rvSendOrderDistributionMode.setLayoutManager(new GridLayoutManager(mContext, 3));
rvSendOrderDistributionMode.setAdapter(new DeliveryAdapter(distributionModes));
rvSendOrderPayMode.setLayoutManager(new GridLayoutManager(mContext, 3));
rvSendOrderPayMode.setAdapter(new DeliveryAdapter(payTypes));
} }
@Override @Override
...@@ -122,9 +128,9 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen ...@@ -122,9 +128,9 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen
@Override @Override
public void initTopBar() { public void initTopBar() {
topBar.setTitle("送單信息"); sendOrderTopBar.setTitle("送單信息");
topBar.setBackgroundColor(ContextCompat.getColor(this, R.color.theme_color)); sendOrderTopBar.setBackgroundColor(ContextCompat.getColor(this, R.color.theme_color));
topBar.addLeftImageButton(R.drawable.icon_return, R.id.iv_left_back).setOnClickListener(v -> killMyself()); sendOrderTopBar.addLeftImageButton(R.drawable.icon_return, R.id.iv_left_back).setOnClickListener(v -> killMyself());
} }
@Override @Override
...@@ -173,12 +179,88 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen ...@@ -173,12 +179,88 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen
finish(); finish();
} }
@OnClick() private QMUIPopup popup;
private ListSelectAdapter listSelectAdapter;
private int select = 0;
private List<String> deliveryTimes = Arrays.asList("現在送出", "其他時間");
@OnClick({R2.id.iv_send_order_search, R2.id.tv_delivery_time_hour, R2.id.tv_delivery_time_min, R2.id.tv_delivery_time_type, R2.id.iv_select_delivery_time, R2.id.tv_confirm_order})
@Override @Override
public void onClick(View v) { public void onClick(View v) {
int viewId = v.getId(); int viewId = v.getId();
switch (viewId){ if (viewId == R.id.tv_delivery_time_type || viewId == R.id.iv_select_delivery_time) {
switchDeliveryTimeMode();
} else if (viewId == R.id.tv_confirm_order) {
if (TextUtil.isNotEmptyOrNullOrUndefined(edSendOrderName)) {
if (TextUtil.isNotEmptyOrNullOrUndefined(edSendOrderPhone)) {
if (TextUtil.isNotEmptyOrNullOrUndefined(edSendOrderAddress)) {
mPresenter.submitOrder(edSendOrderName.getText().toString(),
edSendOrderPhone.getText().toString(),
edSendOrderAddress.getText().toString());
} else {
showMessage("請輸入送貨地址");
}
} else {
showMessage("請輸入顧客電話");
}
} else {
showMessage("請輸入顧客姓名");
}
} else if (viewId == R.id.tv_delivery_time_hour || viewId == R.id.tv_delivery_time_min) {
Calendar startTime = Calendar.getInstance();
TimePickerUtils.showTimePicker(mContext, startTime, (date, v1) -> {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
tvDeliveryTimeHour.setText(calendar.get(Calendar.HOUR));
tvDeliveryTimeMin.setText(calendar.get(Calendar.MINUTE));
});
} else if (viewId == R.id.iv_send_order_search) {
//搜索會員信息
if (TextUtil.isNotEmptyOrNullOrUndefined(edSendOrderPhone)) {
mPresenter.getMemberAddressInfo(edSendOrderPhone.getText().toString());
} else {
showMessage("請輸入顧客電話");
}
} }
} }
private void switchDeliveryTimeMode() {
if (popup == null) {
//切換時間選擇
View view = View.inflate(mContext, R.layout.recyclerview, null);
RecyclerView recyclerView = view.findViewById(R.id.ryview);
recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
listSelectAdapter = new ListSelectAdapter(mContext, R.layout.item_list_string_select, deliveryTimes)
.setDefaultSelect(select)
.setPadding(30, 24, 30, 24)
.setSelectBg(R.color.tran_twenty_send_order_btn_bg_color)
.setNormalBg(R.color.white)
.notifyAdapter();
listSelectAdapter.setOnItemClickListener((adapter, view1, position) -> {
select = position;
popup.dismiss();
tvDeliveryTimeType.setText(deliveryTimes.get(position));
timeGroup.setVisibility(position == 0 ? View.GONE : View.VISIBLE);
});
recyclerView.setAdapter(listSelectAdapter);
popup = QMUIPopups.popup(mContext)
.preferredDirection(QMUIPopup.DIRECTION_BOTTOM)
.view(view)
.arrow(false)
.offsetYIfTop(0)
.radius(0)
.animStyle(QMUIPopup.ANIM_AUTO)
.show(deliveryTimeLine);
} else {
listSelectAdapter.setDefaultSelect(select).notifyAdapter();
popup.show(deliveryTimeLine);
}
}
@Override
public void loadMemberInfo(MemberAddressInfoBean.DataBean data) {
edSendOrderName.setText(data.getReceiver());
edSendOrderPhone.setText(data.getPhone().toString());
edSendOrderAddress.setText(data.getCurrentAddress() + data.getAddressDetail());
}
} }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_delivery_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/shape_delivery_item_btn_normal"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/dp_5"
android:layout_marginLeft="@dimen/dp_2"
android:layout_marginRight="@dimen/dp_2">
<TextView
android:id="@+id/tv_delivery_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_c8"
android:textSize="@dimen/dp_17" />
</LinearLayout>
\ No newline at end of file
...@@ -44,79 +44,91 @@ ...@@ -44,79 +44,91 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/layout_btn" android:layout_above="@id/layout_btn"
android:layout_below="@id/rv_send_order_bills" android:layout_below="@id/rv_send_order_bills"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/dp_10" android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10" android:paddingRight="@dimen/dp_10"
app:layout_constraintTop_toBottomOf="@id/rv_send_order_bills"> app:layout_constraintTop_toBottomOf="@id/rv_send_order_bills">
<TextView <TextView
android:id="@+id/tv_send_order_name_text" android:id="@+id/tv_send_order_phone_text"
style="@style/otherOrderSendOrder_textStyle" style="@style/otherOrderSendOrder_textStyle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/customer_name" android:text="@string/customer_phone"
app:layout_constraintBottom_toBottomOf="@id/ed_send_order_name" app:layout_constraintBottom_toBottomOf="@id/ed_send_order_name"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@id/ed_send_order_name" /> app:layout_constraintTop_toTopOf="@id/ed_send_order_name" />
<EditText <EditText
android:id="@+id/ed_send_order_name" android:id="@+id/ed_send_order_phone"
style="@style/otherOrderSendOrder_textStyle" style="@style/otherOrderSendOrder_textStyle"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:gravity="right" android:gravity="right"
android:hint="@string/please_input_name_or_select_members" android:hint="@string/please_input_phone"
android:inputType="text" android:inputType="phone"
android:labelFor="@id/tv_send_order_name_text" android:labelFor="@id/tv_send_order_name_text"
android:padding="@dimen/edit_padding" android:padding="@dimen/edit_padding"
app:layout_constraintLeft_toRightOf="@id/tv_send_order_name_text" app:layout_constraintLeft_toRightOf="@id/tv_send_order_name_text"
app:layout_constraintRight_toLeftOf="@id/iv_select_member_arrow" app:layout_constraintRight_toLeftOf="@id/iv_send_order_search"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<ImageView <ImageView
android:id="@+id/iv_select_member_arrow" android:id="@+id/iv_send_order_search"
android:layout_width="wrap_content" android:layout_width="@dimen/dp_40"
android:layout_height="0dp" android:layout_height="0dp"
android:src="@drawable/ic_black_next_arrow" android:padding="@dimen/dp_10"
app:layout_constraintBottom_toBottomOf="@id/ed_send_order_name" android:src="@drawable/ic_search"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintBottom_toBottomOf="@id/ed_send_order_phone"
app:layout_constraintTop_toTopOf="@id/ed_send_order_name" /> app:layout_constraintLeft_toRightOf="@id/ed_send_order_phone"
<View
android:layout_width="0dp"
android:layout_height="@dimen/dp_1"
android:background="@color/color_ccc"
app:layout_constraintLeft_toLeftOf="@id/ed_send_order_name"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/ed_send_order_name" /> app:layout_constraintTop_toTopOf="@id/ed_send_order_phone" />
<TextView <TextView
android:id="@+id/tv_send_order_phone_text" android:id="@+id/tv_send_order_name_text"
style="@style/otherOrderSendOrder_textStyle" style="@style/otherOrderSendOrder_textStyle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/customer_phone" android:text="@string/customer_name"
app:layout_constraintBottom_toBottomOf="@id/ed_send_order_phone" app:layout_constraintBottom_toBottomOf="@id/ed_send_order_phone"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@id/ed_send_order_phone" /> app:layout_constraintTop_toTopOf="@id/ed_send_order_phone" />
<EditText <EditText
android:id="@+id/ed_send_order_phone" android:id="@+id/ed_send_order_name"
style="@style/otherOrderSendOrder_textStyle" style="@style/otherOrderSendOrder_textStyle"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:gravity="right" android:gravity="right"
android:hint="@string/please_input_phone" android:hint="@string/please_input_name_or_select_members"
android:inputType="phone" android:inputType="text"
android:labelFor="@id/tv_send_order_name_text" android:labelFor="@id/tv_send_order_name_text"
android:padding="@dimen/edit_padding" android:padding="@dimen/edit_padding"
app:layout_constraintLeft_toRightOf="@id/tv_send_order_phone_text" app:layout_constraintLeft_toRightOf="@id/tv_send_order_name_text"
app:layout_constraintRight_toLeftOf="@id/iv_select_member_arrow" app:layout_constraintRight_toLeftOf="@id/iv_select_member_arrow"
app:layout_constraintTop_toBottomOf="@id/ed_send_order_phone" />
<ImageView
android:id="@+id/iv_select_member_arrow"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:src="@drawable/ic_black_next_arrow"
app:layout_constraintBottom_toBottomOf="@id/ed_send_order_name"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/ed_send_order_name" />
<View
android:layout_width="0dp"
android:layout_height="@dimen/dp_1"
android:background="@color/color_ccc"
app:layout_constraintLeft_toLeftOf="@id/ed_send_order_name"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/ed_send_order_name" /> app:layout_constraintTop_toBottomOf="@id/ed_send_order_name" />
<View <View
...@@ -151,7 +163,7 @@ ...@@ -151,7 +163,7 @@
android:padding="@dimen/edit_padding" android:padding="@dimen/edit_padding"
app:layout_constraintLeft_toRightOf="@id/tv_send_order_name_text" app:layout_constraintLeft_toRightOf="@id/tv_send_order_name_text"
app:layout_constraintRight_toLeftOf="@id/iv_select_member_arrow" app:layout_constraintRight_toLeftOf="@id/iv_select_member_arrow"
app:layout_constraintTop_toBottomOf="@id/ed_send_order_phone" /> app:layout_constraintTop_toBottomOf="@id/ed_send_order_name" />
<ImageView <ImageView
android:id="@+id/iv_select_address_arrow" android:id="@+id/iv_select_address_arrow"
...@@ -171,40 +183,55 @@ ...@@ -171,40 +183,55 @@
app:layout_constraintTop_toBottomOf="@id/ed_send_order_address" /> app:layout_constraintTop_toBottomOf="@id/ed_send_order_address" />
<TextView <TextView
android:id="@+id/tv_send_order_label_text" android:id="@+id/tv_send_order_distribution_mode_text"
style="@style/otherOrderSendOrder_textStyle" style="@style/otherOrderSendOrder_textStyle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/label" android:text="@string/distribution_mode"
app:layout_constraintBottom_toBottomOf="@id/rv_send_order_label" app:layout_constraintBottom_toBottomOf="@id/rg_send_order_distribution_mode"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@id/rv_send_order_label" /> app:layout_constraintTop_toTopOf="@id/rg_send_order_distribution_mode" />
<androidx.recyclerview.widget.RecyclerView <RadioGroup
android:id="@+id/rv_send_order_label" android:id="@+id/rg_send_order_distribution_mode"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16"
android:orientation="horizontal"
app:layout_constraintLeft_toLeftOf="@id/ed_send_order_address" app:layout_constraintLeft_toLeftOf="@id/ed_send_order_address"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/ed_send_order_address" /> app:layout_constraintTop_toBottomOf="@id/ed_send_order_address">
<TextView <RadioButton
android:id="@+id/tv_send_order_distribution_mode_text" android:id="@+id/rb_delivery_shop"
style="@style/otherOrderSendOrder_textStyle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/distribution_mode" android:layout_marginRight="@dimen/dp_9"
app:layout_constraintBottom_toBottomOf="@id/rv_send_order_distribution_mode" android:background="@drawable/s_tran_twenty_blue"
app:layout_constraintLeft_toLeftOf="parent" android:button="@null"
app:layout_constraintTop_toTopOf="@id/rv_send_order_distribution_mode" /> android:checked="true"
android:paddingLeft="@dimen/dp_13"
<androidx.recyclerview.widget.RecyclerView android:paddingTop="@dimen/dp_8"
android:id="@+id/rv_send_order_distribution_mode" android:paddingRight="@dimen/dp_13"
android:layout_width="0dp" android:paddingBottom="@dimen/dp_8"
android:text="@string/delivery_shop"
android:textColor="@color/s_send_order_radio"
android:textSize="@dimen/dp_16" />
<RadioButton
android:id="@+id/rb_logistics_distribution"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/rv_send_order_label" android:background="@drawable/s_tran_twenty_blue"
app:layout_constraintRight_toRightOf="parent" android:button="@null"
app:layout_constraintTop_toBottomOf="@id/rv_send_order_label" /> android:paddingLeft="@dimen/dp_13"
android:paddingTop="@dimen/dp_8"
android:paddingRight="@dimen/dp_13"
android:paddingBottom="@dimen/dp_8"
android:text="@string/logistics_distribution"
android:textColor="@color/s_send_order_radio"
android:textSize="@dimen/dp_16" />
</RadioGroup>
<TextView <TextView
android:id="@+id/tv_send_order_pay_mode_text" android:id="@+id/tv_send_order_pay_mode_text"
...@@ -212,17 +239,50 @@ ...@@ -212,17 +239,50 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/pay_mode" android:text="@string/pay_mode"
app:layout_constraintBottom_toBottomOf="@id/rv_send_order_pay_mode" app:layout_constraintBottom_toBottomOf="@id/rg_send_order_pay_mode"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@id/rv_send_order_pay_mode" /> app:layout_constraintTop_toTopOf="@id/rg_send_order_pay_mode" />
<androidx.recyclerview.widget.RecyclerView <RadioGroup
android:id="@+id/rv_send_order_pay_mode" android:id="@+id/rg_send_order_pay_mode"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/rv_send_order_distribution_mode" android:layout_marginTop="@dimen/dp_10"
android:orientation="horizontal"
app:layout_constraintLeft_toLeftOf="@id/rg_send_order_distribution_mode"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/rv_send_order_distribution_mode" /> app:layout_constraintTop_toBottomOf="@id/rg_send_order_distribution_mode">
<RadioButton
android:id="@+id/rb_new_order_cash_on_delivery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_9"
android:background="@drawable/s_tran_twenty_blue"
android:button="@null"
android:checked="true"
android:paddingLeft="@dimen/dp_13"
android:paddingTop="@dimen/dp_8"
android:paddingRight="@dimen/dp_13"
android:paddingBottom="@dimen/dp_8"
android:text="貨到付款"
android:textColor="@color/s_send_order_radio"
android:textSize="@dimen/dp_16" />
<RadioButton
android:id="@+id/rb_new_order_immediately_pay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/s_tran_twenty_blue"
android:button="@null"
android:paddingLeft="@dimen/dp_13"
android:paddingTop="@dimen/dp_8"
android:paddingRight="@dimen/dp_13"
android:paddingBottom="@dimen/dp_8"
android:text="立即支付"
android:textColor="@color/s_send_order_radio"
android:textSize="@dimen/dp_16" />
</RadioGroup>
<TextView <TextView
android:id="@+id/tv_send_order_delivery_time_text" android:id="@+id/tv_send_order_delivery_time_text"
...@@ -236,26 +296,100 @@ ...@@ -236,26 +296,100 @@
<TextView <TextView
android:id="@+id/tv_delivery_time_type" android:id="@+id/tv_delivery_time_type"
android:layout_width="0dp" android:layout_width="67dp"
android:layout_height="wrap_content" android:layout_height="25dp"
android:layout_marginLeft="@dimen/dp_5" android:layout_marginLeft="@dimen/dp_5"
android:layout_marginTop="@dimen/dp_10" android:layout_marginTop="@dimen/dp_16"
android:layout_marginRight="@dimen/dp_2"
android:layout_weight="1" android:layout_weight="1"
android:gravity="right" android:gravity="right"
android:text="盡快送達" android:paddingLeft="@dimen/dp_5"
android:text="現在送出"
android:textColor="@color/color_c9"
app:layout_constraintLeft_toRightOf="@id/tv_send_order_delivery_time_text" app:layout_constraintLeft_toRightOf="@id/tv_send_order_delivery_time_text"
app:layout_constraintRight_toLeftOf="@id/iv_delivery_time_type" app:layout_constraintTop_toBottomOf="@id/rg_send_order_pay_mode" />
app:layout_constraintTop_toBottomOf="@id/rv_send_order_pay_mode" />
<ImageView <ImageView
android:id="@+id/iv_delivery_time_type" android:id="@+id/iv_select_delivery_time"
android:layout_width="@dimen/dp_20"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_5"
android:src="@drawable/arrow_down_black"
app:layout_constraintBottom_toBottomOf="@id/tv_delivery_time_type"
app:layout_constraintLeft_toRightOf="@id/tv_delivery_time_type"
app:layout_constraintTop_toTopOf="@id/tv_delivery_time_type" />
<View
android:id="@+id/view_delivery_time_mode_line"
android:layout_width="0dp"
android:layout_height="@dimen/dp_1"
android:layout_marginTop="@dimen/dp_10"
android:background="@color/color_ccc"
app:layout_constraintLeft_toLeftOf="@id/tv_delivery_time_type"
app:layout_constraintRight_toRightOf="@id/iv_select_delivery_time"
app:layout_constraintTop_toBottomOf="@id/tv_delivery_time_type" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_time"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="0dp" android:layout_height="wrap_content"
android:src="@drawable/ic_black_next_arrow" android:visibility="gone"
app:constraint_referenced_ids="view_delivery_time_line,tv_delivery_time_min,tv_delivery_time_colon,tv_delivery_time_hour" />
<TextView
android:id="@+id/tv_delivery_time_hour"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_weight="1"
android:gravity="right"
android:text="00"
android:textColor="@color/color_c9"
app:layout_constraintBottom_toBottomOf="@id/tv_delivery_time_type"
app:layout_constraintLeft_toRightOf="@id/iv_select_delivery_time"
app:layout_constraintRight_toLeftOf="@id/tv_delivery_time_colon"
app:layout_constraintTop_toTopOf="@id/tv_delivery_time_type" />
<TextView
android:id="@+id/tv_delivery_time_colon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_15"
android:layout_marginRight="@dimen/dp_15"
android:layout_weight="1"
android:gravity="right"
android:paddingLeft="@dimen/dp_5"
android:text=":"
android:textColor="@color/color_c9"
app:layout_constraintBottom_toBottomOf="@id/tv_delivery_time_type" app:layout_constraintBottom_toBottomOf="@id/tv_delivery_time_type"
app:layout_constraintLeft_toRightOf="@id/tv_delivery_time_hour"
app:layout_constraintRight_toLeftOf="@id/tv_delivery_time_min"
app:layout_constraintTop_toTopOf="@id/tv_delivery_time_type" />
<TextView
android:id="@+id/tv_delivery_time_min"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_5"
android:layout_marginRight="@dimen/dp_2"
android:layout_weight="1"
android:gravity="left"
android:paddingLeft="@dimen/dp_5"
android:text="00"
android:textColor="@color/color_c9"
app:layout_constraintBottom_toBottomOf="@id/tv_delivery_time_type"
app:layout_constraintLeft_toRightOf="@id/tv_delivery_time_colon"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/tv_delivery_time_type" /> app:layout_constraintTop_toTopOf="@id/tv_delivery_time_type" />
<View
android:id="@+id/view_delivery_time_line"
android:layout_width="0dp"
android:layout_height="@dimen/dp_1"
android:background="@color/color_ccc"
app:layout_constraintBottom_toBottomOf="@id/view_delivery_time_mode_line"
app:layout_constraintLeft_toLeftOf="@id/tv_delivery_time_hour"
app:layout_constraintRight_toRightOf="@id/tv_delivery_time_min"
app:layout_constraintTop_toTopOf="@id/view_delivery_time_mode_line" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout <LinearLayout
...@@ -296,8 +430,6 @@ ...@@ -296,8 +430,6 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/tv_continue_add_food" app:layout_constraintLeft_toRightOf="@id/tv_continue_add_food"
app:layout_constraintRight_toRightOf="parent" /> app:layout_constraintRight_toRightOf="parent" />
</LinearLayout> </LinearLayout>
</RelativeLayout> </RelativeLayout>
</ScrollView> </ScrollView>
\ No newline at end of file
...@@ -12,5 +12,7 @@ ...@@ -12,5 +12,7 @@
<string name="distribution_mode">配送方式:</string> <string name="distribution_mode">配送方式:</string>
<string name="pay_mode">支付類型:</string> <string name="pay_mode">支付類型:</string>
<string name="delivery_time">配送時間:</string> <string name="delivery_time">配送時間:</string>
<string name="delivery_shop">本店派送</string>
<string name="logistics_distribution">物流配送</string>
</resources> </resources>
...@@ -8,6 +8,7 @@ import com.jess.arms.mvp.IView; ...@@ -8,6 +8,7 @@ import com.jess.arms.mvp.IView;
import java.util.List; import java.util.List;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.RequestBody;
public interface ExpandListContract { public interface ExpandListContract {
...@@ -19,5 +20,7 @@ public interface ExpandListContract { ...@@ -19,5 +20,7 @@ public interface ExpandListContract {
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel { interface Model extends IModel {
Observable<BaseResult> getExpandList(int restaurantId); Observable<BaseResult> getExpandList(int restaurantId);
Observable<BaseResult> updateExpandInfo(RequestBody requestBody);
} }
} }
...@@ -4,7 +4,6 @@ import android.app.Application; ...@@ -4,7 +4,6 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult; import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.main.mvp.contract.ExpandListContract; import com.gingersoft.gsa.cloud.main.mvp.contract.ExpandListContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.FunctionBean;
import com.gingersoft.gsa.cloud.main.mvp.model.service.ExpandListService; import com.gingersoft.gsa.cloud.main.mvp.model.service.ExpandListService;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
...@@ -14,6 +13,7 @@ import com.jess.arms.mvp.BaseModel; ...@@ -14,6 +13,7 @@ import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.RequestBody;
@ActivityScope @ActivityScope
...@@ -40,4 +40,9 @@ public class ExpandListModel extends BaseModel implements ExpandListContract.Mod ...@@ -40,4 +40,9 @@ public class ExpandListModel extends BaseModel implements ExpandListContract.Mod
public Observable<BaseResult> getExpandList(int restaurantId) { public Observable<BaseResult> getExpandList(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(ExpandListService.class).getExpandList(restaurantId); return mRepositoryManager.obtainRetrofitService(ExpandListService.class).getExpandList(restaurantId);
} }
@Override
public Observable<BaseResult> updateExpandInfo(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(ExpandListService.class).updateExpandInfo(requestBody);
}
} }
\ No newline at end of file
...@@ -4,11 +4,20 @@ import com.gingersoft.gsa.cloud.base.common.bean.BaseResult; ...@@ -4,11 +4,20 @@ import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager; import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query; import retrofit2.http.Query;
public interface ExpandListService { public interface ExpandListService {
@GET("restaurant/ext/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("restaurant/ext/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getExpandList(@Query("restaurantId") int restaurantId); Observable<BaseResult> getExpandList(@Query("restaurantId") int restaurantId);
@Headers({"Domain-Name: system_url"})
@POST("restaurantExt/batchUpdate" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> updateExpandInfo(@Body RequestBody requestBody);
} }
...@@ -5,6 +5,8 @@ import android.app.Application; ...@@ -5,6 +5,8 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult; import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils; import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.database.bean.ExpandInfo; import com.gingersoft.gsa.cloud.database.bean.ExpandInfo;
import com.gingersoft.gsa.cloud.main.mvp.contract.ExpandListContract; import com.gingersoft.gsa.cloud.main.mvp.contract.ExpandListContract;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
...@@ -21,6 +23,8 @@ import io.reactivex.android.schedulers.AndroidSchedulers; ...@@ -21,6 +23,8 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.MediaType;
import okhttp3.RequestBody;
@ActivityScope @ActivityScope
...@@ -63,11 +67,33 @@ public class ExpandListPresenter extends BasePresenter<ExpandListContract.Model, ...@@ -63,11 +67,33 @@ public class ExpandListPresenter extends BasePresenter<ExpandListContract.Model,
if (result.getData() != null) { if (result.getData() != null) {
List<ExpandInfo> expandInfoList = JsonUtils.parseArray(result.getData(), ExpandInfo.class); List<ExpandInfo> expandInfoList = JsonUtils.parseArray(result.getData(), ExpandInfo.class);
mRootView.loadExpandList(expandInfoList); mRootView.loadExpandList(expandInfoList);
}
}
}
});
}
public void updateExpandInfo(List<ExpandInfo> data){
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(data));
mModel.updateExpandInfo(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult result) {
if(TextUtil.isNotEmptyOrNullOrUndefined(result.getErrMsg())){
mRootView.showMessage(result.getErrMsg());
} }
if (result.isSuccess()) {
mRootView.killMyself();
} }
} }
}); });
} }
} }
...@@ -2,7 +2,6 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.adapter; ...@@ -2,7 +2,6 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.adapter;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.widget.EditText; import android.widget.EditText;
...@@ -18,7 +17,6 @@ import com.gingersoft.gsa.cloud.database.bean.ExpandInfo; ...@@ -18,7 +17,6 @@ import com.gingersoft.gsa.cloud.database.bean.ExpandInfo;
import com.gingersoft.gsa.cloud.main.R; import com.gingersoft.gsa.cloud.main.R;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException; import java.text.ParseException;
...@@ -28,7 +26,7 @@ import java.util.List; ...@@ -28,7 +26,7 @@ import java.util.List;
public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHolder> { public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHolder> {
public ExpandListAdapter(@Nullable List<ExpandInfo> data) { public ExpandListAdapter(List<ExpandInfo> data) {
super(R.layout.main_expand_item, data); super(R.layout.main_expand_item, data);
for (int i = 0; i < data.size(); i++) { for (int i = 0; i < data.size(); i++) {
data.get(i).setDataType(i); data.get(i).setDataType(i);
...@@ -37,7 +35,7 @@ public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHold ...@@ -37,7 +35,7 @@ public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHold
@Override @Override
protected void convert(@NotNull BaseViewHolder baseViewHolder, ExpandInfo function) { protected void convert(@NotNull BaseViewHolder baseViewHolder, ExpandInfo function) {
baseViewHolder.setText(R.id.tv_expand_name, function.getRemark()); baseViewHolder.setText(R.id.tv_expand_name, function.getShowName());
EditText editText = baseViewHolder.getView(R.id.ed_expand_edit); EditText editText = baseViewHolder.getView(R.id.ed_expand_edit);
Switch btn = baseViewHolder.getView(R.id.switch_expand_boolean); Switch btn = baseViewHolder.getView(R.id.switch_expand_boolean);
TextView tvTime = baseViewHolder.getView(R.id.tv_expand_time); TextView tvTime = baseViewHolder.getView(R.id.tv_expand_time);
...@@ -75,6 +73,7 @@ public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHold ...@@ -75,6 +73,7 @@ public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHold
tvTime.setVisibility(View.VISIBLE); tvTime.setVisibility(View.VISIBLE);
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
if (function.getValueDatetime() != null) {
try { try {
calendar.setTime(DateFormat.getDateTimeInstance().parse(function.getValueDatetime())); calendar.setTime(DateFormat.getDateTimeInstance().parse(function.getValueDatetime()));
} catch (ParseException e) { } catch (ParseException e) {
...@@ -96,6 +95,7 @@ public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHold ...@@ -96,6 +95,7 @@ public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHold
.show(); .show();
}); });
}
} else { } else {
btn.setVisibility(View.GONE); btn.setVisibility(View.GONE);
tvTime.setVisibility(View.GONE); tvTime.setVisibility(View.GONE);
......
...@@ -2,10 +2,12 @@ package com.joe.print.mvp.print; ...@@ -2,10 +2,12 @@ package com.joe.print.mvp.print;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.text.TextUtils;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.base.common.bean.BillingBean; import com.gingersoft.gsa.cloud.base.common.bean.BillingBean;
import com.gingersoft.gsa.cloud.base.common.bean.MemberInfo; import com.gingersoft.gsa.cloud.base.common.bean.MemberInfo;
import com.gingersoft.gsa.cloud.base.common.bean.PayMethod;
import com.gingersoft.gsa.cloud.base.order.bean.BillOrderMoney; import com.gingersoft.gsa.cloud.base.order.bean.BillOrderMoney;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail; import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage; import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage;
...@@ -39,7 +41,49 @@ public class PrintBill extends PrinterRoot { ...@@ -39,7 +41,49 @@ public class PrintBill extends PrinterRoot {
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
return null; List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList();
TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean();
StringBuilder payInfo = new StringBuilder();
for (PayMethod payMethod : MyOrderManage.getInstance().getBillMoney()) {
payInfo.append(payMethod.getPayName() + " ").append(payMethod.getPayMoney());
}
StringBuilder memberIntegerInfo = new StringBuilder();
OrderDetails.DataBean data = getOrderMemberInfo();
MyOrderManage.getInstance().getIntegralQrcode();
if (data.getAddPoints() != 0 || data.getOldPoints() != 0 || data.getAddPoints() != 0) {
memberIntegerInfo.append(getPLable("本次積分:" + data.getAddPoints(), HTML_PRINT_GRAVITY_LEFT))
.append(getPLable("結餘積分:" + data.getNowPoints(), HTML_PRINT_GRAVITY_LEFT))
.append(getPLable("上次積分:" + data.getOldPoints(), HTML_PRINT_GRAVITY_LEFT));
//名稱中間替換為*號
if (data.getMEMBER_NAME() != null && data.getMEMBER_NAME().length() > 0) {
memberIntegerInfo.append(getPLable("會員名稱:" + getReplaceAfter(data.getMEMBER_NAME()), HTML_PRINT_GRAVITY_LEFT));
}
if (data.getPHONE() != null && data.getPHONE().length() > 0) {
memberIntegerInfo.append(getPLable("會員電話:" + getReplaceAfter(data.getPHONE()), HTML_PRINT_GRAVITY_LEFT));
}
}
String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) +
generateFoodInfo(foodList) +
getHtmlBillInfo() +
getWholeLine() +
getPLable(payInfo.toString(), HTML_PRINT_GRAVITY_LEFT) +
getWholeLine() +
getPLable(memberIntegerInfo.toString(), HTML_PRINT_GRAVITY_LEFT);
String integralQrCode = MyOrderManage.getInstance().getIntegralQrcode();
if (!TextUtils.isEmpty(integralQrCode) &&
(boolean) RestaurantExpandInfoUtils.getValue(ExpandConstant.ToPrintQRCode, false)) {
stringBuilder += getPLable("請掃描二維碼", HTML_PRINT_GRAVITY_CENTER) +
getHtmlQrCode(MyOrderManage.getInstance().getIntegralQrcode()) +
getPLable("《追加積分到個人賬戶》", HTML_PRINT_GRAVITY_CENTER);
}
stringBuilder += "</body></html>";
return stringBuilder;
} }
@Override @Override
......
...@@ -6,6 +6,10 @@ import android.view.LayoutInflater; ...@@ -6,6 +6,10 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail; import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage; import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage;
...@@ -25,9 +29,6 @@ import java.util.HashMap; ...@@ -25,9 +29,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
/** /**
* 打印外賣接單 結賬單 * 打印外賣接單 結賬單
*/ */
...@@ -240,22 +241,4 @@ public class PrintOtherOrderClosing extends PrinterRoot { ...@@ -240,22 +241,4 @@ public class PrintOtherOrderClosing extends PrinterRoot {
return new PrintBillBean(title, value); return new PrintBillBean(title, value);
} }
private String getReplaceAfter(String str) {
if (str != null && str.length() > 0) {
int replaceStrCount = str.length() / 2;
StringBuilder buffer = new StringBuilder();
if (replaceStrCount >= 5) {
replaceStrCount = str.length() - 5;
}
for (int i = 0; i < replaceStrCount; i++) {
buffer.append("*");
}
String header = str.substring(0, 1);
String tail = str.substring(replaceStrCount + 1);
return header + buffer.toString() + tail;
}
return "";
}
} }
\ No newline at end of file
...@@ -179,18 +179,18 @@ public class PrintPrjKitchen extends PrinterRoot { ...@@ -179,18 +179,18 @@ public class PrintPrjKitchen extends PrinterRoot {
} else { } else {
tvTakeTime.setVisibility(View.GONE); tvTakeTime.setVisibility(View.GONE);
} }
if (RestaurantExpandInfoUtils.getValue(ExpandConstant.PrintFirstOrder, false)) { // if (RestaurantExpandInfoUtils.getValue(ExpandConstant.PrintFirstOrder, false)) {
tvFirstOrder.setText("<頭單>"); // tvFirstOrder.setText("<頭單>");
tvFirstOrder.setVisibility(prjBean.getIsFirstSendOrder() == 1 ? View.VISIBLE : View.GONE); // tvFirstOrder.setVisibility(prjBean.getIsFirstSendOrder() == 1 ? View.VISIBLE : View.GONE);
} else { // } else {
tvFirstOrder.setVisibility(View.GONE); // tvFirstOrder.setVisibility(View.GONE);
} // }
//
if (RestaurantExpandInfoUtils.getValue(ExpandConstant.PrintStatisticsAmount, false)) { // if (RestaurantExpandInfoUtils.getValue(ExpandConstant.PrintStatisticsAmount, false)) {
tvPrintQuantity.setText(prjBean.getQuantity() + ""); // tvPrintQuantity.setText(prjBean.getQuantity() + "");
} else { // } else {
tvPrintQuantity.setVisibility(View.GONE); // tvPrintQuantity.setVisibility(View.GONE);
} // }
//開台時間 //開台時間
tvOpeningTime.setText(TimeUtils.parseTimeRepeat(prjBean.getOrderDetailsTime(), TimeUtils.DEFAULT_DATE_MDHM)); tvOpeningTime.setText(TimeUtils.parseTimeRepeat(prjBean.getOrderDetailsTime(), TimeUtils.DEFAULT_DATE_MDHM));
......
...@@ -3,16 +3,8 @@ package com.joe.print.mvp.print; ...@@ -3,16 +3,8 @@ package com.joe.print.mvp.print;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.view.Gravity; import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BillingBean;
import com.gingersoft.gsa.cloud.base.order.adapter.print.FoodAdapter;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail; import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage; import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.OpenTableManage; import com.gingersoft.gsa.cloud.base.order.bean.mealManger.OpenTableManage;
...@@ -43,7 +35,15 @@ public class PrintServe extends PrinterRoot { ...@@ -43,7 +35,15 @@ public class PrintServe extends PrinterRoot {
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
return null; List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList();
TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean();
String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) +
generateFoodInfoTwoColumns(foodList) +
getWholeLine() +
getHtmlFooter() + "</body></html>";
return stringBuilder;
} }
@Override @Override
...@@ -52,69 +52,6 @@ public class PrintServe extends PrinterRoot { ...@@ -52,69 +52,6 @@ public class PrintServe extends PrinterRoot {
} }
private Bitmap getServeBitmap(Context context, PrinterDeviceBean printerDeviceBean) {
List<OrderDetail> foodList = MyOrderManage.getInstance().getNewFoodList();
if (foodList == null || foodList.size() <= 0) {
return null;
}
View view = LinearLayout.inflate(context, R.layout.print_layout_print, null);
TextView brandName = view.findViewById(R.id.tv_brand_name);
TextView restaurantName = view.findViewById(R.id.tv_restaurant_name);
TextView tableNum = view.findViewById(R.id.tv_dining_table_number);
TextView people = view.findViewById(R.id.tv_people);
TextView orderNum = view.findViewById(R.id.tv_order_num);
TextView orderData = view.findViewById(R.id.tv_date);
RecyclerView rvFood = view.findViewById(R.id.rv_food);
RecyclerView rvBillAmount = view.findViewById(R.id.rv_bill_amount);
TextView mTvTotalAmount = view.findViewById(R.id.tv_total_amount);
TextView checkOutTime = view.findViewById(R.id.tv_checkout_time);
TextView line_food_info = view.findViewById(R.id.line_food_info);
TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean();
brandName.setText(GsaCloudApplication.getBrandName());
restaurantName.setText(GsaCloudApplication.getRestaurantName());
tableNum.setText("餐檯:" + tableBean.getTableName());
people.setText("人數:" + OpenTableManage.getDefault().getPeopleNumber());
orderData.setText(TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT));
checkOutTime.setText(TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT));
FoodAdapter foodAdapter = new FoodAdapter(foodList);
rvFood.setLayoutManager(new LinearLayoutManager(context));
rvFood.setAdapter(foodAdapter);
List<BillingBean> billingBeans = new ArrayList<>();
// if (billingBeans.size() <= 0) {
line_food_info.setVisibility(View.GONE);
rvBillAmount.setVisibility(View.GONE);
view.findViewById(R.id.line_price_info).setVisibility(View.GONE);
// } else {
// BillAdapter billAdapter = new BillAdapter(billingBeans);
// rvBillAmount.setLayoutManager(new LinearLayoutManager(context));
// rvBillAmount.setAdapter(billAdapter);
// }
if (OpenTableManage.getDefault().getTableBean() != null) {
tableNum.setText(OpenTableManage.getDefault().getTableBean().getTableName());
people.setText(OpenTableManage.getDefault().getPeopleNumber() + "");
}
if (MyOrderManage.getInstance().getOrderId() != -1) {
orderNum.setText(MyOrderManage.getInstance().getOrderId() + "");
}
// BigDecimal totalAmount = new BigDecimal(0);
// for (OrderDetail OrderDetail : foodList) {
// totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(OrderDetail.getPrice(), OrderDetail.getNumber()));
// }
//總金額
view.findViewById(R.id.tv_total_amount_text).setVisibility(View.GONE);
mTvTotalAmount.setVisibility(View.GONE);
mTvTotalAmount.setText(MyOrderManage.getInstance().getTotalAmount() + "");
//加载条形码
// ImageView ivBarCode = view.findViewById(R.id.iv_bar_code);
// ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150));
return viewToZoomBitmap(context, view, printerDeviceBean);
}
private Bitmap getBitmap(Context mContext, PrinterDeviceBean printerDeviceBean) { private Bitmap getBitmap(Context mContext, PrinterDeviceBean printerDeviceBean) {
List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList(); List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList();
if (foodList == null || foodList.size() <= 0) { if (foodList == null || foodList.size() <= 0) {
......
...@@ -5,7 +5,6 @@ import android.graphics.Bitmap; ...@@ -5,7 +5,6 @@ import android.graphics.Bitmap;
import android.view.Gravity; import android.view.Gravity;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BillingBean; import com.gingersoft.gsa.cloud.base.common.bean.BillingBean;
import com.gingersoft.gsa.cloud.base.order.bean.BillOrderMoney; import com.gingersoft.gsa.cloud.base.order.bean.BillOrderMoney;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail; import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
...@@ -48,62 +47,16 @@ public class PrintSlip extends PrinterRoot { ...@@ -48,62 +47,16 @@ public class PrintSlip extends PrinterRoot {
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList(); List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList();
if (foodList == null || foodList.size() <= 0) {
return null;
}
TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean(); TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean();
StringBuilder stringBuilder = new StringBuilder(); String stringBuilder = "<html><body>" +
stringBuilder.append("<html><body>"); getHtmlPrintHeadInfo() +
stringBuilder.append(getPLable(GsaCloudApplication.getBrandName())) getHtmlPrintHeadOrderInfo(tableBean) +
.append(getPLable(GsaCloudApplication.getRestaurantName())) generateFoodInfo(foodList) +
.append(getLineLable()) getHtmlBillInfo() +
.append(getPLable("餐檯:" + tableBean.getTableName())) getWholeLine() +
.append(getPLable("人數:" + OpenTableManage.getDefault().getPeopleNumber())) getHtmlFooter() + "</body></html>";
.append(getPLable("單號:" + MyOrderManage.getInstance().getOrderId())) return stringBuilder;
.append(getPLable("日期:" + TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)))
.append(getLineLable())
.append("<p>\n" +
"<div align=\"left\">Item 1 - WisePOS</div>\n" +
"<div align=\"right\">$999</div>\n" +
"<div align=\"left\">Item 2 - Printer</div>\n" +
"<div align=\"right\">$299</div>\n" +
"<div align=\"left\">Item 3 - Cup</div>\n" +
"<div align=\"right\">$78</div> \n" +
"<div align=\"left\">Item 4 - Data SIM</div>\n" +
"<div align=\"right\">$99</div> \n" +
"<div align=\"right\">____________</div>\n" +
"<div align=\"right\">Total: $XXX</div>\n" +
"</p>");
stringBuilder.append("</body></html>");
//<h1>Heading 1</h1><br/>
//<h2>Heading 2</h2><br/>
//<h3>Heading 3</h3><br/>
//<h4>Heading 4</h4><br/>
//<p align="right">Right</p><div align="center">Center</div>
//<p align="left">Left</p><br/>
//<img src="https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2FC510BAQFnb_2T7cLREw%2Fcomp
// any-logo_200_200%2F0%3Fe%3D2159024400%26v%3Dbeta%26t%3De21PjbFv5en9quafFnWxkwWiJh
// 3aAFqZHJJsoE81ggk"></img><br/>
// <ol start="10">
//<li>A</li>
//<li>B</li>
//</ol>
//<ul>
//<li>A</li>
//<li>B</li>
//</ul>
return null;
}
// private String getDiv(String content, String location) {
//
// }
private String getLineLable() {
return "<br/>";
} }
private String getPLable(String content) { private String getPLable(String content) {
......
package com.joe.print.mvp.print; package com.joe.print.mvp.print;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.adapter.print.BillAdapter;
import com.gingersoft.gsa.cloud.base.adapter.print.BillTypeAdapter;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BillingBean;
import com.gingersoft.gsa.cloud.base.common.bean.PayMethod;
import com.gingersoft.gsa.cloud.base.order.adapter.print.FoodAdapter;
import com.gingersoft.gsa.cloud.base.order.adapter.print.KitChenPrintFoodAdapter;
import com.gingersoft.gsa.cloud.base.order.bean.BillOrderMoney;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.OpenTableManage;
import com.gingersoft.gsa.cloud.base.table.bean.TableBean;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.PrintTransitUtils;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
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.view.ImageUtils;
import com.gingersoft.gsa.cloud.base.utils.view.LayoutToBitmapUtils;
import com.joe.print.R;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
/** /**
* Created by Wyh on 2020/2/10. * Created by Wyh on 2020/2/10.
...@@ -41,390 +9,175 @@ import androidx.recyclerview.widget.RecyclerView; ...@@ -41,390 +9,175 @@ import androidx.recyclerview.widget.RecyclerView;
*/ */
public class PrintUtils { public class PrintUtils {
private static final String TAG = "PrintUtils"; //一行42個 17.5
private static int paperWidth = 380; public final static int lineLength = 42;
private static int foodNameSpace = 20;
private static int foodNumSpace = 8;
private static int foodAmountSpace = 12;
public final static double BBPOS_Chinese_Length = 2.4;
/** /**
* @param mContext 上下文 * @param content 要顯示的內容
* @param type 打印類型 0:上菜紙 * @param maxLength 字符串最大長度
* * 1:印單 * @param chineseCharLength 一個中文字符所佔長度
* * 2:結賬單 * @return 按照maxLength長度分割後的string集合
* * 3:廚房單
* @param paperWidth 紙張寬度
* @return 返回需要打印的圖片
*/ */
public static List<Bitmap> getPrintBitmap(Context mContext, int type, int paperWidth) { public static List<String> getFormatList(String content, int maxLength, double chineseCharLength) {
List<Bitmap> bitmaps = new ArrayList<>(); String chinese = "[\u4e00-\u9fa5]";
PrintUtils.paperWidth = paperWidth; List<String> stringList = new ArrayList<>();
if (type == -1) { int length = 0;
//測試紙 int startIndex = 0;
bitmaps.add(getTestPrintBitmap(mContext)); for (int i = 0; i < content.length(); i++) {
} else if (type == 0) { String temp = content.substring(i, i + 1);
//上菜紙 //判斷中英文,累積長度
bitmaps.add(getPrintBitmap(mContext, MyOrderManage.getInstance().getNewFoodList())); if (temp.matches(chinese)) {
} else if (type == 1) { length += chineseCharLength;
//印單,可能會有還未送單的食品,同時也要將未送單的食品以廚房單的格式打印出來
bitmaps.add(getPrintBitmap(mContext));
bitmaps.addAll(getKitchenBitmap(mContext));
} else if (type == 2) {
//結賬單
bitmaps.add(getPrintBillBitmap(mContext));
} else if (type == 3) {
//廚房單,需要切紙
bitmaps.addAll(getKitchenBitmap(mContext));
} else if (type == 4) {
//清機報表
bitmaps.add(getReportBitmap(mContext));
}
return bitmaps;
}
private static List<Bitmap> getKitchenBitmap(Context mContext) {
List<Bitmap> bitmaps = new ArrayList<>();
// Map<String, List<Bitmap>> bitmapMaps = new HashMap<>();
List<OrderDetail> orderDetails = MyOrderManage.getInstance().getNewFoodList();
if (orderDetails != null) {
//廚房單,可能會有多個IP打印
//獲得ip打印列表,
//再將食品數據根據打印位置分組。
//打印一組之後,關閉連接,切換第二台打印機ip,如此循環
//打印完成之後,返回所有打印結果。
Map<String, List<OrderDetail>> foodMaps = new HashMap<>();
String emptyPrintLocation = "null";//部分食品沒有打印位置時設置為此key,比如這是第一個食品,沒有打印位置時
int lastEmptyPrintLocationIndex = 0;//上一次遍歷到第一個食品時都沒有打印位置時,開始的食品位置
//將所有食品進行遍歷,分組
for (int i = 0; i < orderDetails.size(); i++) {
OrderDetail food = orderDetails.get(i);
if (TextUtil.isEmptyOrNullOrUndefined(food.getPrintseting())) {
//如果沒有打印位置,向上尋找
if (i == 0) {
food.setPrintseting(emptyPrintLocation);
addToMap(foodMaps, food);
} else {
for (int j = i - 1; j >= lastEmptyPrintLocationIndex; j--) {
//一直遍歷,直到找到有打印位置的食品
// 如果所有食品都沒有打印位置的情況,為了避免多次遍歷
// 如果本次遍歷到第一個食品,都沒有打印位置,記錄下這一次開始遍歷的下標,下一次遍歷到這個位置就停止
if (!TextUtil.isEmptyOrNullOrUndefined(orderDetails.get(j).getPrintseting())) {
//一直遍歷,直到找到有打印位置的食品
//判斷是否帶*號
if (orderDetails.get(j).getPrintseting().contains("*")) {
//帶*號,則需要取得通過下標加去掉*號的標識來取得map中的集合,將i食品裝進去,這樣就能打印在一張紙上
//如果沒取得集合,則通過打印位置去map取得集合,將j食品從map中移除,將這個j食品的和i食品裝一起
// 生成新的key。為當前下標+去掉*的打印位置,不帶*的key取得的食品集合才能打印在一張紙上。
String newKey = j + orderDetails.get(j).getPrintseting().replaceAll("\\*", "");
//通過newKey取得map中的集合
List<OrderDetail> newKeyfoods = foodMaps.get(newKey);
if (newKeyfoods != null) {
newKeyfoods.add(food);
} else { } else {
List<OrderDetail> printsetingFoods = foodMaps.get(orderDetails.get(j).getPrintseting()); length += 1;
if (printsetingFoods != null) {//理論上不會為空 }
printsetingFoods.remove(printsetingFoods.lastIndexOf(orderDetails.get(j))); if (length > maxLength) {
//移除掉之後,put到newkey中 i -= 1;
List<OrderDetail> newFoods = new ArrayList<>(); }
newFoods.add(orderDetails.get(j)); //長度達到設定的值
newFoods.add(food); if (length >= maxLength) {
foodMaps.put(newKey, newFoods); String headerStr = content.substring(startIndex, i + 1);
} String lastStr = headerStr.substring(headerStr.length() - 1);
} if (!lastStr.matches(chinese)) {
//只要不是中文
if (headerStr.length() + 1 <= content.length()) {
String nextFirstStr = content.substring(headerStr.length(), headerStr.length() + 1);
if (!nextFirstStr.matches(chinese)) {
//如果截取後最後一個字符是英文,則需要判斷下一個字符是不是英文
//是,那麼這是一整個單詞,需要截取整段換到下一行去
for (int j = headerStr.length() - 1; j >= 0; j--) {
String str = headerStr.charAt(j) + "";
if (!str.matches(chinese)) {
//找到不是英文的
String newHeaderStr = headerStr.substring(0, j + 1);
stringList.add(newHeaderStr);
startIndex = i - (headerStr.length() - newHeaderStr.length()) + 1;
length = 0;
i = startIndex;
break; break;
} else {
//沒有*號,不需要做多餘的操作
food.setPrintseting(orderDetails.get(j).getPrintseting());
addToMap(foodMaps, food);
}
} else if (j == lastEmptyPrintLocationIndex) {
//從i到0的打印位置都沒有,記錄下i,下次只遍歷到i就停下來
lastEmptyPrintLocationIndex = i;
//如果找到最初的那個食品,也沒有打印位置,設置打印位置為"null"
food.setPrintseting(emptyPrintLocation);
addToMap(foodMaps, food);
} }
if (j == 0) {
//循環完了都沒找到,就不管了
stringList.add(headerStr);
startIndex = i + 1;
length = 0;
break;
} }
} }
} else { } else {
//有打印位置, stringList.add(headerStr);
//已經保存過這個位置的, startIndex = i + 1;
addToMap(foodMaps, food); length = 0;
}
}
//通過打印位置生成多張用於打印的bitmap
for (Map.Entry<String, List<OrderDetail>> entry : foodMaps.entrySet()) {
String key = entry.getKey();
// List<Bitmap> bitmaps1 = new ArrayList<>();
if (key.contains("*")) {
//如果帶*號,這個集合就需要切紙,每個食品都需要單獨在一張廚房單上
for (OrderDetail orderDetail : entry.getValue()) {
List<OrderDetail> orders = new ArrayList<>();//這裡new集合是因為下面的方法需要的參數是list集合
orders.add(orderDetail);
bitmaps.add(PrintUtils.getKitChenPrintBitmap(mContext, orders));
// bitmaps1.add(PrintUtils.getKitChenPrintBitmap(mContext, orders));
} }
} else { } else {
//不帶*號,所有同樣廚房位置的食品都在一張紙上 stringList.add(headerStr);
bitmaps.add(PrintUtils.getKitChenPrintBitmap(mContext, entry.getValue())); startIndex = i + 1;
// bitmaps1.add(PrintUtils.getKitChenPrintBitmap(mContext, entry.getValue())); length = 0;
}
// bitmapMaps.put(key, bitmaps1);
}
}
//通過遍歷map進行打印
return bitmaps;
} }
private static void addToMap(Map<String, List<OrderDetail>> foodMaps, OrderDetail food) {
if (foodMaps.get(food.getPrintseting()) != null) {
Objects.requireNonNull(foodMaps.get(food.getPrintseting())).add(food);
} else { } else {
List<OrderDetail> newFoods = new ArrayList<>(); stringList.add(headerStr);
newFoods.add(food); startIndex = i + 1;
foodMaps.put(food.getPrintseting(), newFoods); length = 0;
} }
} else if (length > 0 && i == content.length() - 1) {
stringList.add(content.substring(startIndex));
} }
}
private static Bitmap getPrintBitmap(Context context) { return stringList;
return getPrintBitmap(context, MyOrderManage.getInstance().getOrderFoodList());
} }
/** /**
* 獲取"印單"圖片 * 獲取縮進,通過文字和最大長度
* *
* @param context * @param text
* @param maxLength
* @return * @return
*/ */
private static Bitmap getPrintBitmap(Context context, List<OrderDetail> foodList) { private static String getSpaceByTextLength(String text, int maxLength, double chineseCharLength) {
if (foodList == null || foodList.size() <= 0) { int spaceLength = (int) Math.ceil(maxLength - getChineseValueLength(text, chineseCharLength));
return null; StringBuilder space = new StringBuilder();
} for (int i = 0; i < spaceLength; i++) {
View view = LinearLayout.inflate(context, R.layout.print_layout_print, null); space.append(" ");
TextView brandName = view.findViewById(R.id.tv_brand_name);
TextView restaurantName = view.findViewById(R.id.tv_restaurant_name);
TextView tableNum = view.findViewById(R.id.tv_dining_table_number);
TextView people = view.findViewById(R.id.tv_people);
TextView orderNum = view.findViewById(R.id.tv_order_num);
TextView orderData = view.findViewById(R.id.tv_date);
RecyclerView rvFood = view.findViewById(R.id.rv_food);
RecyclerView rvBillAmount = view.findViewById(R.id.rv_bill_amount);
TextView mTvTotalAmount = view.findViewById(R.id.tv_total_amount);
TextView checkOutTime = view.findViewById(R.id.tv_checkout_time);
TextView line_food_info = view.findViewById(R.id.line_food_info);
// List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList();
TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean();
tableNum.setText(tableBean.getTableName());
people.setText(OpenTableManage.getDefault().getPeopleNumber() + "");
orderData.setText(TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT));
checkOutTime.setText(TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT));
FoodAdapter foodAdapter = new FoodAdapter(foodList);
rvFood.setLayoutManager(new LinearLayoutManager(context));
rvFood.setAdapter(foodAdapter);
List<BillingBean> billingBeans = new ArrayList<>();
if (MyOrderManage.getInstance().getOrderMoneyList().size() > 0) {
for (BillOrderMoney item : MyOrderManage.getInstance().getOrderMoneyList()) {
billingBeans.add(new BillingBean(item.getTitle(), item.getMoney()));
} }
} space.append(text);
LogUtil.d(TAG,"getPrintBitmap OrderMoneyList size: "+ MyOrderManage.getInstance().getOrderMoneyList().size()); return space.toString();
// billingBeans.add(new BillingBean("合計", 58.88));
billingBeans.add(new BillingBean("10%服務費", 5.08));
// billingBeans.add(new BillingBean("賬單小數", -0.06));
if (billingBeans.size() <= 0) {
line_food_info.setVisibility(View.GONE);
} else {
BillAdapter billAdapter = new BillAdapter(billingBeans);
rvBillAmount.setLayoutManager(new LinearLayoutManager(context));
rvBillAmount.setAdapter(billAdapter);
}
if (OpenTableManage.getDefault().getTableBean() != null) {
tableNum.setText(OpenTableManage.getDefault().getTableBean().getTableName());
people.setText(OpenTableManage.getDefault().getPeopleNumber() + "");
}
if (MyOrderManage.getInstance().getOrderId() != -1) {
orderNum.setText(MyOrderManage.getInstance().getOrderId() + "");
}
BigDecimal totalAmount = new BigDecimal(0);
for (OrderDetail OrderDetail : foodList) {
totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(OrderDetail.getPrice(), OrderDetail.getNumber()));
}
//總金額
mTvTotalAmount.setText(totalAmount + "");
//加载条形码
// ImageView ivBarCode = view.findViewById(R.id.iv_bar_code);
// ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150));
return viewToBitmap(context, view);
} }
/** /**
* 獲取"結賬單"圖片 * 根據字符串獲取長度,中文長度為2,在那台針式打印機長度為1.5
* *
* @param context * @param value
* @return * @return
*/ */
private static Bitmap getPrintBillBitmap(Context context) { private static double getChineseValueLength(String value, double chineseCharLength) {
List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList(); double valueLength = 0;
TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean(); String chinese = "[\u4e00-\u9fa5]";
if (foodList == null || foodList.size() <= 0 || tableBean == null) { for (int i = 0; i < value.length(); i++) {
return null; String temp = value.substring(i, i + 1);
} if (temp.matches(chinese)) {
View view = LinearLayout.inflate(context, R.layout.print_layout_print_bill, null); valueLength += chineseCharLength;
TextView brandName = view.findViewById(R.id.tv_brand_name);
TextView restaurantName = view.findViewById(R.id.tv_restaurant_name);
TextView topOrderNum = view.findViewById(R.id.tv_print_bill_order_num);//頂部的訂單號
TextView tableNum = view.findViewById(R.id.tv_dining_table_number);
TextView people = view.findViewById(R.id.tv_people);
TextView orderNum = view.findViewById(R.id.tv_order_num);
TextView orderData = view.findViewById(R.id.tv_date);
RecyclerView rvFood = view.findViewById(R.id.rv_food);
RecyclerView rvBillAmount = view.findViewById(R.id.rv_bill_amount);
TextView mTvTotalAmount = view.findViewById(R.id.tv_total_amount);
TextView checkOutTime = view.findViewById(R.id.tv_checkout_time);
TextView line_food_info = view.findViewById(R.id.line_food_info);
RecyclerView rvPayType = view.findViewById(R.id.rv_print_pay_type);//顯示支付方式
tableNum.setText(tableBean.getTableName());
people.setText(OpenTableManage.getDefault().getPeopleNumber() + "");
orderData.setText(TimeUtils.parseTimeRepeat(tableBean.getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT));
checkOutTime.setText(TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT));
FoodAdapter foodAdapter = new FoodAdapter(foodList);
rvFood.setLayoutManager(new LinearLayoutManager(context));
rvFood.setAdapter(foodAdapter);
List<BillingBean> billingBeans = new ArrayList<>();
if (MyOrderManage.getInstance().getOrderMoneyList().size() > 0) {
for (BillOrderMoney item : MyOrderManage.getInstance().getOrderMoneyList()) {
billingBeans.add(new BillingBean(item.getTitle(), item.getMoney()));
}
}
// billingBeans.add(new BillingBean("合計", 58.88));
// billingBeans.add(new BillingBean("10%服務費", 5.08));
// billingBeans.add(new BillingBean("賬單小數", -0.06));
if (billingBeans.size() <= 0) {
line_food_info.setVisibility(View.GONE);
} else { } else {
BillAdapter billAdapter = new BillAdapter(billingBeans); valueLength += 1;
rvBillAmount.setLayoutManager(new LinearLayoutManager(context));
rvBillAmount.setAdapter(billAdapter);
} }
if (OpenTableManage.getDefault().getTableBean() != null) {
tableNum.setText(OpenTableManage.getDefault().getTableBean().getTableName());
people.setText(OpenTableManage.getDefault().getPeopleNumber() + "");
} }
return valueLength;
if (MyOrderManage.getInstance().getOrderId() != -1) {
orderNum.setText(MyOrderManage.getInstance().getOrderId() + "");
}
BigDecimal totalAmount = new BigDecimal(0);
for (OrderDetail OrderDetail : MyOrderManage.getInstance().getOrderFoodList()) {
totalAmount = MoneyUtil.sum(totalAmount, OrderDetail.getPrice());
}
//總金額
mTvTotalAmount.setText(totalAmount + "");
List<PayMethod> payBillMoneys = MyOrderManage.getInstance().getBillMoney();
rvPayType.setLayoutManager(new LinearLayoutManager(context));
rvPayType.setAdapter(new BillTypeAdapter(payBillMoneys));
//加载条形码
// ImageView ivBarCode = view.findViewById(R.id.iv_bar_code);
// ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150));
return viewToBitmap(context, view);
} }
/** /**
* 獲取"廚房單"圖片 * @param name1 字符串一
* * @param name2 字符串二
* @param context * @param name3 字符串三
* @return * @param chineseCharLength 中文字符所佔長度,BBPOS佔2.4,針式佔1.5
* @return 返回N行分割好的排版文字
*/ */
private static Bitmap getKitChenPrintBitmap(Context context, List<OrderDetail> foodList) { public static String getLineString(String name1, String name2, String name3, double chineseCharLength) {
if (foodList == null || foodList.size() <= 0) { List<String> name1s = getFormatList(name1, foodNameSpace, chineseCharLength);
return null; List<String> name2s = getFormatList(name2, foodNumSpace, chineseCharLength);
} List<String> name3s = getFormatList(name3, foodAmountSpace, chineseCharLength);
View view = LinearLayout.inflate(context, R.layout.print_kitchen, null);
TextView tvTableNumber = view.findViewById(R.id.tv_kitchen_print_table_number);
TextView tvOrderNumber = view.findViewById(R.id.tv_order_num);
TextView tvOpeningTime = view.findViewById(R.id.tv_opening_time);
TextView tvOrderTime = view.findViewById(R.id.tv_order_time);
TextView tvKitChenLocation = view.findViewById(R.id.tv_kitchen_location);
TextView tvPeople = view.findViewById(R.id.tv_people);
TextView tvOperator = view.findViewById(R.id.tv_operator);
RecyclerView rvFood = view.findViewById(R.id.rv_kitchen_food);
TextView tvTableNumber2 = view.findViewById(R.id.tv_kitchen_print_table_number2);
if (foodList.size() > 0 && foodList.get(0) != null) {
KitChenPrintFoodAdapter foodAdapter = new KitChenPrintFoodAdapter(foodList);
rvFood.setLayoutManager(new LinearLayoutManager(context));
rvFood.setAdapter(foodAdapter);
//廚房位置
if (!TextUtil.isEmptyOrNullOrUndefined(foodList.get(0).getPrintseting())) {
tvKitChenLocation.setText(foodList.get(0).getPrintseting());//.replace("*", "")
tvKitChenLocation.setVisibility(View.VISIBLE);
} else {
tvKitChenLocation.setVisibility(View.GONE);
}
}
if (OpenTableManage.getDefault().getTableBean() != null) {
// 台號
tvTableNumber.setText(OpenTableManage.getDefault().getTableBean().getTableName() + "");
tvTableNumber2.setText(OpenTableManage.getDefault().getTableBean().getTableName() + "");
//人數
tvPeople.setText(OpenTableManage.getDefault().getPeopleNumber() + "");
//訂單號
tvOrderNumber.setText("" + MyOrderManage.getInstance().getOrderId());
//開台時間
tvOpeningTime.setText(TimeUtils.parseTimeRepeat(OpenTableManage.getDefault().getTableBean().getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT));
}
//落單時間,為當前時間
tvOrderTime.setText(TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT));
//操作人員
tvOperator.setText(GsaCloudApplication.userName);
return viewToBitmap(context, view); int maxLine = Math.max(Math.max(name1s.size(), name2s.size()), name3s.size());
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < maxLine; i++) {
stringBuilder.append("<p>");
putText(chineseCharLength, name1s, stringBuilder, i, foodNameSpace);
putText(chineseCharLength, name2s, stringBuilder, i, foodNumSpace);
putText(chineseCharLength, name3s, stringBuilder, i, foodAmountSpace);
stringBuilder.append("</p>");
} }
return stringBuilder.toString();
/**
* 獲取測試打印bitmap
*
* @param context
* @return
*/
private static Bitmap getTestPrintBitmap(Context context) {
View view = LinearLayout.inflate(context, R.layout.print_test, null);
return viewToBitmap(context, view);
} }
/** /**
* 獲取清機報表Bitmap * @param name1 字符串一
* * @param name2 字符串二
* @param mContext * @param chineseCharLength 中文字符所佔長度,BBPOS佔2.4,針式佔1.5
* @return * @return 返回N行分割好的排版文字
*/ */
private static Bitmap getReportBitmap(Context mContext) { public static String getLineString(String name1, String name2, double chineseCharLength, int lineWidth) {
View view = PrintTransitUtils.getInstance().getPrintView(); List<String> name1s = getFormatList(name1, lineWidth / 2, chineseCharLength);
if (view != null) { List<String> name2s = getFormatList(name2, lineWidth / 2, chineseCharLength);
return viewToBitmap(mContext, view);
int maxLine = Math.max(name1s.size(), name2s.size());
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < maxLine; i++) {
stringBuilder.append("<p>");
putText(chineseCharLength, name1s, stringBuilder, i, foodNameSpace);
putText(chineseCharLength, name2s, stringBuilder, i, foodNumSpace);
stringBuilder.append("</p>");
} }
return null; return stringBuilder.toString();
} }
private static void putText(double chineseCharLength, List<String> name1s, StringBuilder stringBuilder, int i, int foodNameSpace) {
public static Bitmap viewToBitmap(Context context, View view) { if (i < name1s.size()) {
LayoutToBitmapUtils.layoutView(context, view);//先测量view stringBuilder.append(getSpaceByTextLength(name1s.get(i), foodNameSpace, chineseCharLength));
//580為程序支持的打印紙最大寬度 } else {
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap stringBuilder.append(getSpaceByTextLength("", foodNameSpace, chineseCharLength));
}
} }
} }
...@@ -9,14 +9,13 @@ import android.os.Build; ...@@ -9,14 +9,13 @@ import android.os.Build;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import android.util.Xml;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
...@@ -31,17 +30,19 @@ import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; ...@@ -31,17 +30,19 @@ import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BillingBean; import com.gingersoft.gsa.cloud.base.common.bean.BillingBean;
import com.gingersoft.gsa.cloud.base.common.bean.PayMethod; import com.gingersoft.gsa.cloud.base.common.bean.PayMethod;
import com.gingersoft.gsa.cloud.base.order.adapter.print.FoodAdapter; import com.gingersoft.gsa.cloud.base.order.adapter.print.FoodAdapter;
import com.gingersoft.gsa.cloud.base.order.bean.BillOrderMoney;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail; import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.OpenTableManage;
import com.gingersoft.gsa.cloud.base.table.bean.TableBean;
import com.gingersoft.gsa.cloud.base.threadPool.ThreadPoolManager; import com.gingersoft.gsa.cloud.base.threadPool.ThreadPoolManager;
import com.gingersoft.gsa.cloud.base.utils.AidlUtil; import com.gingersoft.gsa.cloud.base.utils.AidlUtil;
import com.gingersoft.gsa.cloud.base.utils.RestaurantExpandInfoUtils; import com.gingersoft.gsa.cloud.base.utils.RestaurantExpandInfoUtils;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil; 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.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils; import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils;
import com.gingersoft.gsa.cloud.base.utils.view.LayoutToBitmapUtils; import com.gingersoft.gsa.cloud.base.utils.view.LayoutToBitmapUtils;
import com.gingersoft.gsa.cloud.base.utils.view.QRCodeUtil; import com.gingersoft.gsa.cloud.base.utils.view.QRCodeUtil;
import com.gingersoft.gsa.cloud.bean.WiseposBean;
import com.gingersoft.gsa.cloud.constans.ExpandConstant; import com.gingersoft.gsa.cloud.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.constans.PrintConstans; import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean; import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
...@@ -62,16 +63,11 @@ import com.joe.print.mvp.print.usb.EscCommand; ...@@ -62,16 +63,11 @@ import com.joe.print.mvp.print.usb.EscCommand;
import com.joe.print.mvp.print.usb.UsbPrint; import com.joe.print.mvp.print.usb.UsbPrint;
import com.joe.print.mvp.print.usb.UsbPrinter; import com.joe.print.mvp.print.usb.UsbPrinter;
import com.joe.print.mvp.print.usb.UsbPrinterFinder; import com.joe.print.mvp.print.usb.UsbPrinterFinder;
import com.joe.print.mvp.ui.activity.PrintActivity; import com.joe.print.mvp.print.utils.BBposPrint;
import com.joe.print.mvp.ui.adapter.BillItemAdapter; import com.joe.print.mvp.ui.adapter.BillItemAdapter;
import com.sunmi.peripheral.printer.InnerResultCallbcak; import com.sunmi.peripheral.printer.InnerResultCallbcak;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.net.ConnectException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
...@@ -80,13 +76,6 @@ import java.util.Objects; ...@@ -80,13 +76,6 @@ import java.util.Objects;
import javax.inject.Inject; import javax.inject.Inject;
import androidx.annotation.ColorRes;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener, ReceiveListener { public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener, ReceiveListener {
@Inject @Inject
...@@ -183,6 +172,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -183,6 +172,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
/** /**
* 獲取打印內容 * 獲取打印內容
*
* @return BBPOS是HTMl格式 * @return BBPOS是HTMl格式
*/ */
public abstract String getPrintData(Context mContext, PrinterDeviceBean deviceBean); public abstract String getPrintData(Context mContext, PrinterDeviceBean deviceBean);
...@@ -198,7 +188,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -198,7 +188,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
/** /**
* 本機打印 * 本機打印
*/ */
public void locationPrint(List<Bitmap> bitmaps, PrintListener listener) { public void locationPrint(List<Bitmap> bitmaps, String printData, PrintListener listener) {
//本機打印 //本機打印
String model = Build.MODEL; String model = Build.MODEL;
if (PrintConstans.PRINT_MODEL_V2.contains(model)) { if (PrintConstans.PRINT_MODEL_V2.contains(model)) {
...@@ -209,81 +199,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -209,81 +199,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
} else if (PrintConstans.PRINT_MODEL_WISEPOS.contains(model)) { } else if (PrintConstans.PRINT_MODEL_WISEPOS.contains(model)) {
//BBPOS Wisepos 打印 localhost 192.168.1.162 //BBPOS Wisepos 打印 localhost 192.168.1.162
//打印結果示例:<?xml version="1.0" encoding= "UTF-8" ?><WAPIResult><status>SUCCESS</status><requestType>PRINT</requestType><state>IDLE</state><systemInfo><appVersion>1.22.4.4.007</appVersion><OSVersion>9</OSVersion><ip>192.168.1.162</ip><mac>2059a018d3d6</mac><serialNumber>WSS503013000075</serialNumber><firmware>WSS50.501-02 (5.00.01.02.beta7)</firmware><hardware></hardware><terminalConfig>GNZZ_MTIPD_v13_with_AE_v1</terminalConfig><key>034040XXXXXXXXXXXXXX</key><bootloader>6.00.00.20 (6.00.00.34)</bootloader></systemInfo><timestamp>1601021267673</timestamp></WAPIResult> //打印結果示例:<?xml version="1.0" encoding= "UTF-8" ?><WAPIResult><status>SUCCESS</status><requestType>PRINT</requestType><state>IDLE</state><systemInfo><appVersion>1.22.4.4.007</appVersion><OSVersion>9</OSVersion><ip>192.168.1.162</ip><mac>2059a018d3d6</mac><serialNumber>WSS503013000075</serialNumber><firmware>WSS50.501-02 (5.00.01.02.beta7)</firmware><hardware></hardware><terminalConfig>GNZZ_MTIPD_v13_with_AE_v1</terminalConfig><key>034040XXXXXXXXXXXXXX</key><bootloader>6.00.00.20 (6.00.00.34)</bootloader></systemInfo><timestamp>1601021267673</timestamp></WAPIResult>
WiseposBean wiseposBean = new WiseposBean(); new BBposPrint().print(printData, listener);
OkHttp3Utils.get("http://localhost:8080/pos?transactionType=PRINT&isExternal=false&apiVersion=21&printData=<html><body><H2>BBPOS test print</H2></body></html>").subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
XmlPullParser xmlPullParser = Xml.newPullParser();
try {
xmlPullParser.setInput(new ByteArrayInputStream(s.getBytes()), "utf-8");
int eventType = xmlPullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
//開始解析
break;
case XmlPullParser.START_TAG:
//解析到某一個節點
String xmlName = xmlPullParser.getName();
switch (xmlName) {
case "status":
wiseposBean.setState(xmlPullParser.nextText());
// if (wiseposBean.getState().equals("SUCCESS")) {
// listener.printSuccess();
// } else {
// listener.printFile("打印失敗");
// }
break;
case "ErrorMessage":
if (xmlPullParser.nextText().equals("Please login first")) {
listener.printFile("請先登錄WisePay");
}
break;
case "requestType":
wiseposBean.setRequestType(xmlPullParser.nextText());
break;
}
break;
case XmlPullParser.END_TAG:
break;
}
eventType = xmlPullParser.next();
}
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
if (e instanceof ConnectException) {
listener.printFile("無法連接打印,請檢查WisePay是否打開");
}
}
@Override
public void onComplete() {
//這個節點解析完成
if (wiseposBean.getState() != null && wiseposBean.getState().equals("SUCCESS")) {
listener.printSuccess();
} else {
listener.printFile("打印失敗");
}
Intent intent = new Intent(GsaCloudApplication.getAppContext(), PrintActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
GsaCloudApplication.getAppContext().startActivity(intent);
}
});
} else { } else {
listener.printFile("暫不支持本機型打印"); listener.printFile("暫不支持本機型打印");
} }
...@@ -444,9 +360,10 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -444,9 +360,10 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
bytes.add(esc.getPrintAndFeedLines((byte) 8)); bytes.add(esc.getPrintAndFeedLines((byte) 8));
bytes.add(esc.getCutPaper()); bytes.add(esc.getCutPaper());
bytes.add(esc.getCleanCache()); bytes.add(esc.getCleanCache());
if (usbPrinters.size() > 0) if (usbPrinters.size() > 0) {
usbPrint.sendPrintCommand(usbPrinters.get(0), bytes); usbPrint.sendPrintCommand(usbPrinters.get(0), bytes);
} }
}
} else { } else {
boolean hasPermission = new Intent().getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false); boolean hasPermission = new Intent().getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false);
printListener.printFile("未找到USB打印機"); printListener.printFile("未找到USB打印機");
...@@ -694,7 +611,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -694,7 +611,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
} }
//生成積分QRCode碼(飯糰APP掃碼獲得積分) //生成積分QRCode碼(飯糰APP掃碼獲得積分)
if (TextUtils.isEmpty(integralQrcode) || if (TextUtils.isEmpty(integralQrcode) ||
(boolean)RestaurantExpandInfoUtils.getValue(ExpandConstant.ToPrintQRCode,false) == false) { (boolean) RestaurantExpandInfoUtils.getValue(ExpandConstant.ToPrintQRCode, false) == false) {
llIntegralQrcode.setVisibility(View.GONE); llIntegralQrcode.setVisibility(View.GONE);
} else { } else {
llIntegralQrcode.setVisibility(View.VISIBLE); llIntegralQrcode.setVisibility(View.VISIBLE);
...@@ -739,7 +656,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -739,7 +656,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
return view; return view;
} }
private String getReplaceAfter(String str) { protected String getReplaceAfter(String str) {
if (str != null && str.length() > 0) { if (str != null && str.length() > 0) {
int replaceStrCount = str.length() / 2; int replaceStrCount = str.length() / 2;
StringBuilder buffer = new StringBuilder(); StringBuilder buffer = new StringBuilder();
...@@ -925,4 +842,129 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -925,4 +842,129 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
public void setIsShow(View parentView, int viewId, boolean isShow) { public void setIsShow(View parentView, int viewId, boolean isShow) {
parentView.findViewById(viewId).setVisibility(isShow ? View.VISIBLE : View.GONE); parentView.findViewById(viewId).setVisibility(isShow ? View.VISIBLE : View.GONE);
} }
protected String getHtmlPrintHeadInfo() {
return getPLable(GsaCloudApplication.getBrandName(), HTML_PRINT_GRAVITY_CENTER) +
getPLable(GsaCloudApplication.getRestaurantName(), HTML_PRINT_GRAVITY_CENTER);
}
protected String getHtmlPrintHeadOrderInfo(TableBean.DataBean tableBean) {
String orderNum = "單號:";
if (TextUtil.isNotEmptyOrNullOrUndefined(MyOrderManage.getInstance().getOrderNo())) {
orderNum = "單號:" + MyOrderManage.getInstance().getOrderNo();
}
return getWholeLine() +
getPLable("餐檯:" + tableBean.getTableName(), HTML_PRINT_GRAVITY_LEFT) +
getPLable("人數:" + OpenTableManage.getDefault().getPeopleNumber(), HTML_PRINT_GRAVITY_LEFT) +
getPLable(orderNum, HTML_PRINT_GRAVITY_LEFT) +
getPLable("日期:" + TimeUtils.parseTimeRepeat(tableBean.getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT), HTML_PRINT_GRAVITY_LEFT) +
getWholeLine();
}
protected String getHtmlBillInfo() {
//添加合計項
StringBuilder amountStr = new StringBuilder(getPLable("合計 " + MyOrderManage.getInstance().getWholeAmount(), HTML_PRINT_GRAVITY_RIGHT));
//添加其他金額項
if (MyOrderManage.getInstance().getOrderMoneyList().size() > 0) {
for (BillOrderMoney item : MyOrderManage.getInstance().getOrderMoneyList()) {
amountStr.append(getPLable(item.getTitle() + " " + item.getMoney(), HTML_PRINT_GRAVITY_RIGHT));
}
}
amountStr.append(getLine(21, HTML_PRINT_GRAVITY_RIGHT));
amountStr.append("總金額 ").append(MyOrderManage.getInstance().getTotalAmount());
return getLine(21, HTML_PRINT_GRAVITY_RIGHT)
+ amountStr;
}
protected String getHtmlBillPayInfo() {
StringBuilder payInfo = new StringBuilder();
for (PayMethod payMethod : MyOrderManage.getInstance().getBillMoney()) {
payInfo.append(getPLable(payMethod.getPayName() + " $" + payMethod.getPayMoney(), HTML_PRINT_GRAVITY_LEFT));
}
return getWholeLine() +
payInfo +
getWholeLine();
}
protected String getHtmlFooter() {
return getPLable("Thank you!", HTML_PRINT_GRAVITY_CENTER) +
getPLable(TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT), HTML_PRINT_GRAVITY_CENTER);
}
public final int HTML_PRINT_GRAVITY_LEFT = 0;
public final int HTML_PRINT_GRAVITY_CENTER = 1;
public final int HTML_PRINT_GRAVITY_RIGHT = 2;
protected String getPLable(String content, int gravity) {
if (gravity == HTML_PRINT_GRAVITY_CENTER) {
return "<p align='center'>" + content + "</p>";
} else if (gravity == HTML_PRINT_GRAVITY_RIGHT) {
return "<p align='right'>" + content + "</p>";
} else if (gravity == HTML_PRINT_GRAVITY_LEFT) {
return "<p align='left'>" + content + "</p>";
} else {
return "<p align='left'>" + content + "</p>";
}
}
protected String getHtmlQrCode(String url) {
return "<qrcode scale='1'>" + url + "</qrcode><br/>";
}
protected String getWholeLine() {
return getLine(90, HTML_PRINT_GRAVITY_LEFT);
}
protected String getLine(int length, int gravity) {
StringBuilder content = new StringBuilder();
for (int i = 0; i < length; i++) {
content.append("-");
}
return getPLable(content.toString(), gravity);
}
protected String generateFoodInfoTwoColumns(List<OrderDetail> foodList) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < foodList.size(); i++) {
OrderDetail orderDetail = foodList.get(i);
String foodName;
if (orderDetail.getItemType() == 2) {
foodName = "---" + orderDetail.getProductName();
} else if (orderDetail.getItemType() == 3) {
foodName = "-----" + orderDetail.getProductName();
} else {
foodName = orderDetail.getProductName();
}
stringBuilder.append(getBBPosLineString(foodName, "X" + orderDetail.getNumber()));
}
return stringBuilder.toString();
}
protected String generateFoodInfo(List<OrderDetail> foodList) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < foodList.size(); i++) {
OrderDetail orderDetail = foodList.get(i);
String foodName;
if (orderDetail.getItemType() == 2) {
foodName = "---" + orderDetail.getProductName();
} else if (orderDetail.getItemType() == 3) {
foodName = "-----" + orderDetail.getProductName();
} else {
foodName = orderDetail.getProductName();
}
stringBuilder.append(getBBPosLineString(foodName, "X" + orderDetail.getNumber(), "$" + orderDetail.getPrice()));
}
return stringBuilder.toString();
}
protected String getBBPosLineString(String name1, String name2) {
return PrintUtils.getLineString(name1, name2, PrintUtils.BBPOS_Chinese_Length, PrintUtils.lineLength);
}
protected String getBBPosLineString(String name1, String name2, String name3) {
return PrintUtils.getLineString(name1, name2, name3, PrintUtils.BBPOS_Chinese_Length);
}
} }
\ No newline at end of file
...@@ -21,6 +21,7 @@ import com.gingersoft.gsa.cloud.base.utils.AidlUtil; ...@@ -21,6 +21,7 @@ import com.gingersoft.gsa.cloud.base.utils.AidlUtil;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils; import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils; import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.constans.HttpsConstans; import com.gingersoft.gsa.cloud.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.constans.PrintConstans; import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.database.bean.PrintCurrencyBean; import com.gingersoft.gsa.cloud.database.bean.PrintCurrencyBean;
...@@ -323,7 +324,7 @@ public class PrjService extends Service implements ReceiveListener { ...@@ -323,7 +324,7 @@ public class PrjService extends Service implements ReceiveListener {
private void newPrint(String json) { private void newPrint(String json) {
printDatas.clear(); printDatas.clear();
listMap.clear(); listMap.clear();
currentIndex = 1; currentIndex = 0;
totalPrj = 0; totalPrj = 0;
PrjBean prjBean = JsonUtils.parseObject(json, PrjBean.class); PrjBean prjBean = JsonUtils.parseObject(json, PrjBean.class);
if (prjBean == null || prjBean.getData() == null) { if (prjBean == null || prjBean.getData() == null) {
...@@ -342,11 +343,24 @@ public class PrjService extends Service implements ReceiveListener { ...@@ -342,11 +343,24 @@ public class PrjService extends Service implements ReceiveListener {
//最后就可以通过刚刚得到的key值去解析后面的json了 //最后就可以通过刚刚得到的key值去解析后面的json了
JSONArray dataJson = (JSONArray) jsonObject.get(key); JSONArray dataJson = (JSONArray) jsonObject.get(key);
List<PrjBean.DataBean.Bean> datas = JsonUtils.parseArray(dataJson.toString(), PrjBean.DataBean.Bean.class); List<PrjBean.DataBean.Bean> datas = JsonUtils.parseArray(dataJson.toString(), PrjBean.DataBean.Bean.class);
if (datas == null || datas.size() <= 0) { if (datas != null && datas.size() > 0) {
return; //打印位置和需要打印的數據
listMap.put(key, datas);
//有沒有不需要切紙的
boolean isHasNoCut = false;
for (PrjBean.DataBean.Bean bean : datas) {
if (bean.getStatus() == 2) {
//需要切紙,prj總數就+1
totalPrj++;
} else {
isHasNoCut = true;
}
}
if (isHasNoCut) {
//有不需要切紙的食物,prj總數+1
totalPrj++;
}
} }
totalPrj += datas.size();
listMap.put(key, datas);//打印位置和需要打印的數據
// PrintPrjKitchen.getPrjMap().put(key, datas); // PrintPrjKitchen.getPrjMap().put(key, datas);
// printDatas.addAll(datas); // printDatas.addAll(datas);
} }
...@@ -355,11 +369,18 @@ public class PrjService extends Service implements ReceiveListener { ...@@ -355,11 +369,18 @@ public class PrjService extends Service implements ReceiveListener {
} }
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> prjMap : listMap.entrySet()) { for (Map.Entry<String, List<PrjBean.DataBean.Bean>> prjMap : listMap.entrySet()) {
for (PrjBean.DataBean.Bean bean : prjMap.getValue()) { for (PrjBean.DataBean.Bean bean : prjMap.getValue()) {
bean.setCurrentIndex(currentIndex);
bean.setTotalPrj(totalPrj); bean.setTotalPrj(totalPrj);
if(bean.getStatus() == 2){
currentIndex++; currentIndex++;
} else {
if(currentIndex == 0){
currentIndex = 1;
} }
} }
bean.setCurrentIndex(currentIndex);
}
currentIndex++;
}
//讀取打印機和通用配置,可以優化 //讀取打印機和通用配置,可以優化
//獲取所有打印機 //獲取所有打印機
PrinterDeviceDaoUtils printerDeviceDaoUtils = new PrinterDeviceDaoUtils(this); PrinterDeviceDaoUtils printerDeviceDaoUtils = new PrinterDeviceDaoUtils(this);
...@@ -472,7 +493,13 @@ public class PrjService extends Service implements ReceiveListener { ...@@ -472,7 +493,13 @@ public class PrjService extends Service implements ReceiveListener {
updatePrjFailure(EpsIds); updatePrjFailure(EpsIds);
} }
} else { } else {
List<Map<String, Bitmap>> bitmapMaps = generatePrintMaps(key, beans, printerDeviceBean); List<Map<String, Bitmap>> bitmapMaps = null;
if (printerDeviceBean.getPrinterDeviceType() == 2 && PrintConstans.PRINT_MODEL_WISEPOS.contains(Build.MODEL)) {
//本機打印並且是BBPOS
} else {
bitmapMaps = generatePrintMaps(key, beans, printerDeviceBean);
}
switch (printerDeviceBean.getPrinterDeviceType()) { switch (printerDeviceBean.getPrinterDeviceType()) {
case 1: case 1:
//IP打印 //IP打印
...@@ -562,6 +589,9 @@ public class PrjService extends Service implements ReceiveListener { ...@@ -562,6 +589,9 @@ public class PrjService extends Service implements ReceiveListener {
} else if (PrintConstans.PRINT_MODEL_N5.contains(model)) { } else if (PrintConstans.PRINT_MODEL_N5.contains(model)) {
//N5打印 //N5打印
n5Print(bitmapMaps); n5Print(bitmapMaps);
} else if (PrintConstans.PRINT_MODEL_WISEPOS.contains(model)) {
//BBPOS,生成data
ToastUtils.show(this, "BBPOS不支持打印處方單");
} else { } else {
updatePrjFailure(getPrintIds(bitmapMaps)); updatePrjFailure(getPrintIds(bitmapMaps));
} }
...@@ -665,12 +695,6 @@ public class PrjService extends Service implements ReceiveListener { ...@@ -665,12 +695,6 @@ public class PrjService extends Service implements ReceiveListener {
* @param beans 打印的食品和其他的一些信息 * @param beans 打印的食品和其他的一些信息
*/ */
private List<Map<String, Bitmap>> generatePrintMaps(String key, List<PrjBean.DataBean.Bean> beans, PrinterDeviceBean printerDeviceBean) { private List<Map<String, Bitmap>> generatePrintMaps(String key, List<PrjBean.DataBean.Bean> beans, PrinterDeviceBean printerDeviceBean) {
// //食品合併
// for (PrjBean.DataBean.Bean bean : beans) {
// for (PrjBean.DataBean.Bean bean2 : beans) {
//
// }
// }
PrintPrjKitchen printPrjKitchen = new PrintPrjKitchen(); PrintPrjKitchen printPrjKitchen = new PrintPrjKitchen();
//這個Map的key是這張PRJ的所有PRJ記錄的id,然後會同時打印多張,所以是一個List集合 //這個Map的key是這張PRJ的所有PRJ記錄的id,然後會同時打印多張,所以是一個List集合
List<Map<String, Bitmap>> bitmapMaps = new ArrayList<>(); List<Map<String, Bitmap>> bitmapMaps = new ArrayList<>();
...@@ -769,75 +793,12 @@ public class PrjService extends Service implements ReceiveListener { ...@@ -769,75 +793,12 @@ public class PrjService extends Service implements ReceiveListener {
EpsIds = ""; EpsIds = "";
} }
// @Override
// public void onStateChanged(int state, PrinterDeviceBean printerDeviceBean) {
// String tip = "加載中";
// switch (state) {
// case PrintSocketHolder.ERROR_0:
// tip = "打印成功";
// break;
// case PrintSocketHolder.ERROR_1:
// tip = "生成打印數據失敗";
// break;
// case PrintSocketHolder.ERROR_2:
// case PrintSocketHolder.ERROR_3:
// tip = "連接打印機失敗";
// break;
// case PrintSocketHolder.ERROR_4:
// tip = "寫入測試頁面數據失敗";
// break;
// case PrintSocketHolder.ERROR_5:
// tip = "必要的參數不能為空";
// break;
// case PrintSocketHolder.STATE_0:
// case PrintSocketHolder.STATE_1:
// tip = "開始創建連接";
// break;
// case PrintSocketHolder.STATE_2:
// tip = "創建連接成功,開始發送數據";
// break;
// case PrintSocketHolder.STATE_3:
// tip = "開始寫入數據";
// break;
// case PrintSocketHolder.STATE_4:
// tip = "關閉中";
// break;
// }
// Log.e(TAG, "打印機狀態:" + tip);
// }
//
// @Override
// public void onResult(int errorCode, PrinterDeviceBean printerDeviceBean) {
// switch (errorCode) {
// case PrintSocketHolder.ERROR_0:
// //更新狀態
// updatePrjState(3);
// Log.e(TAG, "打印成功");
// break;
// case PrintSocketHolder.ERROR_1:
// break;
// case PrintSocketHolder.ERROR_2:
// Log.e(TAG, "创建Socket失败");
// //再次打開輪詢
// updatePrjState(1);
// case PrintSocketHolder.ERROR_3:
// Log.e(TAG, "获取输出流失败");
// break;
// case PrintSocketHolder.ERROR_4:
// Log.e(TAG, "写入测试页面数据失败");
// break;
// case PrintSocketHolder.ERROR_5:
// Log.e(TAG, "必要参数不能为空");
// break;
// }
// }
@Override @Override
public void onPtrReceive(Printer printer, int i, PrinterStatusInfo printerStatusInfo, String s) { public void onPtrReceive(Printer printer, int i, PrinterStatusInfo printerStatusInfo, String s) {
//針式打印回調 //針式打印回調
if (i == 0) { if (i == 0) {
//打印成功 //打印成功
updatePrjFailure(EpsIds); updatePrjSuccess(EpsIds);
} else { } else {
//打印失敗 //打印失敗
updatePrjFailure(EpsIds); updatePrjFailure(EpsIds);
......
package com.joe.print.mvp.print.utils;
import android.content.Intent;
import android.util.Xml;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.bean.WiseposBean;
import com.joe.print.mvp.print.PrintListener;
import com.joe.print.mvp.ui.activity.PrintActivity;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.ConnectException;
import java.util.concurrent.TimeoutException;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
public class BBposPrint {
public void print(String printData, PrintListener listener) {
WiseposBean wiseposBean = new WiseposBean();
OkHttp3Utils.get("http://localhost:8080/pos?transactionType=PRINT&isExternal=false&apiVersion=21&printData=" + printData).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
analysisPrintResult(s, wiseposBean, listener);
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
if (e instanceof ConnectException) {
listener.printFile("無法連接打印,請檢查WisePay是否打開");
} else if (e instanceof TimeoutException) {
backPrintActivity();
}
}
@Override
public void onComplete() {
//這個節點解析完成
if (wiseposBean.getState() != null && wiseposBean.getState().equals("SUCCESS")) {
listener.printSuccess();
} else {
listener.printFile("打印失敗");
}
backPrintActivity();
}
private void backPrintActivity() {
Intent intent = new Intent(GsaCloudApplication.getAppContext(), PrintActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
GsaCloudApplication.getAppContext().startActivity(intent);
}
});
}
private void analysisPrintResult(String s, WiseposBean wiseposBean, PrintListener listener) {
XmlPullParser xmlPullParser = Xml.newPullParser();
try {
xmlPullParser.setInput(new ByteArrayInputStream(s.getBytes()), "utf-8");
int eventType = xmlPullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
//開始解析
break;
case XmlPullParser.START_TAG:
//解析到某一個節點
String xmlName = xmlPullParser.getName();
switch (xmlName) {
case "status":
wiseposBean.setState(xmlPullParser.nextText());
break;
case "ErrorMessage":
if (xmlPullParser.nextText().equals("Please login first")) {
listener.printFile("請先登錄WisePay");
} else {
listener.printFile("" + xmlPullParser.nextText());
}
break;
case "requestType":
wiseposBean.setRequestType(xmlPullParser.nextText());
break;
default:
break;
}
break;
case XmlPullParser.END_TAG:
break;
default:
break;
}
eventType = xmlPullParser.next();
}
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
}
}
}
...@@ -6,6 +6,7 @@ import android.content.Intent; ...@@ -6,6 +6,7 @@ import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
...@@ -230,37 +231,46 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print ...@@ -230,37 +231,46 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
if (isShowDialog) { if (isShowDialog) {
initDialog(); initDialog();
} }
// if (defaultPrint.getPrinterDeviceType() == 2 && PrintConstans.PRINT_MODEL_WISEPOS.contains(Build.MODEL)) { Map<String, List<Bitmap>> listMap = null;
// //本機打印並且是BBPOS List<Bitmap> zoomBitmaps = null;
//
// String printData = null;
// if (defaultPrint.getPrinterDeviceType() == 2 && PrintConstans.PRINT_MODEL_WISEPOS.contains(Build.MODEL)) {
// } else { //本機打印並且是BBPOS
//獲得對應的圖片 printData = printerInIt.getPrintData(mContext, defaultPrint);
Map<String, List<Bitmap>> listMap = printerInIt.getPrintBitmapByCount(mContext, defaultPrint); if (printData == null) {
printFile("暫不支持打印此單");
return;
}
} else {
listMap = printerInIt.getPrintBitmapByCount(mContext, defaultPrint);
if (listMap != null) { if (listMap != null) {
List<Bitmap> zoomBitmaps = listMap.get(""); zoomBitmaps = listMap.get("");
} else {
printFile("暫不支持打印此單");
return;
}
if (zoomBitmaps != null && zoomBitmaps.size() > 0) { if (zoomBitmaps != null && zoomBitmaps.size() > 0) {
} else {
//打印失敗
printFile("打印失敗,生成打印數據失敗");
}
}
//獲得對應的圖片
if (defaultPrint.getPrinterDeviceType() == 1) { if (defaultPrint.getPrinterDeviceType() == 1) {
//IP打印 //IP打印
printerInIt.ipDevicePrint(defaultPrint, zoomBitmaps); printerInIt.ipDevicePrint(defaultPrint, zoomBitmaps);
} else if (defaultPrint.getPrinterDeviceType() == 2) { } else if (defaultPrint.getPrinterDeviceType() == 2) {
//本地N5或Sunmi打印 //本地N5或Sunmi打印
printerInIt.locationPrint(zoomBitmaps, this); printerInIt.locationPrint(zoomBitmaps, printData, this);
} else if (defaultPrint.getPrinterDeviceType() == 3) { } else if (defaultPrint.getPrinterDeviceType() == 3) {
//USB打印打印 //USB打印打印
printerInIt.usbPrint(mContext, zoomBitmaps); printerInIt.usbPrint(mContext, zoomBitmaps);
} else { } else {
printFile("未找到對應的打印類型"); printFile("未找到對應的打印類型");
} }
} else {
//打印失敗
printFile("打印失敗,生成打印數據失敗");
}
} else {
printFile("打印失敗,打印次數為0");
}
// }
} }
} }
......
...@@ -10,7 +10,6 @@ import androidx.appcompat.app.AppCompatActivity; ...@@ -10,7 +10,6 @@ import androidx.appcompat.app.AppCompatActivity;
import com.epson.epos2.printer.Printer; import com.epson.epos2.printer.Printer;
import com.epson.epos2.printer.PrinterStatusInfo; import com.epson.epos2.printer.PrinterStatusInfo;
import com.epson.epos2.printer.ReceiveListener; import com.epson.epos2.printer.ReceiveListener;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail; import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils; import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
...@@ -34,7 +33,7 @@ import io.reactivex.disposables.Disposable; ...@@ -34,7 +33,7 @@ import io.reactivex.disposables.Disposable;
public class PrintTestActivity extends AppCompatActivity implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener, ReceiveListener { public class PrintTestActivity extends AppCompatActivity implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener, ReceiveListener {
private int lineLength = 42;//一行42個 private int lineLength = 42;//一行42個 17.5
private static int foodNameSpace = 16; private static int foodNameSpace = 16;
private static int foodNumSpace = 8; private static int foodNumSpace = 8;
private static int foodAmountSpace = 10; private static int foodAmountSpace = 10;
...@@ -50,7 +49,7 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH ...@@ -50,7 +49,7 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
int spaceLength = (int) Math.ceil(MaxLength - getChineseValueLength(text)); int spaceLength = (int) Math.ceil(MaxLength - getChineseValueLength(text));
StringBuilder space = new StringBuilder(); StringBuilder space = new StringBuilder();
for (int i = 0; i < spaceLength; i++) { for (int i = 0; i < spaceLength; i++) {
space.append(" "); space.append("_");
} }
space.append(text); space.append(text);
return space.toString(); return space.toString();
...@@ -61,7 +60,7 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH ...@@ -61,7 +60,7 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
StringBuilder space = new StringBuilder(); StringBuilder space = new StringBuilder();
space.append(text); space.append(text);
for (int i = 0; i < spaceLength; i++) { for (int i = 0; i < spaceLength; i++) {
space.append(" "); space.append("_");
} }
return space.toString(); return space.toString();
} }
...@@ -182,22 +181,16 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH ...@@ -182,22 +181,16 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
printerFinder.startFinder(); printerFinder.startFinder();
List<OrderDetail> foodList = new ArrayList<>(); List<OrderDetail> foodList = new ArrayList<>();
foodList.add(new OrderDetail("Thịt bò não trong nước sốt nâu", 5, 0)); foodList.add(new OrderDetail("牛肉拉麵", 10, 1));
foodList.add(new OrderDetail(" 紅燒牛肉 拉麵", 10, 1)); foodList.add(new OrderDetail("紅燒牛肉拉麵", 200, 2));
foodList.add(new OrderDetail("เนื้อตุ๋น", 200, 2));
foodList.add(new OrderDetail("牛肉の角煮アスティフェン", 1000, 30));
findViewById(R.id.btn_test).setOnClickListener(view -> { findViewById(R.id.btn_test).setOnClickListener(view -> {
//打印測試 //打印測試
String stringBuilder = "<html><body>" + String stringBuilder = "<html><body>" +
getPLable(GsaCloudApplication.getBrandName()) + getPLable("GingerSoft") +
getPLable(GsaCloudApplication.getRestaurantName()) + getPLable("Gs1") +
getPLable(getLineChar(lineLength,"_")) + getPLable("開檯時間:" + TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)) +
getPLable("餐檯: " + "111") + getPLable(getLineChar(lineLength, "_")) +
getPLable("人數:23") +
getPLable("123456789123456789123456789123456789123456789") +
getPLable("日期:" + TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)) +
getPLable(getLineChar(lineLength,"_")) +
getPLable(getFoodListStr(foodList)) + getPLable(getFoodListStr(foodList)) +
"</body></html>"; "</body></html>";
OkHttp3Utils.get("http://localhost:8080/pos?transactionType=PRINT&isExternal=false&apiVersion=21&printData=" + stringBuilder).subscribe(new Observer<String>() { OkHttp3Utils.get("http://localhost:8080/pos?transactionType=PRINT&isExternal=false&apiVersion=21&printData=" + stringBuilder).subscribe(new Observer<String>() {
...@@ -223,7 +216,7 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH ...@@ -223,7 +216,7 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
}); });
} }
public String getLineChar(int size, String str){ public String getLineChar(int size, String str) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
stringBuilder.append(str); stringBuilder.append(str);
...@@ -231,33 +224,12 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH ...@@ -231,33 +224,12 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
return stringBuilder.toString(); return stringBuilder.toString();
} }
public static void main(String[] args) {
List<OrderDetail> foodList = new ArrayList<>();
foodList.add(new OrderDetail("牛肉", 0.5, 3));
foodList.add(new OrderDetail("紅燒牛肉", 5, 0));
foodList.add(new OrderDetail(" 紅燒牛肉 拉麵", 10, 1));
foodList.add(new OrderDetail("康師傅紅燒牛肉麵", 200, 2));
foodList.add(new OrderDetail("紅燒牛肉炒康師傅", 1000, 30));
System.out.print(getFoodListStr(foodList));
}
public static String getFoodListStr(List<OrderDetail> foodList) { public static String getFoodListStr(List<OrderDetail> foodList) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<strong>");
for (OrderDetail detail : foodList) { for (OrderDetail detail : foodList) {
// stringBuilder.append(getLineFood(detail.getProductName(), detail.getNumber(), detail.getPrice())); stringBuilder.append(getLineFood(detail.getProductName(), detail.getNumber(), detail.getPrice()));
stringBuilder.append("<div align=\"left\">") stringBuilder.append("<br/>");
.append(detail.getProductName()) }
.append("</div>");
stringBuilder.append("<div align=\"right\">")
.append("X")
.append(detail.getNumber())
.append(" $")
.append(detail.getPrice())
.append("</div>");
}
stringBuilder.append("</strong>");
return stringBuilder.toString(); return stringBuilder.toString();
} }
...@@ -266,24 +238,16 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH ...@@ -266,24 +238,16 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < stringList.size(); i++) { for (int i = 0; i < stringList.size(); i++) {
if (i == 0) { if (i == 0) {
stringBuilder.append("<p>") stringBuilder.append(getSpaceByTextLength2(stringList.get(i), foodNameSpace));
.append(getSpaceByTextLength2(stringList.get(i), foodNameSpace)) String foodNumStr = "X" + foodNum;
.append(getSpaceByTextLength("X" + foodNum, foodNumSpace)) stringBuilder.append(getSpaceByTextLength(foodNumStr, foodNumSpace));
.append(getSpaceByTextLength("$" + foodAmount, foodAmountSpace)) stringBuilder.append(getSpaceByTextLength("$" + foodAmount, foodAmountSpace));
.append("</p>");
// stringBuilder.append(getSpaceByTextLength2(stringList.get(i), foodNameSpace));
// String foodNumStr = "X" + foodNum;
// stringBuilder.append(getSpaceByTextLength(foodNumStr, foodNumSpace));
// stringBuilder.append(getSpaceByTextLength("$" + foodAmount, foodAmountSpace));
} else { } else {
stringBuilder.append("<p>") stringBuilder.append(stringList.get(i));
.append(stringList.get(i)) }
.append("</p>"); if (i != stringList.size() - 1) {
} stringBuilder.append("<br/>");
// if (i != stringList.size() - 1) { }
// stringBuilder.append("<br/>");
stringBuilder.append("\n");
// }
} }
return stringBuilder.toString(); return stringBuilder.toString();
} }
......
...@@ -15,6 +15,15 @@ import android.widget.Chronometer; ...@@ -15,6 +15,15 @@ import android.widget.Chronometer;
import android.widget.SimpleAdapter; import android.widget.SimpleAdapter;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage; import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.OpenTableManage; import com.gingersoft.gsa.cloud.base.order.bean.mealManger.OpenTableManage;
...@@ -61,14 +70,6 @@ import java.util.Map; ...@@ -61,14 +70,6 @@ import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
import butterknife.BindView; import butterknife.BindView;
import butterknife.OnClick; import butterknife.OnClick;
...@@ -178,7 +179,6 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese ...@@ -178,7 +179,6 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
@Override @Override
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
initOrderDetail(); initOrderDetail();
initTopInfo(); initTopInfo();
mPresenter.initTopFunctionData(); mPresenter.initTopFunctionData();
......
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