Commit 5e45c2a8 by Wyh

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

Signed-off-by: Wyh <1239658231>
parent cc2bb8ac
......@@ -51,7 +51,7 @@ android {
/**
* 版本号
*/
schemaVersion 16
schemaVersion 17
/**
* greendao输出dao的数据库操作实体类文件夹(相对路径 包名+自定义路径名称,包将创建于包名的直接路径下)
*/
......
......@@ -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.other.SPUtils;
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.PrintConstans;
import com.gingersoft.gsa.cloud.constans.UserConstans;
import com.gingersoft.gsa.cloud.database.DaoManager;
import com.gingersoft.gsa.cloud.database.bean.ExpandInfo;
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.util.PrinterUtil;
import com.jess.arms.base.BaseApplication;
......@@ -105,7 +105,7 @@ public class GsaCloudApplication extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
this.mAppContext = this;
mAppContext = this;
CC.enableVerboseLog(true);
CC.enableDebug(true);
CC.enableRemoteCC(true);
......@@ -227,6 +227,8 @@ public class GsaCloudApplication extends BaseApplication {
RetrofitUrlManager.getInstance().putDomain("ricepon_activities", HttpsConstans.ricepon_activities);
///ricepon-cloud-gsa/api/請求地址
RetrofitUrlManager.getInstance().putDomain("ricepon_cloud_gsa", HttpsConstans.ricepon_cloud_gsa);
//61177
RetrofitUrlManager.getInstance().putDomain("ricepon_member", HttpsConstans.RICEPON_MEMBER_61177);
}
private void initPrint() {
......
......@@ -20,4 +20,43 @@ public class BaseResult {
private String errMsg;
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 {
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 {
this.nameSecond = 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;
import android.widget.EditText;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
......@@ -23,6 +25,15 @@ public class TextUtil {
!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) {
if (str == null || str.length() == 0 ||
str.equals("null") || str.equals("undefined")) {
......@@ -53,9 +64,10 @@ public class TextUtil {
c[i] = (char) 32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
if (c[i] > 65280 && c[i] < 65375) {
c[i] = (char) (c[i] - 65248);
}
}
return new String(c);
}
......
......@@ -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;
* @Description: TODO(时间工具类)
*/
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_YMDHM = new SimpleDateFormat("yyyy-MM-dd HH:mm");//, Locale.CHINESE
......@@ -1446,7 +1507,7 @@ public class TimeUtils {
return time;
}
public static String parseDateToString(Date date, SimpleDateFormat dateFormat){
public static String parseDateToString(Date date, SimpleDateFormat dateFormat) {
return dateFormat.format(date);
}
......
......@@ -49,6 +49,182 @@ public class RestaurantExpandInfo {
//估清控制食品字體大小
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 {
private int AutoPrinterPaper;//送單自動打印上菜紙
private int ToPrintQRCode;//結賬是否打印積分二維碼
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 {
//---------------------------------------System請求地址----------------------------------------------------------------------------------
public static String SYSTEM_PATH = "/ricepon-system/api/";
public static String API_RICEPON_MEMBER = "/ricepon-member/api/";
//--------------------------------------配置-----------------------------------------------------------------------------------
......@@ -86,7 +87,6 @@ public class HttpsConstans {
*/
public static int isFormal = 0;
//沽清控制地址
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 {
public static String SYSTEM_URL;
public static String RICEPON_MEMBER_SERVER_ADDRESS;
public static String RICEPON_MEMBER_61177;
public static void init(Context context) {
isFormal = (int) SPUtils.get(context, "isFormal", -1);
if (isFormal == -1 && BuildConfig.DEBUG) {
......@@ -119,17 +123,20 @@ public class HttpsConstans {
}
switch (isFormal) {
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_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_FORMAL + CLOUD_GSA_API_PATH;
ROOT_URL = ROOT_FORMAL_URL;
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
RICEPON_MEMBER_SERVER_ADDRESS = WECHAR_REPORT_FORMAL_ADDRESS + WECHAR_REPORT_PATH;
SYSTEM_URL = HTTP_ADDRESS_URL_FORMAL + SYSTEM_PATH;
ROOT_SERVER = HTTP_ADDRESS_URL_FORMAL;
break;
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_SERVER_ADDRESS_FORMAL = HTTP_ADDRESS_URL_HK + CLOUD_GSA_API_PATH;
ROOT_URL = ROOT_HK_TEST_URL;
......@@ -139,7 +146,8 @@ public class HttpsConstans {
ROOT_SERVER = HTTP_ADDRESS_URL_HK;
break;
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_SERVER_ADDRESS_FORMAL = ROOT_SERVER_ZHI_WANG_HK;
ROOT_URL = ROOT_SZ_URL;
......@@ -148,7 +156,8 @@ public class HttpsConstans {
SYSTEM_URL = ROOT_SERVER_ZHI_WANG_HK + SYSTEM_PATH;
break;
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_SERVER_ADDRESS_FORMAL = ROOT_SERVER_YOU_CHANG_HK;
ROOT_URL = ROOT_SZ_URL;
......@@ -157,7 +166,8 @@ public class HttpsConstans {
SYSTEM_URL = ROOT_SERVER_YOU_CHANG_HK + SYSTEM_PATH;
break;
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_SERVER_ADDRESS_FORMAL = ROOT_SERVER_SHI_SHU_HK;
ROOT_URL = ROOT_SZ_URL;
......@@ -173,8 +183,9 @@ public class HttpsConstans {
ricepon_gsa = HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_GSA;
ricepon_activities = HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_ACTIVITIES;
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_order;
public static String member_web_ricepon_gsa;
......@@ -185,7 +196,4 @@ public class HttpsConstans {
public static String ricepon_member;
}
\ No newline at end of file
......@@ -4,14 +4,13 @@ import android.graphics.Color;
import android.text.TextUtils;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Transient;
import java.util.Date;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Transient;
import lombok.Data;
/**
......@@ -414,4 +413,163 @@ public class ComboItem {
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 {
public Discount() {
}
public long getMemberId() {
return memberId;
}
public void setMemberId(long memberId) {
this.memberId = memberId;
}
/**
* 計算折扣金額
......
......@@ -50,16 +50,16 @@ public class ExpandInfo {
//是否被編輯了
@Transient
private boolean isUpdate = false;
private String showName;
public static final int data_type_int = 1;
public static final int data_type_string = 2;
public static final int data_type_boolean = 3;
public static final int data_type_date = 4;
@Generated(hash = 372331474)
@Generated(hash = 1155994232)
public ExpandInfo(Long id, int restaurantId, String settingName,
Integer valueInt, String valueChar, String valueDatetime, String remark,
int dataType) {
int dataType, String showName) {
this.id = id;
this.restaurantId = restaurantId;
this.settingName = settingName;
......@@ -68,6 +68,7 @@ public class ExpandInfo {
this.valueDatetime = valueDatetime;
this.remark = remark;
this.dataType = dataType;
this.showName = showName;
}
@Generated(hash = 9429432)
public ExpandInfo() {
......@@ -128,4 +129,12 @@ public class ExpandInfo {
public void setUpdate(boolean 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;
// 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 static final int SCHEMA_VERSION = 16;
public static final int SCHEMA_VERSION = 17;
/** Creates underlying database table using DAOs. */
public static void createAllTables(Database db, boolean ifNotExists) {
......
......@@ -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 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 ShowName = new Property(8, String.class, "showName", false, "SHOW_NAME");
}
......@@ -54,7 +55,8 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
"\"VALUE_CHAR\" TEXT," + // 4: valueChar
"\"VALUE_DATETIME\" TEXT," + // 5: valueDatetime
"\"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. */
......@@ -98,6 +100,11 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
stmt.bindString(7, remark);
}
stmt.bindLong(8, entity.getDataType());
String showName = entity.getShowName();
if (showName != null) {
stmt.bindString(9, showName);
}
}
@Override
......@@ -135,6 +142,11 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
stmt.bindString(7, remark);
}
stmt.bindLong(8, entity.getDataType());
String showName = entity.getShowName();
if (showName != null) {
stmt.bindString(9, showName);
}
}
@Override
......@@ -152,7 +164,8 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // valueChar
cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5), // valueDatetime
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;
}
......@@ -167,6 +180,7 @@ public class ExpandInfoDao extends AbstractDao<ExpandInfo, Long> {
entity.setValueDatetime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
entity.setRemark(cursor.isNull(offset + 6) ? null : cursor.getString(offset + 6));
entity.setDataType(cursor.getInt(offset + 7));
entity.setShowName(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8));
}
@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 @@
android:layout_height="wrap_content"
android:layout_weight="0.15"
android:layout_gravity="bottom"
tools:text="x1111111111111111111111111"
tools:text="x11111111111111111000011111111"
android:gravity="right|center_vertical" />
<TextView
android:id="@+id/tv_food_price"
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_gravity="bottom"
android:layout_marginLeft="@dimen/dp_5"
......
......@@ -467,7 +467,9 @@
<color name="color_3b">#3b3b3b</color>
<color name="color_18">#181818</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="order_state0_color">#009788</color>
......
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.IView;
import java.util.Map;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
......@@ -22,7 +25,7 @@ import io.reactivex.Observable;
*/
public interface SendOrderContract {
interface View extends IView {
void loadMemberInfo(MemberAddressInfoBean.DataBean data);
}
interface Model extends IModel {
......@@ -30,5 +33,9 @@ public interface SendOrderContract {
* 獲取配送信息
*/
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;
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.server.SendOrderServer;
import com.google.gson.Gson;
......@@ -14,6 +15,7 @@ import java.util.Map;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
......@@ -52,4 +54,14 @@ public class SendOrderModel extends BaseModel implements SendOrderContract.Model
public Observable<String> getConfirmTakeawayOrderData(Map<String, Object> 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;
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.model.MemberAddressInfoBean;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
/**
......@@ -79,7 +93,149 @@ public class SendOrderPresenter extends BasePresenter<SendOrderContract.Model, 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
}
@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;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.delivery_pick_mode.mvp.model.MemberAddressInfoBean;
import java.util.Map;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
public interface SendOrderServer {
......@@ -14,4 +21,12 @@ public interface SendOrderServer {
@GET("member/getAddressAndResSetting?" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
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;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
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.delivery_pick_mode.R;
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.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.ui.adapter.DeliveryAdapter;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
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.Calendar;
import java.util.List;
import butterknife.BindView;
......@@ -38,8 +47,9 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
*/
public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implements SendOrderContract.View, View.OnClickListener {
@BindView(R2.id.send_order_top_bar)
QMUITopBar topBar;
QMUITopBar sendOrderTopBar;
@BindView(R2.id.rv_send_order_foods)
RecyclerView rvSendOrderFoods;
@BindView(R2.id.rv_send_order_bills)
......@@ -60,30 +70,36 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen
EditText edSendOrderAddress;
@BindView(R2.id.iv_select_address_arrow)
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)
TextView tvSendOrderDistributionModeText;
@BindView(R2.id.rv_send_order_distribution_mode)
RecyclerView rvSendOrderDistributionMode;
@BindView(R2.id.rg_send_order_distribution_mode)
RadioGroup rgSendOrderDistributionMode;
@BindView(R2.id.tv_send_order_pay_mode_text)
TextView tvSendOrderPayModeText;
@BindView(R2.id.rv_send_order_pay_mode)
RecyclerView rvSendOrderPayMode;
@BindView(R2.id.rg_send_order_pay_mode)
RadioGroup rgSendOrderPayMode;
@BindView(R2.id.tv_send_order_delivery_time_text)
TextView tvSendOrderDeliveryTimeText;
@BindView(R2.id.tv_delivery_time_type)
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)
TextView tvContinueAddFood;
@BindView(R2.id.tv_confirm_order)
TextView tvConfirmOrder;
private List<String> labelStrings = Arrays.asList("家", "公司", "學校", "醫院");
private List<String> distributionModes = Arrays.asList("本店配送", "物流配送");
private List<String> payTypes = Arrays.asList("貨到付款", "立即支付");
@BindView(R2.id.layout_btn)
LinearLayout layoutBtn;
@BindView(R2.id.view_delivery_time_mode_line)
View deliveryTimeLine;
@BindView(R2.id.group_time)
Group timeGroup;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
......@@ -102,17 +118,7 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen
@Override
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
......@@ -122,9 +128,9 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen
@Override
public void initTopBar() {
topBar.setTitle("送單信息");
topBar.setBackgroundColor(ContextCompat.getColor(this, R.color.theme_color));
topBar.addLeftImageButton(R.drawable.icon_return, R.id.iv_left_back).setOnClickListener(v -> killMyself());
sendOrderTopBar.setTitle("送單信息");
sendOrderTopBar.setBackgroundColor(ContextCompat.getColor(this, R.color.theme_color));
sendOrderTopBar.addLeftImageButton(R.drawable.icon_return, R.id.iv_left_back).setOnClickListener(v -> killMyself());
}
@Override
......@@ -173,12 +179,88 @@ public class SendOrderActivity extends BaseActivity<SendOrderPresenter> implemen
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
public void onClick(View v) {
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 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/layout_btn"
android:layout_below="@id/rv_send_order_bills"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
app:layout_constraintTop_toBottomOf="@id/rv_send_order_bills">
<TextView
android:id="@+id/tv_send_order_name_text"
android:id="@+id/tv_send_order_phone_text"
style="@style/otherOrderSendOrder_textStyle"
android:layout_width="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_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@id/ed_send_order_name" />
<EditText
android:id="@+id/ed_send_order_name"
android:id="@+id/ed_send_order_phone"
style="@style/otherOrderSendOrder_textStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@null"
android:gravity="right"
android:hint="@string/please_input_name_or_select_members"
android:inputType="text"
android:hint="@string/please_input_phone"
android:inputType="phone"
android:labelFor="@id/tv_send_order_name_text"
android:padding="@dimen/edit_padding"
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" />
<ImageView
android:id="@+id/iv_select_member_arrow"
android:layout_width="wrap_content"
android:id="@+id/iv_send_order_search"
android:layout_width="@dimen/dp_40"
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"
android:padding="@dimen/dp_10"
android:src="@drawable/ic_search"
app:layout_constraintBottom_toBottomOf="@id/ed_send_order_phone"
app:layout_constraintLeft_toRightOf="@id/ed_send_order_phone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/ed_send_order_name" />
app:layout_constraintTop_toTopOf="@id/ed_send_order_phone" />
<TextView
android:id="@+id/tv_send_order_phone_text"
android:id="@+id/tv_send_order_name_text"
style="@style/otherOrderSendOrder_textStyle"
android:layout_width="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_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@id/ed_send_order_phone" />
<EditText
android:id="@+id/ed_send_order_phone"
android:id="@+id/ed_send_order_name"
style="@style/otherOrderSendOrder_textStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@null"
android:gravity="right"
android:hint="@string/please_input_phone"
android:inputType="phone"
android:hint="@string/please_input_name_or_select_members"
android:inputType="text"
android:labelFor="@id/tv_send_order_name_text"
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_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" />
<View
......@@ -151,7 +163,7 @@
android:padding="@dimen/edit_padding"
app:layout_constraintLeft_toRightOf="@id/tv_send_order_name_text"
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
android:id="@+id/iv_select_address_arrow"
......@@ -171,40 +183,55 @@
app:layout_constraintTop_toBottomOf="@id/ed_send_order_address" />
<TextView
android:id="@+id/tv_send_order_label_text"
android:id="@+id/tv_send_order_distribution_mode_text"
style="@style/otherOrderSendOrder_textStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label"
app:layout_constraintBottom_toBottomOf="@id/rv_send_order_label"
android:text="@string/distribution_mode"
app:layout_constraintBottom_toBottomOf="@id/rg_send_order_distribution_mode"
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
android:id="@+id/rv_send_order_label"
<RadioGroup
android:id="@+id/rg_send_order_distribution_mode"
android:layout_width="0dp"
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_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/ed_send_order_address" />
app:layout_constraintTop_toBottomOf="@id/ed_send_order_address">
<TextView
android:id="@+id/tv_send_order_distribution_mode_text"
style="@style/otherOrderSendOrder_textStyle"
<RadioButton
android:id="@+id/rb_delivery_shop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/distribution_mode"
app:layout_constraintBottom_toBottomOf="@id/rv_send_order_distribution_mode"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@id/rv_send_order_distribution_mode" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_send_order_distribution_mode"
android:layout_width="0dp"
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="@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"
app:layout_constraintLeft_toLeftOf="@id/rv_send_order_label"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/rv_send_order_label" />
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="@string/logistics_distribution"
android:textColor="@color/s_send_order_radio"
android:textSize="@dimen/dp_16" />
</RadioGroup>
<TextView
android:id="@+id/tv_send_order_pay_mode_text"
......@@ -212,17 +239,50 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_constraintTop_toTopOf="@id/rv_send_order_pay_mode" />
app:layout_constraintTop_toTopOf="@id/rg_send_order_pay_mode" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_send_order_pay_mode"
<RadioGroup
android:id="@+id/rg_send_order_pay_mode"
android:layout_width="0dp"
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_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
android:id="@+id/tv_send_order_delivery_time_text"
......@@ -236,26 +296,100 @@
<TextView
android:id="@+id/tv_delivery_time_type"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_width="67dp"
android:layout_height="25dp"
android:layout_marginLeft="@dimen/dp_5"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_2"
android:layout_marginTop="@dimen/dp_16"
android:layout_weight="1"
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_constraintRight_toLeftOf="@id/iv_delivery_time_type"
app:layout_constraintTop_toBottomOf="@id/rv_send_order_pay_mode" />
app:layout_constraintTop_toBottomOf="@id/rg_send_order_pay_mode" />
<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_height="0dp"
android:src="@drawable/ic_black_next_arrow"
android:layout_height="wrap_content"
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_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_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>
<LinearLayout
......@@ -296,8 +430,6 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/tv_continue_add_food"
app:layout_constraintRight_toRightOf="parent" />
</LinearLayout>
</RelativeLayout>
</ScrollView>
\ No newline at end of file
......@@ -12,5 +12,7 @@
<string name="distribution_mode">配送方式:</string>
<string name="pay_mode">支付類型:</string>
<string name="delivery_time">配送時間:</string>
<string name="delivery_shop">本店派送</string>
<string name="logistics_distribution">物流配送</string>
</resources>
......@@ -8,6 +8,7 @@ import com.jess.arms.mvp.IView;
import java.util.List;
import io.reactivex.Observable;
import okhttp3.RequestBody;
public interface ExpandListContract {
......@@ -19,5 +20,7 @@ public interface ExpandListContract {
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<BaseResult> getExpandList(int restaurantId);
Observable<BaseResult> updateExpandInfo(RequestBody requestBody);
}
}
......@@ -4,7 +4,6 @@ import android.app.Application;
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.model.bean.FunctionBean;
import com.gingersoft.gsa.cloud.main.mvp.model.service.ExpandListService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
......@@ -14,6 +13,7 @@ import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@ActivityScope
......@@ -40,4 +40,9 @@ public class ExpandListModel extends BaseModel implements ExpandListContract.Mod
public Observable<BaseResult> getExpandList(int 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;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface ExpandListService {
@GET("restaurant/ext/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
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;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
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.main.mvp.contract.ExpandListContract;
import com.jess.arms.di.scope.ActivityScope;
......@@ -21,6 +23,8 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.MediaType;
import okhttp3.RequestBody;
@ActivityScope
......@@ -63,11 +67,33 @@ public class ExpandListPresenter extends BasePresenter<ExpandListContract.Model,
if (result.getData() != null) {
List<ExpandInfo> expandInfoList = JsonUtils.parseArray(result.getData(), ExpandInfo.class);
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;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
......@@ -18,7 +17,6 @@ import com.gingersoft.gsa.cloud.database.bean.ExpandInfo;
import com.gingersoft.gsa.cloud.main.R;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.text.DateFormat;
import java.text.ParseException;
......@@ -28,7 +26,7 @@ import java.util.List;
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);
for (int i = 0; i < data.size(); i++) {
data.get(i).setDataType(i);
......@@ -37,7 +35,7 @@ public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHold
@Override
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);
Switch btn = baseViewHolder.getView(R.id.switch_expand_boolean);
TextView tvTime = baseViewHolder.getView(R.id.tv_expand_time);
......@@ -75,6 +73,7 @@ public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHold
tvTime.setVisibility(View.VISIBLE);
Calendar calendar = Calendar.getInstance();
if (function.getValueDatetime() != null) {
try {
calendar.setTime(DateFormat.getDateTimeInstance().parse(function.getValueDatetime()));
} catch (ParseException e) {
......@@ -96,6 +95,7 @@ public class ExpandListAdapter extends BaseQuickAdapter<ExpandInfo, BaseViewHold
.show();
});
}
} else {
btn.setVisibility(View.GONE);
tvTime.setVisibility(View.GONE);
......
......@@ -2,10 +2,12 @@ package com.joe.print.mvp.print;
import android.content.Context;
import android.graphics.Bitmap;
import android.text.TextUtils;
import android.widget.LinearLayout;
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.PayMethod;
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;
......@@ -39,7 +41,49 @@ public class PrintBill extends PrinterRoot {
@Override
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
......
......@@ -6,6 +6,10 @@ import android.view.LayoutInflater;
import android.view.View;
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.order.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.MyOrderManage;
......@@ -25,9 +29,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
/**
* 打印外賣接單 結賬單
*/
......@@ -240,22 +241,4 @@ public class PrintOtherOrderClosing extends PrinterRoot {
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 {
} else {
tvTakeTime.setVisibility(View.GONE);
}
if (RestaurantExpandInfoUtils.getValue(ExpandConstant.PrintFirstOrder, false)) {
tvFirstOrder.setText("<頭單>");
tvFirstOrder.setVisibility(prjBean.getIsFirstSendOrder() == 1 ? View.VISIBLE : View.GONE);
} else {
tvFirstOrder.setVisibility(View.GONE);
}
if (RestaurantExpandInfoUtils.getValue(ExpandConstant.PrintStatisticsAmount, false)) {
tvPrintQuantity.setText(prjBean.getQuantity() + "");
} else {
tvPrintQuantity.setVisibility(View.GONE);
}
// if (RestaurantExpandInfoUtils.getValue(ExpandConstant.PrintFirstOrder, false)) {
// tvFirstOrder.setText("<頭單>");
// tvFirstOrder.setVisibility(prjBean.getIsFirstSendOrder() == 1 ? View.VISIBLE : View.GONE);
// } else {
// tvFirstOrder.setVisibility(View.GONE);
// }
//
// if (RestaurantExpandInfoUtils.getValue(ExpandConstant.PrintStatisticsAmount, false)) {
// tvPrintQuantity.setText(prjBean.getQuantity() + "");
// } else {
// tvPrintQuantity.setVisibility(View.GONE);
// }
//開台時間
tvOpeningTime.setText(TimeUtils.parseTimeRepeat(prjBean.getOrderDetailsTime(), TimeUtils.DEFAULT_DATE_MDHM));
......
......@@ -3,16 +3,8 @@ package com.joe.print.mvp.print;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.Gravity;
import android.view.View;
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.mealManger.MyOrderManage;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.OpenTableManage;
......@@ -43,7 +35,15 @@ public class PrintServe extends PrinterRoot {
@Override
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
......@@ -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) {
List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList();
if (foodList == null || foodList.size() <= 0) {
......
......@@ -5,7 +5,6 @@ import android.graphics.Bitmap;
import android.view.Gravity;
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.order.bean.BillOrderMoney;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
......@@ -48,62 +47,16 @@ public class PrintSlip extends PrinterRoot {
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList();
if (foodList == null || foodList.size() <= 0) {
return null;
}
TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<html><body>");
stringBuilder.append(getPLable(GsaCloudApplication.getBrandName()))
.append(getPLable(GsaCloudApplication.getRestaurantName()))
.append(getLineLable())
.append(getPLable("餐檯:" + tableBean.getTableName()))
.append(getPLable("人數:" + OpenTableManage.getDefault().getPeopleNumber()))
.append(getPLable("單號:" + MyOrderManage.getInstance().getOrderId()))
.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/>";
String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) +
generateFoodInfo(foodList) +
getHtmlBillInfo() +
getWholeLine() +
getHtmlFooter() + "</body></html>";
return stringBuilder;
}
private String getPLable(String content) {
......
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.HashMap;
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.
......@@ -41,390 +9,175 @@ import androidx.recyclerview.widget.RecyclerView;
*/
public class PrintUtils {
private static final String TAG = "PrintUtils";
private static int paperWidth = 380;
//一行42個 17.5
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 type 打印類型 0:上菜紙
* * 1:印單
* * 2:結賬單
* * 3:廚房單
* @param paperWidth 紙張寬度
* @return 返回需要打印的圖片
* @param content 要顯示的內容
* @param maxLength 字符串最大長度
* @param chineseCharLength 一個中文字符所佔長度
* @return 按照maxLength長度分割後的string集合
*/
public static List<Bitmap> getPrintBitmap(Context mContext, int type, int paperWidth) {
List<Bitmap> bitmaps = new ArrayList<>();
PrintUtils.paperWidth = paperWidth;
if (type == -1) {
//測試紙
bitmaps.add(getTestPrintBitmap(mContext));
} else if (type == 0) {
//上菜紙
bitmaps.add(getPrintBitmap(mContext, MyOrderManage.getInstance().getNewFoodList()));
} else if (type == 1) {
//印單,可能會有還未送單的食品,同時也要將未送單的食品以廚房單的格式打印出來
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);
public static List<String> getFormatList(String content, int maxLength, double chineseCharLength) {
String chinese = "[\u4e00-\u9fa5]";
List<String> stringList = new ArrayList<>();
int length = 0;
int startIndex = 0;
for (int i = 0; i < content.length(); i++) {
String temp = content.substring(i, i + 1);
//判斷中英文,累積長度
if (temp.matches(chinese)) {
length += chineseCharLength;
} else {
List<OrderDetail> printsetingFoods = foodMaps.get(orderDetails.get(j).getPrintseting());
if (printsetingFoods != null) {//理論上不會為空
printsetingFoods.remove(printsetingFoods.lastIndexOf(orderDetails.get(j)));
//移除掉之後,put到newkey中
List<OrderDetail> newFoods = new ArrayList<>();
newFoods.add(orderDetails.get(j));
newFoods.add(food);
foodMaps.put(newKey, newFoods);
}
}
length += 1;
}
if (length > maxLength) {
i -= 1;
}
//長度達到設定的值
if (length >= maxLength) {
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;
} 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 {
//有打印位置,
//已經保存過這個位置的,
addToMap(foodMaps, food);
}
}
//通過打印位置生成多張用於打印的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));
stringList.add(headerStr);
startIndex = i + 1;
length = 0;
}
} else {
//不帶*號,所有同樣廚房位置的食品都在一張紙上
bitmaps.add(PrintUtils.getKitChenPrintBitmap(mContext, entry.getValue()));
// bitmaps1.add(PrintUtils.getKitChenPrintBitmap(mContext, entry.getValue()));
}
// bitmapMaps.put(key, bitmaps1);
}
}
//通過遍歷map進行打印
return bitmaps;
stringList.add(headerStr);
startIndex = i + 1;
length = 0;
}
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 {
List<OrderDetail> newFoods = new ArrayList<>();
newFoods.add(food);
foodMaps.put(food.getPrintseting(), newFoods);
stringList.add(headerStr);
startIndex = i + 1;
length = 0;
}
} else if (length > 0 && i == content.length() - 1) {
stringList.add(content.substring(startIndex));
}
private static Bitmap getPrintBitmap(Context context) {
return getPrintBitmap(context, MyOrderManage.getInstance().getOrderFoodList());
}
return stringList;
}
/**
* 獲取"印單"圖片
* 獲取縮進,通過文字和最大長度
*
* @param context
* @param text
* @param maxLength
* @return
*/
private static Bitmap getPrintBitmap(Context context, List<OrderDetail> foodList) {
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);
// 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()));
private static String getSpaceByTextLength(String text, int maxLength, double chineseCharLength) {
int spaceLength = (int) Math.ceil(maxLength - getChineseValueLength(text, chineseCharLength));
StringBuilder space = new StringBuilder();
for (int i = 0; i < spaceLength; i++) {
space.append(" ");
}
}
LogUtil.d(TAG,"getPrintBitmap OrderMoneyList size: "+ MyOrderManage.getInstance().getOrderMoneyList().size());
// 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);
space.append(text);
return space.toString();
}
/**
* 獲取"結賬單"圖片
* 根據字符串獲取長度,中文長度為2,在那台針式打印機長度為1.5
*
* @param context
* @param value
* @return
*/
private static Bitmap getPrintBillBitmap(Context context) {
List<OrderDetail> foodList = MyOrderManage.getInstance().getOrderFoodList();
TableBean.DataBean tableBean = OpenTableManage.getDefault().getTableBean();
if (foodList == null || foodList.size() <= 0 || tableBean == null) {
return null;
}
View view = LinearLayout.inflate(context, R.layout.print_layout_print_bill, null);
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);
private static double getChineseValueLength(String value, double chineseCharLength) {
double valueLength = 0;
String chinese = "[\u4e00-\u9fa5]";
for (int i = 0; i < value.length(); i++) {
String temp = value.substring(i, i + 1);
if (temp.matches(chinese)) {
valueLength += chineseCharLength;
} else {
BillAdapter billAdapter = new BillAdapter(billingBeans);
rvBillAmount.setLayoutManager(new LinearLayoutManager(context));
rvBillAmount.setAdapter(billAdapter);
valueLength += 1;
}
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 : 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);
return valueLength;
}
/**
* 獲取"廚房單"圖片
*
* @param context
* @return
* @param name1 字符串一
* @param name2 字符串二
* @param name3 字符串三
* @param chineseCharLength 中文字符所佔長度,BBPOS佔2.4,針式佔1.5
* @return 返回N行分割好的排版文字
*/
private static Bitmap getKitChenPrintBitmap(Context context, List<OrderDetail> foodList) {
if (foodList == null || foodList.size() <= 0) {
return null;
}
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);
public static String getLineString(String name1, String name2, String name3, double chineseCharLength) {
List<String> name1s = getFormatList(name1, foodNameSpace, chineseCharLength);
List<String> name2s = getFormatList(name2, foodNumSpace, chineseCharLength);
List<String> name3s = getFormatList(name3, foodAmountSpace, chineseCharLength);
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>");
}
/**
* 獲取測試打印bitmap
*
* @param context
* @return
*/
private static Bitmap getTestPrintBitmap(Context context) {
View view = LinearLayout.inflate(context, R.layout.print_test, null);
return viewToBitmap(context, view);
return stringBuilder.toString();
}
/**
* 獲取清機報表Bitmap
*
* @param mContext
* @return
* @param name1 字符串一
* @param name2 字符串二
* @param chineseCharLength 中文字符所佔長度,BBPOS佔2.4,針式佔1.5
* @return 返回N行分割好的排版文字
*/
private static Bitmap getReportBitmap(Context mContext) {
View view = PrintTransitUtils.getInstance().getPrintView();
if (view != null) {
return viewToBitmap(mContext, view);
public static String getLineString(String name1, String name2, double chineseCharLength, int lineWidth) {
List<String> name1s = getFormatList(name1, lineWidth / 2, chineseCharLength);
List<String> name2s = getFormatList(name2, lineWidth / 2, chineseCharLength);
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();
}
public static Bitmap viewToBitmap(Context context, View view) {
LayoutToBitmapUtils.layoutView(context, view);//先测量view
//580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
private static void putText(double chineseCharLength, List<String> name1s, StringBuilder stringBuilder, int i, int foodNameSpace) {
if (i < name1s.size()) {
stringBuilder.append(getSpaceByTextLength(name1s.get(i), foodNameSpace, chineseCharLength));
} else {
stringBuilder.append(getSpaceByTextLength("", foodNameSpace, chineseCharLength));
}
}
}
......@@ -9,14 +9,13 @@ import android.os.Build;
import android.os.IBinder;
import android.os.RemoteException;
import android.text.TextUtils;
import android.util.Log;
import android.util.Xml;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.ColorRes;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
......@@ -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.PayMethod;
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.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.utils.AidlUtil;
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.time.TimeUtils;
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.QRCodeUtil;
import com.gingersoft.gsa.cloud.bean.WiseposBean;
import com.gingersoft.gsa.cloud.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
......@@ -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.UsbPrinter;
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.sunmi.peripheral.printer.InnerResultCallbcak;
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.ArrayList;
import java.util.Collection;
import java.util.List;
......@@ -80,13 +76,6 @@ import java.util.Objects;
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 {
@Inject
......@@ -183,6 +172,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
/**
* 獲取打印內容
*
* @return BBPOS是HTMl格式
*/
public abstract String getPrintData(Context mContext, PrinterDeviceBean deviceBean);
......@@ -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;
if (PrintConstans.PRINT_MODEL_V2.contains(model)) {
......@@ -209,81 +199,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
} else if (PrintConstans.PRINT_MODEL_WISEPOS.contains(model)) {
//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>
WiseposBean wiseposBean = new WiseposBean();
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);
}
});
new BBposPrint().print(printData, listener);
} else {
listener.printFile("暫不支持本機型打印");
}
......@@ -444,9 +360,10 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
bytes.add(esc.getPrintAndFeedLines((byte) 8));
bytes.add(esc.getCutPaper());
bytes.add(esc.getCleanCache());
if (usbPrinters.size() > 0)
if (usbPrinters.size() > 0) {
usbPrint.sendPrintCommand(usbPrinters.get(0), bytes);
}
}
} else {
boolean hasPermission = new Intent().getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false);
printListener.printFile("未找到USB打印機");
......@@ -694,7 +611,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
}
//生成積分QRCode碼(飯糰APP掃碼獲得積分)
if (TextUtils.isEmpty(integralQrcode) ||
(boolean)RestaurantExpandInfoUtils.getValue(ExpandConstant.ToPrintQRCode,false) == false) {
(boolean) RestaurantExpandInfoUtils.getValue(ExpandConstant.ToPrintQRCode, false) == false) {
llIntegralQrcode.setVisibility(View.GONE);
} else {
llIntegralQrcode.setVisibility(View.VISIBLE);
......@@ -739,7 +656,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
return view;
}
private String getReplaceAfter(String str) {
protected String getReplaceAfter(String str) {
if (str != null && str.length() > 0) {
int replaceStrCount = str.length() / 2;
StringBuilder buffer = new StringBuilder();
......@@ -925,4 +842,129 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
public void setIsShow(View parentView, int viewId, boolean isShow) {
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;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
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.toast.ToastUtils;
import com.gingersoft.gsa.cloud.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.database.bean.PrintCurrencyBean;
......@@ -323,7 +324,7 @@ public class PrjService extends Service implements ReceiveListener {
private void newPrint(String json) {
printDatas.clear();
listMap.clear();
currentIndex = 1;
currentIndex = 0;
totalPrj = 0;
PrjBean prjBean = JsonUtils.parseObject(json, PrjBean.class);
if (prjBean == null || prjBean.getData() == null) {
......@@ -342,11 +343,24 @@ public class PrjService extends Service implements ReceiveListener {
//最后就可以通过刚刚得到的key值去解析后面的json了
JSONArray dataJson = (JSONArray) jsonObject.get(key);
List<PrjBean.DataBean.Bean> datas = JsonUtils.parseArray(dataJson.toString(), PrjBean.DataBean.Bean.class);
if (datas == null || datas.size() <= 0) {
return;
if (datas != null && datas.size() > 0) {
//打印位置和需要打印的數據
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);
// printDatas.addAll(datas);
}
......@@ -355,11 +369,18 @@ public class PrjService extends Service implements ReceiveListener {
}
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> prjMap : listMap.entrySet()) {
for (PrjBean.DataBean.Bean bean : prjMap.getValue()) {
bean.setCurrentIndex(currentIndex);
bean.setTotalPrj(totalPrj);
if(bean.getStatus() == 2){
currentIndex++;
} else {
if(currentIndex == 0){
currentIndex = 1;
}
}
bean.setCurrentIndex(currentIndex);
}
currentIndex++;
}
//讀取打印機和通用配置,可以優化
//獲取所有打印機
PrinterDeviceDaoUtils printerDeviceDaoUtils = new PrinterDeviceDaoUtils(this);
......@@ -472,7 +493,13 @@ public class PrjService extends Service implements ReceiveListener {
updatePrjFailure(EpsIds);
}
} 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()) {
case 1:
//IP打印
......@@ -562,6 +589,9 @@ public class PrjService extends Service implements ReceiveListener {
} else if (PrintConstans.PRINT_MODEL_N5.contains(model)) {
//N5打印
n5Print(bitmapMaps);
} else if (PrintConstans.PRINT_MODEL_WISEPOS.contains(model)) {
//BBPOS,生成data
ToastUtils.show(this, "BBPOS不支持打印處方單");
} else {
updatePrjFailure(getPrintIds(bitmapMaps));
}
......@@ -665,12 +695,6 @@ public class PrjService extends Service implements ReceiveListener {
* @param beans 打印的食品和其他的一些信息
*/
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();
//這個Map的key是這張PRJ的所有PRJ記錄的id,然後會同時打印多張,所以是一個List集合
List<Map<String, Bitmap>> bitmapMaps = new ArrayList<>();
......@@ -769,75 +793,12 @@ public class PrjService extends Service implements ReceiveListener {
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
public void onPtrReceive(Printer printer, int i, PrinterStatusInfo printerStatusInfo, String s) {
//針式打印回調
if (i == 0) {
//打印成功
updatePrjFailure(EpsIds);
updatePrjSuccess(EpsIds);
} else {
//打印失敗
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;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
......@@ -230,37 +231,46 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
if (isShowDialog) {
initDialog();
}
// if (defaultPrint.getPrinterDeviceType() == 2 && PrintConstans.PRINT_MODEL_WISEPOS.contains(Build.MODEL)) {
// //本機打印並且是BBPOS
//
//
//
// } else {
//獲得對應的圖片
Map<String, List<Bitmap>> listMap = printerInIt.getPrintBitmapByCount(mContext, defaultPrint);
Map<String, List<Bitmap>> listMap = null;
List<Bitmap> zoomBitmaps = null;
String printData = null;
if (defaultPrint.getPrinterDeviceType() == 2 && PrintConstans.PRINT_MODEL_WISEPOS.contains(Build.MODEL)) {
//本機打印並且是BBPOS
printData = printerInIt.getPrintData(mContext, defaultPrint);
if (printData == null) {
printFile("暫不支持打印此單");
return;
}
} else {
listMap = printerInIt.getPrintBitmapByCount(mContext, defaultPrint);
if (listMap != null) {
List<Bitmap> zoomBitmaps = listMap.get("");
zoomBitmaps = listMap.get("");
} else {
printFile("暫不支持打印此單");
return;
}
if (zoomBitmaps != null && zoomBitmaps.size() > 0) {
} else {
//打印失敗
printFile("打印失敗,生成打印數據失敗");
}
}
//獲得對應的圖片
if (defaultPrint.getPrinterDeviceType() == 1) {
//IP打印
printerInIt.ipDevicePrint(defaultPrint, zoomBitmaps);
} else if (defaultPrint.getPrinterDeviceType() == 2) {
//本地N5或Sunmi打印
printerInIt.locationPrint(zoomBitmaps, this);
printerInIt.locationPrint(zoomBitmaps, printData, this);
} else if (defaultPrint.getPrinterDeviceType() == 3) {
//USB打印打印
printerInIt.usbPrint(mContext, zoomBitmaps);
} else {
printFile("未找到對應的打印類型");
}
} else {
//打印失敗
printFile("打印失敗,生成打印數據失敗");
}
} else {
printFile("打印失敗,打印次數為0");
}
// }
}
}
......
......@@ -10,7 +10,6 @@ import androidx.appcompat.app.AppCompatActivity;
import com.epson.epos2.printer.Printer;
import com.epson.epos2.printer.PrinterStatusInfo;
import com.epson.epos2.printer.ReceiveListener;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.order.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
......@@ -34,7 +33,7 @@ import io.reactivex.disposables.Disposable;
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 foodNumSpace = 8;
private static int foodAmountSpace = 10;
......@@ -50,7 +49,7 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
int spaceLength = (int) Math.ceil(MaxLength - getChineseValueLength(text));
StringBuilder space = new StringBuilder();
for (int i = 0; i < spaceLength; i++) {
space.append(" ");
space.append("_");
}
space.append(text);
return space.toString();
......@@ -61,7 +60,7 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
StringBuilder space = new StringBuilder();
space.append(text);
for (int i = 0; i < spaceLength; i++) {
space.append(" ");
space.append("_");
}
return space.toString();
}
......@@ -182,22 +181,16 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
printerFinder.startFinder();
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("เนื้อตุ๋น", 200, 2));
foodList.add(new OrderDetail("牛肉の角煮アスティフェン", 1000, 30));
foodList.add(new OrderDetail("牛肉拉麵", 10, 1));
foodList.add(new OrderDetail("紅燒牛肉拉麵", 200, 2));
findViewById(R.id.btn_test).setOnClickListener(view -> {
//打印測試
String stringBuilder = "<html><body>" +
getPLable(GsaCloudApplication.getBrandName()) +
getPLable(GsaCloudApplication.getRestaurantName()) +
getPLable(getLineChar(lineLength,"_")) +
getPLable("餐檯: " + "111") +
getPLable("人數:23") +
getPLable("123456789123456789123456789123456789123456789") +
getPLable("日期:" + TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)) +
getPLable(getLineChar(lineLength,"_")) +
getPLable("GingerSoft") +
getPLable("Gs1") +
getPLable("開檯時間:" + TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)) +
getPLable(getLineChar(lineLength, "_")) +
getPLable(getFoodListStr(foodList)) +
"</body></html>";
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
});
}
public String getLineChar(int size, String str){
public String getLineChar(int size, String str) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < size; i++) {
stringBuilder.append(str);
......@@ -231,33 +224,12 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
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) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<strong>");
for (OrderDetail detail : foodList) {
// stringBuilder.append(getLineFood(detail.getProductName(), detail.getNumber(), detail.getPrice()));
stringBuilder.append("<div align=\"left\">")
.append(detail.getProductName())
.append("</div>");
stringBuilder.append("<div align=\"right\">")
.append("X")
.append(detail.getNumber())
.append(" $")
.append(detail.getPrice())
.append("</div>");
}
stringBuilder.append("</strong>");
stringBuilder.append(getLineFood(detail.getProductName(), detail.getNumber(), detail.getPrice()));
stringBuilder.append("<br/>");
}
return stringBuilder.toString();
}
......@@ -266,24 +238,16 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < stringList.size(); i++) {
if (i == 0) {
stringBuilder.append("<p>")
.append(getSpaceByTextLength2(stringList.get(i), foodNameSpace))
.append(getSpaceByTextLength("X" + foodNum, foodNumSpace))
.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));
stringBuilder.append(getSpaceByTextLength2(stringList.get(i), foodNameSpace));
String foodNumStr = "X" + foodNum;
stringBuilder.append(getSpaceByTextLength(foodNumStr, foodNumSpace));
stringBuilder.append(getSpaceByTextLength("$" + foodAmount, foodAmountSpace));
} else {
stringBuilder.append("<p>")
.append(stringList.get(i))
.append("</p>");
}
// if (i != stringList.size() - 1) {
// stringBuilder.append("<br/>");
stringBuilder.append("\n");
// }
stringBuilder.append(stringList.get(i));
}
if (i != stringList.size() - 1) {
stringBuilder.append("<br/>");
}
}
return stringBuilder.toString();
}
......
......@@ -15,6 +15,15 @@ import android.widget.Chronometer;
import android.widget.SimpleAdapter;
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.order.bean.mealManger.MyOrderManage;
import com.gingersoft.gsa.cloud.base.order.bean.mealManger.OpenTableManage;
......@@ -61,14 +70,6 @@ import java.util.Map;
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.OnClick;
......@@ -178,7 +179,6 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
@Override
public void initData(@Nullable Bundle savedInstanceState) {
initOrderDetail();
initTopInfo();
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