Commit 114cb283 by Wyh

8.15 1、每日營業報表及打印功能 2、外賣接單按鈕權限控制

Signed-off-by: Wyh <1239658231>
parent ea7060d3
...@@ -199,6 +199,23 @@ public class MoneyUtil { ...@@ -199,6 +199,23 @@ public class MoneyUtil {
return b1.subtract(b2).doubleValue(); return b1.subtract(b2).doubleValue();
} }
/**
* 計算差
*
* @param v1
* @param v2
* @return
*/
public static double sub(double v1, double... v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
for (int i = 0; i < v2.length; i++) {
BigDecimal b2 = new BigDecimal(Double.toString(v2[i]));
b1 = b1.subtract(b2);
}
return b1.doubleValue();
}
/** /**
* 計算差 * 計算差
* *
......
...@@ -439,6 +439,21 @@ public abstract class PrinterWriter { ...@@ -439,6 +439,21 @@ public abstract class PrinterWriter {
} }
/** /**
* 获取图片数据流
*
* @param image 图片
* @return 数据流
*/
public ArrayList<byte[]> getImageByte(Bitmap image, int heightParting) {
int maxWidth = getDrawableMaxWidth();
Bitmap scalingImage = scalingBitmap(image, maxWidth);
if (scalingImage == null)
return null;
ArrayList<byte[]> data = PrinterUtils.decodeBitmapToDataList(image, heightParting);
return data;
}
/**
* 解码图片 * 解码图片
* *
* @param image 图片 * @param image 图片
......
...@@ -4,7 +4,9 @@ import java.util.List; ...@@ -4,7 +4,9 @@ import java.util.List;
public class BrandsBean { public class BrandsBean {
private boolean success; private boolean success = false;
private String code;
private String message;
private long sysTime; private long sysTime;
private List<BrandsData> data; private List<BrandsData> data;
...@@ -116,4 +118,20 @@ public class BrandsBean { ...@@ -116,4 +118,20 @@ public class BrandsBean {
public void setData(List<BrandsData> data) { public void setData(List<BrandsData> data) {
this.data = data; this.data = data;
} }
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
} }
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/horizontal_dividing_line"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0_5"
android:background="@color/color_e8" />
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/vertical_dividing_line"
android:layout_width="@dimen/dp_0_5"
android:layout_height="match_parent"
android:background="@color/color_e8"
android:orientation="vertical" />
...@@ -463,6 +463,10 @@ ...@@ -463,6 +463,10 @@
<color name="color_50">#505050</color> <color name="color_50">#505050</color>
<color name="color_c9">#C9C9C9</color> <color name="color_c9">#C9C9C9</color>
<color name="color_aaa">#AAA</color> <color name="color_aaa">#AAA</color>
<color name="color_f9">#f9f9f9</color>
<color name="color_3b">#3b3b3b</color>
<color name="color_18">#181818</color>
<color name="color_e8">#e8e8e8</color>
<color name="tran_fifty_order_state0_color">#7F009788</color> <color name="tran_fifty_order_state0_color">#7F009788</color>
<!-- 待確認背景色--> <!-- 待確認背景色-->
......
...@@ -3,11 +3,11 @@ package com.gingersoft.gsa.cloud.login.mvp.presenter; ...@@ -3,11 +3,11 @@ package com.gingersoft.gsa.cloud.login.mvp.presenter;
import android.app.Activity; import android.app.Activity;
import android.app.Application; import android.app.Application;
import android.content.Intent; import android.content.Intent;
import android.util.Log;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils; import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils; import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.bean.PublicBean; import com.gingersoft.gsa.cloud.bean.PublicBean;
import com.gingersoft.gsa.cloud.constans.AppConstans; import com.gingersoft.gsa.cloud.constans.AppConstans;
import com.gingersoft.gsa.cloud.login.mvp.bean.LoginLimitBean; import com.gingersoft.gsa.cloud.login.mvp.bean.LoginLimitBean;
...@@ -27,7 +27,6 @@ import java.util.List; ...@@ -27,7 +27,6 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Scheduler;
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;
...@@ -129,6 +128,9 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas ...@@ -129,6 +128,9 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
@Override @Override
public void onNext(@NonNull BrandsBean info) { public void onNext(@NonNull BrandsBean info) {
if (info != null) { if (info != null) {
if(TextUtil.isNotEmptyOrNullOrUndefined(info.getMessage())){
mRootView.showMessage(info.getMessage());
}
mRootView.saveRestaurantListInfo(info.getData()); mRootView.saveRestaurantListInfo(info.getData());
} else { } else {
mRootView.saveRestaurantListInfo(null); mRootView.saveRestaurantListInfo(null);
...@@ -138,7 +140,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas ...@@ -138,7 +140,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
@Override @Override
public void onError(Throwable t) { public void onError(Throwable t) {
super.onError(t); super.onError(t);
mRootView.launchActivity(new Intent(IAcitivity, LoginActivity.class));
} }
}); });
} }
......
...@@ -4,10 +4,8 @@ import android.content.Intent; ...@@ -4,10 +4,8 @@ import android.content.Intent;
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;
import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent; import com.billy.cc.core.component.IComponent;
import com.gingersoft.gsa.cloud.function.FModule; import com.gingersoft.gsa.cloud.function.FModule;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.MainActivity;
import com.gingersoft.gsa.cloud.main.mvp.ui.activity.NewMainActivity; import com.gingersoft.gsa.cloud.main.mvp.ui.activity.NewMainActivity;
public class ComponentMain implements IComponent { public class ComponentMain implements IComponent {
......
...@@ -2,7 +2,12 @@ package com.gingersoft.gsa.cloud.main.mvp.contract; ...@@ -2,7 +2,12 @@ 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.BusinessDetailsBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessDetailsBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DailyReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DaySalesReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DiscountDetailsReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.OrderAnalysisBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.OrderDetailsReport;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView; import com.jess.arms.mvp.IView;
...@@ -29,7 +34,15 @@ public interface BusinessReportContract { ...@@ -29,7 +34,15 @@ public interface BusinessReportContract {
interface View extends IView { interface View extends IView {
void loadChart(List<MainBusinessBean.DataBean> data); void loadChart(List<MainBusinessBean.DataBean> data);
void loadAdapter(List<BusinessBean> businessBeans); void loadBillReport(DaySalesReportBean.DataBean dataBean);
void loadDaySalesReport(List<BusinessBean> businessBeans);
void loadOrderAnalysis(List<DailyReportBean> dailyReportBeans);
void loadOrderDetailsReport(List<DailyReportBean> dailyReportBeans);
void loadDiscountDetailsReport(List<DailyReportBean> dailyReportBeans);
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
...@@ -37,5 +50,14 @@ public interface BusinessReportContract { ...@@ -37,5 +50,14 @@ public interface BusinessReportContract {
Observable<MainBusinessBean> getRestaurantBusinessAmount(Map<String, String> map); Observable<MainBusinessBean> getRestaurantBusinessAmount(Map<String, String> map);
Observable<BusinessDetailsBean> getRestaurantBusinessDetails(Map<String, String> map); Observable<BusinessDetailsBean> getRestaurantBusinessDetails(Map<String, String> map);
Observable<DaySalesReportBean> getDaySalesReport(Map<String, String> map);
Observable<OrderAnalysisBean> getOrderAnalysis(Map<String, String> map);
Observable<OrderDetailsReport> getOrderDetailsReport(Map<String, String> map);
Observable<DiscountDetailsReportBean> getDiscountDetails(Map<String, String> map);
} }
} }
...@@ -4,7 +4,11 @@ import android.app.Application; ...@@ -4,7 +4,11 @@ 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.BusinessDetailsBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessDetailsBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DaySalesReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DiscountDetailsReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.OrderAnalysisBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.OrderDetailsReport;
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;
...@@ -60,4 +64,30 @@ public class BusinessReportModel extends BaseModel implements BusinessReportCont ...@@ -60,4 +64,30 @@ public class BusinessReportModel extends BaseModel implements BusinessReportCont
return mRepositoryManager.obtainRetrofitService(MainReportService.class) return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getRestaurantDetails(map); .getRestaurantDetails(map);
} }
}
\ No newline at end of file @Override
public Observable<DaySalesReportBean> getDaySalesReport(Map<String, String> map) {
return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getDaySalesReport(map);
}
@Override
public Observable<OrderAnalysisBean> getOrderAnalysis(Map<String, String> map) {
return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getOrderAnalysis(map);
}
@Override
public Observable<OrderDetailsReport> getOrderDetailsReport(Map<String, String> map) {
return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getOrderDetailsReport(map);
}
@Override
public Observable<DiscountDetailsReportBean> getDiscountDetails(Map<String, String> map) {
return mRepositoryManager.obtainRetrofitService(MainReportService.class)
.getDiscountDetails(map);
}
}
package com.gingersoft.gsa.cloud.main.mvp.model.bean;
public class DailyReportBean {
private String type;
private String num;
private String proportion;
private String amount;
public DailyReportBean(String type, String num, String proportion, String amount) {
this.type = type;
this.num = num;
this.proportion = proportion;
this.amount = amount;
}
public DailyReportBean(String type, String num, String amount) {
this.type = type;
this.num = num;
this.amount = amount;
}
public String getType() {
if (type == null) {
return "";
}
return type;
}
public void setType(String type) {
this.type = type;
}
public String getNum() {
if (num == null) {
return "";
}
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getProportion() {
if (proportion == null) {
return "";
}
return proportion;
}
public void setProportion(String proportion) {
this.proportion = proportion;
}
public String getAmount() {
if (amount == null) {
return "";
}
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
}
package com.gingersoft.gsa.cloud.main.mvp.model.bean;
public class DaySalesReportBean {
/**
* success : true
* sysTime : 1597391761029
* data : {"foodAmount":703.04,"disAmount":59.4,"saleAmount":0,"seramount":22.27,"roundAmount":-0.65,"tisAmount":0,"boxAmount":9,"delAmount":0,"billNum":22,"billPerson":14}
*/
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 {
/**
* foodAmount : 703.04
* disAmount : 59.4
* saleAmount : 0.0
* seramount : 22.27
* roundAmount : -0.65
* tisAmount : 0.0
* boxAmount : 9.0
* delAmount : 0.0
* billNum : 22
* billPerson : 14
*/
private double foodAmount;//項目銷售金額
private double disAmount;//折扣
private double saleAmount;//簽單
private double seramount;//服務費
private double roundAmount;//賬單小數
private double tisAmount;//貼士
private double boxAmount;//餐盒費
private double delAmount;//配送費
private int billNum;//正常訂單
private int billPerson;//正常人數
public double getFoodAmount() {
return foodAmount;
}
public void setFoodAmount(double foodAmount) {
this.foodAmount = foodAmount;
}
public double getDisAmount() {
return disAmount;
}
public void setDisAmount(double disAmount) {
this.disAmount = disAmount;
}
public double getSaleAmount() {
return saleAmount;
}
public void setSaleAmount(double saleAmount) {
this.saleAmount = saleAmount;
}
public double getSeramount() {
return seramount;
}
public void setSeramount(double seramount) {
this.seramount = seramount;
}
public double getRoundAmount() {
return roundAmount;
}
public void setRoundAmount(double roundAmount) {
this.roundAmount = roundAmount;
}
public double getTisAmount() {
return tisAmount;
}
public void setTisAmount(double tisAmount) {
this.tisAmount = tisAmount;
}
public double getBoxAmount() {
return boxAmount;
}
public void setBoxAmount(double boxAmount) {
this.boxAmount = boxAmount;
}
public double getDelAmount() {
return delAmount;
}
public void setDelAmount(double delAmount) {
this.delAmount = delAmount;
}
public int getBillNum() {
return billNum;
}
public void setBillNum(int billNum) {
this.billNum = billNum;
}
public int getBillPerson() {
return billPerson;
}
public void setBillPerson(int billPerson) {
this.billPerson = billPerson;
}
}
}
package com.gingersoft.gsa.cloud.main.mvp.model.bean;
import java.util.List;
public class DiscountDetailsReportBean {
/**
* success : true
* sysTime : 1597391995745
* data : {"billNumSum":1,"list":[{"couponName":"6折Ginger折扣券","billNum":1,"amount":59.4}],"amountSum":59.4}
*/
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 {
/**
* billNumSum : 1
* list : [{"couponName":"6折Ginger折扣券","billNum":1,"amount":59.4}]
* amountSum : 59.4
*/
private int billNumSum;
private double amountSum;
private List<ListBean> list;
public int getBillNumSum() {
return billNumSum;
}
public void setBillNumSum(int billNumSum) {
this.billNumSum = billNumSum;
}
public double getAmountSum() {
return amountSum;
}
public void setAmountSum(double amountSum) {
this.amountSum = amountSum;
}
public List<ListBean> getList() {
return list;
}
public void setList(List<ListBean> list) {
this.list = list;
}
public static class ListBean {
/**
* couponName : 6折Ginger折扣券
* billNum : 1
* amount : 59.4
*/
private String couponName;
private int billNum;
private double amount;
public String getCouponName() {
return couponName;
}
public void setCouponName(String couponName) {
this.couponName = couponName;
}
public int getBillNum() {
return billNum;
}
public void setBillNum(int billNum) {
this.billNum = billNum;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
}
}
}
package com.gingersoft.gsa.cloud.main.mvp.model.bean;
import java.util.List;
public class OrderAnalysisBean {
/**
* success : true
* sysTime : 1597391872452
* data : {"billNumSum":17,"list":[{"payName":"Apple pay","billNum":2,"payAmount":22.8,"percentage":3.92},{"payName":"StripVisa","billNum":1,"payAmount":89.1,"percentage":15.3},{"payName":"中銀支付","billNum":1,"payAmount":96,"percentage":16.49},{"payName":"支付寶","billNum":2,"payAmount":92.4,"percentage":15.87},{"payName":"支付寶支付","billNum":5,"payAmount":100,"percentage":17.17},{"payName":"支付寶支付hk","billNum":1,"payAmount":31.5,"percentage":5.41},{"payName":"服務員確認","billNum":5,"payAmount":150.5,"percentage":25.85}],"amountSum":582.3}
*/
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 {
/**
* billNumSum : 17
* list : [{"payName":"Apple pay","billNum":2,"payAmount":22.8,"percentage":3.92},{"payName":"StripVisa","billNum":1,"payAmount":89.1,"percentage":15.3},{"payName":"中銀支付","billNum":1,"payAmount":96,"percentage":16.49},{"payName":"支付寶","billNum":2,"payAmount":92.4,"percentage":15.87},{"payName":"支付寶支付","billNum":5,"payAmount":100,"percentage":17.17},{"payName":"支付寶支付hk","billNum":1,"payAmount":31.5,"percentage":5.41},{"payName":"服務員確認","billNum":5,"payAmount":150.5,"percentage":25.85}]
* amountSum : 582.3
*/
private int billNumSum;
private double amountSum;
private List<ListBean> list;
public int getBillNumSum() {
return billNumSum;
}
public void setBillNumSum(int billNumSum) {
this.billNumSum = billNumSum;
}
public double getAmountSum() {
return amountSum;
}
public void setAmountSum(double amountSum) {
this.amountSum = amountSum;
}
public List<ListBean> getList() {
return list;
}
public void setList(List<ListBean> list) {
this.list = list;
}
public static class ListBean {
/**
* payName : Apple pay
* billNum : 2
* payAmount : 22.8
* percentage : 3.92
*/
private String payName;
private int billNum;
private double payAmount;
private double percentage;
public String getPayName() {
return payName;
}
public void setPayName(String payName) {
this.payName = payName;
}
public int getBillNum() {
return billNum;
}
public void setBillNum(int billNum) {
this.billNum = billNum;
}
public double getPayAmount() {
return payAmount;
}
public void setPayAmount(double payAmount) {
this.payAmount = payAmount;
}
public double getPercentage() {
return percentage;
}
public void setPercentage(double percentage) {
this.percentage = percentage;
}
}
}
}
package com.gingersoft.gsa.cloud.main.mvp.model.bean;
import java.util.List;
public class OrderDetailsReport {
/**
* success : true
* sysTime : 1597391944112
* data : {"billNumSum":17,"list":[{"orderType":"堂食","billNum":2,"payAmount":164,"percentage":28.16},{"orderType":"外賣","billNum":1,"payAmount":89.1,"percentage":15.3},{"orderType":"自取","billNum":14,"payAmount":329.2,"percentage":56.53}],"amountSum":582.3}
*/
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 {
/**
* billNumSum : 17
* list : [{"orderType":"堂食","billNum":2,"payAmount":164,"percentage":28.16},{"orderType":"外賣","billNum":1,"payAmount":89.1,"percentage":15.3},{"orderType":"自取","billNum":14,"payAmount":329.2,"percentage":56.53}]
* amountSum : 582.3
*/
private int billNumSum;
private double amountSum;
private List<ListBean> list;
public int getBillNumSum() {
return billNumSum;
}
public void setBillNumSum(int billNumSum) {
this.billNumSum = billNumSum;
}
public double getAmountSum() {
return amountSum;
}
public void setAmountSum(double amountSum) {
this.amountSum = amountSum;
}
public List<ListBean> getList() {
return list;
}
public void setList(List<ListBean> list) {
this.list = list;
}
public static class ListBean {
/**
* orderType : 堂食
* billNum : 2
* payAmount : 164.0
* percentage : 28.16
*/
private String orderType;
private int billNum;
private double payAmount;
private double percentage;
public String getOrderType() {
return orderType;
}
public void setOrderType(String orderType) {
this.orderType = orderType;
}
public int getBillNum() {
return billNum;
}
public void setBillNum(int billNum) {
this.billNum = billNum;
}
public double getPayAmount() {
return payAmount;
}
public void setPayAmount(double payAmount) {
this.payAmount = payAmount;
}
public double getPercentage() {
return percentage;
}
public void setPercentage(double percentage) {
this.percentage = percentage;
}
}
}
}
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.BusinessDetailsBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessDetailsBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DaySalesReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DiscountDetailsReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean; 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.OrderAnalysisBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.OrderDetailsReport;
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;
...@@ -62,4 +66,25 @@ public interface MainReportService { ...@@ -62,4 +66,25 @@ public interface MainReportService {
//獲取首頁功能列表 //獲取首頁功能列表
@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);
//每日營業詳情
@Headers({"Domain-Name: gsa_report"})
@GET("cloudGsaReport/daySalesReport" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<DaySalesReportBean> getDaySalesReport(@QueryMap Map<String, String> map);
//賬單分析
@Headers({"Domain-Name: gsa_report"})
@GET("cloudGsaReport/orderAnalysis" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<OrderAnalysisBean> getOrderAnalysis(@QueryMap Map<String, String> map);
//訂單詳情
@Headers({"Domain-Name: gsa_report"})
@GET("cloudGsaReport/orderDetails" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<OrderDetailsReport> getOrderDetailsReport(@QueryMap Map<String, String> map);
//折扣詳情
@Headers({"Domain-Name: gsa_report"})
@GET("cloudGsaReport/discountDetails" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<DiscountDetailsReportBean> getDiscountDetails(@QueryMap Map<String, String> map);
} }
...@@ -5,15 +5,18 @@ import android.app.Application; ...@@ -5,15 +5,18 @@ import android.app.Application;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil; import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
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.BusinessDetailsBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.DailyReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DaySalesReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DiscountDetailsReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean; import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.OrderAnalysisBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.OrderDetailsReport;
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;
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.jess.arms.utils.RxLifecycleUtils;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -94,71 +97,210 @@ public class BusinessReportPresenter extends BasePresenter<BusinessReportContrac ...@@ -94,71 +97,210 @@ public class BusinessReportPresenter extends BasePresenter<BusinessReportContrac
public void getRestaurantBusinessInfo(String restaurantId, String startTime, String endTime) { public void getRestaurantBusinessInfo(String restaurantId, String startTime, String endTime) {
// Map<String, String> map = new HashMap<>();
// map.put("restaurantId", restaurantId);
// map.put("startTime", startTime);
// map.put("endTime", endTime);
// mModel.getRestaurantBusinessDetails(map)
// .subscribeOn(Schedulers.io())
// .doOnSubscribe(disposable -> mRootView.showLoading(""))
// .subscribeOn(AndroidSchedulers.mainThread())
// .observeOn(AndroidSchedulers.mainThread())
// .doAfterTerminate(() -> mRootView.hideLoading())
// .compose(RxLifecycleUtils.bindToLifecycle(mRootView))
// .subscribe(new ErrorHandleSubscriber<BusinessDetailsBean>(mErrorHandler) {
//
// @Override
// public void onNext(@NonNull BusinessDetailsBean info) {
// if (info != null && info.isSuccess()) {
// loadAdapterInfo(info.getData());
// } else {
// mRootView.showMessage("營業信息獲取失敗");
// }
// }
// });
}
public void getDaySalesReport(String restaurantId, String startTime, String endTime) {
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
map.put("restaurantId", restaurantId); map.put("restaurantId", restaurantId);
map.put("startTime", startTime); map.put("startDate", startTime);
map.put("endTime", endTime); map.put("endDate", endTime);
mModel.getRestaurantBusinessDetails(map) mModel.getDaySalesReport(map)
.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<BusinessDetailsBean>(mErrorHandler) { .subscribe(new ErrorHandleSubscriber<DaySalesReportBean>(mErrorHandler) {
@Override @Override
public void onNext(@NonNull BusinessDetailsBean info) { public void onNext(@NonNull DaySalesReportBean info) {
if (info != null && info.isSuccess()) { if (info != null && info.isSuccess()) {
loadAdapterInfo(info.getData()); loadDaySalesReport(info.getData());
} else { }
mRootView.showMessage("營業信息獲取失敗"); }
});
}
public void getOrderAnalysis(String restaurantId, String startTime, String endTime) {
Map<String, String> map = new HashMap<>();
map.put("restaurantId", restaurantId);
map.put("startDate", startTime);
map.put("endDate", endTime);
mModel.getOrderAnalysis(map)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<OrderAnalysisBean>(mErrorHandler) {
@Override
public void onNext(@NonNull OrderAnalysisBean info) {
if (info != null && info.isSuccess() && info.getData() != null) {
if (info.getData().getList() != null) {
List<DailyReportBean> dailyReportBeans = new ArrayList<>();
dailyReportBeans.add(new DailyReportBean("支付統計", "賬單數量", "佔比(%)", "金額"));
for (OrderAnalysisBean.DataBean.ListBean listBean : info.getData().getList()) {
dailyReportBeans.add(new DailyReportBean(listBean.getPayName(), listBean.getBillNum() + "", listBean.getPercentage() + "", listBean.getPayAmount() + ""));
}
dailyReportBeans.add(new DailyReportBean("合計", info.getData().getBillNumSum() + "", "100", info.getData().getAmountSum() + ""));
mRootView.loadOrderAnalysis(dailyReportBeans);
}
}
}
});
}
public void getOrderDetailsReport(String restaurantId, String startTime, String endTime) {
Map<String, String> map = new HashMap<>();
map.put("restaurantId", restaurantId);
map.put("startDate", startTime);
map.put("endDate", endTime);
mModel.getOrderDetailsReport(map)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<OrderDetailsReport>(mErrorHandler) {
@Override
public void onNext(@NonNull OrderDetailsReport info) {
if (info != null && info.isSuccess() && info.getData() != null) {
if (info.getData().getList() != null) {
List<DailyReportBean> dailyReportBeans = new ArrayList<>();
dailyReportBeans.add(new DailyReportBean("訂單類型", "訂單數量", "佔比(%)", "金額"));
for (OrderDetailsReport.DataBean.ListBean listBean : info.getData().getList()) {
dailyReportBeans.add(new DailyReportBean(listBean.getOrderType(), listBean.getBillNum() + "", listBean.getPercentage() + "", listBean.getPayAmount() + ""));
}
dailyReportBeans.add(new DailyReportBean("合計", info.getData().getBillNumSum() + "", "100", info.getData().getAmountSum() + ""));
mRootView.loadOrderDetailsReport(dailyReportBeans);
}
}
}
});
}
public void getDiscountDetails(String restaurantId, String startTime, String endTime) {
Map<String, String> map = new HashMap<>();
map.put("restaurantId", restaurantId);
map.put("startDate", startTime);
map.put("endDate", endTime);
mModel.getDiscountDetails(map)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(""))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<DiscountDetailsReportBean>(mErrorHandler) {
@Override
public void onNext(@NonNull DiscountDetailsReportBean info) {
if (info != null && info.isSuccess() && info.getData() != null) {
if (info.getData().getList() != null) {
List<DailyReportBean> dailyReportBeans = new ArrayList<>();
dailyReportBeans.add(new DailyReportBean("折扣名稱", "訂單數量", "金額"));
for (DiscountDetailsReportBean.DataBean.ListBean listBean : info.getData().getList()) {
dailyReportBeans.add(new DailyReportBean(listBean.getCouponName(), listBean.getBillNum() + "", listBean.getAmount() + ""));
}
dailyReportBeans.add(new DailyReportBean("合計", info.getData().getBillNumSum() + "", info.getData().getAmountSum() + ""));
mRootView.loadDiscountDetailsReport(dailyReportBeans);
}
} }
} }
}); });
} }
private String[] itemNames = new String[]{"項目銷售總金額($)", "折扣($)", "服務費($)", "賬單小數($)", "簽單($)", "營業金額淨值($)", "貼士($)", "堂食總金額數($)", "外賣總金額數($)", "單數", "平均每單消費金額($)", "人數", "平均每人消費金額($)","送貨費($)","餐盒費($)"};
private void loadAdapterInfo(BusinessDetailsBean.DataBean dataBean) { private void loadDaySalesReport(DaySalesReportBean.DataBean dataBean) {
//底部信息默認顯示今天的數據 String[] itemNames = new String[]{"項目銷售總金額", "折扣", "服務費", "賬單小數", "簽單", "貼士", "餐盒費", "送貨費", "營業金額淨值"};
List<BusinessBean> businessBeans = new ArrayList<>(); List<BusinessBean> businessBeans = new ArrayList<>();
if (dataBean != null) { if (dataBean != null) {
businessBeans.add(new BusinessBean(itemNames[0], String.valueOf(dataBean.getPrices()))); businessBeans.add(new BusinessBean(itemNames[0], String.valueOf(dataBean.getFoodAmount())));
businessBeans.add(new BusinessBean(itemNames[1], String.valueOf(dataBean.getDisamount()))); businessBeans.add(new BusinessBean(itemNames[1], String.valueOf(dataBean.getDisAmount())));
businessBeans.add(new BusinessBean(itemNames[2], String.valueOf(dataBean.getScamount()))); businessBeans.add(new BusinessBean(itemNames[2], String.valueOf(dataBean.getSeramount())));
businessBeans.add(new BusinessBean(itemNames[3], String.valueOf(dataBean.getRounding()))); businessBeans.add(new BusinessBean(itemNames[3], String.valueOf(dataBean.getRoundAmount())));
businessBeans.add(new BusinessBean(itemNames[4], String.valueOf(dataBean.getPayamount()))); businessBeans.add(new BusinessBean(itemNames[4], String.valueOf(dataBean.getSaleAmount())));
//折扣+賬單小數+簽單 businessBeans.add(new BusinessBean(itemNames[5], String.valueOf(dataBean.getTisAmount())));
double expenditure = MoneyUtil.sum(MoneyUtil.sum(dataBean.getDisamount(), dataBean.getRounding()), dataBean.getPayamount()); businessBeans.add(new BusinessBean(itemNames[6], String.valueOf(dataBean.getBoxAmount())));
//服務費和貼士 businessBeans.add(new BusinessBean(itemNames[7], String.valueOf(dataBean.getDelAmount())));
double extraIncome = MoneyUtil.sum(dataBean.getScamount(), dataBean.getTipsPrice()); double netProfit = MoneyUtil.sub(dataBean.getFoodAmount(), dataBean.getDisAmount(), dataBean.getSeramount(), dataBean.getRoundAmount(), dataBean.getSaleAmount(), dataBean.getTisAmount(), dataBean.getBoxAmount(), dataBean.getDelAmount());
//"營業金額淨值"為項目銷售總金額-折扣+服務費-賬單小數-簽單 businessBeans.add(new BusinessBean(itemNames[8], String.valueOf(netProfit)));
businessBeans.add(new BusinessBean(itemNames[5], String.valueOf(MoneyUtil.sub(MoneyUtil.sum(dataBean.getPrices(), extraIncome), Math.abs(expenditure)))));
businessBeans.add(new BusinessBean(itemNames[6], String.valueOf(dataBean.getTipsPrice())));
businessBeans.add(new BusinessBean(itemNames[7], String.valueOf(dataBean.getTotalMeals())));
businessBeans.add(new BusinessBean(itemNames[8], String.valueOf(dataBean.getTakeawayTotal())));
businessBeans.add(new BusinessBean(itemNames[9], String.valueOf(dataBean.getNum())));//單數
BigDecimal averageBill = new BigDecimal(0);
if (dataBean.getNum() != 0) {
averageBill = MoneyUtil.divide(dataBean.getPrices(), dataBean.getNum());
}
businessBeans.add(new BusinessBean(itemNames[10], String.valueOf(averageBill)));//"平均每單"
businessBeans.add(new BusinessBean(itemNames[11], String.valueOf(dataBean.getPerson())));//人數
BigDecimal averageConsumption = new BigDecimal(0);
if (dataBean.getPerson() != 0) {
averageConsumption = MoneyUtil.divide(dataBean.getPrices(), dataBean.getPerson());
}
businessBeans.add(new BusinessBean(itemNames[12], String.valueOf(averageConsumption)));//平均每人
businessBeans.add(new BusinessBean(itemNames[13], String.valueOf(dataBean.getDeliveryCharge())));
businessBeans.add(new BusinessBean(itemNames[14], String.valueOf(dataBean.getTotalLunchbox())));
} else { } else {
//為空,全部顯示0 //為空,全部顯示0
for (String itemName : itemNames) { for (String itemName : itemNames) {
businessBeans.add(new BusinessBean(itemName, String.valueOf(0))); businessBeans.add(new BusinessBean(itemName, String.valueOf(0)));
} }
} }
mRootView.loadAdapter(businessBeans); mRootView.loadDaySalesReport(businessBeans);
mRootView.loadBillReport(dataBean);
} }
// private String[] itemNames = new String[]{"項目銷售總金額($)", "折扣($)", "服務費($)", "賬單小數($)", "簽單($)", "營業金額淨值($)", "貼士($)", "堂食總金額數($)", "外賣總金額數($)", "單數", "平均每單消費金額($)", "人數", "平均每人消費金額($)", "送貨費($)", "餐盒費($)"};
//
// private void loadAdapterInfo(BusinessDetailsBean.DataBean dataBean) {
// //底部信息默認顯示今天的數據
// List<BusinessBean> businessBeans = new ArrayList<>();
// if (dataBean != null) {
// businessBeans.add(new BusinessBean(itemNames[0], String.valueOf(dataBean.getPrices())));
// businessBeans.add(new BusinessBean(itemNames[1], String.valueOf(dataBean.getDisamount())));
// businessBeans.add(new BusinessBean(itemNames[2], String.valueOf(dataBean.getScamount())));
// businessBeans.add(new BusinessBean(itemNames[3], String.valueOf(dataBean.getRounding())));
// businessBeans.add(new BusinessBean(itemNames[4], String.valueOf(dataBean.getPayamount())));
// //折扣+賬單小數+簽單
// double expenditure = MoneyUtil.sum(MoneyUtil.sum(dataBean.getDisamount(), dataBean.getRounding()), dataBean.getPayamount());
// //服務費和貼士
// double extraIncome = MoneyUtil.sum(dataBean.getScamount(), dataBean.getTipsPrice());
// //"營業金額淨值"為項目銷售總金額-折扣+服務費-賬單小數-簽單
// businessBeans.add(new BusinessBean(itemNames[5], String.valueOf(MoneyUtil.sub(MoneyUtil.sum(dataBean.getPrices(), extraIncome), Math.abs(expenditure)))));
// businessBeans.add(new BusinessBean(itemNames[6], String.valueOf(dataBean.getTipsPrice())));
// businessBeans.add(new BusinessBean(itemNames[7], String.valueOf(dataBean.getTotalMeals())));
// businessBeans.add(new BusinessBean(itemNames[8], String.valueOf(dataBean.getTakeawayTotal())));
// businessBeans.add(new BusinessBean(itemNames[9], String.valueOf(dataBean.getNum())));//單數
// BigDecimal averageBill = new BigDecimal(0);
// if (dataBean.getNum() != 0) {
// averageBill = MoneyUtil.divide(dataBean.getPrices(), dataBean.getNum());
// }
// businessBeans.add(new BusinessBean(itemNames[10], String.valueOf(averageBill)));//"平均每單"
// businessBeans.add(new BusinessBean(itemNames[11], String.valueOf(dataBean.getPerson())));//人數
// BigDecimal averageConsumption = new BigDecimal(0);
// if (dataBean.getPerson() != 0) {
// averageConsumption = MoneyUtil.divide(dataBean.getPrices(), dataBean.getPerson());
// }
// businessBeans.add(new BusinessBean(itemNames[12], String.valueOf(averageConsumption)));//平均每人
//
// businessBeans.add(new BusinessBean(itemNames[13], String.valueOf(dataBean.getDeliveryCharge())));
// businessBeans.add(new BusinessBean(itemNames[14], String.valueOf(dataBean.getTotalLunchbox())));
// } else {
// //為空,全部顯示0
// for (String itemName : itemNames) {
// businessBeans.add(new BusinessBean(itemName, String.valueOf(0)));
// }
// }
// mRootView.loadDaySalesReport(businessBeans);
// }
} }
package com.gingersoft.gsa.cloud.main.mvp.ui.adapter; package com.gingersoft.gsa.cloud.main.mvp.ui.adapter;
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;
...@@ -14,16 +16,25 @@ import java.util.List; ...@@ -14,16 +16,25 @@ import java.util.List;
*/ */
public class BusinessInfoAdapter extends BaseQuickAdapter<BusinessBean, BaseViewHolder> { public class BusinessInfoAdapter extends BaseQuickAdapter<BusinessBean, BaseViewHolder> {
public BusinessInfoAdapter(int layout,@Nullable List<BusinessBean> data) { private boolean isPrint;
// super(R.layout.report_business_info_item, data);
super(layout, data);
public BusinessInfoAdapter(@Nullable List<BusinessBean> data, boolean isPrint) {
super(R.layout.report_business_info_item, data);
this.isPrint = isPrint;
} }
@Override @Override
protected void convert(BaseViewHolder helper, BusinessBean item) { protected void convert(BaseViewHolder helper, BusinessBean item) {
helper.setText(R.id.tv_business_info_amount, item.getAmount() + ""); helper.setText(R.id.tv_business_info_amount, item.getAmount() + "");
helper.setText(R.id.tv_business_info_name, item.getProjectName()); helper.setText(R.id.tv_business_info_name, item.getProjectName());
if (isPrint) {
((TextView) helper.getView(R.id.tv_business_info_name)).setTextSize(22);
((TextView) helper.getView(R.id.tv_business_info_amount)).setTextSize(22);
helper.setBackgroundColor(R.id.horizontal_dividing_line, R.color.black);
helper.setBackgroundColor(R.id.vertical_dividing_line, R.color.black);
} else {
((TextView) helper.getView(R.id.tv_business_info_amount)).setTextSize(18);
((TextView) helper.getView(R.id.tv_business_info_name)).setTextSize(12);
}
} }
} }
package com.gingersoft.gsa.cloud.main.mvp.ui.adapter;
import android.content.Context;
import android.graphics.drawable.GradientDrawable;
import android.widget.TextView;
import androidx.core.content.ContextCompat;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DailyReportBean;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class DailyBusinessAdapter extends BaseQuickAdapter<DailyReportBean, BaseViewHolder> {
private int spanCount;
private Context context;
private GradientDrawable drawable;
private boolean isPrint;
public DailyBusinessAdapter(Context context, @Nullable List<DailyReportBean> data) {
this(context, data, 4, false);
}
public DailyBusinessAdapter(Context context, @Nullable List<DailyReportBean> data, int spanCount, boolean isPrint) {
super(R.layout.item_public_report, data);
this.spanCount = spanCount;
this.context = context;
this.isPrint = isPrint;
drawable = new GradientDrawable();
drawable.setCornerRadii(new float[]{0, 0, 8, 8});
}
@Override
protected void convert(@NotNull BaseViewHolder baseViewHolder, DailyReportBean dailyReportBean) {
if (spanCount == 3) {
baseViewHolder.setGone(R.id.tv_public_three, true);
} else {
baseViewHolder.setGone(R.id.tv_public_three, false);
}
baseViewHolder.setText(R.id.tv_public_one, dailyReportBean.getType());
baseViewHolder.setText(R.id.tv_public_two, dailyReportBean.getNum());
baseViewHolder.setText(R.id.tv_public_three, dailyReportBean.getProportion());
baseViewHolder.setText(R.id.tv_public_four, dailyReportBean.getAmount());
if (isPrint) {
((TextView) baseViewHolder.getView(R.id.tv_public_one)).setTextSize(24);
((TextView) baseViewHolder.getView(R.id.tv_public_two)).setTextSize(24);
((TextView) baseViewHolder.getView(R.id.tv_public_three)).setTextSize(24);
((TextView) baseViewHolder.getView(R.id.tv_public_four)).setTextSize(24);
baseViewHolder.setBackgroundColor(R.id.horizontal_dividing_line, R.color.black);
baseViewHolder.setBackgroundColor(R.id.vertical_dividing_line, R.color.black);
} else {
if (baseViewHolder.getAdapterPosition() % 2 == 0) {
if (baseViewHolder.getAdapterPosition() == getData().size() - 1) {
drawable.setColor(ContextCompat.getColor(context, R.color.white));
} else {
baseViewHolder.itemView.setBackgroundColor(ContextCompat.getColor(context, R.color.white));
}
} else {
if (baseViewHolder.getAdapterPosition() == getData().size() - 1) {
drawable.setColor(ContextCompat.getColor(context, R.color.color_f9));
} else {
baseViewHolder.itemView.setBackgroundColor(ContextCompat.getColor(context, R.color.color_f9));
}
}
}
}
}
...@@ -12,14 +12,8 @@ import android.widget.TextView; ...@@ -12,14 +12,8 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
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.bin.david.form.core.SmartTable;
import com.bin.david.form.data.column.Column;
import com.bin.david.form.data.table.TableData;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.PrintTransitUtils; import com.gingersoft.gsa.cloud.base.utils.PrintTransitUtils;
import com.gingersoft.gsa.cloud.base.utils.time.TimePickerUtils; import com.gingersoft.gsa.cloud.base.utils.time.TimePickerUtils;
...@@ -31,11 +25,13 @@ import com.gingersoft.gsa.cloud.main.R2; ...@@ -31,11 +25,13 @@ 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.DailyReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DaySalesReportBean;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.MainBusinessBean; 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.activity.SettlementActivity; import com.gingersoft.gsa.cloud.main.mvp.ui.view.BillingAnalysisReportView;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.BusinessInfoAdapter; import com.gingersoft.gsa.cloud.main.mvp.ui.view.DailyBusinessView;
import com.gingersoft.gsa.cloud.main.mvp.ui.view.DividerGridItemDecoration; import com.gingersoft.gsa.cloud.main.mvp.ui.view.OperatingReportView;
import com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AAChartModel; import com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AAChartModel;
import com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AAChartView; import com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AAChartView;
import com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AASeriesElement; import com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AASeriesElement;
...@@ -79,10 +75,10 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -79,10 +75,10 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
@BindView(R2.id.report_business_chart) @BindView(R2.id.report_business_chart)
AAChartView mLineChart; AAChartView mLineChart;
@BindView(R2.id.rv_business_details) // @BindView(R2.id.rv_business_details)
RecyclerView mBusinessDetails; // RecyclerView mBusinessDetails;
@BindView(R2.id.tv_restaurant_name) // @BindView(R2.id.tv_restaurant_name)
TextView mRestaurantName; // TextView mRestaurantName;
@BindView(R2.id.tv_start_time) @BindView(R2.id.tv_start_time)
TextView mTvStartTime; TextView mTvStartTime;
@BindView(R2.id.tv_end_time) @BindView(R2.id.tv_end_time)
...@@ -91,14 +87,24 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -91,14 +87,24 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
TriangleView triangleView; TriangleView triangleView;
@BindView(R2.id.iv_end_time_triangle) @BindView(R2.id.iv_end_time_triangle)
TriangleView endTimeTriangleView; TriangleView endTimeTriangleView;
// @BindView(R2.id.tv_report_bill_number)
// TextView tvBillNumber;
// @BindView(R2.id.tv_report_bill_average_price)
// TextView tvBillAvgPrice;
// @BindView(R2.id.tv_report_people_number)
// TextView tvPeople;
// @BindView(R2.id.tv_report_people_average_price)
// TextView tvPeopleAvgPrice;
@BindView(R2.id.layout_report_print)
LinearLayout layout_report_print;
// @BindView(R2.id.layout_business_report)
// LinearLayout LayoutBusinessReport;
// @BindView(R2.id.table_business) // @BindView(R2.id.table_business)
// SmartTable mTableBusiness; // SmartTable mTableBusiness;
@BindView(R2.id.btn_print_business) @BindView(R2.id.btn_print_business)
QMUIAlphaButton btnPintBusiness; QMUIAlphaButton btnPintBusiness;
// private BusinessInfoAdapter businessInfoAdapter;
private BusinessInfoAdapter businessInfoAdapter; // private BusinessInfoAdapter printBusinessInfoAdapter;
private BusinessInfoAdapter printBusinessInfoAdapter;
//查詢多少天的數據 //查詢多少天的數據
private int manyDay = 7; private int manyDay = 7;
...@@ -127,7 +133,6 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -127,7 +133,6 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
//獲取一段時間內的營業信息,默認獲取七天的數據 //獲取一段時間內的營業信息,默認獲取七天的數據
startTime = TimeUtils.getOldDate(-manyDay); startTime = TimeUtils.getOldDate(-manyDay);
mRestaurantName.setText(GsaCloudApplication.getRestaurantName(mContext));
mTvStartTime.setText(TimeUtils.getOldDate(-manyDay + 1)); mTvStartTime.setText(TimeUtils.getOldDate(-manyDay + 1));
mTvEndTime.setText(TimeUtils.getOldDate(0)); mTvEndTime.setText(TimeUtils.getOldDate(0));
...@@ -298,41 +303,106 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -298,41 +303,106 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
); );
} }
private DailyBusinessView dailyBusinessView;
private BillingAnalysisReportView billingAnalysisReportView;
private OperatingReportView netOperatingAmountView;
private OperatingReportView orderDetailsReportView;
private OperatingReportView discountDetailsReportView;
private View[] printViews = new View[5];
@Override
public void loadBillReport(DaySalesReportBean.DataBean dataBean) {
printViews[1] = new BillingAnalysisReportView(mContext, true, dataBean);
if (billingAnalysisReportView == null) {
billingAnalysisReportView = new BillingAnalysisReportView(mContext, false, dataBean);
if (dailyBusinessView != null) {
layout_report_print.addView(billingAnalysisReportView);
if (netOperatingAmountView != null) {
layout_report_print.addView(netOperatingAmountView);
if (orderDetailsReportView != null) {
layout_report_print.addView(orderDetailsReportView);
if (discountDetailsReportView != null) {
layout_report_print.addView(discountDetailsReportView);
}
}
}
}
} else {
billingAnalysisReportView.setData(dataBean);
}
}
@Override
public void loadDaySalesReport(List<BusinessBean> businessBeans) {
printViews[0] = new DailyBusinessView(mContext, true, businessBeans);
if (dailyBusinessView == null) {
dailyBusinessView = new DailyBusinessView(mContext, false, businessBeans);
layout_report_print.addView(dailyBusinessView);
if (billingAnalysisReportView != null) {
layout_report_print.addView(billingAnalysisReportView);
if (netOperatingAmountView != null) {
layout_report_print.addView(netOperatingAmountView);
if (orderDetailsReportView != null) {
layout_report_print.addView(orderDetailsReportView);
if (discountDetailsReportView != null) {
layout_report_print.addView(discountDetailsReportView);
}
}
}
}
} else {
dailyBusinessView.notifyData(businessBeans);
}
}
@Override @Override
public void loadAdapter(List<BusinessBean> businessBeans) { public void loadOrderAnalysis(List<DailyReportBean> dailyReportBeans) {
// Column<String> column1 = new Column<>("姓名", "name"); printViews[2] = new OperatingReportView(mContext, true, "營業金額淨值詳情", dailyReportBeans, 4);
// Column<Integer> column2 = new Column<>("年龄", "age"); if (netOperatingAmountView == null) {
// Column<Long> column3 = new Column<>("更新时间", "time"); netOperatingAmountView = new OperatingReportView(mContext, false, "營業金額淨值詳情", dailyReportBeans, 4);
// Column<String> column4 = new Column<>("头像", "portrait"); if (billingAnalysisReportView != null && dailyBusinessView != null) {
// //如果是多层,可以通过.来实现多级查询 layout_report_print.addView(netOperatingAmountView);
// Column<String> column5 = new Column<>("班级", "class.className"); if (orderDetailsReportView != null) {
// //组合列 layout_report_print.addView(orderDetailsReportView);
// Column totalColumn1 = new Column("组合列名",column1,column2); if (discountDetailsReportView != null) {
// //表格数据 datas是需要填充的数据 layout_report_print.addView(discountDetailsReportView);
// }
//
// final TableData<BusinessBean> tableData = new TableData<>("表格名", businessBeans, column3);
//
// mTableBusiness.setTableData(tableData);
businessBeans.add(0, new BusinessBean("餐廳名稱", GsaCloudApplication.getBrandName(mContext) + "," + GsaCloudApplication.getRestaurantName(mContext)));
if (businessInfoAdapter == null) {
mBusinessDetails.setLayoutManager(new LinearLayoutManager(mContext) {
@Override
public boolean canScrollVertically() {
return false;
} }
}); }
printBusinessInfoAdapter = new BusinessInfoAdapter(R.layout.report_business_info_item_print, businessBeans); } else {
netOperatingAmountView.notifyData(dailyReportBeans);
}
}
businessInfoAdapter = new BusinessInfoAdapter(R.layout.report_business_info_item_two, businessBeans); @Override
mBusinessDetails.setAdapter(businessInfoAdapter); public void loadOrderDetailsReport(List<DailyReportBean> dailyReportBeans) {
printViews[3] = new OperatingReportView(mContext, true, "訂單詳情", dailyReportBeans, 4);
if (orderDetailsReportView == null) {
orderDetailsReportView = new OperatingReportView(mContext, false, "訂單詳情", dailyReportBeans, 4);
if (billingAnalysisReportView != null && dailyBusinessView != null && netOperatingAmountView != null) {
layout_report_print.addView(orderDetailsReportView);
if (discountDetailsReportView != null) {
layout_report_print.addView(discountDetailsReportView);
}
}
} else { } else {
printBusinessInfoAdapter.setNewInstance(businessBeans); orderDetailsReportView.notifyData(dailyReportBeans);
businessInfoAdapter.setNewInstance(businessBeans);
} }
}
@Override
public void loadDiscountDetailsReport(List<DailyReportBean> dailyReportBeans) {
printViews[4] = new OperatingReportView(mContext, true, "折扣詳情", dailyReportBeans, 3);
if (discountDetailsReportView == null) {
discountDetailsReportView = new OperatingReportView(mContext, false, "折扣詳情", dailyReportBeans, 3);
if (billingAnalysisReportView != null && dailyBusinessView != null && netOperatingAmountView != null && orderDetailsReportView != null) {
layout_report_print.addView(discountDetailsReportView);
}
} else {
discountDetailsReportView.notifyData(dailyReportBeans);
}
} }
@OnClick({R2.id.btn_print_business, R2.id.tv_start_time, R2.id.iv_start_time_triangle, R2.id.tv_end_time, R2.id.iv_end_time_triangle}) @OnClick({R2.id.btn_print_business, R2.id.tv_start_time, R2.id.iv_start_time_triangle, R2.id.tv_end_time, R2.id.iv_end_time_triangle})
...@@ -341,18 +411,25 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -341,18 +411,25 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
int viewId = v.getId(); int viewId = v.getId();
if (viewId == R.id.btn_print_business) { if (viewId == R.id.btn_print_business) {
//打印 //打印
View view = View.inflate(mContext, R.layout.layout_print_business, null); LinearLayout layout = new LinearLayout(mContext);
RecyclerView recyclerView = view.findViewById(R.id.rv_print_business_details); layout.removeAllViews();
recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); layout.setOrientation(LinearLayout.VERTICAL);
recyclerView.setAdapter(printBusinessInfoAdapter); for (int i = 0; i < printViews.length; i++) {
//清機成功,打印 if (printViews[i] == null) {
PrintTransitUtils.getInstance().setPrintView(view); showMessage("報表未加載完成,請稍後重試...");
layout.removeAllViews();
return;
}
layout.addView(printViews[i]);
}
PrintTransitUtils.getInstance().setPrintView(layout);
CC.obtainBuilder("Component.Print") CC.obtainBuilder("Component.Print")
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_CLEAN_MACHINE)//清機打印 .addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_CLEAN_MACHINE)//清機打印
.setActionName("printActivity") .setActionName("printActivity")
.build() .build()
.callAsyncCallbackOnMainThread((cc, result) -> { .callAsyncCallbackOnMainThread((cc, result) -> {
//打印完之後,清除view // 打印完之後,清除view
layout.removeAllViews();
PrintTransitUtils.getInstance().setPrintView(null); PrintTransitUtils.getInstance().setPrintView(null);
}); });
} else if (viewId == R.id.tv_start_time || viewId == R.id.iv_start_time_triangle || viewId == R.id.tv_end_time || viewId == R.id.iv_end_time_triangle) { } else if (viewId == R.id.tv_start_time || viewId == R.id.iv_start_time_triangle || viewId == R.id.tv_end_time || viewId == R.id.iv_end_time_triangle) {
...@@ -389,27 +466,6 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -389,27 +466,6 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
} else { } else {
mTvEndTime.setText(TimeUtils.DATE_FORMAT_DATE.format(date)); mTvEndTime.setText(TimeUtils.DATE_FORMAT_DATE.format(date));
} }
// Calendar calendar = Calendar.getInstance();
// calendar.setTime(date);
// int month = calendar.get(Calendar.MONTH);
// int day = calendar.get(Calendar.DAY_OF_MONTH);
// calendar.setTime(new Date());
// //如果不是當前月份,那麼報表最多顯示最近七天
// if (month != calendar.get(Calendar.MONTH)) {
// manyDay = 7;
// } else {
// //如果選中的是當前月份,判斷天數是否大於7
// if (calendar.get(Calendar.DAY_OF_MONTH) - day > 7) {
// manyDay = 7;
// } else {
// manyDay = calendar.get(Calendar.DAY_OF_MONTH) - day;
// if (manyDay < 0) {
// manyDay = 0;
// }
// }
// }
getInfo(); getInfo();
}).setOnDismissListener(o -> { }).setOnDismissListener(o -> {
if (triangleView.isOpen()) { if (triangleView.isOpen()) {
...@@ -431,5 +487,12 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter ...@@ -431,5 +487,12 @@ public class BusinessReportFragment extends BaseFragment<BusinessReportPresenter
String endTime = TimeUtils.getDatebyDate(mTvEndTime.getText().toString(), 1); String endTime = TimeUtils.getDatebyDate(mTvEndTime.getText().toString(), 1);
mPresenter.getRestaurantAmount(GsaCloudApplication.getRestaurantId(mContext) + "", startTime, endTime); mPresenter.getRestaurantAmount(GsaCloudApplication.getRestaurantId(mContext) + "", startTime, endTime);
mPresenter.getRestaurantBusinessInfo(GsaCloudApplication.getRestaurantId(mContext) + "", startTime, endTime); mPresenter.getRestaurantBusinessInfo(GsaCloudApplication.getRestaurantId(mContext) + "", startTime, endTime);
mPresenter.getDaySalesReport(GsaCloudApplication.getRestaurantId(mContext) + "", startTime, endTime);
mPresenter.getOrderAnalysis(GsaCloudApplication.getRestaurantId(mContext) + "", startTime, endTime);
mPresenter.getOrderDetailsReport(GsaCloudApplication.getRestaurantId(mContext) + "", startTime, endTime);
mPresenter.getDiscountDetails(GsaCloudApplication.getRestaurantId(mContext) + "", startTime, endTime);
} }
} }
package com.gingersoft.gsa.cloud.main.mvp.ui.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DaySalesReportBean;
public class BillingAnalysisReportView extends FrameLayout {
private boolean isPrint = false;
private Context mContext;
private TextView tvBillNum;
private TextView tvBillAverage;
private TextView tvPeople;
private TextView tvPeopleAvgPrice;
public BillingAnalysisReportView(@NonNull Context context) {
this(context, null);
}
public BillingAnalysisReportView(@NonNull Context context, boolean isPrint, DaySalesReportBean.DataBean dataBean) {
super(context, null);
this.isPrint = isPrint;
this.mContext = context;
init(mContext, dataBean);
}
public BillingAnalysisReportView(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, -1);
}
public BillingAnalysisReportView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void init(Context mContext,DaySalesReportBean.DataBean dataBean) {
this.mContext = mContext;
View view = View.inflate(mContext, R.layout.layout_report_billing_analysis, null);
TextView tvTitle = view.findViewById(R.id.tv_bill_analysis_title);
tvBillNum = view.findViewById(R.id.tv_report_bill_number);
tvBillAverage = view.findViewById(R.id.tv_report_bill_average_price);
tvPeople = view.findViewById(R.id.tv_report_people_number);
tvPeopleAvgPrice = view.findViewById(R.id.tv_report_people_average_price);
View horizontalLine = view.findViewById(R.id.horizontal_dividing_line);
View verticalLine= view.findViewById(R.id.vertical_dividing_line);
if (isPrint) {
tvTitle.setTextSize(30);
((TextView)view.findViewById(R.id.tv_bill_number_text)).setTextSize(26);
((TextView)view.findViewById(R.id.tv_people_text)).setTextSize(26);
tvBillNum.setTextSize(28);
tvBillAverage.setTextSize(20);
tvPeople.setTextSize(28);
tvPeopleAvgPrice.setTextSize(20);
horizontalLine.setBackgroundColor(ContextCompat.getColor(mContext, R.color.black));
verticalLine.setBackgroundColor(ContextCompat.getColor(mContext, R.color.black));
}
setData(dataBean);
addView(view);
}
public void setData(DaySalesReportBean.DataBean dataBean){
tvBillNum.setText(dataBean.getBillNum() + "");
tvBillAverage.setText("單均價:$" + MoneyUtil.divide(dataBean.getFoodAmount(), dataBean.getBillNum()));
tvPeople.setText(dataBean.getBillPerson() + "");
tvPeopleAvgPrice.setText("人均價:$" + MoneyUtil.divide(dataBean.getFoodAmount(), dataBean.getBillPerson()));
}
}
package com.gingersoft.gsa.cloud.main.mvp.ui.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.BusinessBean;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.BusinessInfoAdapter;
import java.util.List;
/**
* 每日營業詳情
*/
public class DailyBusinessView extends FrameLayout {
private boolean isPrint = false;
private BusinessInfoAdapter printBusinessInfoAdapter;
private List<BusinessBean> businessBeans;
private RecyclerView mBusinessDetails;
private Context mContext;
public DailyBusinessView(@NonNull Context context) {
this(context, null);
}
public DailyBusinessView(@NonNull Context context, boolean isPrint, List<BusinessBean> businessBeans) {
super(context, null);
this.isPrint = isPrint;
this.businessBeans = businessBeans;
this.mContext = context;
init(mContext);
}
public DailyBusinessView(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, -1);
}
public DailyBusinessView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context mContext) {
this.mContext = mContext;
View view = View.inflate(mContext, R.layout.layout_report_daily_business_details, null);
TextView tvTitle = view.findViewById(R.id.tv_daily_business_statement_title);
TextView tvRestaurantName = view.findViewById(R.id.tv_restaurant_name);
View horizontalLine = view.findViewById(R.id.horizontal_dividing_line);
mBusinessDetails = view.findViewById(R.id.rv_business_details);
tvRestaurantName.setText(GsaCloudApplication.getRestaurantName(mContext));
if (isPrint) {
tvRestaurantName.setTextSize(24);
tvTitle.setTextSize(30);
horizontalLine.setBackgroundColor(ContextCompat.getColor(mContext, R.color.black));
}
notifyData(businessBeans);
addView(view);
}
public void notifyData(List<BusinessBean> businessBeans){
if (printBusinessInfoAdapter == null) {
mBusinessDetails.setLayoutManager(new GridLayoutManager(mContext, 3) {
@Override
public boolean canScrollVertically() {
return false;
}
});
printBusinessInfoAdapter = new BusinessInfoAdapter(businessBeans, isPrint);
mBusinessDetails.setAdapter(printBusinessInfoAdapter);
} else {
printBusinessInfoAdapter.setNewInstance(businessBeans);
}
}
}
package com.gingersoft.gsa.cloud.main.mvp.ui.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.main.R;
import com.gingersoft.gsa.cloud.main.mvp.model.bean.DailyReportBean;
import com.gingersoft.gsa.cloud.main.mvp.ui.adapter.DailyBusinessAdapter;
import java.util.List;
public class OperatingReportView extends FrameLayout {
private boolean isPrint = false;
private DailyBusinessAdapter adapter;
public OperatingReportView(@NonNull Context context) {
this(context, null);
}
public OperatingReportView(@NonNull Context context, boolean isPrint, String title, List<DailyReportBean> dailyReportBeans, int spanCount) {
super(context, null);
this.isPrint = isPrint;
init(context, title, dailyReportBeans, spanCount);
}
public OperatingReportView(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, -1);
}
public OperatingReportView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void init(Context mContext, String title, List<DailyReportBean> dailyReportBeans, int spanCount) {
View view = View.inflate(mContext, R.layout.layout_report_net_operating_value_details, null);
TextView tvTitle = view.findViewById(R.id.tv_report_title);
tvTitle.setText(title);
RecyclerView rv = view.findViewById(R.id.rv_business_details);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext) {
@Override
public boolean canScrollVertically() {
return false;
}
};
rv.setLayoutManager(linearLayoutManager);
adapter = new DailyBusinessAdapter(mContext, dailyReportBeans, spanCount, isPrint);
rv.setAdapter(adapter);
if (isPrint) {
tvTitle.setTextSize(30);
}
notifyData(dailyReportBeans);
addView(view);
}
public void notifyData(List<DailyReportBean> dailyReportBeans){
adapter.setNewInstance(dailyReportBeans);
}
}
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/theme_background_color" android:background="@color/theme_background_color"
android:orientation="vertical"> android:layout_height="match_parent">
<LinearLayout <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_above="@id/btn_print_business"
android:background="@color/theme_background_color" android:layout_height="match_parent">
android:orientation="vertical">
<com.lihang.ShadowLayout <LinearLayout
android:id="@+id/layout_business_chart"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_7" android:background="@color/theme_background_color"
android:layout_marginTop="@dimen/dp_7" android:orientation="vertical">
android:layout_marginRight="@dimen/dp_7"
android:paddingBottom="@dimen/dp_15"
app:hl_cornerRadius="@dimen/dp_4"
app:hl_dy="@dimen/main_shadow_dy"
app:hl_shadowBackColor="@color/white"
app:hl_shadowColor="@color/shadow_color"
app:hl_shadowLimit="@dimen/main_shadow_limit">
<LinearLayout <com.lihang.ShadowLayout
android:id="@+id/layout_business_chart"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:layout_marginLeft="@dimen/dp_7"
android:paddingRight="@dimen/dp_10"> android:layout_marginTop="@dimen/dp_7"
android:layout_marginRight="@dimen/dp_7"
android:paddingBottom="@dimen/dp_15"
app:hl_cornerRadius="@dimen/dp_8"
app:hl_dy="@dimen/main_shadow_dy"
app:hl_shadowBackColor="@color/white"
app:hl_shadowColor="@color/shadow_color"
app:hl_shadowLimit="@dimen/main_shadow_limit">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10" android:orientation="vertical"
android:layout_marginTop="@dimen/dp_10" android:paddingBottom="@dimen/dp_10"
android:gravity="center_vertical" android:paddingRight="@dimen/dp_10">
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="營業金額"
android:textColor="#181818"
android:textSize="@dimen/sp_17" />
<TextView
android:id="@+id/tv_start_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#181818"
android:textSize="@dimen/sp_10" />
<com.gingersoft.gsa.cloud.ui.view.TriangleView
android:id="@+id/iv_start_time_triangle"
android:layout_width="@dimen/dp_10"
android:layout_height="@dimen/dp_5"
android:paddingLeft="@dimen/dp_2"
app:trv_direction="bottom" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
android:text="到"
android:textColor="#999"
android:textSize="@dimen/sp_10" />
<TextView <LinearLayout
android:id="@+id/tv_end_time" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7" android:layout_marginLeft="@dimen/dp_10"
android:text="2020-02-14" android:layout_marginTop="@dimen/dp_10"
android:textColor="#181818" android:gravity="center_vertical"
android:textSize="@dimen/sp_10" /> android:orientation="horizontal">
<com.gingersoft.gsa.cloud.ui.view.TriangleView <TextView
android:id="@+id/iv_end_time_triangle" android:layout_width="0dp"
android:layout_width="@dimen/dp_8" android:layout_height="wrap_content"
android:layout_height="@dimen/dp_5" android:layout_weight="1"
android:layout_marginLeft="@dimen/dp_2" android:text="營業金額"
app:trv_direction="bottom" /> android:textColor="#181818"
android:textSize="@dimen/sp_17" />
<TextView
android:id="@+id/tv_start_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#181818"
android:textSize="@dimen/sp_10" />
<com.gingersoft.gsa.cloud.ui.view.TriangleView
android:id="@+id/iv_start_time_triangle"
android:layout_width="@dimen/dp_10"
android:layout_height="@dimen/dp_5"
android:paddingLeft="@dimen/dp_2"
app:trv_direction="bottom" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
android:text="到"
android:textColor="#999"
android:textSize="@dimen/sp_10" />
<TextView
android:id="@+id/tv_end_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
android:text="2020-02-14"
android:textColor="#181818"
android:textSize="@dimen/sp_10" />
<com.gingersoft.gsa.cloud.ui.view.TriangleView
android:id="@+id/iv_end_time_triangle"
android:layout_width="@dimen/dp_8"
android:layout_height="@dimen/dp_5"
android:layout_marginLeft="@dimen/dp_2"
app:trv_direction="bottom" />
</LinearLayout>
<com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AAChartView
android:id="@+id/report_business_chart"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_150"
android:layout_marginTop="@dimen/dp_10" />
</LinearLayout> </LinearLayout>
<com.gingersoft.gsa.cloud.ui.AAChartCore.AAChartCoreLib.AAChartConfiger.AAChartView </com.lihang.ShadowLayout>
android:id="@+id/report_business_chart"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_150"
android:layout_marginTop="@dimen/dp_10" />
</LinearLayout>
</com.lihang.ShadowLayout>
<com.lihang.ShadowLayout
android:id="@+id/layout_business_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
android:layout_marginTop="@dimen/dp_4"
android:layout_marginRight="@dimen/dp_7"
app:hl_cornerRadius="@dimen/dp_4"
app:hl_dy="@dimen/main_shadow_dy"
app:hl_shadowBackColor="@color/white"
app:hl_shadowColor="@color/shadow_color"
app:hl_shadowLimit="@dimen/main_shadow_limit">
<LinearLayout <LinearLayout
android:id="@+id/layout_report_print"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:orientation="vertical"> android:layout_marginLeft="@dimen/dp_7"
android:layout_marginRight="@dimen/dp_7"
<TextView android:layout_below="@+id/layout_business_chart"
android:layout_width="wrap_content" android:orientation="vertical"/>
android:layout_height="wrap_content" </LinearLayout>
android:layout_marginLeft="@dimen/dp_10" </androidx.core.widget.NestedScrollView>
android:layout_marginTop="@dimen/dp_10"
android:text="營業詳情" <com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:textColor="#181818" android:id="@+id/btn_print_business"
android:textSize="@dimen/sp_17" /> android:layout_width="match_parent"
android:layout_height="wrap_content"
<TextView android:layout_alignParentBottom="true"
android:id="@+id/tv_restaurant_name" android:layout_marginLeft="@dimen/dp_10"
android:layout_width="wrap_content" android:layout_marginTop="@dimen/dp_10"
android:layout_height="wrap_content" android:layout_marginRight="@dimen/dp_10"
android:layout_gravity="center_horizontal" android:layout_marginBottom="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_20" android:background="@drawable/shape_app_btn"
android:layout_marginBottom="@dimen/dp_10" android:text="打印"
android:focusable="true" android:textColor="@color/white"
android:focusableInTouchMode="true" android:textSize="@dimen/dp_16" />
android:text="餐廳名稱" </RelativeLayout>
android:textColor="#3c3c3c" \ No newline at end of file
android:textSize="@dimen/dp_16"
android:visibility="gone" />
<!-- <include layout="@layout/include_horizontal_color_ccc_dividing_line" />-->
<!-- <com.bin.david.form.core.SmartTable-->
<!-- android:id="@+id/table_business"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- />-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_business_details"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10" />
<View
android:id="@+id/horizontal_dividing_line"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0_5"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@color/color_ccc" />
<com.qmuiteam.qmui.alpha.QMUIAlphaButton
android:id="@+id/btn_print_business"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/shape_app_btn"
android:text="打印"
android:textColor="@color/white"
android:textSize="@dimen/dp_16" />
</LinearLayout>
</com.lihang.ShadowLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
\ 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:id="@+id/layout_public_report"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/include_horizontal_color_e8_dividing_line" />
<LinearLayout
android:layout_width="match_parent"
android:gravity="center_vertical"
android:layout_height="wrap_content"
android:minHeight="@dimen/dp_35"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_public_one"
style="@style/main_daily_business_statement_item_textStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/dp_5"
android:paddingTop="@dimen/dp_5"
android:paddingBottom="@dimen/dp_5"
android:paddingRight="@dimen/dp_5"
android:layout_weight="1"
tools:text="支付統計" />
<include layout="@layout/include_vertical_color_e8_dividing_line" />
<TextView
android:id="@+id/tv_public_two"
style="@style/main_daily_business_statement_item_textStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/dp_5"
android:paddingRight="@dimen/dp_5"
android:layout_weight="1"
tools:text="賬單數量" />
<include layout="@layout/include_vertical_color_e8_dividing_line" />
<TextView
android:id="@+id/tv_public_three"
style="@style/main_daily_business_statement_item_textStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/dp_5"
android:paddingRight="@dimen/dp_5"
android:layout_weight="1"
tools:text="佔比(%)" />
<include layout="@layout/include_vertical_color_e8_dividing_line" />
<TextView
android:id="@+id/tv_public_four"
style="@style/main_daily_business_statement_item_textStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="@dimen/dp_5"
android:paddingRight="@dimen/dp_5"
tools:text="金額" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.lihang.ShadowLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_business_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
app:hl_cornerRadius="@dimen/dp_8"
app:hl_dy="@dimen/main_shadow_dy"
app:hl_shadowBackColor="@color/white"
app:hl_shadowColor="@color/shadow_color"
app:hl_shadowLimit="@dimen/main_shadow_limit">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_bill_analysis_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
style="@style/main_daily_business_statement_title"
android:text="賬單分析"
android:layout_marginBottom="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_15" />
<include
layout="@layout/include_horizontal_color_e8_dividing_line"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingBottom="@dimen/dp_10"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_bill_number_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#3B3B3B"
android:layout_marginTop="@dimen/dp_5"
android:text="賬單數量" />
<TextView
android:id="@+id/tv_report_bill_number"
android:layout_width="wrap_content"
style="@style/main_daily_business_statement_title"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
tools:text="10000" />
<TextView
android:id="@+id/tv_report_bill_average_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
tools:text="單均價:$100.00" />
</LinearLayout>
<include layout="@layout/include_vertical_color_e8_dividing_line" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingBottom="@dimen/dp_10"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/tv_people_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#3B3B3B"
android:layout_marginTop="@dimen/dp_5"
android:text="人數" />
<TextView
android:id="@+id/tv_report_people_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
style="@style/main_daily_business_statement_title"
tools:text="200" />
<TextView
android:id="@+id/tv_report_people_average_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
tools:text="人均價:$98" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</com.lihang.ShadowLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.lihang.ShadowLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/layout_business_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
android:layout_marginTop="@dimen/dp_5"
android:layout_marginRight="@dimen/dp_7"
app:hl_cornerRadius="@dimen/dp_8"
app:hl_dy="@dimen/main_shadow_dy"
app:hl_shadowBackColor="@color/white"
app:hl_shadowColor="@color/shadow_color"
app:hl_shadowLimit="@dimen/main_shadow_limit">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_daily_business_statement_title"
style="@style/main_daily_business_statement_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_weight="1"
android:text="每日營業詳情" />
<!-- <TextView-->
<!-- android:id="@+id/tv_end_time"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="2020-02-14"-->
<!-- android:textColor="#181818"-->
<!-- android:textSize="@dimen/sp_10" />-->
<!-- <com.gingersoft.gsa.cloud.ui.view.TriangleView-->
<!-- android:id="@+id/iv_end_time_triangle"-->
<!-- android:layout_width="@dimen/dp_8"-->
<!-- android:layout_height="@dimen/dp_5"-->
<!-- android:layout_marginLeft="@dimen/dp_2"-->
<!-- app:trv_direction="bottom" />-->
</LinearLayout>
<TextView
android:id="@+id/tv_restaurant_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_10"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="餐廳名稱"
android:textColor="#3c3c3c"
android:textSize="@dimen/dp_16" />
<include
layout="@layout/include_horizontal_color_e8_dividing_line"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0_5"
android:layout_marginTop="@dimen/dp_10" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_business_details"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</com.lihang.ShadowLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.lihang.ShadowLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_business_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hl_cornerRadius="@dimen/dp_8"
app:hl_dy="@dimen/main_shadow_dy"
app:hl_shadowBackColor="@color/white"
app:hl_shadowColor="@color/shadow_color"
app:hl_shadowLimit="@dimen/main_shadow_limit">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_15"
android:orientation="vertical">
<TextView
android:id="@+id/tv_report_title"
style="@style/main_daily_business_statement_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
tools:text="營業金額淨值詳情" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_business_details"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_15"/>
</LinearLayout>
</com.lihang.ShadowLayout>
\ No newline at end of file
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
android:layout_marginLeft="@dimen/dp_5" android:layout_marginLeft="@dimen/dp_5"
android:layout_marginTop="@dimen/dp_20" android:layout_marginTop="@dimen/dp_20"
android:layout_marginRight="@dimen/dp_5" android:layout_marginRight="@dimen/dp_5"
android:textColor="@color/theme_color" android:textColor="@color/color_3b"
android:textSize="@dimen/dp_20" /> android:textSize="@dimen/dp_20" />
<TextView <TextView
...@@ -30,13 +30,13 @@ ...@@ -30,13 +30,13 @@
android:layout_marginRight="@dimen/dp_5" android:layout_marginRight="@dimen/dp_5"
android:layout_marginBottom="@dimen/dp_20" android:layout_marginBottom="@dimen/dp_20"
android:layout_weight="1" android:layout_weight="1"
android:textColor="@color/color_3c" android:textColor="@color/color_3b"
android:textSize="@dimen/sp_16" /> android:textSize="@dimen/sp_12" />
<include layout="@layout/include_horizontal_color_ccc_dividing_line" /> <include layout="@layout/include_horizontal_color_e8_dividing_line" />
</LinearLayout> </LinearLayout>
<include layout="@layout/include_vertical_color_ccc_dividing_line" /> <include layout="@layout/include_vertical_color_e8_dividing_line" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -8,5 +8,15 @@ ...@@ -8,5 +8,15 @@
<item name="colorAccent">@color/main_colorAccent</item> <item name="colorAccent">@color/main_colorAccent</item>
</style> </style>
<style name="main_daily_business_statement_item_textStyle">
<item name="android:textColor">#3B3B3B</item>
<item name="android:textSize">@dimen/dp_14</item>
<item name="android:gravity">center</item>
</style>
<style name="main_daily_business_statement_title">
<item name="android:textColor">@color/color_18</item>
<item name="android:textSize">@dimen/dp_18</item>
<item name="android:textStyle">bold</item>
</style>
</resources> </resources>
...@@ -7,12 +7,36 @@ import com.billy.cc.core.component.CC; ...@@ -7,12 +7,36 @@ import com.billy.cc.core.component.CC;
import com.billy.cc.core.component.CCResult; import com.billy.cc.core.component.CCResult;
import com.billy.cc.core.component.CCUtil; import com.billy.cc.core.component.CCUtil;
import com.billy.cc.core.component.IComponent; import com.billy.cc.core.component.IComponent;
import com.gingersoft.gsa.cloud.function.FModule;
import com.gingersoft.gsa.other_order_mode.service.GetInfoUpdateService; import com.gingersoft.gsa.other_order_mode.service.GetInfoUpdateService;
import com.gingersoft.gsa.other_order_mode.ui.activity.OtherOrderActivity; import com.gingersoft.gsa.other_order_mode.ui.activity.OtherOrderActivity;
public class OtherOrderComponent implements IComponent { public class OtherOrderComponent implements IComponent {
public static class takeaway{
public static final String CONFIRM_BTN_KEY = "takeaway/orderDetails/btn/confirmOrder";
public static final String PRODUCTION_COMPLETED_BTN_KEY = "takeaway/orderDetails/btn/ProductionCompleted";
public static final String CANCEL_ORDER_BTN_KEY = "takeaway/orderDetails/btn/cancelOrder";
public static final String PRINT_ORDER_BTN_KEY = "takeaway/orderDetails/btn/printOrder";
public static final String LOGISTICS_BTN_KEY = "takeaway/orderDetails/btn/logistics";
public static final String ASSIGNDELIVERY_BTN_KEY = "takeaway/orderDetails/btn/assignDelivery";
public static final String CLOSING_BTN_KEY = "takeaway/orderDetails/btn/closing";
public static final String TRANSPORTATION_BTN_KEY = "takeaway/orderDetails/btn/transportation";
/** 外送/自取- 訂單詳情管理 */
public static final FModule[] orderDetails = {
new FModule(CONFIRM_BTN_KEY, 0, 0),
new FModule(PRODUCTION_COMPLETED_BTN_KEY, 0, 0),
new FModule(CANCEL_ORDER_BTN_KEY, 0, 0),
new FModule(PRINT_ORDER_BTN_KEY, 0, 0),
new FModule(LOGISTICS_BTN_KEY, 0, 0),
new FModule(ASSIGNDELIVERY_BTN_KEY, 0, 0),
new FModule(CLOSING_BTN_KEY, 0, 0),
new FModule(TRANSPORTATION_BTN_KEY, 0, 0),
};
}
@Override @Override
public String getName() { public String getName() {
......
package com.gingersoft.gsa.other_order_mode.data.model.bean package com.gingersoft.gsa.other_order_mode.data.model.bean
import com.gingersoft.gsa.cloud.database.bean.Function
import com.gingersoft.gsa.other_order_mode.OtherOrderComponent
import com.gingersoft.gsa.other_order_mode.R import com.gingersoft.gsa.other_order_mode.R
class BtnBuilder { class BtnBuilder(var functions: List<Function>) {
companion object { companion object {
val sureBtn = 0 val SureBtn = 0
val cancelBtn = 1 val CancelBtn = 1
val printBtn = 2 val PrintBtn = 2
val logisticsBtn = 3 val LogisticsBtn = 3
val assignDeliveryBtn = 4 val AssignDeliveryBtn = 4
val closingBtn = 5 val ClosingBtn = 5
val ProductionCompletedBtn = 6 val ProductionCompletedBtn = 6
val TransportationBtn = 7//選擇運輸工具 val TransportationBtn = 7//選擇運輸工具
@Volatile
private var instance: BtnBuilder? = null
fun getInstance(functions: List<Function>) = instance ?: synchronized(this) {
instance ?: BtnBuilder(functions).also { instance = it }
}
} }
class BtnBean(val type: Int, val btnContent: String, val btnColor: Int, val btnImg: Int) class BtnBean(val type: Int, val btnContent: String, val btnColor: Int, val btnImg: Int)
fun getSureBtn(): BtnBean { fun getSureBtn(): BtnBean? {
return BtnBean(sureBtn, "確認訂單", R.color.other_order_details_sure_btn_color, R.drawable.ic_sure) return getBtn(OtherOrderComponent.takeaway.CONFIRM_BTN_KEY, SureBtn, "確認訂單", R.color.other_order_details_sure_btn_color, R.drawable.ic_sure)
} }
fun getProductionCompletedBtn(): BtnBean { fun getProductionCompletedBtn(): BtnBean? {
return BtnBean(ProductionCompletedBtn, "製作完成", R.color.other_order_details_sure_btn_color, R.drawable.ic_sure) return getBtn(OtherOrderComponent.takeaway.PRODUCTION_COMPLETED_BTN_KEY, ProductionCompletedBtn, "製作完成", R.color.other_order_details_sure_btn_color, R.drawable.ic_sure)
} }
fun getCancelBtn(): BtnBean { fun getCancelBtn(): BtnBean? {
return BtnBean(cancelBtn, "取消訂單", R.color.other_order_details_cancel_btn_color, R.drawable.ic_cancel) return getBtn(OtherOrderComponent.takeaway.CANCEL_ORDER_BTN_KEY, CancelBtn, "取消訂單", R.color.other_order_details_cancel_btn_color, R.drawable.ic_cancel)
} }
fun getPrintBtn(): BtnBean { fun getPrintBtn(): BtnBean? {
return BtnBean(printBtn, "打印訂單", R.color.other_order_details_print_btn_color, R.drawable.ic_print) return getBtn(OtherOrderComponent.takeaway.PRINT_ORDER_BTN_KEY, PrintBtn, "打印訂單", R.color.other_order_details_print_btn_color, R.drawable.ic_print)
} }
fun getLogisticsBtn(): BtnBean { fun getLogisticsBtn(): BtnBean? {
return BtnBean(logisticsBtn, "取消物流", R.color.other_order_details_cancel_logistics_btn_color, R.drawable.ic_logistics) return getBtn(OtherOrderComponent.takeaway.LOGISTICS_BTN_KEY, LogisticsBtn, "取消物流", R.color.other_order_details_cancel_logistics_btn_color, R.drawable.ic_logistics)
} }
fun getAssignDeliveryBtn(): BtnBean { fun getAssignDeliveryBtn(): BtnBean? {
return BtnBean(assignDeliveryBtn, "指派送貨", R.color.other_order_details_sure_btn_color, R.drawable.ic_deliveryman) return getBtn(OtherOrderComponent.takeaway.ASSIGNDELIVERY_BTN_KEY, AssignDeliveryBtn, "指派送貨", R.color.other_order_details_sure_btn_color, R.drawable.ic_deliveryman)
} }
fun getClosingBtn(): BtnBean { fun getClosingBtn(): BtnBean? {
return BtnBean(closingBtn, "結賬", R.color.other_order_details_cancel_btn_color, R.drawable.ic_closing) return getBtn(OtherOrderComponent.takeaway.CLOSING_BTN_KEY, ClosingBtn, "結賬", R.color.other_order_details_cancel_btn_color, R.drawable.ic_closing)
} }
fun getTransportationBtn():BtnBean{ fun getTransportationBtn(): BtnBean? {
return BtnBean(TransportationBtn, "運輸工具", R.color.other_order_details_cancel_logistics_btn_color, R.drawable.ic_logistics) return getBtn(OtherOrderComponent.takeaway.TRANSPORTATION_BTN_KEY, TransportationBtn, "運輸工具", R.color.other_order_details_cancel_logistics_btn_color, R.drawable.ic_logistics)
} }
fun getBtn(key:String, btnCode:Int, btnContent: String,btnColor: Int, btnImg: Int): BtnBean? {
for (value in functions) {
if (value.resUrl == key) {
return if (value.status == 3) {
BtnBean(btnCode, btnContent, R.color.color_ccc, btnImg)
} else {
BtnBean(btnCode, btnContent, btnColor, btnImg)
}
}
}
return null
}
} }
...@@ -15,8 +15,10 @@ import com.ethanhua.skeleton.ViewSkeletonScreen ...@@ -15,8 +15,10 @@ import com.ethanhua.skeleton.ViewSkeletonScreen
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
import com.gingersoft.gsa.cloud.base.utils.other.TextUtil import com.gingersoft.gsa.cloud.base.utils.other.TextUtil
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils
import com.gingersoft.gsa.cloud.function.FunctionManager
import com.gingersoft.gsa.cloud.print.bean.OrderDetails import com.gingersoft.gsa.cloud.print.bean.OrderDetails
import com.gingersoft.gsa.cloud.ui.utils.AppDialog import com.gingersoft.gsa.cloud.ui.utils.AppDialog
import com.gingersoft.gsa.other_order_mode.OtherOrderComponent
import com.gingersoft.gsa.other_order_mode.R import com.gingersoft.gsa.other_order_mode.R
import com.gingersoft.gsa.other_order_mode.data.model.bean.BtnBuilder import com.gingersoft.gsa.other_order_mode.data.model.bean.BtnBuilder
import com.gingersoft.gsa.other_order_mode.data.model.bean.TransportationBean import com.gingersoft.gsa.other_order_mode.data.model.bean.TransportationBean
...@@ -48,9 +50,12 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -48,9 +50,12 @@ class OrderDetailsActivity : BaseActivity() {
lateinit var skeletonScreen: ViewSkeletonScreen lateinit var skeletonScreen: ViewSkeletonScreen
var restaurantId: Int = -1 var restaurantId: Int = -1
lateinit var btnBuilder: BtnBuilder
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_order_details) binding = DataBindingUtil.setContentView(this, R.layout.activity_order_details)
val functionByResModule = FunctionManager.getDefault().getFunctionByResModule(this, OtherOrderComponent.takeaway::class.java, OtherOrderComponent.takeaway.orderDetails, "orderDetails/btn")
btnBuilder = BtnBuilder.getInstance(functionByResModule)
val rootView = findViewById<View>(R.id.scroll_order_info) val rootView = findViewById<View>(R.id.scroll_order_info)
skeletonScreen = Skeleton.bind(rootView) skeletonScreen = Skeleton.bind(rootView)
...@@ -60,6 +65,7 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -60,6 +65,7 @@ class OrderDetailsActivity : BaseActivity() {
.angle(20) .angle(20)
.color(R.color.white) .color(R.color.white)
.show() .show()
restaurantId = GsaCloudApplication.getRestaurantId(this) restaurantId = GsaCloudApplication.getRestaurantId(this)
orderId = intent.getStringExtra("orderId")//訂單id orderId = intent.getStringExtra("orderId")//訂單id
orderType = intent.getIntExtra("orderType", 0)//訂單類型 orderType = intent.getIntExtra("orderType", 0)//訂單類型
...@@ -105,40 +111,60 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -105,40 +111,60 @@ class OrderDetailsActivity : BaseActivity() {
2 -> {//製作中 2 -> {//製作中
if (state == 0) { if (state == 0) {
//防止調用了第三方物流接口,沒調用到確認訂單接口 //防止調用了第三方物流接口,沒調用到確認訂單接口
btnList.add(BtnBuilder().getSureBtn()) btnBuilder.getSureBtn()?.let {
btnList.add(it)
}
orderStatusText = "待確認" orderStatusText = "待確認"
tv_order_state.setTextColor(ContextCompat.getColor(this@OrderDetailsActivity, R.color.order_state0_color)) tv_order_state.setTextColor(ContextCompat.getColor(this@OrderDetailsActivity, R.color.order_state0_color))
if (orderDetails.isDelete == 0) { if (orderDetails.isDelete == 0) {
btnList.add(BtnBuilder().getLogisticsBtn()) btnBuilder.getLogisticsBtn()?.let {
btnList.add(it)
}
} }
} else { } else {
btnList.add(BtnBuilder().getPrintBtn()) btnBuilder.getPrintBtn()?.let {
btnList.add(it)
}
if (orderDetails.order_type == 7) { if (orderDetails.order_type == 7) {
//製作中的自取,應該製作完成、打印、取消訂單 //製作中的自取,應該製作完成、打印、取消訂單
btnList.add(BtnBuilder().getProductionCompletedBtn()) btnBuilder.getProductionCompletedBtn()?.let {
btnList.add(it)
}
tv_order_state.setTextColor(resources.getColor(R.color.order_state0_color)) tv_order_state.setTextColor(resources.getColor(R.color.order_state0_color))
} else { } else {
//製作中的外賣,應該有打印、取消物流、取消訂單 //製作中的外賣,應該有打印、取消物流、取消訂單
if (orderDetails.isDelete == 0) { if (orderDetails.isDelete == 0) {
btnList.add(BtnBuilder().getLogisticsBtn()) btnBuilder.getLogisticsBtn()?.let {
btnList.add(it)
}
} else { } else {
if (orderDetails.companyType == 2) { if (orderDetails.companyType == 2) {
btnList.add(BtnBuilder().getTransportationBtn()) btnBuilder.getTransportationBtn()?.let {
btnList.add(it)
}
}
btnBuilder.getAssignDeliveryBtn()?.let {
btnList.add(it)
} }
btnList.add(BtnBuilder().getAssignDeliveryBtn())
} }
tv_order_state.setTextColor(resources.getColor(R.color.order_state1_color)) tv_order_state.setTextColor(resources.getColor(R.color.order_state1_color))
} }
orderStatusText = "製作中" orderStatusText = "製作中"
} }
btnList.add(BtnBuilder().getCancelBtn()) btnBuilder.getCancelBtn()?.let {
btnList.add(it)
}
} }
3 -> {//外賣是送貨中,自取是待取餐 3 -> {//外賣是送貨中,自取是待取餐
btnList.add(BtnBuilder().getPrintBtn()) btnBuilder.getPrintBtn()?.let {
btnList.add(it)
}
if (orderDetails.order_type == 7) { if (orderDetails.order_type == 7) {
//自取待取餐,有打印和結賬 //自取待取餐,有打印和結賬
orderStatusText = "待取餐" orderStatusText = "待取餐"
btnList.add(BtnBuilder().getClosingBtn()) btnBuilder.getClosingBtn()?.let {
btnList.add(it)
}
tv_order_state.setTextColor(ContextCompat.getColor(this@OrderDetailsActivity, R.color.order_state3_color)) tv_order_state.setTextColor(ContextCompat.getColor(this@OrderDetailsActivity, R.color.order_state3_color))
} else { } else {
// 外賣有打印 // 外賣有打印
...@@ -147,16 +173,24 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -147,16 +173,24 @@ class OrderDetailsActivity : BaseActivity() {
if (orderDetails.isDelete == 0) { if (orderDetails.isDelete == 0) {
//如果是第三方物流,不顯示結賬按鈕 //如果是第三方物流,不顯示結賬按鈕
} else { } else {
btnList.add(BtnBuilder().getAssignDeliveryBtn()) btnBuilder.getAssignDeliveryBtn()?.let {
btnList.add(BtnBuilder().getClosingBtn()) btnList.add(it)
}
btnBuilder.getClosingBtn()?.let {
btnList.add(it)
}
} }
orderStatusText = "派送中" orderStatusText = "派送中"
tv_order_state.setTextColor(resources.getColor(R.color.order_state2_color)) tv_order_state.setTextColor(resources.getColor(R.color.order_state2_color))
} }
} }
else -> {//待確認訂單 else -> {//待確認訂單
btnList.add(BtnBuilder().getSureBtn()) btnBuilder.getSureBtn()?.let {
btnList.add(BtnBuilder().getCancelBtn()) btnList.add(it)
}
btnBuilder.getCancelBtn()?.let {
btnList.add(it)
}
orderStatusText = "待確認" orderStatusText = "待確認"
tv_order_state.setTextColor(ContextCompat.getColor(this@OrderDetailsActivity, R.color.order_state0_color)) tv_order_state.setTextColor(ContextCompat.getColor(this@OrderDetailsActivity, R.color.order_state0_color))
} }
...@@ -179,7 +213,7 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -179,7 +213,7 @@ class OrderDetailsActivity : BaseActivity() {
rv_food.layoutManager = LinearLayoutManager(this@OrderDetailsActivity) rv_food.layoutManager = LinearLayoutManager(this@OrderDetailsActivity)
rv_food.adapter = FoodListAdapter(this@OrderDetailsActivity, orderDetails.PRODUCT_NAME!!) rv_food.adapter = FoodListAdapter(this@OrderDetailsActivity, orderDetails.PRODUCT_NAME!!)
if (btnList.size <= 3) { if (btnList.size in 1..4) {
rv_order_details_btn.layoutManager = GridLayoutManager(this@OrderDetailsActivity, btnList.size) rv_order_details_btn.layoutManager = GridLayoutManager(this@OrderDetailsActivity, btnList.size)
} else { } else {
rv_order_details_btn.layoutManager = GridLayoutManager(this@OrderDetailsActivity, 3) rv_order_details_btn.layoutManager = GridLayoutManager(this@OrderDetailsActivity, 3)
...@@ -191,13 +225,13 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -191,13 +225,13 @@ class OrderDetailsActivity : BaseActivity() {
//--------------------------------------------------------------不同按鈕點擊事件---------------------------------------------------------------------------------------- //--------------------------------------------------------------不同按鈕點擊事件----------------------------------------------------------------------------------------
orderBtnAdapter.setOnItemClickListener { adapter, view, position -> orderBtnAdapter.setOnItemClickListener { adapter, view, position ->
when (btnList[position].type) { when (btnList[position].type) {
BtnBuilder.logisticsBtn -> BtnBuilder.LogisticsBtn ->
//取消第三方物流 彈出彈窗詢問是否確認取消 //取消第三方物流 彈出彈窗詢問是否確認取消
cancelLogistics(orderDetails) cancelLogistics(orderDetails)
BtnBuilder.assignDeliveryBtn -> BtnBuilder.AssignDeliveryBtn ->
//指派送貨 //指派送貨
selectorDelivery(this@OrderDetailsActivity, orderDetails, 3) { status, isSuccess -> finish() } selectorDelivery(this@OrderDetailsActivity, orderDetails, 3) { status, isSuccess -> finish() }
BtnBuilder.cancelBtn -> BtnBuilder.CancelBtn ->
//取消訂單 //取消訂單
cancelOrder(orderDetails) cancelOrder(orderDetails)
BtnBuilder.TransportationBtn -> { BtnBuilder.TransportationBtn -> {
...@@ -206,7 +240,7 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -206,7 +240,7 @@ class OrderDetailsActivity : BaseActivity() {
showSelectTransportation(it, orderDetails) showSelectTransportation(it, orderDetails)
} }
} }
BtnBuilder.closingBtn -> { BtnBuilder.ClosingBtn -> {
//如果是在線支付的訂單,就直接修改訂單狀態 //如果是在線支付的訂單,就直接修改訂單狀態
if (orderPayType != 1) { if (orderPayType != 1) {
gsUpdateOrderStatus(orderDetails, null) { status, isSuccess -> gsUpdateOrderStatus(orderDetails, null) { status, isSuccess ->
...@@ -222,7 +256,7 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -222,7 +256,7 @@ class OrderDetailsActivity : BaseActivity() {
startActivityForResult(intent, 1001) startActivityForResult(intent, 1001)
} }
} }
BtnBuilder.sureBtn -> { BtnBuilder.SureBtn -> {
//確認訂單,判斷是本店還是zeek或是lalamove //確認訂單,判斷是本店還是zeek或是lalamove
when (orderDetails.companyType) { when (orderDetails.companyType) {
0, 1 -> { 0, 1 -> {
...@@ -237,7 +271,7 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -237,7 +271,7 @@ class OrderDetailsActivity : BaseActivity() {
} }
} }
} }
BtnBuilder.printBtn -> { BtnBuilder.PrintBtn -> {
//打印 //打印
printOrder(PrintCode, orderDetails) {} printOrder(PrintCode, orderDetails) {}
} }
......
...@@ -9,16 +9,16 @@ ...@@ -9,16 +9,16 @@
<ImageView <ImageView
android:id="@+id/iv_btn_mark" android:id="@+id/iv_btn_mark"
android:layout_width="@dimen/dp_19" android:layout_width="@dimen/dp_18"
android:layout_height="@dimen/dp_19"/> android:layout_height="@dimen/dp_18"/>
<TextView <TextView
android:id="@+id/tv_btn_content" android:id="@+id/tv_btn_content"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_5" android:layout_marginLeft="@dimen/dp_4"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="@dimen/dp_16" /> android:textSize="@dimen/dp_14" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -84,8 +84,6 @@ public class PrjService extends Service implements ReceiveListener { ...@@ -84,8 +84,6 @@ public class PrjService extends Service implements ReceiveListener {
initUsbPrint(); initUsbPrint();
} }
@Override @Override
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
mContext = this; mContext = this;
......
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