Commit e3e7e244 by Wyh

9.02 1、冷鏈接單 2、lalmove追加服務費 3、顯示餘額

Signed-off-by: Wyh <1239658231>
parent a3e7affc
ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为library编译,否则别的组件依赖此module时会报错 ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为library编译,否则别的组件依赖此module时会报错
apply from: rootProject.file("cc-settings.gradle") apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.jakewharton.butterknife' apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'org.greenrobot.greendao' apply plugin: 'org.greenrobot.greendao'
apply plugin: 'kotlin-kapt'
android { android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"] compileSdkVersion rootProject.ext.android["compileSdkVersion"]
...@@ -56,6 +57,17 @@ android { ...@@ -56,6 +57,17 @@ android {
generateTests false //设置为true以自动生成单元测试。 generateTests false //设置为true以自动生成单元测试。
} }
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java', 'src/main/aidl']
resources.srcDirs = ['src/main/java']
aidl.srcDirs = ['src/main/aidl']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
}
}
} }
dependencies { dependencies {
...@@ -79,7 +91,8 @@ dependencies { ...@@ -79,7 +91,8 @@ dependencies {
debugImplementation rootProject.ext.dependencies["canary-debug"] debugImplementation rootProject.ext.dependencies["canary-debug"]
releaseImplementation rootProject.ext.dependencies["canary-release"] releaseImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["canary-release"] testImplementation rootProject.ext.dependencies["canary-release"]
annotationProcessor rootProject.ext.dependencies["dagger2-compiler"] kapt rootProject.ext.dependencies["dagger2-compiler"]
kapt rootProject.ext.dependencies["butterknife-compiler"]
api rootProject.ext.dependencies["BaseRecyclerViewAdapter"] api rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
implementation rootProject.ext.dependencies["fastjson"] implementation rootProject.ext.dependencies["fastjson"]
// api rootProject.ext.dependencies["zxing"] // api rootProject.ext.dependencies["zxing"]
...@@ -117,6 +130,7 @@ dependencies { ...@@ -117,6 +130,7 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok:1.18.8' annotationProcessor 'org.projectlombok:lombok:1.18.8'
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["permissionx"]
} }
repositories { repositories {
mavenCentral() mavenCentral()
......
<manifest package="com.gingersoft.gsa.cloud.base" <manifest package="com.gingersoft.gsa.cloud.base"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<application <application
...@@ -22,6 +21,9 @@ ...@@ -22,6 +21,9 @@
<meta-data <meta-data
android:name="design_height_in_dp" android:name="design_height_in_dp"
android:value="640"/> android:value="640"/>
<service
android:name="com.gingersoft.gsa.cloud.service.GetInfoUpdateService"
android:enabled="true" />
</application> </application>
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
......
...@@ -25,8 +25,8 @@ import com.gingersoft.gsa.cloud.base.BuildConfig; ...@@ -25,8 +25,8 @@ import com.gingersoft.gsa.cloud.base.BuildConfig;
import com.gingersoft.gsa.cloud.base.R; import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.base.common.bean.RestaurantExpandInfo; import com.gingersoft.gsa.cloud.base.common.bean.RestaurantExpandInfo;
import com.gingersoft.gsa.cloud.base.utils.AidlUtil; import com.gingersoft.gsa.cloud.base.utils.AidlUtil;
import com.gingersoft.gsa.cloud.base.utils.FileUtils;
import com.gingersoft.gsa.cloud.base.utils.crash.AppCrashHandler; import com.gingersoft.gsa.cloud.base.utils.crash.AppCrashHandler;
import com.gingersoft.gsa.cloud.base.utils.file.FileUtils;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil; import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.xlog.MyBackupStrategy; import com.gingersoft.gsa.cloud.base.utils.xlog.MyBackupStrategy;
...@@ -189,6 +189,18 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -189,6 +189,18 @@ public class GsaCloudApplication extends BaseApplication {
//後台遷移新地址 //後台遷移新地址
RetrofitUrlManager.getInstance().putDomain("new_base_url", HttpsConstans.ROOT_URL+"/ricepon-member/api/"); RetrofitUrlManager.getInstance().putDomain("new_base_url", HttpsConstans.ROOT_URL+"/ricepon-member/api/");
//ricepon_wechat請求地址
RetrofitUrlManager.getInstance().putDomain("ricepon_wechat", HttpsConstans.ROOT_URL + HttpsConstans.URL_RICEPON_WECHAT);
//ricepon_order請求地址
RetrofitUrlManager.getInstance().putDomain("ricepon_order", HttpsConstans.ROOT_URL + HttpsConstans.URL_RICEPON_ORDER);
//member_web_ricepon_gsa請求地址
RetrofitUrlManager.getInstance().putDomain("member_web_ricepon_gsa", HttpsConstans.ROOT_URL + HttpsConstans.URL_MEMBER_WEB_RICEPON_GSA);
//member-web api 請求地址
RetrofitUrlManager.getInstance().putDomain("member-web", HttpsConstans.ROOT_URL + HttpsConstans.WECHAR_REPORT_PATH);
//ricepon_gsa請求地址
RetrofitUrlManager.getInstance().putDomain("ricepon_gsa", HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_GSA);
//ricepon_activities請求地址
RetrofitUrlManager.getInstance().putDomain("ricepon_activities", HttpsConstans.ROOT_URL + HttpsConstans.URK_RICEPON_ACTIVITIES);
} }
private void initPrint() { private void initPrint() {
......
package com.gingersoft.gsa.cloud.base.utils
import android.content.Context
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.os.Build
object SoundPoolUtils {
private var soundPool: SoundPool? = null
fun initSoundPool(context: Context, resId: Int) {
//实例化SoundPool
//sdk版本21是SoundPool 的一个分水岭
if (soundPool == null) {
if (Build.VERSION.SDK_INT >= 21) {
val builder = SoundPool.Builder()
//传入最多播放音频数量,
builder.setMaxStreams(1)
//AudioAttributes是一个封装音频各种属性的方法
val attrBuilder = AudioAttributes.Builder()
//设置音频流的合适的属性
attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
//加载一个AudioAttributes
builder.setAudioAttributes(attrBuilder.build())
soundPool = builder.build()
} else {
/**
* 第一个参数:int maxStreams:SoundPool对象的最大并发流数
* 第二个参数:int streamType:AudioManager中描述的音频流类型
*第三个参数:int srcQuality:采样率转换器的质量。 目前没有效果。 使用0作为默认值。
*/
soundPool = SoundPool(1, AudioManager.STREAM_MUSIC, 0)
}
}
//可以通过四种途径来记载一个音频资源:
//1.通过一个AssetFileDescriptor对象
//int load(AssetFileDescriptor afd, int priority)
//2.通过一个资源ID
//int load(Context context, int resId, int priority)
//3.通过指定的路径加载
//int load(String path, int priority)
//4.通过FileDescriptor加载
//int load(FileDescriptor fd, long offset, long length, int priority)
//声音ID 加载音频资源,这里用的是第二种,第三个参数为priority,声音的优先级*API中指出,priority参数目前没有效果,建议设置为1。
loadSound(context, resId)
}
private fun loadSound(context: Context, resId: Int) {
val voiceId = soundPool!!.load(context, resId, 1)
//异步需要等待加载完成,音频才能播放成功
soundPool!!.setOnLoadCompleteListener { soundPool, sampleId, status ->
if (status == 0) {
//第一个参数soundID
//第二个参数leftVolume为左侧音量值(范围= 0.0到1.0)
//第三个参数rightVolume为右的音量值(范围= 0.0到1.0)
//第四个参数priority 为流的优先级,值越大优先级高,影响当同时播放数量超出了最大支持数时SoundPool对该流的处理
//第五个参数loop 为音频重复播放次数,0为值播放一次,-1为无限循环,其他值为播放loop+1次
//第六个参数 rate为播放的速率,范围0.5-2.0(0.5为一半速率,1.0为正常速率,2.0为两倍速率)
soundPool.play(voiceId, 1f, 1f, 1, 0, 1f)
}
}
}
}
\ No newline at end of file
...@@ -35,4 +35,8 @@ public class VibratorUtils { ...@@ -35,4 +35,8 @@ public class VibratorUtils {
} catch (Exception e) { } catch (Exception e) {
} }
} }
public void setJumpActivity(Class clazz){
}
} }
...@@ -13,17 +13,16 @@ import com.elvishew.xlog.XLog; ...@@ -13,17 +13,16 @@ import com.elvishew.xlog.XLog;
import com.gingersoft.gsa.cloud.base.Api; import com.gingersoft.gsa.cloud.base.Api;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult; import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.utils.FileUtils;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils; import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.base.utils.file.FileUtils;
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.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;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
......
package com.gingersoft.gsa.cloud.base.utils.file;
import android.content.Context;
import android.os.Environment;
import android.text.TextUtils;
import com.elvishew.xlog.XLog;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2018/11/16
* 修订历史:2018/11/16
* 描述:7.0 兼容
* <files-path name="name" path="path" /> 对应getFilesDir()。
* <cache-path name="name" path="path" /> 对应getCacheDir()。
* <external-path name="name" path="path" /> 对应Environment.getExternalStorageDirectory()。
* <external-files-path name="name" path="path" /> 对应getExternalFilesDir()。
* <external-cache-path name="name" path="path" /> 对应getExternalCacheDir()。
*/
public class FileUtils {
public static String FirstFolder = "GsaCloud";//一级目录
public static String file = "file";//文件文件夹
public static String Image = "image";//图片文件夹
public static String Log = "xLog";//日志存储
public static String ActionLog = "actionLog";//操作日志
public static String ErrorLog = "errorLog";//错误日志存储
public static String APK = "Download";//安装包目录放在系统目录
/*ALBUM_PATH取得机器的SD卡位置,File.separator为分隔符“/”*/
public final static String ALBUM_PATH = Environment.getExternalStorageDirectory() + File.separator + FirstFolder + File.separator;
public final static String IMAGE_PATH = ALBUM_PATH + Image + File.separator;
public final static String File_PATH = ALBUM_PATH + file + File.separator;
public final static String LOG_PATH = ALBUM_PATH + Log + File.separator;
public final static String ACTIONLOG_PATH = LOG_PATH + ActionLog + File.separator;
public final static String ERRORLOG_PATH = LOG_PATH + ErrorLog + File.separator;
public final static String APK_PATH = Environment.getExternalStorageDirectory() + File.separator + APK + File.separator;
public final static String FILE_EXTENSION_SEPARATOR = ".";
//操作日志單最大文件大小
public final static int ACTION_MAX_SIZE = 1024 * 1024 * 5;
//操作日志文件按照時間刪除
public final static int ACTION_MAX_FILE_TIME = 1000 * 60 * 60 * 12;
private FileUtils() {
throw new AssertionError();
}
public static StringBuilder readFile(String filePath, String charsetName) {
File file = new File(filePath);
StringBuilder fileContent = new StringBuilder("");
if (file == null || !file.isFile()) {
return null;
}
BufferedReader reader = null;
try {
InputStreamReader is = new InputStreamReader(new FileInputStream(
file), charsetName);
reader = new BufferedReader(is);
String line = null;
while ((line = reader.readLine()) != null) {
if (!fileContent.toString().equals("")) {
fileContent.append("\r\n");
}
fileContent.append(line);
}
reader.close();
return fileContent;
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
}
}
}
}
/**
* 写文件
*
* @param
* @return boolean 返回类型
*/
public static boolean writeFile(String filePath, String content,
boolean append) {
if (TextUtils.isEmpty(content)) {
return false;
}
FileWriter fileWriter = null;
try {
makeDirs(filePath);
fileWriter = new FileWriter(filePath, append);
fileWriter.write(content);
fileWriter.close();
return true;
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
} finally {
if (fileWriter != null) {
try {
fileWriter.close();
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
}
}
}
}
/**
* 创建文件的路径
*
* @param
* @return boolean 返回类型
*/
public static boolean makeDirs(String filePath) {
String folderName = getFolderName(filePath);
if (TextUtils.isEmpty(folderName)) {
return false;
}
File folder = new File(folderName);
return (folder.exists() && folder.isDirectory()) ? true : folder.mkdirs();
}
public static String getFolderName(String filePath) {
if (TextUtils.isEmpty(filePath)) {
return filePath;
}
int filePosi = filePath.lastIndexOf(File.separator);
return (filePosi == -1) ? "" : filePath.substring(0, filePosi);
}
/**
* 写文本文件 在Android系统中,文件保存在 /data/data/PACKAGE_NAME/files 目录下
*
* @param context
*/
public static void write(Context context, String fileName, String content) {
if (content == null)
content = "";
try {
FileOutputStream fos = context.openFileOutput(fileName,
Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取文本文件 文件保存在 /data/data/PACKAGE_NAME/files
*
* @param context
* @param fileName
* @return
*/
public static String read(Context context, String fileName) {
try {
FileInputStream in = context.openFileInput(fileName);
return readInStream(in);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
public static String readInStream(FileInputStream inStream) {
try {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[512];
int length = -1;
while ((length = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, length);
}
outStream.close();
inStream.close();
return outStream.toString();
} catch (IOException e) {
XLog.tag("FileTest").d(e.getMessage());
}
return null;
}
/**
* 创建文件
*
* @param folderPath
* @param fileName
* @return
*/
public static File createFile(String folderPath, String fileName) {
File destDir = new File(folderPath);
if (!destDir.exists()) {
destDir.mkdirs();
}
return new File(folderPath, fileName + fileName);
}
/*
* 在SD卡上创建目录
*/
public static File creatSDDir(String dirName) {
File dir = new File(dirName);
if (!dir.exists()) {
dir.mkdirs();
}
return dir;
}
/**
* 获取文件大小
*
* @param filePath
* @return
*/
public static long getFileSize(String filePath) {
long size = 0;
File file = new File(filePath);
if (file != null && file.exists()) {
size = file.length();
}
return size;
}
/*
* Java文件操作 获取文件扩展名
* */
public static String getExtensionName(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length() - 1))) {
return filename.substring(dot + 1);
}
}
return filename;
}
/*
* Java文件操作 获取不带扩展名的文件名
* */
public static String getFileNameNoEx(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length()))) {
return filename.substring(0, dot);
}
}
return filename;
}
}
...@@ -7,6 +7,7 @@ public class ExpandConstant { ...@@ -7,6 +7,7 @@ public class ExpandConstant {
public final static String TableModePrintCount = "TableModePrintCount";//餐檯印單打印次數 public final static String TableModePrintCount = "TableModePrintCount";//餐檯印單打印次數
public final static String TableModeClosingPC = "TableModeClosingPC";//餐檯模式結賬單打印次數 public final static String TableModeClosingPC = "TableModeClosingPC";//餐檯模式結賬單打印次數
public final static String OrderReceivingTimeout = "OrderReceivingTimeout";//外送接單超時時間
public final static String Rounding = "Rounding"; public final static String Rounding = "Rounding";
public final static String RoundingDecimal = "RoundingDecimal"; public final static String RoundingDecimal = "RoundingDecimal";
......
package com.gingersoft.gsa.cloud.constans;
import com.gingersoft.gsa.cloud.function.FModule;
public class FunctionManagerConstans {
public static class takeaway{
public static final String CONFIRM_BTN_KEY = "takeaway/orderDetails/btn/confirmOrder";
public static final String PRODUCTION_COMPLETED_BTN_KEY = "takeaway/orderDetails/btn/ProductionCompleted";
public static final String CANCEL_ORDER_BTN_KEY = "takeaway/orderDetails/btn/cancelOrder";
public static final String PRINT_ORDER_BTN_KEY = "takeaway/orderDetails/btn/printOrder";
public static final String LOGISTICS_BTN_KEY = "takeaway/orderDetails/btn/logistics";
public static final String ASSIGNDELIVERY_BTN_KEY = "takeaway/orderDetails/btn/assignDelivery";
public static final String CLOSING_BTN_KEY = "takeaway/orderDetails/btn/closing";
public static final String TRANSPORTATION_BTN_KEY = "takeaway/orderDetails/btn/transportation";
/** 外送/自取- 訂單詳情管理 */
public static final FModule[] orderDetails = {
new FModule(CONFIRM_BTN_KEY, 0, 0),
new FModule(PRODUCTION_COMPLETED_BTN_KEY, 0, 0),
new FModule(CANCEL_ORDER_BTN_KEY, 0, 0),
new FModule(PRINT_ORDER_BTN_KEY, 0, 0),
new FModule(LOGISTICS_BTN_KEY, 0, 0),
new FModule(ASSIGNDELIVERY_BTN_KEY, 0, 0),
new FModule(CLOSING_BTN_KEY, 0, 0),
new FModule(TRANSPORTATION_BTN_KEY, 0, 0),
};
}
}
...@@ -45,24 +45,33 @@ public class HttpsConstans { ...@@ -45,24 +45,33 @@ public class HttpsConstans {
public static String ROOT_SERVER_SHI_SHU_HK = "http://192.168.1.154:9012/api/"; //石书本地 public static String ROOT_SERVER_SHI_SHU_HK = "http://192.168.1.154:9012/api/"; //石书本地
//------------------------------------------外賣接單--------------------------------------------------------------------------- //------------------------------------------外賣接單---------------------------------------------------------------------------
public static final String URL_RICEPON_WECHAT = "/ricepon-wechat/api/";
public static final String URL_RICEPON_ORDER = "/ricepon-order/api/";
public static final String URK_RICEPON_GSA = "/ricepon-gsa/api/";
public static final String URK_RICEPON_ACTIVITIES = "/ricepon-activities/api/";
public static final String URL_MEMBER_WEB_RICEPON_GSA = "/member-web" + URK_RICEPON_GSA;
public static final String ROOT_SZ_URL = "http://192.168.1.74:6060";//友常本地 public static final String ROOT_SZ_URL = "http://192.168.1.74:6060";//友常本地
public static final String ROOT_HK_TEST_URL = "https://hktest.ricepon.com:64377";//香港測試 public static final String ROOT_HK_TEST_URL = "https://hktest.ricepon.com:64377";//香港測試
public static final String ROOT_FORMAL_URL = "https://m.ricepon.com";//正式 public static final String ROOT_FORMAL_URL = "https://m.ricepon.com";//正式
//-------------------------------------------報表------------------------------------------------------------------------------- //-------------------------------------------報表-------------------------------------------------------------------------------
private static String REPORT_TEST_ADDRESS = "http://a.ricepon.com:58201";//報表測試地址 public static String REPORT_TEST_ADDRESS = "http://a.ricepon.com:58201";//報表測試地址
private static String REPORT_FORMAL_ADDRESS = HTTP_ADDRESS_URL_FORMAL;//報表正式地址 public static String REPORT_FORMAL_ADDRESS = HTTP_ADDRESS_URL_FORMAL;//報表正式地址
//報表路徑 //報表路徑
private static String REPORT_PATH = "/ricepon-report/api/"; public static String REPORT_PATH = "/ricepon-report/api/";
//----------------------------------微信公眾號報表地址------------------------------------------------------------------------------------------ //----------------------------------微信公眾號報表地址------------------------------------------------------------------------------------------
private static String WECHAR_REPORT_TEST_ADDRESS = "http://a.ricepon.com:61177";//微信公眾號報表測試地址 public static String WECHAR_REPORT_TEST_ADDRESS = "http://a.ricepon.com:61177";//微信公眾號報表測試地址
private static String WECHAR_REPORT_FORMAL_ADDRESS = HTTP_ADDRESS_URL_FORMAL;//微信公眾號報表正式地址 public static String WECHAR_REPORT_FORMAL_ADDRESS = HTTP_ADDRESS_URL_FORMAL;//微信公眾號報表正式地址
private static String WECHAR_REPORT_PATH = "/member-web/api/";//微信公眾號報表路徑 public static String WECHAR_REPORT_PATH = "/member-web/api/";//微信公眾號報表路徑
//---------------------------------------System請求地址---------------------------------------------------------------------------------- //---------------------------------------System請求地址----------------------------------------------------------------------------------
private static String SYSTEM_PATH = "/ricepon-system/api/"; public static String SYSTEM_PATH = "/ricepon-system/api/";
//--------------------------------------配置----------------------------------------------------------------------------------- //--------------------------------------配置-----------------------------------------------------------------------------------
...@@ -87,6 +96,8 @@ public class HttpsConstans { ...@@ -87,6 +96,8 @@ public class HttpsConstans {
//默認url,配置這個值修改環境 //默認url,配置這個值修改環境
public static String ROOT_SERVER_ADDRESS_FORMAL = (isFormal == 1 ? HTTP_ADDRESS_URL_FORMAL : HTTP_ADDRESS_URL_HK) + PATH; public static String ROOT_SERVER_ADDRESS_FORMAL = (isFormal == 1 ? HTTP_ADDRESS_URL_FORMAL : HTTP_ADDRESS_URL_HK) + PATH;
public static String ROOT_SERVER = isFormal == 1 ? HTTP_ADDRESS_URL_FORMAL : HTTP_ADDRESS_URL_HK;
//修改這個值,配置外賣接單環境 //修改這個值,配置外賣接單環境
public static String ROOT_URL;// = isFormal ? ROOT_FORMAL_URL : ROOT_HK_TEST_URL;//正式:ROOT_FORMAL_URL 測試:ROOT_HK_TEST_URL public static String ROOT_URL;// = isFormal ? ROOT_FORMAL_URL : ROOT_HK_TEST_URL;//正式:ROOT_FORMAL_URL 測試:ROOT_HK_TEST_URL
......
...@@ -10,6 +10,8 @@ class OrderDetails { ...@@ -10,6 +10,8 @@ class OrderDetails {
* data : [{"Order_ID":50349,"NUMBER":1,"MEMBER_NAME":"忆逝1","PRICE":88,"discount_amount":0,"PHONE":"15728241877","ORDER_NO":"26202811401145744","Lunchbox":0,"remark":"","pid":0,"PRODUCT_NAME":[{"odsId":"1650249","PRICE":"88.0","num":"1","pid":"0","PRODUCT_NAME":"脆炸粟米蟹肉餅"}],"odsId":1650249,"addressDetail":"香港長沙灣青山道479 - 479A號麗昌工廠大廈 704 室及 802 室(接待處於 704 室蘋果迷你倉 - 荔枝角 (麗昌分店)分店","DELIVERY_CHARGE":0,"order_from":7,"sender":"","SEND_TIME":"盡快送達 18:27","PAY_AMOUNT":88,"ID":50349,"CREATE_TIME":"2020-04-02 17:57:29.0","takeFoodCode":"0","RECEIVER":"張學友 先生","TOTAL_AMOUNT":"88.0"}] * data : [{"Order_ID":50349,"NUMBER":1,"MEMBER_NAME":"忆逝1","PRICE":88,"discount_amount":0,"PHONE":"15728241877","ORDER_NO":"26202811401145744","Lunchbox":0,"remark":"","pid":0,"PRODUCT_NAME":[{"odsId":"1650249","PRICE":"88.0","num":"1","pid":"0","PRODUCT_NAME":"脆炸粟米蟹肉餅"}],"odsId":1650249,"addressDetail":"香港長沙灣青山道479 - 479A號麗昌工廠大廈 704 室及 802 室(接待處於 704 室蘋果迷你倉 - 荔枝角 (麗昌分店)分店","DELIVERY_CHARGE":0,"order_from":7,"sender":"","SEND_TIME":"盡快送達 18:27","PAY_AMOUNT":88,"ID":50349,"CREATE_TIME":"2020-04-02 17:57:29.0","takeFoodCode":"0","RECEIVER":"張學友 先生","TOTAL_AMOUNT":"88.0"}]
*/ */
var code: String? = null
var errorMsg: String? = null
var success: Boolean = false var success: Boolean = false
var sysTime: Long = 0 var sysTime: Long = 0
var data: List<DataBean>? = null var data: List<DataBean>? = null
...@@ -106,7 +108,8 @@ class OrderDetails { ...@@ -106,7 +108,8 @@ class OrderDetails {
// * * Order Cancelled After Collection - 訂單已取消 - 取餐后 9 // * * Order Cancelled After Collection - 訂單已取消 - 取餐后 9
// * * Order Assigned To Another Delivery Man - 已指派另一位配送員 10 // * * Order Assigned To Another Delivery Man - 已指派另一位配送員 10
var payMultiple: List<PayMultiple>? = null var payMultiple: List<PayMultiple>? = null
var companyType:Int = -1 //物流公司類型 0 本店配送 1:zeek;2:lalamove var companyType: Int = -1 //物流公司類型 0 本店配送 1:zeek;2:lalamove
var labUrl: String? = null //打印文檔鏈接
class PRODUCTNAMEBean : Serializable { class PRODUCTNAMEBean : Serializable {
/** /**
......
package com.gingersoft.gsa.cloud.service
interface PostCallBack {
fun callBack(type: Int)
}
\ No newline at end of file
...@@ -4,17 +4,17 @@ import android.view.View; ...@@ -4,17 +4,17 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import com.gingersoft.gsa.cloud.base.R; import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.base.R2; import com.gingersoft.gsa.cloud.base.R2;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionHeader; import com.gingersoft.gsa.cloud.ui.bean.view.SectionHeader;
import com.gingersoft.gsa.cloud.ui.bean.view.SectionRestaurantItem; import com.gingersoft.gsa.cloud.ui.bean.view.SectionRestaurantItem;
import com.gingersoft.gsa.cloud.ui.view.section.BaseTextSection;
import com.gingersoft.gsa.cloud.ui.view.section.QDSectionHeaderView; import com.gingersoft.gsa.cloud.ui.view.section.QDSectionHeaderView;
import com.qmuiteam.qmui.widget.section.QMUIDefaultStickySectionAdapter; import com.qmuiteam.qmui.widget.section.QMUIDefaultStickySectionAdapter;
import com.qmuiteam.qmui.widget.section.QMUISection; import com.qmuiteam.qmui.widget.section.QMUISection;
import com.qmuiteam.qmui.widget.section.QMUIStickySectionAdapter; import com.qmuiteam.qmui.widget.section.QMUIStickySectionAdapter;
import androidx.annotation.NonNull;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
......
package com.gingersoft.gsa.cloud.ui.utils
import com.gingersoft.gsa.cloud.base.R
import com.gingersoft.gsa.cloud.constans.FunctionManagerConstans
import com.gingersoft.gsa.cloud.database.bean.Function
class BtnBuilder(var functions: List<Function>) {
companion object {
const val SureBtn = 0
const val CancelBtn = 1
const val PrintBtn = 2
const val LogisticsBtn = 3
const val AssignDeliveryBtn = 4
const val ClosingBtn = 5
const val ProductionCompletedBtn = 6
const val TransportationBtn = 7//選擇運輸工具
const val AdditionalServiceChargeBtn = 8//追加服務費
@Volatile
private var instance: BtnBuilder? = null
@JvmStatic
fun getInstance(functions: List<Function>) = instance
?: synchronized(this) {
instance
?: BtnBuilder(functions).also { instance = it }
}
}
class BtnBean(val type: Int, val btnContent: String, val btnColor: Int, val btnImg: Int)
fun getSureBtn(): BtnBean? {
return getBtn(FunctionManagerConstans.takeaway.CONFIRM_BTN_KEY, SureBtn, "確認訂單", R.color.other_order_details_sure_btn_color, R.drawable.ic_sure)
}
fun getProductionCompletedBtn(): BtnBean? {
return getBtn(FunctionManagerConstans.takeaway.PRODUCTION_COMPLETED_BTN_KEY, ProductionCompletedBtn, "製作完成", R.color.other_order_details_sure_btn_color, R.drawable.ic_sure)
}
fun getCancelBtn(): BtnBean? {
return getBtn(FunctionManagerConstans.takeaway.CANCEL_ORDER_BTN_KEY, CancelBtn, "取消訂單", R.color.other_order_details_cancel_btn_color, R.drawable.ic_cancel)
}
fun getPrintBtn(): BtnBean? {
return getBtn(FunctionManagerConstans.takeaway.PRINT_ORDER_BTN_KEY, PrintBtn, "打印訂單", R.color.other_order_details_print_btn_color, R.drawable.ic_print)
}
fun getLogisticsBtn(): BtnBean? {
return getBtn(FunctionManagerConstans.takeaway.LOGISTICS_BTN_KEY, LogisticsBtn, "取消物流", R.color.other_order_details_cancel_logistics_btn_color, R.drawable.ic_logistics)
}
fun getAssignDeliveryBtn(): BtnBean? {
return getBtn(FunctionManagerConstans.takeaway.ASSIGNDELIVERY_BTN_KEY, AssignDeliveryBtn, "指派送貨", R.color.other_order_details_sure_btn_color, R.drawable.ic_deliveryman)
}
fun getClosingBtn(): BtnBean? {
return getBtn(FunctionManagerConstans.takeaway.CLOSING_BTN_KEY, ClosingBtn, "結賬", R.color.other_order_details_cancel_btn_color, R.drawable.ic_closing)
}
fun getTransportationBtn(): BtnBean? {
return getBtn(FunctionManagerConstans.takeaway.TRANSPORTATION_BTN_KEY, TransportationBtn, "運輸工具", R.color.other_order_details_cancel_logistics_btn_color, R.drawable.ic_logistics)
}
fun getAdditionalServiceChargeBtn(): BtnBean? {
return getBtn(FunctionManagerConstans.takeaway.TRANSPORTATION_BTN_KEY, AdditionalServiceChargeBtn, "追加服務費", R.color.other_order_details_cancel_logistics_btn_color, R.drawable.ic_logistics)
}
private fun getBtn(key: String, btnCode: Int, btnContent: String, btnColor: Int, btnImg: Int): BtnBean? {
for (value in functions) {
if (value.resUrl == key) {
return when {
value.status == 3 -> BtnBean(btnCode, btnContent, R.color.color_ccc, btnImg)
// value.status == 1 -> BtnBean(btnCode, btnContent, btnColor, btnImg)
else -> BtnBean(btnCode, btnContent, btnColor, btnImg)
}
}
}
return null
// return BtnBean(btnCode, btnContent, btnColor, btnImg)
}
}
package com.gingersoft.gsa.cloud.ui.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.jess.arms.utils.DeviceUtils;
public class AddKeyBoard extends FrameLayout {
private String[] keyString = new String[]{"+10", "+20", "+50", "+100", "7", "8", "9", "X", "4", "5", "6", "1", "2", "3", "確定", "0", "00", "000"};
private float screenWidth;
private String amount = "";
private String decimal = "";
private onKeyResultListener onKeyResultListener;
public AddKeyBoard(@NonNull Context context) {
this(context, null);
}
public AddKeyBoard(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, -1);
}
public AddKeyBoard(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
screenWidth = DeviceUtils.getScreenWidth(getContext());
RecyclerView recyclerView = new RecyclerView(getContext());
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));
recyclerView.setAdapter(new KeyBoardAdapter());
addView(recyclerView);
}
public void setOnKeyResultListener(AddKeyBoard.onKeyResultListener onKeyResultListener) {
this.onKeyResultListener = onKeyResultListener;
}
private class KeyBoardAdapter extends RecyclerView.Adapter<KeyBoardAdapter.ViewHolder> {
@NonNull
@Override
public KeyBoardAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(View.inflate(parent.getContext(), R.layout.item_num_keyboard, null));
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
ViewGroup.LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
holder.itemView.setOnClickListener(v -> {
if (keyString[position].contains("+")) {
long oldAmount;
if (amount.contains(".")) {
oldAmount = Long.parseLong(amount.substring(0, amount.length() - 1));
amount = (oldAmount + Integer.valueOf(keyString[position].substring(1))) + ".";
} else {
if (amount.length() <= 0) {
amount = keyString[position].substring(1);
} else {
oldAmount = Long.parseLong(amount);
amount = (oldAmount + Integer.valueOf(keyString[position].substring(1))) + "";
}
}
} else if (keyString[position].equals("X")) {
if (decimal.length() > 0) {
decimal = decimal.substring(0, decimal.length() - 1);
} else if (amount.length() > 0) {
amount = amount.substring(0, amount.length() - 1);
}
} else if (!keyString[position].equals("確定")) {
if (keyString[position].equals(".")) {
//如果是小數點
if (!amount.contains(".")) {
if (amount.length() > 0) {
amount += ".";
}
}
} else {
//不是小數點
if (amount.contains(".")) {
if (decimal.length() >= 2) {
ToastUtils.show(getContext(), "最多輸入兩位小數");
} else {
decimal += keyString[position];
}
} else {
amount += keyString[position];
}
}
}
if (keyString[position].equals("確定")) {
if (onKeyResultListener != null) {
onKeyResultListener.onResult(true, amount + decimal);
}
} else {
if (onKeyResultListener != null) {
onKeyResultListener.onResult(false, amount + decimal);
}
}
});
lp.width = (int) (screenWidth / 4);
lp.height = lp.width / 2;
if (keyString[position].equals("X") || keyString[position].equals("確定")) {
lp.height = lp.height * 2;
}
holder.layout.setLayoutParams(lp);
holder.tvKey.setText(keyString[position]);
}
@Override
public int getItemCount() {
return keyString.length;
}
private class ViewHolder extends RecyclerView.ViewHolder {
TextView tvKey;
LinearLayout layout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
tvKey = itemView.findViewById(R.id.tv_keyboard);
layout = itemView.findViewById(R.id.layout);
}
}
}
public interface onKeyResultListener {
void onResult(boolean isComplete, String value);
}
}
...@@ -86,7 +86,7 @@ public class LoadingDialog { ...@@ -86,7 +86,7 @@ public class LoadingDialog {
if (mLoadingDialog == null) { if (mLoadingDialog == null) {
mLoadingDialog = new Dialog(context, R.style.ui_loading_dialog); mLoadingDialog = new Dialog(context, R.style.ui_loading_dialog);
} else if(mLoadingDialog.isShowing()){ } else if (mLoadingDialog.isShowing()) {
mLoadingDialog.dismiss(); mLoadingDialog.dismiss();
mLoadingDialog = new Dialog(context, R.style.ui_loading_dialog); mLoadingDialog = new Dialog(context, R.style.ui_loading_dialog);
} }
...@@ -111,6 +111,7 @@ public class LoadingDialog { ...@@ -111,6 +111,7 @@ public class LoadingDialog {
* 关闭加载对话框 * 关闭加载对话框
*/ */
public static void cancelDialogForLoading() { public static void cancelDialogForLoading() {
try {
if (animationDrawable != null) { if (animationDrawable != null) {
animationDrawable.stop(); animationDrawable.stop();
animationDrawable = null; animationDrawable = null;
...@@ -120,5 +121,8 @@ public class LoadingDialog { ...@@ -120,5 +121,8 @@ public class LoadingDialog {
mLoadingDialog = null; mLoadingDialog = null;
} }
loadingText = null; loadingText = null;
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
} }
} }
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/dp_8" />
<solid android:color="@color/close_btn_color" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/online_payments_bg"/>
<corners android:radius="@dimen/dp_8"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.qmuiteam.qmui.alpha.QMUIAlphaLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/layout"
android:orientation="vertical">
<include layout="@layout/include_horizontal_color_ccc_dividing_line" />
<com.qmuiteam.qmui.alpha.QMUIAlphaLinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_keyboard"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="+10"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_16" />
<include layout="@layout/include_vertical_color_ccc_dividing_line" />
</com.qmuiteam.qmui.alpha.QMUIAlphaLinearLayout>
</com.qmuiteam.qmui.alpha.QMUIAlphaLinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_nodata" android:id="@+id/layout_nodata"
android:layout_width="match_parent" android:layout_width="match_parent"
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="@dimen/dp_10">
<ImageView
android:id="@+id/iv_launch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_toEndOf="@id/iv_launch"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ricepon pos"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_14" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:text="外賣接單服務"
android:textColor="@color/color_3c"
android:textSize="@dimen/dp_14" />
</LinearLayout>
<Button
android:id="@+id/btn_stop_service"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:background="@drawable/shape_cloas_btn"
android:text="停止接單"
android:textColor="@color/white"
android:textSize="@dimen/dp_14" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_list_popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="@dimen/dp_20"
android:paddingTop="@dimen/dp_10"
android:paddingRight="@dimen/dp_20"
android:paddingBottom="@dimen/dp_10"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_14" />
<include layout="@layout/include_horizontal_color_ccc_dividing_line" />
</LinearLayout>
\ No newline at end of file
...@@ -152,4 +152,58 @@ ...@@ -152,4 +152,58 @@
<string name="edit_digits_number_words">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</string> <string name="edit_digits_number_words">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</string>
<string name="print_split_line">- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - </string> <string name="print_split_line">- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - </string>
<!--外送/自取 凍鏈-->
<string name="history_order">歷史訂單</string>
<string name="tab_text_1">全部</string>
<string name="tab_text_2">待確認</string>
<string name="tab_text_3">製作中</string>
<string name="tab_text_4">送貨中</string>
<string name="tab_text_5">待取餐</string>
<string name="order_receiving_timeout">接單超時</string>
<string name="logistics_informed">已通知物流</string>
<string name="slash">/</string>
<string name="minus_amount_unit">-$</string>
<string name="count">x</string>
<string name="normal">正常</string>
<string name="rest">休息</string>
<string name="open">營業中</string>
<string name="resting">休息中</string>
<string name="order_no">訂單編號:</string>
<string name="deliveryman">送貨員:</string>
<string name="deliveryman_phone">送貨員手機號:</string>
<string name="logistics_number">物流號:</string>
<string name="take_food_code_omit">----</string>
<string name="receiving_telephone">收貨電話:</string>
<string name="reserved_telephone">預留電話:</string>
<string name="receiving_time">收貨時間:</string>
<string name="self_taking_time">自取時間:</string>
<string name="receiving_address">收貨地址:</string>
<string name="meal_code">取餐碼:</string>
<string name="address">地\u3000址:</string>
<string name="table_number">檯號:</string>
<string name="self">自取</string>
<string name="takeaway">外送</string>
<string name="order_number">單號:</string>
<string name="create_order_time">下單時間:</string>
<string name="remark">備註:</string>
<string name="h5_order">H5訂單</string>
<string name="ricepon_order">ricepon訂單</string>
<string name="left_parenthesis"></string>
<string name="right_parenthesis"></string>
<string name="delivery_type">配送類型:</string>
<string name="delivery_expenses">配送費範圍:</string>
<string name="delivery_fee">最低消費:</string>
<string name="delivery_method">配送方式:</string>
<string name="delivery_difference">補差價:</string>
</resources> </resources>
...@@ -14,10 +14,10 @@ ...@@ -14,10 +14,10 @@
<item name="android:backgroundDimEnabled">true</item><!--背景遮罩效果--> <item name="android:backgroundDimEnabled">true</item><!--背景遮罩效果-->
</style> </style>
<!-- <style name="AppTheme" parent="PublicTheme">--> <!-- <style name="AppTheme" parent="PublicTheme">-->
<!-- <item name="QMUITopBarStyle">@style/QDTopBar</item>--> <!-- <item name="QMUITopBarStyle">@style/QDTopBar</item>-->
<!-- <item name="QMUITabSegmentStyle">@style/QMUITabSegmentStyle</item>--> <!-- <item name="QMUITabSegmentStyle">@style/QMUITabSegmentStyle</item>-->
<!-- </style>--> <!-- </style>-->
<style name="PublicTheme" parent="QMUI.Compat.NoActionBar"> <style name="PublicTheme" parent="QMUI.Compat.NoActionBar">
<!-- 必須配置app自己的theme --> <!-- 必須配置app自己的theme -->
...@@ -268,7 +268,7 @@ ...@@ -268,7 +268,7 @@
<!--固体蓝RoundButton --> <!--固体蓝RoundButton -->
<style name="RoundButton.One"> <style name="RoundButton.One">
<item name="android:layout_height">30dp</item> <item name="android:layout_height">@dimen/dp_30</item>
<item name="android:textColor">@color/theme_white_color</item> <item name="android:textColor">@color/theme_white_color</item>
<item name="btnSolidColor">@color/theme_color</item> <item name="btnSolidColor">@color/theme_color</item>
<item name="btnCornerRadius">@dimen/normal_space5</item> <item name="btnCornerRadius">@dimen/normal_space5</item>
...@@ -303,34 +303,110 @@ ...@@ -303,34 +303,110 @@
<item name="android:textColor">@color/theme_hint_color</item> <item name="android:textColor">@color/theme_hint_color</item>
</style> </style>
<!-- <style name="MySwitcher">--> <!-- <style name="MySwitcher">-->
<!-- <item name="switcherBtn_width">@dimen/dp_46</item>--> <!-- <item name="switcherBtn_width">@dimen/dp_46</item>-->
<!-- <item name="switcherBtn_height">@dimen/dp_26</item>--> <!-- <item name="switcherBtn_height">@dimen/dp_26</item>-->
<!-- <item name="switcherBtn_on_color">@color/switcher_on_color</item>--> <!-- <item name="switcherBtn_on_color">@color/switcher_on_color</item>-->
<!-- <item name="switcherBtn_off_color">@color/switcher_off_color</item>--> <!-- <item name="switcherBtn_off_color">@color/switcher_off_color</item>-->
<!-- <item name="switcherBtn_icon_color">@color/switcher_icon_color</item>--> <!-- <item name="switcherBtn_icon_color">@color/switcher_icon_color</item>-->
<!-- <item name="elevation">@dimen/switcher_elevation</item>--> <!-- <item name="elevation">@dimen/switcher_elevation</item>-->
<!-- </style>--> <!-- </style>-->
<style name="font_style_twelve"> <style name="font_style_twelve">
<item name="android:textColor">@color/theme_333_color</item> <item name="android:textColor">@color/theme_333_color</item>
<item name="android:textSize">@dimen/dp_12</item> <item name="android:textSize">@dimen/dp_12</item>
</style> </style>
<style name="font_style_fourteen"> <style name="font_style_fourteen">
<item name="android:textColor">@color/theme_333_color</item> <item name="android:textColor">@color/theme_333_color</item>
<item name="android:textSize">@dimen/dp_14</item> <item name="android:textSize">@dimen/dp_14</item>
</style> </style>
<style name="font_style_sixteen"> <style name="font_style_sixteen">
<item name="android:textColor">@color/theme_333_color</item> <item name="android:textColor">@color/theme_333_color</item>
<item name="android:textSize">@dimen/dp_16</item> <item name="android:textSize">@dimen/dp_16</item>
</style> </style>
<style name="font_style_eighteen"> <style name="font_style_eighteen">
<item name="android:textColor">@color/theme_333_color</item> <item name="android:textColor">@color/theme_333_color</item>
<item name="android:textSize">@dimen/dp_18</item> <item name="android:textSize">@dimen/dp_18</item>
</style> </style>
<style name="font_style_twenty"> <style name="font_style_twenty">
<item name="android:textColor">@color/theme_333_color</item> <item name="android:textColor">@color/theme_333_color</item>
<item name="android:textSize">@dimen/dp_20</item> <item name="android:textSize">@dimen/dp_20</item>
</style> </style>
<style name="app_btn_style">
<item name="android:textSize">@dimen/dp_14</item>
<item name="android:textColor">@color/white</item>
<item name="android:layout_height">@dimen/button_height</item>
<item name="android:background">@drawable/shape_app_btn</item>
</style>
<!--————————————————————外送/自取模塊 凍鏈模塊共用樣式————————————————————-->
<!-- 彈窗_收貨標題字體樣式-->
<style name="otherOrderReceiving_title_textStyle">
<item name="android:textColor">@color/color_50</item>
<item name="android:textSize">@dimen/dp_16</item>
</style>
<!-- 彈窗_收貨標題信息字體樣式-->
<style name="otherOrderReceiving_information_textStyle">
<item name="android:textColor">@color/black</item>
<item name="android:textSize">@dimen/dp_16</item>
<item name="android:textStyle">bold</item>
</style>
<!-- 彈窗_金額標題字體樣式-->
<style name="otherOrder_bill_textStyle">
<item name="android:textColor">@color/color_3c</item>
<item name="android:textSize">@dimen/dp_16</item>
</style>
<style name="otherOrder_bill_info_textStyle">
<item name="android:textColor">@color/color_3c</item>
<item name="android:textSize">@dimen/dp_16</item>
<item name="android:textStyle">bold</item>
</style>
<!-- 訂單列表item的訂單信息名稱字體樣式-->
<style name="otherOrder_item_info_title_textStyle">
<item name="android:textColor">@color/theme_text_color</item>
<item name="android:textSize">@dimen/dp_12</item>
</style>
<!-- 訂單列表item的訂單信息字體樣式-->
<style name="otherOrder_item_info_textStyle">
<item name="android:textColor">@color/color_86</item>
<item name="android:textSize">@dimen/dp_12</item>
</style>
<!-- 訂單列表item的下單時間字體樣式-->
<style name="otherOrder_item_create_time_textStyle">
<item name="android:textColor">@color/color_66</item>
<item name="android:textSize">@dimen/dp_12</item>
</style>
<!-- 餐廳營業狀態按鈕樣式-->
<style name="otherOrder_restaurant_state_style">
<item name="android:layout_width">@dimen/dp_80</item>
<item name="android:layout_height">@dimen/dp_28</item>
<item name="android:gravity">center_vertical</item>
<item name="android:paddingLeft">@dimen/dp_8</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/dp_14</item>
</style>
<style name="otherOrder_delivery_setting_layout_style">
<item name="android:paddingRight">@dimen/dp_20</item>
</style>
<style name="otherOrder_details_sixteen_text_Style">
<item name="android:textSize">@dimen/dp_16</item>
<item name="android:textColor">@color/theme_333_color</item>
<item name="android:textStyle">bold</item>
</style>
<style name="otherOrder_details_twelve_text_Style">
<item name="android:textSize">@dimen/dp_12</item>
<item name="android:textColor">@color/color_3c</item>
</style>
</resources> </resources>
...@@ -37,6 +37,7 @@ dependencies { ...@@ -37,6 +37,7 @@ dependencies {
annotationProcessor rootProject.ext.dependencies["butterknife-compiler"] annotationProcessor rootProject.ext.dependencies["butterknife-compiler"]
// annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]//依赖插件 // annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]//依赖插件
implementation rootProject.ext.dependencies["multidex"] implementation rootProject.ext.dependencies["multidex"]
annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]
implementation rootProject.ext.dependencies["constraintlayout"] implementation rootProject.ext.dependencies["constraintlayout"]
implementation 'org.jetbrains:annotations:15.0' implementation 'org.jetbrains:annotations:15.0'
//日誌管理 //日誌管理
......
apply from: rootProject.file("cc-settings.gradle")
apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// 避免 lint 检测出错时停止构建
lintOptions {
abortOnError false
}
defaultConfig {
if (project.ext.runAsApp) {
applicationId "com.gingersoft.coldchain_module"
}
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
dataBinding {
enabled = true
}
resourcePrefix "coldChain"
buildTypes {
debug {
buildConfigField "boolean", "LOG_DEBUG", "true"
buildConfigField "boolean", "USE_CANARY", "true"
minifyEnabled false
proguardFiles 'proguard.cfg'
}
release {
buildConfigField "boolean", "LOG_DEBUG", "false"
buildConfigField "boolean", "USE_CANARY", "false"
minifyEnabled false
zipAlignEnabled false
proguardFiles 'proguard.cfg'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
kapt rootProject.ext.dependencies["dagger2-compiler"]
kapt rootProject.ext.dependencies["butterknife-compiler"]
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.coldchain_module">
<application>
<activity android:name=".mvp.ui.activity.OrderDetailsActivity"/>
<activity android:name=".mvp.ui.activity.SupplementOrderActivity" />
<activity android:name=".mvp.ui.activity.ColdChainMainActivity"/>
<activity android:name=".mvp.ui.activity.HistoryActivity"/>
<!-- arms配置 -->
<meta-data
android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
</application>
</manifest>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.coldchain_module">
<!-- 8.0必要权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 8.0必要权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<application
android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication"
android:allowBackup="true"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_android">
<activity android:name=".mvp.ui.activity.HistoryActivity"/>
<activity android:name=".mvp.ui.activity.OrderDetailsActivity" />
<activity android:name=".mvp.ui.activity.SupplementOrderActivity" />
<activity android:name=".mvp.ui.activity.ColdChainMainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
\ No newline at end of file
package com.gingersoft.coldchain_module;
import com.billy.cc.core.component.CC;
import com.jess.arms.base.BaseApplication;
/**
* Created by Wyh on 2020/1/7.
*/
public class MyApp extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
CC.enableVerboseLog(true);
CC.enableDebug(true);
CC.enableRemoteCC(true);
}
}
<resources>
<string name="app_name">凍鏈</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="user_register_AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimary</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
\ No newline at end of file
package com.gingersoft.coldchain_module;
import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent;
import com.gingersoft.coldchain_module.mvp.ui.activity.ColdChainMainActivity;
public class ComponentColdChain implements IComponent {
@Override
public String getName() {
//组件的名称,调用此组件的方式:
// CC.obtainBuilder("ComponentA")...build().callAsync()
return "Component.ColdChain";
}
/**
* 组件被调用时的入口
* 要确保每个逻辑分支都会调用到CC.sendCCResult,
* 包括try-catch,if-else,switch-case-default,startActivity
*
* @param cc 组件调用对象,可从此对象中获取相关信息
* @return true:将异步调用CC.sendCCResult(...),用于异步实现相关功能,例如:文件加载、网络请求等
* false:会同步调用CC.sendCCResult(...),即在onCall方法return之前调用,否则将被视为不合法的实现
*/
@Override
public boolean onCall(CC cc) {
String actionName = cc.getActionName();
switch (actionName) {
case "Component.ColdChain":
openActivity(cc);
break;
default:
//这个逻辑分支上没有调用CC.sendCCResult(...),是一种错误的示例
//并且方法的返回值为false,代表不会异步调用CC.sendCCResult(...)
//在LocalCCInterceptor中将会返回错误码为-10的CCResult
break;
}
return false;
}
private void getInfo(CC cc) {
String userName = "billy";
CC.sendCCResult(cc.getCallId(), CCResult.success("userName", userName));
}
private void openActivity(CC cc) {
CCUtil.navigateTo(cc, ColdChainMainActivity.class);
CC.sendCCResult(cc.getCallId(), CCResult.success());
}
}
package com.gingersoft.coldchain_module.di.component;
import com.gingersoft.coldchain_module.di.module.ColdChainMainModule;
import com.gingersoft.coldchain_module.mvp.ui.activity.ColdChainMainActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Component;
@ActivityScope
@Component(modules = ColdChainMainModule.class, dependencies = AppComponent.class)
public interface ColdChainMainComponent {
void inject(ColdChainMainActivity activity);
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.component;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.coldchain_module.di.module.HistoryModule;
import com.jess.arms.di.scope.ActivityScope;
import com.gingersoft.coldchain_module.mvp.ui.activity.HistoryActivity;
@ActivityScope
@Component(modules = HistoryModule.class, dependencies = AppComponent.class)
public interface HistoryComponent {
void inject(HistoryActivity activity);
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.component;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.coldchain_module.di.module.HistoryOrderModule;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.coldchain_module.mvp.ui.fragment.HistoryOrderFragment;
@FragmentScope
@Component(modules = HistoryOrderModule.class, dependencies = AppComponent.class)
public interface HistoryOrderComponent {
void inject(HistoryOrderFragment fragment);
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.component;
import com.gingersoft.coldchain_module.di.module.OrderDetailsModule;
import com.gingersoft.coldchain_module.mvp.ui.activity.OrderDetailsActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Component;
@ActivityScope
@Component(modules = OrderDetailsModule.class, dependencies = AppComponent.class)
public interface OrderDetailsComponent {
void inject(OrderDetailsActivity activity);
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.component;
import com.gingersoft.coldchain_module.di.module.OrderListModule;
import com.gingersoft.coldchain_module.mvp.ui.fragment.OrderListFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Component;
@FragmentScope
@Component(modules = OrderListModule.class, dependencies = AppComponent.class)
public interface OrderListComponent {
void inject(OrderListFragment fragment);
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.component;
import com.gingersoft.coldchain_module.di.module.SupplementOrderModule;
import com.gingersoft.coldchain_module.mvp.ui.activity.SupplementOrderActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Component;
@ActivityScope
@Component(modules = SupplementOrderModule.class, dependencies = AppComponent.class)
public interface SupplementOrderComponent {
void inject(SupplementOrderActivity activity);
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.module;
import com.gingersoft.coldchain_module.mvp.contract.ColdChainMainContract;
import com.gingersoft.coldchain_module.mvp.model.ColdChainMainModel;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Module;
import dagger.Provides;
@Module
public class ColdChainMainModule {
private ColdChainMainContract.View view;
/**
* 构建MainModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public ColdChainMainModule(ColdChainMainContract.View view) {
this.view = view;
}
@ActivityScope
@Provides
ColdChainMainContract.View provideMainView() {
return this.view;
}
@ActivityScope
@Provides
ColdChainMainContract.Model provideMainModel(ColdChainMainModel model) {
return model;
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.module;
import com.gingersoft.coldchain_module.mvp.contract.HistoryContract;
import com.gingersoft.coldchain_module.mvp.model.HistoryModel;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Module;
import dagger.Provides;
@Module
public class HistoryModule {
private HistoryContract.View view;
/**
* 构建HistoryModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public HistoryModule(HistoryContract.View view) {
this.view = view;
}
@ActivityScope
@Provides
HistoryContract.View provideHistoryView() {
return this.view;
}
@ActivityScope
@Provides
HistoryContract.Model provideHistoryModel(HistoryModel model) {
return model;
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.coldchain_module.mvp.contract.HistoryOrderContract;
import com.gingersoft.coldchain_module.mvp.model.HistoryOrderModel;
@Module
public class HistoryOrderModule {
private HistoryOrderContract.View view;
/**
* 构建HistoryOrderModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public HistoryOrderModule(HistoryOrderContract.View view) {
this.view = view;
}
@FragmentScope
@Provides
HistoryOrderContract.View provideHistoryOrderView() {
return this.view;
}
@FragmentScope
@Provides
HistoryOrderContract.Model provideHistoryOrderModel(HistoryOrderModel model) {
return model;
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.module;
import com.gingersoft.coldchain_module.mvp.contract.OrderDetailsContract;
import com.gingersoft.coldchain_module.mvp.model.OrderDetailsModel;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Module;
import dagger.Provides;
@Module
public class OrderDetailsModule {
private OrderDetailsContract.View view;
/**
* 构建OrderDetailsModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public OrderDetailsModule(OrderDetailsContract.View view) {
this.view = view;
}
@ActivityScope
@Provides
OrderDetailsContract.View provideOrderDetailsView() {
return this.view;
}
@ActivityScope
@Provides
OrderDetailsContract.Model provideOrderDetailsModel(OrderDetailsModel model) {
return model;
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.module;
import com.gingersoft.coldchain_module.mvp.contract.OrderListContract;
import com.gingersoft.coldchain_module.mvp.model.OrderListModel;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Module;
import dagger.Provides;
@Module
public class OrderListModule {
private OrderListContract.View view;
/**
* 构建OrderListModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public OrderListModule(OrderListContract.View view) {
this.view = view;
}
@FragmentScope
@Provides
OrderListContract.View provideOrderListView() {
return this.view;
}
@FragmentScope
@Provides
OrderListContract.Model provideOrderListModel(OrderListModel model) {
return model;
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.di.module;
import com.gingersoft.coldchain_module.mvp.contract.SupplementOrderContract;
import com.gingersoft.coldchain_module.mvp.model.SupplementOrderModel;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Module;
import dagger.Provides;
@Module
public class SupplementOrderModule {
private SupplementOrderContract.View view;
/**
* 构建SupplementOrderModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public SupplementOrderModule(SupplementOrderContract.View view) {
this.view = view;
}
@ActivityScope
@Provides
SupplementOrderContract.View provideSupplementOrderView() {
return this.view;
}
@ActivityScope
@Provides
SupplementOrderContract.Model provideSupplementOrderModel(SupplementOrderModel model) {
return model;
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.mvp.constans;
public class ColdChainConstans {
public static final int orderType = 8;
//訂單狀態:已確認
public static final int ORDER_CONFIRMED = 2;
//本地定義常量
//物流已取消
public static final int LOGISTICS_CANCELLED = -2;
//訂單已取消
public static final int ORDER_CANCELLED = -3;
//訂單已讀
public static final int ORDER_READ = -4;
}
package com.gingersoft.coldchain_module.mvp.contract;
import com.gingersoft.coldchain_module.mvp.model.bean.BalanceBean;
import com.gingersoft.coldchain_module.mvp.model.bean.OrderList;
import com.gingersoft.coldchain_module.mvp.model.bean.PickUpBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import io.reactivex.Observable;
import okhttp3.RequestBody;
public interface ColdChainMainContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadNumber(SupplementInfoBean bean);
void loadBalance(double price, double bond,boolean isBlink);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存getOrderList(@Body RequestBody requestBody);
interface Model extends IModel {
Observable<OrderList> getOrderList(RequestBody requestBody);
Observable<SupplementInfoBean> getNumByOrderType(RequestBody requestBody);
Observable<PickUpBean> pickUp(RequestBody requestBody);
Observable<BalanceBean> getBalance(String brandId);
}
}
package com.gingersoft.coldchain_module.mvp.contract;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import io.reactivex.Observable;
import okhttp3.RequestBody;
public interface HistoryContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadData();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<String> getHistoryOrderList(RequestBody requestBody);
}
}
package com.gingersoft.coldchain_module.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import io.reactivex.Observable;
import okhttp3.RequestBody;
public interface HistoryOrderContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<String> getHistoryOrderList(RequestBody requestBody);
}
}
package com.gingersoft.coldchain_module.mvp.contract;
import com.gingersoft.coldchain_module.mvp.model.bean.CancelLogisticsBean;
import com.gingersoft.coldchain_module.mvp.model.bean.ReadBean;
import com.gingersoft.coldchain_module.mvp.model.bean.ShipAnyOrdersNewBean;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateOrderStatusBean;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import java.io.File;
import io.reactivex.Observable;
import okhttp3.RequestBody;
public interface OrderDetailsContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadOrderDetails(OrderDetails.DataBean bean);
void printLogisticsList(File file);
void updateOrderState(int state);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<OrderDetails> findOrderDetails(RequestBody requestBody);
Observable<ShipAnyOrdersNewBean> thirdDelivery(RequestBody requestBody);
Observable<UpdateOrderStatusBean> updateOrderStatus(RequestBody requestBody);
Observable<CancelLogisticsBean> cancelLogistics(RequestBody requestBody);
Observable<ReadBean> setIsRead(RequestBody requestBody);
Observable<String> addPrj(RequestBody requestBody);
}
}
package com.gingersoft.coldchain_module.mvp.contract;
import com.gingersoft.coldchain_module.mvp.model.bean.OrderList;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import java.util.List;
import io.reactivex.Observable;
import okhttp3.RequestBody;
public interface OrderListContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadOrderList(List<OrderList.DataBeanX.DataBean> data);
void notifyByPosition(int position, OrderList.DataBeanX.DataBean dataBean);
void removeItem(int position);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<OrderList> getOrderList(RequestBody requestBody);
}
}
package com.gingersoft.coldchain_module.mvp.contract;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementResultBean;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import io.reactivex.Observable;
import okhttp3.RequestBody;
public interface SupplementOrderContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadNumber(SupplementInfoBean bean);
void submissionComplete();
void submissionFail();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<SupplementInfoBean> getNumByOrderType(RequestBody requestBody);
Observable<SupplementResultBean> submitOrder(RequestBody requestBody);
}
}
package com.gingersoft.coldchain_module.mvp.model;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.contract.ColdChainMainContract;
import com.gingersoft.coldchain_module.mvp.model.bean.BalanceBean;
import com.gingersoft.coldchain_module.mvp.model.bean.OrderList;
import com.gingersoft.coldchain_module.mvp.model.bean.PickUpBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.gingersoft.coldchain_module.mvp.model.service.ColdChainService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@ActivityScope
public class ColdChainMainModel extends BaseModel implements ColdChainMainContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public ColdChainMainModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<OrderList> getOrderList(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(ColdChainService.class).getOrderList(requestBody);
}
@Override
public Observable<SupplementInfoBean> getNumByOrderType(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(ColdChainService.class).getNumByOrderType(requestBody);
}
@Override
public Observable<PickUpBean> pickUp(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(ColdChainService.class).pickUp(requestBody);
}
@Override
public Observable<BalanceBean> getBalance(String brandId) {
return mRepositoryManager.obtainRetrofitService(ColdChainService.class).getBalance(brandId);
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.mvp.model;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.contract.HistoryContract;
import com.gingersoft.coldchain_module.mvp.model.service.ColdChainService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@ActivityScope
public class HistoryModel extends BaseModel implements HistoryContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public HistoryModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<String> getHistoryOrderList(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(ColdChainService.class).getHistoryOrderList(requestBody);
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.mvp.model;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.contract.HistoryOrderContract;
import com.gingersoft.coldchain_module.mvp.model.service.ColdChainService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@FragmentScope
public class HistoryOrderModel extends BaseModel implements HistoryOrderContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public HistoryOrderModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<String> getHistoryOrderList(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(ColdChainService.class).getHistoryOrderList(requestBody);
}
}
package com.gingersoft.coldchain_module.mvp.model;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.contract.OrderDetailsContract;
import com.gingersoft.coldchain_module.mvp.model.bean.CancelLogisticsBean;
import com.gingersoft.coldchain_module.mvp.model.bean.ReadBean;
import com.gingersoft.coldchain_module.mvp.model.bean.ShipAnyOrdersNewBean;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateOrderStatusBean;
import com.gingersoft.coldchain_module.mvp.model.service.OrderDetailService;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@ActivityScope
public class OrderDetailsModel extends BaseModel implements OrderDetailsContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public OrderDetailsModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<OrderDetails> findOrderDetails(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderDetailService.class).findOrderDetails(requestBody);
}
@Override
public Observable<ShipAnyOrdersNewBean> thirdDelivery(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderDetailService.class).thirdDelivery(requestBody);
}
@Override
public Observable<UpdateOrderStatusBean> updateOrderStatus(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderDetailService.class).gsUpdateOrderStatus(requestBody);
}
@Override
public Observable<CancelLogisticsBean> cancelLogistics(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderDetailService.class).cancelLogistics(requestBody);
}
@Override
public Observable<ReadBean> setIsRead(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderDetailService.class).setIsRead(requestBody);
}
@Override
public Observable<String> addPrj(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderDetailService.class).addPrj(requestBody);
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.mvp.model;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.model.bean.OrderList;
import com.gingersoft.coldchain_module.mvp.model.service.ColdChainService;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject;
import com.gingersoft.coldchain_module.mvp.contract.OrderListContract;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@FragmentScope
public class OrderListModel extends BaseModel implements OrderListContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public OrderListModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<OrderList> getOrderList(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(ColdChainService.class).getOrderList(requestBody);
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.mvp.model;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.contract.SupplementOrderContract;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementResultBean;
import com.gingersoft.coldchain_module.mvp.model.service.ColdChainService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@ActivityScope
public class SupplementOrderModel extends BaseModel implements SupplementOrderContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public SupplementOrderModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<SupplementInfoBean> getNumByOrderType(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(ColdChainService.class).getNumByOrderType(requestBody);
}
@Override
public Observable<SupplementResultBean> submitOrder(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(ColdChainService.class).submitOrder(requestBody);
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.mvp.model.bean;
public class BalanceBean {
/**
* id : 72
* brandId : 171
* balance : 818.0
* bond : 500.0
* threshold : 0.0
* telephone :
* updateTime : 1598426640164
* createTime : 1598426640164
* updateUid : 341
* createUid : 341
* deletes : 0
*/
private int id;
private int brandId;
private double balance;
private double bond;
private double threshold;
private String telephone;
private long updateTime;
private long createTime;
private int updateUid;
private int createUid;
private int deletes;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getBrandId() {
return brandId;
}
public void setBrandId(int brandId) {
this.brandId = brandId;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getBond() {
return bond;
}
public void setBond(double bond) {
this.bond = bond;
}
public double getThreshold() {
return threshold;
}
public void setThreshold(double threshold) {
this.threshold = threshold;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(long updateTime) {
this.updateTime = updateTime;
}
public long getCreateTime() {
return createTime;
}
public void setCreateTime(long createTime) {
this.createTime = createTime;
}
public int getUpdateUid() {
return updateUid;
}
public void setUpdateUid(int updateUid) {
this.updateUid = updateUid;
}
public int getCreateUid() {
return createUid;
}
public void setCreateUid(int createUid) {
this.createUid = createUid;
}
public int getDeletes() {
return deletes;
}
public void setDeletes(int deletes) {
this.deletes = deletes;
}
}
package com.gingersoft.coldchain_module.mvp.model.bean;
public class CancelLogisticsBean {
private boolean success;
private String errCode;
private String errMsg;
private long sysTime;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public long getSysTime() {
return sysTime;
}
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
}
package com.gingersoft.coldchain_module.mvp.model.bean;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails;
public class FoodDetailsTranBean {
private String odsId;
private String PRICE;
private String num;
private String pid;
private String PRODUCT_NAME;
public FoodDetailsTranBean(String odsId, String PRICE, String num, String pid, String PRODUCT_NAME) {
this.odsId = odsId;
this.PRICE = PRICE;
this.num = num;
this.pid = pid;
this.PRODUCT_NAME = PRODUCT_NAME;
}
public static FoodDetailsTranBean getByPRODUCTNAMEBean(OrderDetails.DataBean.PRODUCTNAMEBean bean) {
return new FoodDetailsTranBean(bean.getOdsId(), bean.getPRICE(), bean.getNum(), bean.getPid(), bean.getPRODUCT_NAME());
}
public static FoodDetailsTranBean getByChildBeanX(OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX bean) {
return new FoodDetailsTranBean(bean.getOdsId(), bean.getPRICE(), bean.getNum(), bean.getPid(), bean.getPRODUCT_NAME());
}
public static FoodDetailsTranBean getByChildBean(OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean bean) {
return new FoodDetailsTranBean(bean.getOdsId(), bean.getPRICE(), bean.getNum(), bean.getPid(), bean.getPRODUCT_NAME());
}
public String getOdsId() {
return odsId;
}
public void setOdsId(String odsId) {
this.odsId = odsId;
}
public String getPRICE() {
return PRICE;
}
public void setPRICE(String PRICE) {
this.PRICE = PRICE;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPRODUCT_NAME() {
return PRODUCT_NAME;
}
public void setPRODUCT_NAME(String PRODUCT_NAME) {
this.PRODUCT_NAME = PRODUCT_NAME;
}
}
package com.gingersoft.coldchain_module.mvp.model.bean;
public class PickUpBean {
private boolean success;
private String errCode;
private String errorMsg;
private long sysTime;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public long getSysTime() {
return sysTime;
}
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
package com.gingersoft.coldchain_module.mvp.model.bean;
public class ReadBean {
private boolean success;
private long sysTime;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public long getSysTime() {
return sysTime;
}
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
}
package com.gingersoft.coldchain_module.mvp.model.bean;
public class ShipAnyOrdersNewBean {
/**
* success : true
* sysTime : 1598498310257
* data : {"uid":"db0a39a9-9a0b-4c60-8a0c-6135b0a46aa7","ctime":1598469507642,"lUpd":1598469507642,"mchUid":"325764d7-b2e2-4d8b-9a68-7f4473719f9c","mchShipanyCommn":0,"curStat":"Pickup Request Sent","createTime":1598498310200,"restaurantId":153,"orderId":11121726,"isDelete":0,"updateTime":1598498310200,"delivery_man_name":"","delivery_man_phone_num":"","takeFoodCode":"0964","lab_url":""}
*/
private boolean success;
private long sysTime;
private DataBean data;
/**
* errCode : -1
* errMsg : 賬戶餘額不足
*/
private String errCode;
private String errMsg;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public long getSysTime() {
return sysTime;
}
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public static class DataBean {
/**
* uid : db0a39a9-9a0b-4c60-8a0c-6135b0a46aa7
* ctime : 1598469507642
* lUpd : 1598469507642
* mchUid : 325764d7-b2e2-4d8b-9a68-7f4473719f9c
* mchShipanyCommn : 0.0
* curStat : Pickup Request Sent
* createTime : 1598498310200
* restaurantId : 153
* orderId : 11121726
* isDelete : 0
* updateTime : 1598498310200
* delivery_man_name :
* delivery_man_phone_num :
* takeFoodCode : 0964
* lab_url :
*/
private String uid;
private long ctime;
private long lUpd;
private String mchUid;
private double mchShipanyCommn;
private String curStat;
private long createTime;
private int restaurantId;
private int orderId;
private int isDelete;
private long updateTime;
private String delivery_man_name;
private String delivery_man_phone_num;
private String takeFoodCode;
private String lab_url;//打印文檔下載鏈接
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public long getCtime() {
return ctime;
}
public void setCtime(long ctime) {
this.ctime = ctime;
}
public long getLUpd() {
return lUpd;
}
public void setLUpd(long lUpd) {
this.lUpd = lUpd;
}
public String getMchUid() {
return mchUid;
}
public void setMchUid(String mchUid) {
this.mchUid = mchUid;
}
public double getMchShipanyCommn() {
return mchShipanyCommn;
}
public void setMchShipanyCommn(double mchShipanyCommn) {
this.mchShipanyCommn = mchShipanyCommn;
}
public String getCurStat() {
return curStat;
}
public void setCurStat(String curStat) {
this.curStat = curStat;
}
public long getCreateTime() {
return createTime;
}
public void setCreateTime(long createTime) {
this.createTime = createTime;
}
public int getRestaurantId() {
return restaurantId;
}
public void setRestaurantId(int restaurantId) {
this.restaurantId = restaurantId;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public int getIsDelete() {
return isDelete;
}
public void setIsDelete(int isDelete) {
this.isDelete = isDelete;
}
public long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(long updateTime) {
this.updateTime = updateTime;
}
public String getDelivery_man_name() {
return delivery_man_name;
}
public void setDelivery_man_name(String delivery_man_name) {
this.delivery_man_name = delivery_man_name;
}
public String getDelivery_man_phone_num() {
return delivery_man_phone_num;
}
public void setDelivery_man_phone_num(String delivery_man_phone_num) {
this.delivery_man_phone_num = delivery_man_phone_num;
}
public String getTakeFoodCode() {
return takeFoodCode;
}
public void setTakeFoodCode(String takeFoodCode) {
this.takeFoodCode = takeFoodCode;
}
public String getLab_url() {
return lab_url;
}
public void setLab_url(String lab_url) {
this.lab_url = lab_url;
}
}
}
package com.gingersoft.coldchain_module.mvp.model.bean;
/**
* Created by Administrator on 2019/3/26 0026.
*/
public class SumbitTakeawayResult {
/**
* orderNo : 2192531346128147
* code : 1
* orderId : 9512
* errorMsg : 成功
*/
private String orderNo;
private String code;
private int orderId;
private String errorMsg;
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
package com.gingersoft.coldchain_module.mvp.model.bean;
import java.util.List;
public class SupplementInfoBean {
/**
* success : true
* sysTime : 1598436389621
* data : {"replenishmentPhone":"13825748822","replenishmentPerson":"德華","pickUpPrompt":"補單提示","replenishmentAddress":"222222","orderVOS":[{"orderType":7,"orderNum":35}],"coldChainPickUpNum":15}
*/
private boolean success;
private long sysTime;
private DataBean data;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public long getSysTime() {
return sysTime;
}
public void setSysTime(long sysTime) {
this.sysTime = sysTime;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
/**
* replenishmentPhone : 13825748822
* replenishmentPerson : 德華
* pickUpPrompt : 補單提示
* replenishmentAddress : 222222
* orderVOS : [{"orderType":7,"orderNum":35}]
* coldChainPickUpNum : 15
*/
private String replenishmentPhone;
private String replenishmentPerson;
private String pickUpPrompt;
private String replenishmentAddress;
private int coldChainPickUpNum;
private List<OrderVOSBean> orderVOS;
public String getReplenishmentPhone() {
return replenishmentPhone;
}
public void setReplenishmentPhone(String replenishmentPhone) {
this.replenishmentPhone = replenishmentPhone;
}
public String getReplenishmentPerson() {
return replenishmentPerson;
}
public void setReplenishmentPerson(String replenishmentPerson) {
this.replenishmentPerson = replenishmentPerson;
}
public String getPickUpPrompt() {
return pickUpPrompt;
}
public void setPickUpPrompt(String pickUpPrompt) {
this.pickUpPrompt = pickUpPrompt;
}
public String getReplenishmentAddress() {
return replenishmentAddress;
}
public void setReplenishmentAddress(String replenishmentAddress) {
this.replenishmentAddress = replenishmentAddress;
}
public int getColdChainPickUpNum() {
return coldChainPickUpNum;
}
public void setColdChainPickUpNum(int coldChainPickUpNum) {
this.coldChainPickUpNum = coldChainPickUpNum;
}
public List<OrderVOSBean> getOrderVOS() {
return orderVOS;
}
public void setOrderVOS(List<OrderVOSBean> orderVOS) {
this.orderVOS = orderVOS;
}
public static class OrderVOSBean {
/**
* orderType : 7
* orderNum : 35
*/
private int orderType;
private int orderNum;
public int getOrderType() {
return orderType;
}
public void setOrderType(int orderType) {
this.orderType = orderType;
}
public int getOrderNum() {
return orderNum;
}
public void setOrderNum(int orderNum) {
this.orderNum = orderNum;
}
}
}
}
package com.gingersoft.coldchain_module.mvp.model.bean;
/**
* 補單結果
*/
public class SupplementResultBean {
private String code;
private String errorMsg;
private String orderNo;
private long orderId;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public long getOrderId() {
return orderId;
}
public void setOrderId(long orderId) {
this.orderId = orderId;
}
}
package com.gingersoft.coldchain_module.mvp.model.bean
class ThirdItem : ArrayList<ThirdItem.ThirdItemItem>() {
data class ThirdItemItem(val descr: String = "",
val dim: Dim = Dim(),
val name: String,
val ori: String = "",
val qty: Int,
val sku: String = "",
val stg: String = "Normal",
val typ: String = "",
val unt_price: UntPrice,
val wt: Wt = Wt()) {
constructor(product_name: String, hkd: UntPrice)
: this("", Dim(), product_name, "", 1, "", "", "", hkd, Wt())
data class Dim(
val hgt: Int = 1,
val len: Int = 1,
val unt: String = "cm", //尺寸單位
val wid: Int = 1
)
data class UntPrice(
val ccy: String = "HKD",//金額單位
val `val`: Double
)
data class Wt(
val unt: String = "kg", //重量單位
val `val`: Int = 1
)
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.mvp.model.bean;
public class UpdateOrderStatusBean {
private String code;
private String errorMsg;
private String data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
package com.gingersoft.coldchain_module.mvp.model.service;
import com.gingersoft.coldchain_module.mvp.model.bean.BalanceBean;
import com.gingersoft.coldchain_module.mvp.model.bean.OrderList;
import com.gingersoft.coldchain_module.mvp.model.bean.PickUpBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementResultBean;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface ColdChainService {
@Headers({"Domain-Name: ricepon_wechat"})
@POST("wechat/findOrderList" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<OrderList> getOrderList(@Body RequestBody requestBody);
@Headers({"Domain-Name: ricepon_order"})
@POST("orderStatus/getNumByOrderType" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<SupplementInfoBean> getNumByOrderType(@Body RequestBody requestBody);
@Headers({"Domain-Name: update_version"})
@POST("order/addOrder2" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<SupplementResultBean> submitOrder(@Body RequestBody requestBody);
@Headers({"Domain-Name: ricepon_gsa"})
@POST("coldChain/pickUpShipany" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<PickUpBean> pickUp(@Body RequestBody requestBody);
@Headers({"Domain-Name: ricepon_wechat"})
@POST("wechat/findHistoryOrderList" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<String> getHistoryOrderList(@Body RequestBody requestBody);
@Headers({"Domain-Name: ricepon_activities"})
@GET("feign/balance/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BalanceBean> getBalance(@Query("brandId") String brandId);
}
package com.gingersoft.coldchain_module.mvp.model.service;
import com.gingersoft.coldchain_module.mvp.model.bean.CancelLogisticsBean;
import com.gingersoft.coldchain_module.mvp.model.bean.ReadBean;
import com.gingersoft.coldchain_module.mvp.model.bean.ShipAnyOrdersNewBean;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateOrderStatusBean;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails;
import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Headers;
import retrofit2.http.POST;
public interface OrderDetailService {
@Headers({"Domain-Name: ricepon_wechat"})
@POST("wechat/findOrderDetails" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<OrderDetails> findOrderDetails(@Body RequestBody requestBody);
@Headers({"Domain-Name: member-web"})
@POST("order/updateOrderInfoIsRead" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<ReadBean> setIsRead(@Body RequestBody requestBody);
@Headers({"Domain-Name: member_web_ricepon_gsa"})
@POST("gsa/shipAnyOrdersNew" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<ShipAnyOrdersNewBean> thirdDelivery(@Body RequestBody requestBody);
// @Headers({"Domain-Name: member-web"})
// @POST("order/updateOrderStatus" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
// Observable<UpdateOrderStatusBean> cancelOrder(@Body RequestBody requestBody);
@Headers({"Domain-Name: member-web"})
@POST("order/updateOrderStatus" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<UpdateOrderStatusBean> gsUpdateOrderStatus(@Body RequestBody requestBody);
@Headers({"Domain-Name: member_web_ricepon_gsa"})
@POST("gsa/cancelOrder" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<CancelLogisticsBean> cancelLogistics(@Body RequestBody requestBody);
@POST("printerRecording/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<String> addPrj(@Body RequestBody requestBody);
}
package com.gingersoft.coldchain_module.mvp.presenter;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.constans.ColdChainConstans;
import com.gingersoft.coldchain_module.mvp.contract.ColdChainMainContract;
import com.gingersoft.coldchain_module.mvp.model.bean.BalanceBean;
import com.gingersoft.coldchain_module.mvp.model.bean.PickUpBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
@ActivityScope
public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.Model, ColdChainMainContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public ColdChainMainPresenter(ColdChainMainContract.Model model, ColdChainMainContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void getNumByOrderType(int restaurantId, Method method, Object object) {
//startTime endTime
RequestBody requestBody = new FormBody.Builder()
.add("orderTypes", ColdChainConstans.orderType + "")
.add("restaurantId", restaurantId + "")
.build();
mModel.getNumByOrderType(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("獲取餐廳配置信息..."))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<SupplementInfoBean>(mErrorHandler) {
@Override
public void onNext(@NonNull SupplementInfoBean info) {
if (info != null && info.isSuccess()) {
// mRootView.loadNumber(info);
try {
method.setAccessible(true);
method.invoke(object, info);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
});
}
public void pickUp(int restaurantId) {
//startTime endTime
RequestBody requestBody = new FormBody.Builder()
.add("orderType", ColdChainConstans.orderType + "")
.add("restaurantId", restaurantId + "")
.build();
mModel.pickUp(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("提交訂單中..."))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<PickUpBean>(mErrorHandler) {
@Override
public void onNext(@NonNull PickUpBean info) {
if (info != null) {
if (TextUtil.isNotEmptyOrNullOrUndefined(info.getErrorMsg())) {
mRootView.showMessage(info.getErrorMsg());
} else {
mRootView.showMessage(info.isSuccess() ? "提交成功" : "提交失敗");
}
}
}
});
}
public void getBalance() {
mModel.getBalance(GsaCloudApplication.getBrandId(GsaCloudApplication.getAppContext()) + "")
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> {
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> {
})
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BalanceBean>(mErrorHandler) {
@Override
public void onNext(@NonNull BalanceBean info) {
if (info != null) {
mRootView.loadBalance(info.getBalance(), info.getBond(), info.getBalance() <= info.getThreshold());
}
}
});
}
}
package com.gingersoft.coldchain_module.mvp.presenter;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.contract.HistoryOrderContract;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
@FragmentScope
public class HistoryOrderPresenter extends BasePresenter<HistoryOrderContract.Model, HistoryOrderContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public HistoryOrderPresenter(HistoryOrderContract.Model model, HistoryOrderContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void getHistoryOrderList(int status, int pageIndex, int pageSize, String phone, String startDate, String endDate, String orderNo) {
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", GsaCloudApplication.getGsPosShopId(GsaCloudApplication.getAppContext())) //GsaCloudApplication.getRestaurantId(GsaCloudApplication.getAppContext()) +
.add("status", status + "")
.add("pageIndex", pageIndex + "")
.add("pageSize", pageSize + "")
.add("orderNo", orderNo)
.add("startDate", startDate)
.add("endDate", endDate)
.add("phone", phone)
.build();
mModel.getHistoryOrderList(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("獲取歷史訂單..."))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<String>(mErrorHandler) {
@Override
public void onNext(@NonNull String info) {
if (info != null) {
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
}
});
}
}
package com.gingersoft.coldchain_module.mvp.presenter;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.contract.HistoryContract;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
@ActivityScope
public class HistoryPresenter extends BasePresenter<HistoryContract.Model, HistoryContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public HistoryPresenter(HistoryContract.Model model, HistoryContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void getHistoryOrderList(int status, int pageIndex, int pageSize, String phone, String startDate, String endDate, String orderNo) {
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", GsaCloudApplication.getRestaurantId(GsaCloudApplication.getAppContext()) + "") //GsaCloudApplication.getRestaurantId(GsaCloudApplication.getAppContext()) +
.add("status", status + "")
.add("pageIndex", pageIndex + "")
.add("pageSize", pageSize + "")
.add("orderNo", orderNo)
.add("startDate", startDate)
.add("endDate", endDate)
.add("phone", phone)
.build();
mModel.getHistoryOrderList(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("獲取歷史訂單..."))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<String>(mErrorHandler) {
@Override
public void onNext(@NonNull String info) {
if (info != null) {
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
}
});
}
}
package com.gingersoft.coldchain_module.mvp.presenter;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.constans.ColdChainConstans;
import com.gingersoft.coldchain_module.mvp.contract.OrderListContract;
import com.gingersoft.coldchain_module.mvp.model.bean.OrderList;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
@FragmentScope
public class OrderListPresenter extends BasePresenter<OrderListContract.Model, OrderListContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public OrderListPresenter(OrderListContract.Model model, OrderListContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
private List<OrderList.DataBeanX.DataBean> orderList = new ArrayList<>();
public void getOrderList(int restaurantId, int page, String status, String type) {
if (page == 1) {
orderList.clear();
}
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", restaurantId + "")
.add("page", page + "")
.add("pageSize", "")
.add("status", status)
.add("type", type)
.build();
mModel.getOrderList(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<OrderList>(mErrorHandler) {
@Override
public void onNext(@NonNull OrderList info) {
if (info != null && info.isSuccess() && info.getData() != null) {
if (info.getData().getData() != null && info.getData().getData().size() > 0) {
List<OrderList.DataBeanX.DataBean> dataBeans = info.getData().getData();
dataBeans.remove(dataBeans.size() - 1);
orderList.addAll(dataBeans);
}
mRootView.loadOrderList(orderList);
} else {
mRootView.loadOrderList(null);
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.loadOrderList(null);
}
});
}
public void notifyDataByPosition(int position, int state) {
if (orderList.size() > position) {
OrderList.DataBeanX.DataBean dataBean = orderList.get(position);
if (state == ColdChainConstans.ORDER_READ) {
//已讀
dataBean.setIsRead(ColdChainConstans.ORDER_READ);
mRootView.notifyByPosition(position, dataBean);
} else if (state == ColdChainConstans.LOGISTICS_CANCELLED) {
//物流已取消
dataBean.setCurStat(9);
//物流已取消,狀態只能是待pick up,因為待確認、派送中的訂單是不能取消物流的
dataBean.setSTATUS(2);
mRootView.notifyByPosition(position, dataBean);
} else if (state == ColdChainConstans.ORDER_CANCELLED) {
//訂單已取消
mRootView.removeItem(position);
} else if (state > 0 && state <= 3) {
dataBean.setIsRead(ColdChainConstans.ORDER_READ);
dataBean.setSTATUS(state);
if(state == ColdChainConstans.ORDER_CONFIRMED){
//訂單如已確認,那麼物流狀態也是已通知物流
dataBean.setCurStat(1);
}
mRootView.notifyByPosition(position, dataBean);
}
}
}
}
package com.gingersoft.coldchain_module.mvp.presenter;
import android.app.Application;
import com.gingersoft.coldchain_module.mvp.constans.ColdChainConstans;
import com.gingersoft.coldchain_module.mvp.contract.SupplementOrderContract;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementResultBean;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
@ActivityScope
public class SupplementOrderPresenter extends BasePresenter<SupplementOrderContract.Model, SupplementOrderContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public SupplementOrderPresenter(SupplementOrderContract.Model model, SupplementOrderContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void getNumByOrderType(int restaurantId) {
//startTime endTime
RequestBody requestBody = new FormBody.Builder()
.add("orderTypes", ColdChainConstans.orderType + "")
.add("restaurantId", restaurantId + "")
.build();
mModel.getNumByOrderType(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<SupplementInfoBean>(mErrorHandler) {
@Override
public void onNext(@NonNull SupplementInfoBean info) {
if (info != null && info.isSuccess()) {
mRootView.loadNumber(info);
}
}
});
}
public void submitOrder(int nowIndex, int allNum, String name, String phone, String address) {
RequestBody requestBody = new FormBody.Builder()
.add("order", getOrderJson(name, phone, address))
.add("apiversion", "1")
.build();
mModel.submitOrder(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("剩餘" + nowIndex + "/" + allNum + "條訂單,,,"))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<SupplementResultBean>(mErrorHandler) {
@Override
public void onNext(@NonNull SupplementResultBean info) {
if (info != null) {
if(TextUtil.isNotEmptyOrNullOrUndefined(info.getErrorMsg())){
mRootView.showMessage(info.getErrorMsg());
}
mRootView.submissionComplete();
} else {
mRootView.submissionFail();
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.submissionFail();
}
});
}
/**
* 订单提交
*/
private String getOrderJson(String name, String phone, String address) {
JSONObject json;
json = new JSONObject();
try {
json.put("shopId", GsaCloudApplication.getRestaurantId(GsaCloudApplication.getAppContext()));
json.put("phone", phone);
json.put("replenishmentType", "1");
json.put("transportationType", "3");
json.put("memberId", GsaCloudApplication.getMemberId(GsaCloudApplication.getAppContext()));
// json.put("addressId", );
json.put("addressDetail", address);
// json.put("sendTime", );
json.put("orderRemark", "");
json.put("payType", 1);
json.put("originalAmount", 0);//原价
json.put("orderType", 8);
json.put("totalPrice", 0);//实际总价
// json.put("waimaiSendTime", waimaiSendTime);//送单时间
JSONArray array = new JSONArray();
JSONObject object = new JSONObject();
object.put("posFid", -222);
object.put("productId", -223);
object.put("productName", "補單食品");
object.put("number", 0);
object.put("price", 0);
object.put("lunchboxPrice", 0);
array.put(object);
json.put("foods", array);
} catch (JSONException e) {
e.printStackTrace();
}
return json.toString();
}
}
package com.gingersoft.coldchain_module.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.coldchain_module.R;
import com.gingersoft.coldchain_module.R2;
import com.gingersoft.coldchain_module.di.component.DaggerHistoryComponent;
import com.gingersoft.coldchain_module.di.module.HistoryModule;
import com.gingersoft.coldchain_module.mvp.contract.HistoryContract;
import com.gingersoft.coldchain_module.mvp.presenter.HistoryPresenter;
import com.gingersoft.coldchain_module.mvp.ui.fragment.HistoryOrderFragment;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.google.android.material.tabs.TabLayout;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
public class HistoryActivity extends BaseFragmentActivity<HistoryPresenter> implements HistoryContract.View {
@BindView(R2.id.tv_start_time)
TextView mTvStartTime;
@BindView(R2.id.tv_end_time)
TextView mTvEndTime;
// @BindView(R2.id.cold_chain_history_order_top_bar)
// QMUITopBar topBar;
@BindView(R2.id.history_tabs)
TabLayout tabLayout;
// @BindView(R2.id.cold_chain_history_refresh_layout)
// SmartRefreshLayout mRefreshLayout;
private HistoryOrderFragment historyFragment;
private int pageIndex;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerHistoryComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.historyModule(new HistoryModule(this))
.build()
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.activity_history_order; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mTvStartTime.setText(TimeUtils.getOldDate(0));
mTvEndTime.setText(TimeUtils.getOldDate(0));
historyFragment = HistoryOrderFragment.newInstance();
// mRefreshLayout.setOnRefreshListener(refreshLayout -> {
// pageIndex = 0;
// getHistoryOrderList();
// });
// mRefreshLayout.setOnLoadMoreListener(refreshLayout -> {
// pageIndex++;
// getHistoryOrderList();
// });
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
pageIndex = 0;
getHistoryOrderList();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
getSupportFragmentManager().beginTransaction().add(R.id.content_layout, historyFragment).commit();
}
public void getHistoryOrderList() {
mPresenter.getHistoryOrderList(tabLayout.getSelectedTabPosition() == 0 ? 4 : 6, pageIndex, 10, "", "", "", "");
}
@Override
public void initIntent() {
}
@Override
public void initTopBar() {
// topBar.setTitle(R.string.history_order);
// topBar.addLeftImageButton(R.drawable.icon_return, R.id.iv_left_back).setOnClickListener(v -> killMyself());
// topBar.setBackgroundColor(ContextCompat.getColor(mContext, R.color.theme_color));
}
@Override
public void initLanguage() {
}
@Override
public void initLayoutParams() {
}
@Override
public void initLayoutVisible() {
}
@Override
public void showLoading(String message) {
if (message != null)
LoadingDialog.showDialogForLoading(this, message, true);
else
LoadingDialog.showDialogForLoading(this);
}
@Override
public void hideLoading() {
LoadingDialog.cancelDialogForLoading();
}
@Override
public void showMessage(@NonNull String message) {
ArmsUtils.makeText(this, message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
finish();
}
@Override
public void loadData() {
// historyFragment.
}
}
package com.gingersoft.coldchain_module.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.gingersoft.coldchain_module.R;
import com.gingersoft.coldchain_module.R2;
import com.gingersoft.coldchain_module.di.component.DaggerSupplementOrderComponent;
import com.gingersoft.coldchain_module.di.module.SupplementOrderModule;
import com.gingersoft.coldchain_module.mvp.constans.ColdChainConstans;
import com.gingersoft.coldchain_module.mvp.contract.SupplementOrderContract;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.gingersoft.coldchain_module.mvp.presenter.SupplementOrderPresenter;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.widget.QMUITopBar;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* 補單
*/
public class SupplementOrderActivity extends BaseActivity<SupplementOrderPresenter> implements SupplementOrderContract.View {
@BindView(R2.id.cold_chain_supplement_order_top_bar)
QMUITopBar topBar;
@BindView(R2.id.tv_supplement_order_name)
TextView mTvName;
@BindView(R2.id.tv_supplement_order_address)
TextView mTvAddress;
@BindView(R2.id.tv_supplement_order_phone)
TextView mTvPhone;
@BindView(R2.id.ed_supplement_order_number)
EditText mEdSupplementNum;
@BindView(R2.id.tv_supplement_tip)
TextView mTvTip;
private int restaurantId;
private int supplementNum;
private int allSupplementNum;
private int pickUpNum;
private String name;
private String phone;
private String address;
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerSupplementOrderComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.supplementOrderModule(new SupplementOrderModule(this))
.build()
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.activity_supplement_order; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
restaurantId = GsaCloudApplication.getRestaurantId(mContext);
mPresenter.getNumByOrderType(restaurantId);
findViewById(R.id.btn_confirm_supplement_order).setOnClickListener(v -> {
supplementNum = 0;
//補單
if (mEdSupplementNum != null && TextUtil.isNotEmptyOrNullOrUndefined(mEdSupplementNum.getText().toString())
&& Integer.parseInt(mEdSupplementNum.getText().toString()) > 0) {
supplementNum = Integer.parseInt(mEdSupplementNum.getText().toString());
allSupplementNum = supplementNum;
if (supplementNum > pickUpNum) {
showMessage("補單數量不能超過" + pickUpNum + "單");
return;
}
if (TextUtil.isEmptyOrNullOrUndefined(name)) {
showMessage("未獲取到收貨人姓名");
return;
}
if (TextUtil.isEmptyOrNullOrUndefined(phone)) {
showMessage("未獲取到收貨人手機號");
return;
}
if (TextUtil.isEmptyOrNullOrUndefined(address)) {
showMessage("未獲取到收貨地址");
return;
}
mPresenter.submitOrder(supplementNum, allSupplementNum, name, phone, address);
} else {
showMessage("補單數量必須大於0");
}
});
}
@Override
public void initIntent() {
}
@Override
public void initTopBar() {
topBar.setTitle("補單");
topBar.addLeftImageButton(R.drawable.icon_return, R.id.iv_left_back).setOnClickListener(v -> killMyself());
topBar.setBackgroundColor(ContextCompat.getColor(mContext, R.color.theme_color));
}
@Override
public void initLanguage() {
}
@Override
public void initLayoutParams() {
}
@Override
public void initLayoutVisible() {
}
@Override
public void showLoading(String message) {
if (message != null)
LoadingDialog.showDialogForLoading(this, message, true);
else
LoadingDialog.showDialogForLoading(this);
}
@Override
public void hideLoading() {
LoadingDialog.cancelDialogForLoading();
}
@Override
public void showMessage(@NonNull String message) {
ArmsUtils.makeText(this, message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
finish();
}
@Override
public void loadNumber(SupplementInfoBean bean) {
if (bean != null && bean.getData() != null) {
SupplementInfoBean.DataBean dataBean = bean.getData();
mTvAddress.setText(dataBean.getReplenishmentAddress());
mTvTip.setText(dataBean.getPickUpPrompt());
mTvName.setText(dataBean.getReplenishmentPerson());
mTvPhone.setText(dataBean.getReplenishmentPhone());
name = dataBean.getReplenishmentPerson();
phone = dataBean.getReplenishmentPhone();
address = dataBean.getReplenishmentAddress();
if (dataBean.getOrderVOS() != null) {
int orderNum = 0;
for (SupplementInfoBean.DataBean.OrderVOSBean orderVOSBean : dataBean.getOrderVOS()) {
if (orderVOSBean.getOrderType() == ColdChainConstans.orderType) {
orderNum = orderVOSBean.getOrderNum();
}
}
pickUpNum = dataBean.getColdChainPickUpNum() - orderNum;
if (orderNum > dataBean.getColdChainPickUpNum()) {
showMessage("訂單數已滿足,不需要補單");
killMyself();
} else {
if (pickUpNum > 0) {
mEdSupplementNum.setText(pickUpNum + "");
} else {
showMessage("訂單數已滿足,不需要補單");
killMyself();
}
}
}
}
}
@Override
public void submissionComplete() {
supplementNum--;
if (supplementNum > 0) {
mPresenter.submitOrder(supplementNum, allSupplementNum, name, phone, address);
} else {
// showMessage("補單完成");
killMyself();
}
}
@Override
public void submissionFail() {
showMessage("補單失敗");
killMyself();
}
}
package com.gingersoft.coldchain_module.mvp.ui.adapter;
import android.content.Context;
import android.graphics.pdf.PdfDocument;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
import android.print.PageRange;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;
import android.print.PrintDocumentInfo;
import android.print.pdf.PrintedPdfDocument;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 创建打印适配器
*/
public class MyPrintDocumentAdapter extends PrintDocumentAdapter {
private Context mContext;
private String mFilePath;
private PrintedPdfDocument mPdfDocument;
public PdfDocument myPdfDocument;
private InputStream input;
private onPrintStatusChangeListener onPrintStatusChangeListener;
public MyPrintDocumentAdapter(Context context, File file, onPrintStatusChangeListener onPrintStatusChangeListener) {
this.mContext = context;
this.mFilePath = file.getPath();
this.onPrintStatusChangeListener = onPrintStatusChangeListener;
}
//当打印进程开始,该方法就将被调用,
@Override
public void onStart() {
super.onStart();
}
//当用户改变了打印输出时,比方说页面尺寸,或者页面的方向时,
// 该函数将被调用。以此会给我们的应用重新计划打印页面的布局,
// 另外该方法必须返回打印文档包含多少页面。
@Override
public void onLayout(PrintAttributes printAttributes,
PrintAttributes printAttributes1,
CancellationSignal cancellationSignal,
LayoutResultCallback layoutResultCallback,
Bundle bundle) {
// //使用请求的页属性创建新的pdfdocument
// mPdfDocument=new PrintedPdfDocument(mContext,printAttributes1);
// 响应取消请求
if (cancellationSignal.isCanceled()) {
layoutResultCallback.onLayoutCancelled();
return;
}
// 将打印信息返回到打印框架
PrintDocumentInfo info = new PrintDocumentInfo
.Builder("name")
.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
.build();
layoutResultCallback.onLayoutFinished(info, true);
}
//此函数被调用后,会将打印页面渲染成一个待打印的文件,该函数
// 可以在onLayout被调用后调用一次或多次
@Override
public void onWrite(PageRange[] pageRanges,
ParcelFileDescriptor parcelFileDescriptor,
CancellationSignal cancellationSignal,
WriteResultCallback writeResultCallback) {
InputStream input = null;
OutputStream output = null;
try {
input = new FileInputStream(mFilePath);
output = new FileOutputStream(parcelFileDescriptor.getFileDescriptor());
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) > 0) {
output.write(buf, 0, bytesRead);
}
writeResultCallback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
} catch (FileNotFoundException e) {
if (onPrintStatusChangeListener != null) {
onPrintStatusChangeListener.onStatusChange(-1, "未找到待打印文件");
}
// Toast.makeText(mContext, "未找到待打印文件", Toast.LENGTH_SHORT).show();
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (output != null) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// Toast.makeText(mContext, "待打印状态", Toast.LENGTH_SHORT).show();
}
//一旦打印进程结束后,该函数将会被调用。如果我们的应用有任何
// 一次性销毁任务要执行,让这些任务在该方法内执行。这个回调方法不是必须实现的。
@Override
public void onFinish() {
// Toast.makeText(mContext, "已发送打印", Toast.LENGTH_SHORT).show();
if (onPrintStatusChangeListener != null) {
onPrintStatusChangeListener.onStatusChange(0, "打印文件已發送");
}
super.onFinish();
}
public interface onPrintStatusChangeListener {
void onStatusChange(int code, String msg);
}
}
package com.gingersoft.coldchain_module.mvp.ui.adapter
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.gingersoft.coldchain_module.R
import com.gingersoft.gsa.cloud.ui.utils.BtnBuilder
class OrderDetailsBtnAdapter(list: MutableList<BtnBuilder.BtnBean>) : BaseQuickAdapter<BtnBuilder.BtnBean, BaseViewHolder>(R.layout.item_btn, list) {
override fun convert(holder: BaseViewHolder, item: BtnBuilder.BtnBean) {
holder.setText(R.id.tv_btn_content, item.btnContent)
holder.setBackgroundResource(R.id.layout_btn_item, item.btnColor)
holder.setImageResource(R.id.iv_btn_mark, item.btnImg)
}
}
\ No newline at end of file
package com.gingersoft.coldchain_module.mvp.ui.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.coldchain_module.R;
import com.gingersoft.coldchain_module.mvp.model.bean.FoodDetailsTranBean;
import com.gingersoft.gsa.cloud.print.bean.OrderDetails;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import static com.bin.david.form.utils.DensityUtils.dp2px;
public class OrderDetailsFoodAdapter extends BaseQuickAdapter<OrderDetails.DataBean.PRODUCTNAMEBean, BaseViewHolder> {
public OrderDetailsFoodAdapter(@Nullable List<OrderDetails.DataBean.PRODUCTNAMEBean> data) {
super(R.layout.cold_chain_food_item, data);
}
@Override
protected void convert(@NotNull BaseViewHolder baseViewHolder, OrderDetails.DataBean.PRODUCTNAMEBean bean) {
baseViewHolder.setText(R.id.tv_food_name, bean.getPRODUCT_NAME());
baseViewHolder.setText(R.id.tv_food_number, getContext().getString(R.string.count) + bean.getNum());
baseViewHolder.setText(R.id.tv_food_price, getContext().getString(R.string.amount_unit) + bean.getPRICE());
List<OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX> childBeanXList = bean.getChild();
if (childBeanXList != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX : childBeanXList) {
View foodChild = getChild(FoodDetailsTranBean.getByChildBeanX(childBeanX), 10);
LinearLayout content = foodChild.findViewById(R.id.layout_food_content);
List<OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean> childBeans = childBeanX.getChild();
if (childBeans != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) {
content.addView(getChild(FoodDetailsTranBean.getByChildBean(childBean), 20));
}
}
((LinearLayout)baseViewHolder.getView(R.id.layout_food_content)).addView(foodChild);
}
}
}
private View getChild(FoodDetailsTranBean child, int leftMargin) {
View foodChildChild = LayoutInflater.from(getContext()).inflate(R.layout.cold_chain_food_item, null, false);
((TextView)foodChildChild.findViewById(R.id.tv_food_name)).setText(child.getPRODUCT_NAME());
((TextView)foodChildChild.findViewById(R.id.tv_food_number)).setText(getContext().getString(R.string.count) + child.getNum());
((TextView)foodChildChild.findViewById(R.id.tv_food_price)).setText(getContext().getString(R.string.amount_unit) + child.getPRICE());
ImageView childNext = foodChildChild.findViewById(R.id.iv_food_item_next);
childNext.setVisibility(View.VISIBLE);
childNext.setPadding(dp2px(getContext(), leftMargin), 0, 0, 0);
return foodChildChild;
}
}
package com.gingersoft.coldchain_module.mvp.ui.adapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.graphics.drawable.GradientDrawable;
import android.view.View;
import androidx.core.content.ContextCompat;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.coldchain_module.R;
import com.gingersoft.coldchain_module.mvp.model.bean.OrderList;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import static com.bin.david.form.utils.DensityUtils.dp2px;
public class OrderListAdapter extends BaseQuickAdapter<OrderList.DataBeanX.DataBean, BaseViewHolder> {
public OrderListAdapter(@Nullable List<OrderList.DataBeanX.DataBean> data) {
super(R.layout.cold_chain_order_item2, data);
}
@Override
protected void convert(@NotNull BaseViewHolder baseViewHolder, OrderList.DataBeanX.DataBean dataBean) {
baseViewHolder.setText(R.id.tv_pay_method, dataBean.getOrderPayType() == 1 ? "貨到付款" : "在線支付");
baseViewHolder.setText(R.id.tv_order_time, TimeUtils.parseTimeRepeat(dataBean.getCREATE_TIME(), TimeUtils.DEFAULT_DATE_FORMAT));
baseViewHolder.setText(R.id.tv_order_user_name, dataBean.getRECEIVER() + "(" + dataBean.getPHONE() + ")");
baseViewHolder.setText(R.id.tv_address, "地址:" + dataBean.getADDRESS_DETAIL());
baseViewHolder.setText(R.id.tv_delivery_state, getStatus(dataBean.getCurStat()));
baseViewHolder.setText(R.id.tv_order_amount, "$" + dataBean.getPAY_AMOUNT());
if (dataBean.getIsRead() == 0) {
baseViewHolder.setVisible(R.id.fl_border, true);
alphaAnimator(baseViewHolder.getView(R.id.fl_border));
} else {
baseViewHolder.setGone(R.id.fl_border, true);
baseViewHolder.getView(R.id.fl_border).clearAnimation();
}
String orderStatus = "";
GradientDrawable statusBg = new GradientDrawable();
statusBg.setCornerRadius(dp2px(getContext(), 5f));
if (dataBean.getSTATUS() == 0 || dataBean.getSTATUS() == 1) {
orderStatus = "待確認";
statusBg.setColor(ContextCompat.getColor(getContext(), R.color.order_state0_color));
} else if (dataBean.getSTATUS() == 2) {
orderStatus = "待提交";
statusBg.setColor(ContextCompat.getColor(getContext(), R.color.order_state1_color));
} else if (dataBean.getSTATUS() == 3) {
orderStatus = "派送中";
statusBg.setColor(ContextCompat.getColor(getContext(), R.color.order_state2_color));
}
baseViewHolder.setText(R.id.tv_order_state, orderStatus);
baseViewHolder.getView(R.id.tv_order_state).setBackground(statusBg);
}
private String getStatus(int curStat) {
switch (curStat) {
case 1:
return "已通知物流";
case 2:
return "配送員已接單";
case 3:
return "配送員到店附近";
case 4:
return "配送員已到店";
case 5:
return "配送中";
case 6:
return "到達目的地附近";
case 7:
return "訂單已完成";
case 8:
case 9:
return "物流已取消";
case 10:
return "已指派另一位配送員";
default:
return "";
}
}
private void alphaAnimator(View view) {
AnimatorSet animatorSet = new AnimatorSet();
ObjectAnimator ofFloat = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);
ofFloat.setDuration(200);
ofFloat.setRepeatCount(-1);
ofFloat.setRepeatMode(ValueAnimator.REVERSE);
ObjectAnimator ofFloat1 = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f);
ofFloat1.setDuration(200);
ofFloat1.setRepeatCount(-1);
ofFloat1.setRepeatMode(ValueAnimator.REVERSE);
animatorSet.play(ofFloat).with(ofFloat1);
animatorSet.setDuration(400);
animatorSet.start();
}
}
package com.gingersoft.coldchain_module.mvp.ui.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
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.recyclerview.widget.RecyclerView;
import com.gingersoft.coldchain_module.R;
import com.gingersoft.coldchain_module.R2;
import com.gingersoft.coldchain_module.di.component.DaggerHistoryOrderComponent;
import com.gingersoft.coldchain_module.di.module.HistoryOrderModule;
import com.gingersoft.coldchain_module.mvp.contract.HistoryOrderContract;
import com.gingersoft.coldchain_module.mvp.presenter.HistoryOrderPresenter;
import com.gingersoft.coldchain_module.mvp.ui.adapter.OrderListAdapter;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
public class HistoryOrderFragment extends BaseFragment<HistoryOrderPresenter> implements HistoryOrderContract.View {
@BindView(R2.id.cold_chain_order_list)
RecyclerView mRvOrderList;
OrderListAdapter adapter;
public static HistoryOrderFragment newInstance() {
HistoryOrderFragment fragment = new HistoryOrderFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerHistoryOrderComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.historyOrderModule(new HistoryOrderModule(this))
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
}
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override
public void setData(@Nullable Object data) {
}
@Override
public void showLoading(String message) {
}
@Override
public void hideLoading() {
}
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.snackbarText(message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
public void loadData(){
}
@Override
public void killMyself() {
}
}
package com.gingersoft.coldchain_module.mvp.ui.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.coldchain_module.R;
import com.gingersoft.coldchain_module.R2;
import com.gingersoft.coldchain_module.di.component.DaggerOrderListComponent;
import com.gingersoft.coldchain_module.di.module.OrderListModule;
import com.gingersoft.coldchain_module.mvp.contract.OrderListContract;
import com.gingersoft.coldchain_module.mvp.model.bean.OrderList;
import com.gingersoft.coldchain_module.mvp.presenter.OrderListPresenter;
import com.gingersoft.coldchain_module.mvp.ui.activity.ColdChainMainActivity;
import com.gingersoft.coldchain_module.mvp.ui.activity.OrderDetailsActivity;
import com.gingersoft.coldchain_module.mvp.ui.adapter.OrderListAdapter;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import java.util.List;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
public class OrderListFragment extends BaseFragment<OrderListPresenter> implements OrderListContract.View {
@BindView(R2.id.cold_chain_order_list)
RecyclerView mRvOrderList;
@BindView(R2.id.layout_nodata)
LinearLayout layoutNoData;
OrderListAdapter adapter;
@BindView(R2.id.cold_chain_refresh_layout)
SmartRefreshLayout mRefreshLayout;
private int restaurantId;
private String status;
private String type;
private int page = 1;
public static OrderListFragment newInstance(String status, String type) {
OrderListFragment fragment = new OrderListFragment();
Bundle arguments = new Bundle();
arguments.putString("status", status);
arguments.putString("type", type);
fragment.setArguments(arguments);
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerOrderListComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.orderListModule(new OrderListModule(this))
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mRefreshLayout.setPrimaryColorsId(android.R.color.transparent, android.R.color.black);
restaurantId = GsaCloudApplication.getRestaurantId(mContext);
Bundle arguments = getArguments();
if (arguments != null) {
status = getArguments().getString("status");
type = getArguments().getString("type");
}
onRefreshData();
mRefreshLayout.setOnRefreshListener(refreshLayout -> onRefreshData());
mRefreshLayout.setOnLoadMoreListener(refreshLayout -> {
page++;
getOrderList();
});
}
public void onRefreshData() {
page = 1;
mRefreshLayout.setEnableLoadMore(true);
getOrderList();
}
private void getOrderList() {
mPresenter.getOrderList(restaurantId, page, status, type);
}
// @Override
// public void onResume() {
// super.onResume();
// onRefreshData();
// }
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override
public void setData(@Nullable Object data) {
// if (data instanceof Message) {
// mPresenter.getOrderList(restaurantId, 0, status, type);
// }
}
@Override
public void showLoading(String message) {
}
@Override
public void hideLoading() {
}
@Override
public void showMessage(@NonNull String message) {
ArmsUtils.makeText(mContext, message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
}
@Override
public void loadOrderList(List<OrderList.DataBeanX.DataBean> data) {
// if (data.size() <= 0) {
// page--;
// mRefreshLayout.setEnableLoadMore(false);
// }
mRefreshLayout.finishRefresh();
mRefreshLayout.finishLoadMore();
if (data != null) {
layoutNoData.setVisibility(data.size() <= 0 ? View.VISIBLE : View.GONE);
mRvOrderList.setVisibility(data.size() <= 0 ? View.GONE : View.VISIBLE);
if (adapter == null) {
adapter = new OrderListAdapter(data);
mRvOrderList.setLayoutManager(new LinearLayoutManager(mContext));
adapter.setOnItemClickListener((adapter1, view, position) -> {
Intent intent = new Intent(mContext, OrderDetailsActivity.class);
intent.putExtra("orderId", data.get(position).getId());
intent.putExtra("isRead", data.get(position).getIsRead());
intent.putExtra("position", position);
startActivityForResult(intent, 1001);
});
mRvOrderList.setAdapter(adapter);
} else {
adapter.setList(data);
}
} else {
layoutNoData.setVisibility(View.VISIBLE);
mRvOrderList.setVisibility(View.GONE);
}
}
@Override
public void notifyByPosition(int position, OrderList.DataBeanX.DataBean dataBean) {
if(adapter != null){
adapter.setData(position, dataBean);
notifyActivityOrderNum();
}
}
@Override
public void removeItem(int position) {
if(adapter != null){
adapter.removeAt(position);
notifyActivityOrderNum();
}
}
private void notifyActivityOrderNum(){
if(getActivity() instanceof ColdChainMainActivity){
((ColdChainMainActivity) getActivity()).getNumByOrderTypeInvoke("loadNumber");
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 1001 && data != null && mPresenter != null) {
int position = data.getIntExtra("position", -1);
int orderStatus = data.getIntExtra("orderStatus", 0);
mPresenter.notifyDataByPosition(position, orderStatus);
}
}
}
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