Commit 922cde77 by 宁斌

bbpos結賬單,qrcode打印處理

parent d7c21e36
......@@ -52,7 +52,8 @@ buildscript {
dependencies {
// api project(':qm-skin-maker')
//fragmentation
api project(':fragmentation_core')
//support
api(rootProject.ext.dependencies["support-v4"]) {
exclude module: 'support-annotations'
......@@ -140,11 +141,6 @@ dependencies {
//可長按拖動 側滑刪除的recyclerview
api rootProject.ext.dependencies["yzjRecyclerView"]
//fragmentation
api project(':fragmentation_core')
// api rootProject.ext.dependencies["fragmentation"]
// api rootProject.ext.dependencies["fragmentation-core"]
// api rootProject.ext.dependencies["fragmentation-swipeback"]
//test
api rootProject.ext.dependencies["timber"]
implementation rootProject.ext.dependencies["retrofit-url-manager"]
......@@ -153,6 +149,7 @@ dependencies {
// testApi rootProject.ext.dependencies["junit"]
api rootProject.ext.dependencies["immersionbar-components"]
api rootProject.ext.dependencies["immersionbar"]
}
......
......@@ -13,6 +13,9 @@ public class BrandInfo {
private int brandId;
private String brandName;
public BrandInfo() {
}
public BrandInfo(int brandId, String brandName) {
this.brandId = brandId;
this.brandName = brandName;
......
......@@ -15,6 +15,9 @@ public class RestaurantInfo {
private String restaurantName;
private String gsPosShopId;
public RestaurantInfo() {
}
public RestaurantInfo(int restaurantId, String restaurantName, String gsPosShopId) {
this.restaurantId = restaurantId;
this.restaurantName = restaurantName;
......
package com.gingersoft.gsa.cloud.account.restaurant;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
......@@ -23,8 +24,18 @@ public class ResturantInfoManager {
*/
private RestaurantInfo restaurantInfo;
private ResturantInfoManager() {
if (brandInfo == null) {
brandInfo = new BrandInfo();
}
if (restaurantInfo == null) {
restaurantInfo = new RestaurantInfo();
}
brandInfo.setBrandId((Integer) SPUtils.get(UserConstans.brandId, 0));
brandInfo.setBrandName((String) SPUtils.get(UserConstans.brandName, ""));
restaurantInfo.setGsPosShopId((String) SPUtils.get(UserConstans.gsPosShopId, "-1"));
restaurantInfo.setRestaurantId((Integer) SPUtils.get(UserConstans.restaurantId, 0));
restaurantInfo.setRestaurantName((String) SPUtils.get(UserConstans.restaurantName, ""));
}
public static ResturantInfoManager newInstance() {
......@@ -38,35 +49,35 @@ public class ResturantInfoManager {
if (restaurantInfo != null) {
return restaurantInfo.getRestaurantId();
}
return 0;
return (int) SPUtils.get(UserConstans.restaurantId, 0);
}
public String getGsPosShopId() {
if (restaurantInfo != null) {
return restaurantInfo.getGsPosShopId();
}
return "-1";
return (String) SPUtils.get(UserConstans.gsPosShopId, "-1");
}
public String getRestaurantName() {
if (restaurantInfo != null) {
return restaurantInfo.getRestaurantName();
}
return "";
return (String) SPUtils.get(UserConstans.restaurantName, "");
}
public int getBrandId() {
if (brandInfo != null) {
return brandInfo.getBrandId();
}
return 0;
return (int) SPUtils.get(UserConstans.brandId, 0);
}
public String getBrandName() {
if (brandInfo != null) {
return brandInfo.getBrandName();
}
return "";
return (String) SPUtils.get(UserConstans.brandName, "");
}
public void setResturantInfo(RestaurantInfo info) {
......@@ -114,5 +125,4 @@ public class ResturantInfoManager {
SPUtils.put(UserConstans.brandRestaurantInfos, brandRestaurantIds);
}
}
......@@ -34,6 +34,12 @@ public class UserContext {
private UserContext() {
if (info == null) {
info = new UserInfo();
}
info.setToken((String) SPUtils.get(UserConstans.token, ""));
info.setUserId((Integer) SPUtils.get(UserConstans.memberId, 0));
info.setUserName((String) SPUtils.get(UserConstans.memberName, ""));
}
public static UserContext newInstance() {
......@@ -67,21 +73,21 @@ public class UserContext {
if (info != null) {
return info.getToken();
}
return "";
return (String) SPUtils.get(UserConstans.token, "");
}
public int getMemberId() {
if (info != null) {
return info.getUserId();
}
return 0;
return (int) SPUtils.get(UserConstans.memberId, 0);
}
public String getMemberName() {
if (info != null) {
return info.getUserName();
}
return "";
return (String) SPUtils.get(UserConstans.memberName, "");
}
public void setUserInfo(UserInfo info) {
......
package com.gingersoft.gsa.cloud.bean;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-03-10
* 修订历史:2020-03-10
* 描述:
*/
@Data
public class SettlementReport implements Parcelable {
/**
* yesterdayTime : 2020-03-12 19:19:44
* vo : {"prices":256,"scamount":0,"disamount":0,"payNum":0,"payamount":0,"tipnum":0,"tipsPrice":0,"totamount":256,"num":2,"person":7}
* analysis : [{"typeName":"堂食","num":3,"amount":678},{"typeName":"已完成賬單","num":1,"amount":201},{"typeName":"未完成賬單","num":2,"amount":477},{"typeName":"本月累計營業額","num":0,"amount":678}]
* restaurantOperation : {"id":11,"uid":297,"restaurantId":410,"type":1,"openTime":1583919880776,"operationTime":1583922285557,"createTime":1583922285557}
* cash : [{"payName":"現金","payNum":2,"payAmount":256}]
*/
private String yesterdayTime;
private VoBean vo;
private RestaurantOperationBean restaurantOperation;
private List<AnalysisBean> analysis;
private List<CashBean> cash;
private String currentTime;
private String startTime;
public SettlementReport() {
}
@Data
public static class VoBean implements Parcelable {
/**
* prices : 256
* scamount : 0
* disamount : 0
* payNum : 0
* payamount : 0
* tipnum : 0
* tipsPrice : 0
* totamount : 256
* deliverycharge : 0
* num : 2
* person : 7
*/
private double prices;
private double scamount;
private double disamount;
private int payNum;
private double payamount;
private int tipnum;
private double tipsPrice;
private double totamount;
private double deliverycharge;
private int num;
private int person;
public VoBean() {
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeDouble(this.prices);
dest.writeDouble(this.scamount);
dest.writeDouble(this.disamount);
dest.writeInt(this.payNum);
dest.writeDouble(this.payamount);
dest.writeInt(this.tipnum);
dest.writeDouble(this.tipsPrice);
dest.writeDouble(this.totamount);
dest.writeDouble(this.deliverycharge);
dest.writeInt(this.num);
dest.writeInt(this.person);
}
protected VoBean(Parcel in) {
this.prices = in.readDouble();
this.scamount = in.readDouble();
this.disamount = in.readDouble();
this.payNum = in.readInt();
this.payamount = in.readDouble();
this.tipnum = in.readInt();
this.tipsPrice = in.readDouble();
this.totamount = in.readDouble();
this.deliverycharge = in.readDouble();
this.num = in.readInt();
this.person = in.readInt();
}
public static final Creator<VoBean> CREATOR = new Creator<VoBean>() {
@Override
public VoBean createFromParcel(Parcel source) {
return new VoBean(source);
}
@Override
public VoBean[] newArray(int size) {
return new VoBean[size];
}
};
}
@Data
public static class RestaurantOperationBean implements Parcelable {
/**
* id : 11
* uid : 297
* restaurantId : 410
* type : 1
* openTime : 1583919880776
* operationTime : 1583922285557
* createTime : 1583922285557
*/
private int id;
private int uid;
private int restaurantId;
private int type;
private long openTime;
private long operationTime;
private long createTime;
public RestaurantOperationBean() {
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.id);
dest.writeInt(this.uid);
dest.writeInt(this.restaurantId);
dest.writeInt(this.type);
dest.writeLong(this.openTime);
dest.writeLong(this.operationTime);
dest.writeLong(this.createTime);
}
protected RestaurantOperationBean(Parcel in) {
this.id = in.readInt();
this.uid = in.readInt();
this.restaurantId = in.readInt();
this.type = in.readInt();
this.openTime = in.readLong();
this.operationTime = in.readLong();
this.createTime = in.readLong();
}
public static final Creator<RestaurantOperationBean> CREATOR = new Creator<RestaurantOperationBean>() {
@Override
public RestaurantOperationBean createFromParcel(Parcel source) {
return new RestaurantOperationBean(source);
}
@Override
public RestaurantOperationBean[] newArray(int size) {
return new RestaurantOperationBean[size];
}
};
}
@Data
public static class AnalysisBean implements Parcelable {
/**
* typeName : 堂食
* num : 3
* person : 2
* amount : 678
*/
private String typeName;
private int num;
private int person;
private double amount;
public AnalysisBean() {
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.typeName);
dest.writeInt(this.num);
dest.writeInt(this.person);
dest.writeDouble(this.amount);
}
protected AnalysisBean(Parcel in) {
this.typeName = in.readString();
this.num = in.readInt();
this.person = in.readInt();
this.amount = in.readDouble();
}
public static final Creator<AnalysisBean> CREATOR = new Creator<AnalysisBean>() {
@Override
public AnalysisBean createFromParcel(Parcel source) {
return new AnalysisBean(source);
}
@Override
public AnalysisBean[] newArray(int size) {
return new AnalysisBean[size];
}
};
}
@Data
public static class CashBean implements Parcelable {
/**
* payName : 現金
* payNum : 2
* payAmount : 256
* payType : 1001
*/
private String payName;
private int payNum;
private double payAmount;
private int payType;
public CashBean() {
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.payName);
dest.writeInt(this.payNum);
dest.writeDouble(this.payAmount);
dest.writeInt(this.payType);
}
protected CashBean(Parcel in) {
this.payName = in.readString();
this.payNum = in.readInt();
this.payAmount = in.readDouble();
this.payType = in.readInt();
}
public static final Creator<CashBean> CREATOR = new Creator<CashBean>() {
@Override
public CashBean createFromParcel(Parcel source) {
return new CashBean(source);
}
@Override
public CashBean[] newArray(int size) {
return new CashBean[size];
}
};
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.yesterdayTime);
dest.writeParcelable(this.vo, flags);
dest.writeParcelable(this.restaurantOperation, flags);
dest.writeTypedList(this.analysis);
dest.writeTypedList(this.cash);
dest.writeString(this.currentTime);
dest.writeString(this.startTime);
}
protected SettlementReport(Parcel in) {
this.yesterdayTime = in.readString();
this.vo = in.readParcelable(VoBean.class.getClassLoader());
this.restaurantOperation = in.readParcelable(RestaurantOperationBean.class.getClassLoader());
this.analysis = in.createTypedArrayList(AnalysisBean.CREATOR);
this.cash = in.createTypedArrayList(CashBean.CREATOR);
this.currentTime = in.readString();
this.startTime = in.readString();
}
public static final Creator<SettlementReport> CREATOR = new Creator<SettlementReport>() {
@Override
public SettlementReport createFromParcel(Parcel source) {
return new SettlementReport(source);
}
@Override
public SettlementReport[] newArray(int size) {
return new SettlementReport[size];
}
};
}
......@@ -17,7 +17,7 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler {
@Override
public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response) {
// 统一处理http响应。eg:状态码不是200时,根据状态码做相应的处理。
LoganManager.w_network(httpResult);
LoganManager.w_network("發送請求: "+httpResult);
return response;
}
......@@ -25,7 +25,7 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler {
public Request onHttpRequestBefore(Interceptor.Chain chain, Request request) {
// 统一处理http请求。eg:给request统一添加token或者header以及参数加密等操作
String requestReult = request.toString();
LoganManager.w_network(requestReult);
LoganManager.w_network("接收請求: "+requestReult);
return chain.request().newBuilder()
.build();
}
......
package com.gingersoft.gsa.cloud.function;
import com.gingersoft.gsa.cloud.function.jump.ActivityJumpBean;
import com.gingersoft.gsa.cloud.function.jump.ActivityJumpBean;
import lombok.Data;
/**
......
package com.gingersoft.gsa.cloud.function;
import android.app.Activity;
import android.content.Context;
import com.gingersoft.gsa.cloud.database.bean.Function;
import java.util.List;
......@@ -15,8 +12,6 @@ import java.util.List;
*/
public interface XFunctionAction {
void inJectFunctionAnnoations(Object view,Class<?> functionModules);
List<Function> getFunctionItems(String targetResKey,FModule[] fModules);
Function getFunctionItem(String targetResKey,FModule fModules);
......
package com.gingersoft.gsa.cloud.function;
import android.app.Activity;
import android.text.TextUtils;
import android.view.View;
import androidx.fragment.app.Fragment;
import com.gingersoft.gsa.cloud.base.utils.ReflectionUtils;
import com.gingersoft.gsa.cloud.database.bean.Function;
import java.lang.annotation.Annotation;
......@@ -17,8 +15,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import butterknife.BindView;
/**
* @author : bin
* @create date: 2020-11-23
......@@ -45,8 +41,7 @@ public class XFunctionManager implements XFunctionAction {
}
@Override
public void inJectFunctionAnnoations(Object rootView, Class<?> functionModules) {
public static void inJect(Object rootView, Class<?> functionModules) {
Map<String, FModule[]> FModuleValues = new HashMap<>();
Map<String, FModule> FModuleValue = new HashMap<>();
......@@ -101,23 +96,39 @@ public class XFunctionManager implements XFunctionAction {
if (annotation instanceof XFunctionViews) {
XFunctionViews functionViews = (XFunctionViews) annotation;
String value = functionViews.value();
boolean filterParent = functionViews.filterParent();
if (FModuleValues.containsKey(value)) {
//功能組 拿到對應的key去匹配
List<Function> functions = getFunctionItems(value, FModuleValues.get(value));
List<Function> functions = XFunctionManager.newInstance().getFunctionItems(value, FModuleValues.get(value));
if (filterParent) {
for (int j = functions.size() - 1; j >= 0; j--) {
if (functions.get(j).getParentId() == 0) {
//過濾掉父級
functions.remove(j);
}
break;
}
}
try {
String name = field.getName();
//設置功能組數據源
ReflectionUtils.setField(rootView.getClass(), name, field.get(name), functions);
} catch (NoSuchFieldException e) {
e.printStackTrace();
List<Function> functionList = (List<Function>) field.get(rootView);
if (functionList == null) {
functionList = new ArrayList<>();
}
functionList.addAll(functions);
} catch (IllegalAccessException e) {
e.printStackTrace();
} finally {
if (functions != null && functions.size() > 0) {
functions.clear();
functions = null;
}
}
}
} else if (annotation instanceof XFunctionView) {
XFunctionView functionView = (XFunctionView) annotation;
String value = functionView.value();
int viewResId = functionView.viewId();
int viewResId = functionView.viewId();
if (viewResId == 0) {
//控制單個功能 顯示隱藏需要viewId配合
continue;
......@@ -145,8 +156,8 @@ public class XFunctionManager implements XFunctionAction {
}
@Override
public List<Function> getFunctionItems(String targetResKey, FModule[] fModules) {
List<Function> functionList = new ArrayList<>();
public ArrayList<Function> getFunctionItems(String targetResKey, FModule[] fModules) {
ArrayList<Function> functionList = new ArrayList<>();
if (mFunctionMap.size() == 0) {
return functionList;
}
......@@ -157,7 +168,8 @@ public class XFunctionManager implements XFunctionAction {
//獲取具體的功能組,如table/bottom/init下的table/bottom組
String[] keyRes = resUrl.split("/");
if (keyRes.length > 1) {
resUrl = resUrl.substring(0, keyRes[keyRes.length - 1].length());
int endIndex = resUrl.length() - (keyRes[keyRes.length - 1].length());
resUrl = resUrl.substring(0, endIndex);
if (resUrl.startsWith(targetResKey)) {
/**
* 匹配功能組成功{@link XFunctionItems}
......
......@@ -18,4 +18,10 @@ import java.lang.annotation.Target;
public @interface XFunctionViews {
String value();
/**
* 過濾父級,一般為功能組名
* @return
*/
boolean filterParent() default true;
}
package com.gingersoft.gsa.cloud.function.jump;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import com.gingersoft.gsa.cloud.database.bean.Function;
import lombok.Getter;
import lombok.Setter;
......
package com.gingersoft.gsa.cloud.function.jump;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.database.bean.Function;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author : bin
......
package com.gingersoft.gsa.cloud.function.jump;
import android.content.Context;
import android.content.Intent;
/**
* @author : bin
* @create date: 2020-11-26
* @update date: 2020-11-26
* @description:統一頁面跳轉接口 , 避免一堆if else,switch
* @description:統一頁面跳轉接口
*/
public interface ActivityJumpStrategy {
......
package com.gingersoft.gsa.cloud.function.jump;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import com.billy.cc.core.component.CC;
......@@ -14,7 +13,6 @@ import com.billy.cc.core.component.CC;
*/
public class CCToJumpStrategy implements ActivityJumpStrategy{
@Override
public void actionToJumpPage(Context context, ActivityJumpBean jumpBean) {
if (!TextUtils.isEmpty(jumpBean.getComponentName()) && !TextUtils.isEmpty(jumpBean.getActionName())) {
......
......@@ -41,7 +41,7 @@ public class LoganManager {
Logan.w(log, LoganConfig.NETWORK_LEVLE);
//網絡日誌比較重要立即寫入本地
// Logan.f();
printLog("Network", log);
// printLog("Network", log);
}
public static void w_crash(String log) {
......
package com.gingersoft.gsa.cloud.print.bean;
import android.os.Parcel;
import android.os.Parcelable;
import com.gingersoft.gsa.cloud.bean.SettlementReport;
import lombok.Data;
/**
* @author : bin
* @create date: 2020-11-27
* @update date: 2020-11-27
* @description:
*/
public class PrintCleanMachineContent extends SettlementReport implements PrintContent {
protected PrintCleanMachineContent(Parcel in) {
super(in);
}
}
......@@ -17,7 +17,6 @@ public class PrintQRCodeContent implements PrintContent, Parcelable {
private String printTableName;
private String printTopInfo;
private String BottonInfo;
private String printQrcode;
private String printTime;
private String printPeopleNum;
......@@ -36,7 +35,6 @@ public class PrintQRCodeContent implements PrintContent, Parcelable {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.printTableName);
dest.writeString(this.printTopInfo);
dest.writeString(this.BottonInfo);
dest.writeString(this.printQrcode);
dest.writeString(this.printTime);
dest.writeString(this.printPeopleNum);
......@@ -47,7 +45,6 @@ public class PrintQRCodeContent implements PrintContent, Parcelable {
protected PrintQRCodeContent(Parcel in) {
this.printTableName = in.readString();
this.printTopInfo = in.readString();
this.BottonInfo = in.readString();
this.printQrcode = in.readString();
this.printTime = in.readString();
this.printPeopleNum = in.readString();
......
......@@ -22,188 +22,6 @@ import java.util.Date;
@Entity
public class Modifier {
// @Property(nameInDb = "_id")
// @Id(autoincrement = true)
// private Long dbid;
//
// private Long mid;
// /**
// * 食品分类ID
// */
// private Long topId;
//
// private Long restaurantId;
//
// private String modifierName;
//
// private Long seqNo;
//
// private Double marketPrice;
//
// private Double price;
// /**
// * 餐盒费
// */
// private Double lunchboxPrice;
//
// private Long colorId;
// /**
// * 圖片
// */
// private String imageUrl;
// /**
// * 0=顯示, 1=隱藏, 2=暫停
// */
// private Long invisible;
// /**
// * 成本
// */
// private Double cost;
// /**
// * 開始日期
// */
// private Date startDate;
// /**
// * 結束日期
// */
// private Date endDate;
// /**
// * 贊
// */
// private Long like;
// /**
// * 已售
// */
// private Long totalSold;
// /**
// * gspos自定义表中的Id
// */
// private Long majorMainId;
// /**
// * 報表部門分組
// */
// private Long deptId;
// /**
// * 创建人
// */
// private String createBy;
// /**
// * 创建时间
// */
// private Date createTime;
// /**
// * 更新人
// */
// private String updateBy;
// /**
// * 更新时间
// */
// private Date updateTime;
// /**
// * 本地对应ID
// */
// private String posFid;
// /**
// * 父级ID
// */
// private String pId;
// /**
// * 細項下有細項時, 是否自動打開細項 0=不開開 1=打開
// */
// private Long autoMod;
// /**
// * 頁面中藍色按鈕有沒有編輯按鈕 (筆的圖按) 0=不可編輯 1=可編輯
// */
// private Long blueEdit;
// /**
// * 相同項目自動合併 0=不自動合併 1=自動合併
// */
// private Long autoMerge;
// /**
// * 自定義細項 (如細項有下一層, 當層的自定義細項會失效) 0=否 1=是
// */
// private Long customMsg;
// /**
// * 是否組別 1 为组别
// */
// private Long isParent;
// /**
// * 食品名称1
// */
// private String modifierName1;
// /**
// * 食品名称2
// */
// private String modifierName2;
// /**
// * 金額=-994時, 取這個數值乘主項金額
// */
// private Double multiple;
// /**
// * 打印設定
// */
// private String printSet;
// /**
// * 廚房打印設定
// */
// private String ktSetting;
// /**
// * 多選
// */
// private Long modComm;
// /**
// * 口味
// */
// private Long modTaste;
// /**
// * 訊息
// */
// private Long modMsg;
// /**
// * TRUE=追單, FALSE=不處理
// */
// private Long ktFireCourse;
// /**
// * 是否参与折扣#1:可折扣
// */
// private Long ableDisCount;
// /**
// * 打印到帳單
// */
// private Long printToBill;
// /**
// * 廚房單打印主項
// */
// private Long ktPrintMainItem;
// /**
// * 廚房單顯示單價
// */
// private Long ktShowPrice;
// /**
// * 廚房打印顏色
// */
// private Long ktFont;
// /**
// * 0:新增;1:修改:2刪除
// */
// private Long conditions;
// /**
// * 是否同步 0:否 1:是
// */
// private Long isRt;
// /**
// * 隱藏
// */
// private Byte visible;
// /**
// * 是否删除:0正常,1删除
// */
// private Long deletes;
// /**
// * 是否參與會員喜好統計 0 參與 1 不參與
// */
// private Long isStatistic;
@Property(nameInDb = "_id")
@Id(autoincrement = true)
private Long dbid;
......
......@@ -324,7 +324,7 @@ public class ModifierDaoUtils {
// String sql = " SELECT MODIFIER.mid,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,VISIBLE,MULTIPLE,IS_PARENT" +
// " FROM MODIFIER join FOOD_MODIFIER on MODIFIER.MID=FOOD_MODIFIER.MID where MODIFIER.VISIBLE=0 and FOOD_MODIFIER.FID='" + fid + "' order by FOOD_MODIFIER.seq,MODIFIER.SEQ_NO";
String sql = " SELECT MODIFIER.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,INVISIBLE,VISIBLE,MULTIPLE,IS_PARENT,MAX_QTY,MIN_QTY,ABLE_DIS_COUNT" +
String sql = " SELECT MODIFIER.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,INVISIBLE,VISIBLE,MULTIPLE,IS_PARENT,MAX_QTY,MIN_QTY,ABLE_DIS_COUNT,PRINT_SET" +
" FROM MODIFIER join FOOD_MODIFIER fm on MODIFIER.MID=FOOD_MODIFIER.MID where MODIFIER.INVISIBLE!=1 and FOOD_MODIFIER.FID='" + fid + "' order by FOOD_MODIFIER.SEQ_NO,MODIFIER.SEQ_NO";
List<Modifier> mfs_child = new ArrayList<>();
......@@ -337,14 +337,14 @@ public class ModifierDaoUtils {
switch (mode) {
case modifierMode_All:
sqlstr = " SELECT m.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,INVISIBLE,VISIBLE,MULTIPLE,IS_PARENT,DEFMODIFIER,MAX_QTY,MIN_QTY,ABLE_DIS_COUNT" +
sqlstr = " SELECT m.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,INVISIBLE,VISIBLE,MULTIPLE,IS_PARENT,DEFMODIFIER,MAX_QTY,MIN_QTY,ABLE_DIS_COUNT,PRINT_SET,KT_SETTING" +
" FROM MODIFIER m join FOOD_MODIFIER fm on m.TOP_ID=fm.MID where m.INVISIBLE!=1 and m.IS_PARENT=1 and fm.FID='" + fid + "' order by fm.SEQ_NO,m.SEQ_NO";
mfs_child1 = query_modifier_Child_new(sqlstr, fid);
List<Modifier> mfs_child2 = new ArrayList<>();
sqlstr = " SELECT m.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,INVISIBLE,VISIBLE,MULTIPLE,IS_PARENT,DEFMODIFIER,MAX_QTY,MIN_QTY,ABLE_DIS_COUNT" +
sqlstr = " SELECT m.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,INVISIBLE,VISIBLE,MULTIPLE,IS_PARENT,DEFMODIFIER,MAX_QTY,MIN_QTY,ABLE_DIS_COUNT,PRINT_SET,KT_SETTING" +
" FROM MODIFIER m join FOOD_MODIFIER fm on m.TOP_ID=fm.MID where m.INVISIBLE!=1 and m.IS_PARENT=0 and fm.FID='" + fid + "' order by fm.SEQ_NO,m.SEQ_NO";
mfs_child2 = query_modifier_Child_new(sqlstr, fid);
......@@ -382,33 +382,35 @@ public class ModifierDaoUtils {
ArrayList<Modifier> modifiers = new ArrayList<>();
Cursor c = mManager.getDaoSession().getModifierDao().getDatabase().rawQuery(sql, null);
while (c.moveToNext()) {
Modifier order = new Modifier();
order.setFid(fid);
order.setMid(c.getLong(c.getColumnIndex("MID")));
order.setPrice(c.getDouble(c.getColumnIndex("PRICE")));
order.setIsParent(c.getLong(c.getColumnIndex("IS_PARENT")));
Modifier modifier = new Modifier();
modifier.setFid(fid);
modifier.setMid(c.getLong(c.getColumnIndex("MID")));
modifier.setPrice(c.getDouble(c.getColumnIndex("PRICE")));
modifier.setIsParent(c.getLong(c.getColumnIndex("IS_PARENT")));
// order.setSeqNo(c.getLong(c.getColumnIndex("SEQ_NO")));
order.setModifierName(c.getString(c.getColumnIndex("MODIFIER_NAME")));
order.setModifierName1(c.getString(c.getColumnIndex("MODIFIER_NAME1")));
order.setModifierName2(c.getString(c.getColumnIndex("MODIFIER_NAME2")));
modifier.setModifierName(c.getString(c.getColumnIndex("MODIFIER_NAME")));
modifier.setModifierName1(c.getString(c.getColumnIndex("MODIFIER_NAME1")));
modifier.setModifierName2(c.getString(c.getColumnIndex("MODIFIER_NAME2")));
// order.setVisible(c.getInt(c.getColumnIndex("VISIBLE")));
order.setTopId(c.getLong(c.getColumnIndex("TOP_ID")));
order.setModComm(c.getLong(c.getColumnIndex("MOD_COMM")));
order.setModMsg(c.getLong(c.getColumnIndex("MOD_MSG")));
order.setModTaste(c.getLong(c.getColumnIndex("MOD_TASTE")));
order.setMultiple(c.getDouble(c.getColumnIndex("MULTIPLE")));
order.setAbleDisCount(c.getLong(c.getColumnIndex("ABLE_DIS_COUNT")));
order.setInvisible(c.getLong(c.getColumnIndex("INVISIBLE")));
modifier.setTopId(c.getLong(c.getColumnIndex("TOP_ID")));
modifier.setModComm(c.getLong(c.getColumnIndex("MOD_COMM")));
modifier.setModMsg(c.getLong(c.getColumnIndex("MOD_MSG")));
modifier.setModTaste(c.getLong(c.getColumnIndex("MOD_TASTE")));
modifier.setMultiple(c.getDouble(c.getColumnIndex("MULTIPLE")));
modifier.setAbleDisCount(c.getLong(c.getColumnIndex("ABLE_DIS_COUNT")));
modifier.setInvisible(c.getLong(c.getColumnIndex("INVISIBLE")));
modifier.setPrintSet(c.getString(c.getColumnIndex("PRINT_SET")));
modifier.setKtSetting(c.getString(c.getColumnIndex("KT_SETTING")));
if (fid != 0) {
//非公共細項
order.setSelectQty(c.getInt(c.getColumnIndex("MAX_QTY")));
modifier.setSelectQty(c.getInt(c.getColumnIndex("MAX_QTY")));
String defmodifier = c.getString(c.getColumnIndex("DEFMODIFIER"));
if (!TextUtils.isEmpty(defmodifier) && !", ".equals(defmodifier)) {
order.setDefmodifier(defmodifier);
modifier.setDefmodifier(defmodifier);
}
}
// if (order.isVisible()) {
modifiers.add(order);
modifiers.add(modifier);
// }
}
c.close();
......
......@@ -94,32 +94,19 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
@Override
public void onNext(@NonNull LoginBean info) {
if (info.isSuccess()) {
// GsaCloudApplication.isLogin = true;
// SPUtils.put(UserConstans.IS_LOGIN, true);
UserContext.newInstance().setState(new LoginedState());
// GsaCloudApplication.userName = info.getData().getUser().getUserName();
mRootView.showMessage("登陸成功");
mRootView.loginSuccess(info);
} else {
// GsaCloudApplication.isLogin = false;
mRootView.showMessage(info.getErrMsg());
UserContext.newInstance().logOut();
// if (IAcitivity instanceof LoginActivity) {
//
// } else {
// mRootView.launchActivity(new Intent(IAcitivity, LoginActivity.class));
// }
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
UserContext.newInstance().logOut();
OkHttp3Utils.noticePersonnel(AppConstans.RP_LOGIN_ERROR, "登陸報錯:" + t.getMessage());
if (IAcitivity instanceof LoginActivity) {
} else {
......
......@@ -4,6 +4,7 @@ import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
......@@ -99,11 +100,14 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem
//是第一次進入,顯示引導頁
showGuide();
} else {
if ((boolean) SPUtils.get(UserConstans.AUTO_LOGIN, false) && UserContext.newInstance().isLogin()
&& ResturantInfoManager.newInstance().getRestaurantId() != 0) {
//自動登陸
String pwd = Aes.aesDecrypt((String) SPUtils.get(UserConstans.LOGIN_PASSWORD, ""));
mPresenter.login(SPUtils.get(UserConstans.LOGIN_USERNAME, "") + "", pwd);
boolean isLogin = (boolean) SPUtils.get(UserConstans.AUTO_LOGIN, false);
if (isLogin) {
if (!TextUtils.isEmpty(UserContext.newInstance().getLoginToken()) && ResturantInfoManager.newInstance(). getRestaurantId() != 0) {
//自動登陸
String pwd = Aes.aesDecrypt((String) SPUtils.get(UserConstans.LOGIN_PASSWORD, ""));
mPresenter.login(SPUtils.get(UserConstans.LOGIN_USERNAME, "") + "", pwd);
}
} else {
startActivity(new Intent(mContext, LoginActivity.class));
}
......
......@@ -12,9 +12,10 @@ import com.gingersoft.gsa.cloud.function.XFunctionItems;
*/
public class FunctionMain {
public static final String ORDER_GROUP = "main/order/";
public static final String MANAGER_GROUP = "main/manager/";
public static final String EMPLOYEE_GROUP = "main/employee/";
public static final String MAIN_GROUP = "main";
public static final String ORDER_GROUP = MAIN_GROUP + "/order/";
public static final String MANAGER_GROUP = MAIN_GROUP + "/manager/";
public static final String EMPLOYEE_GROUP = MAIN_GROUP + "/employee/";
/**
* 首頁- 點餐
*/
......
package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.PaymentMethodBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.bean.SettlementReport;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
......@@ -27,11 +26,11 @@ public interface SettlementContract {
void setLastTime(String date);
void returnSettlementData(SettlementReport.DataBean datasBean);
void returnSettlementData(SettlementReport datasBean);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel{
Observable<SettlementReport> getSettlementReport(int restaurantId);
Observable<BaseResult> getSettlementReport(int restaurantId);
}
}
package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.bean.SettlementReport;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
......@@ -32,7 +33,7 @@ public interface SettlementReportContract {
void setSettlementReportItem5Adapter(DefaultAdapter adapter);
void returnSettlementData(SettlementReport.DataBean datasBean);
void returnSettlementData(SettlementReport datasBean);
//打印清機報表
void printRepore();
......@@ -45,6 +46,6 @@ public interface SettlementReportContract {
Observable<SendSettlement> sendSettlement(RequestBody requestBody);
Observable<SettlementReport> getSettlementReport(int restaurantId);
Observable<BaseResult> getSettlementReport(int restaurantId);
}
}
......@@ -2,7 +2,7 @@ package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.main.mvp.model.service.SettlementService;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
......@@ -48,7 +48,7 @@ public class SettlementModel extends BaseModel implements SettlementContract.Mod
}
@Override
public Observable<SettlementReport> getSettlementReport(int restaurantId) {
public Observable<BaseResult> getSettlementReport(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(SettlementService.class)
.getSettlementReport(restaurantId);
}
......
......@@ -4,8 +4,6 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.main.mvp.model.service.MainReportService;
import com.gingersoft.gsa.cloud.main.mvp.model.service.SettlementService;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
......@@ -58,7 +56,7 @@ public class SettlementReportModel extends BaseModel implements SettlementReport
}
@Override
public Observable<SettlementReport> getSettlementReport(int restaurantId) {
public Observable<BaseResult> getSettlementReport(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(SettlementService.class)
.getSettlementReport(restaurantId);
}
......
package com.gingersoft.gsa.cloud.main.mvp.model.service;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
......@@ -26,6 +26,6 @@ public interface SettlementService {
@Headers({"Domain-Name: settlement_report_server"})
@GET("ricepon-report/api/restaurantOperation/report" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<SettlementReport> getSettlementReport(@Query("restaurantId") int restaurantId);
Observable<BaseResult> getSettlementReport(@Query("restaurantId") int restaurantId);
}
......@@ -3,8 +3,10 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.account.restaurant.ResturantInfoManager;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.bean.SettlementReport;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
......@@ -15,7 +17,6 @@ import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
......@@ -67,18 +68,16 @@ public class SettlementPresenter extends BasePresenter<SettlementContract.Model,
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<SettlementReport>(mErrorHandler) {
//{"success":false,"errCode":"data_002","errMsg":"沒有查詢到數據","sysTime":1583573772290}
@Override
public void onSubscribe(Disposable d) {
super.onSubscribe(d);
}
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull SettlementReport info) {
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
if (info.getData() != null) {
mRootView.returnSettlementData(info.getData());
SettlementReport settlementReport = JsonUtils.parseObject(info.getData(), SettlementReport.class);
if (settlementReport != null) {
mRootView.returnSettlementData(settlementReport);
}
}
} else {
// mRootView.showMessage("獲取報表失敗");
......
......@@ -5,10 +5,12 @@ import android.app.Application;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.account.restaurant.ResturantInfoManager;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementReportContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.bean.SettlementReport;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.SettlementReportActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItem5Adapter;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItemAdapter;
......@@ -196,7 +198,7 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon
// Object[] parameters = {};
// CommonTipDialog.showDoubtDialog(IActivity, "今天已清機過,是否合併清機", SettlementReportPresenter.class, SettlementReportPresenter.this,
// "sendSettlement", parameterTypes, parameters);
showMergeSettlementDialog(IActivity,"今天已清機過,是否合併清機");
showMergeSettlementDialog(IActivity, "今天已清機過,是否合併清機");
} else {
if (!TextUtils.isEmpty(info.getErrMsg())) {
showSettlementErrorDialog(info.getErrMsg() + ",清機失敗");
......@@ -217,14 +219,16 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<SettlementReport>(mErrorHandler) {
//{"success":false,"errCode":"data_002","errMsg":"沒有查詢到數據","sysTime":1583573772290}
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull SettlementReport info) {
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
if (info.getData() != null) {
mRootView.returnSettlementData(info.getData());
SettlementReport settlementReport = JsonUtils.parseObject(info.getData(), SettlementReport.class);
if (settlementReport != null) {
mRootView.returnSettlementData(settlementReport);
}
}
} else {
// mRootView.showMessage("獲取報表失敗");
......@@ -234,7 +238,7 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon
}
public void showMergeSettlementDialog(Activity context, String msg) {
public void showMergeSettlementDialog(Activity context, String msg) {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(context);
dialogBuilder.setTitleIcon(com.gingersoft.gsa.cloud.base.R.drawable.qmui_icon_dialog_doubt);
dialogBuilder.setMessage(msg);
......
......@@ -35,9 +35,7 @@ import com.gingersoft.gsa.cloud.constans.AppConstans;
import com.gingersoft.gsa.cloud.constans.ResultConstans;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.function.FunctionManager;
import com.gingersoft.gsa.cloud.function.XFunctionItems;
import com.gingersoft.gsa.cloud.function.XFunctionManager;
import com.gingersoft.gsa.cloud.function.XFunctionView;
import com.gingersoft.gsa.cloud.function.XFunctionViews;
import com.gingersoft.gsa.cloud.function.jump.ActivityJumpBean;
import com.gingersoft.gsa.cloud.function.jump.ActivityJumpStrategy;
......@@ -127,12 +125,12 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
@BindViews({R2.id.tv_function_name1, R2.id.tv_function_name2, R2.id.tv_function_name3})
TextView[] mTvFunctionNames;
@XFunctionViews(FunctionMain.ORDER_GROUP)
private List<Function> mOrderingMeals;
@XFunctionViews(FunctionMain.MANAGER_GROUP)
private List<Function> mManagement;
@XFunctionViews(FunctionMain.EMPLOYEE_GROUP)
private List<Function> mStaffManagement;
@XFunctionViews(value = FunctionMain.ORDER_GROUP, filterParent = false)
private List<Function> mOrderingMeals = new ArrayList<>();
@XFunctionViews(value = FunctionMain.MANAGER_GROUP, filterParent = false)
private List<Function> mManagement = new ArrayList<>();
@XFunctionViews(value = FunctionMain.EMPLOYEE_GROUP, filterParent = false)
private List<Function> mStaffManagement = new ArrayList<>();
private Map<Function, ActivityJumpStrategy> mActivityJumpStrategy = new HashMap<>();
......@@ -152,8 +150,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
XFunctionManager.newInstance().inJectFunctionAnnoations(this, FunctionMain.class);
XFunctionManager.inJect(this, FunctionMain.class);
super.onCreate(savedInstanceState);
mPresenter.checkAppVersion();
mPresenter.syncRestaurantExtendedConfiguration();
......
......@@ -13,7 +13,6 @@ import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerSettlementComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.main.mvp.presenter.SettlementPresenter;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseActivity;
......@@ -21,10 +20,9 @@ import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import com.qmuiteam.qmui.widget.QMUITopBar;
import butterknife.BindView;
import butterknife.OnClick;
import com.gingersoft.gsa.cloud.bean.SettlementReport;
/**
* ================================================
......@@ -48,7 +46,7 @@ public class SettlementActivity extends BaseActivity<SettlementPresenter> implem
@BindView(R2.id.btn_settlement_report)
QMUIAlphaButton btn_settlement_report;
private SettlementReport.DataBean mSettlementReportBean;
private SettlementReport mSettlementReportBean;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
......@@ -134,7 +132,7 @@ public class SettlementActivity extends BaseActivity<SettlementPresenter> implem
}
@Override
public void returnSettlementData(SettlementReport.DataBean datasBean) {
public void returnSettlementData(SettlementReport datasBean) {
this.mSettlementReportBean = datasBean;
if(mSettlementReportBean.getRestaurantOperation() != null) {
String lastSettlementText = LanguageUtils.get_language_system(this, "", "上次清機時間:");
......
......@@ -1223,6 +1223,7 @@ public class OrderDetail implements Commodity, Serializable {
OrderDetail orderDetail = new OrderDetail();
orderDetail.setProductName(modifier.getModifierName());
orderDetail.setKtPrintMainItem(modifier.getKtPrintMainItem());
orderDetail.setPrintSeting(modifier.getPrintSet());
orderDetail.setTopId(modifier.getTopId());
orderDetail.setParentId(id);
orderDetail.setProductId(modifier.getMid());
......
package com.joe.print.mvp.model.bean;
import com.joe.print.mvp.print.PrintCleanMachine;
import java.util.List;
import lombok.Data;
/**
* @author : bin
* @create date: 2020-11-28
* @update date: 2020-11-28
* @description:BBPOS打印格式
*/
@Data
public class HtmlLable {
private String lablename;
private String value;
private HtmlLable.Attributes[] attributesList;
public HtmlLable(String lablename) {
this.lablename = lablename;
}
public HtmlLable(String lablename, String value) {
this.lablename = lablename;
this.value = value;
}
public HtmlLable(String lablename, String value, HtmlLable.Attributes... attributes) {
this.lablename = lablename;
this.value = value;
this.attributesList = attributes;
}
@Data
public static final class Attributes {
private String attributesName;
private String attributesVaule;
public Attributes(String attributesName, String attributesVaule) {
this.attributesName = attributesName;
this.attributesVaule = attributesVaule;
}
}
}
......@@ -4,6 +4,7 @@ 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;
......@@ -19,6 +20,8 @@ import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -29,6 +32,7 @@ import java.util.Map;
*/
public class PrintBill extends PrinterRoot {
@Override
public Map<String, List<Bitmap>> getPrintBitmap(Context mContext, PrinterDeviceBean deviceBean) {
Map<String, List<Bitmap>> bitmapMaps = new HashMap<>();
......@@ -39,7 +43,7 @@ public class PrintBill extends PrinterRoot {
}
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
DoshokuOrder doshokuOrder = DoshokuOrder.getInstance();
ShoppingCart shoppingCart = doshokuOrder.getShoppingCart();
......@@ -70,7 +74,7 @@ public class PrintBill extends PrinterRoot {
String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) +
generateFoodInfo(foodList) +
generateHtmlFoodInfo(foodList) +
getHtmlBillInfo() +
getWholeLine() +
getPLable(payInfo.toString(), HTML_PRINT_GRAVITY_LEFT) +
......@@ -85,7 +89,9 @@ public class PrintBill extends PrinterRoot {
getPLable("《追加積分到個人賬戶》", HTML_PRINT_GRAVITY_CENTER);
}
stringBuilder += "</body></html>";
return stringBuilder;
String[] pritContent = new String[1];
pritContent[0] = stringBuilder;
return pritContent;
}
@Override
......
......@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.Bitmap;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import java.util.List;
import java.util.Map;
......@@ -19,7 +20,7 @@ public class PrintInstruction extends PrinterRoot {
}
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null;
}
......
......@@ -14,6 +14,7 @@ import com.gingersoft.gsa.cloud.base.table.bean.TableBean;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.joe.print.R;
import java.util.ArrayList;
......@@ -127,7 +128,7 @@ public class PrintKitchen extends PrinterRoot {
}
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null;
}
......
......@@ -48,7 +48,7 @@ public class PrintOtherOrder extends PrinterRoot {
}
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null;
}
......
......@@ -47,7 +47,7 @@ public class PrintOtherOrderClosing extends PrinterRoot {
}
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null;
}
......
......@@ -6,26 +6,37 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.account.restaurant.ResturantInfoManager;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.view.QRCodeUtil;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.print.bean.PrintQRCodeContent;
import com.google.zxing.WriterException;
import com.joe.print.R;
import com.joe.print.mvp.model.bean.HtmlLable;
import com.joe.print.mvp.print.common.HtmlContract;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.joe.print.mvp.print.common.HtmlContract.LABLE_P;
import static com.joe.print.mvp.print.common.HtmlContract.LABLE_QRCODE;
/**
* skyorder qrcode打印
*/
public class PrintQRCode extends PrinterRoot {
public class PrintQRCode extends PrinterRoot<PrintQRCodeContent> {
private PrintQRCodeContent mQRCodeBean;
public PrintQRCode(PrintQRCodeContent qrCodeBean) {
this.mQRCodeBean = qrCodeBean;
public PrintQRCode() {
}
@Override
protected void setPrintContent(PrintQRCodeContent printContent) {
this.mQRCodeBean = printContent;
}
@Override
......@@ -38,10 +49,46 @@ public class PrintQRCode extends PrinterRoot {
}
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
return null;
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
if (mQRCodeBean == null) {
return new String[]{"<html><body></body></html>"};
}
String stringBuilder = "<html><body>" +
getHtmlHeadInfo() +
getHtmlQRcode() +
getHtmlEndInfo()
+ "</body></html>";
String[] pritContent = new String[1];
pritContent[0] = stringBuilder;
return pritContent;
}
private String getHtmlHeadInfo() {
HtmlLable[] htmlLables = {
new HtmlLable(LABLE_P, mQRCodeBean.getPrintTableName(), new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_ALIGN, HtmlContract.value_align_center)),
new HtmlLable(LABLE_P, mQRCodeBean.getPrintTableName(), new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_ALIGN, HtmlContract.value_align_center)),
new HtmlLable(getBrLable())};
return getHtmlLables(htmlLables);
}
private String getHtmlQRcode() {
HtmlLable[] htmlLables = {
new HtmlLable(getBrLable()),
new HtmlLable(LABLE_QRCODE, mQRCodeBean.getPrintQrcode(), new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_ALIGN, HtmlContract.value_align_center)),
new HtmlLable(getBrLable())};
return getHtmlLables(htmlLables);
}
private String getHtmlEndInfo() {
HtmlLable[] htmlLables = {
new HtmlLable(LABLE_P, mQRCodeBean.getPrintTime()),
new HtmlLable(LABLE_P, mQRCodeBean.getPrintPeopleNum()),
new HtmlLable(LABLE_P, mQRCodeBean.getPrintMealEndTime()),
new HtmlLable(LABLE_P, mQRCodeBean.getPrintBottonInfo())};
return getHtmlLables(htmlLables);
}
@Override
public int getPrintCount(Context context) {
return 1;
......@@ -67,7 +114,7 @@ public class PrintQRCode extends PrinterRoot {
printTime.setText(mQRCodeBean.getPrintTime());
printPeopleNum.setText(mQRCodeBean.getPrintPeopleNum());
printMealEndTime.setText(mQRCodeBean.getPrintMealEndTime());
printBottonInfo.setText(mQRCodeBean.getBottonInfo());
printBottonInfo.setText(mQRCodeBean.getPrintBottonInfo());
Bitmap QRImage = null;
try {
......
......@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.Bitmap;
import android.view.Gravity;
import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.base.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.base.table.bean.TableBean;
......@@ -11,6 +12,7 @@ import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.joe.print.R;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -31,16 +33,24 @@ public class PrintServe extends PrinterRoot {
}
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList();
TableBean.DataBean tableBean = DoshokuOrder.getInstance().getOpenTableInfo();
if (foodList.size() == 0 || tableBean == null) {
return new String[]{"<html><body></body></html>"};
}
String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) +
generateFoodInfoTwoColumns(foodList) +
generateHtmlFoodInfoTwoColumns(foodList) +
getWholeLine() +
getHtmlFooter() + "</body></html>";
return stringBuilder;
String[] pritContent = new String[1];
pritContent[0] = stringBuilder;
return pritContent;
}
@Override
......
......@@ -46,18 +46,25 @@ public class PrintSlip extends PrinterRoot {
}
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList();
TableBean.DataBean tableBean = DoshokuOrder.getInstance().getOpenTableInfo();
if (foodList.size() == 0 || tableBean == null) {
return new String[]{"<html><body></body></html>"};
}
String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) +
generateFoodInfo(foodList) +
generateHtmlFoodInfo(foodList) +
getHtmlBillInfo() +
getWholeLine() +
getHtmlFooter() + "</body></html>";
return stringBuilder;
String[] pritContent = new String[1];
pritContent[0] = stringBuilder;
return pritContent;
}
private String getPLable(String content) {
......
......@@ -34,8 +34,22 @@ public class PrintTest extends PrinterRoot {
}
@Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) {
return null;
public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
String stringBuilder = "<html><body>" +
"<p>測試打印1<p/></br>" +
"<p>測試打印2<p/></br>" +
"<p>測試打印3<p/></br>" +
"<p>測試打印4<p/></br>" +
"<p>測試打印5<p/></br>" +
"<row>" +
" <column>This is an item with super long name</column>" +
" <column offset=0.6>1</column>" +
" <column offset=last>HKD 100</column>" +
" </row>"+
"</body></html>";
String[] pritContent = new String[1];
pritContent[0] = stringBuilder;
return pritContent;
}
@Override
......@@ -58,7 +72,7 @@ public class PrintTest extends PrinterRoot {
}
public Bitmap getBitmap(Context mContext, PrinterDeviceBean deviceBean){
public Bitmap getBitmap(Context mContext, PrinterDeviceBean deviceBean) {
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(getTextView(mContext, "炒爐打印測試", Gravity.CENTER_HORIZONTAL, getDimensionPixelSize(mContext, R.dimen.dp_10)));
......@@ -66,12 +80,12 @@ public class PrintTest extends PrinterRoot {
layout.addView(getTextLine(mContext, "項目"));
List<OrderDetails.DataBean.PRODUCTNAMEBean> productnameBeans = new ArrayList<>();
OrderDetails.DataBean.PRODUCTNAMEBean productnameBean = new OrderDetails.DataBean.PRODUCTNAMEBean();
OrderDetails.DataBean.PRODUCTNAMEBean productnameBean = new OrderDetails.DataBean.PRODUCTNAMEBean();
productnameBean.setPRODUCT_NAME("測試食品");
productnameBean.setNum("1");
productnameBean.setPRICE("10.0");
List<OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX> childBeanXES = new ArrayList<>();
List<OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX> childBeanXES = new ArrayList<>();
OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX = new OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX();
childBeanX.setPRODUCT_NAME("測試子食品");
childBeanX.setNum("1");
......
package com.joe.print.mvp.print;
import android.text.TextUtils;
import java.util.ArrayList;
import java.util.List;
......@@ -16,6 +18,11 @@ public class PrintUtils {
private static int foodAmountSpace = 12;
public final static double BBPOS_Chinese_Length = 2.4;
private static final double num_offset = 0.6;
private static final String amount_offset = "last";
private static final int food_width_percentage = 60;
private static final int num_and_amount_percentage = 40;
/**
* @param content 要顯示的內容
* @param maxLength 字符串最大長度
......@@ -128,6 +135,8 @@ public class PrintUtils {
}
/**
* BBPOS 獲取經過換行處理後的html串
*
* @param name1 字符串一
* @param name2 字符串二
* @param name3 字符串三
......@@ -142,16 +151,20 @@ public class PrintUtils {
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>");
// stringBuilder.append("<p>");
putText(chineseCharLength, name1s, name2s, name3s, stringBuilder, i);
// putText(chineseCharLength, name1s, name2s, name3s, stringBuilder, i, foodNameSpace);
// putText(chineseCharLength, name1s, name2s, name3s, stringBuilder, i, foodNumSpace);
// putText(chineseCharLength, name1s, name2s, name3s, stringBuilder, i, foodAmountSpace);
// stringBuilder.append("</p>");
}
return stringBuilder.toString();
}
/**
* BBPOS 獲取經過換行處理後的html串
*
* @param name1 字符串一
* @param name2 字符串二
* @param chineseCharLength 中文字符所佔長度,BBPOS佔2.4,針式佔1.5
......@@ -164,10 +177,14 @@ public class PrintUtils {
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>");
// stringBuilder.append("<p>");
putText(chineseCharLength, name1s, name2s, null, stringBuilder, i);
// putText(chineseCharLength, name1s, name2s, null, stringBuilder, i, foodNameSpace);
// putText(chineseCharLength, name1s, name2s, null, stringBuilder, i, foodNumSpace);
// appendFoodRow(stringBuilder, name1, name2, null, foodNameSpace, BOOPOS_food_column2);
// appendFoodRow(stringBuilder, name1, name2, null, foodNumSpace, BOOPOS_food_column2);
// stringBuilder.append("</p>");
}
return stringBuilder.toString();
}
......@@ -180,4 +197,36 @@ public class PrintUtils {
}
}
private static void putText(double chineseCharLength, List<String> name1s, List<String> name2s, List<String> name3s,
StringBuilder stringBuilder, int i) {
if (i < name1s.size()) {
stringBuilder.append("<row>\n" + "<column>" + name1s.get(i) + "</column>\n");
}
if (i < name2s.size()) {
if (name3s != null) {
//row結尾在金額位置
stringBuilder.append("<column offset=" + num_offset + ">" + name2s.get(i) + "</column>\n");
} else {
stringBuilder.append("<column offset=" + num_offset + ">" + name2s.get(i) + "</column>\n</row>\n");
}
}
if (name3s != null) {
if (i < name3s.size()) {
stringBuilder.append("<column offset=" + amount_offset + ">" + name3s.get(i) + "</column>\n</row>\n");
}
}
}
/**
* 獲取BBPos食品行打印信息
* @param name1s
* @param name2s
* @param name3s
* @return
*/
public static String getBBPosFoodLineString(List<String> name1s, List<String> name2s, List<String> name3s){
}
}
......@@ -9,6 +9,7 @@ import android.os.Build;
import android.os.IBinder;
import android.os.RemoteException;
import android.text.TextUtils;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
......@@ -50,6 +51,7 @@ import com.gingersoft.gsa.cloud.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import com.gingersoft.gsa.cloud.print.PrinterWriter58mm;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails;
import com.gingersoft.gsa.cloud.print.bean.PrintCleanMachineContent;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.gingersoft.gsa.cloud.print.bean.PrintQRCodeContent;
import com.google.zxing.WriterException;
......@@ -58,6 +60,7 @@ import com.hyweb.n5.lib.util.PrinterUtil;
import com.hyweb.n5.server.aidl.IOnPrintCallback;
import com.jess.arms.integration.AppManager;
import com.joe.print.R;
import com.joe.print.mvp.model.bean.HtmlLable;
import com.joe.print.mvp.model.bean.PrintBillBean;
import com.joe.print.mvp.print.common.PrinterFinderCallback;
import com.joe.print.mvp.print.common.SendResultCode;
......@@ -81,7 +84,7 @@ import javax.inject.Inject;
import lombok.Getter;
@Getter
public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener, ReceiveListener {
public abstract class PrinterRoot<T extends PrintContent> implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener, ReceiveListener {
@Inject
AppManager mAppManager;
......@@ -90,35 +93,40 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
private final static int N5_PAPER_WIDTH = 500;//N5打印機紙張寬度
final static String DELIMITER = "/";//將打印位置區分開來。。。。,暫時只有廚房單用到
private PrintListener printListener;
private static SparseArray<PrinterRoot> mPrinterStrategy = new SparseArray<>();
static {
mPrinterStrategy.put(PrintConstans.PRINT_TEST, new PrintTest());
mPrinterStrategy.put(PrintConstans.PRINT_SERVE, new PrintServe());
mPrinterStrategy.put(PrintConstans.PRINT_SLIP, new PrintSlip());
mPrinterStrategy.put(PrintConstans.PRINT_BILL, new PrintBill());
mPrinterStrategy.put(PrintConstans.PRINT_KITCHEN, new PrintPrjKitchen());
mPrinterStrategy.put(PrintConstans.PRINT_CLEAN_MACHINE, new PrintCleanMachine());
mPrinterStrategy.put(PrintConstans.PRINT_OTHER_ORDER, new PrintOtherOrder());
mPrinterStrategy.put(PrintConstans.PRINT_INSTRUCTION, new PrintInstruction());
mPrinterStrategy.put(PrintConstans.PRINT_OTHER_CLOSING, new PrintOtherOrderClosing());
mPrinterStrategy.put(PrintConstans.PRINT_SKYORDER_QRCODE, new PrintQRCode());
}
public static PrinterRoot getPrinterByType(int type, PrintContent content) {
//初始化USB打印
if (type == PrintConstans.PRINT_TEST) {
return new PrintTest();
} else if (type == PrintConstans.PRINT_SERVE) {
return new PrintServe();
} else if (type == PrintConstans.PRINT_SLIP) {
return new PrintSlip();
} else if (type == PrintConstans.PRINT_BILL) {
return new PrintBill();
} else if (type == PrintConstans.PRINT_KITCHEN) {
return new PrintPrjKitchen();
} else if (type == PrintConstans.PRINT_CLEAN_MACHINE) {
return new PrintCleanMachine();
} else if (type == PrintConstans.PRINT_OTHER_ORDER) {
return new PrintOtherOrder();
} else if (type == PrintConstans.PRINT_INSTRUCTION) {
return new PrintInstruction();
} else if (type == PrintConstans.PRINT_OTHER_CLOSING) {
return new PrintOtherOrderClosing();
} else if (type == PrintConstans.PRINT_SKYORDER_QRCODE) {
return new PrintQRCode((PrintQRCodeContent) content);
if (mPrinterStrategy.indexOfKey(type) >= 0) {
PrinterRoot printerRoot = mPrinterStrategy.get(type);
printerRoot.setPrintContent(content);
return printerRoot;
}
return null;
}
/**
* 需要打印的實體類 需要重寫這個方法
*
* @param printContent
*/
protected void setPrintContent(T printContent) {
}
public PrinterRoot setPrintListener(PrintListener printListener) {
this.printListener = printListener;
return this;
......@@ -183,7 +191,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
*
* @return BBPOS是HTMl格式
*/
public abstract String getPrintData(Context mContext, PrinterDeviceBean deviceBean);
public abstract String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean);
/**
* 獲取打印次數
......@@ -196,7 +204,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
/**
* 本機打印
*/
public void locationPrint(List<Bitmap> bitmaps, String printData, PrintListener listener) {
public void locationPrint(List<Bitmap> bitmaps, String [] BBPosPrintDatas, PrintListener listener) {
//本機打印
String model = Build.MODEL;
if (PrintConstans.PRINT_MODEL_V2.contains(model)) {
......@@ -207,7 +215,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>
new BBposPrint().print(printData, listener);
new BBposPrint().print(BBPosPrintDatas, listener);
} else {
listener.printFile("暫不支持本機型打印");
}
......@@ -381,10 +389,11 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
printerFinder.startFinder();
}
public void transmitPrjToPc(PrinterDeviceBean defaultPrint){
public void transmitPrjToPc(PrinterDeviceBean defaultPrint) {
}
/**
* view轉bitmap
*
......@@ -937,7 +946,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
return getPLable(content.toString(), gravity);
}
protected String generateFoodInfoTwoColumns(List<OrderDetail> foodList) {
protected String generateHtmlFoodInfoTwoColumns(List<OrderDetail> foodList) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < foodList.size(); i++) {
OrderDetail orderDetail = foodList.get(i);
......@@ -954,7 +963,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
return stringBuilder.toString();
}
protected String generateFoodInfo(List<OrderDetail> foodList) {
protected String generateHtmlFoodInfo(List<OrderDetail> foodList) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < foodList.size(); i++) {
OrderDetail orderDetail = foodList.get(i);
......@@ -979,5 +988,45 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
return PrintUtils.getLineString(name1, name2, name3, PrintUtils.BBPOS_Chinese_Length);
}
protected String getHtmlLables(HtmlLable... lables) {
StringBuilder stringBuilder = new StringBuilder();
for (HtmlLable lable : lables) {
if (TextUtils.isEmpty(lable.getValue()) && lable.getAttributesList() == null) {
//沒有標籤屬性 一般為<row>,<br>標籤直接追加即可
stringBuilder.append(lable.getLablename());
continue;
}
if (lable.getAttributesList() != null) {
stringBuilder.append("<" + lable.getLablename() + traverseAttributes(lable.getAttributesList()) + ">" + lable.getValue() + "</" + lable.getLablename() + ">\n");
} else {
stringBuilder.append("<" + lable.getLablename() + ">" + lable.getValue() + "</" + lable.getLablename() + ">\n");
}
}
return stringBuilder.toString();
}
protected String traverseAttributes(HtmlLable.Attributes[] attributesMap) {
StringBuilder stringBuilder = new StringBuilder();
for (HtmlLable.Attributes attributes : attributesMap) {
stringBuilder.append(" " + attributes.getAttributesName() + "=");
stringBuilder.append(attributes.getAttributesVaule());
}
return stringBuilder.toString();
}
protected String getRowLableStart() {
return "<row>";
}
protected String getRowLableEnd() {
return "</row>\n";
}
protected String getRowLableStart(HtmlLable.Attributes ... attributes) {
return "<row " + traverseAttributes(attributes) + ">";
}
protected String getBrLable() {
return "<br/>\n";
}
}
\ No newline at end of file
package com.joe.print.mvp.print.common;
/**
* @author : bin
* @create date: 2020-11-28
* @update date: 2020-11-28
* @description:
*/
public class HtmlContract {
public static final String LABLE_BR = "br";
public static final String LABLE_DIV = "div";
public static final String LABLE_P = "p";
public static final String LABLE_ROW = "row";
public static final String LABLE_COLUMN = "column";
public static final String LABLE_QRCODE = "qrcode";
public static final String ATTRIBUTES_WIDTH = "width";
public static final String ATTRIBUTES_OFFSET = "offset";
public static final String ATTRIBUTES_ALIGN = "align";
public static final String ATTRIBUTES_BOLD = "bold";
public static final String ATTRIBUTES_SCALE = "scale";
public static final String ATTRIBUTES_FONT_SIZE = "font-size";
public static final String value_offset_last = "last";
public static final String value_offset_percentage70 = "0.7";
public static final String value_offset_percentage60 = "0.6";
public static final String value_offset_percentage50 = "0.5";
public static final String value_offset_percentage40 = "0.4";
public static final String value_offset_percentage30 = "0.3";
public static final String value_offset_percentage35 = "0.35";
public static final String value_offset_percentage20 = "0.2";
public static final String value_align_center = "center";
public static final String value_align_right = "right";
}
......@@ -18,53 +18,61 @@ import java.net.ConnectException;
import java.util.concurrent.TimeoutException;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
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) {
public void print(String[] printDatas, PrintListener listener) {
for (String printData : printDatas) {
WiseposBean wiseposBean = new WiseposBean();
OkHttp3Utils.get("http://localhost:8080/pos?transactionType=PRINT&isExternal=false&apiVersion=21&printData=" + printData)
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
}
@Override
public void onNext(String s) {
analysisPrintResult(s, wiseposBean, listener);
}
@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 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();
}
@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 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) {
......
......@@ -255,11 +255,11 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
Map<String, List<Bitmap>> listMap = null;
List<Bitmap> zoomBitmaps = null;
String printData = null;
String[] BBPosPrintDatas = null;
if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_LOCAL && PrintConstans.PRINT_MODEL_WISEPOS.contains(Build.MODEL)) {
//本機打印並且是BBPOS
printData = printerInIt.getPrintData(mContext, defaultPrint);
if (printData == null) {
BBPosPrintDatas = printerInIt.getPrintDatas(mContext, defaultPrint);
if (BBPosPrintDatas == null) {
printFile("暫不支持打印此單");
return;
}
......@@ -284,7 +284,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
printerInIt.ipDevicePrint(defaultPrint, zoomBitmaps);
} else if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_LOCAL) {
//本地N5或Sunmi打印
printerInIt.locationPrint(zoomBitmaps, printData, this);
printerInIt.locationPrint(zoomBitmaps, BBPosPrintDatas, this);
} else if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_USB) {
//USB打印打印
printerInIt.usbPrint(mContext, zoomBitmaps);
......
......@@ -14,7 +14,6 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
public class ComponentTable implements IComponent {
public static final String ComponentName = "table";
public static final class table {
/**
......
package com.gingersoft.gsa.cloud.table;
import com.gingersoft.gsa.cloud.function.FModule;
import com.gingersoft.gsa.cloud.function.XFunctionItems;
/**
* @author : bin
* @create date: 2020-11-27
* @update date: 2020-11-27
* @description:
*/
public class FunctionTable {
public static final String TABLE_GROUP = "table";
public static final String TABLE_BOTTOM_GROUP = TABLE_GROUP + "/bottom/";
public static final String MANAGER_GROUP = TABLE_GROUP + "/manager/";
public static final String ORDER_GROUP = TABLE_GROUP + "/order/";
/**
* 餐檯頁
*/
@XFunctionItems(TABLE_BOTTOM_GROUP)
public static final FModule[] bottom = {
new FModule(TABLE_BOTTOM_GROUP + "init", R.mipmap.table_init, 0),
new FModule(TABLE_BOTTOM_GROUP + "initSkyorder", R.mipmap.table_paper, 0),
new FModule(TABLE_BOTTOM_GROUP + "move", R.mipmap.table_move, 0),
new FModule(TABLE_BOTTOM_GROUP + "skyorder", 0, 0),
new FModule(TABLE_BOTTOM_GROUP + "splite", R.mipmap.table_splite, 0),
new FModule(TABLE_BOTTOM_GROUP + "parper", R.mipmap.table_paper, 0),
};
/**
* 餐牌頁
*/
@XFunctionItems(MANAGER_GROUP)
public static final FModule[] meal = {
new FModule(MANAGER_GROUP + "plu", R.mipmap.table_paper, 0),
new FModule(MANAGER_GROUP + "discount", R.mipmap.table_skyorder, 0)
};
/**
* 賬單內容頁
*/
@XFunctionItems(ORDER_GROUP)
public static final FModule[] order = {
new FModule(ORDER_GROUP + "send", 0, 0),
new FModule(ORDER_GROUP + "print", 0, 0),
new FModule(ORDER_GROUP + "pay", 0, 0),
new FModule(ORDER_GROUP + "transfer", 0, 0),
new FModule(ORDER_GROUP + "discount", 0, 0)
};
}
......@@ -112,7 +112,7 @@ public class PrintSkyorderAction extends TableAction {
PrintQRCodeContent printQRCodeBean = new PrintQRCodeContent();
printQRCodeBean.setPrintTableName("餐檯:" + tableBean.getTableName());
printQRCodeBean.setPrintTopInfo(printTopInfo);
printQRCodeBean.setBottonInfo(printBottomInfo);
printQRCodeBean.setPrintBottonInfo(printBottomInfo);
printQRCodeBean.setPrintQrcode(QRCodeContent);
printQRCodeBean.setPrintTime("打印時間:" + printTime);
printQRCodeBean.setPrintPeopleNum("人數:" + person);
......
......@@ -17,7 +17,9 @@ import com.gingersoft.gsa.cloud.base.table.bean.TableExtBean;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.FoodSummaryConstans;
import com.gingersoft.gsa.cloud.table.ComponentTable;
import com.gingersoft.gsa.cloud.function.XFunctionManager;
import com.gingersoft.gsa.cloud.function.XFunctionViews;
import com.gingersoft.gsa.cloud.table.FunctionTable;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.TableContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.BaseOrderResponse;
......@@ -109,6 +111,8 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
private List<TableBean.DataBean> mTableList = new ArrayList<>();
private BottomFunctionAdapter mBottomFunctionAdapter;
@XFunctionViews(FunctionTable.TABLE_BOTTOM_GROUP)
private List<Function> mBottomFunctionList = new ArrayList<>();
private TableAction mTableAction;
......@@ -135,7 +139,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
public TablePresenter(TableContract.Model model, TableContract.View rootView) {
super(model, rootView);
this.IActivity = (TableActivity) rootView;
XFunctionManager.newInstance().inJect(this, FunctionTable.class);
startTablePolling();
}
......@@ -171,11 +175,12 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
}
public void initBottomFunction() {
swapSkyorderPosition(mBottomFunctionList);
initTableActions(IActivity, mBottomFunctionList);
if (mBottomFunctionAdapter == null) {
mBottomFunctionAdapter = new BottomFunctionAdapter(IActivity, mBottomFunctionList);
mRootView.setBottomFunctionAdapter(mBottomFunctionAdapter);
}
initBottomFunctionItem();
initBottomFunctionListener();
}
......@@ -207,32 +212,6 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
});
}
public void initBottomFunctionItem() {
if (mBottomFunctionList.size() > 0) {
mBottomFunctionList.clear();
}
boolean addFuctions = false;
List<Function> functions = FunctionManager.getDefault().getFunctionByResModule(GsaCloudApplication.getAppContext(), ComponentTable.table.class, ComponentTable.table.bottom, "bottom");
for (int i = 0; i < functions.size(); i++) {
Function function = functions.get(i);
if (function.getParentId() == 0) {
//有配置餐檯操作模块
functions.remove(i);
addFuctions = true;
}
}
swapSkyorderPosition(functions);
if (addFuctions) {
mBottomFunctionList.addAll(functions);
mBottomFunctionAdapter.notifyDataSetChanged();
mRootView.setBottomFunctionVisibility(true);
} else {
mRootView.setBottomFunctionVisibility(false);
}
initTableActions(IActivity, functions);
}
private void swapSkyorderPosition(List<Function> functions) {
int skyorderPosition = -1;
for (int i = 0; i < functions.size(); i++) {
......
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