Commit dc42b76e by 宁斌

訂單詳情完善

parents cd58cb90 7410f941
package com.gingersoft.gsa.cloud.main.mvp.contract; package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessDetailsBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
...@@ -9,7 +10,6 @@ import java.util.List; ...@@ -9,7 +10,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.RequestBody;
/** /**
...@@ -27,13 +27,15 @@ import okhttp3.RequestBody; ...@@ -27,13 +27,15 @@ import okhttp3.RequestBody;
public interface BusinessReportContract { public interface BusinessReportContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView { interface View extends IView {
void loadChart(Map<String, HomeTurnoverBean.DataBean> data); void loadChart(List<MainBusinessBean.DataBean> data);
void loadAdapter(List<BusinessBean> businessBeans); void loadAdapter(List<BusinessBean> businessBeans);
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel { interface Model extends IModel {
Observable<HomeTurnoverBean> getRestaurantBusinessInfo(RequestBody requestBody); Observable<MainBusinessBean> getRestaurantBusinessAmount(Map<String, String> map);
Observable<BusinessDetailsBean> getRestaurantBusinessDetails(Map<String, String> map);
} }
} }
package com.gingersoft.gsa.cloud.main.mvp.contract; package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
...@@ -30,7 +31,7 @@ public interface HomeContract { ...@@ -30,7 +31,7 @@ public interface HomeContract {
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel { interface Model extends IModel {
Observable<HomeTurnoverBean> getRestaurantReport(RequestBody requestBody); Observable<MainBusinessBean> getRestaurantReport(RequestBody requestBody);
Observable<String> getRestaurantFunList(String restaurantId); Observable<String> getRestaurantFunList(String restaurantId);
} }
......
package com.gingersoft.gsa.cloud.main.mvp.contract; package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
import java.util.List; import java.util.List;
import java.util.Map;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.RequestBody; import okhttp3.RequestBody;
...@@ -27,14 +26,14 @@ import okhttp3.RequestBody; ...@@ -27,14 +26,14 @@ import okhttp3.RequestBody;
public interface MainTopContract { public interface MainTopContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView { interface View extends IView {
void loadBusinessInfo(Map<String, HomeTurnoverBean.DataBean> dataBeanMap); void loadBusinessInfo(List<MainBusinessBean.DataBean> dataBean);
void loadChart(List<MainOrderInfoChartBean.DataBean> dataBeans); void loadChart(List<MainOrderInfoChartBean.DataBean> dataBeans);
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel { interface Model extends IModel {
Observable<HomeTurnoverBean> getRestaurantReport(RequestBody requestBody); Observable<MainBusinessBean> getRestaurantReport(String restaurantId);
Observable<MainOrderInfoChartBean> getOrderInfoChart(RequestBody requestBody); Observable<MainOrderInfoChartBean> getOrderInfoChart(RequestBody requestBody);
} }
......
...@@ -5,6 +5,7 @@ import com.jess.arms.mvp.IModel; ...@@ -5,6 +5,7 @@ import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
import java.util.List; import java.util.List;
import java.util.Map;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.RequestBody; import okhttp3.RequestBody;
...@@ -25,11 +26,13 @@ import okhttp3.RequestBody; ...@@ -25,11 +26,13 @@ import okhttp3.RequestBody;
public interface SalesContract { public interface SalesContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView { interface View extends IView {
void loadInfo(List<SalesFoodsBean.DataBean> info); void loadInfo(List<SalesFoodsBean.DataBean.SalesRankingBean> salesRanking);
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel { interface Model extends IModel {
Observable<SalesFoodsBean> getSalesReportInfo(Map<String, Object> map);
Observable<SalesFoodsBean> getSalesReportInfo(RequestBody requestBody); Observable<SalesFoodsBean> getSalesReportInfo(RequestBody requestBody);
} }
} }
package com.gingersoft.gsa.cloud.main.mvp.contract; package com.gingersoft.gsa.cloud.main.mvp.contract;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.jess.arms.base.DefaultAdapter; import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import io.reactivex.Observable; import io.reactivex.Observable;
import okhttp3.RequestBody; import okhttp3.RequestBody;
...@@ -32,6 +31,8 @@ public interface SettlementReportContract { ...@@ -32,6 +31,8 @@ public interface SettlementReportContract {
void setSettlementReportItem5Adapter(DefaultAdapter adapter); void setSettlementReportItem5Adapter(DefaultAdapter adapter);
void returnSettlementData(SettlementReport.DataBean datasBean); void returnSettlementData(SettlementReport.DataBean datasBean);
//打印清機報表
void printRepore();
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......
...@@ -3,18 +3,19 @@ package com.gingersoft.gsa.cloud.main.mvp.model; ...@@ -3,18 +3,19 @@ package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application; import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract; import com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessDetailsBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.service.MainReportService; import com.gingersoft.gsa.cloud.main.mvp.model.service.MainReportService;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.jess.arms.di.scope.FragmentScope; import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.integration.IRepositoryManager; import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel; import com.jess.arms.mvp.BaseModel;
import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
/** /**
...@@ -49,9 +50,14 @@ public class BusinessReportModel extends BaseModel implements BusinessReportCont ...@@ -49,9 +50,14 @@ public class BusinessReportModel extends BaseModel implements BusinessReportCont
} }
@Override @Override
public Observable<HomeTurnoverBean> getRestaurantBusinessInfo(RequestBody requestBody) { public Observable<MainBusinessBean> getRestaurantBusinessAmount(Map<String, String> map) {
RetrofitUrlManager.getInstance().putDomain("common", "http://a.ricepon.com:61177/member-web/api/"); return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getRestaurantAmount(map);
}
@Override
public Observable<BusinessDetailsBean> getRestaurantBusinessDetails(Map<String, String> map) {
return mRepositoryManager.obtainRetrofitService(MainReportService.class) return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getRestaurantReport(requestBody); .getRestaurantDetails(map);
} }
} }
\ No newline at end of file
...@@ -2,18 +2,16 @@ package com.gingersoft.gsa.cloud.main.mvp.model; ...@@ -2,18 +2,16 @@ package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application; import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.contract.HomeContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.service.MainReportService; import com.gingersoft.gsa.cloud.main.mvp.model.service.MainReportService;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.integration.IRepositoryManager; import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel; import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject; import javax.inject.Inject;
import com.gingersoft.gsa.cloud.main.mvp.contract.HomeContract;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager; import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody; import okhttp3.RequestBody;
...@@ -51,10 +49,10 @@ public class HomeModel extends BaseModel implements HomeContract.Model { ...@@ -51,10 +49,10 @@ public class HomeModel extends BaseModel implements HomeContract.Model {
} }
@Override @Override
public Observable<HomeTurnoverBean> getRestaurantReport(RequestBody requestBody) { public Observable<MainBusinessBean> getRestaurantReport(RequestBody requestBody) {
RetrofitUrlManager.getInstance().putDomain("common", "https://m.ricepon.com/member-web/api/"); RetrofitUrlManager.getInstance().putDomain("common", "https://m.ricepon.com/member-web/api/");
return mRepositoryManager.obtainRetrofitService(MainReportService.class) return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getRestaurantReport(requestBody); .getRestaurantReport("");
} }
@Override @Override
......
...@@ -3,7 +3,7 @@ package com.gingersoft.gsa.cloud.main.mvp.model; ...@@ -3,7 +3,7 @@ package com.gingersoft.gsa.cloud.main.mvp.model;
import android.app.Application; import android.app.Application;
import com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract; import com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean;
import com.gingersoft.gsa.cloud.main.mvp.model.service.MainReportService; import com.gingersoft.gsa.cloud.main.mvp.model.service.MainReportService;
import com.google.gson.Gson; import com.google.gson.Gson;
...@@ -14,7 +14,6 @@ import com.jess.arms.mvp.BaseModel; ...@@ -14,7 +14,6 @@ import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody; import okhttp3.RequestBody;
...@@ -50,15 +49,13 @@ public class MainTopModel extends BaseModel implements MainTopContract.Model { ...@@ -50,15 +49,13 @@ public class MainTopModel extends BaseModel implements MainTopContract.Model {
} }
@Override @Override
public Observable<HomeTurnoverBean> getRestaurantReport(RequestBody requestBody) { public Observable<MainBusinessBean> getRestaurantReport(String restaurantId) {
RetrofitUrlManager.getInstance().putDomain("common", "http://a.ricepon.com:61177/member-web/api/");
return mRepositoryManager.obtainRetrofitService(MainReportService.class) return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getRestaurantReport(requestBody); .getRestaurantReport(restaurantId);
} }
@Override @Override
public Observable<MainOrderInfoChartBean> getOrderInfoChart(RequestBody requestBody) { public Observable<MainOrderInfoChartBean> getOrderInfoChart(RequestBody requestBody) {
RetrofitUrlManager.getInstance().putDomain("common", "http://a.ricepon.com:61177/member-web/api/");
return mRepositoryManager.obtainRetrofitService(MainReportService.class) return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getOrderInfoChart(requestBody); .getOrderInfoChart(requestBody);
} }
......
...@@ -13,7 +13,6 @@ import com.jess.arms.mvp.BaseModel; ...@@ -13,7 +13,6 @@ import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody; import okhttp3.RequestBody;
...@@ -50,7 +49,6 @@ public class PaymentMethodReportModel extends BaseModel implements PaymentMethod ...@@ -50,7 +49,6 @@ public class PaymentMethodReportModel extends BaseModel implements PaymentMethod
@Override @Override
public Observable<PaymentMethodBean> getPaymentInfo(RequestBody requestBody) { public Observable<PaymentMethodBean> getPaymentInfo(RequestBody requestBody) {
RetrofitUrlManager.getInstance().putDomain("common", "http://a.ricepon.com:61177/member-web/api/");
return mRepositoryManager.obtainRetrofitService(MainReportService.class) return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getPaymentInfo(requestBody); .getPaymentInfo(requestBody);
} }
......
...@@ -10,10 +10,11 @@ import com.jess.arms.di.scope.FragmentScope; ...@@ -10,10 +10,11 @@ import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.integration.IRepositoryManager; import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel; import com.jess.arms.mvp.BaseModel;
import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody; import okhttp3.RequestBody;
...@@ -49,8 +50,13 @@ public class SalesModel extends BaseModel implements SalesContract.Model { ...@@ -49,8 +50,13 @@ public class SalesModel extends BaseModel implements SalesContract.Model {
} }
@Override @Override
public Observable<SalesFoodsBean> getSalesReportInfo(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getSalesReportInfo(map);
}
@Override
public Observable<SalesFoodsBean> getSalesReportInfo(RequestBody requestBody) { public Observable<SalesFoodsBean> getSalesReportInfo(RequestBody requestBody) {
RetrofitUrlManager.getInstance().putDomain("common", "http://a.ricepon.com:61177/member-web/api/");
return mRepositoryManager.obtainRetrofitService(MainReportService.class) return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getSalesReportInfo(requestBody); .getSalesReportInfo(requestBody);
} }
......
package com.gingersoft.gsa.cloud.main.mvp.model.bean;
public class BusinessDetailsBean {
/**
* success : true
* sysTime : 1583995203737
* data : {"prices":7749,"scamount":0,"disamount":0,"rounding":0,"payamount":0,"tipsPrice":0,"totamount":9025,"totalMeals":9025,"takeawayTotal":0}
*/
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 {
/**
* //#項目銷售總數
* private double prices;
* //服務費
* private double scamount;
* //折扣
* private double disamount;
* //賬單小數
* private double rounding;
* //簽單
* private double payamount;
* //貼士
* private double tipsPrice;
* //賬單金額總數
* private double totamount;
* //堂食總數
* private double totalMeals;
* //外賣總數
* private double takeawayTotal;
*/
private double prices;
private double scamount;
private double disamount;
private double rounding;
private double payamount;
private double tipsPrice;
private double totamount;
private double totalMeals;
private double takeawayTotal;
private int num;//賬單數
private int person;//人數
public double getPrices() {
return prices;
}
public void setPrices(double prices) {
this.prices = prices;
}
public double getScamount() {
return scamount;
}
public void setScamount(double scamount) {
this.scamount = scamount;
}
public double getDisamount() {
return disamount;
}
public void setDisamount(double disamount) {
this.disamount = disamount;
}
public double getRounding() {
return rounding;
}
public void setRounding(double rounding) {
this.rounding = rounding;
}
public double getPayamount() {
return payamount;
}
public void setPayamount(double payamount) {
this.payamount = payamount;
}
public double getTipsPrice() {
return tipsPrice;
}
public void setTipsPrice(double tipsPrice) {
this.tipsPrice = tipsPrice;
}
public double getTotamount() {
return totamount;
}
public void setTotamount(double totamount) {
this.totamount = totamount;
}
public double getTotalMeals() {
return totalMeals;
}
public void setTotalMeals(double totalMeals) {
this.totalMeals = totalMeals;
}
public double getTakeawayTotal() {
return takeawayTotal;
}
public void setTakeawayTotal(double takeawayTotal) {
this.takeawayTotal = takeawayTotal;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getPerson() {
return person;
}
public void setPerson(int person) {
this.person = person;
}
}
}
package com.gingersoft.gsa.cloud.main.mvp.model.bean;
import java.util.List;
/**
* 首頁營業數據
*/
public class MainBusinessBean {
/**
* success : true
* sysTime : 1583994555935
* data : [{"date":"2020-03-11","totalAmount":0,"person":186,"num":46,"price":4619},{"date":"2020-03-12","totalAmount":0,"person":0,"num":0,"price":2614}]
*/
private boolean success;
private long sysTime;
private List<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 List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* date : 2020-03-11 時間
* totalAmount : 0 今日營業額
* person : 186 人數
* num : 46 訂單數
* price : 4619 項目銷售總金額
*/
private String date;//首頁信息時間,,其他地方為空
private String startingTime;//營業分析報表時間,其他地方為空
private float totalAmount;//今日營業額 淨值
private int person;
private int num;
private float price;//項目銷售總金額
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public float getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(float totalAmount) {
this.totalAmount = totalAmount;
}
public int getPerson() {
return person;
}
public void setPerson(int person) {
this.person = person;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public String getStartingTime() {
return startingTime;
}
public void setStartingTime(String startingTime) {
this.startingTime = startingTime;
}
}
}
...@@ -7,15 +7,16 @@ import java.util.List; ...@@ -7,15 +7,16 @@ import java.util.List;
* 销售分析——食品top10 * 销售分析——食品top10
*/ */
public class SalesFoodsBean { public class SalesFoodsBean {
/** /**
* success : true * success : true
* sysTime : 1582703198491 * sysTime : 1584013508073
* data : [{"sumTotal":596990.68,"sumNum":11629,"foodName":"冲绳黑糖奶盖茶","averageTotal":51.34,"percentageTotal":"100%","percentageNum":"100%"}] * data : {"salesAnalysis":[],"salesRanking":[{"productName":"青菜","price":0,"number":87,"amount":0},{"productName":"火鍋","price":200,"number":75,"amount":15000},{"productName":"牛奶","price":5,"number":40,"amount":200},{"productName":"雞米花","price":20,"number":29,"amount":580},{"productName":"豆漿","price":5,"number":25,"amount":125},{"productName":"拉麵","price":50,"number":20,"amount":1000},{"productName":"燒麥","price":5,"number":20,"amount":100},{"productName":"餃子","price":10,"number":19,"amount":190},{"productName":"包子","price":5,"number":18,"amount":90},{"productName":"抄時蔬","price":20,"number":9,"amount":180},{"productName":"煲仔飯","price":25,"number":7,"amount":175},{"productName":"牛肉炒飯","price":15,"number":6,"amount":90},{"productName":"奶茶-顯示","price":15,"number":5,"amount":75},{"productName":"王老吉","price":10,"number":5,"amount":50},{"productName":"西紅柿蛋湯","price":20,"number":4,"amount":80},{"productName":"青椒炒肉","price":20,"number":3,"amount":60},{"productName":"壽司","price":20,"number":2,"amount":40},{"productName":"¥","price":0,"number":1,"amount":0}]}
*/ */
private boolean success; private boolean success;
private long sysTime; private long sysTime;
private List<DataBean> data; private DataBean data;
public boolean isSuccess() { public boolean isSuccess() {
return success; return success;
...@@ -33,77 +34,78 @@ public class SalesFoodsBean { ...@@ -33,77 +34,78 @@ public class SalesFoodsBean {
this.sysTime = sysTime; this.sysTime = sysTime;
} }
public List<DataBean> getData() { public DataBean getData() {
return data; return data;
} }
public void setData(List<DataBean> data) { public void setData(DataBean data) {
this.data = data; this.data = data;
} }
public static class DataBean { public static class DataBean {
/** private List<?> salesAnalysis;
* sumTotal : 596990.68 private List<SalesRankingBean> salesRanking;
* sumNum : 11629
* foodName : 冲绳黑糖奶盖茶
* averageTotal : 51.34
* percentageTotal : 100%
* percentageNum : 100%
*/
private double sumTotal;
private int sumNum;
private String foodName;
private double averageTotal;
private String percentageTotal;
private String percentageNum;
public double getSumTotal() {
return sumTotal;
}
public void setSumTotal(double sumTotal) {
this.sumTotal = sumTotal;
}
public int getSumNum() {
return sumNum;
}
public void setSumNum(int sumNum) {
this.sumNum = sumNum;
}
public String getFoodName() {
return foodName;
}
public void setFoodName(String foodName) {
this.foodName = foodName;
}
public double getAverageTotal() {
return averageTotal;
}
public void setAverageTotal(double averageTotal) { public List<?> getSalesAnalysis() {
this.averageTotal = averageTotal; return salesAnalysis;
} }
public String getPercentageTotal() { public void setSalesAnalysis(List<?> salesAnalysis) {
return percentageTotal; this.salesAnalysis = salesAnalysis;
} }
public void setPercentageTotal(String percentageTotal) { public List<SalesRankingBean> getSalesRanking() {
this.percentageTotal = percentageTotal; return salesRanking;
} }
public String getPercentageNum() { public void setSalesRanking(List<SalesRankingBean> salesRanking) {
return percentageNum; this.salesRanking = salesRanking;
} }
public void setPercentageNum(String percentageNum) { public static class SalesRankingBean {
this.percentageNum = percentageNum; /**
* productName : 青菜
* price : 0.0 單價
* number : 87 數量
* amount : 0 總金額
*/
private String productName;
private double price;
private int number;
private int amount;
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 int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
} }
} }
} }
package com.gingersoft.gsa.cloud.main.mvp.model.service; package com.gingersoft.gsa.cloud.main.mvp.model.service;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessDetailsBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.PaymentMethodBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.PaymentMethodBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SalesFoodsBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SalesFoodsBean;
import java.util.Map;
import io.reactivex.Observable; import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager; import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.Query; import retrofit2.http.Query;
import retrofit2.http.QueryMap;
/** /**
* Created by Wyh on 2020/1/10. * Created by Wyh on 2020/1/10.
...@@ -19,17 +24,40 @@ import retrofit2.http.Query; ...@@ -19,17 +24,40 @@ import retrofit2.http.Query;
*/ */
public interface MainReportService { public interface MainReportService {
//支付分析報表 //支付分析報表
@Headers({"Domain-Name: wechat_report"})
@POST("wx/findPayMode" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("wx/findPayMode" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<PaymentMethodBean> getPaymentInfo(@Body RequestBody requestBody); Observable<PaymentMethodBean> getPaymentInfo(@Body RequestBody requestBody);
//銷售分析報表 //銷售分析報表
@Headers({"Domain-Name: gsa_report"})
@GET("restaurantOperation/sales/analysis" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<SalesFoodsBean> getSalesReportInfo(@QueryMap Map<String, Object> map);
//銷售分析報表
@Headers({"Domain-Name: wechat_report"})
@POST("wx/findFoodTop" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("wx/findFoodTop" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<SalesFoodsBean> getSalesReportInfo(@Body RequestBody requestBody); Observable<SalesFoodsBean> getSalesReportInfo(@Body RequestBody requestBody);
//營業信息 //營業信息
@POST("wx/doBusiness" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @Headers({"Domain-Name: gsa_report"})
Observable<HomeTurnoverBean> getRestaurantReport(@Body RequestBody requestBody); @GET("restaurantOperation/business" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
// Observable<MainBusinessBean> getRestaurantReport(@Query("restaurantId") String restaurantId);
//營業詳情
@Headers({"Domain-Name: gsa_report"})
@GET("restaurantOperation/business/dtails" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BusinessDetailsBean> getRestaurantDetails(@QueryMap Map<String, String> map);
//營業金額
@Headers({"Domain-Name: gsa_report"})
@GET("restaurantOperation/business/amount" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<MainBusinessBean> getRestaurantAmount(@QueryMap Map<String, String> map);
@Headers({"Domain-Name: wechat_report"})
@POST("wx/findOrderInfoChart" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("wx/findOrderInfoChart" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<MainOrderInfoChartBean> getOrderInfoChart(@Body RequestBody requestBody); Observable<MainOrderInfoChartBean> getOrderInfoChart(@Body RequestBody requestBody);
//獲取首頁功能列表 //獲取首頁功能列表
@GET("user/resource/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("user/resource/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<String> getRestaurantFunList(@Query("restaurantId") String restaurantId); Observable<String> getRestaurantFunList(@Query("restaurantId") String restaurantId);
......
package com.gingersoft.gsa.cloud.main.mvp.model.service; package com.gingersoft.gsa.cloud.main.mvp.model.service;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
...@@ -8,9 +7,8 @@ import io.reactivex.Observable; ...@@ -8,9 +7,8 @@ import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager; import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.Query; import retrofit2.http.Query;
...@@ -26,6 +24,7 @@ public interface SettlementService { ...@@ -26,6 +24,7 @@ public interface SettlementService {
@POST("RestaurantOperation/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("RestaurantOperation/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<SendSettlement> sendSettlement(@Body RequestBody requestBody); Observable<SendSettlement> sendSettlement(@Body RequestBody requestBody);
@Headers({"Domain-Name: settlement_report_server"})
@GET("ricepon-report/api/restaurantOperation/report" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("ricepon-report/api/restaurantOperation/report" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<SettlementReport> getSettlementReport(@Query("restaurantId") int restaurantId); Observable<SettlementReport> getSettlementReport(@Query("restaurantId") int restaurantId);
......
package com.gingersoft.gsa.cloud.main.mvp.presenter; package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application; import android.app.Application;
import android.util.Log;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans; import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.contract.HomeContract;
import com.jess.arms.integration.AppManager; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.jess.arms.di.scope.FragmentScope; import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader; 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.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
...@@ -21,14 +23,6 @@ import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; ...@@ -21,14 +23,6 @@ import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody; import okhttp3.FormBody;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.main.mvp.contract.HomeContract;
import com.jess.arms.utils.RxLifecycleUtils;
import java.util.HashMap;
import java.util.Map;
/** /**
* ================================================ * ================================================
...@@ -81,13 +75,13 @@ public class HomePresenter extends BasePresenter<HomeContract.Model, HomeContrac ...@@ -81,13 +75,13 @@ public class HomePresenter extends BasePresenter<HomeContract.Model, HomeContrac
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading()) .doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView)) .compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<HomeTurnoverBean>(mErrorHandler) { .subscribe(new ErrorHandleSubscriber<MainBusinessBean>(mErrorHandler) {
@Override @Override
public void onNext(@NonNull HomeTurnoverBean info) { public void onNext(@NonNull MainBusinessBean info) {
if (info != null && info.isSuccess()) { if (info != null && info.isSuccess()) {
if (info.getData() != null) { if (info.getData() != null) {
mRootView.loadBusinessInfo(info.getData()); // mRootView.loadBusinessInfo(info.getData());
} }
} else { } else {
mRootView.showMessage("營業報表獲取失敗"); mRootView.showMessage("營業報表獲取失敗");
......
...@@ -2,10 +2,8 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter; ...@@ -2,10 +2,8 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application; import android.app.Application;
import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract; import com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean;
import com.jess.arms.di.scope.FragmentScope; import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.http.imageloader.ImageLoader; import com.jess.arms.http.imageloader.ImageLoader;
...@@ -18,7 +16,6 @@ import javax.inject.Inject; ...@@ -18,7 +16,6 @@ import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody; import okhttp3.FormBody;
...@@ -63,22 +60,22 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT ...@@ -63,22 +60,22 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT
} }
public void getRestaurantReport(String restaurantId) { public void getRestaurantReport(String restaurantId) {
RequestBody requestBody = new FormBody.Builder() // RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", restaurantId) // .add("restaurantId", restaurantId)
.add("startTime", TimeUtils.getOldDate(-1)) // .add("startTime", TimeUtils.getOldDate(-1))
.add("endTime", TimeUtils.getCurrentTimeInString(TimeUtils.DATE_FORMAT_DATE)) // .add("endTime", TimeUtils.getCurrentTimeInString(TimeUtils.DATE_FORMAT_DATE))
.build(); // .build();
mModel.getRestaurantReport(requestBody) mModel.getRestaurantReport(restaurantId)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("")) .doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread()) .subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading()) .doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView)) .compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<HomeTurnoverBean>(mErrorHandler) { .subscribe(new ErrorHandleSubscriber<MainBusinessBean>(mErrorHandler) {
@Override @Override
public void onNext(@NonNull HomeTurnoverBean info) { public void onNext(@NonNull MainBusinessBean info) {
if (info != null && info.isSuccess()) { if (info != null && info.isSuccess()) {
if (info.getData() != null) { if (info.getData() != null) {
mRootView.loadBusinessInfo(info.getData()); mRootView.loadBusinessInfo(info.getData());
...@@ -87,18 +84,6 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT ...@@ -87,18 +84,6 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT
mRootView.showMessage("營業信息獲取失敗"); mRootView.showMessage("營業信息獲取失敗");
} }
} }
@Override
public void onComplete() {
super.onComplete();
// RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL);
}
@Override
public void onError(Throwable t) {
super.onError(t);
// RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL);
}
}); });
} }
...@@ -124,13 +109,11 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT ...@@ -124,13 +109,11 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT
@Override @Override
public void onComplete() { public void onComplete() {
super.onComplete(); super.onComplete();
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL);
} }
@Override @Override
public void onError(Throwable t) { public void onError(Throwable t) {
super.onError(t); super.onError(t);
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL);
} }
}); });
} }
......
...@@ -2,7 +2,6 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter; ...@@ -2,7 +2,6 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application; import android.app.Application;
import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract; import com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SalesFoodsBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SalesFoodsBean;
...@@ -12,14 +11,14 @@ import com.jess.arms.integration.AppManager; ...@@ -12,14 +11,14 @@ import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter; import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils; import com.jess.arms.utils.RxLifecycleUtils;
import java.util.Collections; import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody; import okhttp3.FormBody;
...@@ -64,12 +63,11 @@ public class SalesPresenter extends BasePresenter<SalesContract.Model, SalesCont ...@@ -64,12 +63,11 @@ public class SalesPresenter extends BasePresenter<SalesContract.Model, SalesCont
} }
public void getSalesReportInfo(String restaurantId, String startTime) { public void getSalesReportInfo(String restaurantId, String startTime) {
RequestBody requestBody = new FormBody.Builder() Map<String, Object> map = new HashMap<>();
.add("restaurantId", restaurantId) map.put("restaurantId", restaurantId);
.add("startTime", startTime)//TimeUtils.getYesterdayTime(TimeUtils.DATE_FORMAT_DATE) map.put("startTime", startTime);
.add("endTime", TimeUtils.getOldDate(1))//TimeUtils.getCurrentTimeInString(TimeUtils.DATE_FORMAT_DATE) map.put("endTime", TimeUtils.getOldDate(1));
.build(); mModel.getSalesReportInfo(map)
mModel.getSalesReportInfo(requestBody)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("")) .doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread()) .subscribeOn(AndroidSchedulers.mainThread())
...@@ -82,24 +80,44 @@ public class SalesPresenter extends BasePresenter<SalesContract.Model, SalesCont ...@@ -82,24 +80,44 @@ public class SalesPresenter extends BasePresenter<SalesContract.Model, SalesCont
public void onNext(@NonNull SalesFoodsBean info) { public void onNext(@NonNull SalesFoodsBean info) {
if (info != null && info.isSuccess()) { if (info != null && info.isSuccess()) {
if (info.getData() != null) { if (info.getData() != null) {
info.getData().removeAll(Collections.singleton(null)); mRootView.loadInfo(info.getData().getSalesRanking());
mRootView.loadInfo(info.getData());
} }
} else { } else {
mRootView.showMessage("銷售信息獲取失敗"); mRootView.showMessage("銷售信息獲取失敗");
} }
} }
});
}
@Override /**
public void onComplete() { * 獲取微信公眾號的報表數據
super.onComplete(); * @param startTime
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL); */
} public void getSalesReportInfo(String startTime) {
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", "26")
.add("startTime", startTime)
.add("endTime", TimeUtils.getOldDate(1))
.build();
mModel.getSalesReportInfo(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<SalesFoodsBean>(mErrorHandler) {
@Override @Override
public void onError(Throwable t) { public void onNext(@NonNull SalesFoodsBean info) {
super.onError(t); if (info != null && info.isSuccess()) {
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL); if (info.getData() != null) {
// info.getData().removeAll(Collections.singleton(null));
// mRootView.loadInfo(info.getData());
}
} else {
mRootView.showMessage("銷售信息獲取失敗");
}
} }
}); });
} }
......
package com.gingersoft.gsa.cloud.main.mvp.presenter; package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application; import android.app.Application;
import android.text.TextUtils;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans; import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader; 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.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementContract;
import com.jess.arms.utils.RxLifecycleUtils;
/** /**
* ================================================ * ================================================
...@@ -76,7 +72,6 @@ public class SettlementPresenter extends BasePresenter<SettlementContract.Model, ...@@ -76,7 +72,6 @@ public class SettlementPresenter extends BasePresenter<SettlementContract.Model,
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
super.onSubscribe(d); super.onSubscribe(d);
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL);
} }
@Override @Override
...@@ -89,18 +84,6 @@ public class SettlementPresenter extends BasePresenter<SettlementContract.Model, ...@@ -89,18 +84,6 @@ public class SettlementPresenter extends BasePresenter<SettlementContract.Model,
// mRootView.showMessage("獲取報表失敗"); // mRootView.showMessage("獲取報表失敗");
} }
} }
@Override
public void onComplete() {
super.onComplete();
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL);
}
@Override
public void onError(Throwable t) {
super.onError(t);
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL);
}
}); });
} }
} }
...@@ -3,10 +3,8 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter; ...@@ -3,10 +3,8 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter;
import android.app.Application; import android.app.Application;
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.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.main.R; import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementReportContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SendSettlement;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReportItem; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReportItem;
...@@ -14,31 +12,28 @@ import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReportItem5; ...@@ -14,31 +12,28 @@ import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReportItem5;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.SettlementReportActivity; import com.gingersoft.gsa.cloud.main.mvp.ui.activity.SettlementReportActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItem5Adapter; import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItem5Adapter;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItemAdapter; import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.SettlementReportItemAdapter;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader; 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 com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody; import okhttp3.FormBody;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementReportContract;
import com.jess.arms.utils.RxLifecycleUtils;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import java.util.ArrayList;
import java.util.List;
/** /**
* ================================================ * ================================================
...@@ -129,14 +124,16 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon ...@@ -129,14 +124,16 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon
if (dataBean != null) { if (dataBean != null) {
if (dataBean.getTable() == null || (dataBean.getTable() != null && dataBean.getTable().size() == 0)) { if (dataBean.getTable() == null || (dataBean.getTable() != null && dataBean.getTable().size() == 0)) {
mRootView.showMessage("清機成功"); mRootView.showMessage("清機成功");
getSettlementReport(); //打印清機報表
mRootView.printRepore();
} else { } else {
//還有檯未結賬 //還有檯未結賬
showSettlementErrorDialog("仍有臺號未結賬,請先結賬;" + "\n" + getTables(dataBean.getTable())); showSettlementErrorDialog("仍有臺號未結賬,請先結賬;" + "\n" + getTables(dataBean.getTable()));
} }
} else { } else {
mRootView.showMessage("清機成功"); mRootView.showMessage("清機成功");
getSettlementReport(); //打印清機報表
mRootView.printRepore();
} }
} else { } else {
mRootView.showMessage("清機失敗"); mRootView.showMessage("清機失敗");
...@@ -159,7 +156,6 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon ...@@ -159,7 +156,6 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
super.onSubscribe(d); super.onSubscribe(d);
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL);
} }
@Override @Override
...@@ -172,18 +168,6 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon ...@@ -172,18 +168,6 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon
// mRootView.showMessage("獲取報表失敗"); // mRootView.showMessage("獲取報表失敗");
} }
} }
@Override
public void onComplete() {
super.onComplete();
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL);
}
@Override
public void onError(Throwable t) {
super.onError(t);
RetrofitUrlManager.getInstance().putDomain("common", HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL);
}
}); });
} }
......
...@@ -121,7 +121,6 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N ...@@ -121,7 +121,6 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N
@Override @Override
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
// mPresenter.requestExternalStoragePermission(); // mPresenter.requestExternalStoragePermission();
//初始化側邊欄菜單項 //初始化側邊欄菜單項
initSideMenu(); initSideMenu();
......
package com.gingersoft.gsa.cloud.main.mvp.ui.activity; package com.gingersoft.gsa.cloud.main.mvp.ui.activity;
import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.ScrollView; import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.billy.cc.core.component.CC; import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.LanguageUtils; import com.gingersoft.gsa.cloud.base.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.base.utils.PrintTransitUtils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtil; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.main.R; import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2; import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerSettlementReportComponent; import com.gingersoft.gsa.cloud.main.di.component.DaggerSettlementReportComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementReportContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReport;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReportItem; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReportItem;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReportItem5; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SettlementReportItem5;
import com.gingersoft.gsa.cloud.main.mvp.presenter.SettlementReportPresenter;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseActivity; import com.jess.arms.base.BaseActivity;
import com.jess.arms.base.DefaultAdapter; import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent; import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.main.mvp.contract.SettlementReportContract;
import com.gingersoft.gsa.cloud.main.mvp.presenter.SettlementReportPresenter;
import com.jess.arms.utils.DeviceUtils; import com.jess.arms.utils.DeviceUtils;
import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
import com.qmuiteam.qmui.widget.QMUITopBar; import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
...@@ -37,12 +43,6 @@ import java.util.HashMap; ...@@ -37,12 +43,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView; import butterknife.BindView;
import butterknife.OnClick; import butterknife.OnClick;
...@@ -91,6 +91,12 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese ...@@ -91,6 +91,12 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
private SettlementReport.DataBean mSettlementReportBean; private SettlementReport.DataBean mSettlementReportBean;
private static SettlementReportActivity settlementReportActivity;
public static SettlementReportActivity getInstance() {
return settlementReportActivity;
}
@Override @Override
public void setupActivityComponent(@NonNull AppComponent appComponent) { public void setupActivityComponent(@NonNull AppComponent appComponent) {
...@@ -109,7 +115,6 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese ...@@ -109,7 +115,6 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
@Override @Override
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
} }
@Override @Override
...@@ -383,6 +388,30 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese ...@@ -383,6 +388,30 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
}); });
} }
@Override
public void printRepore() {
//清機成功,打印
PrintTransitUtils.getInstance().setPrintView(scrollView);
CC.obtainBuilder("Component.Print")
.addParam("type", 4)//清機打印
.setActionName("printActivity")
.build()
.callAsyncCallbackOnMainThread((cc, result) -> {
//打印完之後,清除view
PrintTransitUtils.getInstance().setPrintView(null);
if (mPresenter != null) {
mPresenter.getSettlementReport();
}
// Log.e("error", "是否成功打印:" + result.isSuccess());
// if (result.isSuccess()) {
// //打印成功
// showMessage("打印成功!");
// } else {
// showMessage("打印失敗!");
// }
});
}
private Map<String, SettlementReport.DataBean.AnalysisBean> getAnalysisBeanMap(List<SettlementReport.DataBean.AnalysisBean> analysisBeanList) { private Map<String, SettlementReport.DataBean.AnalysisBean> getAnalysisBeanMap(List<SettlementReport.DataBean.AnalysisBean> analysisBeanList) {
Map<String, SettlementReport.DataBean.AnalysisBean> analysisBeanMap = new HashMap<>(); Map<String, SettlementReport.DataBean.AnalysisBean> analysisBeanMap = new HashMap<>();
for (int i = 0; i < analysisBeanList.size(); i++) { for (int i = 0; i < analysisBeanList.size(); i++) {
......
...@@ -2,29 +2,36 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.adapter; ...@@ -2,29 +2,36 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.adapter;
import android.content.Context; import android.content.Context;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder; import com.chad.library.adapter.base.BaseViewHolder;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.main.R; import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.SalesFoodsBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.SalesFoodsBean;
import java.util.List; import java.util.List;
import androidx.annotation.Nullable; import static java.math.BigDecimal.ROUND_HALF_UP;
/** /**
* Created by Wyh on 2020/2/24. * Created by Wyh on 2020/2/24.
*/ */
public class FoodRankingAdapter extends BaseQuickAdapter<SalesFoodsBean.DataBean, BaseViewHolder> { public class FoodRankingAdapter extends BaseQuickAdapter<SalesFoodsBean.DataBean.SalesRankingBean, BaseViewHolder> {
private Context mContext; private Context mContext;
private double totalAmount;//所有菜品加起來的銷售額
private int totalNum;//所有菜品加起來的銷售數量
public FoodRankingAdapter(Context mContext, @Nullable List<SalesFoodsBean.DataBean> data) { public FoodRankingAdapter(Context mContext, @Nullable List<SalesFoodsBean.DataBean.SalesRankingBean> data, double totalAmount, int totalNum) {
super(R.layout.item_food_ranking, data); super(R.layout.item_food_ranking, data);
this.mContext = mContext; this.mContext = mContext;
this.totalAmount = totalAmount;
this.totalNum = totalNum;
} }
@Override @Override
protected void convert(BaseViewHolder helper, SalesFoodsBean.DataBean item) { protected void convert(BaseViewHolder helper, SalesFoodsBean.DataBean.SalesRankingBean item) {
if (helper.getAdapterPosition() == 0) { if (helper.getAdapterPosition() == 0) {
helper.setTextColor(R.id.tv_ranking_foodname, mContext.getResources().getColor(R.color.theme_hint_color)); helper.setTextColor(R.id.tv_ranking_foodname, mContext.getResources().getColor(R.color.theme_hint_color));
helper.setTextColor(R.id.tv_ranking_food_sales_num, mContext.getResources().getColor(R.color.theme_hint_color)); helper.setTextColor(R.id.tv_ranking_food_sales_num, mContext.getResources().getColor(R.color.theme_hint_color));
...@@ -47,12 +54,12 @@ public class FoodRankingAdapter extends BaseQuickAdapter<SalesFoodsBean.DataBean ...@@ -47,12 +54,12 @@ public class FoodRankingAdapter extends BaseQuickAdapter<SalesFoodsBean.DataBean
helper.setTextColor(R.id.tv_ranking_proportion_quantity, mContext.getResources().getColor(R.color.color_3c)); helper.setTextColor(R.id.tv_ranking_proportion_quantity, mContext.getResources().getColor(R.color.color_3c));
helper.setTextColor(R.id.tv_ranking_ratio_amount, mContext.getResources().getColor(R.color.color_3c)); helper.setTextColor(R.id.tv_ranking_ratio_amount, mContext.getResources().getColor(R.color.color_3c));
helper.setText(R.id.tv_ranking_food_unit_price, item.getAverageTotal() + ""); helper.setText(R.id.tv_ranking_food_unit_price, item.getPrice() + "");
helper.setText(R.id.tv_ranking_foodname, item.getFoodName()); helper.setText(R.id.tv_ranking_foodname, item.getProductName());
helper.setText(R.id.tv_ranking_food_sales_num, item.getSumNum() + ""); helper.setText(R.id.tv_ranking_food_sales_num, item.getNumber() + "");
helper.setText(R.id.tv_ranking_food_sales_amount, item.getSumTotal() + ""); helper.setText(R.id.tv_ranking_food_sales_amount, item.getAmount() + "");
helper.setText(R.id.tv_ranking_proportion_quantity, item.getPercentageNum()); helper.setText(R.id.tv_ranking_proportion_quantity, (MoneyUtil.divide(item.getNumber(), totalNum, 2, ROUND_HALF_UP) * 100) + "%");
helper.setText(R.id.tv_ranking_ratio_amount, item.getPercentageTotal()); helper.setText(R.id.tv_ranking_ratio_amount, (MoneyUtil.divide(item.getAmount(), totalAmount, 2, ROUND_HALF_UP) * 100) + "%");
} }
} }
} }
...@@ -3,6 +3,8 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.adapter; ...@@ -3,6 +3,8 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.adapter;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder; import com.chad.library.adapter.base.BaseViewHolder;
import com.gingersoft.gsa.cloud.main.R; import com.gingersoft.gsa.cloud.main.R;
...@@ -10,22 +12,20 @@ import com.gingersoft.gsa.cloud.main.mvp.model.bean.SalesFoodsBean; ...@@ -10,22 +12,20 @@ import com.gingersoft.gsa.cloud.main.mvp.model.bean.SalesFoodsBean;
import java.util.List; import java.util.List;
import androidx.annotation.Nullable;
/** /**
* Created by Wyh on 2020/2/24. * Created by Wyh on 2020/2/24.
* 排序編號adapter * 排序編號adapter
*/ */
public class SortNumberingAdapter extends BaseQuickAdapter<SalesFoodsBean.DataBean, BaseViewHolder> { public class SortNumberingAdapter extends BaseQuickAdapter<SalesFoodsBean.DataBean.SalesRankingBean, BaseViewHolder> {
private Context mContext; private Context mContext;
public SortNumberingAdapter(Context mContext, @Nullable List<SalesFoodsBean.DataBean> data) { public SortNumberingAdapter(Context mContext, @Nullable List<SalesFoodsBean.DataBean.SalesRankingBean> data) {
super(R.layout.item_ranking_numbering, data); super(R.layout.item_ranking_numbering, data);
this.mContext = mContext; this.mContext = mContext;
} }
@Override @Override
protected void convert(BaseViewHolder helper, SalesFoodsBean.DataBean item) { protected void convert(BaseViewHolder helper, SalesFoodsBean.DataBean.SalesRankingBean item) {
helper.getView(R.id.iv_ranking_numbering).setVisibility(View.GONE); helper.getView(R.id.iv_ranking_numbering).setVisibility(View.GONE);
if (helper.getAdapterPosition() == 0) { if (helper.getAdapterPosition() == 0) {
helper.setText(R.id.tv_ranking_numbering, "排序"); helper.setText(R.id.tv_ranking_numbering, "排序");
......
...@@ -23,7 +23,7 @@ import com.gingersoft.gsa.cloud.main.R2; ...@@ -23,7 +23,7 @@ import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerBusinessReportComponent; import com.gingersoft.gsa.cloud.main.di.component.DaggerBusinessReportComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract; import com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.presenter.BusinessReportPresenter; import com.gingersoft.gsa.cloud.main.mvp.presenter.BusinessReportPresenter;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.BusinessInfoAdapter; import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.BusinessInfoAdapter;
import com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AAChartModel; import com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AAChartModel;
...@@ -39,6 +39,7 @@ import com.jess.arms.utils.ArmsUtils; ...@@ -39,6 +39,7 @@ import com.jess.arms.utils.ArmsUtils;
import java.text.ParseException; import java.text.ParseException;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -100,6 +101,7 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -100,6 +101,7 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
@Override @Override
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
//獲取一段時間內的營業信息,默認獲取七天的數據 //獲取一段時間內的營業信息,默認獲取七天的數據
mPresenter.getRestaurantAmount(GsaCloudApplication.getRestaurantId(mContext) + "", TimeUtils.getOldDate(-6), TimeUtils.getOldDate(1));
mPresenter.getRestaurantBusinessInfo(GsaCloudApplication.getRestaurantId(mContext) + "", TimeUtils.getOldDate(-6), TimeUtils.getOldDate(1)); mPresenter.getRestaurantBusinessInfo(GsaCloudApplication.getRestaurantId(mContext) + "", TimeUtils.getOldDate(-6), TimeUtils.getOldDate(1));
mRestaurantName.setText(GsaCloudApplication.getRestaurantName(mContext)); mRestaurantName.setText(GsaCloudApplication.getRestaurantName(mContext));
...@@ -176,12 +178,11 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -176,12 +178,11 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
} }
/** /**
* 加載營業信息圖表 * 加載營業信息圖表
*/ */
@Override @Override
public void loadChart(Map<String, HomeTurnoverBean.DataBean> data) { public void loadChart(List<MainBusinessBean.DataBean> data) {
Object[] chartData = new Object[7]; Object[] chartData = new Object[7];
String[] xData = new String[7]; String[] xData = new String[7];
...@@ -189,19 +190,26 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -189,19 +190,26 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
xData[i] = TimeUtils.getDistanceDate(-6 + i, Calendar.DATE, TimeUtils.DEFAULT_DATE_MD); xData[i] = TimeUtils.getDistanceDate(-6 + i, Calendar.DATE, TimeUtils.DEFAULT_DATE_MD);
} }
Map<String, MainBusinessBean.DataBean> map = new HashMap<>();
for (int i = 0; i < data.size(); i++) {
map.put(data.get(i).getStartingTime(), data.get(i));
}
double yAxisTickInterval = 0; double yAxisTickInterval = 0;
//第一條線 //第一條線
for (int i = 0; i < 7; i++) { for (int i = 0; i < 7; i++) {
//通過今年年份+月份+日期,獲取對應的對象 //通過今年年份+月份+日期,獲取對應的對象
HomeTurnoverBean.DataBean bean = data.get(TimeUtils.getDistanceDate(0, Calendar.YEAR, DEFAULT_DATE_Y) + xData[i]); MainBusinessBean.DataBean bean = map.get(TimeUtils.getDistanceDate(0, Calendar.YEAR, DEFAULT_DATE_Y) + xData[i]);
if (bean != null && bean.getBusiness_amount() != null) { if (bean != null) {
chartData[i] = Integer.parseInt(bean.getBusiness_amount()); chartData[i] = bean.getTotalAmount();
yAxisTickInterval = Math.max(yAxisTickInterval, Integer.parseInt(bean.getBusiness_amount())); yAxisTickInterval = Math.max(yAxisTickInterval, bean.getTotalAmount());
} else { } else {
chartData[i] = 0; chartData[i] = 0;
} }
} }
//配置線形圖
AAChartModel aaChartModel = configureColorfulGradientSplineChart(xData, chartData, (int) (yAxisTickInterval / 6)); AAChartModel aaChartModel = configureColorfulGradientSplineChart(xData, chartData, (int) (yAxisTickInterval / 6));
//如果這幾天的數據都為0,設置默認最大數為18000,間隔為3000
if (yAxisTickInterval == 0) { if (yAxisTickInterval == 0) {
aaChartModel.yAxisMax(18000f); aaChartModel.yAxisMax(18000f);
aaChartModel.yAxisTickInterval(3000); aaChartModel.yAxisTickInterval(3000);
...@@ -245,7 +253,7 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -245,7 +253,7 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
.yAxisLineColor("#018EF2") .yAxisLineColor("#018EF2")
.series(new AASeriesElement[]{ .series(new AASeriesElement[]{
new AASeriesElement() new AASeriesElement()
.name("今天") .name("營業額")
.lineWidth(4f) .lineWidth(4f)
.color(linearGradientColor) .color(linearGradientColor)
.data(todayData) .data(todayData)
...@@ -253,6 +261,7 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -253,6 +261,7 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
); );
} }
@Override @Override
public void loadAdapter(List<BusinessBean> businessBeans) { public void loadAdapter(List<BusinessBean> businessBeans) {
if (businessInfoAdapter == null) { if (businessInfoAdapter == null) {
...@@ -284,7 +293,8 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -284,7 +293,8 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
TimePickerUtils.showReportTimePicker(mContext, cal, (date, v1) -> TimePickerUtils.showReportTimePicker(mContext, cal, (date, v1) ->
{ {
mTvStartTime.setText(TimeUtils.DATE_FORMAT_DATE.format(date)); mTvStartTime.setText(TimeUtils.DATE_FORMAT_DATE.format(date));
mPresenter.getRestaurantBusinessInfo("26", mTvStartTime.getText().toString(), TimeUtils.getOldDate(0)); mPresenter.getRestaurantAmount(GsaCloudApplication.getRestaurantId(mContext) + "", mTvStartTime.getText().toString(), TimeUtils.getOldDate(1));
mPresenter.getRestaurantBusinessInfo(GsaCloudApplication.getRestaurantId(mContext) + "", mTvStartTime.getText().toString(), TimeUtils.getOldDate(1));
}); });
} }
} }
......
...@@ -10,15 +10,19 @@ import android.view.ViewGroup; ...@@ -10,15 +10,19 @@ import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil; import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils; import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.main.R; import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.R2; import com.gingersoft.gsa.cloud.main.R2;
import com.gingersoft.gsa.cloud.main.di.component.DaggerMainTopComponent; import com.gingersoft.gsa.cloud.main.di.component.DaggerMainTopComponent;
import com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract; import com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainOrderInfoChartBean;
import com.gingersoft.gsa.cloud.main.mvp.presenter.MainTopPresenter; import com.gingersoft.gsa.cloud.main.mvp.presenter.MainTopPresenter;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.NewMainActivity; import com.gingersoft.gsa.cloud.main.mvp.ui.activity.NewMainActivity;
...@@ -37,8 +41,6 @@ import com.jess.arms.utils.ArmsUtils; ...@@ -37,8 +41,6 @@ import com.jess.arms.utils.ArmsUtils;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
...@@ -117,13 +119,20 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M ...@@ -117,13 +119,20 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
@Override @Override
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
getInfo(); // getInfo();
time.setText(TimeUtils.getCurrentTimeInString(TimeUtils.dateFormatYMDE)); time.setText(TimeUtils.getCurrentTimeInString(TimeUtils.dateFormatYMDE));
} }
private void getInfo() { private void getInfo() {
mPresenter.getRestaurantReport(GsaCloudApplication.getRestaurantId(mContext) + "");//GsaCloudApplication.getRestaurantId(mContext) 獲取餐廳營業信息
mPresenter.getOrderInfoChart(GsaCloudApplication.getRestaurantId(mContext) + ""); mPresenter.getOrderInfoChart(GsaCloudApplication.getRestaurantId(mContext) + "");
mPresenter.getRestaurantReport(GsaCloudApplication.getRestaurantId(mContext) + "");//GsaCloudApplication.getRestaurantId(mContext) 獲取餐廳營業信息
}
@Override
public void onResume() {
super.onResume();
getInfo();
} }
/** /**
...@@ -206,44 +215,60 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M ...@@ -206,44 +215,60 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
} }
@Override @Override
public void loadBusinessInfo(Map<String, HomeTurnoverBean.DataBean> dataBeanMap) { public void loadBusinessInfo(List<MainBusinessBean.DataBean> dataBeans) {
//通過今天的日期取得今天的報表信息 MainBusinessBean.DataBean todayBean = null;
HomeTurnoverBean.DataBean bean = dataBeanMap.get(TimeUtils.getCurrentTimeInString(TimeUtils.DATE_FORMAT_DATE));//TimeUtils.getCurrentTimeInString(TimeUtils.DATE_FORMAT_DATE) MainBusinessBean.DataBean yesterdayBean = null;
HomeTurnoverBean.DataBean yesterdayBean = dataBeanMap.get(TimeUtils.getOldDate(-1));//TimeUtils.getCurrentTimeInString(TimeUtils.DATE_FORMAT_DATE) for (MainBusinessBean.DataBean dataBean : dataBeans) {
if (bean != null) { if (!TextUtil.isEmptyOrNullOrUndefined(dataBean.getDate())) {
tvTurnover.setText(bean.getBusiness_amount()); if (dataBean.getDate().equals(TimeUtils.getOldDate(0))) {
tvProjectAmount.setText(bean.getSales()); todayBean = dataBean;
tvConsumersNumber.setText(bean.getPeople()); } else if (dataBean.getDate().equals(TimeUtils.getOldDate(-1))) {
tvBillNumber.setText(bean.getNumber_bill()); yesterdayBean = dataBean;
if (Float.parseFloat(bean.getPeople()) != 0) { }
}
}
if (todayBean != null) {
tvTurnover.setText(String.valueOf(todayBean.getTotalAmount()));//今日營業額,淨值
tvProjectAmount.setText(String.valueOf(todayBean.getPrice()));
tvConsumersNumber.setText(String.valueOf(todayBean.getPerson()));
tvBillNumber.setText(String.valueOf(todayBean.getNum()));
if (todayBean.getPerson() != 0) {
//人均消費 //人均消費
tvPerCapitaConsumption.setText(Float.parseFloat(bean.getBusiness_amount()) / Float.parseFloat(bean.getPeople()) + ""); tvPerCapitaConsumption.setText(String.valueOf(MoneyUtil.totalFoodPrice(todayBean.getPrice() / todayBean.getPerson())));
} else {
tvPerCapitaConsumption.setText(String.valueOf(0));
} }
if (Integer.parseInt(bean.getNumber_bill()) != 0) { if (todayBean.getNum() != 0) {
//每單平均消費 //每單平均消費
tvAveragePerOrder.setText(Float.parseFloat(bean.getBusiness_amount()) / Integer.parseInt(bean.getNumber_bill()) + ""); tvAveragePerOrder.setText(String.valueOf(MoneyUtil.totalFoodPrice(todayBean.getPrice() / todayBean.getNum())));
} else {
tvAveragePerOrder.setText(String.valueOf(0));
} }
//通過今天的日期取得今天的報表信息
if (yesterdayBean != null) { if (yesterdayBean != null) {
double turnover = MoneyUtil.sub(Double.parseDouble(bean.getBusiness_amount()), Double.parseDouble(yesterdayBean.getBusiness_amount())); //获得昨日和今日營業額的差,淨值
double turnover = MoneyUtil.sub(todayBean.getTotalAmount(), yesterdayBean.getTotalAmount());
ivTurnoverTrend.setVisibility(View.VISIBLE); ivTurnoverTrend.setVisibility(View.VISIBLE);
ivTurnoverTrend.setImageResource(getTrendImg(turnover)); ivTurnoverTrend.setImageResource(getTrendImg(turnover));
tvTurnoverTrend.setText(String.format(getString(R.string.format_one_point), turnover)); tvTurnoverTrend.setText(String.format(getString(R.string.format_one_point), Math.abs(turnover)));
double sales = MoneyUtil.sub(Double.parseDouble(bean.getSales()), Double.parseDouble(yesterdayBean.getSales())); //項目總金額
tvProjectAmountTrend.setText(String.format(getString(R.string.format_one_point), sales)); double sales = MoneyUtil.sub(todayBean.getPrice(), yesterdayBean.getPrice());
tvProjectAmountTrend.setText(String.format(getString(R.string.format_one_point), Math.abs(sales)));
ivProjectAmountState.setVisibility(View.VISIBLE); ivProjectAmountState.setVisibility(View.VISIBLE);
ivProjectAmountState.setImageResource(getTrendImg(sales)); ivProjectAmountState.setImageResource(getTrendImg(sales));
int people = Integer.parseInt(bean.getPeople()) - Integer.parseInt(yesterdayBean.getPeople()); //人數
int people = MoneyUtil.sub(todayBean.getPerson(), yesterdayBean.getPerson());
ivPeopleTrend.setImageResource(getTrendImg(people)); ivPeopleTrend.setImageResource(getTrendImg(people));
ivPeopleTrend.setVisibility(View.VISIBLE); ivPeopleTrend.setVisibility(View.VISIBLE);
tvPeopleTrend.setText(people + ""); tvPeopleTrend.setText(String.valueOf(Math.abs(people)));
int billNum = Integer.parseInt(bean.getNumber_bill()) - Integer.parseInt(yesterdayBean.getNumber_bill()); //賬單數
int billNum = todayBean.getNum() - yesterdayBean.getNum();
ivBillTrend.setImageResource(getTrendImg(billNum)); ivBillTrend.setImageResource(getTrendImg(billNum));
ivBillTrend.setVisibility(View.VISIBLE); ivBillTrend.setVisibility(View.VISIBLE);
tvBillTrend.setText(billNum + ""); tvBillTrend.setText(String.valueOf(Math.abs(billNum)));
} }
} }
} }
...@@ -357,12 +382,10 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M ...@@ -357,12 +382,10 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
} }
private int getTrendImg(double amount) { private int getTrendImg(double amount) {
if (amount > 0) { if (amount >= 0) {
return R.drawable.ic_rise; return R.drawable.ic_rise;
} else if (amount < 0) {
return R.drawable.ic_down;
} else { } else {
return -1; return R.drawable.ic_down;
} }
} }
......
...@@ -9,7 +9,14 @@ import android.view.View; ...@@ -9,7 +9,14 @@ 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 androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.time.TimePickerUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimePickerUtils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils; import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
...@@ -40,15 +47,11 @@ import java.util.ArrayList; ...@@ -40,15 +47,11 @@ import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView; import butterknife.BindView;
import butterknife.OnClick; import butterknife.OnClick;
import static com.jess.arms.utils.Preconditions.checkNotNull; import static com.jess.arms.utils.Preconditions.checkNotNull;
import static java.math.BigDecimal.ROUND_HALF_UP;
/** /**
...@@ -101,7 +104,6 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales ...@@ -101,7 +104,6 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales
@Override @Override
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
mPresenter.getSalesReportInfo(GsaCloudApplication.getRestaurantId(mContext) + "", TimeUtils.getYear(-1)); mPresenter.getSalesReportInfo(GsaCloudApplication.getRestaurantId(mContext) + "", TimeUtils.getYear(-1));
mTvStartTime.setText(TimeUtils.getYear(-1)); mTvStartTime.setText(TimeUtils.getYear(-1));
mTvEndTime.setText(TimeUtils.getOldDate(0)); mTvEndTime.setText(TimeUtils.getOldDate(0));
} }
...@@ -175,10 +177,19 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales ...@@ -175,10 +177,19 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales
} }
private double totalAmount = 0;//所有菜品加起來的銷售額
private int totalNum = 0;//所有菜品加起來的銷售數量
@Override @Override
public void loadInfo(List<SalesFoodsBean.DataBean> info) { public void loadInfo(List<SalesFoodsBean.DataBean.SalesRankingBean> salesRanking) {
List<SalesFoodsBean.DataBean> rankings = new ArrayList<>(info); for (SalesFoodsBean.DataBean.SalesRankingBean salesRankingBean : salesRanking) {
rankings.add(0, new SalesFoodsBean.DataBean()); totalAmount = MoneyUtil.sum(totalAmount, salesRankingBean.getAmount());
totalNum = totalNum + salesRankingBean.getNumber();
}
List<SalesFoodsBean.DataBean.SalesRankingBean> rankings = new ArrayList<>(salesRanking);
rankings.add(0, new SalesFoodsBean.DataBean.SalesRankingBean());
if (mSortNumberingAdapter == null) { if (mSortNumberingAdapter == null) {
//序號adapter //序號adapter
rvSortNumbering.setLayoutManager(new LinearLayoutManager(mContext) { rvSortNumbering.setLayoutManager(new LinearLayoutManager(mContext) {
...@@ -202,15 +213,15 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales ...@@ -202,15 +213,15 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales
}; };
lm.setOrientation(RecyclerView.VERTICAL); lm.setOrientation(RecyclerView.VERTICAL);
rvFoodRanking.setLayoutManager(lm); rvFoodRanking.setLayoutManager(lm);
foodRankingAdapter = new FoodRankingAdapter(mContext, rankings); foodRankingAdapter = new FoodRankingAdapter(mContext, rankings, totalAmount, totalNum);
rvFoodRanking.setAdapter(foodRankingAdapter); rvFoodRanking.setAdapter(foodRankingAdapter);
} else { } else {
foodRankingAdapter.setNewData(rankings); foodRankingAdapter.setNewData(rankings);
} }
loadChart(info); loadChart(salesRanking);
} }
private void loadChart(List<SalesFoodsBean.DataBean> info) { private void loadChart(List<SalesFoodsBean.DataBean.SalesRankingBean> info) {
//是否以百分比顯示值 //是否以百分比顯示值
salesChart.setUsePercentValues(true); salesChart.setUsePercentValues(true);
//不顯示右側底部小字 //不顯示右側底部小字
...@@ -269,14 +280,17 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales ...@@ -269,14 +280,17 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales
setData(info); setData(info);
} }
private void setData(List<SalesFoodsBean.DataBean> info) { private void setData(List<SalesFoodsBean.DataBean.SalesRankingBean> info) {
//計算總和
ArrayList<PieEntry> entries = new ArrayList<>(); ArrayList<PieEntry> entries = new ArrayList<>();
// NOTE: The order of the entries when being added to the entries array determines their position around the center of // NOTE: The order of the entries when being added to the entries array determines their position around the center of
// the chart. // the chart.
if (info != null) { if (info != null) {
for (int i = 0; i < info.size(); i++) { for (int i = 0; i < info.size(); i++) {
if (info.get(i) != null) if (info.get(i) != null) {
entries.add(new PieEntry(Float.parseFloat(info.get(i).getPercentageTotal().replace("%", "")), info.get(i).getFoodName())); //金額佔比
entries.add(new PieEntry(MoneyUtil.divide(info.get(i).getAmount(), totalAmount, 2, ROUND_HALF_UP), info.get(i).getProductName()));
}
} }
} }
PieDataSet dataSet = new PieDataSet(entries, "Election Results"); PieDataSet dataSet = new PieDataSet(entries, "Election Results");
...@@ -345,4 +359,6 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales ...@@ -345,4 +359,6 @@ public class SalesFragment extends BaseFragment<SalesPresenter> implements Sales
}); });
} }
} }
} }
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<com.google.android.material.tabs.TabLayout <com.google.android.material.tabs.TabLayout
android:id="@+id/table_layout" android:id="@+id/table_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/dp_42" android:layout_height="@dimen/tabIndicator_height"
app:tabIndicator="@drawable/tablayout_indicator" app:tabIndicator="@drawable/tablayout_indicator"
app:tabIndicatorColor="@color/theme_color" app:tabIndicatorColor="@color/theme_color"
app:tabIndicatorFullWidth="false"/> app:tabIndicatorFullWidth="false"/>
......
...@@ -13,88 +13,89 @@ ...@@ -13,88 +13,89 @@
android:id="@+id/scrollView" android:id="@+id/scrollView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fillViewport="true" android:layout_marginTop="?attr/qmui_topbar_height"
android:layout_marginBottom="@dimen/dp_45" android:layout_marginBottom="@dimen/dp_45"
android:background="@color/theme_white_color" android:background="@color/theme_white_color"
android:layout_marginTop="?attr/qmui_topbar_height"> android:descendantFocusability="beforeDescendants"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="@dimen/dp_10">
<TextView
android:id="@+id/tv_last_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingBottom="@dimen/dp_5"
android:text="上次清機時間:2020-3-1 21:59:18"
android:textColor="@color/red"
android:textSize="@dimen/sp_16" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:padding="@dimen/dp_10"
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
android:id="@+id/tv_last_time" android:id="@+id/tv_restaurant_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:text="店鋪名稱:gingersoft"
android:paddingBottom="@dimen/dp_5" android:textColor="@color/black"
android:text="上次清機時間:2020-3-1 21:59:18"
android:textColor="@color/red"
android:textSize="@dimen/sp_16" /> android:textSize="@dimen/sp_16" />
<LinearLayout <TextView
android:id="@+id/tv_business_area_title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:text="店鋪名稱:gingersoft"
android:textColor="@color/black"
<TextView android:textSize="@dimen/sp_16" />
android:id="@+id/tv_restaurant_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="店鋪名稱:gingersoft"
android:textColor="@color/black"
android:textSize="@dimen/sp_16" />
<TextView
android:id="@+id/tv_business_area_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="店鋪名稱:gingersoft"
android:textColor="@color/black"
android:textSize="@dimen/sp_16" />
<TextView
android:id="@+id/tv_start_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:text=""
android:textColor="@color/black"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_end_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:text=""
android:textColor="@color/black"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<View <TextView
android:id="@+id/tv_start_time"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/dp_0_5" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8" android:layout_marginTop="@dimen/dp_5"
android:background="@color/theme_grey_color" /> android:text=""
android:textColor="@color/black"
<!-- <com.gingersoft.gsa.cloud.base.widget.NoScrollRecyclerView--> android:textSize="@dimen/sp_14" />
<!-- android:id="@+id/rv_settlement_report_item"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:divider="@null"-->
<!-- android:fadeScrollbars="false" />-->
<com.gingersoft.gsa.cloud.base.widget.NoScrollRecyclerView <TextView
android:id="@+id/rv_settlement_report_item2" android:id="@+id/tv_end_time"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:divider="@null" android:layout_marginTop="@dimen/dp_5"
android:paddingTop="@dimen/dp_8" android:text=""
android:fadeScrollbars="false" /> android:textColor="@color/black"
android:textSize="@dimen/sp_14" />
</LinearLayout> </LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0_5"
android:layout_marginTop="@dimen/dp_8"
android:background="@color/theme_grey_color" />
<!-- <com.gingersoft.gsa.cloud.base.widget.NoScrollRecyclerView-->
<!-- android:id="@+id/rv_settlement_report_item"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:divider="@null"-->
<!-- android:fadeScrollbars="false" />-->
<com.gingersoft.gsa.cloud.base.widget.NoScrollRecyclerView
android:id="@+id/rv_settlement_report_item2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:fadeScrollbars="false"
android:paddingTop="@dimen/dp_8" />
</LinearLayout>
</ScrollView> </ScrollView>
<com.qmuiteam.qmui.alpha.QMUIAlphaButton <com.qmuiteam.qmui.alpha.QMUIAlphaButton
......
...@@ -220,7 +220,7 @@ ...@@ -220,7 +220,7 @@
android:text="较昨日:" android:text="较昨日:"
android:textColor="#3c3c3c" android:textColor="#3c3c3c"
android:textSize="@dimen/sp_12" android:textSize="@dimen/sp_12"
android:visibility="invisible" /> android:visibility="gone" />
</LinearLayout> </LinearLayout>
<!-- 消費人數--> <!-- 消費人數-->
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20" android:layout_marginTop="@dimen/dp_20"
android:singleLine="true"
android:textColor="@color/theme_color" android:textColor="@color/theme_color"
android:textSize="@dimen/sp_17" /> android:textSize="@dimen/sp_17" />
...@@ -24,9 +25,10 @@ ...@@ -24,9 +25,10 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_5" android:layout_marginTop="@dimen/dp_5"
android:layout_marginBottom="@dimen/dp_20"
android:layout_weight="1" android:layout_weight="1"
android:singleLine="true"
android:textColor="@color/color_3c" android:textColor="@color/color_3c"
android:layout_marginBottom="@dimen/dp_20"
android:textSize="@dimen/sp_12" /> android:textSize="@dimen/sp_12" />
<include layout="@layout/include_horizontal_color_ccc_dividing_line" /> <include layout="@layout/include_horizontal_color_ccc_dividing_line" />
......
...@@ -7,12 +7,20 @@ ...@@ -7,12 +7,20 @@
android:name=".mvp.ui.activity.IpPrintActivity" android:name=".mvp.ui.activity.IpPrintActivity"
android:launchMode="singleTop" android:launchMode="singleTop"
android:theme="@style/print_TranslucentTheme" /> android:theme="@style/print_TranslucentTheme" />
<activity <activity
android:name=".mvp.ui.activity.PrintActivity" android:name=".mvp.ui.activity.PrintActivity"
android:launchMode="singleTop" android:launchMode="singleTop"
android:theme="@style/print_TranslucentTheme" /> android:theme="@style/print_TranslucentTheme" />
<activity android:name=".mvp.ui.activity.PrinterListActivity" /> <activity android:name=".mvp.ui.activity.PrinterListActivity" />
<activity android:name=".mvp.ui.activity.PrinterAddActivity" /> <activity android:name=".mvp.ui.activity.PrinterAddActivity" />
<meta-data
android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
</application> </application>
</manifest> </manifest>
...@@ -6,22 +6,27 @@ ...@@ -6,22 +6,27 @@
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<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" />
<application <application
android:name=".MyApp" android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_logo" android:roundIcon="@mipmap/ic_logo"
android:supportsRtl="true" android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_android"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<!-- <activity-->
<!-- android:name=".mvp.ui.activity.PrintActivity"-->
<!-- android:theme="@style/print_TranslucentTheme" />-->
<activity android:name=".mvp.ui.activity.PrintActivity" /> <activity android:name=".mvp.ui.activity.PrintActivity" />
<activity android:name=".mvp.ui.activity.PrinterAddActivity" />
<activity <activity
android:name=".mvp.ui.activity.IpPrintActivity" android:name=".mvp.ui.activity.IpPrintActivity"
android:theme="@style/print_TranslucentTheme" /> <!-- PrinterListActivity android:theme="@style/print_TranslucentTheme" --> android:theme="@style/print_TranslucentTheme" />
<activity android:name=".mvp.ui.activity.PrinterAddActivity"> <activity android:name=".mvp.ui.activity.PrinterListActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
...@@ -30,6 +35,9 @@ ...@@ -30,6 +35,9 @@
</intent-filter> </intent-filter>
</activity> </activity>
<meta-data
android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
</application> </application>
</manifest> </manifest>
\ No newline at end of file
...@@ -3,6 +3,8 @@ package com.joe.print; ...@@ -3,6 +3,8 @@ package com.joe.print;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.util.Log;
import android.view.View;
import com.billy.cc.core.component.CC; import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult; import com.billy.cc.core.component.CCResult;
......
package com.joe.print.di.component;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.di.scope.FragmentScope;
import com.joe.print.di.module.IpPrintListActivityModule;
import com.joe.print.mvp.ui.fragment.IpPrintListActivityFragment;
import dagger.Component;
@FragmentScope
@Component(modules = IpPrintListActivityModule.class, dependencies = AppComponent.class)
public interface IpPrintListActivityComponent {
void inject(IpPrintListActivityFragment fragment);
}
\ No newline at end of file
package com.joe.print.di.component;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.joe.print.di.module.LocalPrintModule;
import com.jess.arms.di.scope.FragmentScope;
import com.joe.print.mvp.ui.fragment.LocalPrintFragment;
@FragmentScope
@Component(modules = LocalPrintModule.class, dependencies = AppComponent.class)
public interface LocalPrintComponent {
void inject(LocalPrintFragment fragment);
}
\ No newline at end of file
package com.joe.print.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Module;
import dagger.Provides;
import com.joe.print.mvp.contract.IpPrintListActivityContract;
import com.joe.print.mvp.model.IpPrintListActivityModel;
@Module
public class IpPrintListActivityModule {
private IpPrintListActivityContract.View view;
/**
* 构建IpPrintListActivityModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public IpPrintListActivityModule(IpPrintListActivityContract.View view) {
this.view = view;
}
@FragmentScope
@Provides
IpPrintListActivityContract.View provideIpPrintListActivityView() {
return this.view;
}
@FragmentScope
@Provides
IpPrintListActivityContract.Model provideIpPrintListActivityModel(IpPrintListActivityModel model) {
return model;
}
}
\ No newline at end of file
package com.joe.print.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Module;
import dagger.Provides;
import com.joe.print.mvp.contract.LocalPrintContract;
import com.joe.print.mvp.model.LocalPrintModel;
@Module
public class LocalPrintModule {
private LocalPrintContract.View view;
/**
* 构建LocalPrintModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
*
* @param view
*/
public LocalPrintModule(LocalPrintContract.View view) {
this.view = view;
}
@FragmentScope
@Provides
LocalPrintContract.View provideLocalPrintView() {
return this.view;
}
@FragmentScope
@Provides
LocalPrintContract.Model provideLocalPrintModel(LocalPrintModel model) {
return model;
}
}
\ No newline at end of file
package com.joe.print.mvp.contract;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
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 IpPrintListActivityContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadPrinterList(List<PrinterDeviceBean> deviceBeans);
void loadFile();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<BaseResult> getPrinterList(int restaurantId);
Observable<BaseResult> deletePrinter(RequestBody requestBody);
}
}
package com.joe.print.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
public interface LocalPrintContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
}
}
...@@ -26,13 +26,9 @@ import okhttp3.RequestBody; ...@@ -26,13 +26,9 @@ import okhttp3.RequestBody;
public interface PrintListContract { public interface PrintListContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView { interface View extends IView {
void loadPrinterList(List<PrinterDeviceBean> deviceBeans);
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel { interface Model extends IModel {
Observable<BaseResult> getPrinterList(int restaurantId);
Observable<BaseResult> deletePrinter(RequestBody requestBody);
} }
} }
...@@ -25,6 +25,8 @@ public interface PrinterAddContract { ...@@ -25,6 +25,8 @@ public interface PrinterAddContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView { interface View extends IView {
void addPrinterSuccess(PrinterDeviceBean printerDeviceBean); void addPrinterSuccess(PrinterDeviceBean printerDeviceBean);
void updatePrinterSuccess(PrinterDeviceBean printerDeviceBean);
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......
package com.joe.print.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
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 com.joe.print.mvp.contract.IpPrintListActivityContract;
import com.joe.print.mvp.model.server.PrintInfoService;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@FragmentScope
public class IpPrintListActivityModel extends BaseModel implements IpPrintListActivityContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public IpPrintListActivityModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<BaseResult> getPrinterList(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(PrintInfoService.class)
.getPrinterList(restaurantId);
}
@Override
public Observable<BaseResult> deletePrinter(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(PrintInfoService.class)
.deletePrinterList(requestBody);
}
}
\ No newline at end of file
package com.joe.print.mvp.model;
import android.app.Application;
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.joe.print.mvp.contract.LocalPrintContract;
@FragmentScope
public class LocalPrintModel extends BaseModel implements LocalPrintContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public LocalPrintModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
}
\ No newline at end of file
...@@ -49,15 +49,4 @@ public class PrintListModel extends BaseModel implements PrintListContract.Model ...@@ -49,15 +49,4 @@ public class PrintListModel extends BaseModel implements PrintListContract.Model
this.mApplication = null; this.mApplication = null;
} }
@Override
public Observable<BaseResult> getPrinterList(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(PrintInfoService.class)
.getPrinterList(restaurantId);
}
@Override
public Observable<BaseResult> deletePrinter(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(PrintInfoService.class)
.deletePrinterList(requestBody);
}
} }
\ No newline at end of file
package com.joe.print.mvp.presenter;
import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.PrinterManger.PrinterManager;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
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 com.joe.print.mvp.contract.IpPrintListActivityContract;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
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 IpPrintListActivityPresenter extends BasePresenter<IpPrintListActivityContract.Model, IpPrintListActivityContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public IpPrintListActivityPresenter(IpPrintListActivityContract.Model model, IpPrintListActivityContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
/**
* 獲取打印機列表
*
* @param restaurantId 餐廳id
*/
public void getPrinterList(int restaurantId) {
mModel.getPrinterList(restaurantId)
.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()) {
List<PrinterDeviceBean> deviceBeans = JsonUtils.parseArray(baseResult.getData(), PrinterDeviceBean.class);
if (deviceBeans != null && deviceBeans.size() > 0) {
mRootView.loadPrinterList(deviceBeans);
PrinterManager.getPrinterManager().setDeviceBeans(deviceBeans);
} else {
mRootView.loadFile();
}
} else {
mRootView.loadFile();
}
}
});
}
/**
* 刪除打印機
*
* @param ids 打印機id,可以傳多個 例如:1,2,3
*/
public void deletePrinter(String ids) {
RequestBody requestBody = new FormBody.Builder()
.add("id", ids)
.build();
mModel.deletePrinter(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) {
}
});
}
}
package com.joe.print.mvp.presenter;
import android.app.Application;
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.joe.print.mvp.contract.LocalPrintContract;
import javax.inject.Inject;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
@FragmentScope
public class LocalPrintPresenter extends BasePresenter<LocalPrintContract.Model, LocalPrintContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public LocalPrintPresenter(LocalPrintContract.Model model, LocalPrintContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
}
...@@ -2,27 +2,15 @@ package com.joe.print.mvp.presenter; ...@@ -2,27 +2,15 @@ package com.joe.print.mvp.presenter;
import android.app.Application; import android.app.Application;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader; import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager; import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter; import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import com.joe.print.mvp.contract.PrintListContract; import com.joe.print.mvp.contract.PrintListContract;
import com.gingersoft.gsa.cloud.base.common.bean.PrinterManger.PrinterManager;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler; import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import okhttp3.FormBody;
import okhttp3.RequestBody;
/** /**
...@@ -61,55 +49,4 @@ public class PrintListPresenter extends BasePresenter<PrintListContract.Model, P ...@@ -61,55 +49,4 @@ public class PrintListPresenter extends BasePresenter<PrintListContract.Model, P
this.mImageLoader = null; this.mImageLoader = null;
this.mApplication = null; this.mApplication = null;
} }
/**
* 獲取打印機列表
*
* @param restaurantId 餐廳id
*/
public void getPrinterList(int restaurantId) {
mModel.getPrinterList(restaurantId)
.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()){
List<PrinterDeviceBean> deviceBeans = JsonUtils.parseArray(baseResult.getData(), PrinterDeviceBean.class);
if(deviceBeans != null && deviceBeans.size() > 0){
mRootView.loadPrinterList(deviceBeans);
PrinterManager.getPrinterManager().setDeviceBeans(deviceBeans);
}
}
}
});
}
/**
* 刪除打印機
* @param ids 打印機id,可以傳多個 例如:1,2,3
*/
public void deletePrinter(String ids){
RequestBody requestBody = new FormBody.Builder()
.add("id", ids)
.build();
mModel.deletePrinter(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) {
}
});
}
} }
...@@ -125,6 +125,7 @@ public class PrinterAddPresenter extends BasePresenter<PrinterAddContract.Model, ...@@ -125,6 +125,7 @@ public class PrinterAddPresenter extends BasePresenter<PrinterAddContract.Model,
public void onNext(BaseResult baseResult) { public void onNext(BaseResult baseResult) {
if (baseResult.isSuccess()) { if (baseResult.isSuccess()) {
mRootView.showMessage("保存成功"); mRootView.showMessage("保存成功");
mRootView.updatePrinterSuccess(printerDeviceBean);
mRootView.killMyself(); mRootView.killMyself();
} }
} }
......
package com.joe.print.mvp.print;
public class PrintConstans {
//默認打印機數據
public static final String DEFAULT_PRINT_IP = "default_print_ip";
public static final String DEFAULT_PRINT_PORT = "default_print_port";
public static final String DEFAULT_PRINT_PAPER = "default_print_paper";
}
...@@ -20,6 +20,7 @@ import com.gingersoft.gsa.cloud.base.common.bean.TableBean; ...@@ -20,6 +20,7 @@ import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage; 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.base.common.bean.mealManage.OpenTableManage;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil; import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.PrintTransitUtils;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils; import com.gingersoft.gsa.cloud.base.utils.view.ImageUtils;
import com.gingersoft.gsa.cloud.base.utils.view.LayoutToBitmapUtils; import com.gingersoft.gsa.cloud.base.utils.view.LayoutToBitmapUtils;
...@@ -128,6 +129,9 @@ public class PrintUtils { ...@@ -128,6 +129,9 @@ public class PrintUtils {
} }
} }
} }
} else if (type == 4) {
//清機報表
bitmaps.add(getReportBitmap(mContext));
} }
return bitmaps; return bitmaps;
} }
...@@ -203,9 +207,7 @@ public class PrintUtils { ...@@ -203,9 +207,7 @@ public class PrintUtils {
//加载条形码 //加载条形码
// ImageView ivBarCode = view.findViewById(R.id.iv_bar_code); // ImageView ivBarCode = view.findViewById(R.id.iv_bar_code);
// ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150)); // ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150));
LayoutToBitmapUtils.layoutView(context, view);//先测量view return viewToBitmap(context, view);
//580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
} }
/** /**
...@@ -268,7 +270,7 @@ public class PrintUtils { ...@@ -268,7 +270,7 @@ public class PrintUtils {
BigDecimal totalAmount = new BigDecimal(0); BigDecimal totalAmount = new BigDecimal(0);
for (OrderDetail OrderDetail : MyOrderManage.getInstance().getOrderFoodList()) { for (OrderDetail OrderDetail : MyOrderManage.getInstance().getOrderFoodList()) {
totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(OrderDetail.getPrice(), OrderDetail.getNumber())); totalAmount = MoneyUtil.sum(totalAmount, OrderDetail.getPrice());
} }
//總金額 //總金額
mTvTotalAmount.setText(totalAmount + ""); mTvTotalAmount.setText(totalAmount + "");
...@@ -278,9 +280,7 @@ public class PrintUtils { ...@@ -278,9 +280,7 @@ public class PrintUtils {
//加载条形码 //加载条形码
// ImageView ivBarCode = view.findViewById(R.id.iv_bar_code); // ImageView ivBarCode = view.findViewById(R.id.iv_bar_code);
// ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150)); // ivBarCode.setImageBitmap(BitmapUtil.generateBitmap("12312112131", 2, 450, 150));
LayoutToBitmapUtils.layoutView(context, view);//先测量view return viewToBitmap(context, view);
//580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
} }
...@@ -327,15 +327,30 @@ public class PrintUtils { ...@@ -327,15 +327,30 @@ public class PrintUtils {
//操作人員 //操作人員
tvOperator.setText(GsaCloudApplication.userName); tvOperator.setText(GsaCloudApplication.userName);
LayoutToBitmapUtils.layoutView(context, view);//先测量view return viewToBitmap(context, view);
//580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
} }
/**
* 獲取測試打印bitmap
*
* @param context
* @return
*/
private static Bitmap getTestPrintBitmap(Context context) {
View view = LinearLayout.inflate(context, R.layout.print_test, null);
return viewToBitmap(context, view);
}
private static Bitmap getReportBitmap(Context mContext) {
View view = PrintTransitUtils.getInstance().getPrintView();
if (view != null) {
return viewToBitmap(mContext, view);
}
return null;
}
private static Bitmap getTestPrintBitmap(Context context){
View view = LinearLayout.inflate(context, R.layout.print_test, null); public static Bitmap viewToBitmap(Context context, View view) {
LayoutToBitmapUtils.layoutView(context, view);//先测量view LayoutToBitmapUtils.layoutView(context, view);//先测量view
//580為程序支持的打印紙最大寬度 //580為程序支持的打印紙最大寬度
return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap return ImageUtils.zoomDrawable(LayoutToBitmapUtils.loadBitmapFromView(view), paperWidth);//将view轉bitmap
......
...@@ -40,6 +40,7 @@ import com.joe.print.R; ...@@ -40,6 +40,7 @@ import com.joe.print.R;
import com.joe.print.di.component.DaggerPrintComponent; import com.joe.print.di.component.DaggerPrintComponent;
import com.joe.print.mvp.contract.PrintContract; import com.joe.print.mvp.contract.PrintContract;
import com.joe.print.mvp.presenter.PrintPresenter; import com.joe.print.mvp.presenter.PrintPresenter;
import com.joe.print.mvp.print.PrintConstans;
import com.joe.print.mvp.print.PrintStatus; import com.joe.print.mvp.print.PrintStatus;
import com.joe.print.mvp.print.PrintUtils; import com.joe.print.mvp.print.PrintUtils;
import com.joe.print.mvp.ui.adapter.DialogPrinterListAdapter; import com.joe.print.mvp.ui.adapter.DialogPrinterListAdapter;
...@@ -81,6 +82,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print ...@@ -81,6 +82,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
* 1:印單 * 1:印單
* 2:結賬單 * 2:結賬單
* 3:廚房單 * 3:廚房單
* 4:清機報表
*/ */
private int type = -1; private int type = -1;
...@@ -113,7 +115,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print ...@@ -113,7 +115,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
//獲取打印類型,根據打印類型生成對應的bitmap //獲取打印類型,根據打印類型生成對應的bitmap
type = CCUtil.getNavigateParam(this, "type", 1001); type = CCUtil.getNavigateParam(this, "type", 1001);
//380 540 //380 540
List<Bitmap> bitmaps = PrintUtils.getPrintBitmap(mContext, type, 360); List<Bitmap> bitmaps = PrintUtils.getPrintBitmap(mContext, type, paperWidth);
if (bitmaps.size() <= 0) { if (bitmaps.size() <= 0) {
printFile(); printFile();
finish(); finish();
...@@ -194,13 +196,24 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print ...@@ -194,13 +196,24 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
* IP打印 * IP打印
*/ */
private void ipPrint() { private void ipPrint() {
if (PrinterManager.getPrinterManager().getDeviceBeans() != null //獲取默認選中的IP打印機
&& PrinterManager.getPrinterManager().getDeviceBeans().size() > 0) { if(Objects.equals(SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_IP, ""), "")){
//如果本地保存有打印設備 //如果沒有獲取到默認打印機IP
showPrinterList(); if (PrinterManager.getPrinterManager().getDeviceBeans() != null
&& PrinterManager.getPrinterManager().getDeviceBeans().size() > 0) {
//如果本地保存有打印設備
showPrinterList();
} else {
//網絡獲取打印設備
mPresenter.getPrinterList(GsaCloudApplication.getRestaurantId(mContext));
}
} else { } else {
//網絡獲取打印設備 //如果有默認選中打印機
mPresenter.getPrinterList(GsaCloudApplication.getRestaurantId(mContext)); PrinterDeviceBean printerDeviceBean = new PrinterDeviceBean();
printerDeviceBean.setIp((String) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_IP, ""));
printerDeviceBean.setPort((Integer) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_PORT, 0));
printerDeviceBean.setType((Integer) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_PAPER, 0));
startToIpPrint(printerDeviceBean);
} }
} }
......
...@@ -15,6 +15,7 @@ import androidx.annotation.NonNull; ...@@ -15,6 +15,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils; import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean; import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.jess.arms.base.BaseActivity; import com.jess.arms.base.BaseActivity;
...@@ -25,6 +26,7 @@ import com.joe.print.R2; ...@@ -25,6 +26,7 @@ import com.joe.print.R2;
import com.joe.print.di.component.DaggerPrinterAddComponent; import com.joe.print.di.component.DaggerPrinterAddComponent;
import com.joe.print.mvp.contract.PrinterAddContract; import com.joe.print.mvp.contract.PrinterAddContract;
import com.joe.print.mvp.presenter.PrinterAddPresenter; import com.joe.print.mvp.presenter.PrinterAddPresenter;
import com.joe.print.mvp.print.PrintConstans;
import com.qmuiteam.qmui.widget.QMUITopBar; import com.qmuiteam.qmui.widget.QMUITopBar;
import butterknife.BindView; import butterknife.BindView;
...@@ -53,7 +55,7 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem ...@@ -53,7 +55,7 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
private PrinterDeviceBean printerDeviceBean; private PrinterDeviceBean printerDeviceBean;
private boolean isEditPrinter = false;//是否是編輯打印機 private boolean isEditPrinter = false;//是否是編輯打印機
private boolean isDefault = false;//是否是默認打印機
@Override @Override
public void setupActivityComponent(@NonNull AppComponent appComponent) { public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerPrinterAddComponent //如找不到该类,请编译一下项目 DaggerPrinterAddComponent //如找不到该类,请编译一下项目
...@@ -71,6 +73,8 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem ...@@ -71,6 +73,8 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
@Override @Override
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
isDefault = getIntent().getBooleanExtra("isDefault", false);
// etPort.setInputType(EditorInfo.TYPE_CLASS_NUMBER); // etPort.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
String[] ips = new String[4]; String[] ips = new String[4];
// if (BuildConfig.DEBUG) { // if (BuildConfig.DEBUG) {
...@@ -220,6 +224,16 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem ...@@ -220,6 +224,16 @@ public class PrinterAddActivity extends BaseActivity<PrinterAddPresenter> implem
finish(); finish();
} }
@Override
public void updatePrinterSuccess(PrinterDeviceBean item) {
//修改打印機成功,如果這個打印機是用戶設置的默認打印機,則需要更新信息
if(isDefault){
SPUtils.put(mContext, PrintConstans.DEFAULT_PRINT_IP, item.getIp());
SPUtils.put(mContext, PrintConstans.DEFAULT_PRINT_PORT, item.getPort());
SPUtils.put(mContext, PrintConstans.DEFAULT_PRINT_PAPER, item.getType());
}
}
class MyTextWatcher implements TextWatcher { class MyTextWatcher implements TextWatcher {
public EditText mEditText; public EditText mEditText;
......
package com.joe.print.mvp.ui.adapter; package com.joe.print.mvp.ui.adapter;
import android.content.Context; import android.content.Context;
import android.widget.RadioButton;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder; import com.chad.library.adapter.base.BaseViewHolder;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean; import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.joe.print.R; import com.joe.print.R;
import com.joe.print.mvp.print.PrintConstans;
import java.util.List; import java.util.List;
import androidx.annotation.Nullable;
/** /**
* Created by Wyh on 2020/1/16. * Created by Wyh on 2020/1/16.
*/ */
public class PrinterListAdapter extends BaseQuickAdapter<PrinterDeviceBean, BaseViewHolder> { public class PrinterListAdapter extends BaseQuickAdapter<PrinterDeviceBean, BaseViewHolder> {
private Context mContext; private Context mContext;
private int selectPosition = -1;
private String selectPrintIp;//默認選中的打印機IP
private Integer selectPrintPort;//默認選中的打印機端口號
private int paperType;//默認選中的打印機紙張類型
public PrinterListAdapter(@Nullable List<PrinterDeviceBean> data, Context mContext) { public PrinterListAdapter(@Nullable List<PrinterDeviceBean> data, Context mContext) {
super(R.layout.printer_item, data); super(R.layout.printer_item, data);
this.mContext = mContext; this.mContext = mContext;
selectPrintIp = (String) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_IP, "");
if ((Integer) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_PORT, -1) != -1) {
selectPrintPort = (int) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_PORT, 0);
}
paperType = (int) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_PAPER, 0);
} }
@Override @Override
protected void convert(BaseViewHolder helper, PrinterDeviceBean item) { protected void convert(BaseViewHolder helper, PrinterDeviceBean item) {
if (selectPosition == -1) {
//ip、端口、紙張類型也要一致才是默認打印機
if (selectPrintIp.equals(item.getIp()) && paperType == item.getType()) {
if (selectPrintPort != null && item.getPort() != null) {
if (selectPrintPort.equals(item.getPort())) {
((RadioButton) helper.getView(R.id.cb_printer_item)).setChecked(true);
selectPosition = helper.getAdapterPosition();
}
} else if (selectPrintPort == null && item.getPort() == null) {
((RadioButton) helper.getView(R.id.cb_printer_item)).setChecked(true);
selectPosition = helper.getAdapterPosition();
}
} else {
((RadioButton) helper.getView(R.id.cb_printer_item)).setChecked(false);
}
} else if (selectPosition == helper.getAdapterPosition()) {
((RadioButton) helper.getView(R.id.cb_printer_item)).setChecked(true);
} else {
((RadioButton) helper.getView(R.id.cb_printer_item)).setChecked(false);
}
helper.setText(R.id.tv_printer_name, item.getIp() + ""); helper.setText(R.id.tv_printer_name, item.getIp() + "");
helper.setText(R.id.tv_printer_ip, String.format(mContext.getString(R.string.print_ip), item.getIp())); helper.setText(R.id.tv_printer_ip, String.format(mContext.getString(R.string.print_ip), item.getIp()));
helper.setText(R.id.tv_printer_port, String.format(mContext.getString(R.string.print_port), item.getPort() + "")); if (item.getPort() == null) {
// helper. helper.setText(R.id.tv_printer_port, String.format(mContext.getString(R.string.print_port), ""));
} else {
helper.setText(R.id.tv_printer_port, String.format(mContext.getString(R.string.print_port), item.getPort() + ""));
}
// helper.setOnCheckedChangeListener(R.id.cb_printer_item, (buttonView, isChecked) -> {
// if (getRecyclerView() != null) {
// if (getRecyclerView().isComputingLayout()) {//如果recyclerView在刷新時
// getRecyclerView().post(() -> setSelectPrint(helper, item, isChecked));
// } else {
// setSelectPrint(helper, item, isChecked);
// }
// }
// });
helper.setOnClickListener(R.id.cb_printer_item, v -> {
if (getRecyclerView() != null) {
if (getRecyclerView().isComputingLayout()) {//如果recyclerView在刷新時
getRecyclerView().post(() -> setSelectPrint(helper, item, true));
} else {
setSelectPrint(helper, item, true);
}
}
});
}
/**
* 設置默認選中打印機
*
* @param helper
* @param item
* @param isChecked
*/
private void setSelectPrint(BaseViewHolder helper, PrinterDeviceBean item, boolean isChecked) {
if (isChecked) {
SPUtils.put(mContext, PrintConstans.DEFAULT_PRINT_IP, item.getIp());
SPUtils.put(mContext, PrintConstans.DEFAULT_PRINT_PORT, item.getPort());
SPUtils.put(mContext, PrintConstans.DEFAULT_PRINT_PAPER, item.getType());
if (selectPosition != -1) {
notifyItemChanged(selectPosition);
}
selectPosition = helper.getAdapterPosition();
ToastUtils.show(mContext, "已設置默認打印機");
}
}
public int getSelectPosition() {
return selectPosition;
}
public void setSelectPosition(int selectPosition) {
this.selectPosition = selectPosition;
} }
public void notifyData(List<PrinterDeviceBean> data) { public void notifyData(List<PrinterDeviceBean> data) {
this.mData = data; this.mData = data;
selectPrintIp = (String) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_IP, "");
if (SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_PORT, null) != null) {
selectPrintPort = (int) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_PORT, 0);
}
paperType = (int) SPUtils.get(mContext, PrintConstans.DEFAULT_PRINT_PAPER, 0);
super.notifyDataSetChanged(); super.notifyDataSetChanged();
} }
} }
package com.joe.print.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 com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.joe.print.R;
import com.joe.print.di.component.DaggerLocalPrintComponent;
import com.joe.print.di.module.LocalPrintModule;
import com.joe.print.mvp.contract.LocalPrintContract;
import com.joe.print.mvp.presenter.LocalPrintPresenter;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* 本機打印配置頁
*/
public class LocalPrintFragment extends BaseFragment<LocalPrintPresenter> implements LocalPrintContract.View {
public static LocalPrintFragment newInstance() {
LocalPrintFragment fragment = new LocalPrintFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerLocalPrintComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.localPrintModule(new LocalPrintModule(this))
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_local_print, 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 (Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link (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);
}
@Override
public void killMyself() {
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
\ 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:gravity="center"
android:orientation="vertical">
<com.yanzhenjie.recyclerview.SwipeRecyclerView
android:id="@+id/rc_ip_print"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10" />
<TextView
android:id="@+id/tv_add_print"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_border_bg"
android:text="添加打印機"
android:padding="@dimen/dp_10"
android:textColor="@color/theme_color" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="本地打印機列表"
android:textColor="@color/theme_333_color" />
</LinearLayout>
\ No newline at end of file
...@@ -13,12 +13,19 @@ ...@@ -13,12 +13,19 @@
app:qmui_topbar_text_btn_color_state_list="@color/theme_white_color" app:qmui_topbar_text_btn_color_state_list="@color/theme_white_color"
app:qmui_topbar_title_color="@color/theme_white_color" /> app:qmui_topbar_title_color="@color/theme_white_color" />
<com.yanzhenjie.recyclerview.SwipeRecyclerView <com.gingersoft.gsa.cloud.ui.view.MyTableView
android:id="@+id/rc_print_list" android:id="@+id/print_table_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="@dimen/tabIndicator_height"
android:paddingLeft="@dimen/dp_10" app:tabIndicator="@drawable/tablayout_indicator"
android:paddingRight="@dimen/dp_10" /> app:tabIndicatorColor="@color/theme_color"
app:tabIndicatorFullWidth="false" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/print_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
android:paddingTop="@dimen/dp_10" android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10"> android:paddingBottom="@dimen/dp_10">
<CheckBox <RadioButton
android:id="@+id/cb_printer_item" android:id="@+id/cb_printer_item"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
package com.gingersoft.gsa.cloud.base.adapter.print; package com.gingersoft.gsa.cloud.base.adapter.print;
import android.widget.TextView;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter;
...@@ -7,6 +9,7 @@ import com.chad.library.adapter.base.BaseViewHolder; ...@@ -7,6 +9,7 @@ import com.chad.library.adapter.base.BaseViewHolder;
import com.gingersoft.gsa.cloud.base.R; import com.gingersoft.gsa.cloud.base.R;
import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail; import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
...@@ -14,21 +17,31 @@ import java.util.List; ...@@ -14,21 +17,31 @@ import java.util.List;
*/ */
public class KitChenPrintFoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> { public class KitChenPrintFoodAdapter extends BaseQuickAdapter<OrderDetail, BaseViewHolder> {
private int indentation = 0;
public KitChenPrintFoodAdapter(@Nullable List<OrderDetail> data) { public KitChenPrintFoodAdapter(@Nullable List<OrderDetail> data) {
super(R.layout.print_kitchen_item_food, data); super(R.layout.print_kitchen_item_food, data);
} }
@Override @Override
protected void convert(BaseViewHolder helper, OrderDetail item) { protected void convert(BaseViewHolder helper, OrderDetail item) {
TextView textView = helper.getView(R.id.tv_food_name);
if (helper.getAdapterPosition() == 0) {
//只第一次測量一下
indentation = new BigDecimal(textView.getPaint().measureText("哈")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
}
int paddingLeft;
if (item.getItemType() == 2) { if (item.getItemType() == 2) {
//細項,縮進 //細項,縮進
helper.setText(R.id.tv_food_number, "\u3000" + item.getNumber()); paddingLeft = indentation;
} else if (item.getItemType() == 3) { } else if (item.getItemType() == 3) {
//細項,縮進 //細項,縮進
helper.setText(R.id.tv_food_number, "\u3000\u3000" + item.getNumber()); paddingLeft = indentation * 2;
} else { } else {
helper.setText(R.id.tv_food_number, item.getNumber() + ""); paddingLeft = 0;
} }
textView.setPadding(paddingLeft, textView.getPaddingTop(), textView.getPaddingRight(), textView.getPaddingBottom());
helper.setText(R.id.tv_food_name, item.getProductName()); helper.setText(R.id.tv_food_name, item.getProductName());
helper.setText(R.id.tv_food_number, String.valueOf(item.getNumber()));
} }
} }
...@@ -22,6 +22,7 @@ import com.gingersoft.gsa.cloud.base.BuildConfig; ...@@ -22,6 +22,7 @@ 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.CurrentAndroidSetting; import com.gingersoft.gsa.cloud.base.common.bean.CurrentAndroidSetting;
import com.gingersoft.gsa.cloud.base.utils.AidlUtil; import com.gingersoft.gsa.cloud.base.utils.AidlUtil;
import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.base.utils.constans.UserConstans; 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.crash.AppCrashHandler;
import com.gingersoft.gsa.cloud.base.utils.file.FileUtils; import com.gingersoft.gsa.cloud.base.utils.file.FileUtils;
...@@ -40,6 +41,8 @@ import com.scwang.smartrefresh.layout.api.RefreshLayout; ...@@ -40,6 +41,8 @@ import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter; import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.ClassicsHeader; import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
/** /**
* Created by Wyh on 2019/12/21. * Created by Wyh on 2019/12/21.
*/ */
...@@ -148,6 +151,19 @@ public class GsaCloudApplication extends BaseApplication { ...@@ -148,6 +151,19 @@ public class GsaCloudApplication extends BaseApplication {
Log.e("error", "GsaCloudApplication打印初始化失敗:" + e.getMessage()); Log.e("error", "GsaCloudApplication打印初始化失敗:" + e.getMessage());
} }
} }
//需要單獨配置域名URL的,在接口上添加@Headers({"Domain-Name: settlement_report_server"}),不添加則是使用默認域名
setGlobalDomain();
//清機報表請求地址
RetrofitUrlManager.getInstance().putDomain("settlement_report_server", HttpsConstans.ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL);
//gsa報表請求地址
RetrofitUrlManager.getInstance().putDomain("gsa_report", HttpsConstans.REPORT_SERVER_ADDRESS);
//微信報表請求地址
RetrofitUrlManager.getInstance().putDomain("wechat_report", HttpsConstans.WECHAR_REPORT_SERVER_ADDRESS);
}
public static void setGlobalDomain() {
//配置全局默認URL
RetrofitUrlManager.getInstance().setGlobalDomain(HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL);
} }
private void initXLog() { private void initXLog() {
......
...@@ -2,7 +2,6 @@ package com.gingersoft.gsa.cloud.base.common.bean; ...@@ -2,7 +2,6 @@ package com.gingersoft.gsa.cloud.base.common.bean;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage; import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.database.bean.ComboItem; import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.FoodCombo;
import com.gingersoft.gsa.cloud.database.bean.Food; import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Modifier; import com.gingersoft.gsa.cloud.database.bean.Modifier;
...@@ -512,7 +511,7 @@ public class OrderDetail implements Serializable { ...@@ -512,7 +511,7 @@ public class OrderDetail implements Serializable {
orderDetail.setPrice(orderDetailsBean.getPrice() * orderDetailsBean.getNumber()); orderDetail.setPrice(orderDetailsBean.getPrice() * orderDetailsBean.getNumber());
orderDetail.setVisible(orderDetailsBean.getStatus() == 0); orderDetail.setVisible(orderDetailsBean.getStatus() == 0);
// orderDetail.setAutomod(foods.getAutomod()); // orderDetail.setAutomod(foods.getAutomod());
orderDetail.setIsfood(orderDetailsBean.getType() == FOOD_TYPE ? true : false); orderDetail.setIsfood(orderDetailsBean.getType() == FOOD_TYPE);
orderDetail.setNew(false); orderDetail.setNew(false);
orderDetail.setType(orderDetailsBean.getType()); orderDetail.setType(orderDetailsBean.getType());
orderDetail.setItemType(getItemType(orderDetailsBean, parentOrderDetail)); orderDetail.setItemType(getItemType(orderDetailsBean, parentOrderDetail));
......
...@@ -6,6 +6,8 @@ import com.elvishew.xlog.XLog; ...@@ -6,6 +6,8 @@ import com.elvishew.xlog.XLog;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import static java.math.BigDecimal.ROUND_HALF_UP;
/** /**
* Created by Administrator on 2018/9/10 0010. * Created by Administrator on 2018/9/10 0010.
*/ */
...@@ -13,7 +15,7 @@ import java.text.DecimalFormat; ...@@ -13,7 +15,7 @@ import java.text.DecimalFormat;
public class MoneyUtil { public class MoneyUtil {
// 總金額小數位 // 總金額小數位
public static int rounding,RoundingDecimal; public static int rounding, RoundingDecimal;
// (直接截取) : 食品 細項 折扣 會員折扣 合計 服務費 // (直接截取) : 食品 細項 折扣 會員折扣 合計 服務費
public static int ItemDecimals; public static int ItemDecimals;
...@@ -245,7 +247,7 @@ public class MoneyUtil { ...@@ -245,7 +247,7 @@ public class MoneyUtil {
} }
public static double getDecimalMoney(double money, int decimal) { public static double getDecimalMoney(double money, int decimal) {
return new BigDecimal(String.valueOf(money)).setScale(decimal, BigDecimal.ROUND_HALF_UP).doubleValue(); return new BigDecimal(String.valueOf(money)).setScale(decimal, ROUND_HALF_UP).doubleValue();
} }
/** /**
...@@ -259,7 +261,7 @@ public class MoneyUtil { ...@@ -259,7 +261,7 @@ public class MoneyUtil {
public static double priceCalculation(double price, int number) { public static double priceCalculation(double price, int number) {
BigDecimal b1 = new BigDecimal(price); BigDecimal b1 = new BigDecimal(price);
BigDecimal b2 = new BigDecimal(number); BigDecimal b2 = new BigDecimal(number);
return (b1.multiply(b2)).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); return (b1.multiply(b2)).setScale(1, ROUND_HALF_UP).doubleValue();
} }
/** /**
...@@ -303,6 +305,59 @@ public class MoneyUtil { ...@@ -303,6 +305,59 @@ public class MoneyUtil {
} }
/** /**
* 計算除 保留兩位小數,四捨五入
*
* @param v1
* @param v2
* @return
*/
public static BigDecimal divide(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, 2, ROUND_HALF_UP);
}
/**
* 計算除
* @param v1
* @param v2
* @param scale 保留幾位小數
* @param RoundingMode ROUND_HALF_UP為四捨五入
* @return
*/
public static float divide(double v1, double v2, int scale, int RoundingMode) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, RoundingMode).floatValue();
}
/**
* 計算除
* @param v1
* @param v2
* @param scale 保留幾位小數
* @return
*/
public static float divide(double v1, double v2, int scale) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, ROUND_HALF_UP).floatValue();
}
/**
* 計算差
*
* @param v1
* @param v2
* @return
*/
public static int sub(int v1, int v2) {
BigDecimal b1 = new BigDecimal(String.valueOf(v1));
BigDecimal b2 = new BigDecimal(String.valueOf(v2));
return b1.subtract(b2).intValue();
}
/**
* 食品总价保留两位 * 食品总价保留两位
* *
* @param totalPrice * @param totalPrice
...@@ -310,6 +365,6 @@ public class MoneyUtil { ...@@ -310,6 +365,6 @@ public class MoneyUtil {
*/ */
public static double totalFoodPrice(double totalPrice) { public static double totalFoodPrice(double totalPrice) {
BigDecimal b = new BigDecimal(totalPrice); BigDecimal b = new BigDecimal(totalPrice);
return b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); return b.setScale(1, ROUND_HALF_UP).doubleValue();
} }
} }
package com.gingersoft.gsa.cloud.base.utils;
import android.view.View;
public class PrintTransitUtils {
static PrintTransitUtils printTransitUtils;
/**
* 用於打印的view
*/
private View printView;
public static PrintTransitUtils getInstance() {
if (printTransitUtils == null) {
printTransitUtils = new PrintTransitUtils();
}
return printTransitUtils;
}
public View getPrintView() {
return printView;
}
public void setPrintView(View printView) {
this.printView = printView;
}
}
...@@ -12,4 +12,7 @@ public class HttpsConstans { ...@@ -12,4 +12,7 @@ public class HttpsConstans {
public static String ROOT_SERVER_ADDRESS_FORMAL2 = "http://gingersoft.tpddns.cn:53000/mock/49/ricepon-cloud-gsa/api/";//測試服務器 public static String ROOT_SERVER_ADDRESS_FORMAL2 = "http://gingersoft.tpddns.cn:53000/mock/49/ricepon-cloud-gsa/api/";//測試服務器
public static String ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = "http://a.ricepon.com:58201/";//清機接口地址 public static String ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = "http://a.ricepon.com:58201/";//清機接口地址
public static String REPORT_SERVER_ADDRESS = "http://a.ricepon.com:58201/ricepon-report/api/";//報表地址
public static String WECHAR_REPORT_SERVER_ADDRESS = "http://a.ricepon.com:61177/member-web/api/";//微信公眾號報表地址:首頁曲線圖數據,支付分析報表數據
} }
...@@ -28,6 +28,11 @@ public class SPUtils { ...@@ -28,6 +28,11 @@ public class SPUtils {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
Context.MODE_PRIVATE); Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit(); SharedPreferences.Editor editor = sp.edit();
if(object == null) {
editor.remove(key);
SharedPreferencesCompat.apply(editor);
return;
}
if (object instanceof String) { if (object instanceof String) {
editor.putString(key, (String) object); editor.putString(key, (String) object);
} else if (object instanceof Integer) { } else if (object instanceof Integer) {
......
...@@ -22,9 +22,9 @@ public class PrinterDeviceBean implements Serializable { ...@@ -22,9 +22,9 @@ public class PrinterDeviceBean implements Serializable {
private Long dbid; private Long dbid;
private Integer restaurantId; private Integer restaurantId;
private String ip; private String ip;//ip
private Integer port; private Integer port;//端口
private int type; private int type;//打印機紙張類型 為1時是58mm,否則是88mm
@Generated(hash = 626885316) @Generated(hash = 626885316)
public PrinterDeviceBean() { public PrinterDeviceBean() {
......
...@@ -38,17 +38,21 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler { ...@@ -38,17 +38,21 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler {
token = Aes.aesEncrypt("9_" + memberId + "_" + System.currentTimeMillis() + "_" + loginToken); token = Aes.aesEncrypt("9_" + memberId + "_" + System.currentTimeMillis() + "_" + loginToken);
token = token.replaceAll("\r|\n", ""); token = token.replaceAll("\r|\n", "");
} }
// String token = "e64a3959460141a4996d92ab07b0e14b";
Headers.Builder builder = new Headers.Builder(); Headers.Builder builder = new Headers.Builder();
builder.set("mobileVersion", android.os.Build.VERSION.RELEASE);//set表示name1是唯一的,会覆盖掉已经存在的,add不会覆盖已经存在的头,可以存在多个 builder.set("mobileVersion", android.os.Build.VERSION.RELEASE);//set表示name1是唯一的,会覆盖掉已经存在的,add不会覆盖已经存在的头,可以存在多个
builder.set("mobielModel", android.os.Build.MODEL); builder.set("mobielModel", android.os.Build.MODEL);
builder.set("apptype", AppConstans.APP_TYPE); builder.set("apptype", AppConstans.APP_TYPE);
builder.set("appinfo", AppUtils.getVerName(GsaCloudApplication.getAppContext())); builder.set("appinfo", AppUtils.getVerName(GsaCloudApplication.getAppContext()));
builder.set("mobileId", "1"); builder.set("mobileId", "1");
Headers headers = request.headers();
if (headers != null) {
for (int i = 0; i < headers.size(); i++) {
builder.set(headers.name(i), headers.value(i));
}
}
if (GsaCloudApplication.isLogin) if (GsaCloudApplication.isLogin)
builder.set("token", token); builder.set("token", token);
builder.set("Domain-Name", "common"); // builder.set("Domain-Name", "common");
return chain.request().newBuilder() return chain.request().newBuilder()
.headers(builder.build()) .headers(builder.build())
......
...@@ -28,6 +28,6 @@ public class MyOkhttpConfiguration implements ClientModule.OkhttpConfiguration { ...@@ -28,6 +28,6 @@ public class MyOkhttpConfiguration implements ClientModule.OkhttpConfiguration {
//使用一行代码监听 Retrofit/Okhttp 上传下载进度监听,以及 Glide 加载进度监听 详细使用方法查看 https://github.com/JessYanCoding/ProgressManager //使用一行代码监听 Retrofit/Okhttp 上传下载进度监听,以及 Glide 加载进度监听 详细使用方法查看 https://github.com/JessYanCoding/ProgressManager
ProgressManager.getInstance().with(builder); ProgressManager.getInstance().with(builder);
//让 Retrofit 同时支持多个 BaseUrl 以及动态改变 BaseUrl. 详细使用请方法查看 https://github.com/JessYanCoding/RetrofitUrlManager //让 Retrofit 同时支持多个 BaseUrl 以及动态改变 BaseUrl. 详细使用请方法查看 https://github.com/JessYanCoding/RetrofitUrlManager
RetrofitUrlManager.getInstance().with(builder); RetrofitUrlManager.getInstance().with(builder).build();
} }
} }
package com.gingersoft.gsa.cloud.ui.adapter; package com.gingersoft.gsa.cloud.ui.adapter;
import java.util.List;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.fragment.app.FragmentStatePagerAdapter;
import java.util.List;
/** /**
* Created by Wyh on 2020/2/24. * Created by Wyh on 2020/2/24.
*/ */
...@@ -34,4 +34,5 @@ public class TabFragmentAdapter extends FragmentStatePagerAdapter { ...@@ -34,4 +34,5 @@ public class TabFragmentAdapter extends FragmentStatePagerAdapter {
public int getCount() { public int getCount() {
return mFragments == null ? 0 : mFragments.size(); return mFragments == null ? 0 : mFragments.size();
} }
} }
package com.gingersoft.gsa.cloud.ui.view;
import android.content.Context;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewpager.widget.ViewPager;
import com.gingersoft.gsa.cloud.base.R;
import com.google.android.material.tabs.TabLayout;
import java.util.List;
import java.util.Objects;
public class MyTableView extends TabLayout {
private List<String> titles;
public MyTableView(@NonNull Context context) {
super(context);
}
public MyTableView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyTableView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyTableView setTitles(List<String> titles) {
this.titles = titles;
return this;
}
@Override
public void setupWithViewPager(@Nullable ViewPager viewPager) {
super.setupWithViewPager(viewPager);
// setTabsFromPagerAdapter(viewPager);//TabLayout的标签从Adapter中获取
//用来循环适配器中的视图总数
for (int i = 0; i < (titles != null ? titles.size() : 0); i++) {
//获取每一个tab对象
TabLayout.Tab tabAt = getTabAt(i);
if (tabAt != null) {
//将每一个条目设置我们自定义的视图
tabAt.setCustomView(R.layout.layout_table_item);
//默认选中第一个
if (i == 0) {
// 设置第一个tab的TextView是被选择的样式
setSelectTab(tabAt, true);
}
//通过tab对象找到自定义视图的ID
TextView textView = Objects.requireNonNull(tabAt.getCustomView()).findViewById(R.id.tv_tab);
textView.setText(titles.get(i));//设置tab上的文字
}
}
addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
setSelectTab(tab, true);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
setSelectTab(tab, false);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void setSelectTab(TabLayout.Tab tabAt, boolean isSelected) {
if (tabAt.getCustomView() != null) {
TextView tab = tabAt.getCustomView().findViewById(R.id.tv_tab);//第一个tab被选中
tab.setSelected(isSelected);
//设置选中标签的文字大小
tab.setTextSize(TypedValue.COMPLEX_UNIT_PX, isSelected ? getResources().getDimensionPixelSize(R.dimen.sp_16) : getResources().getDimensionPixelSize(R.dimen.sp_14));
tab.getPaint().setFakeBoldText(isSelected);
}
}
}
...@@ -458,7 +458,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { ...@@ -458,7 +458,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
} }
} }
// Log.e("....>",""+width);
// 设置底部横线与文字宽度一致 // 设置底部横线与文字宽度一致
if (indicatorinFollower) { if (indicatorinFollower) {
canvas.drawRect(lineLeft + (lineRight - lineLeft - width) / 2, height - indicatorHeight, lineLeft + width + (lineRight - lineLeft - width) / 2, height, rectPaint); canvas.drawRect(lineLeft + (lineRight - lineLeft - width) / 2, height - indicatorHeight, lineLeft + width + (lineRight - lineLeft - width) / 2, height, rectPaint);
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/dp_8" />
<stroke
android:width="@dimen/dp_1"
android:color="@color/theme_color" />
</shape>
\ 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:layout_width="match_parent" android:layout_width="match_parent"
android:id="@+id/item_kitchen_print_layout"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
<TextView <TextView
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
<!-- 头部标题 --> <!-- 头部标题 -->
<dimen name="head_height">48dp</dimen> <dimen name="head_height">48dp</dimen>
<dimen name="tabIndicator_height">@dimen/dp_42</dimen>
<dimen name="head_margin">20dp</dimen> <dimen name="head_margin">20dp</dimen>
<dimen name="head_size">16sp</dimen> <dimen name="head_size">16sp</dimen>
......
...@@ -274,7 +274,7 @@ ...@@ -274,7 +274,7 @@
<style name="Print_large_text_style"> <style name="Print_large_text_style">
<item name="android:textColor">@color/theme_333_color</item> <item name="android:textColor">@color/theme_333_color</item>
<item name="android:textSize">@dimen/sp_48</item> <item name="android:textSize">@dimen/sp_24</item>
</style> </style>
<style name="report_food_ranking"> <style name="report_food_ranking">
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
android:label="@string/table_app_name" android:label="@string/table_app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_android"
android:theme="@style/AppTheme.Base"> android:theme="@style/AppTheme.Base">
<activity android:name=".mvp.ui.activity.orderManager.OrderDetailActivity"/> <activity android:name=".mvp.ui.activity.orderManager.OrderDetailActivity"/>
<activity android:name=".mvp.ui.activity.orderManager.OrderCenterActivity" /> <activity android:name=".mvp.ui.activity.orderManager.OrderCenterActivity" />
......
...@@ -41,7 +41,7 @@ public class OrderDetailFoodAdapter extends BaseQuickAdapter<OrderDetail, BaseVi ...@@ -41,7 +41,7 @@ public class OrderDetailFoodAdapter extends BaseQuickAdapter<OrderDetail, BaseVi
break; break;
} }
tv_food_name.setText(productName); tv_food_name.setText(productName);
helper.setText(R.id.tv_food_number, item.getNumber()); helper.setText(R.id.tv_food_number, String.valueOf(item.getNumber()));
helper.setText(R.id.tv_food_total, "$" + item.getPrice() * item.getNumber()); helper.setText(R.id.tv_food_total, "$" + item.getPrice() * item.getNumber());
} }
......
...@@ -20,7 +20,7 @@ public class OrderDetailPayMethodAdapter extends BaseQuickAdapter<OrderDetail, B ...@@ -20,7 +20,7 @@ public class OrderDetailPayMethodAdapter extends BaseQuickAdapter<OrderDetail, B
@Override @Override
protected void convert(BaseViewHolder helper, OrderDetail item) { protected void convert(BaseViewHolder helper, OrderDetail item) {
helper.setText(R.id.tv_name, item.getNumber()); helper.setText(R.id.tv_name, String.valueOf(item.getNumber()));
helper.setText(R.id.tv_money, "$" + item.getPrice() * item.getNumber()); helper.setText(R.id.tv_money, "$" + item.getPrice() * item.getNumber());
} }
......
...@@ -15,10 +15,10 @@ ...@@ -15,10 +15,10 @@
<application <application
android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication" android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_logo" android:icon="@mipmap/ic_launcher"
android:label="@string/user_login_name" android:label="@string/user_login_name"
android:networkSecurityConfig="@xml/network_android" android:networkSecurityConfig="@xml/network_android"
android:roundIcon="@mipmap/ic_logo" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme" android:theme="@style/AppTheme"
tools:replace="android:label"> tools:replace="android:label">
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="user_login_colorPrimary">#3F51B5</color>
<color name="user_login_colorPrimaryDark">#303F9F</color>
<color name="user_login_colorAccent">#FF4081</color>
</resources>
<resources>
<!-- Base application theme. -->
<style name="user_login_AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/user_login_colorPrimary</item>
<item name="colorPrimaryDark">@color/user_login_colorPrimaryDark</item>
<item name="colorAccent">@color/user_login_colorAccent</item>
</style>
</resources>
...@@ -6,6 +6,10 @@ import android.widget.Button; ...@@ -6,6 +6,10 @@ import android.widget.Button;
import android.widget.RadioButton; import android.widget.RadioButton;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans; import com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.user.login.R; import com.gingersoft.gsa.cloud.user.login.R;
import com.gingersoft.gsa.cloud.user.login.R2; import com.gingersoft.gsa.cloud.user.login.R2;
...@@ -16,8 +20,6 @@ import com.jess.arms.base.BaseActivity; ...@@ -16,8 +20,6 @@ import com.jess.arms.base.BaseActivity;
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 androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView; import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull; import static com.jess.arms.utils.Preconditions.checkNotNull;
...@@ -79,6 +81,7 @@ public class SwitchServerActivity extends BaseActivity<SwitchServerPresenter> im ...@@ -79,6 +81,7 @@ public class SwitchServerActivity extends BaseActivity<SwitchServerPresenter> im
} else { } else {
HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL = HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL_HK; HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL = HttpsConstans.ROOT_SERVER_ADDRESS_FORMAL_HK;
} }
GsaCloudApplication.setGlobalDomain();
finish(); finish();
startActivity(new Intent(mContext, LoginActivity.class)); startActivity(new Intent(mContext, LoginActivity.class));
}); });
......
...@@ -4,11 +4,12 @@ import android.content.Intent; ...@@ -4,11 +4,12 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.ScaleAnimation; import android.view.animation.ScaleAnimation;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import com.gingersoft.gsa.cloud.base.utils.constans.UserConstans; 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.encryption.Aes; import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean; import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
...@@ -21,7 +22,9 @@ import com.gingersoft.gsa.cloud.user.login.mvp.contract.WelcomeContract; ...@@ -21,7 +22,9 @@ import com.gingersoft.gsa.cloud.user.login.mvp.contract.WelcomeContract;
import com.gingersoft.gsa.cloud.user.login.mvp.presenter.WelcomePresenter; import com.gingersoft.gsa.cloud.user.login.mvp.presenter.WelcomePresenter;
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 java.util.List; import java.util.List;
import butterknife.BindView; import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull; import static com.jess.arms.utils.Preconditions.checkNotNull;
...@@ -65,7 +68,7 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem ...@@ -65,7 +68,7 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem
//自動登陸 //自動登陸
String pwd = Aes.aesDecrypt((String) SPUtils.get(mContext, UserConstans.LOGIN_PASSWORD, "")); String pwd = Aes.aesDecrypt((String) SPUtils.get(mContext, UserConstans.LOGIN_PASSWORD, ""));
mPresenter.login(SPUtils.get(mContext, UserConstans.LOGIN_USERNAME, "") + "", pwd); mPresenter.login(SPUtils.get(mContext, UserConstans.LOGIN_USERNAME, "") + "", pwd);
} else{ } else {
startActivity(new Intent(mContext, LoginActivity.class)); startActivity(new Intent(mContext, LoginActivity.class));
} }
} }
......
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