Commit 922cde77 by 宁斌

bbpos結賬單,qrcode打印處理

parent d7c21e36
...@@ -52,7 +52,8 @@ buildscript { ...@@ -52,7 +52,8 @@ buildscript {
dependencies { dependencies {
// api project(':qm-skin-maker') //fragmentation
api project(':fragmentation_core')
//support //support
api(rootProject.ext.dependencies["support-v4"]) { api(rootProject.ext.dependencies["support-v4"]) {
exclude module: 'support-annotations' exclude module: 'support-annotations'
...@@ -140,11 +141,6 @@ dependencies { ...@@ -140,11 +141,6 @@ dependencies {
//可長按拖動 側滑刪除的recyclerview //可長按拖動 側滑刪除的recyclerview
api rootProject.ext.dependencies["yzjRecyclerView"] 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 //test
api rootProject.ext.dependencies["timber"] api rootProject.ext.dependencies["timber"]
implementation rootProject.ext.dependencies["retrofit-url-manager"] implementation rootProject.ext.dependencies["retrofit-url-manager"]
...@@ -153,6 +149,7 @@ dependencies { ...@@ -153,6 +149,7 @@ dependencies {
// testApi rootProject.ext.dependencies["junit"] // testApi rootProject.ext.dependencies["junit"]
api rootProject.ext.dependencies["immersionbar-components"] api rootProject.ext.dependencies["immersionbar-components"]
api rootProject.ext.dependencies["immersionbar"] api rootProject.ext.dependencies["immersionbar"]
} }
......
...@@ -13,6 +13,9 @@ public class BrandInfo { ...@@ -13,6 +13,9 @@ public class BrandInfo {
private int brandId; private int brandId;
private String brandName; private String brandName;
public BrandInfo() {
}
public BrandInfo(int brandId, String brandName) { public BrandInfo(int brandId, String brandName) {
this.brandId = brandId; this.brandId = brandId;
this.brandName = brandName; this.brandName = brandName;
......
...@@ -15,6 +15,9 @@ public class RestaurantInfo { ...@@ -15,6 +15,9 @@ public class RestaurantInfo {
private String restaurantName; private String restaurantName;
private String gsPosShopId; private String gsPosShopId;
public RestaurantInfo() {
}
public RestaurantInfo(int restaurantId, String restaurantName, String gsPosShopId) { public RestaurantInfo(int restaurantId, String restaurantName, String gsPosShopId) {
this.restaurantId = restaurantId; this.restaurantId = restaurantId;
this.restaurantName = restaurantName; this.restaurantName = restaurantName;
......
package com.gingersoft.gsa.cloud.account.restaurant; package com.gingersoft.gsa.cloud.account.restaurant;
import android.text.TextUtils; import android.text.TextUtils;
import com.gingersoft.gsa.cloud.account.user.UserConstans; import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
...@@ -23,8 +24,18 @@ public class ResturantInfoManager { ...@@ -23,8 +24,18 @@ public class ResturantInfoManager {
*/ */
private RestaurantInfo restaurantInfo; private RestaurantInfo restaurantInfo;
private ResturantInfoManager() { 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() { public static ResturantInfoManager newInstance() {
...@@ -38,35 +49,35 @@ public class ResturantInfoManager { ...@@ -38,35 +49,35 @@ public class ResturantInfoManager {
if (restaurantInfo != null) { if (restaurantInfo != null) {
return restaurantInfo.getRestaurantId(); return restaurantInfo.getRestaurantId();
} }
return 0; return (int) SPUtils.get(UserConstans.restaurantId, 0);
} }
public String getGsPosShopId() { public String getGsPosShopId() {
if (restaurantInfo != null) { if (restaurantInfo != null) {
return restaurantInfo.getGsPosShopId(); return restaurantInfo.getGsPosShopId();
} }
return "-1"; return (String) SPUtils.get(UserConstans.gsPosShopId, "-1");
} }
public String getRestaurantName() { public String getRestaurantName() {
if (restaurantInfo != null) { if (restaurantInfo != null) {
return restaurantInfo.getRestaurantName(); return restaurantInfo.getRestaurantName();
} }
return ""; return (String) SPUtils.get(UserConstans.restaurantName, "");
} }
public int getBrandId() { public int getBrandId() {
if (brandInfo != null) { if (brandInfo != null) {
return brandInfo.getBrandId(); return brandInfo.getBrandId();
} }
return 0; return (int) SPUtils.get(UserConstans.brandId, 0);
} }
public String getBrandName() { public String getBrandName() {
if (brandInfo != null) { if (brandInfo != null) {
return brandInfo.getBrandName(); return brandInfo.getBrandName();
} }
return ""; return (String) SPUtils.get(UserConstans.brandName, "");
} }
public void setResturantInfo(RestaurantInfo info) { public void setResturantInfo(RestaurantInfo info) {
...@@ -114,5 +125,4 @@ public class ResturantInfoManager { ...@@ -114,5 +125,4 @@ public class ResturantInfoManager {
SPUtils.put(UserConstans.brandRestaurantInfos, brandRestaurantIds); SPUtils.put(UserConstans.brandRestaurantInfos, brandRestaurantIds);
} }
} }
...@@ -34,6 +34,12 @@ public class UserContext { ...@@ -34,6 +34,12 @@ public class UserContext {
private 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() { public static UserContext newInstance() {
...@@ -67,21 +73,21 @@ public class UserContext { ...@@ -67,21 +73,21 @@ public class UserContext {
if (info != null) { if (info != null) {
return info.getToken(); return info.getToken();
} }
return ""; return (String) SPUtils.get(UserConstans.token, "");
} }
public int getMemberId() { public int getMemberId() {
if (info != null) { if (info != null) {
return info.getUserId(); return info.getUserId();
} }
return 0; return (int) SPUtils.get(UserConstans.memberId, 0);
} }
public String getMemberName() { public String getMemberName() {
if (info != null) { if (info != null) {
return info.getUserName(); return info.getUserName();
} }
return ""; return (String) SPUtils.get(UserConstans.memberName, "");
} }
public void setUserInfo(UserInfo info) { 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 { ...@@ -17,7 +17,7 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler {
@Override @Override
public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response) { public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response) {
// 统一处理http响应。eg:状态码不是200时,根据状态码做相应的处理。 // 统一处理http响应。eg:状态码不是200时,根据状态码做相应的处理。
LoganManager.w_network(httpResult); LoganManager.w_network("發送請求: "+httpResult);
return response; return response;
} }
...@@ -25,7 +25,7 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler { ...@@ -25,7 +25,7 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler {
public Request onHttpRequestBefore(Interceptor.Chain chain, Request request) { public Request onHttpRequestBefore(Interceptor.Chain chain, Request request) {
// 统一处理http请求。eg:给request统一添加token或者header以及参数加密等操作 // 统一处理http请求。eg:给request统一添加token或者header以及参数加密等操作
String requestReult = request.toString(); String requestReult = request.toString();
LoganManager.w_network(requestReult); LoganManager.w_network("接收請求: "+requestReult);
return chain.request().newBuilder() return chain.request().newBuilder()
.build(); .build();
} }
......
package com.gingersoft.gsa.cloud.function; 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; import lombok.Data;
/** /**
......
package com.gingersoft.gsa.cloud.function; package com.gingersoft.gsa.cloud.function;
import android.app.Activity;
import android.content.Context;
import com.gingersoft.gsa.cloud.database.bean.Function; import com.gingersoft.gsa.cloud.database.bean.Function;
import java.util.List; import java.util.List;
...@@ -15,8 +12,6 @@ import java.util.List; ...@@ -15,8 +12,6 @@ import java.util.List;
*/ */
public interface XFunctionAction { public interface XFunctionAction {
void inJectFunctionAnnoations(Object view,Class<?> functionModules);
List<Function> getFunctionItems(String targetResKey,FModule[] fModules); List<Function> getFunctionItems(String targetResKey,FModule[] fModules);
Function getFunctionItem(String targetResKey,FModule fModules); Function getFunctionItem(String targetResKey,FModule fModules);
......
package com.gingersoft.gsa.cloud.function; package com.gingersoft.gsa.cloud.function;
import android.app.Activity; import android.app.Activity;
import android.text.TextUtils;
import android.view.View; import android.view.View;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.gingersoft.gsa.cloud.base.utils.ReflectionUtils;
import com.gingersoft.gsa.cloud.database.bean.Function; import com.gingersoft.gsa.cloud.database.bean.Function;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
...@@ -17,8 +15,6 @@ import java.util.Iterator; ...@@ -17,8 +15,6 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import butterknife.BindView;
/** /**
* @author : bin * @author : bin
* @create date: 2020-11-23 * @create date: 2020-11-23
...@@ -45,8 +41,7 @@ public class XFunctionManager implements XFunctionAction { ...@@ -45,8 +41,7 @@ public class XFunctionManager implements XFunctionAction {
} }
@Override public static void inJect(Object rootView, Class<?> functionModules) {
public void inJectFunctionAnnoations(Object rootView, Class<?> functionModules) {
Map<String, FModule[]> FModuleValues = new HashMap<>(); Map<String, FModule[]> FModuleValues = new HashMap<>();
Map<String, FModule> FModuleValue = new HashMap<>(); Map<String, FModule> FModuleValue = new HashMap<>();
...@@ -101,17 +96,33 @@ public class XFunctionManager implements XFunctionAction { ...@@ -101,17 +96,33 @@ public class XFunctionManager implements XFunctionAction {
if (annotation instanceof XFunctionViews) { if (annotation instanceof XFunctionViews) {
XFunctionViews functionViews = (XFunctionViews) annotation; XFunctionViews functionViews = (XFunctionViews) annotation;
String value = functionViews.value(); String value = functionViews.value();
boolean filterParent = functionViews.filterParent();
if (FModuleValues.containsKey(value)) { if (FModuleValues.containsKey(value)) {
//功能組 拿到對應的key去匹配 //功能組 拿到對應的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 { try {
String name = field.getName();
//設置功能組數據源 //設置功能組數據源
ReflectionUtils.setField(rootView.getClass(), name, field.get(name), functions); List<Function> functionList = (List<Function>) field.get(rootView);
} catch (NoSuchFieldException e) { if (functionList == null) {
e.printStackTrace(); functionList = new ArrayList<>();
}
functionList.addAll(functions);
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
e.printStackTrace(); e.printStackTrace();
} finally {
if (functions != null && functions.size() > 0) {
functions.clear();
functions = null;
}
} }
} }
} else if (annotation instanceof XFunctionView) { } else if (annotation instanceof XFunctionView) {
...@@ -145,8 +156,8 @@ public class XFunctionManager implements XFunctionAction { ...@@ -145,8 +156,8 @@ public class XFunctionManager implements XFunctionAction {
} }
@Override @Override
public List<Function> getFunctionItems(String targetResKey, FModule[] fModules) { public ArrayList<Function> getFunctionItems(String targetResKey, FModule[] fModules) {
List<Function> functionList = new ArrayList<>(); ArrayList<Function> functionList = new ArrayList<>();
if (mFunctionMap.size() == 0) { if (mFunctionMap.size() == 0) {
return functionList; return functionList;
} }
...@@ -157,7 +168,8 @@ public class XFunctionManager implements XFunctionAction { ...@@ -157,7 +168,8 @@ public class XFunctionManager implements XFunctionAction {
//獲取具體的功能組,如table/bottom/init下的table/bottom組 //獲取具體的功能組,如table/bottom/init下的table/bottom組
String[] keyRes = resUrl.split("/"); String[] keyRes = resUrl.split("/");
if (keyRes.length > 1) { 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)) { if (resUrl.startsWith(targetResKey)) {
/** /**
* 匹配功能組成功{@link XFunctionItems} * 匹配功能組成功{@link XFunctionItems}
......
...@@ -18,4 +18,10 @@ import java.lang.annotation.Target; ...@@ -18,4 +18,10 @@ import java.lang.annotation.Target;
public @interface XFunctionViews { public @interface XFunctionViews {
String value(); String value();
/**
* 過濾父級,一般為功能組名
* @return
*/
boolean filterParent() default true;
} }
package com.gingersoft.gsa.cloud.function.jump; package com.gingersoft.gsa.cloud.function.jump;
import android.app.Activity; 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.Getter;
import lombok.Setter; import lombok.Setter;
......
package com.gingersoft.gsa.cloud.function.jump; 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.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author : bin * @author : bin
......
package com.gingersoft.gsa.cloud.function.jump; package com.gingersoft.gsa.cloud.function.jump;
import android.content.Context; import android.content.Context;
import android.content.Intent;
/** /**
* @author : bin * @author : bin
* @create date: 2020-11-26 * @create date: 2020-11-26
* @update date: 2020-11-26 * @update date: 2020-11-26
* @description:統一頁面跳轉接口 , 避免一堆if else,switch * @description:統一頁面跳轉接口
*/ */
public interface ActivityJumpStrategy { public interface ActivityJumpStrategy {
......
package com.gingersoft.gsa.cloud.function.jump; package com.gingersoft.gsa.cloud.function.jump;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.text.TextUtils; import android.text.TextUtils;
import com.billy.cc.core.component.CC; import com.billy.cc.core.component.CC;
...@@ -14,7 +13,6 @@ import com.billy.cc.core.component.CC; ...@@ -14,7 +13,6 @@ import com.billy.cc.core.component.CC;
*/ */
public class CCToJumpStrategy implements ActivityJumpStrategy{ public class CCToJumpStrategy implements ActivityJumpStrategy{
@Override @Override
public void actionToJumpPage(Context context, ActivityJumpBean jumpBean) { public void actionToJumpPage(Context context, ActivityJumpBean jumpBean) {
if (!TextUtils.isEmpty(jumpBean.getComponentName()) && !TextUtils.isEmpty(jumpBean.getActionName())) { if (!TextUtils.isEmpty(jumpBean.getComponentName()) && !TextUtils.isEmpty(jumpBean.getActionName())) {
......
...@@ -41,7 +41,7 @@ public class LoganManager { ...@@ -41,7 +41,7 @@ public class LoganManager {
Logan.w(log, LoganConfig.NETWORK_LEVLE); Logan.w(log, LoganConfig.NETWORK_LEVLE);
//網絡日誌比較重要立即寫入本地 //網絡日誌比較重要立即寫入本地
// Logan.f(); // Logan.f();
printLog("Network", log); // printLog("Network", log);
} }
public static void w_crash(String 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 { ...@@ -17,7 +17,6 @@ public class PrintQRCodeContent implements PrintContent, Parcelable {
private String printTableName; private String printTableName;
private String printTopInfo; private String printTopInfo;
private String BottonInfo;
private String printQrcode; private String printQrcode;
private String printTime; private String printTime;
private String printPeopleNum; private String printPeopleNum;
...@@ -36,7 +35,6 @@ public class PrintQRCodeContent implements PrintContent, Parcelable { ...@@ -36,7 +35,6 @@ public class PrintQRCodeContent implements PrintContent, Parcelable {
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.printTableName); dest.writeString(this.printTableName);
dest.writeString(this.printTopInfo); dest.writeString(this.printTopInfo);
dest.writeString(this.BottonInfo);
dest.writeString(this.printQrcode); dest.writeString(this.printQrcode);
dest.writeString(this.printTime); dest.writeString(this.printTime);
dest.writeString(this.printPeopleNum); dest.writeString(this.printPeopleNum);
...@@ -47,7 +45,6 @@ public class PrintQRCodeContent implements PrintContent, Parcelable { ...@@ -47,7 +45,6 @@ public class PrintQRCodeContent implements PrintContent, Parcelable {
protected PrintQRCodeContent(Parcel in) { protected PrintQRCodeContent(Parcel in) {
this.printTableName = in.readString(); this.printTableName = in.readString();
this.printTopInfo = in.readString(); this.printTopInfo = in.readString();
this.BottonInfo = in.readString();
this.printQrcode = in.readString(); this.printQrcode = in.readString();
this.printTime = in.readString(); this.printTime = in.readString();
this.printPeopleNum = in.readString(); this.printPeopleNum = in.readString();
......
...@@ -22,188 +22,6 @@ import java.util.Date; ...@@ -22,188 +22,6 @@ import java.util.Date;
@Entity @Entity
public class Modifier { 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") @Property(nameInDb = "_id")
@Id(autoincrement = true) @Id(autoincrement = true)
private Long dbid; private Long dbid;
......
...@@ -324,7 +324,7 @@ public class ModifierDaoUtils { ...@@ -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" + // 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"; // " 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"; " 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<>(); List<Modifier> mfs_child = new ArrayList<>();
...@@ -337,14 +337,14 @@ public class ModifierDaoUtils { ...@@ -337,14 +337,14 @@ public class ModifierDaoUtils {
switch (mode) { switch (mode) {
case modifierMode_All: 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"; " 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); mfs_child1 = query_modifier_Child_new(sqlstr, fid);
List<Modifier> mfs_child2 = new ArrayList<>(); 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"; " 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); mfs_child2 = query_modifier_Child_new(sqlstr, fid);
...@@ -382,33 +382,35 @@ public class ModifierDaoUtils { ...@@ -382,33 +382,35 @@ public class ModifierDaoUtils {
ArrayList<Modifier> modifiers = new ArrayList<>(); ArrayList<Modifier> modifiers = new ArrayList<>();
Cursor c = mManager.getDaoSession().getModifierDao().getDatabase().rawQuery(sql, null); Cursor c = mManager.getDaoSession().getModifierDao().getDatabase().rawQuery(sql, null);
while (c.moveToNext()) { while (c.moveToNext()) {
Modifier order = new Modifier(); Modifier modifier = new Modifier();
order.setFid(fid); modifier.setFid(fid);
order.setMid(c.getLong(c.getColumnIndex("MID"))); modifier.setMid(c.getLong(c.getColumnIndex("MID")));
order.setPrice(c.getDouble(c.getColumnIndex("PRICE"))); modifier.setPrice(c.getDouble(c.getColumnIndex("PRICE")));
order.setIsParent(c.getLong(c.getColumnIndex("IS_PARENT"))); modifier.setIsParent(c.getLong(c.getColumnIndex("IS_PARENT")));
// order.setSeqNo(c.getLong(c.getColumnIndex("SEQ_NO"))); // order.setSeqNo(c.getLong(c.getColumnIndex("SEQ_NO")));
order.setModifierName(c.getString(c.getColumnIndex("MODIFIER_NAME"))); modifier.setModifierName(c.getString(c.getColumnIndex("MODIFIER_NAME")));
order.setModifierName1(c.getString(c.getColumnIndex("MODIFIER_NAME1"))); modifier.setModifierName1(c.getString(c.getColumnIndex("MODIFIER_NAME1")));
order.setModifierName2(c.getString(c.getColumnIndex("MODIFIER_NAME2"))); modifier.setModifierName2(c.getString(c.getColumnIndex("MODIFIER_NAME2")));
// order.setVisible(c.getInt(c.getColumnIndex("VISIBLE"))); // order.setVisible(c.getInt(c.getColumnIndex("VISIBLE")));
order.setTopId(c.getLong(c.getColumnIndex("TOP_ID"))); modifier.setTopId(c.getLong(c.getColumnIndex("TOP_ID")));
order.setModComm(c.getLong(c.getColumnIndex("MOD_COMM"))); modifier.setModComm(c.getLong(c.getColumnIndex("MOD_COMM")));
order.setModMsg(c.getLong(c.getColumnIndex("MOD_MSG"))); modifier.setModMsg(c.getLong(c.getColumnIndex("MOD_MSG")));
order.setModTaste(c.getLong(c.getColumnIndex("MOD_TASTE"))); modifier.setModTaste(c.getLong(c.getColumnIndex("MOD_TASTE")));
order.setMultiple(c.getDouble(c.getColumnIndex("MULTIPLE"))); modifier.setMultiple(c.getDouble(c.getColumnIndex("MULTIPLE")));
order.setAbleDisCount(c.getLong(c.getColumnIndex("ABLE_DIS_COUNT"))); modifier.setAbleDisCount(c.getLong(c.getColumnIndex("ABLE_DIS_COUNT")));
order.setInvisible(c.getLong(c.getColumnIndex("INVISIBLE"))); 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) { 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")); String defmodifier = c.getString(c.getColumnIndex("DEFMODIFIER"));
if (!TextUtils.isEmpty(defmodifier) && !", ".equals(defmodifier)) { if (!TextUtils.isEmpty(defmodifier) && !", ".equals(defmodifier)) {
order.setDefmodifier(defmodifier); modifier.setDefmodifier(defmodifier);
} }
} }
// if (order.isVisible()) { // if (order.isVisible()) {
modifiers.add(order); modifiers.add(modifier);
// } // }
} }
c.close(); c.close();
......
...@@ -94,32 +94,19 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas ...@@ -94,32 +94,19 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
@Override @Override
public void onNext(@NonNull LoginBean info) { public void onNext(@NonNull LoginBean info) {
if (info.isSuccess()) { if (info.isSuccess()) {
// GsaCloudApplication.isLogin = true;
// SPUtils.put(UserConstans.IS_LOGIN, true);
UserContext.newInstance().setState(new LoginedState()); UserContext.newInstance().setState(new LoginedState());
// GsaCloudApplication.userName = info.getData().getUser().getUserName();
mRootView.showMessage("登陸成功"); mRootView.showMessage("登陸成功");
mRootView.loginSuccess(info); mRootView.loginSuccess(info);
} else { } else {
// GsaCloudApplication.isLogin = false;
mRootView.showMessage(info.getErrMsg()); mRootView.showMessage(info.getErrMsg());
UserContext.newInstance().logOut(); UserContext.newInstance().logOut();
// if (IAcitivity instanceof LoginActivity) {
//
// } else {
// mRootView.launchActivity(new Intent(IAcitivity, LoginActivity.class));
// }
} }
} }
@Override @Override
public void onError(Throwable t) { public void onError(Throwable t) {
super.onError(t); super.onError(t);
UserContext.newInstance().logOut();
OkHttp3Utils.noticePersonnel(AppConstans.RP_LOGIN_ERROR, "登陸報錯:" + t.getMessage()); OkHttp3Utils.noticePersonnel(AppConstans.RP_LOGIN_ERROR, "登陸報錯:" + t.getMessage());
if (IAcitivity instanceof LoginActivity) { if (IAcitivity instanceof LoginActivity) {
} else { } else {
......
...@@ -4,6 +4,7 @@ import android.animation.AnimatorSet; ...@@ -4,6 +4,7 @@ import android.animation.AnimatorSet;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
...@@ -99,11 +100,14 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem ...@@ -99,11 +100,14 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem
//是第一次進入,顯示引導頁 //是第一次進入,顯示引導頁
showGuide(); showGuide();
} else { } else {
if ((boolean) SPUtils.get(UserConstans.AUTO_LOGIN, false) && UserContext.newInstance().isLogin() boolean isLogin = (boolean) SPUtils.get(UserConstans.AUTO_LOGIN, false);
&& ResturantInfoManager.newInstance().getRestaurantId() != 0) { if (isLogin) {
if (!TextUtils.isEmpty(UserContext.newInstance().getLoginToken()) && ResturantInfoManager.newInstance(). getRestaurantId() != 0) {
//自動登陸 //自動登陸
String pwd = Aes.aesDecrypt((String) SPUtils.get(UserConstans.LOGIN_PASSWORD, "")); String pwd = Aes.aesDecrypt((String) SPUtils.get(UserConstans.LOGIN_PASSWORD, ""));
mPresenter.login(SPUtils.get(UserConstans.LOGIN_USERNAME, "") + "", pwd); mPresenter.login(SPUtils.get(UserConstans.LOGIN_USERNAME, "") + "", pwd);
}
} else { } else {
startActivity(new Intent(mContext, LoginActivity.class)); startActivity(new Intent(mContext, LoginActivity.class));
} }
......
...@@ -12,9 +12,10 @@ import com.gingersoft.gsa.cloud.function.XFunctionItems; ...@@ -12,9 +12,10 @@ import com.gingersoft.gsa.cloud.function.XFunctionItems;
*/ */
public class FunctionMain { public class FunctionMain {
public static final String ORDER_GROUP = "main/order/"; public static final String MAIN_GROUP = "main";
public static final String MANAGER_GROUP = "main/manager/"; public static final String ORDER_GROUP = MAIN_GROUP + "/order/";
public static final String EMPLOYEE_GROUP = "main/employee/"; 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; package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.PaymentMethodBean; import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport; import com.gingersoft.gsa.cloud.bean.SettlementReport;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.RequestBody;
/** /**
...@@ -27,11 +26,11 @@ public interface SettlementContract { ...@@ -27,11 +26,11 @@ public interface SettlementContract {
void setLastTime(String date); void setLastTime(String date);
void returnSettlementData(SettlementReport.DataBean datasBean); void returnSettlementData(SettlementReport datasBean);
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel{ interface Model extends IModel{
Observable<SettlementReport> getSettlementReport(int restaurantId); Observable<BaseResult> getSettlementReport(int restaurantId);
} }
} }
package com.gingersoft.gsa.cloud.main.mvp.contract; 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.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.base.DefaultAdapter;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
...@@ -32,7 +33,7 @@ public interface SettlementReportContract { ...@@ -32,7 +33,7 @@ public interface SettlementReportContract {
void setSettlementReportItem5Adapter(DefaultAdapter adapter); void setSettlementReportItem5Adapter(DefaultAdapter adapter);
void returnSettlementData(SettlementReport.DataBean datasBean); void returnSettlementData(SettlementReport datasBean);
//打印清機報表 //打印清機報表
void printRepore(); void printRepore();
...@@ -45,6 +46,6 @@ public interface SettlementReportContract { ...@@ -45,6 +46,6 @@ public interface SettlementReportContract {
Observable<SendSettlement> sendSettlement(RequestBody requestBody); 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; ...@@ -2,7 +2,7 @@ package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application; 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.gingersoft.gsa.cloud.main.mvp.model.service.SettlementService;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager; import com.jess.arms.integration.IRepositoryManager;
...@@ -48,7 +48,7 @@ public class SettlementModel extends BaseModel implements SettlementContract.Mod ...@@ -48,7 +48,7 @@ public class SettlementModel extends BaseModel implements SettlementContract.Mod
} }
@Override @Override
public Observable<SettlementReport> getSettlementReport(int restaurantId) { public Observable<BaseResult> getSettlementReport(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(SettlementService.class) return mRepositoryManager.obtainRetrofitService(SettlementService.class)
.getSettlementReport(restaurantId); .getSettlementReport(restaurantId);
} }
......
...@@ -4,8 +4,6 @@ import android.app.Application; ...@@ -4,8 +4,6 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult; import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement; 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.gingersoft.gsa.cloud.main.mvp.model.service.SettlementService;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager; import com.jess.arms.integration.IRepositoryManager;
...@@ -58,7 +56,7 @@ public class SettlementReportModel extends BaseModel implements SettlementReport ...@@ -58,7 +56,7 @@ public class SettlementReportModel extends BaseModel implements SettlementReport
} }
@Override @Override
public Observable<SettlementReport> getSettlementReport(int restaurantId) { public Observable<BaseResult> getSettlementReport(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(SettlementService.class) return mRepositoryManager.obtainRetrofitService(SettlementService.class)
.getSettlementReport(restaurantId); .getSettlementReport(restaurantId);
} }
......
package com.gingersoft.gsa.cloud.main.mvp.model.service; 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.SendSettlement;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager; import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
...@@ -26,6 +26,6 @@ public interface SettlementService { ...@@ -26,6 +26,6 @@ public interface SettlementService {
@Headers({"Domain-Name: settlement_report_server"}) @Headers({"Domain-Name: settlement_report_server"})
@GET("ricepon-report/api/restaurantOperation/report" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @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; ...@@ -3,8 +3,10 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application; import android.app.Application;
import com.gingersoft.gsa.cloud.account.restaurant.ResturantInfoManager; 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.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.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader; import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager; import com.jess.arms.integration.AppManager;
...@@ -15,7 +17,6 @@ import javax.inject.Inject; ...@@ -15,7 +17,6 @@ import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
...@@ -67,18 +68,16 @@ public class SettlementPresenter extends BasePresenter<SettlementContract.Model, ...@@ -67,18 +68,16 @@ public class SettlementPresenter extends BasePresenter<SettlementContract.Model,
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading()) .doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView)) .compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<SettlementReport>(mErrorHandler) { .subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
//{"success":false,"errCode":"data_002","errMsg":"沒有查詢到數據","sysTime":1583573772290}
@Override
public void onSubscribe(Disposable d) {
super.onSubscribe(d);
}
@Override @Override
public void onNext(@NonNull SettlementReport info) { public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) { if (info != null && info.isSuccess()) {
if (info.getData() != null) { if (info.getData() != null) {
mRootView.returnSettlementData(info.getData()); SettlementReport settlementReport = JsonUtils.parseObject(info.getData(), SettlementReport.class);
if (settlementReport != null) {
mRootView.returnSettlementData(settlementReport);
}
} }
} else { } else {
// mRootView.showMessage("獲取報表失敗"); // mRootView.showMessage("獲取報表失敗");
......
...@@ -5,10 +5,12 @@ import android.app.Application; ...@@ -5,10 +5,12 @@ import android.app.Application;
import android.text.TextUtils; import android.text.TextUtils;
import com.gingersoft.gsa.cloud.account.restaurant.ResturantInfoManager; 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.R;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementReportContract; 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.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.activity.SettlementReportActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItem5Adapter; import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItem5Adapter;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItemAdapter; import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItemAdapter;
...@@ -196,7 +198,7 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon ...@@ -196,7 +198,7 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon
// Object[] parameters = {}; // Object[] parameters = {};
// CommonTipDialog.showDoubtDialog(IActivity, "今天已清機過,是否合併清機", SettlementReportPresenter.class, SettlementReportPresenter.this, // CommonTipDialog.showDoubtDialog(IActivity, "今天已清機過,是否合併清機", SettlementReportPresenter.class, SettlementReportPresenter.this,
// "sendSettlement", parameterTypes, parameters); // "sendSettlement", parameterTypes, parameters);
showMergeSettlementDialog(IActivity,"今天已清機過,是否合併清機"); showMergeSettlementDialog(IActivity, "今天已清機過,是否合併清機");
} else { } else {
if (!TextUtils.isEmpty(info.getErrMsg())) { if (!TextUtils.isEmpty(info.getErrMsg())) {
showSettlementErrorDialog(info.getErrMsg() + ",清機失敗"); showSettlementErrorDialog(info.getErrMsg() + ",清機失敗");
...@@ -217,14 +219,16 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon ...@@ -217,14 +219,16 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading()) .doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView)) .compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<SettlementReport>(mErrorHandler) { .subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
//{"success":false,"errCode":"data_002","errMsg":"沒有查詢到數據","sysTime":1583573772290}
@Override @Override
public void onNext(@NonNull SettlementReport info) { public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) { if (info != null && info.isSuccess()) {
if (info.getData() != null) { if (info.getData() != null) {
mRootView.returnSettlementData(info.getData()); SettlementReport settlementReport = JsonUtils.parseObject(info.getData(), SettlementReport.class);
if (settlementReport != null) {
mRootView.returnSettlementData(settlementReport);
}
} }
} else { } else {
// mRootView.showMessage("獲取報表失敗"); // mRootView.showMessage("獲取報表失敗");
......
...@@ -35,9 +35,7 @@ import com.gingersoft.gsa.cloud.constans.AppConstans; ...@@ -35,9 +35,7 @@ import com.gingersoft.gsa.cloud.constans.AppConstans;
import com.gingersoft.gsa.cloud.constans.ResultConstans; import com.gingersoft.gsa.cloud.constans.ResultConstans;
import com.gingersoft.gsa.cloud.database.bean.Function; import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.function.FunctionManager; 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.XFunctionManager;
import com.gingersoft.gsa.cloud.function.XFunctionView;
import com.gingersoft.gsa.cloud.function.XFunctionViews; import com.gingersoft.gsa.cloud.function.XFunctionViews;
import com.gingersoft.gsa.cloud.function.jump.ActivityJumpBean; import com.gingersoft.gsa.cloud.function.jump.ActivityJumpBean;
import com.gingersoft.gsa.cloud.function.jump.ActivityJumpStrategy; import com.gingersoft.gsa.cloud.function.jump.ActivityJumpStrategy;
...@@ -127,12 +125,12 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl ...@@ -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}) @BindViews({R2.id.tv_function_name1, R2.id.tv_function_name2, R2.id.tv_function_name3})
TextView[] mTvFunctionNames; TextView[] mTvFunctionNames;
@XFunctionViews(FunctionMain.ORDER_GROUP) @XFunctionViews(value = FunctionMain.ORDER_GROUP, filterParent = false)
private List<Function> mOrderingMeals; private List<Function> mOrderingMeals = new ArrayList<>();
@XFunctionViews(FunctionMain.MANAGER_GROUP) @XFunctionViews(value = FunctionMain.MANAGER_GROUP, filterParent = false)
private List<Function> mManagement; private List<Function> mManagement = new ArrayList<>();
@XFunctionViews(FunctionMain.EMPLOYEE_GROUP) @XFunctionViews(value = FunctionMain.EMPLOYEE_GROUP, filterParent = false)
private List<Function> mStaffManagement; private List<Function> mStaffManagement = new ArrayList<>();
private Map<Function, ActivityJumpStrategy> mActivityJumpStrategy = new HashMap<>(); private Map<Function, ActivityJumpStrategy> mActivityJumpStrategy = new HashMap<>();
...@@ -152,8 +150,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl ...@@ -152,8 +150,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
@Override @Override
public void onCreate(@Nullable Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
XFunctionManager.newInstance().inJectFunctionAnnoations(this, FunctionMain.class); XFunctionManager.inJect(this, FunctionMain.class);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mPresenter.checkAppVersion(); mPresenter.checkAppVersion();
mPresenter.syncRestaurantExtendedConfiguration(); mPresenter.syncRestaurantExtendedConfiguration();
......
...@@ -13,7 +13,6 @@ import com.gingersoft.gsa.cloud.main.R; ...@@ -13,7 +13,6 @@ import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2; import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerSettlementComponent; 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.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.main.mvp.presenter.SettlementPresenter;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseActivity; import com.jess.arms.base.BaseActivity;
...@@ -21,10 +20,9 @@ import com.jess.arms.di.component.AppComponent; ...@@ -21,10 +20,9 @@ import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton; import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import com.qmuiteam.qmui.widget.QMUITopBar; import com.qmuiteam.qmui.widget.QMUITopBar;
import butterknife.BindView; import butterknife.BindView;
import butterknife.OnClick; import butterknife.OnClick;
import com.gingersoft.gsa.cloud.bean.SettlementReport;
/** /**
* ================================================ * ================================================
...@@ -48,7 +46,7 @@ public class SettlementActivity extends BaseActivity<SettlementPresenter> implem ...@@ -48,7 +46,7 @@ public class SettlementActivity extends BaseActivity<SettlementPresenter> implem
@BindView(R2.id.btn_settlement_report) @BindView(R2.id.btn_settlement_report)
QMUIAlphaButton btn_settlement_report; QMUIAlphaButton btn_settlement_report;
private SettlementReport.DataBean mSettlementReportBean; private SettlementReport mSettlementReportBean;
@Override @Override
public void setupActivityComponent(@NonNull AppComponent appComponent) { public void setupActivityComponent(@NonNull AppComponent appComponent) {
...@@ -134,7 +132,7 @@ public class SettlementActivity extends BaseActivity<SettlementPresenter> implem ...@@ -134,7 +132,7 @@ public class SettlementActivity extends BaseActivity<SettlementPresenter> implem
} }
@Override @Override
public void returnSettlementData(SettlementReport.DataBean datasBean) { public void returnSettlementData(SettlementReport datasBean) {
this.mSettlementReportBean = datasBean; this.mSettlementReportBean = datasBean;
if(mSettlementReportBean.getRestaurantOperation() != null) { if(mSettlementReportBean.getRestaurantOperation() != null) {
String lastSettlementText = LanguageUtils.get_language_system(this, "", "上次清機時間:"); String lastSettlementText = LanguageUtils.get_language_system(this, "", "上次清機時間:");
......
...@@ -1223,6 +1223,7 @@ public class OrderDetail implements Commodity, Serializable { ...@@ -1223,6 +1223,7 @@ public class OrderDetail implements Commodity, Serializable {
OrderDetail orderDetail = new OrderDetail(); OrderDetail orderDetail = new OrderDetail();
orderDetail.setProductName(modifier.getModifierName()); orderDetail.setProductName(modifier.getModifierName());
orderDetail.setKtPrintMainItem(modifier.getKtPrintMainItem()); orderDetail.setKtPrintMainItem(modifier.getKtPrintMainItem());
orderDetail.setPrintSeting(modifier.getPrintSet());
orderDetail.setTopId(modifier.getTopId()); orderDetail.setTopId(modifier.getTopId());
orderDetail.setParentId(id); orderDetail.setParentId(id);
orderDetail.setProductId(modifier.getMid()); 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; ...@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.text.TextUtils; import android.text.TextUtils;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.base.common.bean.BillingBean; import com.gingersoft.gsa.cloud.base.common.bean.BillingBean;
import com.gingersoft.gsa.cloud.base.common.bean.MemberInfo; import com.gingersoft.gsa.cloud.base.common.bean.MemberInfo;
import com.gingersoft.gsa.cloud.base.common.bean.PayMethod; import com.gingersoft.gsa.cloud.base.common.bean.PayMethod;
...@@ -19,6 +20,8 @@ import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; ...@@ -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.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean; import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails; import com.gingersoft.gsa.cloud.print.bean.OrderDetails;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -29,6 +32,7 @@ import java.util.Map; ...@@ -29,6 +32,7 @@ import java.util.Map;
*/ */
public class PrintBill extends PrinterRoot { public class PrintBill extends PrinterRoot {
@Override @Override
public Map<String, List<Bitmap>> getPrintBitmap(Context mContext, PrinterDeviceBean deviceBean) { public Map<String, List<Bitmap>> getPrintBitmap(Context mContext, PrinterDeviceBean deviceBean) {
Map<String, List<Bitmap>> bitmapMaps = new HashMap<>(); Map<String, List<Bitmap>> bitmapMaps = new HashMap<>();
...@@ -39,7 +43,7 @@ public class PrintBill extends PrinterRoot { ...@@ -39,7 +43,7 @@ public class PrintBill extends PrinterRoot {
} }
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
DoshokuOrder doshokuOrder = DoshokuOrder.getInstance(); DoshokuOrder doshokuOrder = DoshokuOrder.getInstance();
ShoppingCart shoppingCart = doshokuOrder.getShoppingCart(); ShoppingCart shoppingCart = doshokuOrder.getShoppingCart();
...@@ -70,7 +74,7 @@ public class PrintBill extends PrinterRoot { ...@@ -70,7 +74,7 @@ public class PrintBill extends PrinterRoot {
String stringBuilder = "<html><body>" + String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() + getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) + getHtmlPrintHeadOrderInfo(tableBean) +
generateFoodInfo(foodList) + generateHtmlFoodInfo(foodList) +
getHtmlBillInfo() + getHtmlBillInfo() +
getWholeLine() + getWholeLine() +
getPLable(payInfo.toString(), HTML_PRINT_GRAVITY_LEFT) + getPLable(payInfo.toString(), HTML_PRINT_GRAVITY_LEFT) +
...@@ -85,7 +89,9 @@ public class PrintBill extends PrinterRoot { ...@@ -85,7 +89,9 @@ public class PrintBill extends PrinterRoot {
getPLable("《追加積分到個人賬戶》", HTML_PRINT_GRAVITY_CENTER); getPLable("《追加積分到個人賬戶》", HTML_PRINT_GRAVITY_CENTER);
} }
stringBuilder += "</body></html>"; stringBuilder += "</body></html>";
return stringBuilder; String[] pritContent = new String[1];
pritContent[0] = stringBuilder;
return pritContent;
} }
@Override @Override
......
...@@ -4,6 +4,7 @@ import android.content.Context; ...@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean; import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -19,7 +20,7 @@ public class PrintInstruction extends PrinterRoot { ...@@ -19,7 +20,7 @@ public class PrintInstruction extends PrinterRoot {
} }
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null; return null;
} }
......
...@@ -14,6 +14,7 @@ import com.gingersoft.gsa.cloud.base.table.bean.TableBean; ...@@ -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.other.TextUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean; import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.print.bean.PrintContent;
import com.joe.print.R; import com.joe.print.R;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -127,7 +128,7 @@ public class PrintKitchen extends PrinterRoot { ...@@ -127,7 +128,7 @@ public class PrintKitchen extends PrinterRoot {
} }
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null; return null;
} }
......
...@@ -48,7 +48,7 @@ public class PrintOtherOrder extends PrinterRoot { ...@@ -48,7 +48,7 @@ public class PrintOtherOrder extends PrinterRoot {
} }
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null; return null;
} }
......
...@@ -47,7 +47,7 @@ public class PrintOtherOrderClosing extends PrinterRoot { ...@@ -47,7 +47,7 @@ public class PrintOtherOrderClosing extends PrinterRoot {
} }
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null; return null;
} }
......
...@@ -6,26 +6,37 @@ import android.view.View; ...@@ -6,26 +6,37 @@ import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; 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.base.utils.view.QRCodeUtil;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean; import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.gingersoft.gsa.cloud.print.bean.PrintQRCodeContent; import com.gingersoft.gsa.cloud.print.bean.PrintQRCodeContent;
import com.google.zxing.WriterException; import com.google.zxing.WriterException;
import com.joe.print.R; 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.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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打印 * skyorder qrcode打印
*/ */
public class PrintQRCode extends PrinterRoot { public class PrintQRCode extends PrinterRoot<PrintQRCodeContent> {
private PrintQRCodeContent mQRCodeBean; private PrintQRCodeContent mQRCodeBean;
public PrintQRCode(PrintQRCodeContent qrCodeBean) { public PrintQRCode() {
this.mQRCodeBean = qrCodeBean; }
@Override
protected void setPrintContent(PrintQRCodeContent printContent) {
this.mQRCodeBean = printContent;
} }
@Override @Override
...@@ -38,10 +49,46 @@ public class PrintQRCode extends PrinterRoot { ...@@ -38,10 +49,46 @@ public class PrintQRCode extends PrinterRoot {
} }
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null; 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 @Override
public int getPrintCount(Context context) { public int getPrintCount(Context context) {
return 1; return 1;
...@@ -67,7 +114,7 @@ public class PrintQRCode extends PrinterRoot { ...@@ -67,7 +114,7 @@ public class PrintQRCode extends PrinterRoot {
printTime.setText(mQRCodeBean.getPrintTime()); printTime.setText(mQRCodeBean.getPrintTime());
printPeopleNum.setText(mQRCodeBean.getPrintPeopleNum()); printPeopleNum.setText(mQRCodeBean.getPrintPeopleNum());
printMealEndTime.setText(mQRCodeBean.getPrintMealEndTime()); printMealEndTime.setText(mQRCodeBean.getPrintMealEndTime());
printBottonInfo.setText(mQRCodeBean.getBottonInfo()); printBottonInfo.setText(mQRCodeBean.getPrintBottonInfo());
Bitmap QRImage = null; Bitmap QRImage = null;
try { try {
......
...@@ -4,6 +4,7 @@ import android.content.Context; ...@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.view.Gravity; import android.view.Gravity;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.base.order.commodity.OrderDetail; import com.gingersoft.gsa.cloud.base.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.order.DoshokuOrder; import com.gingersoft.gsa.cloud.base.order.order.DoshokuOrder;
import com.gingersoft.gsa.cloud.base.table.bean.TableBean; import com.gingersoft.gsa.cloud.base.table.bean.TableBean;
...@@ -11,6 +12,7 @@ import com.gingersoft.gsa.cloud.base.utils.other.TextUtil; ...@@ -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.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean; import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.joe.print.R; import com.joe.print.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -31,16 +33,24 @@ public class PrintServe extends PrinterRoot { ...@@ -31,16 +33,24 @@ public class PrintServe extends PrinterRoot {
} }
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList(); List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList();
TableBean.DataBean tableBean = DoshokuOrder.getInstance().getOpenTableInfo(); TableBean.DataBean tableBean = DoshokuOrder.getInstance().getOpenTableInfo();
if (foodList.size() == 0 || tableBean == null) {
return new String[]{"<html><body></body></html>"};
}
String stringBuilder = "<html><body>" + String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() + getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) + getHtmlPrintHeadOrderInfo(tableBean) +
generateFoodInfoTwoColumns(foodList) + generateHtmlFoodInfoTwoColumns(foodList) +
getWholeLine() + getWholeLine() +
getHtmlFooter() + "</body></html>"; getHtmlFooter() + "</body></html>";
return stringBuilder; String[] pritContent = new String[1];
pritContent[0] = stringBuilder;
return pritContent;
} }
@Override @Override
......
...@@ -46,18 +46,25 @@ public class PrintSlip extends PrinterRoot { ...@@ -46,18 +46,25 @@ public class PrintSlip extends PrinterRoot {
} }
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList(); List<OrderDetail> foodList = DoshokuOrder.getInstance().getShoppingCart().getOrderCommodityList();
TableBean.DataBean tableBean = DoshokuOrder.getInstance().getOpenTableInfo(); TableBean.DataBean tableBean = DoshokuOrder.getInstance().getOpenTableInfo();
if (foodList.size() == 0 || tableBean == null) {
return new String[]{"<html><body></body></html>"};
}
String stringBuilder = "<html><body>" + String stringBuilder = "<html><body>" +
getHtmlPrintHeadInfo() + getHtmlPrintHeadInfo() +
getHtmlPrintHeadOrderInfo(tableBean) + getHtmlPrintHeadOrderInfo(tableBean) +
generateFoodInfo(foodList) + generateHtmlFoodInfo(foodList) +
getHtmlBillInfo() + getHtmlBillInfo() +
getWholeLine() + getWholeLine() +
getHtmlFooter() + "</body></html>"; getHtmlFooter() + "</body></html>";
return stringBuilder;
String[] pritContent = new String[1];
pritContent[0] = stringBuilder;
return pritContent;
} }
private String getPLable(String content) { private String getPLable(String content) {
......
...@@ -34,8 +34,22 @@ public class PrintTest extends PrinterRoot { ...@@ -34,8 +34,22 @@ public class PrintTest extends PrinterRoot {
} }
@Override @Override
public String getPrintData(Context mContext, PrinterDeviceBean deviceBean) { public String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean) {
return null; 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 @Override
...@@ -58,7 +72,7 @@ public class PrintTest extends PrinterRoot { ...@@ -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); LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL); layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(getTextView(mContext, "炒爐打印測試", Gravity.CENTER_HORIZONTAL, getDimensionPixelSize(mContext, R.dimen.dp_10))); layout.addView(getTextView(mContext, "炒爐打印測試", Gravity.CENTER_HORIZONTAL, getDimensionPixelSize(mContext, R.dimen.dp_10)));
......
package com.joe.print.mvp.print; package com.joe.print.mvp.print;
import android.text.TextUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -16,6 +18,11 @@ public class PrintUtils { ...@@ -16,6 +18,11 @@ public class PrintUtils {
private static int foodAmountSpace = 12; private static int foodAmountSpace = 12;
public final static double BBPOS_Chinese_Length = 2.4; 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 content 要顯示的內容
* @param maxLength 字符串最大長度 * @param maxLength 字符串最大長度
...@@ -128,6 +135,8 @@ public class PrintUtils { ...@@ -128,6 +135,8 @@ public class PrintUtils {
} }
/** /**
* BBPOS 獲取經過換行處理後的html串
*
* @param name1 字符串一 * @param name1 字符串一
* @param name2 字符串二 * @param name2 字符串二
* @param name3 字符串三 * @param name3 字符串三
...@@ -142,16 +151,20 @@ public class PrintUtils { ...@@ -142,16 +151,20 @@ public class PrintUtils {
int maxLine = Math.max(Math.max(name1s.size(), name2s.size()), name3s.size()); int maxLine = Math.max(Math.max(name1s.size(), name2s.size()), name3s.size());
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < maxLine; i++) { for (int i = 0; i < maxLine; i++) {
stringBuilder.append("<p>"); // stringBuilder.append("<p>");
putText(chineseCharLength, name1s, stringBuilder, i, foodNameSpace); putText(chineseCharLength, name1s, name2s, name3s, stringBuilder, i);
putText(chineseCharLength, name2s, stringBuilder, i, foodNumSpace);
putText(chineseCharLength, name3s, stringBuilder, i, foodAmountSpace); // putText(chineseCharLength, name1s, name2s, name3s, stringBuilder, i, foodNameSpace);
stringBuilder.append("</p>"); // putText(chineseCharLength, name1s, name2s, name3s, stringBuilder, i, foodNumSpace);
// putText(chineseCharLength, name1s, name2s, name3s, stringBuilder, i, foodAmountSpace);
// stringBuilder.append("</p>");
} }
return stringBuilder.toString(); return stringBuilder.toString();
} }
/** /**
* BBPOS 獲取經過換行處理後的html串
*
* @param name1 字符串一 * @param name1 字符串一
* @param name2 字符串二 * @param name2 字符串二
* @param chineseCharLength 中文字符所佔長度,BBPOS佔2.4,針式佔1.5 * @param chineseCharLength 中文字符所佔長度,BBPOS佔2.4,針式佔1.5
...@@ -164,10 +177,14 @@ public class PrintUtils { ...@@ -164,10 +177,14 @@ public class PrintUtils {
int maxLine = Math.max(name1s.size(), name2s.size()); int maxLine = Math.max(name1s.size(), name2s.size());
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < maxLine; i++) { for (int i = 0; i < maxLine; i++) {
stringBuilder.append("<p>"); // stringBuilder.append("<p>");
putText(chineseCharLength, name1s, stringBuilder, i, foodNameSpace); putText(chineseCharLength, name1s, name2s, null, stringBuilder, i);
putText(chineseCharLength, name2s, stringBuilder, i, foodNumSpace);
stringBuilder.append("</p>"); // 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(); return stringBuilder.toString();
} }
...@@ -180,4 +197,36 @@ public class PrintUtils { ...@@ -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; ...@@ -9,6 +9,7 @@ import android.os.Build;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.SparseArray;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -50,6 +51,7 @@ import com.gingersoft.gsa.cloud.print.PrintExecutor; ...@@ -50,6 +51,7 @@ import com.gingersoft.gsa.cloud.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintSocketHolder; import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import com.gingersoft.gsa.cloud.print.PrinterWriter58mm; import com.gingersoft.gsa.cloud.print.PrinterWriter58mm;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails; 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.PrintContent;
import com.gingersoft.gsa.cloud.print.bean.PrintQRCodeContent; import com.gingersoft.gsa.cloud.print.bean.PrintQRCodeContent;
import com.google.zxing.WriterException; import com.google.zxing.WriterException;
...@@ -58,6 +60,7 @@ import com.hyweb.n5.lib.util.PrinterUtil; ...@@ -58,6 +60,7 @@ import com.hyweb.n5.lib.util.PrinterUtil;
import com.hyweb.n5.server.aidl.IOnPrintCallback; import com.hyweb.n5.server.aidl.IOnPrintCallback;
import com.jess.arms.integration.AppManager; import com.jess.arms.integration.AppManager;
import com.joe.print.R; 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.model.bean.PrintBillBean;
import com.joe.print.mvp.print.common.PrinterFinderCallback; import com.joe.print.mvp.print.common.PrinterFinderCallback;
import com.joe.print.mvp.print.common.SendResultCode; import com.joe.print.mvp.print.common.SendResultCode;
...@@ -81,7 +84,7 @@ import javax.inject.Inject; ...@@ -81,7 +84,7 @@ import javax.inject.Inject;
import lombok.Getter; import lombok.Getter;
@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 @Inject
AppManager mAppManager; AppManager mAppManager;
...@@ -90,35 +93,40 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -90,35 +93,40 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
private final static int N5_PAPER_WIDTH = 500;//N5打印機紙張寬度 private final static int N5_PAPER_WIDTH = 500;//N5打印機紙張寬度
final static String DELIMITER = "/";//將打印位置區分開來。。。。,暫時只有廚房單用到 final static String DELIMITER = "/";//將打印位置區分開來。。。。,暫時只有廚房單用到
private PrintListener printListener; 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) { public static PrinterRoot getPrinterByType(int type, PrintContent content) {
//初始化USB打印 if (mPrinterStrategy.indexOfKey(type) >= 0) {
if (type == PrintConstans.PRINT_TEST) { PrinterRoot printerRoot = mPrinterStrategy.get(type);
return new PrintTest(); printerRoot.setPrintContent(content);
} else if (type == PrintConstans.PRINT_SERVE) { return printerRoot;
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);
} }
return null; return null;
} }
/**
* 需要打印的實體類 需要重寫這個方法
*
* @param printContent
*/
protected void setPrintContent(T printContent) {
}
public PrinterRoot setPrintListener(PrintListener printListener) { public PrinterRoot setPrintListener(PrintListener printListener) {
this.printListener = printListener; this.printListener = printListener;
return this; return this;
...@@ -183,7 +191,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -183,7 +191,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
* *
* @return BBPOS是HTMl格式 * @return BBPOS是HTMl格式
*/ */
public abstract String getPrintData(Context mContext, PrinterDeviceBean deviceBean); public abstract String[] getPrintDatas(Context mContext, PrinterDeviceBean deviceBean);
/** /**
* 獲取打印次數 * 獲取打印次數
...@@ -196,7 +204,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -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; String model = Build.MODEL;
if (PrintConstans.PRINT_MODEL_V2.contains(model)) { if (PrintConstans.PRINT_MODEL_V2.contains(model)) {
...@@ -207,7 +215,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -207,7 +215,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
} else if (PrintConstans.PRINT_MODEL_WISEPOS.contains(model)) { } else if (PrintConstans.PRINT_MODEL_WISEPOS.contains(model)) {
//BBPOS Wisepos 打印 localhost 192.168.1.162 //BBPOS Wisepos 打印 localhost 192.168.1.162
//打印結果示例:<?xml version="1.0" encoding= "UTF-8" ?><WAPIResult><status>SUCCESS</status><requestType>PRINT</requestType><state>IDLE</state><systemInfo><appVersion>1.22.4.4.007</appVersion><OSVersion>9</OSVersion><ip>192.168.1.162</ip><mac>2059a018d3d6</mac><serialNumber>WSS503013000075</serialNumber><firmware>WSS50.501-02 (5.00.01.02.beta7)</firmware><hardware></hardware><terminalConfig>GNZZ_MTIPD_v13_with_AE_v1</terminalConfig><key>034040XXXXXXXXXXXXXX</key><bootloader>6.00.00.20 (6.00.00.34)</bootloader></systemInfo><timestamp>1601021267673</timestamp></WAPIResult> //打印結果示例:<?xml version="1.0" encoding= "UTF-8" ?><WAPIResult><status>SUCCESS</status><requestType>PRINT</requestType><state>IDLE</state><systemInfo><appVersion>1.22.4.4.007</appVersion><OSVersion>9</OSVersion><ip>192.168.1.162</ip><mac>2059a018d3d6</mac><serialNumber>WSS503013000075</serialNumber><firmware>WSS50.501-02 (5.00.01.02.beta7)</firmware><hardware></hardware><terminalConfig>GNZZ_MTIPD_v13_with_AE_v1</terminalConfig><key>034040XXXXXXXXXXXXXX</key><bootloader>6.00.00.20 (6.00.00.34)</bootloader></systemInfo><timestamp>1601021267673</timestamp></WAPIResult>
new BBposPrint().print(printData, listener); new BBposPrint().print(BBPosPrintDatas, listener);
} else { } else {
listener.printFile("暫不支持本機型打印"); listener.printFile("暫不支持本機型打印");
} }
...@@ -381,10 +389,11 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -381,10 +389,11 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
printerFinder.startFinder(); printerFinder.startFinder();
} }
public void transmitPrjToPc(PrinterDeviceBean defaultPrint){ public void transmitPrjToPc(PrinterDeviceBean defaultPrint) {
} }
/** /**
* view轉bitmap * view轉bitmap
* *
...@@ -937,7 +946,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -937,7 +946,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
return getPLable(content.toString(), gravity); return getPLable(content.toString(), gravity);
} }
protected String generateFoodInfoTwoColumns(List<OrderDetail> foodList) { protected String generateHtmlFoodInfoTwoColumns(List<OrderDetail> foodList) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < foodList.size(); i++) { for (int i = 0; i < foodList.size(); i++) {
OrderDetail orderDetail = foodList.get(i); OrderDetail orderDetail = foodList.get(i);
...@@ -954,7 +963,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -954,7 +963,7 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
return stringBuilder.toString(); return stringBuilder.toString();
} }
protected String generateFoodInfo(List<OrderDetail> foodList) { protected String generateHtmlFoodInfo(List<OrderDetail> foodList) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < foodList.size(); i++) { for (int i = 0; i < foodList.size(); i++) {
OrderDetail orderDetail = foodList.get(i); OrderDetail orderDetail = foodList.get(i);
...@@ -979,5 +988,45 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -979,5 +988,45 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
return PrintUtils.getLineString(name1, name2, name3, PrintUtils.BBPOS_Chinese_Length); 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,13 +18,20 @@ import java.net.ConnectException; ...@@ -18,13 +18,20 @@ import java.net.ConnectException;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import io.reactivex.Observer; import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
public class BBposPrint { public class BBposPrint {
public void print(String printData, PrintListener listener) { public void print(String[] printDatas, PrintListener listener) {
for (String printData : printDatas) {
WiseposBean wiseposBean = new WiseposBean(); WiseposBean wiseposBean = new WiseposBean();
OkHttp3Utils.get("http://localhost:8080/pos?transactionType=PRINT&isExternal=false&apiVersion=21&printData=" + printData).subscribe(new Observer<String>() { 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 @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
...@@ -55,6 +62,9 @@ public class BBposPrint { ...@@ -55,6 +62,9 @@ public class BBposPrint {
} }
backPrintActivity(); backPrintActivity();
} }
});
}
}
private void backPrintActivity() { private void backPrintActivity() {
Intent intent = new Intent(GsaCloudApplication.getAppContext(), PrintActivity.class); Intent intent = new Intent(GsaCloudApplication.getAppContext(), PrintActivity.class);
...@@ -64,8 +74,6 @@ public class BBposPrint { ...@@ -64,8 +74,6 @@ public class BBposPrint {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
GsaCloudApplication.getAppContext().startActivity(intent); GsaCloudApplication.getAppContext().startActivity(intent);
} }
});
}
private void analysisPrintResult(String s, WiseposBean wiseposBean, PrintListener listener) { private void analysisPrintResult(String s, WiseposBean wiseposBean, PrintListener listener) {
XmlPullParser xmlPullParser = Xml.newPullParser(); XmlPullParser xmlPullParser = Xml.newPullParser();
......
...@@ -255,11 +255,11 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print ...@@ -255,11 +255,11 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
Map<String, List<Bitmap>> listMap = null; Map<String, List<Bitmap>> listMap = null;
List<Bitmap> zoomBitmaps = null; List<Bitmap> zoomBitmaps = null;
String printData = null; String[] BBPosPrintDatas = null;
if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_LOCAL && PrintConstans.PRINT_MODEL_WISEPOS.contains(Build.MODEL)) { if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_LOCAL && PrintConstans.PRINT_MODEL_WISEPOS.contains(Build.MODEL)) {
//本機打印並且是BBPOS //本機打印並且是BBPOS
printData = printerInIt.getPrintData(mContext, defaultPrint); BBPosPrintDatas = printerInIt.getPrintDatas(mContext, defaultPrint);
if (printData == null) { if (BBPosPrintDatas == null) {
printFile("暫不支持打印此單"); printFile("暫不支持打印此單");
return; return;
} }
...@@ -284,7 +284,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print ...@@ -284,7 +284,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
printerInIt.ipDevicePrint(defaultPrint, zoomBitmaps); printerInIt.ipDevicePrint(defaultPrint, zoomBitmaps);
} else if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_LOCAL) { } else if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_LOCAL) {
//本地N5或Sunmi打印 //本地N5或Sunmi打印
printerInIt.locationPrint(zoomBitmaps, printData, this); printerInIt.locationPrint(zoomBitmaps, BBPosPrintDatas, this);
} else if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_USB) { } else if (defaultPrint.getPrinterDeviceType() == PrinterDeviceBean.PRINT_USB) {
//USB打印打印 //USB打印打印
printerInIt.usbPrint(mContext, zoomBitmaps); printerInIt.usbPrint(mContext, zoomBitmaps);
......
...@@ -14,7 +14,6 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity; ...@@ -14,7 +14,6 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.activity.TableActivity;
public class ComponentTable implements IComponent { public class ComponentTable implements IComponent {
public static final String ComponentName = "table";
public static final class 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 { ...@@ -112,7 +112,7 @@ public class PrintSkyorderAction extends TableAction {
PrintQRCodeContent printQRCodeBean = new PrintQRCodeContent(); PrintQRCodeContent printQRCodeBean = new PrintQRCodeContent();
printQRCodeBean.setPrintTableName("餐檯:" + tableBean.getTableName()); printQRCodeBean.setPrintTableName("餐檯:" + tableBean.getTableName());
printQRCodeBean.setPrintTopInfo(printTopInfo); printQRCodeBean.setPrintTopInfo(printTopInfo);
printQRCodeBean.setBottonInfo(printBottomInfo); printQRCodeBean.setPrintBottonInfo(printBottomInfo);
printQRCodeBean.setPrintQrcode(QRCodeContent); printQRCodeBean.setPrintQrcode(QRCodeContent);
printQRCodeBean.setPrintTime("打印時間:" + printTime); printQRCodeBean.setPrintTime("打印時間:" + printTime);
printQRCodeBean.setPrintPeopleNum("人數:" + person); printQRCodeBean.setPrintPeopleNum("人數:" + person);
......
...@@ -17,7 +17,9 @@ import com.gingersoft.gsa.cloud.base.table.bean.TableExtBean; ...@@ -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.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.FoodSummaryConstans; 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.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.TableContract; import com.gingersoft.gsa.cloud.table.mvp.contract.TableContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.BaseOrderResponse; import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.BaseOrderResponse;
...@@ -109,6 +111,8 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -109,6 +111,8 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
private List<TableBean.DataBean> mTableList = new ArrayList<>(); private List<TableBean.DataBean> mTableList = new ArrayList<>();
private BottomFunctionAdapter mBottomFunctionAdapter; private BottomFunctionAdapter mBottomFunctionAdapter;
@XFunctionViews(FunctionTable.TABLE_BOTTOM_GROUP)
private List<Function> mBottomFunctionList = new ArrayList<>(); private List<Function> mBottomFunctionList = new ArrayList<>();
private TableAction mTableAction; private TableAction mTableAction;
...@@ -135,7 +139,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -135,7 +139,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
public TablePresenter(TableContract.Model model, TableContract.View rootView) { public TablePresenter(TableContract.Model model, TableContract.View rootView) {
super(model, rootView); super(model, rootView);
this.IActivity = (TableActivity) rootView; this.IActivity = (TableActivity) rootView;
XFunctionManager.newInstance().inJect(this, FunctionTable.class);
startTablePolling(); startTablePolling();
} }
...@@ -171,11 +175,12 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -171,11 +175,12 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
} }
public void initBottomFunction() { public void initBottomFunction() {
swapSkyorderPosition(mBottomFunctionList);
initTableActions(IActivity, mBottomFunctionList);
if (mBottomFunctionAdapter == null) { if (mBottomFunctionAdapter == null) {
mBottomFunctionAdapter = new BottomFunctionAdapter(IActivity, mBottomFunctionList); mBottomFunctionAdapter = new BottomFunctionAdapter(IActivity, mBottomFunctionList);
mRootView.setBottomFunctionAdapter(mBottomFunctionAdapter); mRootView.setBottomFunctionAdapter(mBottomFunctionAdapter);
} }
initBottomFunctionItem();
initBottomFunctionListener(); initBottomFunctionListener();
} }
...@@ -207,32 +212,6 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -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) { private void swapSkyorderPosition(List<Function> functions) {
int skyorderPosition = -1; int skyorderPosition = -1;
for (int i = 0; i < functions.size(); i++) { 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