Commit 31f65a09 by Wyh

1、打印prj帶*號問題 2、處理打印結果回調BUG 3、優化PRJ查詢 4、優化PrjBean

parent d315d8ac
......@@ -36,7 +36,6 @@
<activity
android:name=".mvp.ui.activity.SendOrderActivity"
android:screenOrientation="portrait" />
<meta-data
android:name="com.gingersoft.gsa.cloud.common.config.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
......
......@@ -16,5 +16,5 @@ public class PrjQueryBean {
private boolean success;
private long sysTime;
private String errMsg;
private List<PrjBean.DataBean.Bean> data;
private List<PrjBean> data;
}
......@@ -19,6 +19,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.billy.cc.core.component.CC;
import com.gingersoft.gsa.cloud.common.constans.AppConstans;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.print.bean.PrjBean;
import com.gingersoft.gsa.cloud.print.bean.UpdateBean;
import com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils;
......@@ -68,6 +69,8 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
TextView tvPrjRecordOrderId;
@BindView(R2.id.rv_prj_record_list)
RecyclerView rvPrjRecordList;
private PrjStateAdapter prjStateAdapter;
@BindView(R2.id.layout_edit_prj_order_number)
ConstraintLayout editLayout;
......@@ -100,8 +103,9 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
public void initData(@Nullable Bundle savedInstanceState) {
String orderId = getIntent().getStringExtra(ORDERID_EXTRA_NAME);
if (TextUtil.isNotEmptyOrNullOrUndefined(orderId)) {
layoutPrjOrderNumber.setVisibility(View.VISIBLE);
tvPrjRecordOrderId.setText(orderId);
// layoutPrjOrderNumber.setVisibility(View.VISIBLE);
// tvPrjRecordOrderId.setText(orderId);
edOrderNumber.setText(orderId);
getKitchenPrintRecord();
} else {
editLayout.setVisibility(View.VISIBLE);
......@@ -192,7 +196,6 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
}
}
private PrjStateAdapter prjStateAdapter;
@Override
public void loadPrjInfo(PrjQueryBean prjQueryBean) {
......@@ -203,7 +206,7 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
prjStateAdapter.setOnItemChildClickListener((adapter, view, position) -> {
if (view.getId() == R.id.tv_prj_record_print_operation) {
//重印
List<PrjBean.DataBean.Bean> prjData = prjQueryBean.getData();
List<PrjBean> prjData = prjQueryBean.getData();
if (prjData.get(position).getPrinterType() == 3) {
//已打印的,提示是否重新打印
new AppDialog().showWaringDialog(mContext, "食品已打印,確認重印?", (view1, dialog) -> {
......@@ -220,18 +223,18 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
}
}
private void organizeData(int position, List<PrjBean.DataBean.Bean> prjData) {
private void organizeData(int position, List<PrjBean> prjData) {
if (prjData.get(position).getParentId() == 0) {
//是主食品,判斷有沒有子食品,如果沒有子食品,直接打印主食品
if (position + 1 >= prjData.size()) {
//沒有子食品
//直接打印
List<PrjBean.DataBean.Bean> printDatas = new ArrayList<>();
List<PrjBean> printDatas = new ArrayList<>();
printDatas.add(prjData.get(position));
printPrj(printDatas);
} else if (prjData.get(position).getProductId().equals(prjData.get(position + 1).getParentId() + "")) {
//有子食品
List<PrjBean.DataBean.Bean> printDatas = new ArrayList<>();
List<PrjBean> printDatas = new ArrayList<>();
printDatas.add(prjData.get(position));
for (int i = position; i < prjData.size(); i++) {
if (prjData.get(position).getProductId().equals(prjData.get(i).getParentId() + "")) {
......@@ -244,26 +247,26 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
} else {
//沒有子食品
//直接打印
List<PrjBean.DataBean.Bean> printDatas = new ArrayList<>();
List<PrjBean> printDatas = new ArrayList<>();
printDatas.add(prjData.get(position));
printPrj(printDatas);
}
} else {
//是主食品,直接打印子食品
List<PrjBean.DataBean.Bean> printDatas = new ArrayList<>();
List<PrjBean> printDatas = new ArrayList<>();
printDatas.add(prjData.get(position));
printPrj(printDatas);
}
}
private void printPrj(List<PrjBean.DataBean.Bean> printDatas) {
private void printPrj(List<PrjBean> printDatas) {
String orderNo = "";
StringBuilder ids = new StringBuilder();
for (int i = 0; i < printDatas.size(); i++) {
PrjBean.DataBean.Bean prjBean = printDatas.get(i);
PrjBean prjBean = printDatas.get(i);
orderNo = prjBean.getOrderNo();
prjBean.setTotalPrj(printDatas.size());
prjBean.setCurrentIndex(i);
prjBean.setCurrentIndex(i + 1);
ids.append(prjBean.getId());
}
//添加重印的報警推送
......@@ -272,7 +275,7 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
CC.obtainBuilder(ComponentName.COMPONENT_PRINT)
.addParam(PrintConstans.PRINT_TYPE, PrintConstans.PRINT_KITCHEN)
.addParam(PrintConstans.PRINT_ORDER_NO, orderNo)
.addParam("prjBeans", printDatas)
.addParam("prjBeans", GsonUtils.GsonString(printDatas))
.setActionName("printActivity")
.build()
.callAsyncCallbackOnMainThread((cc, result) -> {
......
......@@ -20,7 +20,7 @@ import org.jetbrains.annotations.Nullable;
import java.math.BigDecimal;
import java.util.List;
public class PrjStateAdapter extends BaseQuickAdapter<PrjBean.DataBean.Bean, BaseViewHolder> {
public class PrjStateAdapter extends BaseQuickAdapter<PrjBean, BaseViewHolder> {
private Context context;
private int indentation;
......@@ -29,7 +29,7 @@ public class PrjStateAdapter extends BaseQuickAdapter<PrjBean.DataBean.Bean, Bas
*/
private int successColor, failColor, flyFailColor;
public PrjStateAdapter(Context context, @Nullable List<PrjBean.DataBean.Bean> data) {
public PrjStateAdapter(Context context, @Nullable List<PrjBean> data) {
super(R.layout.item_prj_state, data);
this.context = context;
addChildClickViewIds(R.id.tv_prj_record_print_operation);
......@@ -39,7 +39,7 @@ public class PrjStateAdapter extends BaseQuickAdapter<PrjBean.DataBean.Bean, Bas
}
@Override
protected void convert(@NotNull BaseViewHolder baseViewHolder, PrjBean.DataBean.Bean dataBean) {
protected void convert(@NotNull BaseViewHolder baseViewHolder, PrjBean dataBean) {
//食品組名稱
baseViewHolder.setText(R.id.tv_prj_record_food_group_name, dataBean.getFoodGroupName());
//食品名稱
......@@ -56,15 +56,19 @@ public class PrjStateAdapter extends BaseQuickAdapter<PrjBean.DataBean.Bean, Bas
tvFailReason.setText("");
} else if (dataBean.getPrinterType() == UpdateBean.FAILED_PRINT) {
//打印失敗
if (dataBean.getPresence() == PrjBean.DataBean.Bean.NOT_GENERATED_PRJ) {
if (dataBean.getPresence() == PrjBean.NOT_GENERATED_PRJ) {
//未生成PRJ記錄
baseViewHolder.setBackgroundColor(R.id.tv_prj_record_food_name, failColor);
tvFailReason.setText("未生成打印記錄");
} else if (dataBean.getPrinterDeviceId() == -1) {
//打印機id為-1
baseViewHolder.setBackgroundColor(R.id.tv_prj_record_food_name, failColor);
tvFailReason.setText("未找到對應的打印機");
} else if (TextUtil.isEmptyOrNullOrUndefined(dataBean.getPrintPosition())) {
//沒有打印位置
baseViewHolder.setBackgroundColor(R.id.tv_prj_record_food_name, failColor);
tvFailReason.setText("未配置打印位置");
} else if (TextUtil.isNotEmptyOrNullOrUndefined(dataBean.getFlyingSinglePosition()) && dataBean.getRequests() > PrjBean.DataBean.Bean.REQUEST_COUNT_FLY) {
} else if (TextUtil.isNotEmptyOrNullOrUndefined(dataBean.getFlyingSinglePosition()) && dataBean.getRequests() > PrjBean.REQUEST_COUNT_FLY) {
//飛單位置不為空並且請求次數大於5此,說明飛單打印失敗
baseViewHolder.setBackgroundColor(R.id.tv_prj_record_food_name, flyFailColor);
}
......@@ -80,24 +84,29 @@ public class PrjStateAdapter extends BaseQuickAdapter<PrjBean.DataBean.Bean, Bas
//只第一次測量一下
indentation = new BigDecimal(foodName.getPaint().measureText("哈")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
}
LinearLayout foodNameLayout = baseViewHolder.getView(R.id.layout_print_state);
TextView tvFoodName = baseViewHolder.getView(R.id.tv_prj_record_food_name);
if (dataBean.getParentId() != 0) {
foodNameLayout.setPadding(indentation, foodNameLayout.getPaddingTop(), foodNameLayout.getPaddingRight(), foodNameLayout.getPaddingBottom());
tvFoodName.setPadding(indentation, tvFoodName.getPaddingTop(), tvFoodName.getPaddingRight(), tvFoodName.getPaddingBottom());
} else {
foodNameLayout.setPadding(0, foodNameLayout.getPaddingTop(), foodNameLayout.getPaddingRight(), foodNameLayout.getPaddingBottom());
tvFoodName.setPadding(0, tvFoodName.getPaddingTop(), tvFoodName.getPaddingRight(), tvFoodName.getPaddingBottom());
}
}
private void setPrintPosition(@NotNull BaseViewHolder baseViewHolder, PrjBean.DataBean.Bean dataBean) {
private void setPrintPosition(@NotNull BaseViewHolder baseViewHolder, PrjBean dataBean) {
TextView tvPrintPosition = baseViewHolder.getView(R.id.tv_prj_record_print_position);
if (TextUtil.isNotEmptyOrNullOrUndefined(dataBean.getPrintPosition())) {
//打印位置
baseViewHolder.setText(R.id.tv_prj_record_print_position, dataBean.getPrintPosition());
if (dataBean.getStatus() == PrjBean.PRJ_STATUS_CUT_PAPER) {
tvPrintPosition.setText(dataBean.getPrintPosition() + "*");
} else {
tvPrintPosition.setText(dataBean.getPrintPosition());
}
if (TextUtil.isNotEmptyOrNullOrUndefined(dataBean.getFlyingSinglePosition())) {
//打印位置+飛單位置
baseViewHolder.setText(R.id.tv_prj_record_print_position, dataBean.getPrintPosition() + "/" + dataBean.getFlyingSinglePosition());
tvPrintPosition.setText(tvPrintPosition.getText() + "/" + dataBean.getFlyingSinglePosition());
}
} else {
baseViewHolder.setText(R.id.tv_prj_record_print_position, "");
tvPrintPosition.setText("");
}
}
}
......@@ -111,11 +111,6 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
getOrderDetails(orderId, binding)
}
initTopBar(qm_order_details_bar)
//訂單編號點擊事件
findViewById<TextView>(R.id.tv_order_no).setOnClickListener {
ClipboardUtils.copyText(tv_order_no.text)
showMessage("複製成功")
}
}
private fun initTopBar(topbar: QMUITopBar) {
......@@ -133,6 +128,11 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
//初始化頁面佈局
val orderDetails = it.data!![0]
orderNo = orderDetails.ORDER_NO.toString()
//訂單編號點擊事件
tv_order_details_order_no.setOnClickListener {
ClipboardUtils.copyText(orderNo)
showMessage("複製成功")
}
qm_order_details_bar.addRightImageButton(R.drawable.ic_print, R.id.iv_prj_history).setOnClickListener {
PrjQueryActivity.startPrjQueryActivity(this@OrderDetailsActivity, orderNo)
}
......
......@@ -17,6 +17,7 @@
<variable
name="total"
type="Double" />
<variable
name="data"
type="com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails.DataBean" />
......@@ -114,12 +115,15 @@
<!-- 訂單編號-->
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_order_no"
android:id="@+id/tv_order_details_order_no"
style="@style/otherOrder_details_twelve_text_Style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/other_order_info_dialog_content_marginLeft"
android:layout_marginTop="@dimen/dp_10"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="@{@string/order_no + data.oRDER_NO}" />
<TextView
......@@ -536,11 +540,11 @@
<LinearLayout
android:id="@+id/layout_takeaway_discount"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="@dimen/other_order_info_dialog_content_marginLeft"
android:paddingRight="@dimen/other_order_info_dialog_content_marginLeft"/>
android:paddingRight="@dimen/other_order_info_dialog_content_marginLeft" />
<RelativeLayout
android:layout_width="match_parent"
......@@ -647,9 +651,9 @@
android:id="@+id/rv_third_expenses"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"/>
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10" />
</LinearLayout>
</LinearLayout>
......
......@@ -22,8 +22,7 @@
android:layout_marginRight="@dimen/dp_10"
android:orientation="horizontal"
android:paddingTop="@dimen/dp_20"
android:paddingBottom="@dimen/dp_20"
android:visibility="gone">
android:paddingBottom="@dimen/dp_20">
<EditText
android:id="@+id/ed_input_order_number"
......
......@@ -16,42 +16,41 @@
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_16"
tools:text="食品組名稱" />
<include layout="@layout/include_vertical_color_ccc_dividing_line" />
<LinearLayout
android:id="@+id/layout_print_state"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:orientation="vertical"
android:paddingLeft="@dimen/dp_5"
android:paddingTop="@dimen/dp_5"
android:paddingRight="@dimen/dp_5">
android:layout_weight="0.8"
android:paddingTop="@dimen/dp_2"
android:paddingBottom="@dimen/dp_2"
android:gravity="center_vertical"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_prj_record_food_name"
style="@style/PrjQueryItemStyle"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:paddingLeft="@dimen/dp_5"
android:paddingTop="@dimen/dp_5"
android:paddingRight="@dimen/dp_5"
tools:text="食品名稱一" />
<TextView
android:id="@+id/tv_prj_record_fail_reason"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:textColor="@color/required_color"
android:textSize="@dimen/dp_10"
tools:text="失敗原因" />
</LinearLayout>
<TextView
android:id="@+id/tv_prj_record_print_position"
style="@style/PrjQueryItemStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.26"
tools:text="打印位置/飛單位置" />
tools:text="打印位置/飛單置" />
<TextView
android:id="@+id/tv_prj_record_print_count"
......@@ -83,5 +82,19 @@
android:textSize="@dimen/dp_16" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/tv_prj_record_fail_reason"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:paddingLeft="@dimen/dp_5"
android:paddingRight="@dimen/dp_5"
android:textColor="@color/required_color"
android:textSize="@dimen/dp_10"
tools:text="失敗原因" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
......@@ -181,36 +181,6 @@ public class PrintInfoBean {
}
/**
* 將prj數據轉為打印類
*
* @param datas prj數據
* @param printLocation 廚房位置
* @param deviceBean 打印機信息
* @return 打印類集合
*/
public static List<List<PrintInfoBean>> transPrjBean(List<PrjBean.DataBean.Bean> datas, String printLocation, PrinterDeviceBean deviceBean) {
List<List<PrintInfoBean>> prjPrintBeans = new ArrayList<>();
//通過打印位置生成多張用於打印的bitmap
List<PrjBean.DataBean.Bean> noCut = new ArrayList<>();
for (PrjBean.DataBean.Bean prjbean : datas) {
//遍歷當前打印位置所有的食品
if (prjbean.getStatus() == 2) {
//切紙,單獨生成一條prj數據
List<PrjBean.DataBean.Bean> beans = new ArrayList<>();
beans.add(prjbean);
prjPrintBeans.add(getPrjPrintInfoBean(printLocation, beans, deviceBean));
} else {
//不切紙,保存到單獨的集合里,之後生成一組數據
noCut.add(prjbean);
}
}
if (noCut.size() > 0) {
prjPrintBeans.add(getPrjPrintInfoBean(printLocation, noCut, deviceBean));
}
return prjPrintBeans;
}
private static boolean foodIsBold = false;//食品是否加粗
private static boolean foodItemIsBold = false;//細項是否加粗
private static boolean foodIsItalic = false;//食品是否斜體
......@@ -231,13 +201,13 @@ public class PrintInfoBean {
*
* @return
*/
private static List<PrintInfoBean> getPrjPrintInfoBean(String key, List<PrjBean.DataBean.Bean> prjBeans, PrinterDeviceBean deviceBean) {
private static List<PrintInfoBean> getPrjPrintInfoBean(String key, List<PrjBean> prjBeans, PrinterDeviceBean deviceBean) {
List<PrintInfoBean> printInfoBeans = new ArrayList<>();
initPrintConfig(deviceBean);
if (prjBeans == null || prjBeans.size() <= 0) {
return null;
}
PrjBean.DataBean.Bean prjBean = prjBeans.get(0);
PrjBean prjBean = prjBeans.get(0);
if (prjBean == null) {
return null;
}
......@@ -275,7 +245,7 @@ public class PrintInfoBean {
printInfoBeans.add(new PrintInfoBean(new String[]{"人數:" + prjBean.getPerson(), UserContext.newInstance().getMemberName()}, new Double[]{1d}, 0));
}
printInfoBeans.add(new PrintInfoBean(new String[]{getLineBorder("", 1, paperWidth)}, 0));
for (PrjBean.DataBean.Bean bean : prjBeans) {
for (PrjBean bean : prjBeans) {
if (bean.getParentId() == 0) {
//沒有父級id,則是第一級食品
bean.setItemType(1);
......@@ -284,7 +254,7 @@ public class PrintInfoBean {
if (bean.getParentId() != 0) {
bean.setItemType(2);//先設置為細項,再通過下面的遍歷確定是否是第三級細項
//循環遍歷查找父級食品
for (PrjBean.DataBean.Bean itembean : prjBeans) {
for (PrjBean itembean : prjBeans) {
if (bean.getParentId() == itembean.getOrderDetailsId()) {
//如果父級是細項,則當前食品就是二級細項
bean.setItemType(bean.getItemType() + 1);
......
......@@ -12,10 +12,10 @@ import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins;
import com.gingersoft.gsa.cloud.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import com.gingersoft.gsa.cloud.print.impl.OnPrjPrintResultListener;
import com.joe.print.mvp.model.bean.PrintInfoBean;
import com.joe.print.mvp.print.utils.MyPrintUtils;
import java.net.ConnectException;
import java.util.ArrayList;
import java.util.List;
......@@ -25,7 +25,7 @@ public class EpsonPrint implements ReceiveListener {
private Printer mPrinter = null;
private ReceiveListener receiveListener;
private PrintExecutor.OnPrintResultListener resultListener;
private OnPrjPrintResultListener onPrjPrintResultListener;
private static EpsonPrint epsonPrint;
......@@ -45,9 +45,9 @@ public class EpsonPrint implements ReceiveListener {
*
* @return
*/
public boolean initializeObject(Context context, ReceiveListener receiveListener, PrintExecutor.OnPrintResultListener resultListener) {
public boolean initializeObject(Context context, ReceiveListener receiveListener, OnPrjPrintResultListener onPrjPrintResultListener) {
try {
this.resultListener = resultListener;
this.onPrjPrintResultListener = onPrjPrintResultListener;
this.receiveListener = receiveListener;
//第一個參數是機型,第二個參數是語言,因為是打印圖片,語言沒有影響
mPrinter = new Printer(Printer.TM_U220, Printer.MODEL_TAIWAN, context);
......@@ -143,7 +143,7 @@ public class EpsonPrint implements ReceiveListener {
/**
* 打印的食品id隊列
*/
private List<String> ids = new ArrayList<>();
private List<String> prjIds = new ArrayList<>();
public void putPrintString(String ip, int paperWidth, List<PrintInfoBean> printInfoBeans) {
if (mPrinter == null) {
......@@ -276,68 +276,72 @@ public class EpsonPrint implements ReceiveListener {
isPrint = false;
}
bitmaps.add(bitmap);
ids.add(foodId);
prjIds.add(foodId);
if (isPrint) {
Log.d("eee", "針式打印機隊列中,前面還有" + bitmaps.size() + "個任務");
Log.d("eee", "prj針式打印機隊列中,前面還有" + bitmaps.size() + "個任務");
PrinterPlugins.getOnPrinterFlowHandler().connectionBefore("針式打印機隊列中,前面還有" + bitmaps.size() + "個任務", ip, 0, 0, 0);
return;
}
isPrint = true;
printData(ip, bitmap);
printData(ip, foodId, bitmap);
}
private void printData(String ip, Bitmap bitmap) {
private void printData(String ip, String ids, Bitmap bitmap) {
PrinterPlugins.getOnPrinterFlowHandler().onPrinterDataBefore(0, 0, "針式打印機", ip);
mPrinter.clearCommandBuffer();
Log.d("eee", "針式打印機創建數據中,任務數:" + bitmaps.size());
Log.d("eee", "prj針式打印機創建數據中,任務數:" + bitmaps.size());
if (!createPrintData(bitmap)) {
Log.d("eee", "針式打印機創建數據失敗");
Log.d("eee", "prj針式打印機創建數據失敗");
//如果是創建數據失敗,說明這個數據有問題,移除掉
bitmaps.remove(bitmap);
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new Exception("針式打印機添加數據失敗" + ip));
updatePrintState(PrintSocketHolder.ERROR_6);
isPrint = false;
printErrorProcess(ids, bitmap, new Exception("針式打印機添加數據失敗" + ip), PrintSocketHolder.ERROR_6);
return;
}
//連接打印機
connectByIp(ip, mPrinter.getStatus());
//獲取打印機狀態
PrinterStatusInfo statusInfo = mPrinter.getStatus();
Log.d("eee", "針式打印機:" + "紙張狀態:" + statusInfo.getPaper() + "連接狀態:" + statusInfo.getConnection() + ",任務數:" + bitmaps.size());
Log.d("eee", "prj針式打印機:" + "紙張狀態:" + statusInfo.getPaper() + "連接狀態:" + statusInfo.getConnection() + ",任務數:" + bitmaps.size());
if (statusInfo.getConnection() != 1) {
//未連接到打印機
updatePrintState(PrintSocketHolder.ERROR_7);
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new ConnectException("針式打印機連接失敗" + ip));
isPrint = false;
Log.d("eee", "prj針式打印機連接失敗:" + ids);
printErrorProcess(ids, bitmap, new Exception("針式打印機連接失敗" + ip), PrintSocketHolder.ERROR_7);
return;
} else if (statusInfo.getPaper() != 0) {
//紙張不正常
if (statusInfo.getPaper() == 2) {
//沒紙了
updatePrintState(PrintSocketHolder.ERROR_11);
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new Exception("針式打印機缺紙,打印失敗" + ip));
printErrorProcess(ids, bitmap, new Exception("針式打印機缺紙,打印失敗" + ip), PrintSocketHolder.ERROR_11);
} else {
//紙張狀態異常
updatePrintState(PrintSocketHolder.ERROR_11);
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new Exception("針式打印機紙張異常,請重啟打印機" + ip));
printErrorProcess(ids, bitmap, new Exception("針式打印機紙張異常,請重啟打印機" + ip), PrintSocketHolder.ERROR_11);
}
isPrint = false;
return;
}
try {
mPrinter.sendData(Printer.PARAM_DEFAULT);
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
Log.d("eee", "針式打印機打印成功" + ",任務數:" + bitmaps.size());
Log.d("eee", "prj針式打印機打印成功" + ",任務數:" + bitmaps.size());
} catch (Exception e) {
Log.d("eee", "針式打印機打印失敗" + ",任務數:" + bitmaps.size() + e.getMessage());
updatePrintState(PrintSocketHolder.ERROR_10);
PrinterPlugins.getOnPrinterFlowHandler().connectionError(new Exception("針式打印機打印報錯" + ip));
Log.d("eee", "prj針式打印機打印失敗" + ",任務數:" + bitmaps.size() + e.getMessage());
printErrorProcess(ids, bitmap, new Exception("針式打印機打印報錯" + ip), PrintSocketHolder.ERROR_10);
mPrinter.clearCommandBuffer();
disconnectPrinter();
isPrint = false;
}
}
/**
* 打印異常處理
* @param ids
* @param bitmap
*/
private void printErrorProcess(String ids, Bitmap bitmap, Exception e, int errorCode) {
bitmaps.remove(bitmap);
prjIds.remove(ids);
PrinterPlugins.getOnPrinterFlowHandler().connectionError(e);
updatePrintState(ids, errorCode);
isPrint = false;
isExecutionNextTask();
}
private void connectByIp(String ip, PrinterStatusInfo statusInfo) {
if (statusInfo != null) {
LoganManager.w_printer(TAG, "連接狀態1111:" + statusInfo.getConnection());
......@@ -361,8 +365,10 @@ public class EpsonPrint implements ReceiveListener {
ipAddress = ip;
}
}
if (statusInfo != null) {
LoganManager.w_printer(TAG, "連接狀態222:" + statusInfo.getConnection());
}
}
private void loginfo(PrinterStatusInfo statusInfo) {
int connection = statusInfo.getConnection();
......@@ -388,7 +394,7 @@ public class EpsonPrint implements ReceiveListener {
try {
mPrinter.connect("TCP:" + ip, Printer.PARAM_DEFAULT);
} catch (Exception e) {
Log.e(TAG, "連接打印機報錯" + e.getMessage() + e.getClass().getName());
Log.e(TAG, "prj連接打印機報錯" + e.getMessage() + e.getClass().getName());
e.printStackTrace();
LoganManager.w_printer(TAG, "連接打印機報錯:" + e.getMessage());
disconnectPrinter();
......@@ -400,33 +406,51 @@ public class EpsonPrint implements ReceiveListener {
return true;
}
private void updatePrintState(int code) {
if (resultListener != null) {
resultListener.onResult(code);
private void updatePrintState(String ids, int code) {
if (onPrjPrintResultListener != null) {
onPrjPrintResultListener.onResult(code, ids);
}
}
/**
* 打印結果回調
*
* @param printer 打印類
* @param i 打印結果
* @param printerStatusInfo 打印機狀態
* @param s
* @param s 沒值
*/
@Override
public void onPtrReceive(Printer printer, int i, PrinterStatusInfo printerStatusInfo, String s) {
this.mPrinter = printer;
mPrinter.clearCommandBuffer();
executionNextTask(printer, i, printerStatusInfo);
}
/**
* 執行下一個打印任務
* @param printer
* @param i
* @param printerStatusInfo
*/
private void executionNextTask(Printer printer, int i, PrinterStatusInfo printerStatusInfo) {
if (bitmaps.size() > 0) {
if (receiveListener != null) {
receiveListener.onPtrReceive(printer, i, printerStatusInfo, ids.get(0));
receiveListener.onPtrReceive(printer, i, printerStatusInfo, prjIds.get(0));
}
Log.d("eee", "移除前:onPtrReceive" + ids.get(0) + ",任務數:" + bitmaps.size());
Log.d("eee", "prj移除前:onPtrReceive" + prjIds.get(0) + ",任務數:" + bitmaps.size());
bitmaps.remove(0);
ids.remove(0);
prjIds.remove(0);
}
isExecutionNextTask();
}
/**
* 是否繼續執行下一個任務
*/
private void isExecutionNextTask() {
if (bitmaps.size() > 0) {
printData(ipAddress, bitmaps.get(0));
printData(ipAddress, prjIds.get(0), bitmaps.get(0));
} else {
isPrint = false;
disconnectPrinter();
......
......@@ -66,21 +66,21 @@ public class PrintPrjKitchen extends PrinterRoot {
private int modifierIsItalic;
private String[] languageTypes;
private static Map<String, List<PrjBean.DataBean.Bean>> prjMap;
private static Map<String, List<PrjBean>> prjMap;
@Override
public Map<String, List<Bitmap>> getPrintBitmap(Context mContext, PrinterDeviceBean deviceBean) {
Map<String, List<Bitmap>> bitmapMaps = new HashMap<>();
//通過打印位置生成多張用於打印的bitmap
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> entry : getPrjMap().entrySet()) {
for (Map.Entry<String, List<PrjBean>> entry : getPrjMap().entrySet()) {
String key = entry.getKey();
List<Bitmap> bitmaps = new ArrayList<>();
List<PrjBean.DataBean.Bean> noCut = new ArrayList<>();
List<PrjBean> noCut = new ArrayList<>();
//不帶*號,所有同樣廚房位置的食品都在一張紙上
for (PrjBean.DataBean.Bean bean : entry.getValue()) {
for (PrjBean bean : entry.getValue()) {
if (bean.getStatus() == 2) {
List<PrjBean.DataBean.Bean> beans = new ArrayList<>();
List<PrjBean> beans = new ArrayList<>();
beans.add(bean);
Bitmap bitmap = getKitChenPrintBitmap(mContext, key, beans, deviceBean);
bitmaps.add(bitmap);
......@@ -120,16 +120,16 @@ public class PrintPrjKitchen extends PrinterRoot {
this.languageTypes = deviceBean.getLanguageType().split(",");
List<String> pritContents = new ArrayList<>();
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> entry : getPrjMap().entrySet()) {
for (Map.Entry<String, List<PrjBean>> entry : getPrjMap().entrySet()) {
//不帶*號,所有同樣廚房位置的食品都在一張紙上
// for (PrjBean.DataBean.Bean bean : entry.getValue()) {
// for (PrjBean bean : entry.getValue()) {
pritContents.add(getBBPosPrintData(entry.getKey(), entry.getValue(), entry.getValue().get(0)));
// }
}
return (String[]) pritContents.toArray();
}
private String getBBPosPrintData(String key, List<PrjBean.DataBean.Bean> prjBeans, PrjBean.DataBean.Bean prjBean) {
private String getBBPosPrintData(String key, List<PrjBean> prjBeans, PrjBean prjBean) {
String stringBuilder = "<html><body>" +
getHtmlHeadInfo(key, prjBean) +
getHtmlKitchenFood(prjBeans) +
......@@ -138,7 +138,7 @@ public class PrintPrjKitchen extends PrinterRoot {
return stringBuilder;
}
private String getHtmlHeadInfo(String key, PrjBean.DataBean.Bean prjBean) {
private String getHtmlHeadInfo(String key, PrjBean prjBean) {
List<HtmlLable> htmlLables = new ArrayList<>();
......@@ -200,13 +200,13 @@ public class PrintPrjKitchen extends PrinterRoot {
return getHtmlLables(htmlLables.toArray(new HtmlLable[htmlLables.size()]));
}
private String getHtmlKitchenFood(List<PrjBean.DataBean.Bean> prjBeans) {
private String getHtmlKitchenFood(List<PrjBean> prjBeans) {
setFoodItemType(prjBeans);
List<HtmlLable> htmlLables = new ArrayList<>();
for (PrjBean.DataBean.Bean prjBean : prjBeans) {
for (PrjBean prjBean : prjBeans) {
}
......@@ -215,7 +215,7 @@ public class PrintPrjKitchen extends PrinterRoot {
return getHtmlLables(htmlLables.toArray(new HtmlLable[htmlLables.size()]));
}
private String getHtmlEndInfo(PrjBean.DataBean.Bean prjBean) {
private String getHtmlEndInfo(PrjBean prjBean) {
List<HtmlLable> htmlLables = new ArrayList<>();
//台號
htmlLables.add(new HtmlLable(HtmlContract.LABLE_P, getTableName(prjBean), new HtmlLable.Attributes(HtmlContract.ATTRIBUTES_FONT_SIZE, font_size_kitchen_print_table_number2)));
......@@ -233,8 +233,8 @@ public class PrintPrjKitchen extends PrinterRoot {
return 1;
}
public Bitmap getKitChenPrintBitmap(Context context, String key, PrjBean.DataBean.Bean data, PrinterDeviceBean printerDeviceBean) {
List<PrjBean.DataBean.Bean> beans = new ArrayList<>();
public Bitmap getKitChenPrintBitmap(Context context, String key, PrjBean data, PrinterDeviceBean printerDeviceBean) {
List<PrjBean> beans = new ArrayList<>();
beans.add(data);
return getKitChenPrintBitmap(context, key, beans, printerDeviceBean);
}
......@@ -245,11 +245,11 @@ public class PrintPrjKitchen extends PrinterRoot {
* @param context
* @return
*/
public Bitmap getKitChenPrintBitmap(Context context, String key, List<PrjBean.DataBean.Bean> data, PrinterDeviceBean printerDeviceBean) {
public Bitmap getKitChenPrintBitmap(Context context, String key, List<PrjBean> data, PrinterDeviceBean printerDeviceBean) {
if (data == null || data.size() <= 0) {
return null;
}
PrjBean.DataBean.Bean prjBean = data.get(0);
PrjBean prjBean = data.get(0);
if (prjBean == null) {
return null;
}
......@@ -433,8 +433,8 @@ public class PrintPrjKitchen extends PrinterRoot {
}
private void setFoodItemType(List<PrjBean.DataBean.Bean> data) {
for (PrjBean.DataBean.Bean bean : data) {
private void setFoodItemType(List<PrjBean> data) {
for (PrjBean bean : data) {
if (bean.getParentId() == 0) {
//沒有父級id,則是第一級食品
bean.setItemType(1);
......@@ -443,7 +443,7 @@ public class PrintPrjKitchen extends PrinterRoot {
if (bean.getParentId() != 0) {
bean.setItemType(2);//先設置為細項,再通過下面的遍歷確定是否是第三級細項
//循環遍歷查找父級食品
for (PrjBean.DataBean.Bean itembean : data) {
for (PrjBean itembean : data) {
if (bean.getParentId() == itembean.getOrderDetailsId()) {
//如果父級是細項,則當前食品就是二級細項
bean.setItemType(bean.getItemType() + 1);
......@@ -454,7 +454,7 @@ public class PrintPrjKitchen extends PrinterRoot {
}
}
private String getTableName(PrjBean.DataBean.Bean prjBean) {
private String getTableName(PrjBean prjBean) {
if (TextUtil.isEmptyOrNullOrUndefined(prjBean.getTableName())) {
switch (prjBean.getOrderType()) {
case 1:
......@@ -470,7 +470,7 @@ public class PrintPrjKitchen extends PrinterRoot {
}
}
// private String getProductNameByLanguageType(PrjBean.DataBean.Bean prjBean) {
// private String getProductNameByLanguageType(PrjBean prjBean) {
// for (String type : languageTypes) {
// String languageType = type;
// if (languageType.contains(".")) {
......@@ -495,7 +495,7 @@ public class PrintPrjKitchen extends PrinterRoot {
// }
// }
public static Map<String, List<PrjBean.DataBean.Bean>> getPrjMap() {
public static Map<String, List<PrjBean>> getPrjMap() {
if (prjMap == null) {
prjMap = new HashMap<>();
}
......
......@@ -37,7 +37,6 @@ import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.common.printer.AidlUtil;
import com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.threadPool.ThreadPoolManager;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.common.utils.view.ImageUtils;
import com.gingersoft.gsa.cloud.common.utils.view.LayoutToBitmapUtils;
......@@ -53,6 +52,7 @@ import com.gingersoft.gsa.cloud.print.bean.PrintTakeawayFormContent;
import com.gingersoft.gsa.cloud.print.bean.base.PrintBillItem;
import com.gingersoft.gsa.cloud.print.bean.base.PrintFoodItem;
import com.gingersoft.gsa.cloud.print.bean.base.PrintPayTypeItem;
import com.gingersoft.gsa.cloud.print.impl.OnPrjPrintResultListener;
import com.google.zxing.WriterException;
import com.hyweb.n5.lib.constant.PrinterConstant;
import com.hyweb.n5.lib.util.PrinterUtil;
......@@ -326,6 +326,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
private PrintExecutor executor;
private EpsonPrint mPrinter;
/**
* ip設備打印
......@@ -339,8 +340,13 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
RxJavaUtils.doInIOThread(new RxIOTask<Object>(0) {
@Override
public Void doInIOThread(Object o) {
EpsonPrint mPrinter = new EpsonPrint();
mPrinter.initializeObject(GsaCloudApplication.getAppContext(), PrinterRoot.this, PrinterRoot.this);
mPrinter = new EpsonPrint();
mPrinter.initializeObject(GsaCloudApplication.getAppContext(), PrinterRoot.this, new OnPrjPrintResultListener() {
@Override
public void onResult(int errorCode, String prjIds) {
PrinterRoot.this.onResult(errorCode);
}
});
for (int j = 0; j < bitmaps.size(); j++) {
mPrinter.putPrintData(printerDeviceBean.getIp(), bitmaps.get(j), "");
}
......@@ -354,6 +360,12 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
ipPrint(printerDeviceBean, bitmaps, this, this);
}
public void disconnectEpson() {
if (mPrinter != null) {
mPrinter.disconnectPrinter();
}
}
private void ipPrint(PrinterDeviceBean printerDeviceBean, List<Bitmap> bitmaps, PrintSocketHolder.OnStateChangedListener stateChangedListener, PrintExecutor.OnPrintResultListener resultListener) {
if (executor == null) {
executor = new PrintExecutor()
......
......@@ -6,6 +6,7 @@ import com.gingersoft.gsa.cloud.print.PrintDataMaker;
import com.gingersoft.gsa.cloud.print.PrintExecutor;
import com.gingersoft.gsa.cloud.print.PrinterWriter;
import com.gingersoft.gsa.cloud.print.PrinterWriterExecutor;
import com.gingersoft.gsa.cloud.print.impl.OnPrjPrintResultListener;
import java.util.ArrayList;
import java.util.List;
......@@ -21,9 +22,9 @@ public class PrjPrintMaker implements PrintDataMaker {
private String ip;
private int port;
private PrintExecutor.OnPrjPrintResultListener onPrjPrintResultListener;
private OnPrjPrintResultListener onPrjPrintResultListener;
public PrintExecutor.OnPrjPrintResultListener getOnPrjPrintResultListener() {
public OnPrjPrintResultListener getOnPrjPrintResultListener() {
return onPrjPrintResultListener;
}
......
......@@ -15,6 +15,7 @@ import androidx.annotation.Nullable;
import com.epson.epos2.printer.Printer;
import com.epson.epos2.printer.PrinterStatusInfo;
import com.epson.epos2.printer.ReceiveListener;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.constans.HttpsConstans;
import com.gingersoft.gsa.cloud.common.constans.PrintConstans;
import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager;
......@@ -53,6 +54,7 @@ import com.joe.print.mvp.print.utils.MyPrintUtils;
import com.sunmi.peripheral.printer.InnerResultCallbcak;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import org.jetbrains.annotations.NotNull;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
......@@ -219,15 +221,13 @@ public class PrjService extends Service implements ReceiveListener {
}
}
private int totalPrj;
private int currentIndex;
private String prjJson = "{\"success\":true,\"sysTime\":1613789540248,\"data\":{\"K1\":[{\"id\":71387,\"printerDeviceId\":186,\"status\":2,\"tableName\":\"堂食1\",\"orderNo\":\"0013\",\"orderTime\":2021,\"person\":1,\"number\":1,\"orderDetailsTime\":\"Feb 23, 2021 1:52:06 PM\",\"orderDetailsId\":372,\"productName\":\"N1. Mr.Arita華盛丼>得獎和牛使用定食\",\"productName2\":\"\",\"productName3\":\"\",\"parentId\":0,\"type\":3,\"createTime\":1614059526281,\"productId\":61256,\"requests\":1,\"actualPrinterDeviceId\":186,\"orderType\":1,\"isFirstSendOrder\":1,\"quantity\":21,\"memberName\":\"96761128\"}]}}";
private void newPrint(String json) {
Map<String, List<PrjBean.DataBean.Bean>> listMap = new HashMap<>();
currentIndex = 0;
totalPrj = 0;
PrjBean prjBean = JsonUtils.parseObject(json, PrjBean.class);
Map<String, List<PrjBean>> listMap = new HashMap<>();
int totalPrj = 0;
BaseResult prjBean = JsonUtils.parseObject(json, BaseResult.class);
if (prjBean == null || prjBean.getData() == null) {
LoganManager.w_printer(TAG, "newPrint prjBean == null || prjBean.getData() == null ");
return;
......@@ -236,7 +236,7 @@ public class PrjService extends Service implements ReceiveListener {
cancel(pollDisposable);
//第一步:解析PRJ數據,格式為 Map<廚房位置,需要打印的數據>
try {
JSONObject jsonObject = new JSONObject(prjBean.getData());
JSONObject jsonObject = new JSONObject(GsonUtils.GsonString(prjBean.getData()));
//通过迭代器获取这段json当中所有的key值
Iterator keys = jsonObject.keys();
//然后通过一个循环取出所有的key值
......@@ -244,45 +244,71 @@ public class PrjService extends Service implements ReceiveListener {
String key = String.valueOf(keys.next());
//最后就可以通过刚刚得到的key值去解析后面的json了
JSONArray dataJson = (JSONArray) jsonObject.get(key);
List<PrjBean.DataBean.Bean> datas = JsonUtils.parseArray(dataJson.toString(), PrjBean.DataBean.Bean.class);
//解析出prj集合
List<PrjBean> datas = JsonUtils.parseArray(dataJson.toString(), PrjBean.class);
if (datas != null && datas.size() > 0) {
//打印位置和需要打印的數據
listMap.put(key, datas);
//計算prj總數
totalPrj = calculationPrjQuantity(datas);
}
}
} catch (JSONException e) {
e.printStackTrace();
LoganManager.w_printer(TAG, "newPrint JSONException: " + e.getMessage());
}
//設置每張prj的頁數
setPrjIndex(listMap, totalPrj);
//配置對應打印機
foreachPrint(listMap, getPrinterDevices());
}
/**
* 計算出prj總數
*
* @param prjBeans prj數據
*/
private int calculationPrjQuantity(List<PrjBean> prjBeans) {
int totalPrj = 0;
//計算本次打印的prj總張數有沒有不需要切紙的
boolean isHasNoCut = false;
for (PrjBean.DataBean.Bean bean : datas) {
for (PrjBean bean : prjBeans) {
if (bean.getStatus() == 2) {
//需要切紙,prj總數就+1
// 需要切紙,prj總數就+1
totalPrj++;
} else {
} else if (bean.getStatus() != PrjBean.PRJ_STATUS_FOLLOW_PARENT) {
// 不切紙,並且不跟主項,在遍歷結束後,需要總數+1
isHasNoCut = true;
}
}
if (isHasNoCut) {
//有不需要切紙的食物,prj總數+1
// 有不需要切紙的食物,prj總數+1
// +1的原因是,如果全是不切紙的,在遍歷時是不加1的,總數就為0,所以在遍歷結束後+1
totalPrj++;
}
}
}
} catch (JSONException e) {
e.printStackTrace();
LoganManager.w_printer(TAG, "newPrint JSONException: " + e.getMessage());
}
setPrjIndex(listMap, totalPrj);
foreachPrint(listMap, getPrinterDevices());
return totalPrj;
}
private Map<String, List<PrjBean.DataBean.Bean>> setPrjIndex(Map<String, List<PrjBean.DataBean.Bean>> listMap, int totalPrj) {
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> prjMap : listMap.entrySet()) {
/**
* 設置prj的頁數
*
* @param listMap key為打印位置
* @param totalPrj prj總數
* @return 排好頁數的prj數據
*/
private Map<String, List<PrjBean>> setPrjIndex(Map<String, List<PrjBean>> listMap, int totalPrj) {
int currentIndex = 0;
for (Map.Entry<String, List<PrjBean>> prjMap : listMap.entrySet()) {
//上一個對象是否切紙
boolean lastIsCute = false;
for (PrjBean.DataBean.Bean bean : prjMap.getValue()) {
for (PrjBean bean : prjMap.getValue()) {
bean.setTotalPrj(totalPrj);
if (bean.getStatus() == 2) {
if (bean.getStatus() == PrjBean.PRJ_STATUS_CUT_PAPER) {
//要切紙,紙張數+1
currentIndex++;
lastIsCute = true;
} else {
} else if (bean.getStatus() != PrjBean.PRJ_STATUS_FOLLOW_PARENT) {
// 不跟主項的
if (currentIndex == 0) {
currentIndex = 1;
} else if (lastIsCute) {
......@@ -298,10 +324,10 @@ public class PrjService extends Service implements ReceiveListener {
return listMap;
}
private void foreachPrint(Map<String, List<PrjBean.DataBean.Bean>> listMap, List<PrinterDeviceBean> printerDeviceBeans) {
private void foreachPrint(Map<String, List<PrjBean>> listMap, List<PrinterDeviceBean> printerDeviceBeans) {
//雙重遍歷可以以後優化
//第二步:遍歷 Map<廚房位置,需要打印的數據>,通過廚房位置找到對應的打印機,並且通過數據拿到對應的通用配置
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> prjMap : listMap.entrySet()) {
for (Map.Entry<String, List<PrjBean>> prjMap : listMap.entrySet()) {
boolean isFindDevice = false;
for (PrinterDeviceBean deviceBean : printerDeviceBeans) {
//遍歷得到當前打印機,如果沒找到打印機,就不打印
......@@ -344,7 +370,7 @@ public class PrjService extends Service implements ReceiveListener {
* @param beans prj數據
* @return 通用配置
*/
private PrintCurrencyBean getPrintCurrencyBean(List<PrjBean.DataBean.Bean> beans) {
private PrintCurrencyBean getPrintCurrencyBean(List<PrjBean> beans) {
PrintCurrencyBean printCurrencyBean = null;
if (beans != null && beans.size() > 0) {
if (beans.get(0).getOrderType() == 1 || beans.get(0).getOrderType() == 3) {
......@@ -361,7 +387,7 @@ public class PrjService extends Service implements ReceiveListener {
/**
* 生成用於打印的prj的Bitmap
*/
private void generatePrintData(String key, List<PrjBean.DataBean.Bean> beans, PrinterDeviceBean printerDeviceBean) {
private void generatePrintData(String key, List<PrjBean> beans, PrinterDeviceBean printerDeviceBean) {
int orderType = 1;
if (beans != null && beans.size() > 0) {
......@@ -407,12 +433,12 @@ public class PrjService extends Service implements ReceiveListener {
* @param beans prj數據
* @param printerDeviceBean 打印設備
*/
private void prjToPc(List<PrjBean.DataBean.Bean> beans, PrinterDeviceBean printerDeviceBean) {
private void prjToPc(List<PrjBean> beans, PrinterDeviceBean printerDeviceBean) {
//PRJ模式,生成PRJ文件到共享的電腦上
ThreadPoolManager.getInstence().putExecutableTasks(() -> {
List<PrjBean.DataBean.Bean> noCutList = new ArrayList<>();
List<PrjBean.DataBean.Bean> cutList = new ArrayList<>();
for (PrjBean.DataBean.Bean bean : beans) {
List<PrjBean> noCutList = new ArrayList<>();
List<PrjBean> cutList = new ArrayList<>();
for (PrjBean bean : beans) {
if (bean.getStatus() == 2) {
//需要切紙
cutList.add(bean);
......@@ -454,7 +480,7 @@ public class PrjService extends Service implements ReceiveListener {
createFile.createNewFile();
if (createFile.exists()) {
PrintStream ps = new PrintStream(new SmbFileOutputStream(createFile));
PrjBean.DataBean.Bean bean = noCutList.get(0);
PrjBean bean = noCutList.get(0);
String tableName = "";
if (TextUtil.isEmptyOrNullOrUndefined(bean.getTableName())) {
......@@ -507,16 +533,17 @@ public class PrjService extends Service implements ReceiveListener {
* @param beans prj數據
* @param printerDeviceBean 打印機
*/
private void stylusPrinting(String key, List<PrjBean.DataBean.Bean> beans, PrinterDeviceBean printerDeviceBean) {
private void stylusPrinting(String key, List<PrjBean> beans, PrinterDeviceBean printerDeviceBean) {
//針式打印機並且打印機類型為IP打印,生成獨特的格式
List<Map<String, Bitmap>> bitmapMaps = generatePrintMaps(key, beans, printerDeviceBean);
//將打印的圖片保存到手機中
hookPrinterBitmap(bitmapMaps, beans);
EpsonPrint mPrinter = EpsonPrint.getInstance();
boolean initResult = EpsonPrint.getInstance().initializeObject(this, this, errorCode -> updatePrjState(errorCode, getPrintIds(bitmapMaps)));
boolean initResult = EpsonPrint.getInstance().initializeObject(this, this, this::updatePrjState);
if (!initResult) {
//初始化打印機失敗
Log.e("eee", "prj初始化打印失敗" + getPrintIds(bitmapMaps));
updatePrjState(UpdateBean.FAIL_EPSON_INIT, getPrintIds(bitmapMaps));
return;
}
......@@ -618,9 +645,9 @@ public class PrjService extends Service implements ReceiveListener {
*
* @return prj的id集合
*/
private String getPrintIdsByPrjData(List<PrjBean.DataBean.Bean> prjBeans) {
private String getPrintIdsByPrjData(List<PrjBean> prjBeans) {
StringBuilder stringBuilder = new StringBuilder();
for (PrjBean.DataBean.Bean prjBean : prjBeans) {
for (PrjBean prjBean : prjBeans) {
stringBuilder.append(prjBean.getId());
if (stringBuilder.toString().lastIndexOf(",") != stringBuilder.length() - 1) {
//如果最後一位不是逗號,才添加
......@@ -768,44 +795,224 @@ public class PrjService extends Service implements ReceiveListener {
* @param key 打印位置
* @param beans 打印的食品和其他的一些信息
*/
private List<Map<String, Bitmap>> generatePrintMaps(String key, List<PrjBean.DataBean.Bean> beans, PrinterDeviceBean printerDeviceBean) {
private List<Map<String, Bitmap>> generatePrintMaps(String key, List<PrjBean> beans, PrinterDeviceBean printerDeviceBean) {
//當前所有食品都是同一個打印位置,例如:K1
PrintPrjKitchen printPrjKitchen = new PrintPrjKitchen();
//這個Map的key是這張PRJ的所有PRJ記錄的id,然後會同時打印多張,所以是一個List集合
List<Map<String, Bitmap>> bitmapMaps = new ArrayList<>();
List<PrjBean.DataBean.Bean> noCut = new ArrayList<>();
//不帶*號,所有同樣廚房位置的食品都在一張紙上
for (PrjBean.DataBean.Bean bean : beans) {
if (bean.getStatus() == 2) {
List<PrjBean> notCutData = new ArrayList<>();
List<PrjBean> cutPrjData = new ArrayList<>();
int prjSize = beans.size();
for (int i = 0; i < prjSize; i++) {
PrjBean bean = beans.get(i);
//如果是跟隨主項,那就放入不切紙,因為要切紙的,都已經全部遍歷完了
//如果是要切紙的
if (bean.getStatus() == PrjBean.PRJ_STATUS_CUT_PAPER) {
//裝進切紙集合
cutPrjData.add(bean);
//遍歷後面的prj,一直到不是他子項為止
i = getFollow(i, beans, cutPrjData, notCutData, key, printerDeviceBean, printPrjKitchen, bitmapMaps);
} else {
//不切紙的,都放在這裡
notCutData.add(bean);
}
}
//將所有不切紙的轉為打印數據
PrjDataTransToPrintData(key, printerDeviceBean, printPrjKitchen, bitmapMaps, notCutData);
hookPrinterBitmap(bitmapMaps, beans);
return bitmapMaps;
}
/**
* 將prjData數據轉為打印數據
*
* @param key 打印位置
* @param printerDeviceBean 打印設備信息
* @param printPrjKitchen 打印類
* @param bitmapMaps 裝本次打印數據的map,key為打印數據的所有prj的id
* @param prjData prj數據
*/
private void PrjDataTransToPrintData(String key, PrinterDeviceBean printerDeviceBean, PrintPrjKitchen printPrjKitchen, List<Map<String, Bitmap>> bitmapMaps, List<PrjBean> prjData) {
if (prjData.size() > 0) {
Map<String, Bitmap> map = new HashMap<>();
//帶*,需要切紙的,單獨放一張紙
map.put(bean.getId() + "", printPrjKitchen.getKitChenPrintBitmap(mContext, key, bean, printerDeviceBean));
map.put(getPrjIds(prjData), printPrjKitchen.getKitChenPrintBitmap(mContext, key, prjData, printerDeviceBean));
bitmapMaps.add(map);
prjData.clear();
}
}
/**
* @param i 當前食品下標
* @param beans 所有prj數據集合
* @param cutPrjData 切紙的集合
* @param notCutData 不切紙的集合
* @param key 打印位置
* @param printerDeviceBean 打印設備
* @param printPrjKitchen 打印類
* @param bitmapMaps 裝打印數據的map
* @return 返回本次遍歷到的食品位置
*/
public int getFollow(int i, List<PrjBean> beans, List<PrjBean> cutPrjData, List<PrjBean> notCutData, String key, PrinterDeviceBean printerDeviceBean, PrintPrjKitchen printPrjKitchen, List<Map<String, Bitmap>> bitmapMaps) {
//遍歷後面所有的prj
for (int j = i + 1; j < beans.size(); j++) {
PrjBean itemPrjBean = beans.get(j);
if (itemPrjBean.getType() == PrjBean.FOOD_TYPE) {
//如果是食品,可能是套餐
if (itemPrjBean.getParentId() != 0) {
//用來判斷是不是這個食品的細項,如果遍歷完所有的食品,還沒找到他的父類,說明就不是當前要切紙對象的細項
boolean isThisFoodItem = false;
//這裡之所以需要遍歷切紙集合,因為當前食品可能是三級,他的父類id不一定是第一級那個bean的id,可能是二級食品的子類
for (int k = 0; k < cutPrjData.size(); k++) {
if (itemPrjBean.getParentId() == cutPrjData.get(k).getOrderDetailsId()) {
isThisFoodItem = true;
//是這個食品的細項,判斷是不是跟隨主項
if (itemPrjBean.getStatus() == PrjBean.PRJ_STATUS_FOLLOW_PARENT) {
//跟隨主項
cutPrjData.add(itemPrjBean);
} else if (itemPrjBean.getStatus() == PrjBean.PRJ_STATUS_CUT_PAPER) {
//不跟隨主項,要切紙
//要切紙的,又要判斷下一個是不是當前細項的細項,因為有可能下一個細項也是要跟隨主項的
List<PrjBean> itemCutPrjData = new ArrayList<>();
itemCutPrjData.add(itemPrjBean);
//遍歷之後所有的食品,一直到不是當前子項的子項為止
j = getFollow(j, beans, itemCutPrjData, notCutData, key, printerDeviceBean, printPrjKitchen, bitmapMaps);
} else {
noCut.add(bean);
//不跟隨主項,不切紙
//下一個食品可能是這個不切紙食品的細項
//遍歷之後的食品,直到不是這個食品的細項為止
j = getNotCutFoodItem(j, beans, itemPrjBean, notCutData, key, printerDeviceBean, printPrjKitchen, bitmapMaps);
}
break;
}
if (noCut.size() > 0) {
Map<String, Bitmap> map = new HashMap<>();
//遍歷拿到這張紙所有的PRJ記錄ID
}
if (!isThisFoodItem) {
//不是這個食品的細項,說明這個食品的所有細項都已經遍歷完了
//將這個食品的數據轉為打印數據
PrjDataTransToPrintData(key, printerDeviceBean, printPrjKitchen, bitmapMaps, cutPrjData);
//跳出循環
return j - 1;
}
} else {
//如果是食品,並且沒有父類,說明之前的食品所有細項都已經遍歷完了
//將這個食品的數據轉為打印數據
PrjDataTransToPrintData(key, printerDeviceBean, printPrjKitchen, bitmapMaps, cutPrjData);
//就跳出循環
return j - 1;
}
} else {
boolean isThisFoodItem = false;
//如果是細項,先判斷是不是這個食品的細項,再判斷是不是跟隨主項
//這裡之所以需要遍歷切紙集合,因為當前細項可能是三級細項,他的父類id不一定是第一級那個bean的id,可能是二級細項的子類
for (int k = 0; k < cutPrjData.size(); k++) {
if (itemPrjBean.getParentId() == cutPrjData.get(k).getOrderDetailsId()) {
isThisFoodItem = true;
//是這個食品的細項,判斷是不是跟隨主項
if (itemPrjBean.getStatus() == PrjBean.PRJ_STATUS_FOLLOW_PARENT) {
//跟隨主項
cutPrjData.add(itemPrjBean);
} else if (itemPrjBean.getStatus() == PrjBean.PRJ_STATUS_CUT_PAPER) {
//不跟隨主項,要切紙
//要切紙的,又要判斷下一個是不是當前細項的細項,因為有可能下一個細項也是要跟隨主項的
List<PrjBean> itemCutPrjData = new ArrayList<>();
itemCutPrjData.add(itemPrjBean);
//遍歷之後所有的食品,一直到不是當前子項的子項為止
j = getFollow(j, beans, itemCutPrjData, notCutData, key, printerDeviceBean, printPrjKitchen, bitmapMaps);
} else {
//不跟隨主項,不切紙
//下一個食品可能是這個不切紙食品的細項
//遍歷之後的食品,直到不是這個食品的細項為止
j = getNotCutFoodItem(j, beans, itemPrjBean, notCutData, key, printerDeviceBean, printPrjKitchen, bitmapMaps);
}
break;
}
}
if (!isThisFoodItem) {
//不是這個食品的細項,說明這個食品的所有細項都已經遍歷完了
//將這個食品的數據轉為打印數據
PrjDataTransToPrintData(key, printerDeviceBean, printPrjKitchen, bitmapMaps, cutPrjData);
//跳出循環
return j - 1;
}
}
}
PrjDataTransToPrintData(key, printerDeviceBean, printPrjKitchen, bitmapMaps, cutPrjData);
return beans.size();
}
/**
* 獲取不切紙的後續的食品細項
*
* @param j
* @param beans
* @param cutPrjData
* @param notCutData
* @param key
* @param printerDeviceBean
* @param printPrjKitchen
* @param bitmapMaps
* @return
*/
private int getNotCutFoodItem(int j, List<PrjBean> beans, PrjBean parentPrjBean, List<PrjBean> notCutData, String key, PrinterDeviceBean printerDeviceBean, PrintPrjKitchen printPrjKitchen, List<Map<String, Bitmap>> bitmapMaps) {
//遍歷不切紙的後續的prj
//當前食品的後續的不切紙的細項
List<PrjBean> currentNotCutPrjBeans = new ArrayList<>();
currentNotCutPrjBeans.add(parentPrjBean);
for (int i = j + 1; i < beans.size(); i++) {
PrjBean itemPrjBean = beans.get(i);
boolean isThisFoodItem = false;
//如果這個食品是不是食品的子類
//這裡之所以遍歷,是因為可能存在,一級-二級-三級,如果只用一級去和三級判斷父類關係,三級判斷通不過
for (int k = 0; k < currentNotCutPrjBeans.size(); k++) {
if (itemPrjBean.getParentId() == currentNotCutPrjBeans.get(k).getOrderDetailsId()) {
isThisFoodItem = true;
//判斷是否切紙
if (itemPrjBean.getStatus() == PrjBean.PRJ_STATUS_CUT_PAPER) {
//要切紙的,又要判斷下一個是不是當前細項的細項,因為有可能下一個細項也是要跟隨主項的
List<PrjBean> itemCutPrjData = new ArrayList<>();
itemCutPrjData.add(itemPrjBean);
//遍歷之後所有的食品,一直到不是當前子項的子項為止
i = getFollow(i, beans, itemCutPrjData, notCutData, key, printerDeviceBean, printPrjKitchen, bitmapMaps);
} else {
//不切紙或
//跟隨主項,就加入不切紙的集合中
currentNotCutPrjBeans.add(itemPrjBean);
}
break;
}
}
if (!isThisFoodItem) {
//不是這個食品的細項
notCutData.addAll(currentNotCutPrjBeans);
return i - 1;
}
}
notCutData.addAll(currentNotCutPrjBeans);
return beans.size();
}
@NotNull
private String getPrjIds(List<PrjBean> noCut) {
StringBuilder stringBuffer = new StringBuilder();
for (PrjBean.DataBean.Bean noCutData : noCut) {
for (PrjBean noCutData : noCut) {
stringBuffer.append(noCutData.getId());
stringBuffer.append(",");
}
Bitmap prjBitmap = printPrjKitchen.getKitChenPrintBitmap(mContext, key, noCut, printerDeviceBean);
map.put(stringBuffer.toString(), prjBitmap);
bitmapMaps.add(map);
if (stringBuffer.length() <= 0) {
return "";
}
hookPrinterBitmap(bitmapMaps, beans);
return bitmapMaps;
//最後一位是逗號,去掉
return stringBuffer.substring(0, stringBuffer.length() - 1);
}
private void hookPrinterBitmap(List<Map<String, Bitmap>> bitmapMaps, List<PrjBean.DataBean.Bean> beans) {
private void hookPrinterBitmap
(List<Map<String, Bitmap>> bitmapMaps, List<PrjBean> beans) {
if (bitmapMaps.size() > 0) {
String prjName = String.valueOf(System.currentTimeMillis());
int orderType = 1;
if (beans.size() > 0) {
PrjBean.DataBean.Bean prjBean = beans.get(0);
PrjBean prjBean = beans.get(0);
if (prjBean != null) {
if (!TextUtils.isEmpty(prjBean.getBillNo())) {
prjName = prjBean.getBillNo();
......@@ -897,7 +1104,9 @@ public class PrjService extends Service implements ReceiveListener {
}
@Override
public void onPtrReceive(Printer printer, int i, PrinterStatusInfo printerStatusInfo, String s) {
public void onPtrReceive(Printer printer, int i, PrinterStatusInfo printerStatusInfo, String
s) {
Log.e("eee", "prj針式打印結果" + i);
//針式打印回調
if (i == 0) {
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
......@@ -908,6 +1117,5 @@ public class PrjService extends Service implements ReceiveListener {
//打印失敗
updatePrjFailure(s);
}
startGetPrjInfo();
}
}
......@@ -5,6 +5,7 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.WindowManager;
......@@ -35,7 +36,6 @@ import com.jess.arms.utils.ArmsUtils;
import com.joe.print.di.component.DaggerPrintComponent;
import com.joe.print.mvp.contract.PrintContract;
import com.joe.print.mvp.presenter.PrintPresenter;
import com.joe.print.mvp.print.EpsonPrint;
import com.joe.print.mvp.print.PrintInstruction;
import com.joe.print.mvp.print.PrintListener;
import com.joe.print.mvp.print.PrintPrjKitchen;
......@@ -45,6 +45,8 @@ import com.joe.print.mvp.print.utils.MyPrintUtils;
import com.joe.print.mvp.ui.view.PrinterLoadingDialog;
import com.joe.print.mvp.ui.view.SelectPrintDevicePopup;
import com.lxj.xpopup.XPopup;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import com.xuexiang.rxutil2.rxjava.task.RxUITask;
import java.util.List;
import java.util.Map;
......@@ -256,10 +258,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
* @return 如果prj有指定打印機,並且找到了,就返回
*/
private PrinterDeviceBean setKitChenPrj(PrinterDeviceBean defaultPrint) {
List<PrjBean.DataBean.Bean> printDatas = CCUtil.getNavigateParam(this, "prjBeans", null);
Map<String, List<PrjBean.DataBean.Bean>> prjMap = PrintPrjKitchen.getPrjMap();
String prjJson = CCUtil.getNavigateParam(this, "prjBeans", null);
List<PrjBean> printDatas = GsonUtils.jsonToList(prjJson, PrjBean.class);
// List<PrjBean> printDatas = CCUtil.getNavigateParam(this, "prjBeans", null);
Map<String, List<PrjBean>> prjMap = PrintPrjKitchen.getPrjMap();
String printLocation = null;
for (PrjBean.DataBean.Bean prjBean : printDatas) {
prjMap.put("", printDatas);
for (PrjBean prjBean : printDatas) {
if (printLocation == null) {
if (TextUtil.isNotEmptyOrNullOrUndefined(prjBean.getPrintPosition())) {
printLocation = prjBean.getPrintPosition();
......@@ -275,7 +280,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
prjBean.setPrintPosition(printLocation);
prjBean.setCurrentIndex(1);
}
prjMap.put("", printDatas);
return null;
}
......@@ -312,6 +316,8 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
PrintExecutor executor = new PrintExecutor();
executor.doPrinterRequestAsync(new OpenCashBoxMaker(defaultPrint.getIp(), defaultPrint.getPort()));
CC.sendCCResult(callId, CCResult.success());
PrinterPlugins.getOnPrinterFlowHandler().onPrintSuccess();
killMyself();
} else {
Map<String, List<Bitmap>> listMap;
List<Bitmap> zoomBitmaps = null;
......@@ -367,8 +373,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
private void addPrintProgress(String printState) {
RxJavaUtils.doInUIThread(new RxUITask<Object>(0) {
@Override
public void doInUIThread(Object o) {
printerLoadingDialog.setTitle(printState);
}
});
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
......@@ -379,6 +390,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public void printStateChanged(int state) {
Log.e("eee", "printStateChanged:" + state);
String tip = "加載中...";
switch (state) {
case PrintSocketHolder.ERROR_0:
......@@ -544,8 +556,10 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
//關閉ip打印連接
PrintSocketHolder.getInstance().closeSocket();
//關閉針式打印連接
EpsonPrint.getInstance().disconnectPrinter();
EpsonPrint.getInstance().finalizeObject();
if (printerInIt != null) {
printerInIt.disconnectEpson();
}
printerLoadingDialog.dismiss();
}
......
......@@ -17,7 +17,7 @@ import java.util.List;
/**
* Created by Wyh on 2020/2/20.
*/
public class KitChenPrjPrintFoodAdapter extends BaseQuickAdapter<PrjBean.DataBean.Bean, BaseViewHolder> {
public class KitChenPrjPrintFoodAdapter extends BaseQuickAdapter<PrjBean, BaseViewHolder> {
private int indentation = 0;
......@@ -29,7 +29,7 @@ public class KitChenPrjPrintFoodAdapter extends BaseQuickAdapter<PrjBean.DataBea
private int modifierIsItalic;
private String[] languageTypes;
public KitChenPrjPrintFoodAdapter(@Nullable List<PrjBean.DataBean.Bean> data, PrinterDeviceBean printerDeviceBean) {
public KitChenPrjPrintFoodAdapter(@Nullable List<PrjBean> data, PrinterDeviceBean printerDeviceBean) {
super(R.layout.print_kitchen_item_parent, data);
try {
this.foodFontSize = Integer.parseInt(printerDeviceBean.getFoodFont()) * 2;
......@@ -45,7 +45,7 @@ public class KitChenPrjPrintFoodAdapter extends BaseQuickAdapter<PrjBean.DataBea
}
@Override
protected void convert(BaseViewHolder helper, PrjBean.DataBean.Bean item) {
protected void convert(BaseViewHolder helper, PrjBean item) {
LinearLayout layout = helper.getView(R.id.layout_print_kitchen_parent);
for (String type : languageTypes) {
String languageType = type;
......
......@@ -35,9 +35,9 @@ public class KitChenPrjFoodView extends LinearLayout {
private int foodIsItalic;
private int modifierIsItalic;
private String[] languageTypes;
private List<PrjBean.DataBean.Bean> data;
private List<PrjBean> data;
public KitChenPrjFoodView(Context context, @Nullable List<PrjBean.DataBean.Bean> data, PrinterDeviceBean printerDeviceBean) {
public KitChenPrjFoodView(Context context, @Nullable List<PrjBean> data, PrinterDeviceBean printerDeviceBean) {
super(context);
try {
this.foodFontSize = Integer.parseInt(printerDeviceBean.getFoodFont()) * 2;
......@@ -56,7 +56,7 @@ public class KitChenPrjFoodView extends LinearLayout {
private void init() {
setOrientation(LinearLayout.VERTICAL);
for (PrjBean.DataBean.Bean item : data) {
for (PrjBean item : data) {
// View view = View.inflate(getContext(), R.layout.print_kitchen_item_parent, null);
// LinearLayout layout = view.findViewById(R.id.layout_print_kitchen_parent);
for (String type : languageTypes) {
......@@ -95,7 +95,7 @@ public class KitChenPrjFoodView extends LinearLayout {
}
boolean isBold, isItalic;
int paddingLeft;
if (itemType == PrjBean.DataBean.Bean.FOOD_SECONDARY) {
if (itemType == PrjBean.FOOD_SECONDARY) {
//細項,縮進
paddingLeft = indentation;
tvFoodName.setTextSize(modifierFontSize);
......@@ -103,7 +103,7 @@ public class KitChenPrjFoodView extends LinearLayout {
isBold = modifierIsBold == 1;
isItalic = modifierIsItalic == 1;
} else if (itemType == PrjBean.DataBean.Bean.FOOD_THREE_LEVEL) {
} else if (itemType == PrjBean.FOOD_THREE_LEVEL) {
//細項,縮進
paddingLeft = indentation * 2;
tvFoodName.setTextSize(modifierFontSize);
......
......@@ -172,8 +172,6 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
}
//添加主單位到副單位列表,用戶可手動切換
DeputyUnitBean deputyUnitBean = new DeputyUnitBean(purchaseOrderDetailsInfoVO.getBasicUnitName(), purchaseOrderDetailsInfoVO.getFoodQuantity());
deputyUnitBean.setDeputyValue(purchaseOrderDetailsInfoVO.getFoodQuantity());
deputyUnitBean.setUnitPrice(purchaseOrderDetailsInfoVO.getFoodPrice());
deputyUnitBeans.add(0, deputyUnitBean);
//设置显示的单位,如果大於1,則顯示第一個,因為第一個是副單位,默認顯示副單位
if (deputyUnitBeans.size() > 1) {
......@@ -182,6 +180,9 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
//只有一個單位,顯示主單位
purchaseOrderDetailsInfoVO.setShowUnit(deputyUnitBeans.get(0));
}
//設置默認顯示數量和價格
purchaseOrderDetailsInfoVO.getShowUnit().setDeputyValue(purchaseOrderDetailsInfoVO.getFoodQuantity());
purchaseOrderDetailsInfoVO.getShowUnit().setUnitPrice(purchaseOrderDetailsInfoVO.getFoodPrice());
//設置單位集合
purchaseOrderDetailsInfoVO.setFoodUnits(deputyUnitBeans);
} else {
......
......@@ -74,7 +74,7 @@ import static com.yalantis.ucrop.UCrop.REQUEST_CROP;
/**
* ================================================
* Description: 訂單詳情
* Description: 訂單詳情,收貨操作頁面
*/
public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPresenter> implements OrderDetailsContract.View, View.OnClickListener {
......
......@@ -55,29 +55,21 @@ import com.gingersoft.gsa.cloud.common.utils.FileUtils;
import com.gingersoft.gsa.cloud.common.utils.crash.AppCrashHandler;
import com.gingersoft.gsa.cloud.common.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.common.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.common.utils.view.BitmapUtil;
import com.gingersoft.gsa.cloud.common.utils.xlog.MyBackupStrategy;
import com.gingersoft.gsa.cloud.component.ComponentAction;
import com.gingersoft.gsa.cloud.component.ComponentName;
import com.gingersoft.gsa.cloud.database.DaoManager;
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
import com.hyweb.n5.lib.exception.NoInitPrinterException;
import com.hyweb.n5.lib.util.PrinterUtil;
import com.jess.arms.base.BaseApplication;
import com.kingja.loadsir.core.LoadSir;
import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import com.xuexiang.rxutil2.rxjava.task.RxIOTask;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import io.reactivex.functions.Consumer;
import io.reactivex.plugins.RxJavaPlugins;
......
......@@ -4,6 +4,7 @@ import android.os.AsyncTask;
import android.util.Log;
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
import com.gingersoft.gsa.cloud.print.impl.OnPrjPrintResultListener;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import java.util.ArrayList;
......@@ -20,6 +21,7 @@ public class PrintExecutor {
protected final String TAG = this.getClass().getSimpleName();
private static PrintExecutor printExecutor;
public static PrintExecutor getInstance() {
if (printExecutor == null) {
printExecutor = new PrintExecutor();
......@@ -219,13 +221,6 @@ public class PrintExecutor {
void onResult(int errorCode);
}
public interface OnPrjPrintResultListener {
/**
* PRJ打印結果回調,prj service用
*/
void onResult(int errorCode, String ids);
}
public PrintExecutor setOnPrjPrintResultListener(OnPrjPrintResultListener onPrjPrintResultListener) {
this.onPrjPrintResultListener = onPrjPrintResultListener;
return this;
......
......@@ -6,25 +6,23 @@ import java.util.Map;
import lombok.Data;
/**
* @author admin
*/
@Data
public class PrjBean {
public class PrjBean implements Serializable {
/**
* success : true
* sysTime : 1589177793623
* data : {"-1":[{"id":1,"printerDeviceId":-1,"status":1,"tableName":"51536","orderNo":"gs201351936242891","orderTime":2020,"person":2,"orderDetailsTime":"May 7, 2020 6:47:16 PM","orderDetailsId":48827589,"productName":"炸鸡翅","parentId":0,"type":3},{"id":2,"printerDeviceId":-1,"status":1,"tableName":"51536","orderNo":"gs201351936242891","orderTime":2020,"person":2,"orderDetailsTime":"May 7, 2020 6:47:16 PM","orderDetailsId":48827590,"productName":"鮮茄汁藍青口","parentId":0,"type":3}],"k1":[{"id":77,"printerDeviceId":1,"status":1,"tableName":"51536","orderNo":"gs201351936242891","orderTime":2020,"person":2,"orderDetailsTime":"May 11, 2020 11:41:41 AM","orderDetailsId":48828004,"productName":"走青檸測試","parentId":48827589,"type":4},{"id":78,"printerDeviceId":1,"status":1,"tableName":"51536","orderNo":"gs201351936242891","orderTime":2020,"person":2,"orderDetailsTime":"May 11, 2020 11:41:41 AM","orderDetailsId":48828005,"productName":"走豆測試","parentId":48827590,"type":4},{"id":79,"printerDeviceId":1,"status":1,"tableName":"51536","orderNo":"gs201351936242891","orderTime":2020,"person":2,"orderDetailsTime":"May 11, 2020 11:41:41 AM","orderDetailsId":48828006,"productName":"精選牛肉","parentId":0,"type":3},{"id":80,"printerDeviceId":1,"status":1,"tableName":"51536","orderNo":"gs201351936242891","orderTime":2020,"person":2,"orderDetailsTime":"May 11, 2020 11:41:41 AM","orderDetailsId":48828007,"productName":"走豆測試","parentId":48828006,"type":4},{"id":81,"printerDeviceId":1,"status":1,"tableName":"51536","orderNo":"gs201351936242891","orderTime":2020,"person":2,"orderDetailsTime":"May 11, 2020 11:41:41 AM","orderDetailsId":48828008,"productName":"雞飯(四客)","parentId":48828006,"type":3},{"id":82,"printerDeviceId":1,"status":1,"tableName":"51536","orderNo":"gs201351936242891","orderTime":2020,"person":2,"orderDetailsTime":"May 11, 2020 11:41:41 AM","orderDetailsId":48828009,"productName":"精選牛肉","parentId":48828006,"type":3}]}
* prj狀態為不切紙
*/
private boolean success;
private long sysTime;
private String data;
@Data
public static class DataBean {
public Map<String, List<Bean>> prjMap;
@Data
public static class Bean implements Serializable {
private static final long serialVersionUID = -3210457151279539745L;
public static final int PRJ_STATUS_NOT_CUT_PAPER = 1;
/**
* prj狀態為切紙
*/
public static final int PRJ_STATUS_CUT_PAPER = 2;
/**
* prj狀態為跟隨主項
*/
public static final int PRJ_STATUS_FOLLOW_PARENT = 3;
/**
* id : 77
* printerDeviceId : 1
......@@ -58,6 +56,9 @@ public class PrjBean {
* 食品类型#3:食品;4:细项;
*/
private int type;
public static final int FOOD_TYPE = 3;
public static final int FOOD_ITEM_TYPE = 4;
/**
* 打印狀態
*/
......@@ -115,6 +116,4 @@ public class PrjBean {
private String printPosition;//廚房位置
private String foodGroupName;//食品組
private String flyingSinglePosition;//飛單位置
}
}
}
package com.gingersoft.gsa.cloud.print.impl;
/**
* @author 宇航.
* User: admin
* Date: 2021/2/26
* Time: 10:49
* prj 打印結果回調
* Use:
*/
public interface OnPrjPrintResultListener {
/**
* prj 打印結果回調
*
* @param prjIds 本次打印的prj集合的id
* @param errorCode 錯誤碼
*/
void onResult(int errorCode, String prjIds);
}
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