Commit 0659130c by 宁斌

1、食品刪除接口調整

2、套餐食品沒有跟餐問題
3、食品組邊框調整
parent b5fb8a06
......@@ -27,7 +27,6 @@ dependencies {
implementation 'org.jetbrains:annotations:15.0'
//日誌管理
implementation 'com.elvishew:xlog:1.6.1'
}
//此文件是作为组件化配置的公共gradle脚本文件,在每个组件中都apply此文件,下载到工程根目录后,可以在下方添加一些自己工程中通用的配置
......
......@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.download.mvp.presenter;
import android.app.Application;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.FoodBean;
import com.gingersoft.gsa.cloud.database.bean.Combo;
import com.gingersoft.gsa.cloud.database.bean.Food;
......@@ -110,10 +111,8 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
down_load_data();
}
public void down_load_data() {
int restaurantId = 26;
// int restaurantId = GsaCloudApplication.getRestaurantId(IActivity);
int restaurantId = GsaCloudApplication.getRestaurantId(IActivity);
Observable.mergeArray(mModel.downFunctionList(), mModel.downFoodList(restaurantId)
, mModel.downModifier(restaurantId), mModel.downCombo(restaurantId),
mModel.downFoodModifier(restaurantId))
......@@ -256,6 +255,8 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
//这里报错需要累加一
downLoadCount++;
mRootView.showMessage("部分下載失敗,點擊刷新按鈕重新下載");
// downAllList();
}
});
}
......
......@@ -2,7 +2,6 @@ package com.joe.print.mvp.print;
import android.content.Context;
import android.os.RemoteException;
import com.gingersoft.gsa.cloud.base.utils.LanguageUtils;
import com.hyweb.n5.lib.util.PrinterUtil;
import com.jess.arms.utils.ArmsUtils;
......
......@@ -59,13 +59,13 @@ dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/javabase64-1.2.jar')
implementation files('libs/sun.misc.BASE64Decoder.jar')
// test
testImplementation rootProject.ext.dependencies["junit"]
debugImplementation rootProject.ext.dependencies["canary-debug"]
releaseImplementation rootProject.ext.dependencies["canary-release"]
testImplementation rootProject.ext.dependencies["canary-release"]
annotationProcessor rootProject.ext.dependencies["dagger2-compiler"]
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
// implementation 'androidx.appcompat:appcompat:1.1.0'
testImplementation 'junit:junit:4.12'
......@@ -79,4 +79,6 @@ dependencies {
implementation 'org.greenrobot:greendao-generator:3.2.2'
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
implementation files('libs/ecracalib.jar')
implementation files('libs/nexgon5lib.jar')
}
......@@ -19,8 +19,8 @@ public class FoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> {
@Override
protected void convert(BaseViewHolder helper, OrderDetail item) {
helper.setText(R.id.tv_food_name, item.getName());
helper.setText(R.id.tv_food_name, item.getProductName());
helper.setText(R.id.tv_food_quantity, String.valueOf(item.getNumber()));
helper.setText(R.id.tv_food_price, "$" + item.getAmount_price());
helper.setText(R.id.tv_food_price, "$" + item.getPrice());
}
}
......@@ -3,10 +3,23 @@ package com.gingersoft.gsa.cloud.base.application;
import android.content.Context;
import com.billy.cc.core.component.CC;
import com.elvishew.xlog.LogConfiguration;
import com.elvishew.xlog.LogLevel;
import com.elvishew.xlog.XLog;
import com.elvishew.xlog.interceptor.BlacklistTagsFilterInterceptor;
import com.elvishew.xlog.printer.AndroidPrinter;
import com.elvishew.xlog.printer.ConsolePrinter;
import com.elvishew.xlog.printer.Printer;
import com.elvishew.xlog.printer.file.FilePrinter;
import com.elvishew.xlog.printer.file.clean.FileLastModifiedCleanStrategy;
import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator;
import com.gingersoft.gsa.cloud.base.BuildConfig;
import com.gingersoft.gsa.cloud.base.common.bean.CurrentAndroidSetting;
import com.gingersoft.gsa.cloud.base.utils.constans.UserConstans;
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.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.xlog.MyBackupStrategy;
import com.gingersoft.gsa.cloud.database.DaoManager;
import com.jess.arms.base.BaseApplication;
......@@ -32,14 +45,41 @@ public class GsaCloudApplication extends BaseApplication {
CC.enableVerboseLog(true);
CC.enableDebug(true);
CC.enableRemoteCC(true);
//初始化日誌管理庫
initXLog();
initGreenDao();
AppCrashHandler.getInstance().init(this,"test");
AppCrashHandler.getInstance().init(this, "test");
androidSetting = new CurrentAndroidSetting();
}
private void initXLog() {
LogConfiguration config = new LogConfiguration.Builder()
.logLevel(BuildConfig.DEBUG ? LogLevel.ALL // 指定日志级别,低于该级别的日志将不会被打印,默认为 LogLevel.ALL
: LogLevel.NONE)
.tag("GSA_TAG") // 指定 TAG,默认为 "X-LOG"
.addInterceptor(new BlacklistTagsFilterInterceptor( // 添加黑名单 TAG 过滤器
"blacklist1", "blacklist2", "blacklist3"))
.build();
Printer androidPrinter = new AndroidPrinter(); // 通过 android.util.Log 打印日志的打印器
Printer consolePrinter = new ConsolePrinter(); // 通过 System.out 打印日志到控制台的打印器
Printer filePrinter = new FilePrinter // 打印日志到文件的打印器
.Builder(FileUtils.ACTIONLOG_PATH) // 指定保存日志文件的路径
.fileNameGenerator(new DateFileNameGenerator()) // 指定日志文件名生成器,默认为 ChangelessFileNameGenerator("log")
.backupStrategy(new MyBackupStrategy(FileUtils.ACTION_MAX_SIZE)) // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024)
.cleanStrategy(new FileLastModifiedCleanStrategy(FileUtils.ACTION_MAX_FILE_TIME)) // 指定日志文件清除策略,默认为 NeverCleanStrategy()
.build();
XLog.init( // 初始化 XLog
config, // 指定日志配置,如果不指定,会默认使用 new LogConfiguration.Builder().build()
androidPrinter, // 添加任意多的打印器。如果没有添加任何打印器,会默认使用 AndroidPrinter(Android)/ConsolePrinter(java)
consolePrinter,
filePrinter);
}
private void initGreenDao() {
DaoManager mManager = DaoManager.getInstance();
mManager.init(this);
......
......@@ -39,7 +39,7 @@ public class CurrentAndroidSetting {
private int LayoutQuitHeight = 40;
private int LayoutFoodTypeHeight = 100;
private int FoodBtnHeight = 120;
private int ModBtnHeight = 48;
private int ModBtnHeight = 55;
private int FoodTypeCol = 4;
private int FoodTypeRow = 1;
private int FoodCol = 4;
......
package com.gingersoft.gsa.cloud.base.common.bean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage;
import com.gingersoft.gsa.cloud.database.bean.Food;
import java.util.ArrayList;
......@@ -106,32 +107,30 @@ public class OrderBean {
*/
private int id;
private String productName;
private String productId;
private long productId;
private double price;
private double lunchboxPrice;
private int number;
private String createTime;
private int status;
private byte type;
private long parentId;
private long orderId;
public OrderDetailsBean() {
}
public OrderDetailsBean(String productName, String productId, double price, double lunchboxPrice, int number, long orderId) {
this.productName = productName;
this.productId = productId;
this.price = price;
this.lunchboxPrice = lunchboxPrice;
this.number = number;
this.orderId = orderId;
}
public OrderDetailsBean(String productName, String productId, double price, double lunchboxPrice, int number) {
public OrderDetailsBean(String productName, long productId,long parentId, double price, double lunchboxPrice, int number,byte type, long orderId) {
this.productName = productName;
this.productId = productId;
this.parentId = parentId;
this.price = price;
this.lunchboxPrice = lunchboxPrice;
this.number = number;
this.type =type;
this.orderId = orderId;
}
public int getId() {
......@@ -142,6 +141,22 @@ public class OrderBean {
this.id = id;
}
public byte getType() {
return type;
}
public void setType(byte type) {
this.type = type;
}
public long getParentId() {
return parentId;
}
public void setParentId(long parentId) {
this.parentId = parentId;
}
public String getProductName() {
return productName;
}
......@@ -150,11 +165,11 @@ public class OrderBean {
this.productName = productName;
}
public String getProductId() {
public long getProductId() {
return productId;
}
public void setProductId(String productId) {
public void setProductId(long productId) {
this.productId = productId;
}
......@@ -207,7 +222,6 @@ public class OrderBean {
}
}
// public static List<OrderDetailsBean> transOrderDetails(List<Food> foods) {
// List<OrderDetailsBean> orderDetailsBeans = new ArrayList<>();
// for (Food food : foods) {
......@@ -220,8 +234,7 @@ public class OrderBean {
public static List<OrderDetailsBean> transOrderDetails(List<OrderDetail> foods) {
List<OrderDetailsBean> orderDetailsBeans = new ArrayList<>();
for (OrderDetail food : foods) {
// OrderDetailsBean orderDetailsBean = new OrderDetailsBean(food.getName(), food.getParentId()+ "", food.getAmount_price(), food.getLunchboxPrice(), food.getNumber(), food.getOrderId());
OrderDetailsBean orderDetailsBean = new OrderDetailsBean(food.getName(), food.getParentId()+ "", food.getAmount_price(), food.getLunchboxPrice(), food.getNumber());
OrderDetailsBean orderDetailsBean = new OrderDetailsBean(food.getProductName(), food.getProductId(), food.getParentId(),food.getPrice(), food.getLunchboxPrice(), food.getNumber(), food.getType(),food.getOrderId());
orderDetailsBeans.add(orderDetailsBean);
}
return orderDetailsBeans;
......
......@@ -730,7 +730,7 @@ public class MyOrderManage {
// datasBean.isManualMoney = true;
// }
datasBean.setUnit_price(money);
datasBean.setAmount_price(money * datasBean.getNumber());
datasBean.setPrice(money * datasBean.getNumber());
}
// /**
......
......@@ -5,8 +5,8 @@ package com.gingersoft.gsa.cloud.base.utils.constans;
*/
public class HttpsConstans {
public static String ROOT_SERVER_ADDRESS_FORMAL = "http://gingersoft.tpddns.cn:58201/ricepon-cloud-gsa/api/";// 正式服務
// public static String ROOT_SERVER_ADDRESS_FORMAL = "http://192.168.1.74:8201/ricepon-cloud-gsa/api/";// 正式服務
public static String ROOT_SERVER_ADDRESS_FORMAL = "http://gingersoft.tpddns.cn:58201/ricepon-cloud-gsa/api/";// 深圳服务
// public static String ROOT_SERVER_ADDRESS_FORMAL = "http://a.ricepon.com:58201/ricepon-cloud-gsa/api/";// 香港服务
public static String ROOT_SERVER_ADDRESS_FORMAL2 = "http://gingersoft.tpddns.cn:53000/mock/49/ricepon-cloud-gsa/api/";//測試服務器
......
......@@ -12,6 +12,8 @@ import android.telecom.Call;
import android.util.Base64;
import android.util.Log;
import android.widget.Toast;
import com.elvishew.xlog.XLog;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.other.AppUtils;
import com.jess.arms.di.component.AppComponent;
......@@ -202,6 +204,7 @@ public class AppCrashHandler implements UncaughtExceptionHandler {
String stacktrace = result.toString();
printWriter.close();
LogUtil.d(TAG,stacktrace);
// XLog.tag(TAG).d(stacktrace);
//收集设备信息
collectCrashDeviceInfo(mContext);
......
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 = "GsAndroid";//一级目录
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;
}
}
package com.gingersoft.gsa.cloud.base.utils.xlog;
import com.elvishew.xlog.printer.file.naming.FileNameGenerator;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.jess.arms.utils.DeviceUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019-12-06
* 修订历史:2019-12-06
* 描述:
*/
public class DateFileNameGenerator implements FileNameGenerator {
ThreadLocal<SimpleDateFormat> mLocalDateFormat = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd", Locale.US);
}
};
@Override
public boolean isFileNameChangeable() {
return true;
}
/**
* Generate a file name which represent a specific date.
*/
@Override
public String generateFileName(int logLevel, long timestamp) {
SimpleDateFormat sdf = mLocalDateFormat.get();
sdf.setTimeZone(TimeZone.getDefault());
String machineName = "test_machine";
String fileName = machineName + "-" + DeviceUtils.getVersionName(GsaCloudApplication.getAppContext()) + "-" + sdf.format(new Date(timestamp));
return fileName;
}
}
package com.gingersoft.gsa.cloud.base.utils.xlog;
import com.elvishew.xlog.printer.file.backup.BackupStrategy;
import java.io.File;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019-12-05
* 修订历史:2019-12-05
* 描述:
*/
public class MyBackupStrategy implements BackupStrategy {
private long maxSize;
/**
* Constructor.
*
* @param maxSize the max size the file can reach
*/
public MyBackupStrategy(long maxSize) {
this.maxSize = maxSize;
}
@Override
public boolean shouldBackup(File file) {
return file.length() > maxSize;
}
}
......@@ -46,22 +46,36 @@ public class Combo {
*/
@Transient
private String name;
/**價格*/
@Transient
private long parentId;
/**
* 價格
*/
@Transient
private double price = 0.00;
/**是否自動展開*/
/**
* 是否自動展開
*/
@Transient
private int autoMode = 0;
/**是否备注细项*/
/**
* 是否备注细项
*/
@Transient
private boolean isModifier;
/**背景顏色*/
/**
* 背景顏色
*/
@Transient
private int bgColor = Color.parseColor("#067878");
/**字體顏色*/
/**
* 字體顏色
*/
@Transient
private int fontColor = Color.parseColor("#FFFFFF");
/**套餐細項*/
/**
* 套餐細項
*/
@Transient
private Modifier modifier;
......@@ -104,6 +118,14 @@ public class Combo {
// }
public long getParentId() {
return parentId;
}
public void setParentId(long parentId) {
this.parentId = parentId;
}
public long getId() {
return id;
}
......
......@@ -328,7 +328,7 @@ public class Modifier {
return marketPrice;
}
public Double getPrice() {
public double getPrice() {
return price;
}
......
package com.gingersoft.gsa.cloud.database.bean;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-02-19
* 修订历史:2020-02-19
* 描述:
*/
public class Score {
}
......@@ -14,10 +14,10 @@ import org.greenrobot.greendao.identityscope.IdentityScopeType;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/**
* Master of DAO (schema version 13): knows all DAOs.
* Master of DAO (schema version 1): knows all DAOs.
*/
public class DaoMaster extends AbstractDaoMaster {
public static final int SCHEMA_VERSION = 13;
public static final int SCHEMA_VERSION = 1;
/** Creates underlying database table using DAOs. */
public static void createAllTables(Database db, boolean ifNotExists) {
......
......@@ -30,7 +30,7 @@ public class ComboDaoUtils {
public ComboDaoUtils(Context context) {
mManager = DaoManager.getInstance();
mManager.init(context);
this.mContext =context;
this.mContext = context;
}
/**
......@@ -164,7 +164,28 @@ public class ComboDaoUtils {
if (combos != null) {
for (int i = 0; i < combos.size(); i++) {
Food food = foodDao.queryFoodByFidQueryBuilder(combos.get(i).getFid());
list.add(Combo.addFoodInfo(food,combos.get(i)));
if (food != null) {
list.add(Combo.addFoodInfo(food, combos.get(i)));
}
}
}
return list;
}
public List<Combo> queryCombosFoodsByQueryBuilder(long fid) {
List<Combo> combo = queryCombosByQueryBuilder(fid);
List<Combo> combos = null;
if (combo != null && combo.size() != 0) {
combos = queryCombosByComIdQueryBuilder(combo.get(0).getComId());
}
List<Combo> list = new ArrayList<>();
FoodDaoUtils foodDao = new FoodDaoUtils(mContext);
if (combos != null) {
for (int i = 0; i < combos.size(); i++) {
Food food = foodDao.queryFoodByFidQueryBuilder(combos.get(i).getFid());
if(food != null) {
list.add(Combo.addFoodInfo(food, combos.get(i)));
}
}
}
return list;
......@@ -185,6 +206,16 @@ public class ComboDaoUtils {
*
* @return
*/
public List<Combo> queryCombosByQueryBuilder(long fid) {
QueryBuilder<Combo> queryBuilder = mManager.getDaoSession().queryBuilder(Combo.class);
return queryBuilder.where(ComboDao.Properties.Fid.eq(fid)).build().list();
}
/**
* 使用queryBuilder进行查询食品
*
* @return
*/
public List<Combo> queryCombosByComIdQueryBuilder(int comId) {
QueryBuilder<Combo> queryBuilder = mManager.getDaoSession().queryBuilder(Combo.class);
return queryBuilder.where(ComboDao.Properties.ComId.eq(comId)).list();
......
......@@ -158,9 +158,12 @@ public class FoodModifierDaoUtils {
if (foodModifiers != null) {
for (int i = 0; i < foodModifiers.size(); i++) {
Modifier modifier = modifierDao.queryModifierByQueryBuilder(foodModifiers.get(i).getMid());
if (modifier != null) {
modifier.setFid(fid);
list.add(modifier);
}
}
}
return list;
}
......
......@@ -66,8 +66,5 @@ dependencies {
// test
testImplementation rootProject.ext.dependencies["junit"]
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapter"]
// debugImplementation rootProject.ext.dependencies["canary-debug"]
// releaseImplementation rootProject.ext.dependencies["canary-release"]
// testImplementation rootProject.ext.dependencies["canary-release"]
implementation files('libs/ecracalib.jar')
}
......@@ -17,6 +17,6 @@ public interface GoldConstants {
// boolean isRefreshData = false;
int DetailColCount = 4;
int foodGriupColCount = 5;//食品組列數
int foodGriupPageSize = 10;//食品組最大顯示數
}
package com.gingersoft.gsa.cloud.table.app.payment;
import com.etps.aca.lib.constant.Constant;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.table.app.payment.bean.AdjustTipRespose;
import com.gingersoft.gsa.cloud.table.app.payment.bean.RefundRespose;
import com.gingersoft.gsa.cloud.table.app.payment.bean.RetrievalRespose;
import com.gingersoft.gsa.cloud.table.app.payment.bean.SaleRespose;
import com.gingersoft.gsa.cloud.table.app.payment.bean.SettlementRespose;
import com.gingersoft.gsa.cloud.table.app.payment.bean.VoidRespose;
import com.gingersoft.gsa.cloud.table.app.payment.contract.IN5Callback;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019-11-01
* 修订历史:2019-11-01
* 描述:
*/
public final class N5CallbackManage {
private Map<Object, IN5Callback> mActionMap = new HashMap<>();
private Map<String, Boolean> mCallbackRecordMap = new HashMap<>();
private static N5CallbackManage sDefaultN5Callback;
public static N5CallbackManage getInstance() {
if (sDefaultN5Callback == null) {
synchronized (N5CallbackManage.class) {
if (sDefaultN5Callback == null) {
sDefaultN5Callback = new N5CallbackManage();
}
}
}
return sDefaultN5Callback;
}
public void post(Object className, String response, String action) {
if (className == null || !mActionMap.containsKey(className)) {
return;
}
Iterator<Object> iterator = mActionMap.keySet().iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
if (key != null && key == className) {
IN5Callback callback = mActionMap.get(key);
switch (action) {
case Constant.EVENT.NAME.SALE_RESP:
SaleRespose saleRespose = GsonUtils.GsonToBean(response, SaleRespose.class);
callback.onSaleCall(saleRespose);
//回調記錄這裡支付使用操作類型+交易ID作為key,防止回調記錄被重疊
String saleCallKey = Constant.EVENT.NAME.SALE + "_" + saleRespose.getTXN_ID();
mCallbackRecordMap.put(saleCallKey, true);
break;
case Constant.EVENT.NAME.VOID_RESP:
VoidRespose voidRespose = GsonUtils.GsonToBean(response, VoidRespose.class);
callback.onVoidCall(voidRespose);
//回調記錄這裡使用取消操作類型+交易ID作為key,防止回調記錄被重疊
String voidCallKey = Constant.EVENT.NAME.VOID + "_" + voidRespose.getTXN_ID();
mCallbackRecordMap.put(voidCallKey, true);
break;
case Constant.EVENT.NAME.REFUND_RESP:
RefundRespose refundRespose = GsonUtils.GsonToBean(response, RefundRespose.class);
callback.onRefundCall(refundRespose);
//回調記錄這裡使用退款操作類型+交易ID作為key,防止回調記錄被重疊
String refundCallKey = Constant.EVENT.NAME.REFUND + "_" + refundRespose.getTXN_ID();
mCallbackRecordMap.put(refundCallKey, true);
break;
case Constant.EVENT.NAME.ADJUST_RESP:
AdjustTipRespose adjustTipRespose = GsonUtils.GsonToBean(response, AdjustTipRespose.class);
callback.onAdjustCall(adjustTipRespose);
//回調記錄這裡使用支付操作類型+交易ID作為key,防止回調記錄被重疊
String tipCallKey = Constant.EVENT.NAME.ADJUST + "_" + adjustTipRespose.getTXN_ID();
mCallbackRecordMap.put(tipCallKey, true);
break;
case Constant.EVENT.NAME.PRINT_RESP:
callback.onPrinterCall(response);
mCallbackRecordMap.put(Constant.EVENT.NAME.PRINT, true);
break;
case "RETRIEVAL_RESP":
RetrievalRespose retrievalRespose = GsonUtils.GsonToBean(response, RetrievalRespose.class);
callback.onRetrievalCall(retrievalRespose);
//回調記錄這裡使用支付操作類型+交易ID作為key,防止回調記錄被重疊
String retrievalCallKey = "RETRIEVAL" + "_" + retrievalRespose.getTXN_ID();
mCallbackRecordMap.put(retrievalCallKey, true);
break;
case "SETTLE_RESP":
callback.onSettleCall(GsonUtils.GsonToBean(response, SettlementRespose.class));
mCallbackRecordMap.put("SETTLE", true);
break;
}
}
}
}
public void register(Object className, IN5Callback callback) {
if (className == null) {
return;
}
synchronized (this) {
mActionMap.put(className, callback);
}
}
public void unregister(Object className) {
if (className == null) {
return;
}
synchronized (this) {
mActionMap.remove(className);
}
}
public Map<String, Boolean> getCallbackRecordMap() {
return mCallbackRecordMap;
}
}
......@@ -6,7 +6,7 @@ import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.table.di.module.FineItemKindModule;
import com.gingersoft.gsa.cloud.table.mvpcontract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.FineItemKindFragment;
......
package com.gingersoft.gsa.cloud.table.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.table.mvpcontract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.mvp.model.FineItemKindModel;
......
......@@ -10,6 +10,8 @@ import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.presenter.MealStandPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
......@@ -89,7 +91,7 @@ public interface MealStandContract {
void setOrderFoodCount(String number);
void setMealRvScrollToPosition(int position) ;
void setMealRvScrollToPosition(int position);
Activity getActivity();
}
......@@ -97,7 +99,7 @@ public interface MealStandContract {
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends BaseOrderContract.Model {
// Observable<Object> loadOrder(int orderId);
Observable<BaseRespose> loadOrder(int orderId);
Observable<BaseResult> createOrder(RequestBody requestBody);
......@@ -115,6 +117,8 @@ public interface MealStandContract {
List<Combo> queryDB_ComboList(long fid);
List<Combo> isComboFood(long fid);
List<FoodModifier> queryDB_FoodModifierList(long fid);
}
}
......@@ -8,6 +8,7 @@ import com.gingersoft.gsa.cloud.table.app.payment.bean.SaleRespose;
import com.gingersoft.gsa.cloud.ui.widget.dialog.StatusLoadingDialog;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
* ================================================
......@@ -56,6 +57,6 @@ public interface OrderPayContract {
// Observable<Object> getN5SaleTxnId(String url);
//
// Observable<Object> updateSaleStaus(String url, RequestBody formBody);
Observable<BaseResult> updateOrderStatus( RequestBody formBody);
}
}
......@@ -10,7 +10,7 @@ import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.table.mvpcontract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
/**
......
......@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.table.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.database.bean.Combo;
import com.gingersoft.gsa.cloud.database.bean.FoodModifier;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
......@@ -10,12 +11,15 @@ import com.gingersoft.gsa.cloud.database.greendao.ModifierDao;
import com.gingersoft.gsa.cloud.database.utils.ComboDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.FoodModifierDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.service.MealService;
import com.gingersoft.gsa.cloud.table.mvp.presenter.MealStandPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
......@@ -26,6 +30,11 @@ import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Action;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.RequestBody;
......@@ -60,11 +69,11 @@ public class MealStandModel extends BaseModel implements MealStandContract.Model
this.mApplication = null;
}
// @Override
// public Observable<Object> loadOrder(int orderId) {
// return mRepositoryManager.obtainRetrofitService(MealService.class)
// .loadOrder(orderId);
// }
@Override
public Observable<BaseRespose> loadOrder(int orderId) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.loadOrder(orderId);
}
@Override
public Observable<BaseResult> createOrder(RequestBody requestBody) {
......@@ -81,7 +90,16 @@ public class MealStandModel extends BaseModel implements MealStandContract.Model
@Override
public Observable<BaseRespose> deleteFood(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.deleteFood(requestBody);
.deleteFood(requestBody)
.flatMap(new Function<BaseResult, Observable<BaseRespose>>() {
@Override
public Observable<BaseRespose> apply(BaseResult info) throws Exception {
if (info != null && info.isSuccess()) {
return loadOrder(MyOrderManage.getInstance().getOrderId());
}
return null;
}
});
}
@Override
......@@ -115,6 +133,12 @@ public class MealStandModel extends BaseModel implements MealStandContract.Model
}
@Override
public List<Combo> isComboFood(long fid) {
ComboDaoUtils comboDaoUtils = new ComboDaoUtils(mApplication);
return comboDaoUtils.queryCombosFoodsByQueryBuilder(fid);
}
@Override
public List<FoodModifier> queryDB_FoodModifierList(long fid) {
return null;
}
......
......@@ -13,6 +13,7 @@ import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
......@@ -52,9 +53,10 @@ public class OrderPayModel extends BaseModel implements OrderPayContract.Model {
.getPayMethods();
}
// @Override
// public Observable<BaseResult> updateOrderStatus(RequestBody requestBody) {
// return mRepositoryManager.obtainRetrofitService(OrderPayService.class)
// .updateOrderStatus(requestBody);
// }
@Override
public Observable<BaseResult> updateOrderStatus(RequestBody formBody) {
return mRepositoryManager.obtainRetrofitService(OrderPayService.class)
.updateOrderStatus(formBody);
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.table.mvp.model.bean.request;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2020-02-22
* 修订历史:2020-02-22
* 描述:
*/
public class DeleteOrderRequest {
private String[]id;
public String[] getId() {
return id;
}
public void setId(String[] id) {
this.id = id;
}
}
package com.gingersoft.gsa.cloud.table.mvp.model.bean.request;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
import java.util.List;
/**
......@@ -14,7 +16,7 @@ public class OrderRequest {
private int person;
private int tableId;
private List<Request> orderDetails;
private List<OrderBean.OrderDetailsBean> orderDetails;
public int getPerson() {
return person;
......@@ -32,83 +34,83 @@ public class OrderRequest {
this.tableId = tableId;
}
public List<Request> getOrderDetails() {
public List<OrderBean.OrderDetailsBean> getOrderDetails() {
return orderDetails;
}
public void setOrderDetails(List<Request> orderDetails) {
public void setOrderDetails(List<OrderBean.OrderDetailsBean> orderDetails) {
this.orderDetails = orderDetails;
}
public static class Request {
private long productId;
private String productName;
private double price;
private double lunchboxPrice;
private int number;
public Request() {
}
public Request(long productId, String productName, double price, double lunchboxPrice, int number) {
this.productId = productId;
this.productName = productName;
this.price = price;
this.lunchboxPrice = lunchboxPrice;
this.number = number;
}
public long getProductId() {
return productId;
}
public void setProductId(long productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getLunchboxPrice() {
return lunchboxPrice;
}
public void setLunchboxPrice(double lunchboxPrice) {
this.lunchboxPrice = lunchboxPrice;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
return "Request{" +
"productId=" + productId +
", productName='" + productName + '\'' +
", price=" + price +
", lunchboxPrice=" + lunchboxPrice +
", number=" + number +
'}';
}
}
// public static class Request {
// private long productId;
// private String productName;
// private double price;
// private double lunchboxPrice;
// private int number;
//
// public Request() {
// }
//
// public Request(long productId, String productName, double price, double lunchboxPrice, int number) {
// this.productId = productId;
// this.productName = productName;
// this.price = price;
// this.lunchboxPrice = lunchboxPrice;
// this.number = number;
// }
//
// public long getProductId() {
// return productId;
// }
//
// public void setProductId(long productId) {
// this.productId = productId;
// }
//
// public String getProductName() {
// return productName;
// }
//
// public void setProductName(String productName) {
// this.productName = productName;
// }
//
// public double getPrice() {
// return price;
// }
//
// public void setPrice(double price) {
// this.price = price;
// }
//
// public double getLunchboxPrice() {
// return lunchboxPrice;
// }
//
// public void setLunchboxPrice(double lunchboxPrice) {
// this.lunchboxPrice = lunchboxPrice;
// }
//
// public int getNumber() {
// return number;
// }
//
// public void setNumber(int number) {
// this.number = number;
// }
//
// @Override
// public String toString() {
// return "Request{" +
// "productId=" + productId +
// ", productName='" + productName + '\'' +
// ", price=" + price +
// ", lunchboxPrice=" + lunchboxPrice +
// ", number=" + number +
// '}';
// }
// }
@Override
public String toString() {
......
......@@ -29,12 +29,12 @@ public interface MealService {
@POST("orderDetails/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> addFood(@Body RequestBody requestBody);
// @FormUrlEncoded
// @POST("order/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
// Observable<Object> loadOrder(@Field("orderId") int orderId);
@FormUrlEncoded
@POST("order/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseRespose> loadOrder(@Field("orderId") int orderId);
@POST("orderDetails/delete" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseRespose> deleteFood(@Body RequestBody requestBody);
Observable<BaseResult> deleteFood(@Body RequestBody requestBody);
@POST("behavior/print" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseRespose> printOrder(@Body RequestBody requestBody);
......
......@@ -3,12 +3,13 @@ package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Activity;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.OrderBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.table.mvp.contract.BaseOrderContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BillOrderMoney;
import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.OrderMoneyAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import com.jess.arms.di.scope.ActivityScope;
......@@ -17,6 +18,8 @@ import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.inject.Inject;
......@@ -60,7 +63,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
protected List<BillOrderMoney> mOrderMoneyList = new ArrayList<>();
//選中操作的食品下標
protected int orderSelectPosition= -1;
protected int orderSelectPosition = -1;
//食品數量
protected int foodCount;
......@@ -81,6 +84,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
foodCount = initFoodCount();
totalMoney = initFoodTotalMoney();
resetSelected();
initOrderAdapter();
}
......@@ -96,6 +100,8 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
private void initOrderAdapter() {
if (mSelectMealAdapter == null) {
mSelectMealAdapter = new SelectMealAdapter(IActivity, orderFoodList, this);
//設置子父級下標
mSelectMealAdapter.setIndex();
}
if (mOrderMoneyAdapter == null) {
mOrderMoneyAdapter = new OrderMoneyAdapter(IActivity, mOrderMoneyList, cashStr);
......@@ -158,10 +164,17 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
return true;
}
public void resetSelected() {
for (int i = 0; i < orderFoodList.size(); i++) {
OrderDetail datasBean = orderFoodList.get(i);
datasBean.setSelected(0);
}
}
public double initFoodTotalMoney() {
double total = 0.0;
for (OrderDetail food : myOrderManage.getOrderFoodList()) {
total += food.getAmount_price();
total += food.getPrice();
}
return total;
}
......@@ -174,10 +187,101 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
return cout;
}
protected String getDeleteFoodIds() {
StringBuilder builder = new StringBuilder();
List<OrderDetail> orderDetails = getOldOrderFoodLists();
int start_position = mSelectMealAdapter.getSelect_full_start_position() + 1;
int end_position = mSelectMealAdapter.getSelect_full_end_position() + 1;
for (int i = orderDetails.size() - 1; i >= 0; i--) {
int my_index = orderDetails.get(i).getMyIndex();
if (start_position <= my_index && my_index <= end_position) {
OrderDetail orderDetail1 = orderDetails.get(i);
builder.append(orderDetail1.getId());
if (i <= (orderDetails.size() - 1)) {
builder.append(",");
}
}
}
String str = builder.toString();
if (str.endsWith(",")) {
str = str.substring(0, str.length() - 1);
}
return str;
}
protected OrderRequest getCreateOrderRequest(List<OrderDetail> foodList) {
OrderRequest request = new OrderRequest();
request.setOrderDetails(orderDetailBeanToFoodRequest(foodList));
request.setPerson(OpenTableManage.getDefault().getPeopleNumber());
request.setTableId(OpenTableManage.getDefault().getTableBean().getId());
return request;
}
private List<OrderBean.OrderDetailsBean> orderDetailBeanToFoodRequest(List<OrderDetail> foodList) {
List<OrderBean.OrderDetailsBean> requests = new ArrayList<>();
if (foodList != null) {
for (OrderDetail food : foodList) {
OrderBean.OrderDetailsBean request = new OrderBean.OrderDetailsBean();
request.setProductName(food.getProductName());
request.setProductId(food.getId());
request.setParentId(food.getParentId());
request.setNumber(food.getNumber());
request.setPrice(food.getPrice());
request.setType(food.getType());
request.setLunchboxPrice(0);
requests.add(request);
}
}
return requests;
}
protected List<OrderDetail> getNewOrderFoodLists() {
List<OrderDetail> orderDetails = new ArrayList<>();
for (int i = 0; i < getOrderFoodLists().size(); i++) {
OrderDetail orderDetail = getOrderFoodLists().get(i);
if (orderDetail.isNew()) {
orderDetails.add(orderDetail);
}
}
return orderDetails;
}
protected List<OrderDetail> getOldOrderFoodLists() {
List<OrderDetail> orderDetails = new ArrayList<>();
for (int i = 0; i < getOrderFoodLists().size(); i++) {
OrderDetail orderDetail = getOrderFoodLists().get(i);
if (!orderDetail.isNew()) {
orderDetails.add(orderDetail);
}
}
return orderDetails;
}
public List<OrderDetail> getOrderFoodLists() {
return myOrderManage.getOrderFoodList();
}
protected void sortSelectMealByIsNew() {
List<OrderDetail> orderDetail = orderFoodList;
List<OrderDetail> sortOrderList = new ArrayList<>();
for (int i = 0; i < orderDetail.size(); i++) {
sortOrderList.add(orderDetail.get(i));
}
Comparator c = new Comparator<OrderDetail>() {
@Override
public int compare(OrderDetail o1, OrderDetail o2) {
Boolean isnew1 = o1.isNew();
Boolean isnew2 = o2.isNew();
return isnew1.compareTo(isnew2);
}
};
Collections.sort(sortOrderList, c);
orderDetail.clear();
for (int i = 0; i < sortOrderList.size(); i++) {
orderDetail.add(sortOrderList.get(i));
}
}
protected String getTableName() {
String tablename = "";
if (OpenTableManage.getDefault().isSplite()) {
......
......@@ -3,7 +3,6 @@ package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
......@@ -24,7 +23,7 @@ import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.table.mvpcontract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
import org.simple.eventbus.EventBus;
......
......@@ -145,7 +145,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(request));
mModel.createOrder(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.doOnSubscribe(disposable -> mRootView.showLoading(null))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
......@@ -167,22 +167,15 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
private void addOrderFood() {
List<OrderDetail> foods = MyOrderManage.getInstance().getOrderFoodList();
List<OrderDetail> newFoods = new ArrayList<>();
for (OrderDetail food : foods) {
if (food.isNew()) {
newFoods.add(food);
}
}
List<OrderDetail> newFoods = getNewOrderFoodLists();
for (OrderDetail food : newFoods) {
food.setOrderId(MyOrderManage.getInstance().getOrderId());
}
List<OrderBean.OrderDetailsBean> orderBeans = OrderBean.transOrderDetails(newFoods);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(orderBeans));
// RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), JsonUtils.toJson(getOrderFoodLists()));
mModel.addFood(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.doOnSubscribe(disposable -> mRootView.showLoading(null))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
......@@ -209,7 +202,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mModel.printOrder(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.doOnSubscribe(disposable -> mRootView.showLoading(null))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
......@@ -252,7 +245,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
// .call();
// }
private OrderRequest getCreateOrderRequest(List<OrderDetail> foodList) {
protected OrderRequest getCreateOrderRequest(List<OrderDetail> foodList) {
OrderRequest request = new OrderRequest();
request.setOrderDetails(orderDetailBeanToFoodRequest(foodList));
request.setPerson(OpenTableManage.getDefault().getPeopleNumber());
......@@ -260,21 +253,21 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
return request;
}
private OrderRequest getAddOrderFoodRequest(List<OrderDetail> foodList) {
protected OrderRequest getAddOrderFoodRequest(List<OrderDetail> foodList) {
OrderRequest request = new OrderRequest();
request.setOrderDetails(orderDetailBeanToFoodRequest(foodList));
return request;
}
private List<OrderRequest.Request> orderDetailBeanToFoodRequest(List<OrderDetail> foodList) {
List<OrderRequest.Request> requests = new ArrayList<>();
private List<OrderBean.OrderDetailsBean> orderDetailBeanToFoodRequest(List<OrderDetail> foodList) {
List<OrderBean.OrderDetailsBean> requests = new ArrayList<>();
if (foodList != null) {
for (OrderDetail food : foodList) {
OrderRequest.Request request = new OrderRequest.Request();
request.setProductName(food.getName());
request.setProductId(food.getFid());
OrderBean.OrderDetailsBean request = new OrderBean.OrderDetailsBean();
request.setProductName(food.getProductName());
request.setProductId(food.getId());
request.setNumber(food.getNumber());
request.setPrice(food.getAmount_price());
request.setPrice(food.getPrice());
request.setLunchboxPrice(0);
requests.add(request);
}
......
......@@ -102,15 +102,16 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
PayMethod method = (PayMethod) adapter.getItem(position);
if (!isCashPayMethod(method)) {
PayMethod N5PayMethod = getSelectN5PayMethod();
if (N5PayMethod != null) {
//最多選擇2中支付方式(現金+其他)
mBillMoneyList.remove(N5PayMethod);
mBillMoneyAdapter.notifyDataSetChanged();
}
}
if (!mBillMoneyList.contains(method)) {
// if (!isCashPayMethod(method)) {
// PayMethod N5PayMethod = getSelectN5PayMethod();
// if (N5PayMethod != null) {
// //最多選擇2中支付方式(現金+其他)
// mBillMoneyList.remove(N5PayMethod);
// mBillMoneyAdapter.notifyDataSetChanged();
// }
// }
mBillMoneyList.clear();
// if (!mBillMoneyList.contains(method)) {
double differenceMoney = getDifferenceMoney();
if (differenceMoney > -1) {
//補足差額
......@@ -123,7 +124,7 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
mRootView.setBillMoneyRvScrollToPosition(mBillMoneyList.size() - 1);
//設置差額狀態
mRootView.setDifferenceText();
}
// }
}
});
mBillMoneyAdapter.setOnItemClickListener(new BillMoneyAdapter.OnItemClickListener() {
......@@ -162,7 +163,6 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
List<PayMethod> payMethods = JsonUtils.parseArray(baseResult.getData(), PayMethod.class);
mBillMethodList.addAll(payMethods);
mBillMethodAdapter.notifyDataSetChanged();
// mRootView.paySuccess();
}
}
});
......@@ -180,23 +180,24 @@ public class OrderPayPresenter extends BaseOrderPresenter<OrderPayContract.Model
.add("orderId", MyOrderManage.getInstance().getOrderId() + "")
.add("person", OpenTableManage.getDefault().getPeopleNumber() + "")
.add("status", statius)
.add("orderPayType", mBillMoneyList.get(0).getId()+"")
.build();
// mModel.updateOrderStatus(requestBody)
// .subscribeOn(Schedulers.io())
// .doOnSubscribe(disposable -> mRootView.showLoading(""))
// .subscribeOn(AndroidSchedulers.mainThread())
// .observeOn(AndroidSchedulers.mainThread())
// .doAfterTerminate(()-> mRootView.hideLoading())
// .compose(RxLifecycleUtils.bindToLifecycle(mRootView))
// .subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
// @Override
// public void onNext(BaseResult baseResult) {
// if(baseResult.isSuccess()){
// //結賬成功
//// mRootView.paySuccess();
// }
// }
// });
mModel.updateOrderStatus(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(BaseResult baseResult) {
if (baseResult.isSuccess()) {
//結賬成功
mRootView.paySuccess();
}
}
});
}
public void pressExact() {
......
......@@ -223,7 +223,7 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
//总的页数
private int totalPage;
//每页显示的最大的数量
private int mPageSize = 12;
// private int mPageSize = 10;
//GridView作为一个View对象添加到ViewPager集合中
private List<View> viewPagerList;
private static final int FINISH = 101;
......@@ -288,13 +288,13 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
foodGroupList.get(0).setSelected(true);
//总的页数向上取整
totalPage = (int) Math.ceil(foodGroupList.size() * 1.0 / mPageSize);
totalPage = (int) Math.ceil(foodGroupList.size() * 1.0 / GoldConstants.foodGriupPageSize);
viewPagerList = new ArrayList<>();
for (int i = 0; i < totalPage; i++) {
//每个页面都是inflate出一个新实例
LineGridView gridView = (LineGridView) View.inflate(this, R.layout.meal_food_group_grid, null);
gridView.setNumColumns(GoldConstants.foodGriupColCount);
HorizontalGridViewAdpter horizontalGridViewAdpter = new HorizontalGridViewAdpter(this, foodGroupList, i, mPageSize);
HorizontalGridViewAdpter horizontalGridViewAdpter = new HorizontalGridViewAdpter(this, foodGroupList, i, GoldConstants.foodGriupPageSize);
gridView.setAdapter(horizontalGridViewAdpter);
if (i == 0) {
mFoodGroupGridViewAdapter = horizontalGridViewAdpter;
......@@ -834,7 +834,7 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
@Override
public void showLoading(String message) {
if (!TextUtils.isEmpty(message))
if (message != null)
LoadingDialog.showDialogForLoading(this, message, true);
else
LoadingDialog.showDialogForLoading(this);
......@@ -880,11 +880,11 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
initFineItemTabBarViewPage();
fineItemAllFragment.onMidEvent(mPresenter.getCurrentOrderDetailBean().getFid());
fineItemAllFragment.onMidEvent(mPresenter.getCurrentOrderDetailBean().getProductId());
// EventBus.getDefault().post(mSoldoutList_full, "FineItemAllFragment_onCurrentSlodoutFoodList_FullEvent");
// EventBus.getDefault().post(mPresenter.getCurrentOrderDetailBean().getFid(), "FineItemAllFragment_onMidEvent");
fineItemKindFragment.onMidEvent(mPresenter.getCurrentOrderDetailBean().getFid());
fineItemKindFragment.onMidEvent(mPresenter.getCurrentOrderDetailBean().getProductId());
// EventBus.getDefault().post(mSoldoutList_full, "FineItemKindFragment_onCurrentSlodoutFoodList_FullEvent");
// EventBus.getDefault().post(mPresenter.getCurrentOrderDetailBean().getFid(), "FineItemKindFragment_onMidEvent");
......
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal;
import android.content.Context;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
......@@ -224,7 +225,7 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
private void setName(OrderDetail datasBean) {
int flevel = datasBean.getItemType();
String name = datasBean.getName();
String name = datasBean.getProductName();
switch (flevel) {
case 1:
tv_number.setGravity(Gravity.LEFT);
......@@ -239,6 +240,22 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
break;
}
tv_name.setText(name);
int selected = datasBean.getSelected();
if (selected != 0) {
//作为主体被选中 开启跑马灯效果
tv_name.setFocusable(true);
tv_name.setEllipsize(TextUtils.TruncateAt.MARQUEE);//设置旋转
tv_name.setMarqueeRepeatLimit(-1);//-1为死循环,1为1次
tv_name.setSelected(true);//设置不获取焦点就可以转
tv_name.setFocusableInTouchMode(true);
} else {
//关闭跑马灯效果
tv_name.setFocusable(false);
tv_name.setMarqueeRepeatLimit(0);
tv_name.setSelected(false);
tv_name.setFocusableInTouchMode(false);
}
}
private void setNumber(OrderDetail datasBean) {
......@@ -252,7 +269,7 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
}
private void setMoney(OrderDetail datasBean) {
double price = datasBean.getAmount_price();
double price = datasBean.getPrice();
if (price != 0) {
tv_money.setText(carshStr + MoneyUtil.get_ItemDecimals_money(price));
} else {
......@@ -368,7 +385,7 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
if (orderItem != null && orderItem.isNew()) {
mInfos.remove(i);
notifyItemChanged(i);
Food orderBean = mMealStandPresenter.getOrderFoodById(orderItem.getFid());
Food orderBean = mMealStandPresenter.getOrderFoodById(orderItem.getId());
if (orderBean != null) {
mMealStandPresenter.setUserMaxQty(orderBean);
}
......@@ -420,7 +437,93 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
* 删除食品子项及折扣
*/
public void removeChildItem() {
OrderDetail orderDetail= mInfos.get(select_position);
if (select_position > -1) {
switch (orderDetail.getItemType()) {
case 1:
//第一层下方有细项 从下方往上删
if (select_end_position != 0 && select_end_position > select_position) {
for (int i = select_end_position; i > select_position; i--) {
OrderDetail orderBean = mInfos.get(i);
boolean isParentChild = orderBean.getParentIndex() == orderDetail.getMyIndex();
if (orderBean.getItemType() == 3 && !isParentChild) {
//第二层 下面有第三层子项也要一并删除
removeAllChild3ByCombo(orderBean);
} else {
mInfos.remove(i);
notifyItemChanged(i);
}
break;
}
} else {
//第一层没有子食品 直接退出
return;
}
break;
case 2:
if (select_end_position != 0 &&
select_end_position > select_position &&
hasChild3Food(orderDetail)) {
//第二层 下面有第三层子项也要一并删除
for (int i = select_end_position; i >= select_position; i--) {
mInfos.remove(i);
notifyItemChanged(i);
}
} else {
// if (mInfos.get(select_position).comid.equals("discount")) {
// //如果刪除的是折扣,這裡初始化父食品D標識
// int parent_index = mInfos.get(select_position).getParent_index() -1;
// if (parent_index > -1 && parent_index < mInfos.size()) {
// mInfos.get(parent_index).setDiscount_double1(true);
// }
// }
mInfos.remove(select_position);
notifyItemChanged(select_position);
}
break;
case 3:
mInfos.remove(select_position);
notifyItemChanged(select_position);
break;
}
}
if (select_position >= mInfos.size()) {
select_position = mInfos.size() - 1;
}
if (mInfos.size() == 0) {
//全部删除重置选中下标
select_position = -1;
} else {
switch (orderDetail.getItemType()) {
case 1:
break;
case 2:
int comboIndex = getComboEdgeIndex();
if (comboIndex != (orderDetail.getMyIndex() - 1)) {
select_position -= 1;
} else {
if (select_position == mInfos.size()) {
select_position -= 1;
}
}
break;
case 3:
int edgeIndex = getChild2EdgeIndex();
if (edgeIndex != (orderDetail.getMyIndex() - 1)) {
select_position -= 1;
} else {
if (select_position == mInfos.size()) {
select_position -= 1;
}
}
break;
}
}
setIndex();
setSelectPosition(select_position);
setMyOrderManageSelectPosition();
}
private void removeIntactFoodItem() {
......@@ -437,6 +540,24 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
}
}
/**
* 删除第二层子食品下所有第三层备注
*
* @param orderDetail
* @return
*/
private boolean removeAllChild3ByCombo(OrderDetail orderDetail) {
boolean remove = false;
for (int i = mInfos.size() - 1; i >= 0; i--) {
boolean accordChild3 = mInfos.get(i).getParentIndex() == orderDetail.getParentIndex() || mInfos.get(i).getMyIndex() == orderDetail.getParentIndex();
if (mInfos.get(i).getItemType() != 1 && accordChild3) {
mInfos.remove(i);
notifyItemChanged(i);
remove = true;
}
}
return remove;
}
public void setMyOrderManageSelectPosition() {
MyOrderManage.getInstance().setSelstartpostion(select_start_position);
......@@ -504,17 +625,17 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
private void setItemNo(OrderDetail foodBean) {
switch (foodBean.getItemType()) {
case 1:
foodBean.setParentId(foodBean.getFid());
// foodBean.setParentId(foodBean.getId());
break;
case 2:
case 3:
long itemno = -1;
if (select_position != -1 && select_position < mInfos.size()) {
if (mInfos.get(select_position).isIsfood()) {
itemno = mInfos.get(select_position).getFid();
itemno = mInfos.get(select_position).getId();
} else {
if (select_start_position != -1 && select_start_position < mInfos.size()) {
itemno = mInfos.get(select_start_position).getFid();
itemno = mInfos.get(select_start_position).getId();
}
}
}
......@@ -752,12 +873,23 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
notifyDataSetChanged();
}
private void resetSelected() {
/**
* 获取食品子项最后一个子项位置
*
* @return
*/
private int getComboEdgeIndex() {
int parent_index = getParentFoodIndex(mInfos.get(select_position));
int edgeIndex = parent_index;
for (int i = 0; i < mInfos.size(); i++) {
OrderDetail datasBean = mInfos.get(i);
// datasBean.setIsSelected(false);
if (datasBean.getItemType() == 2 && datasBean.getParentIndex() == parent_index) {
edgeIndex = i;
}
}
return edgeIndex;
}
public List<OrderDetail> getInfos() {
return mInfos;
......
......@@ -3,7 +3,6 @@ package com.gingersoft.gsa.cloud.table.mvp.ui.fragment;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -16,7 +15,7 @@ import com.jess.arms.base.BaseFragment;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.table.mvpcontract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.mvp.presenter.FineItemKindPresenter;
import org.simple.eventbus.Subscriber;
......
<?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="wrap_content">
<RelativeLayout
android:id="@+id/rl_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
......@@ -10,11 +14,11 @@
android:layout_height="match_parent"
android:layout_marginRight="2px"
android:layout_marginTop="2px"
android:text="food"
android:textSize="@dimen/sp_14"
android:gravity="center"
android:text="food"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@drawable/meal_selector_food_backgroup" />
android:textColor="@drawable/meal_selector_food_backgroup"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_number"
......@@ -34,9 +38,9 @@
android:layout_gravity="right"
android:layout_marginRight="2px"
android:layout_marginTop="2px"
android:visibility="invisible"
android:background="@drawable/ui_selector_white_rect"
android:text="sold" />
android:text="sold"
android:visibility="invisible" />
<View
android:id="@+id/right_line"
......@@ -52,4 +56,5 @@
android:layout_alignParentTop="true"
android:background="@color/theme_black" />
</RelativeLayout>
</RelativeLayout>
......@@ -70,6 +70,10 @@ public class LoginPresenter extends BasePresenter<LoginContract.Model, LoginCont
.add("userName", "admin")
.add("passWord", "123456")
.build();
// requestBody = new FormBody.Builder()
// .add("userName", "19901001")
// .add("passWord", "123456")
// .build();
} else {
requestBody = new FormBody.Builder()
.add("userName", account.trim() + "")
......
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