Commit c4e6855d by 宁斌

1、統一網絡請求頭HeadersInterceptor 2、加入美團日誌框架logan對(網絡請求,頁面生命週期)進行埋點 3、增加user狀態管理類

parent f99df214
...@@ -152,10 +152,10 @@ dependencies { ...@@ -152,10 +152,10 @@ dependencies {
//底部功能導航view //底部功能導航view
api 'com.github.ittianyu:BottomNavigationViewEx:2.0.4' api 'com.github.ittianyu:BottomNavigationViewEx:2.0.4'
//滴滴開源 哆啦A夢:辅助开发工具、测试效率工具、视觉辅助工具 //滴滴開源 哆啦A夢:辅助开发工具、测试效率工具、视觉辅助工具
// debugImplementation rootProject.ext.dependencies["doraemonkit"]
debugImplementation 'com.didichuxing.doraemonkit:dokitx:3.3.3' debugImplementation 'com.didichuxing.doraemonkit:dokitx:3.3.3'
releaseImplementation 'com.didichuxing.doraemonkit:dokitx-no-op:3.3.3' releaseImplementation 'com.didichuxing.doraemonkit:dokitx-no-op:3.3.3'
//美團金剛狼日誌框架
api rootProject.ext.dependencies['logan']
//RecyclerView 流式佈局layoutManager //RecyclerView 流式佈局layoutManager
api 'com.google.android:flexbox:1.0.0' api 'com.google.android:flexbox:1.0.0'
...@@ -172,7 +172,6 @@ dependencies { ...@@ -172,7 +172,6 @@ dependencies {
api 'androidx.core:core-ktx:+' api 'androidx.core:core-ktx:+'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
api 'com.github.huangyanbin:SmartTable:2.2.0' api 'com.github.huangyanbin:SmartTable:2.2.0'
// api rootProject.ext.dependencies['logan']
} }
repositories { repositories {
......
package com.gingersoft.gsa.cloud.account.restaurant;
import lombok.Data;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
@Data
public class BrandInfo {
private int brandId;
private String brandName;
}
package com.gingersoft.gsa.cloud.account.restaurant;
import lombok.Data;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
@Data
public class RestaurantInfo {
private int restaurantId;
private String restaurantName;
private String gsPosShopId;
}
package com.gingersoft.gsa.cloud.account.restaurant;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.account.user.info.UserInfo;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import lombok.Data;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
@Data
public class ResturantInfoManager {
private static ResturantInfoManager resturantInfoManager = null;
/**
* 品牌信息
*/
private BrandInfo brandInfo;
/**
* 餐廳信息
*/
private RestaurantInfo restaurantInfo;
private ResturantInfoManager() {
}
public static ResturantInfoManager getInstance() {
if (resturantInfoManager == null) {
synchronized (ResturantInfoManager.class) {
if (resturantInfoManager == null) {
resturantInfoManager = new ResturantInfoManager();
}
}
}
return resturantInfoManager;
}
public void setResturantInfoToLocation(RestaurantInfo info) {
// SPUtils.put(UserConstans.restaurantId, info);
// SPUtils.put(UserConstans.restaurantId, info.ge);
// SPUtils.put(UserConstans.restaurantId, restaurantId);
}
}
package com.gingersoft.gsa.cloud.constans; package com.gingersoft.gsa.cloud.account.user;
/** /**
* Created by Wyh on 2019/12/21. * Created by Wyh on 2019/12/21.
*/ */
public class UserConstans { public interface UserConstans {
public final static String LOGIN_USERNAME = "login_account"; public final static String LOGIN_USERNAME = "login_account";
public final static String LOGIN_PASSWORD = "login_password"; public final static String LOGIN_PASSWORD = "login_password";
public final static String AUTO_LOGIN = "auto_login"; public final static String AUTO_LOGIN = "auto_login";
public final static String IS_GUIDE = "is_guide"; public final static String IS_GUIDE = "is_guide";
public static String memberId = "member_id"; public static String memberId = "member_id";
public static String memberName = "member_name"; public static String memberName = "member_name";
...@@ -24,6 +23,4 @@ public class UserConstans { ...@@ -24,6 +23,4 @@ public class UserConstans {
/**當前賬號下所有餐檯品牌Json*/ /**當前賬號下所有餐檯品牌Json*/
public static String brandRestaurantInfos = "brand_restaurant_infos"; public static String brandRestaurantInfos = "brand_restaurant_infos";
//平闆登录状态
public static String FLATBED_LOGIN_STATUS = "flatbed_login_status";
} }
package com.gingersoft.gsa.cloud.account.user;
import com.gingersoft.gsa.cloud.account.user.info.UserInfo;
import com.gingersoft.gsa.cloud.account.user.state.UserState;
import lombok.Getter;
import lombok.Setter;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:用戶信息管理:如用戶登錄狀態,用戶信息等。。
*/
@Getter
@Setter
public class UserContextManger {
private static UserContextManger userContextManger = null;
/**
* 用戶狀態
*/
private UserState state;
/**
* 用戶信息
*/
private UserInfo info;
private UserContextManger() {
}
public static UserContextManger getInstance() {
if (userContextManger == null) {
synchronized (UserContextManger.class) {
if (userContextManger == null) {
userContextManger = new UserContextManger();
}
}
}
return userContextManger;
}
}
package com.gingersoft.gsa.cloud.account.user.info;
import java.util.Date;
import lombok.Data;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
@Data
public class UserInfo {
private Integer userId;
private String userName;
private Integer groupId;
private Integer parentId;
private Integer merchantsId;
private String mobile;
private String email;
private byte status;
private Date createTime;
private String createBy;
private Date updateTime;
private String updateBy;
private String token;
}
package com.gingersoft.gsa.cloud.account.user.info;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
public class UserInfoManger {
private static UserInfoManger userInfoManger = null;
private UserInfoManger() {
}
public static UserInfoManger getInstance() {
if (userInfoManger == null) {
synchronized (UserInfoManger.class) {
if (userInfoManger == null) {
userInfoManger = new UserInfoManger();
}
}
}
return userInfoManger;
}
public void setUserInfoToLocation(UserInfo info) {
SPUtils.put(UserConstans.token, info.getUserName());
SPUtils.put(UserConstans.memberId, info.getUserName());
SPUtils.put(UserConstans.memberName, info.getUserName());
}
public static String getLoginToken() {
return (String) SPUtils.get(UserConstans.token, "");
}
public static int getMemberId() {
return (int) SPUtils.get(UserConstans.memberId, 0);
}
public static String getMemberName() {
return (String) SPUtils.get(UserConstans.memberName, "");
}
}
package com.gingersoft.gsa.cloud.account.user.state;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.account.user.UserConstans;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:用戶已登錄
*/
public class HasLoginState implements UserState{
@Override
public void toLoginPage() {
}
@Override
public void logOut() {
SPUtils.remove(UserConstans.token);
SPUtils.remove(UserConstans.memberId);
SPUtils.remove(UserConstans.brandId);
SPUtils.remove(UserConstans.brandName);
SPUtils.remove(UserConstans.restaurantId);
SPUtils.remove(UserConstans.restaurantName);
SPUtils.remove(UserConstans.memberName);
SPUtils.remove(UserConstans.brandRestaurantInfos);
SPUtils.remove(UserConstans.gsPosShopId);
SPUtils.put(PrintConstans.IS_LOGIN, false);
//关闭Prj打印服務
CC.obtainBuilder("Component.Print")
.setActionName("stopPrintService")
.build()
.call();
//跳轉登陸頁面
CC.obtainBuilder("User.Component.Login")
.setActionName("showActivityA")
.build()
.call();
}
@Override
public void toTargetPage() {
}
}
package com.gingersoft.gsa.cloud.account.user.state;
import com.billy.cc.core.component.CC;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:用戶未登錄
*/
public class NotLoginState implements UserState{
@Override
public void toLoginPage() {
//跳轉登錄頁面
CC.obtainBuilder("User.Component.Login")
.setActionName("showActivityA")
.build()
.call();
}
@Override
public void logOut() {
}
@Override
public void toTargetPage() {
}
}
package com.gingersoft.gsa.cloud.account.user.state;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description: 已登錄 未登錄
* */
public interface UserState {
/**
* 跳轉到登錄頁面
*/
void toLoginPage();
/**
* 登出
*/
void logOut();
/**
* 跳轉到目標也
*/
void toTargetPage();
}
...@@ -9,6 +9,7 @@ import android.os.Build; ...@@ -9,6 +9,7 @@ import android.os.Build;
import android.os.RemoteException; import android.os.RemoteException;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.billy.cc.core.component.CC; import com.billy.cc.core.component.CC;
import com.dianping.logan.Logan;
import com.didichuxing.doraemonkit.DoraemonKit; import com.didichuxing.doraemonkit.DoraemonKit;
import com.elvishew.xlog.LogConfiguration; import com.elvishew.xlog.LogConfiguration;
import com.elvishew.xlog.LogLevel; import com.elvishew.xlog.LogLevel;
...@@ -31,8 +32,9 @@ import com.gingersoft.gsa.cloud.base.utils.xlog.MyBackupStrategy; ...@@ -31,8 +32,9 @@ import com.gingersoft.gsa.cloud.base.utils.xlog.MyBackupStrategy;
import com.gingersoft.gsa.cloud.config.DoraemonKitConfig; import com.gingersoft.gsa.cloud.config.DoraemonKitConfig;
import com.gingersoft.gsa.cloud.constans.HttpsConstans; import com.gingersoft.gsa.cloud.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.constans.PrintConstans; import com.gingersoft.gsa.cloud.constans.PrintConstans;
import com.gingersoft.gsa.cloud.constans.UserConstans; import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.database.DaoManager; import com.gingersoft.gsa.cloud.database.DaoManager;
import com.gingersoft.gsa.cloud.config.LoganConfig;
import com.gingersoft.gsa.cloud.ui.loadsir.CustomCallback; import com.gingersoft.gsa.cloud.ui.loadsir.CustomCallback;
import com.gingersoft.gsa.cloud.ui.loadsir.EmptyCallback; import com.gingersoft.gsa.cloud.ui.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.ui.loadsir.ErrorCallback; import com.gingersoft.gsa.cloud.ui.loadsir.ErrorCallback;
...@@ -46,8 +48,7 @@ import com.scwang.smartrefresh.layout.SmartRefreshLayout; ...@@ -46,8 +48,7 @@ import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter; import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.ClassicsHeader; import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import java.util.ArrayList; import java.io.File;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import me.jessyan.autosize.AutoSize; import me.jessyan.autosize.AutoSize;
import me.jessyan.autosize.AutoSizeConfig; import me.jessyan.autosize.AutoSizeConfig;
...@@ -74,14 +75,6 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -74,14 +75,6 @@ public class GsaCloudApplication extends BaseApplication {
* 是否開啟皮膚切換 * 是否開啟皮膚切換
*/ */
public static boolean openSkinMake = false; public static boolean openSkinMake = false;
/**
* okhttp连接超时20秒
*/
public static int CONNECT_TIMEOUT = 20;
/**
* okhttp读写超时20秒
*/
public static int REQUEST_TIMEOUT = 20;
public static boolean isLogin = false; public static boolean isLogin = false;
public static String userName = ""; public static String userName = "";
...@@ -133,6 +126,7 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -133,6 +126,7 @@ public class GsaCloudApplication extends BaseApplication {
initPrint(); initPrint();
//初始化日誌管理庫 //初始化日誌管理庫
initXLog(); initXLog();
initLogan();
//初始化crash記錄 //初始化crash記錄
AppCrashHandler.getInstance().init(this); AppCrashHandler.getInstance().init(this);
...@@ -141,22 +135,25 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -141,22 +135,25 @@ public class GsaCloudApplication extends BaseApplication {
//上傳餐廳擴展信息 //上傳餐廳擴展信息
ExpandInfoSetting.initUpdateExtendedConfiguration(uiStyleConfiguration, functionConfiguration); ExpandInfoSetting.initUpdateExtendedConfiguration(uiStyleConfiguration, functionConfiguration);
// 设定一些通用的属性,这些属性在每次统计事件中都会附带
// 注意:如果此处的属性名与内置属性的名称相同,则内置属性会被覆盖
// Tracker.INSTANCE.addProperty("附加的属性1", "附加的属性1");
// Tracker.INSTANCE.addProperty("附加的属性2", "附加的属性2");
// // 设定上报数据的主机和接口
// // 注意:该方法一定要在Tracker.initialize()方法前调用
// // 否则会由于上报地址未初始化,在触发启动事件时导致崩溃
// Tracker.INSTANCE.setService("host", "path");
// // 设定上报数据的项目名称
// Tracker.INSTANCE.setProjectName("項目名");
// // 设定上报数据的模式
// Tracker.INSTANCE.setMode(TrackerMode.DEBUG_ONLY);
// // 初始化AndroidTracker
// Tracker.INSTANCE.initialize(this);
} }
/**
* 初始化美團日誌框架
*/
private void initLogan() {
com.dianping.logan.LoganConfig config = new com.dianping.logan.LoganConfig.Builder()
.setCachePath(getApplicationContext().getFilesDir().getAbsolutePath())
.setPath(getApplicationContext().getExternalFilesDir(null).getAbsolutePath()
+ File.separator + LoganConfig.FILE_NAME)
.setEncryptKey16(LoganConfig.EncryptKey16.getBytes())
.setEncryptIV16(LoganConfig.EncryptIV16.getBytes())
.build();
Logan.init(config);
}
/**
* 初始化滴滴開發,測試輔助工具哆啦A夢
*/
private void initDoraemonKit() { private void initDoraemonKit() {
DoraemonKit.install(getAppContext(), DoraemonKitConfig.PRODUCE_ID); DoraemonKit.install(getAppContext(), DoraemonKitConfig.PRODUCE_ID);
} }
......
...@@ -190,6 +190,9 @@ public class MemberInfo implements Serializable { ...@@ -190,6 +190,9 @@ public class MemberInfo implements Serializable {
private MemberExpireDateBean memberExpireDate; private MemberExpireDateBean memberExpireDate;
private VaildTimeBean vaildTime; private VaildTimeBean vaildTime;
public String getLevelName(){ public String getLevelName(){
if(!TextUtils.isEmpty(levelName1)) { if(!TextUtils.isEmpty(levelName1)) {
return levelName1; return levelName1;
...@@ -213,8 +216,6 @@ public class MemberInfo implements Serializable { ...@@ -213,8 +216,6 @@ public class MemberInfo implements Serializable {
return 0; return 0;
} }
@Data @Data
public static class CreateTimeBean implements Serializable{ public static class CreateTimeBean implements Serializable{
/** /**
...@@ -374,8 +375,11 @@ public class MemberInfo implements Serializable { ...@@ -374,8 +375,11 @@ public class MemberInfo implements Serializable {
} }
public String getMemberName() { public String getMemberName() {
if(!TextUtils.isEmpty(memberName)){
return memberName; return memberName;
} }
return getLevelName();
}
public void setMemberName(String memberName) { public void setMemberName(String memberName) {
this.memberName = memberName; this.memberName = memberName;
......
...@@ -19,6 +19,7 @@ import com.gingersoft.gsa.cloud.base.utils.JsonUtils; ...@@ -19,6 +19,7 @@ import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil; import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils; import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.constans.HttpsConstans; import com.gingersoft.gsa.cloud.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.jess.arms.di.component.AppComponent; import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.DeviceUtils; import com.jess.arms.utils.DeviceUtils;
...@@ -212,7 +213,8 @@ public class AppCrashHandler implements UncaughtExceptionHandler { ...@@ -212,7 +213,8 @@ public class AppCrashHandler implements UncaughtExceptionHandler {
// 把上面获取的堆栈信息转为字符串,打印出来 // 把上面获取的堆栈信息转为字符串,打印出来
String stacktrace = result.toString(); String stacktrace = result.toString();
printWriter.close(); printWriter.close();
LogUtil.d(TAG, stacktrace);
LoganUtils.w_crash("AppCrashHandler: "+stacktrace);
//保存错误报告到文件 //保存错误报告到文件
saveCrashInfo2File(ex); saveCrashInfo2File(ex);
......
...@@ -13,7 +13,7 @@ public class LogUtil { ...@@ -13,7 +13,7 @@ public class LogUtil {
//可以全局控制是否打印log日志 //可以全局控制是否打印log日志
private static boolean isPrintLog = true; private static boolean isPrintLog = true;
private static int LOG_MAXLENGTH = 10000; private static int LOG_MAXLENGTH = 6000;
private final static String TAG = "LogUtil"; private final static String TAG = "LogUtil";
public static void v(String msg) { public static void v(String msg) {
......
...@@ -3,6 +3,8 @@ package com.gingersoft.gsa.cloud.base.utils.okhttpUtils; ...@@ -3,6 +3,8 @@ package com.gingersoft.gsa.cloud.base.utils.okhttpUtils;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication; import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.encryption.Aes; import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.config.OkHttpConfig;
import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept.HeadersInterceptor;
import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept.LoggingInterceptor; import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept.LoggingInterceptor;
import com.gingersoft.gsa.cloud.constans.AppConstans; import com.gingersoft.gsa.cloud.constans.AppConstans;
import com.gingersoft.gsa.cloud.constans.HttpsConstans; import com.gingersoft.gsa.cloud.constans.HttpsConstans;
...@@ -43,9 +45,9 @@ public class OkHttp3Utils { ...@@ -43,9 +45,9 @@ public class OkHttp3Utils {
synchronized (OkHttp3Utils.class) { synchronized (OkHttp3Utils.class) {
if (mOkHttpClient == null) { if (mOkHttpClient == null) {
mOkHttpClient = new OkHttpClient.Builder() mOkHttpClient = new OkHttpClient.Builder()
.connectTimeout(GsaCloudApplication.REQUEST_TIMEOUT, TimeUnit.SECONDS) .connectTimeout(OkHttpConfig.REQUEST_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(GsaCloudApplication.REQUEST_TIMEOUT, TimeUnit.SECONDS) .readTimeout(OkHttpConfig.REQUEST_TIMEOUT, TimeUnit.SECONDS)
.addInterceptor(new UserAgentIntercepter()) .addInterceptor(new HeadersInterceptor())
.addInterceptor(new LoggingInterceptor()) .addInterceptor(new LoggingInterceptor())
.build(); .build();
...@@ -216,36 +218,36 @@ public class OkHttp3Utils { ...@@ -216,36 +218,36 @@ public class OkHttp3Utils {
/** /**
* 添加请求头 * 添加请求头
*/ */
public static class UserAgentIntercepter implements Interceptor { // public static class UserAgentIntercepter implements Interceptor {
//
@Override // @Override
public Response intercept(Chain chain) throws IOException { // public Response intercept(Chain chain) throws IOException {
Request request = chain.request(); // Request request = chain.request();
Headers headers = request.headers(); // Headers headers = request.headers();
//
Headers.Builder builder = new Headers.Builder(); // Headers.Builder builder = new Headers.Builder();
for (int i = 0; i < headers.size(); i++) { // for (int i = 0; i < headers.size(); i++) {
builder.set(headers.name(i), headers.value(i)); // builder.set(headers.name(i), headers.value(i));
} // }
//
builder.set("mobileVersion", android.os.Build.VERSION.RELEASE);//set表示name1是唯一的,会覆盖掉已经存在的,add不会覆盖已经存在的头,可以存在多个 // builder.set("mobileVersion", android.os.Build.VERSION.RELEASE);//set表示name1是唯一的,会覆盖掉已经存在的,add不会覆盖已经存在的头,可以存在多个
builder.set("mobielModel", android.os.Build.MODEL); // builder.set("mobielModel", android.os.Build.MODEL);
builder.set("apptype", AppConstans.APP_TYPE); // builder.set("apptype", AppConstans.APP_TYPE);
builder.set("appinfo", DeviceUtils.getVersionName(GsaCloudApplication.getAppContext())); // builder.set("appinfo", DeviceUtils.getVersionName(GsaCloudApplication.getAppContext()));
builder.set("mobileId", "1"); // builder.set("mobileId", "1");
//
if (GsaCloudApplication.isLogin) { // if (GsaCloudApplication.isLogin) {
String token; // String token;
int memberId = GsaCloudApplication.getMemberId(); // int memberId = GsaCloudApplication.getMemberId();
String loginToken = GsaCloudApplication.getLoginToken(); // String loginToken = GsaCloudApplication.getLoginToken();
token = Aes.aesEncrypt("9_" + memberId + "_" + System.currentTimeMillis() + "_" + loginToken); // token = Aes.aesEncrypt("9_" + memberId + "_" + System.currentTimeMillis() + "_" + loginToken);
token = token.replaceAll("\r|\n", ""); // token = token.replaceAll("\r|\n", "");
builder.set("token", token); // builder.set("token", token);
} // }
Request request1 = chain.request().newBuilder().headers(builder.build()).build(); // Request request1 = chain.request().newBuilder().headers(builder.build()).build();
return chain.proceed(request1); // return chain.proceed(request1);
} // }
} // }request1
/** /**
......
package com.gingersoft.gsa.cloud.config;
/**
* @author : bin
* @create date: 2020-11-05
* @update date: 2020-11-05
* @description:
*/
public class LogInfoConfig {
}
package com.gingersoft.gsa.cloud.config;
/**
* @author : bin
* @create date: 2020-11-05
* @update date: 2020-11-05
* @description:美團日誌框架配置
*/
public class LoganConfig {
public static final String FILE_NAME = "logan_v1";
public static final String EncryptKey16 = "0123456789012345";
public static final String EncryptIV16 = "0123456789012345";
public static final String APP_ID = "gingersoft1008611";
public static final String UPLOAD_LOG_URL = "http://192.168.1.113:8080/logan-web/logan/upload.json";
/**
* 代码日志
*/
public static final byte CODE_LEVLE = 1;
/**
* 網絡日誌
*/
public static final byte NETWORK_LEVLE = 2;
/**
* 用戶行為日誌(頁面跳轉,交互,觸摸反饋等)
*/
public static final byte ACTION_LEVLE = 3;
/**
* 崩潰日誌
*/
public static final byte CRASH_LEVLE = 4;
/**
* H5日誌
*/
public static final byte H5_LEVLE = 5;
/**
* native日誌
*/
public static final byte native_LEVLE = 6;
}
package com.gingersoft.gsa.cloud.config;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
public class OkHttpConfig {
/**
* okhttp连接超时20秒
*/
public static final byte CONNECT_TIMEOUT = 20;
/**
* okhttp读写超时20秒
*/
public static final byte REQUEST_TIMEOUT = 20;
}
...@@ -10,6 +10,7 @@ import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.MyRetrofitConfi ...@@ -10,6 +10,7 @@ import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.MyRetrofitConfi
import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.MyRxCacheConfiguration; import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.MyRxCacheConfiguration;
import com.gingersoft.gsa.cloud.config.globalconfig.lifecyclesOptioins.MyActivityLifecycle; import com.gingersoft.gsa.cloud.config.globalconfig.lifecyclesOptioins.MyActivityLifecycle;
import com.gingersoft.gsa.cloud.config.globalconfig.lifecyclesOptioins.MyAppLifecycles; import com.gingersoft.gsa.cloud.config.globalconfig.lifecyclesOptioins.MyAppLifecycles;
import com.gingersoft.gsa.cloud.config.globalconfig.lifecyclesOptioins.MyFragmentLifecycle;
import com.gingersoft.gsa.cloud.constans.HttpsConstans; import com.gingersoft.gsa.cloud.constans.HttpsConstans;
import com.jess.arms.base.delegate.AppLifecycles; import com.jess.arms.base.delegate.AppLifecycles;
import com.jess.arms.di.module.GlobalConfigModule; import com.jess.arms.di.module.GlobalConfigModule;
...@@ -55,6 +56,7 @@ public class GlobalConfiguration implements ConfigModule { ...@@ -55,6 +56,7 @@ public class GlobalConfiguration implements ConfigModule {
@Override @Override
public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) { public void injectFragmentLifecycle(Context context, List<FragmentManager.FragmentLifecycleCallbacks> lifecycles) {
//向Fragment的生命周期中注入一些自定义逻辑 //向Fragment的生命周期中注入一些自定义逻辑
lifecycles.add(new MyFragmentLifecycle());
} }
......
...@@ -14,7 +14,6 @@ import okhttp3.Response; ...@@ -14,7 +14,6 @@ import okhttp3.Response;
public class MyGlobalHttpHandler implements GlobalHttpHandler { public class MyGlobalHttpHandler implements GlobalHttpHandler {
private final String TAG = this.getClass().getSimpleName();
@Override @Override
public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response) { public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response) {
...@@ -25,35 +24,8 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler { ...@@ -25,35 +24,8 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler {
@Override @Override
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 requestBody = request.toString();
String token = "";
if (GsaCloudApplication.isLogin) {
int memberId = GsaCloudApplication.getMemberId();
String loginToken = GsaCloudApplication.getLoginToken();
token = Aes.aesEncrypt("9_" + memberId + "_" + System.currentTimeMillis() + "_" + loginToken);
token = token.replaceAll("\r|\n", "");
}
Headers.Builder builder = new Headers.Builder();
builder.set("mobileVersion", android.os.Build.VERSION.RELEASE);
builder.set("mobielModel", android.os.Build.MODEL);
builder.set("apptype", AppConstans.APP_TYPE);
builder.set("appinfo", DeviceUtils.getVersionName(GsaCloudApplication.getAppContext()));
builder.set("mobileId", "1");
Headers headers = request.headers();
for (int i = 0; i < headers.size(); i++) {
builder.set(headers.name(i), headers.value(i));
}
if(GsaCloudApplication.isLogin){
builder.set("token", token);
}
// builder.set("Domain-Name", "common");
return chain.request().newBuilder() return chain.request().newBuilder()
.headers(builder.build())
.build(); .build();
} }
} }
...@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.config.globalconfig.applyOptions; ...@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.config.globalconfig.applyOptions;
import android.content.Context; import android.content.Context;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication; import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.config.OkHttpConfig;
import com.jess.arms.di.module.ClientModule; import com.jess.arms.di.module.ClientModule;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -23,9 +24,9 @@ public class MyOkhttpConfiguration implements ClientModule.OkhttpConfiguration { ...@@ -23,9 +24,9 @@ public class MyOkhttpConfiguration implements ClientModule.OkhttpConfiguration {
@Override @Override
public void configOkhttp(Context context, OkHttpClient.Builder builder) { public void configOkhttp(Context context, OkHttpClient.Builder builder) {
// builder.sslSocketFactory(); //支持 Https,详情请百度 // builder.sslSocketFactory(); //支持 Https,详情请百度
builder.connectTimeout(GsaCloudApplication.CONNECT_TIMEOUT, TimeUnit.SECONDS); builder.connectTimeout(OkHttpConfig.CONNECT_TIMEOUT, TimeUnit.SECONDS);
builder.writeTimeout(GsaCloudApplication.REQUEST_TIMEOUT, TimeUnit.SECONDS); builder.writeTimeout(OkHttpConfig.REQUEST_TIMEOUT, TimeUnit.SECONDS);
builder.readTimeout(GsaCloudApplication.REQUEST_TIMEOUT, TimeUnit.SECONDS); builder.readTimeout(OkHttpConfig.REQUEST_TIMEOUT, TimeUnit.SECONDS);
//使用一行代码监听 Retrofit/Okhttp 上传下载进度监听,以及 Glide 加载进度监听 详细使用方法查看 https://github.com/JessYanCoding/ProgressManager //使用一行代码监听 Retrofit/Okhttp 上传下载进度监听,以及 Glide 加载进度监听 详细使用方法查看 https://github.com/JessYanCoding/ProgressManager
ProgressManager.getInstance().with(builder); ProgressManager.getInstance().with(builder);
//让 Retrofit 同时支持多个 BaseUrl 以及动态改变 BaseUrl. 详细使用请方法查看 https://github.com/JessYanCoding/RetrofitUrlManager //让 Retrofit 同时支持多个 BaseUrl 以及动态改变 BaseUrl. 详细使用请方法查看 https://github.com/JessYanCoding/RetrofitUrlManager
......
...@@ -8,8 +8,8 @@ import android.text.TextUtils; ...@@ -8,8 +8,8 @@ import android.text.TextUtils;
import com.billy.cc.core.component.CC; import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.R; import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication; import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils; import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.google.gson.JsonIOException; import com.google.gson.JsonIOException;
import com.google.gson.JsonParseException; import com.google.gson.JsonParseException;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
...@@ -50,7 +50,9 @@ public class MyResponseErrorListener implements ResponseErrorListener { ...@@ -50,7 +50,9 @@ public class MyResponseErrorListener implements ResponseErrorListener {
} }
// ArmsUtils.snackbarText(msg); // ArmsUtils.snackbarText(msg);
// LogUtil.d("handleResponseError: " + t.getMessage()); // LogUtil.d("handleResponseError: " + t.getMessage());
LogUtil.d(TAG, t.getMessage());
LoganUtils.w_network("請求錯誤: "+t.getMessage());
if (!TextUtils.isEmpty(msg)) { if (!TextUtils.isEmpty(msg)) {
ToastUtils.show(context, msg); ToastUtils.show(context, msg);
} }
......
...@@ -3,8 +3,10 @@ package com.gingersoft.gsa.cloud.config.globalconfig.applyOptions; ...@@ -3,8 +3,10 @@ package com.gingersoft.gsa.cloud.config.globalconfig.applyOptions;
import android.content.Context; import android.content.Context;
import com.gingersoft.gsa.cloud.base.BuildConfig; import com.gingersoft.gsa.cloud.base.BuildConfig;
import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept.LoggingInterceptor; import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept.LoggingInterceptor;
import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept.HeadersInterceptor;
import com.jess.arms.di.module.ClientModule; import com.jess.arms.di.module.ClientModule;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import retrofit2.Retrofit; import retrofit2.Retrofit;
...@@ -17,7 +19,7 @@ public class MyRetrofitConfiguration implements ClientModule.RetrofitConfigurati ...@@ -17,7 +19,7 @@ public class MyRetrofitConfiguration implements ClientModule.RetrofitConfigurati
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
clientBuilder.addInterceptor(new LoggingInterceptor());//使用自定义的Log拦截器 clientBuilder.addInterceptor(new LoggingInterceptor());//使用自定义的Log拦截器
} }
// clientBuilder.addInterceptor(new UserAgentInterceptor());//使用自定义User-Agent clientBuilder.addInterceptor(new HeadersInterceptor());//使用自定义User-Agent
// builder.client(RetrofitUrlManager.getInstance().with(clientBuilder).build()); builder.client(RetrofitUrlManager.getInstance().with(clientBuilder).build());
} }
} }
package com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.constans.AppConstans;
import com.jess.arms.utils.DeviceUtils;
import java.io.IOException;
import okhttp3.Headers;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
/**
* 添加請求頭信息
*/
public class HeadersInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Headers.Builder builder = new Headers.Builder();
builder.set("mobileVersion", android.os.Build.VERSION.RELEASE);
builder.set("mobielModel", android.os.Build.MODEL);
builder.set("apptype", AppConstans.APP_TYPE);
builder.set("appinfo", DeviceUtils.getVersionName(GsaCloudApplication.getAppContext()));
builder.set("mobileId", "1");
Headers headers = originalRequest.headers();
for (int i = 0; i < headers.size(); i++) {
builder.set(headers.name(i), headers.value(i));
}
if (GsaCloudApplication.isLogin) {
builder.set("token", getToken());
}
Request requestWithUserAgent = originalRequest.newBuilder()
.headers(builder.build())
.build();
return chain.proceed(requestWithUserAgent);
}
private String getToken() {
String token = "";
if (GsaCloudApplication.isLogin) {
int memberId = GsaCloudApplication.getMemberId();
String loginToken = GsaCloudApplication.getLoginToken();
token = Aes.aesEncrypt("9_" + memberId + "_" + System.currentTimeMillis() + "_" + loginToken);
token = token.replaceAll("\r|\n", "");
}
return token;
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept; package com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil; import com.gingersoft.gsa.cloud.logan.LoganUtils;
import java.io.IOException; import java.io.IOException;
...@@ -27,11 +27,11 @@ public class LoggingInterceptor implements Interceptor { ...@@ -27,11 +27,11 @@ public class LoggingInterceptor implements Interceptor {
sb.append(body.encodedName(i) + "=" + body.encodedValue(i) + ","); sb.append(body.encodedName(i) + "=" + body.encodedValue(i) + ",");
} }
sb.delete(sb.length() - 1, sb.length()); sb.delete(sb.length() - 1, sb.length());
LogUtil.d("CSDN_LQR", String.format("發送請求 %s on %s %n%s %nRequestParams:{%s}", LoganUtils.w_network( String.format("發送請求 %s on %s %n%s %nRequestParams:{%s}",
request.url(), chain.connection(), request.headers(), sb.toString())); request.url(), chain.connection(), request.headers(), sb.toString()));
} }
} else { } else {
LogUtil.d("CSDN_LQR", String.format("發送請求 %s on %s%n%s", LoganUtils.w_network(String.format("發送請求 %s on %s%n%s",
request.url(), chain.connection(), request.headers())); request.url(), chain.connection(), request.headers()));
} }
Response response = chain.proceed(request); Response response = chain.proceed(request);
...@@ -40,13 +40,13 @@ public class LoggingInterceptor implements Interceptor { ...@@ -40,13 +40,13 @@ public class LoggingInterceptor implements Interceptor {
//因为response.body().string()之后,response中的流会被关闭,程序会报错,我们需要创建出一 //因为response.body().string()之后,response中的流会被关闭,程序会报错,我们需要创建出一
//个新的response给应用层处理 //个新的response给应用层处理
ResponseBody responseBody = response.peekBody(1024 * 1024); ResponseBody responseBody = response.peekBody(1024 * 1024);
LogUtil.d("CSDN_LQR", LoganUtils.w_network( String.format("接收響應: [%s] %n返回json:【%s】 %.1fms %n%s",
String.format("接收響應: [%s] %n返回json:【%s】 %.1fms %n%s",
response.request().url(), response.request().url(),
responseBody.string(), responseBody.string(),
(t2 - t1) / 1e6d, (t2 - t1) / 1e6d,
response.headers() response.headers()
)); ));
return response; return response;
} }
} }
\ No newline at end of file
package com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept;
import java.io.IOException;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
/**
* 添加UA拦截器,B站请求API需要加上UA才能正常使用
*/
public class UserAgentInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Request requestWithUserAgent = originalRequest.newBuilder()
// .removeHeader("User-Agent")
// .addHeader("User-Agent", Api.COMMON_UA_STR)
.build();
return chain.proceed(requestWithUserAgent);
}
}
\ No newline at end of file
...@@ -10,6 +10,7 @@ import com.gingersoft.gsa.cloud.app.GsaCloudApplication; ...@@ -10,6 +10,7 @@ import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.CommonConfiguration; import com.gingersoft.gsa.cloud.base.utils.CommonConfiguration;
import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils; import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils; import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.ObservableEmitter; import io.reactivex.ObservableEmitter;
...@@ -22,6 +23,7 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac ...@@ -22,6 +23,7 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac
@Override @Override
public void onActivityCreated(Activity activity, Bundle bundle) { public void onActivityCreated(Activity activity, Bundle bundle) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityCreated");
// EventBus.getDefault().register(activity); // EventBus.getDefault().register(activity);
if (!activity.getIntent().getBooleanExtra("isInitToolbar", false)) { if (!activity.getIntent().getBooleanExtra("isInitToolbar", false)) {
//由于加强框架的兼容性,故将 setContentView 放到 onActivityCreated 之后,onActivityStarted 之前执行 //由于加强框架的兼容性,故将 setContentView 放到 onActivityCreated 之后,onActivityStarted 之前执行
...@@ -34,11 +36,13 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac ...@@ -34,11 +36,13 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac
@Override @Override
public void onActivityStarted(Activity activity) { public void onActivityStarted(Activity activity) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityStarted");
} }
@Override @Override
public void onActivityResumed(Activity activity) { public void onActivityResumed(Activity activity) {
String name = activity.getClass().getSimpleName(); String name = activity.getClass().getSimpleName();
LoganUtils.w_action(name + ": onActivityResumed");
if (name.equals("NewMainActivity")) { if (name.equals("NewMainActivity")) {
Observable.create(new ObservableOnSubscribe<Void>() { Observable.create(new ObservableOnSubscribe<Void>() {
...@@ -71,19 +75,22 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac ...@@ -71,19 +75,22 @@ public class MyActivityLifecycle implements Application.ActivityLifecycleCallbac
@Override @Override
public void onActivityPaused(Activity activity) { public void onActivityPaused(Activity activity) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityPaused");
} }
@Override @Override
public void onActivityStopped(Activity activity) { public void onActivityStopped(Activity activity) {
// GsaCloudApplication.getAppContext().setCurrentActivity(null); LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityStopped");
} }
@Override @Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivitySaveInstanceState");
} }
@Override @Override
public void onActivityDestroyed(Activity activity) { public void onActivityDestroyed(Activity activity) {
LoganUtils.w_action(activity.getClass().getSimpleName() + ": onActivityDestroyed");
// EventBus.getDefault().unregister(activity); // EventBus.getDefault().unregister(activity);
//横竖屏切换或配置改变时, Activity 会被重新创建实例, 但 Bundle 中的基础数据会被保存下来,移除该数据是为了保证重新创建的实例可以正常工作 //横竖屏切换或配置改变时, Activity 会被重新创建实例, 但 Bundle 中的基础数据会被保存下来,移除该数据是为了保证重新创建的实例可以正常工作
activity.getIntent().removeExtra("isInitToolbar"); activity.getIntent().removeExtra("isInitToolbar");
......
...@@ -4,6 +4,7 @@ import android.app.Application; ...@@ -4,6 +4,7 @@ import android.app.Application;
import android.content.Context; import android.content.Context;
import com.gingersoft.gsa.cloud.base.BuildConfig; import com.gingersoft.gsa.cloud.base.BuildConfig;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.jess.arms.base.delegate.AppLifecycles; import com.jess.arms.base.delegate.AppLifecycles;
import com.squareup.leakcanary.LeakCanary; import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher; import com.squareup.leakcanary.RefWatcher;
...@@ -19,7 +20,7 @@ public class MyAppLifecycles implements AppLifecycles { ...@@ -19,7 +20,7 @@ public class MyAppLifecycles implements AppLifecycles {
@Override @Override
public void onCreate(Application application) { public void onCreate(Application application) {
// initTimber(); LoganUtils.w_action(application.getClass().getSimpleName() + ": onCreate.....");
initLeakCanary(application); initLeakCanary(application);
initFragmentation(); initFragmentation();
// initARouter(application); // initARouter(application);
...@@ -69,13 +70,6 @@ public class MyAppLifecycles implements AppLifecycles { ...@@ -69,13 +70,6 @@ public class MyAppLifecycles implements AppLifecycles {
mRefWatcher = BuildConfig.USE_CANARY ? LeakCanary.install(application) : RefWatcher.DISABLED; mRefWatcher = BuildConfig.USE_CANARY ? LeakCanary.install(application) : RefWatcher.DISABLED;
} }
private void initTimber() {
// if (BuildConfig.LOG_DEBUG) {
// Timber日志打印
// Timber.plant(new Timber.DebugTree());
// }
}
public RefWatcher getRefWatcher() { public RefWatcher getRefWatcher() {
return mRefWatcher; return mRefWatcher;
} }
......
package com.gingersoft.gsa.cloud.config.globalconfig.lifecyclesOptioins;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.CommonConfiguration;
import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.logan.LoganUtils;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.schedulers.Schedulers;
@SuppressLint("NewApi")
public class MyFragmentLifecycle extends FragmentManager.FragmentLifecycleCallbacks {
@Override
public void onFragmentAttached(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Context context) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentAttached");
}
@Override
public void onFragmentCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @Nullable Bundle savedInstanceState) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentCreated");
}
@Override
public void onFragmentActivityCreated(@NonNull FragmentManager fm, @NonNull Fragment f,
@Nullable Bundle savedInstanceState) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentActivityCreated");
}
@Override
public void onFragmentViewCreated(@NonNull FragmentManager fm, @NonNull Fragment f,
@NonNull View v, @Nullable Bundle savedInstanceState) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentViewCreated");
}
@Override
public void onFragmentStarted(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentStarted");
}
@Override
public void onFragmentResumed(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentResumed");
}
@Override
public void onFragmentPaused(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentPaused");
}
@Override
public void onFragmentStopped(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentStopped");
}
@Override
public void onFragmentSaveInstanceState(@NonNull FragmentManager fm, @NonNull Fragment f,
@NonNull Bundle outState) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentSaveInstanceState");
}
@Override
public void onFragmentViewDestroyed(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentViewDestroyed");
}
@Override
public void onFragmentDestroyed(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentDestroyed");
}
@Override
public void onFragmentDetached(@NonNull FragmentManager fm, @NonNull Fragment f) {
LoganUtils.w_action(f.getClass().getSimpleName() + ": onFragmentDetached");
}
}
...@@ -76,11 +76,21 @@ public class HttpsConstans { ...@@ -76,11 +76,21 @@ public class HttpsConstans {
public static String SYSTEM_PATH = "/ricepon-system/api/"; public static String SYSTEM_PATH = "/ricepon-system/api/";
public static String API_RICEPON_MEMBER = "/ricepon-member/api/"; public static String API_RICEPON_MEMBER = "/ricepon-member/api/";
//---------------------------------------打印skyorder QRCode---------------------------------------------------------------------------------- /**
* QRCode相關
*/
public static final String PRINT_QRCODE_ADDRESS_URL_FORMAL = "http://m.ricepon.com"; public static final String PRINT_QRCODE_ADDRESS_URL_FORMAL = "http://m.ricepon.com";
public static final String PRINT_QRCODE_SUFFIX = "/member-web/qrcode/qrcode.html?WMP0&?arg="; public static final String PRINT_QRCODE_ADDRESS_URL_HK = "http://hktest.ricepon.com:61177";
//---------------------------------------打印Skyorder QRCode----------------------------------------------------------------------------------
public static final String PRINT_SKY_QRCODE_SUFFIX = "/member-web/qrcode/qrcode.html?WMP0&?arg=";
public static String PRINT_SKY_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_FORMAL + PRINT_SKY_QRCODE_SUFFIX;
//----------------------------------------打印積分QRCode-----------------------------------------------------------------------------------------
public static final String PRINT_QRCODE_SUFFIX = "/member-web/qrcode/qrcode.html?arg=";
public static String PRINT_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_FORMAL + PRINT_QRCODE_SUFFIX; public static String PRINT_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_FORMAL + PRINT_QRCODE_SUFFIX;
//--------------------------------------配置----------------------------------------------------------------------------------- //--------------------------------------配置-----------------------------------------------------------------------------------
/** /**
...@@ -142,6 +152,7 @@ public class HttpsConstans { ...@@ -142,6 +152,7 @@ public class HttpsConstans {
RICEPON_MEMBER_SERVER_ADDRESS = WECHAR_REPORT_FORMAL_ADDRESS + WECHAR_REPORT_PATH; RICEPON_MEMBER_SERVER_ADDRESS = WECHAR_REPORT_FORMAL_ADDRESS + WECHAR_REPORT_PATH;
SYSTEM_URL = HTTP_ADDRESS_URL_FORMAL + SYSTEM_PATH; SYSTEM_URL = HTTP_ADDRESS_URL_FORMAL + SYSTEM_PATH;
ROOT_SERVER = HTTP_ADDRESS_URL_FORMAL; ROOT_SERVER = HTTP_ADDRESS_URL_FORMAL;
PRINT_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_FORMAL + PRINT_QRCODE_SUFFIX;
break; break;
case 1: case 1:
RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER; RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER;
...@@ -154,6 +165,7 @@ public class HttpsConstans { ...@@ -154,6 +165,7 @@ public class HttpsConstans {
WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS
SYSTEM_URL = ROOT_HK_TEST_URL + SYSTEM_PATH; SYSTEM_URL = ROOT_HK_TEST_URL + SYSTEM_PATH;
ROOT_SERVER = HTTP_ADDRESS_URL_HK; ROOT_SERVER = HTTP_ADDRESS_URL_HK;
PRINT_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_HK + PRINT_QRCODE_SUFFIX;
break; break;
case 2: case 2:
//預發佈 //預發佈
...@@ -167,6 +179,7 @@ public class HttpsConstans { ...@@ -167,6 +179,7 @@ public class HttpsConstans {
WECHAR_REPORT_SERVER_ADDRESS = HTTP_ADDRESS_URL_PRE + WECHAR_REPORT_PATH; WECHAR_REPORT_SERVER_ADDRESS = HTTP_ADDRESS_URL_PRE + WECHAR_REPORT_PATH;
SYSTEM_URL = HTTP_ADDRESS_URL_PRE + SYSTEM_PATH; SYSTEM_URL = HTTP_ADDRESS_URL_PRE + SYSTEM_PATH;
ROOT_SERVER = HTTP_ADDRESS_URL_PRE; ROOT_SERVER = HTTP_ADDRESS_URL_PRE;
PRINT_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_FORMAL + PRINT_QRCODE_SUFFIX;
break; break;
case 3: case 3:
RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER; RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER;
...@@ -177,6 +190,7 @@ public class HttpsConstans { ...@@ -177,6 +190,7 @@ public class HttpsConstans {
REPORT_SERVER_ADDRESS = REPORT_TEST_ADDRESS + REPORT_PATH; REPORT_SERVER_ADDRESS = REPORT_TEST_ADDRESS + REPORT_PATH;
WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS
SYSTEM_URL = ROOT_SERVER_ZHI_WANG_HK + SYSTEM_PATH; SYSTEM_URL = ROOT_SERVER_ZHI_WANG_HK + SYSTEM_PATH;
PRINT_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_HK + PRINT_QRCODE_SUFFIX;
break; break;
case 4: case 4:
RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER; RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER;
...@@ -187,6 +201,7 @@ public class HttpsConstans { ...@@ -187,6 +201,7 @@ public class HttpsConstans {
REPORT_SERVER_ADDRESS = REPORT_TEST_ADDRESS + REPORT_PATH; REPORT_SERVER_ADDRESS = REPORT_TEST_ADDRESS + REPORT_PATH;
WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS
SYSTEM_URL = ROOT_SERVER_YOU_CHANG_HK + SYSTEM_PATH; SYSTEM_URL = ROOT_SERVER_YOU_CHANG_HK + SYSTEM_PATH;
PRINT_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_HK + PRINT_QRCODE_SUFFIX;
break; break;
case 5: case 5:
RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER; RICEPON_MEMBER_61177 = WECHAR_REPORT_TEST_ADDRESS + API_RICEPON_MEMBER;
...@@ -197,6 +212,7 @@ public class HttpsConstans { ...@@ -197,6 +212,7 @@ public class HttpsConstans {
REPORT_SERVER_ADDRESS = REPORT_TEST_ADDRESS + REPORT_PATH; REPORT_SERVER_ADDRESS = REPORT_TEST_ADDRESS + REPORT_PATH;
WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS WECHAR_REPORT_SERVER_ADDRESS = WECHAR_REPORT_TEST_ADDRESS + WECHAR_REPORT_PATH;//正式:WECHAR_REPORT_FORMAL_ADDRESS 測試:WECHAR_REPORT_TEST_ADDRESS
SYSTEM_URL = ROOT_SERVER_SHI_SHU_HK + SYSTEM_PATH; SYSTEM_URL = ROOT_SERVER_SHI_SHU_HK + SYSTEM_PATH;
PRINT_QRCODE_ADDRESS = PRINT_QRCODE_ADDRESS_URL_HK + PRINT_QRCODE_SUFFIX;
break; break;
} }
ricepon_wechat = HttpsConstans.ROOT_URL + HttpsConstans.URL_RICEPON_WECHAT; ricepon_wechat = HttpsConstans.ROOT_URL + HttpsConstans.URL_RICEPON_WECHAT;
......
package com.gingersoft.gsa.cloud.logan;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.dianping.logan.Logan;
import com.dianping.logan.SendLogCallback;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.BuildConfig;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.config.LoganConfig;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.DeviceUtils;
/**
* @author : bin
* @create date: 2020-11-21
* @update date: 2020-11-21
* @description:
*/
public class LoganUtils {
private static final String TAG = LoganUtils.class.getSimpleName();
/**
* 上傳日誌到服務器
*/
public static void uploadLog(Context context, boolean showToast) {
String memberId = GsaCloudApplication.getMemberName() + "_" + GsaCloudApplication.getMemberId();
String deviceId = DeviceUtils.getIMEI(GsaCloudApplication.getAppContext()) != null ? DeviceUtils.getIMEI(GsaCloudApplication.getAppContext()) : "redmi";
String AppVersion = DeviceUtils.getVersionName(GsaCloudApplication.getAppContext()) + "_" + DeviceUtils.getVersionCode(GsaCloudApplication.getAppContext());
String BuildVersion = android.os.Build.VERSION.RELEASE + "";
Logan.s(LoganConfig.UPLOAD_LOG_URL, TimeUtils.getCurrentDate(TimeUtils.DATE_FORMAT_DATE), LoganConfig.APP_ID, memberId, deviceId,
BuildVersion, AppVersion, new SendLogCallback() {
@Override
public void onLogSendCompleted(int statusCode, byte[] data) {
final String resultData = data != null ? new String(data) : "";
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
if (BuildConfig.DEBUG && showToast) {
if (statusCode == 200) {
ArmsUtils.makeText(context, "日誌上傳成功");
} else {
ArmsUtils.makeText(context, "日誌上傳失敗");
}
}
}
});
Log.d(TAG, "upload result, httpCode: " + statusCode + ", details: " + resultData);
}
});
}
public static void w_code(String log) {
Logan.w(log, LoganConfig.CODE_LEVLE);
printLog(log);
}
public static void w_action(String log) {
Logan.w(log, LoganConfig.ACTION_LEVLE);
}
public static void w_network(String log) {
Logan.w(log, LoganConfig.NETWORK_LEVLE);
//網絡日誌比較重要立即寫入本地
// Logan.f();
printLog(log);
}
public static void w_crash(String log) {
Logan.w(log, LoganConfig.CRASH_LEVLE);
//cash日誌比較重要立即寫入本地
Logan.f();
printLog(log);
}
public static void w_H5(String log) {
Logan.w(log, LoganConfig.H5_LEVLE);
}
public static void w_native(String log) {
Logan.w(log, LoganConfig.native_LEVLE);
}
private static void printLog(String log) {
if (BuildConfig.DEBUG) {
// LogUtil.d(log);
}
}
}
package com.gingersoft.gsa.cloud.menu;
/**
* @author : bin
* @create date: 2020-11-03
* @update date: 2020-11-03
* @description:
*/
public interface Menu {
}
...@@ -141,7 +141,7 @@ public class OrderPayView extends LinearLayout { ...@@ -141,7 +141,7 @@ public class OrderPayView extends LinearLayout {
double paymentDifference = getPaymentDifference(); double paymentDifference = getPaymentDifference();
if (!addPayMethodCondtion(method,paymentDifference)) { if (!addPayMethodCondtion(method, paymentDifference)) {
return; return;
} }
...@@ -188,7 +188,7 @@ public class OrderPayView extends LinearLayout { ...@@ -188,7 +188,7 @@ public class OrderPayView extends LinearLayout {
int notifyPosition = mBillMoneyList.size() - 1; int notifyPosition = mBillMoneyList.size() - 1;
mBillMoneyAdapter.setSelect_position(notifyPosition); mBillMoneyAdapter.setSelect_position(notifyPosition);
mBillMoneyAdapter.notifyItemChanged(notifyPosition); mBillMoneyAdapter.notifyDataSetChanged();
rv_bill_money.scrollToPosition(notifyPosition); rv_bill_money.scrollToPosition(notifyPosition);
//設置差額狀態 //設置差額狀態
...@@ -232,10 +232,14 @@ public class OrderPayView extends LinearLayout { ...@@ -232,10 +232,14 @@ public class OrderPayView extends LinearLayout {
//Exact //Exact
view.findViewById(R.id.btn_exact).setOnClickListener(v -> { view.findViewById(R.id.btn_exact).setOnClickListener(v -> {
if (getSelectBillMoney() == null) { PayMethod selectPayMethod = getSelectBillMoney();
if (selectPayMethod == null) {
ToastUtils.show(context, "請選擇支付方式"); ToastUtils.show(context, "請選擇支付方式");
return; return;
} }
boolean useFreeServicePayMethod = isUseFreeServicePayMethod(selectPayMethod);
setWhetherFreeServiceCallback(useFreeServicePayMethod);
pressExact(); pressExact();
setDifferenceText(context); setDifferenceText(context);
}); });
...@@ -271,7 +275,7 @@ public class OrderPayView extends LinearLayout { ...@@ -271,7 +275,7 @@ public class OrderPayView extends LinearLayout {
this.addView(view); this.addView(view);
} }
private boolean addPayMethodCondtion(PayMethod method,double paymentDifference) { private boolean addPayMethodCondtion(PayMethod method, double paymentDifference) {
boolean isIntegralPayMethod = isIntegralPayMethod(method); boolean isIntegralPayMethod = isIntegralPayMethod(method);
if (isIntegralPayMethod) { if (isIntegralPayMethod) {
//積分支付 //積分支付
...@@ -673,7 +677,7 @@ public class OrderPayView extends LinearLayout { ...@@ -673,7 +677,7 @@ public class OrderPayView extends LinearLayout {
tv_total.setText("$" + totalAmount); tv_total.setText("$" + totalAmount);
} }
public void updateOrderPay(double totalAmount){ public void updateOrderPay(double totalAmount) {
setTotalAmount(totalAmount); setTotalAmount(totalAmount);
initOrderDetail(); initOrderDetail();
setDifferenceText(GsaCloudApplication.getAppContext()); setDifferenceText(GsaCloudApplication.getAppContext());
......
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
android:visibility="invisible" /> android:visibility="invisible" />
</FrameLayout> </FrameLayout>
<TextView <TextView
android:id="@+id/tv_total_text" android:id="@+id/tv_total_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -58,7 +57,6 @@ ...@@ -58,7 +57,6 @@
android:textSize="@dimen/sp_22" android:textSize="@dimen/sp_22"
android:textStyle="bold" android:textStyle="bold"
android:visibility="visible" /> android:visibility="visible" />
</LinearLayout> </LinearLayout>
<TextView <TextView
......
package com.gingersoft.gsa.delivery_pick_mode.data.network package com.gingersoft.gsa.delivery_pick_mode.data.network
import android.util.Log import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept.HeadersInterceptor
import com.gingersoft.gsa.cloud.app.GsaCloudApplication
import com.gingersoft.gsa.cloud.base.utils.encryption.Aes
import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept.LoggingInterceptor import com.gingersoft.gsa.cloud.config.globalconfig.applyOptions.intercept.LoggingInterceptor
import com.gingersoft.gsa.cloud.constans.AppConstans
import com.gingersoft.gsa.cloud.constans.HttpsConstans import com.gingersoft.gsa.cloud.constans.HttpsConstans
import com.gingersoft.gsa.cloud.constans.HttpsConstans.ROOT_SERVER import com.gingersoft.gsa.cloud.constans.HttpsConstans.ROOT_SERVER
import com.gingersoft.gsa.cloud.constans.HttpsConstans.URK_RICEPON_GSA import com.gingersoft.gsa.cloud.constans.HttpsConstans.URK_RICEPON_GSA
import com.jess.arms.utils.DeviceUtils
import okhttp3.Headers
import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Response
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.converter.scalars.ScalarsConverterFactory import retrofit2.converter.scalars.ScalarsConverterFactory
...@@ -26,7 +19,7 @@ object ServiceCreator { ...@@ -26,7 +19,7 @@ object ServiceCreator {
.readTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS)
.addInterceptor(LoggingInterceptor()) .addInterceptor(LoggingInterceptor())
.addInterceptor(UserAgentIntercepter()) .addInterceptor(HeadersInterceptor())
private lateinit var builder: Retrofit.Builder private lateinit var builder: Retrofit.Builder
private lateinit var builder2: Retrofit.Builder private lateinit var builder2: Retrofit.Builder
...@@ -110,32 +103,32 @@ object ServiceCreator { ...@@ -110,32 +103,32 @@ object ServiceCreator {
/** /**
* 添加请求头 * 添加请求头
*/ */
class UserAgentIntercepter : Interceptor { // class UserAgentIntercepter : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response { // override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request() // val request = chain.request()
val headers = request.headers() // val headers = request.headers()
//
val builder = Headers.Builder() // val builder = Headers.Builder()
for (i in 0 until headers.size()) { // for (i in 0 until headers.size()) {
builder.set(headers.name(i), headers.value(i)) // builder.set(headers.name(i), headers.value(i))
} // }
//
builder.set("mobileVersion", android.os.Build.VERSION.RELEASE)//set表示name1是唯一的,会覆盖掉已经存在的,add不会覆盖已经存在的头,可以存在多个 // builder.set("mobileVersion", android.os.Build.VERSION.RELEASE)//set表示name1是唯一的,会覆盖掉已经存在的,add不会覆盖已经存在的头,可以存在多个
builder.set("mobielModel", android.os.Build.MODEL) // builder.set("mobielModel", android.os.Build.MODEL)
builder.set("apptype", AppConstans.APP_TYPE) // builder.set("apptype", AppConstans.APP_TYPE)
builder.set("appinfo", DeviceUtils.getVersionName(GsaCloudApplication.getAppContext())) // builder.set("appinfo", DeviceUtils.getVersionName(GsaCloudApplication.getAppContext()))
builder.set("mobileId", "1") // builder.set("mobileId", "1")
//
if (GsaCloudApplication.isLogin) { // if (GsaCloudApplication.isLogin) {
var token: String // var token: String
val memberId = GsaCloudApplication.getMemberId() // val memberId = GsaCloudApplication.getMemberId()
val loginToken = GsaCloudApplication.getLoginToken() // val loginToken = GsaCloudApplication.getLoginToken()
token = Aes.aesEncrypt("9_" + memberId + "_" + System.currentTimeMillis() + "_" + loginToken) // token = Aes.aesEncrypt("9_" + memberId + "_" + System.currentTimeMillis() + "_" + loginToken)
token = token.replace("\r|\n".toRegex(), "") // token = token.replace("\r|\n".toRegex(), "")
builder.set("token", token) // builder.set("token", token)
} // }
val request1 = chain.request().newBuilder().headers(builder.build()).build() // val request1 = chain.request().newBuilder().headers(builder.build()).build()
return chain.proceed(request1) // return chain.proceed(request1)
} // }
} // }
} }
\ No newline at end of file
...@@ -14,7 +14,7 @@ import com.gingersoft.gsa.cloud.base.utils.JsonUtils; ...@@ -14,7 +14,7 @@ import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.RestaurantInfoUtils; import com.gingersoft.gsa.cloud.base.utils.RestaurantInfoUtils;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.widget.DialogUtils; import com.gingersoft.gsa.cloud.base.widget.DialogUtils;
import com.gingersoft.gsa.cloud.constans.UserConstans; import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.login.R; import com.gingersoft.gsa.cloud.login.R;
import com.gingersoft.gsa.cloud.login.mvp.bean.LoginLimitBean; import com.gingersoft.gsa.cloud.login.mvp.bean.LoginLimitBean;
import com.gingersoft.gsa.cloud.login.mvp.presenter.BaseLoginPresenter; import com.gingersoft.gsa.cloud.login.mvp.presenter.BaseLoginPresenter;
......
...@@ -19,7 +19,7 @@ import com.gingersoft.gsa.cloud.base.utils.encryption.Aes; ...@@ -19,7 +19,7 @@ import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil; import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil; import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.constans.UserConstans; import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.login.R; import com.gingersoft.gsa.cloud.login.R;
import com.gingersoft.gsa.cloud.login.R2; import com.gingersoft.gsa.cloud.login.R2;
import com.gingersoft.gsa.cloud.login.di.component.DaggerLoginComponent; import com.gingersoft.gsa.cloud.login.di.component.DaggerLoginComponent;
......
...@@ -20,7 +20,7 @@ import androidx.viewpager2.widget.ViewPager2; ...@@ -20,7 +20,7 @@ import androidx.viewpager2.widget.ViewPager2;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication; import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.encryption.Aes; import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.UserConstans; import com.gingersoft.gsa.cloud.account.user.UserConstans;
import com.gingersoft.gsa.cloud.login.R; import com.gingersoft.gsa.cloud.login.R;
import com.gingersoft.gsa.cloud.login.R2; import com.gingersoft.gsa.cloud.login.R2;
import com.gingersoft.gsa.cloud.login.di.component.DaggerWelcomeComponent; import com.gingersoft.gsa.cloud.login.di.component.DaggerWelcomeComponent;
......
...@@ -38,6 +38,7 @@ public class ShoppingCart { ...@@ -38,6 +38,7 @@ public class ShoppingCart {
} }
return shoppingCart; return shoppingCart;
} }
/** /**
* 外送/自取 的訂單數據 * 外送/自取 的訂單數據
*/ */
...@@ -271,14 +272,16 @@ public class ShoppingCart { ...@@ -271,14 +272,16 @@ public class ShoppingCart {
byte discountType = BillItem.NOMAL_DISCOUNT_TYPE; byte discountType = BillItem.NOMAL_DISCOUNT_TYPE;
for (int i = multyDiscountArrays.size() - 1; i >= 0; i--) { for (int i = multyDiscountArrays.size() - 1; i >= 0; i--) {
MultyDiscount discount = multyDiscountArrays.get(i); MultyDiscount discount = multyDiscountArrays.get(i);
String discountName = discount.getName();
if (discount instanceof NomalDiscount) { if (discount instanceof NomalDiscount) {
discountType = BillItem.NOMAL_DISCOUNT_TYPE; discountType = BillItem.NOMAL_DISCOUNT_TYPE;
} else if (discount instanceof MemberDiscount) { } else if (discount instanceof MemberDiscount) {
discountType = BillItem.MEMBER_DISCOUNT_TYPE; discountType = BillItem.MEMBER_DISCOUNT_TYPE;
discountName = discount.getName() + ((MemberDiscount) discount).getMemberDiscount().getMemberDiscount()+"%";
} else if (discount instanceof CouponDiscount) { } else if (discount instanceof CouponDiscount) {
discountType = BillItem.COUPON_DISCOUNT_TYPE; discountType = BillItem.COUPON_DISCOUNT_TYPE;
} }
DiscountItem discountItem = new DiscountItem(discount.getName(), discount.getDiscountMoney(), discount.getStatus(), discountType); DiscountItem discountItem = new DiscountItem(discountName, discount.getDiscountMoney(), discount.getStatus(), discountType);
discountItem.setDiscount(discount); discountItem.setDiscount(discount);
billItemList.add(discountItem); billItemList.add(discountItem);
} }
......
...@@ -426,7 +426,7 @@ public class MealCommodity implements Commodity { ...@@ -426,7 +426,7 @@ public class MealCommodity implements Commodity {
mealCommodity.setNumber(1); mealCommodity.setNumber(1);
mealCommodity.setPrice(discountPrice); mealCommodity.setPrice(discountPrice);
mealCommodity.setUnit_price(discountPrice); mealCommodity.setUnit_price(discountPrice);
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.RESTAURANT_MODE)) { if (BaseOrder.isTableToMeal()) {
mealCommodity.setOrderId(DoshokuOrder.getInstance().getOrderId()); mealCommodity.setOrderId(DoshokuOrder.getInstance().getOrderId());
} else { } else {
mealCommodity.setOrderId(TakeawayOrder.getInstance().getOrderId()); mealCommodity.setOrderId(TakeawayOrder.getInstance().getOrderId());
......
...@@ -55,6 +55,20 @@ public abstract class BaseOrder { ...@@ -55,6 +55,20 @@ public abstract class BaseOrder {
return false; return false;
} }
/**
* 是否在餐廳用餐
* @return
*/
public static boolean isTableToMeal() {
/**
* 餐檯模式,skyorder到餐廳用餐
*/
if (orderType == FoodSummaryConstans.RESTAURANT_MODE || orderType == FoodSummaryConstans.SKYORDER) {
return true;
}
return false;
}
protected void initialization() { protected void initialization() {
orderType = FoodSummaryConstans.RESTAURANT_MODE; orderType = FoodSummaryConstans.RESTAURANT_MODE;
......
...@@ -44,7 +44,6 @@ public class PrintBill extends PrinterRoot { ...@@ -44,7 +44,6 @@ public class PrintBill extends PrinterRoot {
DoshokuOrder doshokuOrder = DoshokuOrder.getInstance(); DoshokuOrder doshokuOrder = DoshokuOrder.getInstance();
ShoppingCart shoppingCart = doshokuOrder.getShoppingCart(); ShoppingCart shoppingCart = doshokuOrder.getShoppingCart();
List<OrderDetail> foodList = shoppingCart.getOrderCommodityList(); List<OrderDetail> foodList = shoppingCart.getOrderCommodityList();
TableBean.DataBean tableBean = doshokuOrder.getOpenTableInfo(); TableBean.DataBean tableBean = doshokuOrder.getOpenTableInfo();
......
...@@ -51,6 +51,7 @@ import com.gingersoft.gsa.cloud.print.PrinterWriter58mm; ...@@ -51,6 +51,7 @@ 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.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.hyweb.n5.lib.constant.PrinterConstant; import com.hyweb.n5.lib.constant.PrinterConstant;
import com.hyweb.n5.lib.util.PrinterUtil; import com.hyweb.n5.lib.util.PrinterUtil;
import com.hyweb.n5.server.aidl.IOnPrintCallback; import com.hyweb.n5.server.aidl.IOnPrintCallback;
...@@ -621,7 +622,12 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis ...@@ -621,7 +622,12 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
llIntegralQrcode.setVisibility(View.GONE); llIntegralQrcode.setVisibility(View.GONE);
} else { } else {
llIntegralQrcode.setVisibility(View.VISIBLE); llIntegralQrcode.setVisibility(View.VISIBLE);
Bitmap QRImage = QRCodeUtil.createQRImage(integralQrcode, 180, 180); Bitmap QRImage = null;
try {
QRImage = QRCodeUtil.makeQRImage(integralQrcode, 220, 220);
} catch (WriterException e) {
e.printStackTrace();
}
ivIntegralQrcode.setImageBitmap(QRImage); ivIntegralQrcode.setImageBitmap(QRImage);
} }
return view; return view;
......
...@@ -76,8 +76,8 @@ ...@@ -76,8 +76,8 @@
<ImageView <ImageView
android:id="@+id/iv_integral_qrcode" android:id="@+id/iv_integral_qrcode"
android:layout_width="@dimen/dp_250" android:layout_width="@dimen/dp_220"
android:layout_height="@dimen/dp_250" android:layout_height="@dimen/dp_220"
android:layout_marginTop="@dimen/dp_5"/> android:layout_marginTop="@dimen/dp_5"/>
<TextView <TextView
......
...@@ -82,6 +82,7 @@ public class TableBean { ...@@ -82,6 +82,7 @@ public class TableBean {
* maxSeatCount : 8 * maxSeatCount : 8
* SplitStatus : 0 * SplitStatus : 0
* skyQRCode: * skyQRCode:
* scanId : 1117359
*/ */
private int id; private int id;
......
...@@ -49,6 +49,11 @@ public class MealDiscountAction implements Strategy<Discount> { ...@@ -49,6 +49,11 @@ public class MealDiscountAction implements Strategy<Discount> {
return; return;
} }
double mixTotalAomout = getMixTotalAomout(mSelectMixOrderMealList); double mixTotalAomout = getMixTotalAomout(mSelectMixOrderMealList);
if(discount.getType() == 0 && discount.getAmount() > mixTotalAomout){
//金額折扣總額不能超過 食品總金額
ArmsUtils.makeText(mContext, "折扣金額不可以超過食品總金額!");
return;
}
if (discount.getMinBillAmount() > mixTotalAomout) { if (discount.getMinBillAmount() > mixTotalAomout) {
//最小賬單金額 //最小賬單金額
ArmsUtils.makeText(mContext, "小於最小賬單金額$" + discount.getMinBillAmount() + " 無法使用此折扣"); ArmsUtils.makeText(mContext, "小於最小賬單金額$" + discount.getMinBillAmount() + " 無法使用此折扣");
......
...@@ -103,7 +103,7 @@ public class PrintSkyorderAction extends TableAction { ...@@ -103,7 +103,7 @@ public class PrintSkyorderAction extends TableAction {
String printBottomInfo = GsaCloudApplication.functionConfiguration.getSkyQRCodePrintBottomInfoVaule(); String printBottomInfo = GsaCloudApplication.functionConfiguration.getSkyQRCodePrintBottomInfoVaule();
String QR = "\"" + printQRCodeResponse.getQrcode() + "\""; String QR = "\"" + printQRCodeResponse.getQrcode() + "\"";
String QRCodeContent = HttpsConstans.PRINT_QRCODE_ADDRESS + "{\"type\":" + PRINT_type + ",\"QR\":" + QR + "}"; String QRCodeContent = HttpsConstans.PRINT_SKY_QRCODE_ADDRESS + "{\"type\":" + PRINT_type + ",\"QR\":" + QR + "}";
QRCodeContent = QRCodeContent.replace("WMP0", "WMP" + printQRCodeResponse.getIsWeChatMiniProgram()); QRCodeContent = QRCodeContent.replace("WMP0", "WMP" + printQRCodeResponse.getIsWeChatMiniProgram());
PrintQRCodeContent printQRCodeBean = new PrintQRCodeContent(); PrintQRCodeContent printQRCodeBean = new PrintQRCodeContent();
......
...@@ -34,10 +34,12 @@ import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest; ...@@ -34,10 +34,12 @@ import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest; import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity; import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity; import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderPayActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillItemAdapter; import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.BillItemAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter; import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.gingersoft.gsa.cloud.constans.ExpandConstant; import com.gingersoft.gsa.cloud.constans.ExpandConstant;
import com.gingersoft.gsa.cloud.database.bean.Discount; import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.ui.view.OrderPayView;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.gingersoft.gsa.cloud.zxing.MipcaCaptureActivity; import com.gingersoft.gsa.cloud.zxing.MipcaCaptureActivity;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
...@@ -176,7 +178,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -176,7 +178,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
} }
BaseOrder baseOrder = OrderFactory.createOrder(BaseOrder.orderType); BaseOrder baseOrder = OrderFactory.createOrder(BaseOrder.orderType);
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.RESTAURANT_MODE)) { if (BaseOrder.isTableToMeal()) {
mDoshokuOrder = (DoshokuOrder) baseOrder; mDoshokuOrder = (DoshokuOrder) baseOrder;
mTableInfo = mDoshokuOrder.getOpenTableInfo(); mTableInfo = mDoshokuOrder.getOpenTableInfo();
} else { } else {
...@@ -251,6 +253,10 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -251,6 +253,10 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
}); });
} }
public void updateBillInfo() {
updateBillInfo(null);
}
/** /**
* 更新賬單信息 * 更新賬單信息
* 1、更新食品折扣 * 1、更新食品折扣
...@@ -261,7 +267,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -261,7 +267,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
* 6、更新賬單小數項 * 6、更新賬單小數項
* 7、總金額 * 7、總金額
*/ */
public void updateBillInfo() { public void updateBillInfo(UpdateBillInfoEndListener updateBillInfoEndListener) {
mShoppingCart.resetBeforeBillCalculation(); mShoppingCart.resetBeforeBillCalculation();
//更新食品折扣 //更新食品折扣
...@@ -371,16 +377,20 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -371,16 +377,20 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Double>() { .subscribe(new Consumer<Double>() {
@Override @Override
public void accept(Double totalAmount) throws Exception { public void accept(Double totalAmount) {
if (mOrderContentActivity != null) {
mOrderContentActivity.initOrderBill(wholeAmount, totalAmount);
}
//更新總金額 //更新總金額
mShoppingCart.setTotalAmount(totalAmount); mShoppingCart.setTotalAmount(totalAmount);
//刷新美食Item數據
mSelectMealAdapter.notifyDataSetChanged();
//刷新賬單Item數據 //刷新賬單Item數據
mBillItemAdapter.notifyDataSetChanged(); mBillItemAdapter.notifyDataSetChanged();
//刷新美食Item數據
mSelectMealAdapter.notifyDataSetChanged();
if (mOrderContentActivity != null) {
mOrderContentActivity.initOrderBill(wholeAmount, totalAmount);
}
if (updateBillInfoEndListener != null) {
updateBillInfoEndListener.onUpdateEnd();
}
} }
}); });
} }
...@@ -779,7 +789,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -779,7 +789,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
double foodTotal = getFoodTotal(); double foodTotal = getFoodTotal();
for (BillItem item : mBillItemList) { for (BillItem item : mBillItemList) {
if (!filterType(item.getType(), filterTypes)) { if (!filterType(item.getType(), filterTypes)) {
if (item.getType() == BillItem.SERVERCHARGE_TYPE && mBillItemAdapter.getFreeServiceStauts()) { if (item instanceof ServiceChargeItem && mBillItemAdapter.getFreeServiceStauts()) {
//TODO 免服務費 //TODO 免服務費
} else { } else {
foodTotal = MoneyUtil.sum(foodTotal, item.getMoney()); foodTotal = MoneyUtil.sum(foodTotal, item.getMoney());
...@@ -813,7 +823,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -813,7 +823,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
public double getTotalAmount() { public double getTotalAmount() {
double foodTotal = getFoodTotal(); double foodTotal = getFoodTotal();
for (BillItem item : mBillItemList) { for (BillItem item : mBillItemList) {
if (item.getType() == BillItem.SERVERCHARGE_TYPE && mBillItemAdapter.getFreeServiceStauts()) { if (item instanceof ServiceChargeItem && mBillItemAdapter.getFreeServiceStauts()) {
//TODO 免服務費 //TODO 免服務費
} else { } else {
foodTotal = MoneyUtil.sum(foodTotal, item.getMoney()); foodTotal = MoneyUtil.sum(foodTotal, item.getMoney());
...@@ -836,7 +846,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -836,7 +846,7 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
*/ */
protected Double getRounding() { protected Double getRounding() {
for (BillItem item : mBillItemList) { for (BillItem item : mBillItemList) {
if (item.getType() == BillItem.ROUNDING_TYPE) { if (item instanceof RoundingItem) {
return item.getMoney(); return item.getMoney();
} }
} }
...@@ -1405,12 +1415,12 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex ...@@ -1405,12 +1415,12 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
}); });
} }
public DoshokuOrder getDoshokuOrder() {
return mDoshokuOrder;
}
public ShoppingCart getShoppingCart() { public ShoppingCart getShoppingCart() {
return mShoppingCart; return mShoppingCart;
} }
public interface UpdateBillInfoEndListener {
void onUpdateEnd();
}
} }
...@@ -153,7 +153,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -153,7 +153,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
//獨佔折扣刪除其他折扣 //獨佔折扣刪除其他折扣
int start_position = mSelectMealAdapter.getSelect_full_start_position(); int start_position = mSelectMealAdapter.getSelect_full_start_position();
int end_position = mSelectMealAdapter.getSelect_full_end_position(); int end_position = mSelectMealAdapter.getSelect_full_end_position();
for (int i = 0; i < mOrderMealList.size(); i++) { for (int i = mOrderMealList.size() - 1; i >= 0; i--) {
if (start_position <= i && i <= end_position) { if (start_position <= i && i <= end_position) {
OrderDetail orderMealItem = mOrderMealList.get(i); OrderDetail orderMealItem = mOrderMealList.get(i);
if (orderMealItem.getDiscount() != null) { if (orderMealItem.getDiscount() != null) {
...@@ -992,11 +992,6 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -992,11 +992,6 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
mRootView.showMessage(info.getErrMsg()); mRootView.showMessage(info.getErrMsg());
} }
} }
@Override
public void onError(Throwable t) {
super.onError(t);
}
}); });
} }
...@@ -1670,26 +1665,6 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod ...@@ -1670,26 +1665,6 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
} }
} }
public Food getFoodByFid(long fid) {
for (int i = 0; i < mFoodList.size(); i++) {
Food foodBean = mFoodList.get(i);
if (fid == foodBean.getId()) {
return foodBean;
}
}
return null;
}
public Modifier getModifierByMid(long mid) {
for (int i = 0; i < mModifierList.size(); i++) {
Modifier modifier = mModifierList.get(i);
if (mid == modifier.getMid()) {
return modifier;
}
}
return null;
}
/** /**
* 標識食品是否为组合食品 * 標識食品是否为组合食品
* *
......
...@@ -257,7 +257,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra ...@@ -257,7 +257,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
if (mFunctionList.size() > 0) { if (mFunctionList.size() > 0) {
mFunctionList.clear(); mFunctionList.clear();
} }
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.RESTAURANT_MODE)) { if (BaseOrder.isTableToMeal()) {
if (mDoshokuOrder.isModifyOrder()) { if (mDoshokuOrder.isModifyOrder()) {
//修改訂單隱藏送單,印單功能 //修改訂單隱藏送單,印單功能
mFunctionList.add(new Function("結賬", Color.parseColor("#FFFFFF"), Color.parseColor("#DC0000"), 24)); mFunctionList.add(new Function("結賬", Color.parseColor("#FFFFFF"), Color.parseColor("#DC0000"), 24));
......
...@@ -13,6 +13,7 @@ import com.gingersoft.gsa.cloud.base.utils.JsonUtils; ...@@ -13,6 +13,7 @@ import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil; import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils; import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.constans.FoodSummaryConstans; import com.gingersoft.gsa.cloud.constans.FoodSummaryConstans;
import com.gingersoft.gsa.cloud.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.table.BuildConfig; import com.gingersoft.gsa.cloud.table.BuildConfig;
import com.gingersoft.gsa.cloud.table.mvp.contract.OrderPayContract; import com.gingersoft.gsa.cloud.table.mvp.contract.OrderPayContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderPayResponse; import com.gingersoft.gsa.cloud.table.mvp.model.bean.response.OrderPayResponse;
...@@ -177,7 +178,7 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model ...@@ -177,7 +178,7 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
mDoshokuOrder.setOldPoints(orderPayRespose.getOldPoints()); mDoshokuOrder.setOldPoints(orderPayRespose.getOldPoints());
} else { } else {
if (!TextUtils.isEmpty(orderPayRespose.getVerifyCode())) { if (!TextUtils.isEmpty(orderPayRespose.getVerifyCode())) {
mDoshokuOrder.setIntegralQrcode(orderPayRespose.getVerifyCode()); mDoshokuOrder.setIntegralQrcode(HttpsConstans.PRINT_QRCODE_ADDRESS + orderPayRespose.getVerifyCode());
} }
} }
} }
...@@ -288,14 +289,18 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model ...@@ -288,14 +289,18 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
} }
public void setFreeServiceStauts(boolean useFreeServicePayMethod) { public void setFreeServiceStauts(boolean useFreeServicePayMethod) {
//更新服務費中劃線
mBillItemAdapter.setFreeServiceStauts(useFreeServicePayMethod);
//更新總金額
updateBillInfo(new UpdateBillInfoEndListener() {
@Override
public void onUpdateEnd() {
OrderPayView orderPayView = IActivity.getGsaPayView(); OrderPayView orderPayView = IActivity.getGsaPayView();
if (orderPayView != null) { if (orderPayView != null) {
orderPayView.updateOrderPay(getTotalAmount()); orderPayView.updateOrderPay(getTotalAmount());
} }
//更新服務費中劃線 }
mBillItemAdapter.setFreeServiceStauts(useFreeServicePayMethod); });
//更新總金額
updateBillInfo();
} }
/** /**
......
...@@ -13,11 +13,13 @@ import com.gingersoft.gsa.cloud.app.GsaCloudApplication; ...@@ -13,11 +13,13 @@ import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult; import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.order.bean.response.OrderResponse; import com.gingersoft.gsa.cloud.base.order.bean.response.OrderResponse;
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.BaseOrder;
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;
import com.gingersoft.gsa.cloud.base.table.bean.TableExtBean; 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.table.ComponentTable; import com.gingersoft.gsa.cloud.table.ComponentTable;
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;
...@@ -121,6 +123,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -121,6 +123,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
private String originalTableName = ""; private String originalTableName = "";
private long originalTableId; private long originalTableId;
private String originalTableNumber = ""; private String originalTableNumber = "";
private long originalScanId;
/** /**
* 转台需要转到台名、id、分檯編號 * 转台需要转到台名、id、分檯編號
*/ */
...@@ -429,6 +432,11 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -429,6 +432,11 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
} }
doshokuOrder.setOpenTableInfo(openTableBean); doshokuOrder.setOpenTableInfo(openTableBean);
if (openTableBean.getScanId() != null) {
BaseOrder.orderType = FoodSummaryConstans.SKYORDER;
} else {
BaseOrder.orderType = FoodSummaryConstans.RESTAURANT_MODE;
}
mRootView.startMealStandActivity(); mRootView.startMealStandActivity();
} else { } else {
CommonTipDialog.showSurpisedDialog(IActivity, respose.getErrMsg(), null, null, null, null, null); CommonTipDialog.showSurpisedDialog(IActivity, respose.getErrMsg(), null, null, null, null, null);
...@@ -530,6 +538,9 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -530,6 +538,9 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
originalTableName = tableBean.getTableName(); originalTableName = tableBean.getTableName();
originalTableId = tableBean.getId(); originalTableId = tableBean.getId();
originalTableNumber = tableBean.getTableNumber(); originalTableNumber = tableBean.getTableNumber();
if (tableBean.getScanId() != null) {
originalScanId = tableBean.getScanId().longValue();
}
mRootView.setTableActionContentText("由: " + originalTableName + " 轉到 "); mRootView.setTableActionContentText("由: " + originalTableName + " 轉到 ");
} else { } else {
if (tableBean.getUseStatus() == 1) { if (tableBean.getUseStatus() == 1) {
...@@ -554,13 +565,14 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -554,13 +565,14 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
}); });
} }
public void turnTable(long originalTableId, long targetTableId, String tableNumber, String targetTableNumber, boolean isMergeTable) { public void turnTable(long originalTableId, long targetTableId, String tableNumber, String targetTableNumber, long originalScanId, boolean isMergeTable) {
RequestBody requestBody = new FormBody.Builder() RequestBody requestBody = new FormBody.Builder()
.add("id", String.valueOf(originalTableId)) .add("id", String.valueOf(originalTableId))
.add("tableId", String.valueOf(targetTableId)) .add("tableId", String.valueOf(targetTableId))
.add("tableNumber", tableNumber) .add("tableNumber", tableNumber)
.add("targetTableNumber", targetTableNumber) .add("targetTableNumber", targetTableNumber)
.add("scanId", String.valueOf(originalScanId))
.build(); .build();
mModel.turnTable(requestBody) mModel.turnTable(requestBody)
...@@ -866,7 +878,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -866,7 +878,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
@Override @Override
public void onClick(QMUIDialog dialog, int index) { public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss(); dialog.dismiss();
turnTable(originalTableId, targetTableId, originalTableNumber, targetTableNumber, finalIsMergeTable); turnTable(originalTableId, targetTableId, originalTableNumber, targetTableNumber, originalScanId, finalIsMergeTable);
} }
}); });
dialogBuilder.addAction("取消", new QMUIDialogAction.ActionListener() { dialogBuilder.addAction("取消", new QMUIDialogAction.ActionListener() {
...@@ -915,7 +927,6 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -915,7 +927,6 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
*/ */
public boolean doTableAction(TableBean.DataBean dataBean) { public boolean doTableAction(TableBean.DataBean dataBean) {
if (mTableAction != null) { if (mTableAction != null) {
mTableAction.action(dataBean);
mTableAction.setActionListener(new TableAction.OnActionListener() { mTableAction.setActionListener(new TableAction.OnActionListener() {
@Override @Override
...@@ -966,6 +977,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -966,6 +977,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
mRootView.canceTableAction(); mRootView.canceTableAction();
} }
}); });
mTableAction.action(dataBean);
return true; return true;
} }
return false; return false;
...@@ -978,6 +990,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont ...@@ -978,6 +990,7 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
originalTableName = ""; originalTableName = "";
originalTableId = 0; originalTableId = 0;
originalTableNumber = ""; originalTableNumber = "";
originalScanId = 0;
targetTableName = ""; targetTableName = "";
targetTableId = 0; targetTableId = 0;
targetTableNumber = ""; targetTableNumber = "";
......
...@@ -28,6 +28,7 @@ import androidx.annotation.Nullable; ...@@ -28,6 +28,7 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
...@@ -38,7 +39,9 @@ import com.gingersoft.gsa.cloud.app.GsaCloudApplication; ...@@ -38,7 +39,9 @@ import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.MemberInfo; import com.gingersoft.gsa.cloud.base.common.bean.MemberInfo;
import com.gingersoft.gsa.cloud.base.order.bean.response.OrderResponse; import com.gingersoft.gsa.cloud.base.order.bean.response.OrderResponse;
import com.gingersoft.gsa.cloud.base.order.billItem.BillItem; import com.gingersoft.gsa.cloud.base.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.base.order.cart.ShoppingCart;
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.discount.MultyDiscount;
import com.gingersoft.gsa.cloud.base.order.order.BaseOrder; import com.gingersoft.gsa.cloud.base.order.order.BaseOrder;
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;
...@@ -74,6 +77,10 @@ import com.gingersoft.gsa.cloud.ui.view.SearchKeyBoardView; ...@@ -74,6 +77,10 @@ import com.gingersoft.gsa.cloud.ui.view.SearchKeyBoardView;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gingersoft.gsa.cloud.zxing.MipcaCaptureActivity; import com.gingersoft.gsa.cloud.zxing.MipcaCaptureActivity;
import com.google.android.flexbox.FlexDirection;
import com.google.android.flexbox.FlexWrap;
import com.google.android.flexbox.FlexboxLayoutManager;
import com.google.android.flexbox.JustifyContent;
import com.jess.arms.base.BaseFragmentActivity; import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.base.DefaultAdapter; import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent; import com.jess.arms.di.component.AppComponent;
...@@ -315,7 +322,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -315,7 +322,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
} }
mPresenter.toFindMeal(inputText); mPresenter.toFindMeal(inputText);
}); });
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.RESTAURANT_MODE) && !DoshokuOrder.getInstance().isModifyOrder()) { if (BaseOrder.isTableToMeal() && !DoshokuOrder.getInstance().isModifyOrder()) {
//根据倒计时时间自动退出当前页面 //根据倒计时时间自动退出当前页面
initAutoQuit(); initAutoQuit();
} }
...@@ -352,7 +359,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -352,7 +359,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
mPresenter.resetSelected(); mPresenter.resetSelected();
mPresenter.updateOrderFoodNumber(); mPresenter.updateOrderFoodNumber();
mPresenter.updateFoodSoldoutCtrData(); mPresenter.updateFoodSoldoutCtrData();
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.RESTAURANT_MODE) && DoshokuOrder.getInstance().getMemberInfo() != null) { if (BaseOrder.isTableToMeal() && DoshokuOrder.getInstance().getMemberInfo() != null) {
useMember(); useMember();
} }
initOrderDetail(); initOrderDetail();
...@@ -619,9 +626,11 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -619,9 +626,11 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
dialog.dismiss(); dialog.dismiss();
DoshokuOrder.getInstance().setMemberInfo(mMemberInfo); DoshokuOrder.getInstance().setMemberInfo(mMemberInfo);
//添加会员折扣行 //添加会员折扣行
mPresenter.getShoppingCart() ShoppingCart shoppingCart = mPresenter.getShoppingCart();
.addMultyDiscount(mPresenter.getShoppingCart() MultyDiscount multyDiscount = shoppingCart.createMemberDiscount(mMemberInfo, BillItem.BILL_ITEM_NO_ORDER_STATUS);
.createMemberDiscount(mMemberInfo, BillItem.BILL_ITEM_NO_ORDER_STATUS)); shoppingCart.addMultyDiscount(multyDiscount);
mPresenter.updateBillInfo();
useMember(); useMember();
...@@ -652,16 +661,17 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -652,16 +661,17 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
} }
} }
}); });
mUseMemberDialog.build();
} }
mUseMemberDialog.setMemberInfo(DoshokuOrder.getInstance().getMemberInfo()); mUseMemberDialog.setMemberInfo(DoshokuOrder.getInstance().getMemberInfo());
mUseMemberDialog.build().show(); mUseMemberDialog.show();
} }
@Override @Override
public void updateMemberInfo(MemberInfo memberInfo) { public void updateMemberInfo(MemberInfo memberInfo) {
this.mMemberInfo = memberInfo; this.mMemberInfo = memberInfo;
if (mUseMemberDialog != null) { if (mUseMemberDialog != null) {
mUseMemberDialog.updateMemberInfo(memberInfo); mUseMemberDialog.setMemberInfo(memberInfo);
} }
} }
...@@ -705,7 +715,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -705,7 +715,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
//防抖處理 //防抖處理
int id = v.getId(); int id = v.getId();
if (id == R.id.btn_numberman) { if (id == R.id.btn_numberman) {
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.TAKEAWAY_TYPE)) { if (BaseOrder.isTableToMeal()) {
return; return;
} }
showChoosePeopleNumDialog(true); showChoosePeopleNumDialog(true);
...@@ -780,7 +790,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -780,7 +790,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
case 3: case 3:
case 4: case 4:
case 5: case 5:
if (BuildConfig.DEBUG && BaseOrder.isCurrentOrderType(FoodSummaryConstans.RESTAURANT_MODE)) { if (BuildConfig.DEBUG && BaseOrder.isTableToMeal()) {
if (i == 1) { if (i == 1) {
OrderResponse order = DoshokuOrder.getInstance().getOrderPlaced(); OrderResponse order = DoshokuOrder.getInstance().getOrderPlaced();
if (order != null) { if (order != null) {
...@@ -823,7 +833,6 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -823,7 +833,6 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
} else if (id == R.id.iv_fine_back) { } else if (id == R.id.iv_fine_back) {
showViewModeVisibility(MealConstant.combo_ViewMode); showViewModeVisibility(MealConstant.combo_ViewMode);
} }
} }
...@@ -835,14 +844,12 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -835,14 +844,12 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
public void returnTableActivity(boolean initTable) { public void returnTableActivity(boolean initTable) {
if (mPresenter.hasNesOrderFoods()) { if (mPresenter.hasNesOrderFoods()) {
if (mPresenter.hasNesOrderFoods()) {
//没有过重复下单提示且有未送单食品,提示用户 //没有过重复下单提示且有未送单食品,提示用户
String tip = LanguageUtils.get_language_system(this, "food.not.delivered.tip", "有食品未送單, 確認離開?"); String tip = LanguageUtils.get_language_system(this, "food.not.delivered.tip", "有食品未送單, 確認離開?");
Class[] parameterTypes = {boolean.class}; Class[] parameterTypes = {boolean.class};
Object[] parameters = {initTable}; Object[] parameters = {initTable};
CommonTipDialog.showSurpisedDialog(this, tip, MealStandActivity.class, this, CommonTipDialog.showSurpisedDialog(this, tip, MealStandActivity.class, this,
"returnBeforeActivity", parameterTypes, parameters); "returnBeforeActivity", parameterTypes, parameters);
}
} else { } else {
returnBeforeActivity(initTable); returnBeforeActivity(initTable);
} }
...@@ -850,11 +857,13 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -850,11 +857,13 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
public void returnBeforeActivity(boolean initTable) { public void returnBeforeActivity(boolean initTable) {
SPUtils.put(MealConstant.EXIT_IS_PLU_MODE, isPluMode); SPUtils.put(MealConstant.EXIT_IS_PLU_MODE, isPluMode);
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.RESTAURANT_MODE) && initTable && !DoshokuOrder.getInstance().isModifyOrder()) { if (BaseOrder.isTableToMeal() && initTable && !DoshokuOrder.getInstance().isModifyOrder()) {
TableBean.DataBean dataBean = DoshokuOrder.getInstance().getOpenTableInfo(); TableBean.DataBean dataBean = DoshokuOrder.getInstance().getOpenTableInfo();
if (dataBean != null) {
//通知更新餐台状态 //通知更新餐台状态
EventBus.getDefault().post(new InitTableEvent(dataBean.getId(), dataBean.getTableNumber()), "initTable_status_event"); EventBus.getDefault().post(new InitTableEvent(dataBean.getId(), dataBean.getTableNumber()), "initTable_status_event");
} }
}
killMyself(); killMyself();
} }
...@@ -1036,7 +1045,16 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -1036,7 +1045,16 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
@Override @Override
public void setDiscountRecycleLayoutManager(int orientation) { public void setDiscountRecycleLayoutManager(int orientation) {
FlexboxLayoutManager flexboxLayoutManager = new FlexboxLayoutManager(mContext);
//主轴为水平方向,起点在左端。
flexboxLayoutManager.setFlexDirection(FlexDirection.ROW);
//按正常方向换行
flexboxLayoutManager.setFlexWrap(FlexWrap.WRAP);
//交叉轴的起点对齐。
flexboxLayoutManager.setJustifyContent(JustifyContent.FLEX_START);
discountRecycleLayoutManager = new GridLayoutManager(this, 1, LinearLayoutManager.VERTICAL, false); discountRecycleLayoutManager = new GridLayoutManager(this, 1, LinearLayoutManager.VERTICAL, false);
// rv_discount.addItemDecoration(new DividerItemDecoration(mContext, ArmsUtils.getColor(mContext, R.color.theme_white_color)));
rv_discount.setLayoutManager(discountRecycleLayoutManager); rv_discount.setLayoutManager(discountRecycleLayoutManager);
rv_discount.setItemAnimator(new DefaultItemAnimator()); rv_discount.setItemAnimator(new DefaultItemAnimator());
} }
...@@ -1046,19 +1064,6 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -1046,19 +1064,6 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
DecimalFormat df = new DecimalFormat("###.00"); DecimalFormat df = new DecimalFormat("###.00");
String span = df.format((double) size / foodGroupColumn); String span = df.format((double) size / foodGroupColumn);
int spanCount = (int) Math.ceil(Double.parseDouble(span)); //33.333 int spanCount = (int) Math.ceil(Double.parseDouble(span)); //33.333
boolean twoRow = spanCount > 1 && spanCount < 2 || spanCount == 2;
// if (size <= foodGroupColumn) {
// setFoodGroupRecycleLayoutManager(GridLayoutManager.HORIZONTAL);
// foodGroupRecycleLayoutManager.setSpanCount(1);
// } else if (twoRow) {
// setFoodGroupRecycleLayoutManager(GridLayoutManager.VERTICAL);
// foodGroupRecycleLayoutManager.setSpanCount(foodGroupColumn);
// } else {
// setFoodGroupRecycleLayoutManager(GridLayoutManager.HORIZONTAL);
// foodGroupRecycleLayoutManager.setSpanCount(foodGroupColumn);
// }
} }
@Override @Override
...@@ -1195,7 +1200,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> ...@@ -1195,7 +1200,7 @@ public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter>
@Override @Override
public void initLayoutVisible() { public void initLayoutVisible() {
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.RESTAURANT_MODE) && DoshokuOrder.getInstance().isModifyOrder()) { if (BaseOrder.isTableToMeal() && DoshokuOrder.getInstance().isModifyOrder()) {
//修改訂單隱藏送單功能 //修改訂單隱藏送單功能
fl_send_order.setVisibility(View.GONE); fl_send_order.setVisibility(View.GONE);
} }
......
...@@ -195,9 +195,9 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese ...@@ -195,9 +195,9 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
mPresenter.initTopFunctionData(); mPresenter.initTopFunctionData();
mPresenter.initAdapter(); mPresenter.initAdapter();
mPresenter.initItemListener(); mPresenter.initItemListener();
initTopInfo(BaseOrder.orderType); initTopInfo();
initOrderBill(mPresenter.getFoodTotal(), mPresenter.getTotalAmount()); initOrderBill(mPresenter.getFoodTotal(), mPresenter.getTotalAmount());
if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.RESTAURANT_MODE) && !DoshokuOrder.getInstance().isModifyOrder()) { if (BaseOrder.isTableToMeal() && !DoshokuOrder.getInstance().isModifyOrder()) {
//根据倒计时时间自动退出当前页面 //根据倒计时时间自动退出当前页面
initAutoQuit(); initAutoQuit();
} }
...@@ -215,8 +215,13 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese ...@@ -215,8 +215,13 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
tv_total.setText("$" + totalAmount); tv_total.setText("$" + totalAmount);
} }
private void initTopInfo(int orderType) { private void initTopInfo() {
if (orderType == FoodSummaryConstans.RESTAURANT_MODE) { if (BaseOrder.isCurrentOrderType(FoodSummaryConstans.TAKEAWAY_TYPE)) {
btn_table.setText("外賣");
btn_people_num.setText("1");
tv_time.setText("時間:" + TimeUtils.getCurrentDate(TimeUtils.DATE_FORMAT_DATE_HM));
tv_server_main.setText("");
} else {
TableBean.DataBean tableInfo = mDoshokuOrder.getOpenTableInfo(); TableBean.DataBean tableInfo = mDoshokuOrder.getOpenTableInfo();
Date dd = mDoshokuOrder.getOpenTableTime(); Date dd = mDoshokuOrder.getOpenTableTime();
String openTime = String.format("%tH:%tM", dd, dd); String openTime = String.format("%tH:%tM", dd, dd);
...@@ -230,11 +235,6 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese ...@@ -230,11 +235,6 @@ public class OrderContentActivity extends BaseFragmentActivity<OrderContentPrese
btn_people_num.setText(tableInfo.getPerson() + ""); btn_people_num.setText(tableInfo.getPerson() + "");
tv_time.setText("時間:" + openTime); tv_time.setText("時間:" + openTime);
tv_server_main.setText(GsaCloudApplication.getMemberName()); tv_server_main.setText(GsaCloudApplication.getMemberName());
} else if (orderType == FoodSummaryConstans.TAKEAWAY_TYPE) {
btn_table.setText("外賣");
btn_people_num.setText("1");
tv_time.setText("時間:" + TimeUtils.getCurrentDate(TimeUtils.DATE_FORMAT_DATE_HM));
tv_server_main.setText("");
} }
} }
......
...@@ -118,13 +118,6 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements ...@@ -118,13 +118,6 @@ public class OrderPayActivity extends BaseActivity<OrderPayPresenter> implements
context.startActivity(intent); context.startActivity(intent);
} }
public static void startOrderPayActivityFormRefund(Context context, String response) {
Intent intent = new Intent(context, OrderPayActivity.class);
intent.setAction("REFUND_RESP");
intent.putExtra("REFUND_DATA", response);
context.startActivity(intent);
}
@Override @Override
public void setupActivityComponent(@NonNull AppComponent appComponent) { public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerOrderPayComponent //如找不到该类,请编译一下项目 DaggerOrderPayComponent //如找不到该类,请编译一下项目
......
...@@ -13,10 +13,9 @@ import android.widget.SimpleAdapter; ...@@ -13,10 +13,9 @@ import android.widget.SimpleAdapter;
import android.widget.TextView; import android.widget.TextView;
import com.billy.cc.core.component.CC; import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.base.table.bean.TableBean; import com.gingersoft.gsa.cloud.base.table.bean.TableBean;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil; import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.constans.FoodSummaryConstans; import com.gingersoft.gsa.cloud.logan.LoganUtils;
import com.gingersoft.gsa.cloud.table.R; import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2; import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerTableComponent; import com.gingersoft.gsa.cloud.table.di.component.DaggerTableComponent;
...@@ -58,7 +57,6 @@ import java.util.Map; ...@@ -58,7 +57,6 @@ import java.util.Map;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.DefaultItemAnimator;
...@@ -226,6 +224,7 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen ...@@ -226,6 +224,7 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen
.addParam("fromPage", 2) .addParam("fromPage", 2)
.build() .build()
.call(); .call();
LoganUtils.uploadLog(mContext,true);
} }
}); });
mTopBar.setTitle("餐檯模式"); mTopBar.setTitle("餐檯模式");
...@@ -382,7 +381,6 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen ...@@ -382,7 +381,6 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen
@Override @Override
public void startMealStandActivity() { public void startMealStandActivity() {
BaseOrder.orderType = FoodSummaryConstans.RESTAURANT_MODE;
startActivity(new Intent(this, MealStandActivity.class)); startActivity(new Intent(this, MealStandActivity.class));
} }
......
...@@ -9,6 +9,7 @@ import android.widget.TextView; ...@@ -9,6 +9,7 @@ import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.order.billItem.BillOrderMoney; import com.gingersoft.gsa.cloud.base.order.billItem.BillOrderMoney;
import com.gingersoft.gsa.cloud.base.order.billItem.BillItem; import com.gingersoft.gsa.cloud.base.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.base.order.billItem.ServiceChargeItem;
import com.gingersoft.gsa.cloud.table.R; import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2; import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity; import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
...@@ -96,7 +97,7 @@ public class BillItemAdapter extends DefaultAdapter<BillItem> { ...@@ -96,7 +97,7 @@ public class BillItemAdapter extends DefaultAdapter<BillItem> {
tv_money.setText(cashStr + datasBean.getMoney()); tv_money.setText(cashStr + datasBean.getMoney());
} }
if (datasBean.getType() == BillOrderMoney.SERVERCHARGE_TYPE) { if (datasBean instanceof ServiceChargeItem) {
if (isUseFreeServicePayMethod) { if (isUseFreeServicePayMethod) {
// 中划线 // 中划线
tv_title.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); tv_title.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
......
...@@ -152,8 +152,6 @@ public class TableAdapter extends DefaultAdapter<TableBean.DataBean> { ...@@ -152,8 +152,6 @@ public class TableAdapter extends DefaultAdapter<TableBean.DataBean> {
int person = 0; int person = 0;
if (item.getPerson() != 0) { if (item.getPerson() != 0) {
person = item.getPerson(); person = item.getPerson();
} else {
person = item.getSeatCount();
} }
tv_people.setVisibility(View.VISIBLE); tv_people.setVisibility(View.VISIBLE);
tv_people.setText(person + "人"); tv_people.setText(person + "人");
......
...@@ -5,7 +5,9 @@ import android.graphics.Color; ...@@ -5,7 +5,9 @@ import android.graphics.Color;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView; import android.widget.TextView;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication; import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.database.bean.Discount; import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.table.R; import com.gingersoft.gsa.cloud.table.R;
...@@ -14,7 +16,9 @@ import com.gingersoft.gsa.cloud.ui.view.BeveLabelView; ...@@ -14,7 +16,9 @@ import com.gingersoft.gsa.cloud.ui.view.BeveLabelView;
import com.jess.arms.base.BaseHolder; import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter; import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import java.util.List; import java.util.List;
import butterknife.BindView; import butterknife.BindView;
/** /**
...@@ -56,6 +60,8 @@ public class DiscountAdapter extends DefaultAdapter<Discount> { ...@@ -56,6 +60,8 @@ public class DiscountAdapter extends DefaultAdapter<Discount> {
class DiscountItemHolder extends BaseHolder<Discount> { class DiscountItemHolder extends BaseHolder<Discount> {
@BindView(R2.id.rl_container)
FrameLayout rl_container;
@BindView(R2.id.tv_name) @BindView(R2.id.tv_name)
TextView tv_name; TextView tv_name;
@BindView(R2.id.blv_soldout) @BindView(R2.id.blv_soldout)
...@@ -92,10 +98,10 @@ public class DiscountAdapter extends DefaultAdapter<Discount> { ...@@ -92,10 +98,10 @@ public class DiscountAdapter extends DefaultAdapter<Discount> {
private void setColor(Discount datasBean) { private void setColor(Discount datasBean) {
String colorRes = datasBean.getColor(); String colorRes = datasBean.getColor();
if (!TextUtils.isEmpty(colorRes) && colorRes.startsWith("#")) { if (!TextUtils.isEmpty(colorRes) && colorRes.startsWith("#")) {
tv_name.setBackgroundColor(Color.parseColor(colorRes)); rl_container.setBackgroundColor(Color.parseColor(colorRes));
} else { } else {
int color = ArmsUtils.getColor(mContext, R.color.light_blue_900); int color = ArmsUtils.getColor(mContext, R.color.light_blue_900);
tv_name.setBackgroundColor(color); rl_container.setBackgroundColor(color);
} }
int fontColor = ArmsUtils.getColor(mContext, R.color.theme_white_color); int fontColor = ArmsUtils.getColor(mContext, R.color.theme_white_color);
tv_name.setTextColor(fontColor); tv_name.setTextColor(fontColor);
......
...@@ -195,10 +195,20 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> { ...@@ -195,10 +195,20 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
tv_discount_money.setVisibility(View.INVISIBLE); tv_discount_money.setVisibility(View.INVISIBLE);
if (datasBean.isModify()) { if (datasBean.isModify()) {
if (datasBean.getType() == OrderDetail.MODIFIER_TYPE) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) tv_number.getLayoutParams();
layoutParams.rightMargin = ArmsUtils.getDimens(mContext,R.dimen.dp_15);
tv_number.setLayoutParams(layoutParams);
}
tv_modify_before_number.setText(String.valueOf(datasBean.getModifyBeforeNumber())); tv_modify_before_number.setText(String.valueOf(datasBean.getModifyBeforeNumber()));
tv_modify_before_number.setVisibility(View.VISIBLE); tv_modify_before_number.setVisibility(View.VISIBLE);
} else { } else {
tv_modify_before_number.setVisibility(View.INVISIBLE); tv_modify_before_number.setVisibility(View.INVISIBLE);
if (datasBean.getType() == OrderDetail.MODIFIER_TYPE) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) tv_number.getLayoutParams();
layoutParams.rightMargin = 0;
tv_number.setLayoutParams(layoutParams);
}
} }
} }
...@@ -632,8 +642,9 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> { ...@@ -632,8 +642,9 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
* @return * @return
*/ */
private boolean hasChild3Food(OrderDetail orderDetail) { private boolean hasChild3Food(OrderDetail orderDetail) {
if (orderDetail.getItemType() == 3) if (orderDetail.getItemType() == 3) {
return false; return false;
}
for (int i = 0; i < mInfos.size(); i++) { for (int i = 0; i < mInfos.size(); i++) {
if (mInfos.get(i).getItemType() == 3 && mInfos.get(i).getParentIndex() == orderDetail.getMyIndex()) { if (mInfos.get(i).getItemType() == 3 && mInfos.get(i).getParentIndex() == orderDetail.getMyIndex()) {
return true; return true;
...@@ -643,8 +654,9 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> { ...@@ -643,8 +654,9 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
} }
public boolean hasChildFood(OrderDetail orderDetail) { public boolean hasChildFood(OrderDetail orderDetail) {
if (orderDetail.getItemType() == 3) if (orderDetail.getItemType() == 3) {
return false; return false;
}
for (int i = 0; i < mInfos.size(); i++) { for (int i = 0; i < mInfos.size(); i++) {
if (mInfos.get(i).getParentIndex() == orderDetail.getMyIndex()) { if (mInfos.get(i).getParentIndex() == orderDetail.getMyIndex()) {
return true; return true;
......
...@@ -71,8 +71,6 @@ public class UseMemberDialog extends Dialog { ...@@ -71,8 +71,6 @@ public class UseMemberDialog extends Dialog {
private MemberInfoAdapter mMemberInfoAdapter; private MemberInfoAdapter mMemberInfoAdapter;
private List<SectionTextItem> mMemberInfoList; private List<SectionTextItem> mMemberInfoList;
private MemberInfo memberInfo;
public UseMemberDialog(Context context) { public UseMemberDialog(Context context) {
super(context, R.style.QMUI_BottomSheet); super(context, R.style.QMUI_BottomSheet);
...@@ -206,7 +204,6 @@ public class UseMemberDialog extends Dialog { ...@@ -206,7 +204,6 @@ public class UseMemberDialog extends Dialog {
public UseMemberDialog build() { public UseMemberDialog build() {
View contentView = buildViews(); View contentView = buildViews();
setContentView(contentView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (QMUIDisplayHelper.getScreenHeight(mContext) * 0.65))); setContentView(contentView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (QMUIDisplayHelper.getScreenHeight(mContext) * 0.65)));
updateMemberInfo(memberInfo);
return this; return this;
} }
...@@ -297,7 +294,7 @@ public class UseMemberDialog extends Dialog { ...@@ -297,7 +294,7 @@ public class UseMemberDialog extends Dialog {
}; };
} }
public void updateMemberInfo(MemberInfo memberInfo) { public void setMemberInfo(MemberInfo memberInfo) {
if (memberInfo != null) { if (memberInfo != null) {
if (mMemberInfoList == null) { if (mMemberInfoList == null) {
mMemberInfoList = new ArrayList<>(); mMemberInfoList = new ArrayList<>();
...@@ -340,9 +337,6 @@ public class UseMemberDialog extends Dialog { ...@@ -340,9 +337,6 @@ public class UseMemberDialog extends Dialog {
btn_scan.setVisibility(!show ? View.VISIBLE : View.GONE); btn_scan.setVisibility(!show ? View.VISIBLE : View.GONE);
} }
public void setMemberInfo(MemberInfo memberInfo) {
this.memberInfo = memberInfo;
}
private String getTvPhone() { private String getTvPhone() {
return ed_phone.getText().toString(); return ed_phone.getText().toString();
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <com.qmuiteam.qmui.alpha.QMUIAlphaFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rl_container" android:id="@+id/rl_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:padding="@dimen/dp_6">
<com.gingersoft.gsa.cloud.ui.view.BeveLabelView <com.gingersoft.gsa.cloud.ui.view.BeveLabelView
android:id="@+id/blv_soldout" android:id="@+id/blv_soldout"
...@@ -20,17 +21,14 @@ ...@@ -20,17 +21,14 @@
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView <com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_name" android:id="@+id/tv_name"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="1px"
android:layout_marginRight="1px"
android:gravity="center" android:gravity="center"
android:padding="@dimen/dp_2"
android:text="food" android:text="food"
android:textAppearance="?android:attr/textAppearanceLarge" android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/theme_white_color" android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_16" /> android:textSize="@dimen/sp_16" />
</FrameLayout> </com.qmuiteam.qmui.alpha.QMUIAlphaFrameLayout>
...@@ -183,7 +183,7 @@ ...@@ -183,7 +183,7 @@
android:text="30" android:text="30"
android:textColor="@color/orange_200" android:textColor="@color/orange_200"
android:textSize="@dimen/sp_16" android:textSize="@dimen/sp_16"
android:visibility="gone" /> android:visibility="visible" />
<TextView <TextView
android:id="@+id/tv_number" android:id="@+id/tv_number"
...@@ -194,5 +194,4 @@ ...@@ -194,5 +194,4 @@
android:text="20" android:text="20"
android:textColor="@color/theme_black" android:textColor="@color/theme_black"
android:textSize="@dimen/sp_20" /> android:textSize="@dimen/sp_20" />
</RelativeLayout> </RelativeLayout>
\ No newline at end of file
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