Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
supplier
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王宇航
supplier
Commits
f410baeb
Commit
f410baeb
authored
Feb 20, 2021
by
Wyh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1、打印模塊優化 2、餐檯模式印單不打印食品問題 3、打印上菜紙閃退問題處理 4、餐檯模式結賬不打印食品問題
parent
bc663d6d
Hide whitespace changes
Inline
Side-by-side
Showing
53 changed files
with
1294 additions
and
976 deletions
+1294
-976
component-coldchain/src/main/java/com/gingersoft/coldchain_module/mvp/presenter/OrderDetailsPresenter.java
+2
-2
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/model/viewModel/PageViewModel.kt
+2
-1
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/mvp/ui/activity/PrjQueryActivity.java
+1
-1
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/ui/activity/OrderDetailsActivity.kt
+6
-0
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/ui/fragment/HistoryFragment.kt
+0
-3
component-delivery-pick/src/main/res/layout/activity_order_details.xml
+1
-1
component-main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/NewMainActivity.java
+1
-1
component-main/src/main/res/layout/main_home_management_funcation_item.xml
+0
-1
component-pay/src/main/java/com/gingersoft/gsa/cloud/pay/mvp/ui/activity/PayResultActivity.java
+1
-1
component-print/src/main/java/com/joe/print/mvp/print/EpsonPrint.java
+6
-7
component-print/src/main/java/com/joe/print/mvp/print/IpPrintMaker.java
+18
-2
component-print/src/main/java/com/joe/print/mvp/print/OpenCashBoxMaker.java
+18
-0
component-print/src/main/java/com/joe/print/mvp/print/PrintBill.java
+6
-3
component-print/src/main/java/com/joe/print/mvp/print/PrintServe.java
+9
-1
component-print/src/main/java/com/joe/print/mvp/print/PrintSlip.java
+14
-3
component-print/src/main/java/com/joe/print/mvp/print/PrinterRoot.java
+44
-50
component-print/src/main/java/com/joe/print/mvp/print/TestPrintMaker.java
+16
-11
component-print/src/main/java/com/joe/print/mvp/print/maker/PrjPrintMaker.java
+16
-1
component-print/src/main/java/com/joe/print/mvp/print/service/PrjService.java
+68
-75
component-print/src/main/java/com/joe/print/mvp/ui/activity/PrintActivity.java
+136
-231
component-print/src/main/java/com/joe/print/mvp/ui/activity/PrintTestActivity.java
+2
-2
component-print/src/main/java/com/joe/print/mvp/ui/adapter/PrintProgressAdapter.java
+16
-17
component-print/src/main/java/com/joe/print/mvp/ui/view/PrintProgressPopup.java
+26
-0
component-print/src/main/java/com/joe/print/mvp/ui/view/SelectPrintDevicePopup.java
+75
-0
component-print/src/main/res/layout/print_bitmap.xml
+11
-10
component-print/src/main/res/layout/print_dialog_internet_list.xml
+20
-11
component-print/src/main/res/layout/print_progress_item.xml
+5
-4
component-print/src/main/res/layout/printer_dialog_item.xml
+4
-1
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/presenter/NewSupplierPresenter.java
+2
-0
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/presenter/WarehousingInventoryPresenter.java
+4
-6
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/activity/SupplyChainMainActivity.java
+24
-0
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/adapter/SendSupplierMsgAdapter.java
+4
-0
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/fragment/food/FoodIngredientsFragment.java
+6
-1
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/fragment/order/PurchaseListFragment.java
+11
-2
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/fragment/warehouse/WarehousingInventoryFragment.java
+3
-3
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/utils/DoubleClickUtils.java
+22
-0
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/utils/HideUtil.java
+218
-0
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/action/table/PrintServingPaperAction.java
+3
-3
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/MealStandPresenter.java
+13
-2
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/OrderContentPresenter.java
+11
-2
config.gradle
+2
-2
library-common/src/main/java/com/gingersoft/gsa/cloud/app/GsaCloudApplication.java
+2
-2
library-common/src/main/java/com/gingersoft/gsa/cloud/common/constans/PrintConstans.java
+0
-1
library-common/src/main/java/com/gingersoft/gsa/cloud/common/logan/LoganManager.java
+5
-0
library-common/src/main/java/com/gingersoft/gsa/cloud/common/printer/plugins/PrinterFlowListener.java
+2
-2
library-print/src/main/java/com/gingersoft/gsa/cloud/print/PrintDataMaker.java
+4
-0
library-print/src/main/java/com/gingersoft/gsa/cloud/print/PrintExecutor.java
+113
-157
library-print/src/main/java/com/gingersoft/gsa/cloud/print/PrintSocketHolder.java
+48
-131
library-print/src/main/java/com/gingersoft/gsa/cloud/print/bean/adapter/AdaptationContent.java
+2
-0
library-print/src/main/java/com/gingersoft/gsa/cloud/print/bean/adapter/PrintContentAdapter.java
+50
-3
library-print/src/main/java/com/gingersoft/gsa/cloud/print/newprint/ConnectPrintUtil.java
+1
-1
library-print/src/main/java/com/gingersoft/gsa/cloud/print/newprint/PrintUtil.java
+218
-218
library-ui/src/main/res/layout/print_item_food.xml
+2
-0
No files found.
component-coldchain/src/main/java/com/gingersoft/coldchain_module/mvp/presenter/OrderDetailsPresenter.java
View file @
f410baeb
...
...
@@ -212,8 +212,6 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
mRootView
.
showMessage
(
OrderDetails
.
getVerifiAmountTip
());
return
;
}
//添加PRJ
addPrj
(
dataBean
);
RequestBody
requestBody
=
new
FormBody
.
Builder
()
.
add
(
"memberId"
,
UserContext
.
newInstance
().
getMemberId
()
+
""
)
.
add
(
"orderId"
,
dataBean
.
getID
()
+
""
)
...
...
@@ -232,6 +230,8 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
@Override
public
void
onNext
(
@NonNull
UpdateOrderStatusBean
info
)
{
if
(
info
!=
null
)
{
//添加PRJ
addPrj
(
dataBean
);
if
(
TextUtil
.
isNotEmptyOrNullOrUndefined
(
info
.
getErrorMsg
()))
{
mRootView
.
showMessage
(
info
.
getErrorMsg
());
}
...
...
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/model/viewModel/PageViewModel.kt
View file @
f410baeb
...
...
@@ -21,6 +21,7 @@ import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails.Companion.veri
import
com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails.Companion.verificationAmount
import
com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
import
com.gingersoft.gsa.cloud.common.core.user.UserContext
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
import
com.gingersoft.gsa.cloud.common.service.GetInfoUpdateService
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
import
com.gingersoft.gsa.cloud.common.utils.okhttpUtils.OkHttp3Utils
...
...
@@ -261,6 +262,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
},
{
//報錯處理
LoganManager
.
w_delivery
(
LoganManager
.
EVENT_QUERY
,
"自動接單"
+
it
.
message
)
})
}
}
...
...
@@ -697,7 +699,6 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
// })
CC
.
obtainBuilder
(
ComponentName
.
COMPONENT_PRINT
)
.
addParam
(
PrintConstans
.
PRINT_TYPE
,
PrintConstans
.
PRINT_INSTRUCTION
)
.
addParam
(
PrintConstans
.
PRINT_LOADING
,
false
)
.
setActionName
(
"printActivity"
)
.
build
()
.
callAsyncCallbackOnMainThread
{
_
,
_
->
...
...
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/mvp/ui/activity/PrjQueryActivity.java
View file @
f410baeb
...
...
@@ -211,7 +211,7 @@ public class PrjQueryActivity extends BaseActivity<PrjQueryPresenter> implements
private
void
organizeData
(
int
position
,
List
<
PrjBean
.
DataBean
.
Bean
>
prjData
)
{
if
(
prjData
.
get
(
position
).
getParentId
()
==
0
)
{
//是主食品,判斷有沒有子食品,如果沒有子食品,直接打印主食品
if
(
position
+
1
>
prjData
.
size
())
{
if
(
position
+
1
>
=
prjData
.
size
())
{
//沒有子食品
//直接打印
List
<
PrjBean
.
DataBean
.
Bean
>
printDatas
=
new
ArrayList
<>();
...
...
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/ui/activity/OrderDetailsActivity.kt
View file @
f410baeb
...
...
@@ -24,6 +24,7 @@ import com.gingersoft.gsa.cloud.common.core.restaurant.RestaurantInfoManager
import
com.gingersoft.gsa.cloud.common.core.user.UserContext
import
com.gingersoft.gsa.cloud.common.function.FunctionManager
import
com.gingersoft.gsa.cloud.common.ui.utils.BtnBuilder
import
com.gingersoft.gsa.cloud.common.utils.ClipboardUtils
import
com.gingersoft.gsa.cloud.common.utils.MoneyUtil
import
com.gingersoft.gsa.cloud.common.utils.other.TextUtil
import
com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils
...
...
@@ -110,6 +111,11 @@ 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
)
{
...
...
component-delivery-pick/src/main/java/com/gingersoft/gsa/delivery_pick_mode/ui/fragment/HistoryFragment.kt
View file @
f410baeb
...
...
@@ -48,9 +48,6 @@ class HistoryFragment : BaseFragment(R.layout.fragment_other_order) {
//顯示彈窗
context
?.
let
{
context
->
var
reasonDesc
=
it
.
reasonDesc
if
(
reasonDesc
==
null
)
{
reasonDesc
=
""
}
OtherOrderUtils
.
showOrderDetailsDialog
(
context
,
it2
,
it
.
orderStatus
,
it
.
orderType
,
it
.
orderPayType
,
it
.
payType
,
it
.
status
,
reasonDesc
,
true
)
{
_
,
_
,
_
->
//重印
showLoading
()
...
...
component-delivery-pick/src/main/res/layout/activity_order_details.xml
View file @
f410baeb
...
...
@@ -113,7 +113,7 @@
<include
layout=
"@layout/include_horizontal_color_eee_dividing_line"
/>
<!-- 訂單編號-->
<TextView
<
com.qmuiteam.qmui.alpha.QMUIAlpha
TextView
android:id=
"@+id/tv_order_no"
style=
"@style/otherOrder_details_twelve_text_Style"
android:layout_width=
"wrap_content"
...
...
component-main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/NewMainActivity.java
View file @
f410baeb
...
...
@@ -401,7 +401,7 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
LoganManager
.
w_home
(
TAG
,
LoganManager
.
EVENT_CLICK
+
name
);
switch
(
name
)
{
switch
(
name
.
trim
()
)
{
case
"餐檯模式"
:
CC
.
obtainBuilder
(
ComponentName
.
COMPONENT_TABLE
)
.
setActionName
(
"showTableActivity"
)
...
...
component-main/src/main/res/layout/main_home_management_funcation_item.xml
View file @
f410baeb
...
...
@@ -18,7 +18,6 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:maxLength=
"4"
android:layout_marginTop=
"@dimen/dp_8"
android:text=
"餐檯模式"
android:singleLine=
"true"
...
...
component-pay/src/main/java/com/gingersoft/gsa/cloud/pay/mvp/ui/activity/PayResultActivity.java
View file @
f410baeb
...
...
@@ -377,7 +377,7 @@ public class PayResultActivity extends BaseFragmentActivity<PayResultPresenter>
.
setActionName
(
"printActivity"
)
.
addParam
(
PrintConstans
.
PRINT_TYPE
,
PrintConstans
.
PRINT_BILL
)
.
addParam
(
PrintConstans
.
PRINT_CONTENT
,
printContent
)
.
addParam
(
PrintConstans
.
PRINT_ORDER_NO
,
mMealPayResultParam
.
getMealOrderPayRequest
().
getOrderId
(
))
.
addParam
(
PrintConstans
.
PRINT_ORDER_NO
,
String
.
valueOf
(
mMealPayResultParam
.
getMealOrderPayRequest
().
getOrderId
()
))
.
build
()
.
callAsyncCallbackOnMainThread
((
cc
,
result
)
->
{
Log
.
e
(
"error"
,
"是否成功打印:"
+
result
.
isSuccess
());
...
...
component-print/src/main/java/com/joe/print/mvp/print/EpsonPrint.java
View file @
f410baeb
...
...
@@ -46,8 +46,8 @@ public class EpsonPrint implements ReceiveListener {
try
{
this
.
resultListener
=
resultListener
;
this
.
receiveListener
=
receiveListener
;
//第一個參數是機型,第二個參數是語言,
mPrinter
=
new
Printer
(
Printer
.
TM_U220
,
Printer
.
MODEL_
KORE
AN
,
context
);
//第一個參數是機型,第二個參數是語言,
因為是打印圖片,語言沒有影響
mPrinter
=
new
Printer
(
Printer
.
TM_U220
,
Printer
.
MODEL_
TAIW
AN
,
context
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
...
...
@@ -166,12 +166,12 @@ public class EpsonPrint implements ReceiveListener {
public
void
putPrintString
(
String
ip
,
int
paperWidth
,
List
<
PrintInfoBean
>
printInfoBeans
,
PrintExecutor
.
OnPrintResultListener
printResultListener
)
{
if
(
mPrinter
==
null
)
{
printResultListener
.
onResult
(
0
,
null
);
printResultListener
.
onResult
(
0
);
return
;
}
connectByIp
(
ip
,
mPrinter
.
getStatus
());
if
(
mPrinter
==
null
)
{
printResultListener
.
onResult
(
0
,
null
);
printResultListener
.
onResult
(
0
);
return
;
}
mPrinter
.
clearCommandBuffer
();
...
...
@@ -196,7 +196,7 @@ public class EpsonPrint implements ReceiveListener {
mPrinter
.
sendData
(
Printer
.
PARAM_DEFAULT
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
printResultListener
.
onResult
(
0
,
null
);
printResultListener
.
onResult
(
0
);
mPrinter
.
clearCommandBuffer
();
}
}
...
...
@@ -290,7 +290,6 @@ public class EpsonPrint implements ReceiveListener {
mPrinter
.
sendData
(
Printer
.
PARAM_DEFAULT
);
}
catch
(
Exception
e
)
{
updatePrintState
(
PrintSocketHolder
.
ERROR_4
);
mPrinter
.
clearCommandBuffer
();
disconnectPrinter
();
isPrint
=
false
;
...
...
@@ -358,7 +357,7 @@ public class EpsonPrint implements ReceiveListener {
private
void
updatePrintState
(
int
code
){
if
(
resultListener
!=
null
){
resultListener
.
onResult
(
code
,
null
);
resultListener
.
onResult
(
code
);
}
}
...
...
component-print/src/main/java/com/joe/print/mvp/print/IpPrintMaker.java
View file @
f410baeb
...
...
@@ -17,10 +17,14 @@ public class IpPrintMaker implements PrintDataMaker {
private
int
width
;
// 打印的圖片寬度,紙張寬度
private
List
<
Bitmap
>
bitmaps
;
private
String
ip
;
private
int
port
;
public
IpPrintMaker
(
int
width
,
List
<
Bitmap
>
bitmaps
)
{
public
IpPrintMaker
(
int
width
,
List
<
Bitmap
>
bitmaps
,
String
ip
,
int
port
)
{
this
.
width
=
width
;
this
.
bitmaps
=
bitmaps
;
this
.
ip
=
ip
;
this
.
port
=
port
;
}
@Override
...
...
@@ -39,11 +43,12 @@ public class IpPrintMaker implements PrintDataMaker {
data
.
add
(
printer
.
getDataAndReset
());
}
data
.
add
(
printer
.
getDataAndClose
());
for
(
int
i
=
0
;
i
<
bitmaps
.
size
();
i
++){
for
(
int
i
=
0
;
i
<
bitmaps
.
size
();
i
++)
{
bitmaps
.
get
(
i
).
recycle
();
}
return
data
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
new
ArrayList
<>();
}
}
...
...
@@ -52,4 +57,15 @@ public class IpPrintMaker implements PrintDataMaker {
public
String
getPrjIds
()
{
return
null
;
}
@Override
public
String
getIp
()
{
return
ip
;
}
@Override
public
int
getPort
()
{
return
port
;
}
}
component-print/src/main/java/com/joe/print/mvp/print/OpenCashBoxMaker.java
View file @
f410baeb
...
...
@@ -13,6 +13,14 @@ import java.util.List;
*/
public
class
OpenCashBoxMaker
implements
PrintDataMaker
{
private
String
ip
;
private
int
port
;
public
OpenCashBoxMaker
(
String
ip
,
int
port
)
{
this
.
ip
=
ip
;
this
.
port
=
port
;
}
@Override
public
List
<
byte
[]>
getPrintData
()
{
ArrayList
<
byte
[]>
data
=
new
ArrayList
<>();
...
...
@@ -31,4 +39,14 @@ public class OpenCashBoxMaker implements PrintDataMaker {
public
String
getPrjIds
()
{
return
null
;
}
@Override
public
String
getIp
()
{
return
ip
;
}
@Override
public
int
getPort
()
{
return
port
;
}
}
component-print/src/main/java/com/joe/print/mvp/print/PrintBill.java
View file @
f410baeb
...
...
@@ -4,6 +4,7 @@ import android.content.Context;
import
android.graphics.Bitmap
;
import
android.text.TextUtils
;
import
android.widget.LinearLayout
;
import
com.gingersoft.gsa.cloud.common.constans.AppConstans
;
import
com.gingersoft.gsa.cloud.common.constans.ExpandConstant
;
import
com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails
;
...
...
@@ -12,6 +13,7 @@ import com.gingersoft.gsa.cloud.common.core.restaurant.utils.RestaurantExpandInf
import
com.gingersoft.gsa.cloud.common.core.table.TableBean
;
import
com.gingersoft.gsa.cloud.common.utils.other.TextUtil
;
import
com.gingersoft.gsa.cloud.common.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.order.billItem.BillItem
;
import
com.gingersoft.gsa.cloud.order.cart.ShoppingCart
;
...
...
@@ -51,7 +53,8 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
public
Map
<
String
,
List
<
Bitmap
>>
getPrintBitmap
(
Context
mContext
,
PrinterDeviceBean
deviceBean
)
{
Map
<
String
,
List
<
Bitmap
>>
bitmapMaps
=
new
HashMap
<>();
List
<
Bitmap
>
bitmaps
=
new
ArrayList
<>();
bitmaps
.
add
(
getBitmap
(
mContext
,
deviceBean
));
Bitmap
bitmap
=
getBitmap
(
mContext
,
deviceBean
);
bitmaps
.
add
(
bitmap
);
bitmapMaps
.
put
(
""
,
bitmaps
);
return
bitmapMaps
;
}
...
...
@@ -208,7 +211,7 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
layout
.
addView
(
getLine
(
mContext
));
//食品信息
layout
.
addView
(
getDiningFoodList
(
mContext
,
mPrintBillContent
.
getFoodItemList
(),
deviceBean
,
1
,
true
));
layout
.
addView
(
getDiningFoodList
(
mContext
,
mPrintBillContent
.
getFoodItemList
(),
deviceBean
,
1
,
true
));
layout
.
addView
(
getHalfLine
(
mContext
));
//訂單金額信息
...
...
@@ -235,7 +238,7 @@ public class PrintBill extends PrinterRoot<PrintBillContent> {
layout
.
addView
(
getTableMealMemberIntegerView
(
mContext
,
getOrderMemberInfo
(),
mPrintBillContent
.
getIntegralQrCode
()));
return
zoomBitmap
(
deviceBean
,
viewToBitmap
(
mContext
,
layout
)
);
return
viewToZoomBitmap
(
mContext
,
layout
,
deviceBean
);
}
...
...
component-print/src/main/java/com/joe/print/mvp/print/PrintServe.java
View file @
f410baeb
...
...
@@ -6,8 +6,10 @@ import android.view.Gravity;
import
android.widget.LinearLayout
;
import
com.gingersoft.gsa.cloud.common.core.table.TableBean
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.common.utils.other.TextUtil
;
import
com.gingersoft.gsa.cloud.common.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.order.commodity.OrderDetail
;
import
com.gingersoft.gsa.cloud.order.order.DoshokuOrder
;
...
...
@@ -31,6 +33,7 @@ import static com.joe.print.mvp.print.common.HtmlContract.LABLE_DIV;
public
class
PrintServe
extends
PrinterRoot
<
PrintServingPaperContent
>
{
private
PrintServingPaperContent
mPrintServingPaperContent
;
private
final
String
TAG
=
getClass
().
getSimpleName
();
@Override
protected
void
setPrintContent
(
PrintServingPaperContent
printContent
)
{
...
...
@@ -41,7 +44,11 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
public
Map
<
String
,
List
<
Bitmap
>>
getPrintBitmap
(
Context
mContext
,
PrinterDeviceBean
printerDeviceBean
)
{
Map
<
String
,
List
<
Bitmap
>>
bitmapMaps
=
new
HashMap
<>();
List
<
Bitmap
>
bitmaps
=
new
ArrayList
<>();
bitmaps
.
add
(
getBitmap
(
mContext
,
printerDeviceBean
));
Bitmap
bitmap
=
getBitmap
(
mContext
,
printerDeviceBean
);
if
(
bitmap
==
null
)
{
return
null
;
}
bitmaps
.
add
(
bitmap
);
bitmapMaps
.
put
(
""
,
bitmaps
);
return
bitmapMaps
;
}
...
...
@@ -135,6 +142,7 @@ public class PrintServe extends PrinterRoot<PrintServingPaperContent> {
List
<
PrintFoodItem
>
foodItemList
=
mPrintServingPaperContent
.
getFoodItemList
();
if
(
foodItemList
==
null
||
foodItemList
.
size
()
<=
0
)
{
LoganManager
.
w_printer
(
TAG
,
"生成打印數據失敗,上菜紙沒有食品"
);
return
null
;
}
...
...
component-print/src/main/java/com/joe/print/mvp/print/PrintSlip.java
View file @
f410baeb
...
...
@@ -4,12 +4,15 @@ import android.content.Context;
import
android.graphics.Bitmap
;
import
android.view.Gravity
;
import
android.widget.LinearLayout
;
import
com.gingersoft.gsa.cloud.common.constans.AppConstans
;
import
com.gingersoft.gsa.cloud.common.constans.ExpandConstant
;
import
com.gingersoft.gsa.cloud.common.core.restaurant.utils.RestaurantExpandInfoUtils
;
import
com.gingersoft.gsa.cloud.common.core.table.TableBean
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.common.utils.other.TextUtil
;
import
com.gingersoft.gsa.cloud.common.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.order.billItem.BillItem
;
import
com.gingersoft.gsa.cloud.order.cart.ShoppingCart
;
...
...
@@ -22,6 +25,7 @@ import com.joe.print.R;
import
com.joe.print.mvp.model.bean.BillingBean
;
import
com.joe.print.mvp.model.bean.HtmlLable
;
import
com.joe.print.mvp.print.common.HtmlContract
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -37,6 +41,7 @@ import static com.joe.print.mvp.print.common.HtmlContract.LABLE_P;
public
class
PrintSlip
extends
PrinterRoot
<
PrintSlipContent
>
{
private
PrintSlipContent
mPrintSlipContent
;
private
final
String
TAG
=
getClass
().
getSimpleName
();
@Override
protected
void
setPrintContent
(
PrintSlipContent
printContent
)
{
...
...
@@ -47,8 +52,13 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
public
Map
<
String
,
List
<
Bitmap
>>
getPrintBitmap
(
Context
mContext
,
PrinterDeviceBean
deviceBean
)
{
Map
<
String
,
List
<
Bitmap
>>
bitmapMaps
=
new
HashMap
<>();
List
<
Bitmap
>
bitmaps
=
new
ArrayList
<>();
bitmaps
.
add
(
getBitmap
(
mContext
,
deviceBean
));
bitmapMaps
.
put
(
""
,
bitmaps
);
Bitmap
bitmap
=
getBitmap
(
mContext
,
deviceBean
);
if
(
bitmap
!=
null
)
{
bitmaps
.
add
(
getBitmap
(
mContext
,
deviceBean
));
bitmapMaps
.
put
(
""
,
bitmaps
);
}
else
{
return
null
;
}
//這裡可能還需要加上廚房單的內容,有未送單的食品時。
// PrintKitchen kitchen = new PrintKitchen();
// Map<String, List<Bitmap>> bitmapMaps = new HashMap<>(kitchen.getPrintBitmap(mContext, deviceBean));
...
...
@@ -69,7 +79,7 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
List
<
PrintFoodItem
>
foodList
=
mPrintSlipContent
.
getFoodItemList
();
if
(
foodList
.
size
()
==
0
)
{
if
(
foodList
.
size
()
==
0
)
{
return
new
String
[]{
"<html><body></body></html>"
};
}
...
...
@@ -175,6 +185,7 @@ public class PrintSlip extends PrinterRoot<PrintSlipContent> {
List
<
PrintFoodItem
>
foodList
=
mPrintSlipContent
.
getFoodItemList
();
if
(
foodList
==
null
||
foodList
.
size
()
<=
0
)
{
LoganManager
.
w_printer
(
TAG
,
"生成打印數據失敗,印單沒有食品"
);
return
null
;
}
...
...
component-print/src/main/java/com/joe/print/mvp/print/PrinterRoot.java
View file @
f410baeb
...
...
@@ -275,7 +275,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
if
(
isSuccess
)
{
listener
.
printSuccess
();
}
else
{
listener
.
printFailure
(
"打印失敗"
);
listener
.
printFailure
(
"
sunmi
打印失敗"
);
}
}
...
...
@@ -323,42 +323,41 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
}
public
void
ipDevicePrint
(
PrinterDeviceBean
printerDeviceBean
,
List
<
Bitmap
>
bitmaps
)
{
ipDevicePrint
(
printerDeviceBean
,
bitmaps
,
this
,
this
);
}
private
EpsonPrint
mPrinter
;
private
PrintExecutor
executor
;
/**
* ip設備打印
*/
private
void
ipDevicePrint
(
PrinterDeviceBean
printerDeviceBean
,
List
<
Bitmap
>
bitmaps
,
PrintSocketHolder
.
OnStateChangedListener
stateChangedListener
,
PrintExecutor
.
OnPrintResultListener
resultListener
)
{
public
void
ipDevicePrint
(
PrinterDeviceBean
printerDeviceBean
,
List
<
Bitmap
>
bitmaps
)
{
//獲取打印機機型,如果是EPSON的打印機,調用EPSON的打印方法
if
((
printerDeviceBean
.
getPrinterName
()
!=
null
&&
printerDeviceBean
.
getPrinterName
().
toLowerCase
().
contains
(
"EPSON"
.
toLowerCase
()))
&&
(
printerDeviceBean
.
getModel
()
!=
null
&&
printerDeviceBean
.
getModel
().
toLowerCase
().
contains
(
"TM-U220B"
.
toLowerCase
())))
{
ThreadPoolManager
.
getInstence
().
putExecutableTasks
(()
->
{
mPrinter
=
EpsonPrint
.
getInstance
();
mPrinter
.
setPrint
(
false
);
mPrinter
.
initializeObject
(
GsaCloudApplication
.
getAppContext
(),
PrinterRoot
.
this
,
PrinterRoot
.
this
);
for
(
int
j
=
0
;
j
<
bitmaps
.
size
();
j
++)
{
mPrinter
.
putPrintData
(
printerDeviceBean
.
getIp
(),
bitmaps
.
get
(
j
));
}
}
);
}
else
{
if
(
executor
==
null
)
{
executor
=
new
PrintExecutor
(
printerDeviceBean
);
executor
.
setOnStateChangedListener
(
stateChangedListener
);
executor
.
setOnPrintResultListener
(
resultListener
);
}
else
{
executor
.
setPrinterDeviceBean
(
printerDeviceBean
);
if
((
printerDeviceBean
.
getPrinterName
()
!=
null
&&
printerDeviceBean
.
getPrinterName
().
toLowerCase
().
contains
(
"EPSON"
.
toLowerCase
())))
{
if
(
printerDeviceBean
.
getModel
()
!=
null
)
{
if
(
printerDeviceBean
.
getModel
().
toLowerCase
().
contains
(
"TM-U220B"
.
toLowerCase
()))
{
ThreadPoolManager
.
getInstence
().
putExecutableTasks
(()
->
{
EpsonPrint
mPrinter
=
EpsonPrint
.
getInstance
();
mPrinter
.
setPrint
(
false
);
mPrinter
.
initializeObject
(
GsaCloudApplication
.
getAppContext
(),
PrinterRoot
.
this
,
PrinterRoot
.
this
);
for
(
int
j
=
0
;
j
<
bitmaps
.
size
();
j
++)
{
mPrinter
.
putPrintData
(
printerDeviceBean
.
getIp
(),
bitmaps
.
get
(
j
));
}
}
);
return
;
}
}
IpPrintMaker
maker
=
new
IpPrintMaker
(
480
,
bitmaps
);
executor
.
doPrinterRequestAsync
(
maker
);
}
ipPrint
(
printerDeviceBean
,
bitmaps
,
this
,
this
);
}
private
void
ipPrint
(
PrinterDeviceBean
printerDeviceBean
,
List
<
Bitmap
>
bitmaps
,
PrintSocketHolder
.
OnStateChangedListener
stateChangedListener
,
PrintExecutor
.
OnPrintResultListener
resultListener
)
{
if
(
executor
==
null
)
{
executor
=
new
PrintExecutor
()
.
setOnStateChangedListener
(
stateChangedListener
)
.
setOnPrintResultListener
(
resultListener
);
}
IpPrintMaker
maker
=
new
IpPrintMaker
(
480
,
bitmaps
,
printerDeviceBean
.
getIp
(),
printerDeviceBean
.
getPort
());
executor
.
doPrinterRequestAsync
(
maker
);
}
public
void
usbPrint
(
Context
context
,
List
<
Bitmap
>
bitmaps
)
{
...
...
@@ -408,31 +407,23 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
printerFinder
.
startFinder
();
}
public
void
transmitPrjToPc
(
PrinterDeviceBean
defaultPrint
)
{
}
/**
* view轉bitmap
*
* @param context
* @param view
* @return
* view轉為縮放後的bitmap
*/
final
Bitmap
viewToBitmap
(
Context
context
,
View
view
)
{
LayoutToBitmapUtils
.
layoutView
(
context
,
view
);
//先测量view
//轉為bitmap
return
LayoutToBitmapUtils
.
loadBitmapFromView
(
view
);
}
final
Bitmap
viewToZoomBitmap
(
Context
context
,
View
view
,
PrinterDeviceBean
printerDeviceBean
)
{
LayoutToBitmapUtils
.
layoutView
(
context
,
view
);
//先测量view
//轉為bitmap
return
zoomBitmap
(
printerDeviceBean
,
LayoutToBitmapUtils
.
loadBitmapFromView
(
view
));
}
public
Bitmap
zoomBitmap
(
PrinterDeviceBean
printerDeviceBean
,
Bitmap
bitmap
)
{
/**
* 縮放bitmap
*
* @param printerDeviceBean
* @param bitmap
* @return
*/
private
Bitmap
zoomBitmap
(
PrinterDeviceBean
printerDeviceBean
,
Bitmap
bitmap
)
{
int
printWidth
;
if
(
printerDeviceBean
!=
null
&&
printerDeviceBean
.
getPaperSpecification
()
!=
null
)
{
printWidth
=
Double
.
valueOf
(
printerDeviceBean
.
getPaperSpecification
()).
intValue
();
...
...
@@ -444,10 +435,10 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
@Override
public
void
onResult
(
int
errorCode
,
PrinterDeviceBean
printerDeviceBean
)
{
public
void
onResult
(
int
errorCode
)
{
switch
(
errorCode
)
{
case
PrintSocketHolder
.
ERROR_0
:
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintSuccess
(
printerDeviceBean
);
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintSuccess
();
printSuccess
();
return
;
case
PrintSocketHolder
.
ERROR_1
:
...
...
@@ -477,7 +468,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
LoganManager
.
w_printer
(
TAG
,
"打印失败"
);
break
;
}
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
errorCode
,
printerDeviceBean
);
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
errorCode
);
setPrintState
(
errorCode
);
}
...
...
@@ -494,7 +485,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
}
@Override
public
void
onStateChanged
(
int
state
,
PrinterDeviceBean
printerDeviceBean
)
{
public
void
onStateChanged
(
int
state
)
{
setPrintState
(
state
);
}
...
...
@@ -832,6 +823,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
/**
* 獲取食品列表
* 結賬單、印單。外送都用這個
*
* @param mContext
* @param foodList 食品信息
* @param deviceBean 打印設備
...
...
@@ -854,6 +846,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
/**
* 結賬單和印單
*
* @param mContext
* @param billingBeans
* @return
...
...
@@ -865,6 +858,7 @@ public abstract class PrinterRoot<T extends PrintContent> implements PrintSocket
/**
* 結賬單,支付方式
*
* @param mContext
* @param payBillMoneys 支付方式數據
* @return
...
...
component-print/src/main/java/com/joe/print/mvp/print/TestPrintMaker.java
View file @
f410baeb
...
...
@@ -22,19 +22,14 @@ public class TestPrintMaker implements PrintDataMaker {
private
List
<
PrintInfoBean
>
printInfoBeans
;
private
Bitmap
bitmap
;
public
TestPrintMaker
(
PrinterWriter
printer
,
List
<
PrintInfoBean
>
printInfoBeans
)
{
private
String
ip
;
private
int
port
;
public
TestPrintMaker
(
PrinterWriter
printer
,
List
<
PrintInfoBean
>
printInfoBeans
,
String
ip
,
int
port
)
{
this
.
printer
=
printer
;
this
.
printInfoBeans
=
printInfoBeans
;
}
public
TestPrintMaker
(
List
<
PrintInfoBean
>
printInfoBeans
)
{
this
.
printInfoBeans
=
printInfoBeans
;
}
public
TestPrintMaker
(
PrinterWriter
printer
)
{
this
.
printer
=
printer
;
}
public
TestPrintMaker
(
Bitmap
bitmap
)
{
this
.
bitmap
=
bitmap
;
this
.
ip
=
ip
;
this
.
port
=
port
;
}
@Override
...
...
@@ -71,6 +66,16 @@ public class TestPrintMaker implements PrintDataMaker {
return
null
;
}
@Override
public
String
getIp
()
{
return
ip
;
}
@Override
public
int
getPort
()
{
return
port
;
}
private
void
print
(
PrintInfoBean
printInfoBean
,
int
i
)
throws
IOException
{
// if (i == 0) {
// location = 0;
...
...
component-print/src/main/java/com/joe/print/mvp/print/maker/PrjPrintMaker.java
View file @
f410baeb
...
...
@@ -17,11 +17,16 @@ import java.util.Map;
public
class
PrjPrintMaker
implements
PrintDataMaker
{
private
Map
<
String
,
Bitmap
>
bitmapMap
;
private
String
ip
;
private
int
port
;
public
PrjPrintMaker
(
Map
<
String
,
Bitmap
>
bitmapMap
)
{
public
PrjPrintMaker
(
Map
<
String
,
Bitmap
>
bitmapMap
,
String
ip
,
int
port
)
{
this
.
bitmapMap
=
bitmapMap
;
this
.
ip
=
ip
;
this
.
port
=
port
;
}
@Override
public
List
<
byte
[]>
getPrintData
()
{
ArrayList
<
byte
[]>
data
=
new
ArrayList
<>();
...
...
@@ -48,4 +53,14 @@ public class PrjPrintMaker implements PrintDataMaker {
}
return
""
;
}
@Override
public
String
getIp
()
{
return
ip
;
}
@Override
public
int
getPort
()
{
return
port
;
}
}
component-print/src/main/java/com/joe/print/mvp/print/service/PrjService.java
View file @
f410baeb
...
...
@@ -16,6 +16,7 @@ import com.epson.epos2.Epos2Exception;
import
com.epson.epos2.printer.Printer
;
import
com.epson.epos2.printer.PrinterStatusInfo
;
import
com.epson.epos2.printer.ReceiveListener
;
import
com.gingersoft.gsa.cloud.app.GsaCloudApplication
;
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
;
...
...
@@ -41,7 +42,10 @@ import com.gingersoft.gsa.cloud.print.bean.UpdateBean;
import
com.hyweb.n5.lib.constant.PrinterConstant
;
import
com.hyweb.n5.lib.util.PrinterUtil
;
import
com.hyweb.n5.server.aidl.IOnPrintCallback
;
import
com.joe.print.mvp.print.EpsonPrint
;
import
com.joe.print.mvp.print.IpPrintMaker
;
import
com.joe.print.mvp.print.PrintPrjKitchen
;
import
com.joe.print.mvp.print.PrinterRoot
;
import
com.joe.print.mvp.print.common.PrinterFinderCallback
;
import
com.joe.print.mvp.print.common.SendResultCode
;
import
com.joe.print.mvp.print.maker.PrjPrintMaker
;
...
...
@@ -114,6 +118,11 @@ public class PrjService extends Service implements ReceiveListener {
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
printerFinder
.
unregisterReceiver
();
PrintSocketHolder
.
getInstance
().
closeSocket
();
//關閉針式連接
EpsonPrint
.
getInstance
().
disconnectPrinter
();
EpsonPrint
.
getInstance
().
finalizeObject
();
LoganManager
.
w_printer
(
TAG
,
"onDestroy"
);
}
...
...
@@ -160,6 +169,10 @@ public class PrjService extends Service implements ReceiveListener {
pollDisposable
=
RxJavaUtils
.
polling
(
10
,
30
,
TimeUnit
.
SECONDS
)
.
subscribe
(
aLong
->
{
LoganManager
.
w_printer
(
TAG
,
"獲取Prj數據-->"
);
//輪詢時,關閉打印機連接,避免一直佔用打印機socket連接
EpsonPrint
.
getInstance
().
disconnectPrinter
();
EpsonPrint
.
getInstance
().
finalizeObject
();
//獲取prj數據
getPrjInfo
();
});
}
...
...
@@ -215,8 +228,9 @@ public class PrjService extends Service implements ReceiveListener {
private
int
totalPrj
;
private
int
currentIndex
;
private
String
prjJson
=
""
;
private
void
newPrint
(
String
json
)
{
// json = prjJson;
Map
<
String
,
List
<
PrjBean
.
DataBean
.
Bean
>>
listMap
=
new
HashMap
<>();
currentIndex
=
0
;
totalPrj
=
0
;
...
...
@@ -503,88 +517,61 @@ public class PrjService extends Service implements ReceiveListener {
hookPrinterBitmap
(
bitmapMaps
,
beans
);
EpsIds
=
getPrintIds
(
bitmapMaps
);
//第一個參數是機型,第二個參數是語言,
Printer
mPrinter
=
null
;
try
{
mPrinter
=
new
Printer
(
Printer
.
TM_U220
,
Printer
.
MODEL_KOREAN
,
this
);
mPrinter
.
setReceiveEventListener
(
this
);
}
catch
(
Epos2Exception
e
)
{
e
.
printStackTrace
();
updatePrjFailure
(
getPrintIds
(
bitmapMaps
));
}
if
(
mPrinter
!=
null
)
{
try
{
mPrinter
.
clearCommandBuffer
();
for
(
int
i
=
0
;
i
<
bitmapMaps
.
size
();
i
++)
{
for
(
Map
.
Entry
<
String
,
Bitmap
>
mapEntry
:
bitmapMaps
.
get
(
i
).
entrySet
())
{
mPrinter
.
addImage
(
mapEntry
.
getValue
(),
0
,
0
,
mapEntry
.
getValue
().
getWidth
(),
mapEntry
.
getValue
().
getHeight
(),
Printer
.
COLOR_1
,
Printer
.
MODE_MONO_HIGH_DENSITY
,
//高密度
Printer
.
HALFTONE_DITHER
,
//半色調抖動
Printer
.
PARAM_DEFAULT
,
Printer
.
COMPRESS_NONE
);
//壓縮
mPrinter
.
addCut
(
Printer
.
CUT_FEED
);
}
}
}
catch
(
Epos2Exception
e
)
{
e
.
printStackTrace
();
updatePrjFailure
(
getPrintIds
(
bitmapMaps
));
mPrinter
.
clearCommandBuffer
();
}
try
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionBefore
(
"針式打印機"
,
printerDeviceBean
.
getIp
(),
printerDeviceBean
.
getPort
(),
0
,
0
);
mPrinter
.
connect
(
"TCP:"
+
printerDeviceBean
.
getIp
(),
Printer
.
PARAM_DEFAULT
);
mPrinter
.
sendData
(
Printer
.
PARAM_DEFAULT
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
updatePrjFailure
(
getPrintIds
(
bitmapMaps
));
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionError
(
e
);
while
(
true
)
{
try
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
disconnect
();
mPrinter
.
disconnect
();
break
;
}
catch
(
final
Exception
ex
)
{
if
(
ex
instanceof
Epos2Exception
)
{
//Note: If printer is processing such as printing and so on, the disconnect API returns ERR_PROCESSING.
if
(((
Epos2Exception
)
ex
).
getErrorStatus
()
==
Epos2Exception
.
ERR_PROCESSING
)
{
}
else
{
break
;
}
}
else
{
break
;
}
}
EpsonPrint
mPrinter
=
EpsonPrint
.
getInstance
();
mPrinter
.
setPrint
(
false
);
boolean
initResult
=
EpsonPrint
.
getInstance
().
initializeObject
(
this
,
this
,
new
PrintExecutor
.
OnPrintResultListener
()
{
@Override
public
void
onResult
(
int
errorCode
)
{
switch
(
errorCode
)
{
case
PrintSocketHolder
.
ERROR_1
:
LoganManager
.
w_printer
(
TAG
,
"針式創建打印數據失敗"
);
break
;
case
PrintSocketHolder
.
ERROR_2
:
LoganManager
.
w_printer
(
TAG
,
"針式沒紙或未連接"
);
break
;
case
PrintSocketHolder
.
ERROR_4
:
LoganManager
.
w_printer
(
TAG
,
"針式發送打印數據失敗"
);
break
;
default
:
break
;
}
mPrinter
.
clearCommandBuffer
();
mPrinter
.
setReceiveEventListener
(
null
);
updatePrjFailure
(
EpsIds
);
}
}
else
{
});
if
(!
initResult
)
{
updatePrjFailure
(
EpsIds
);
return
;
}
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionBefore
(
"針式打印機"
,
printerDeviceBean
.
getIp
(),
printerDeviceBean
.
getPort
(),
0
,
0
);
for
(
int
i
=
0
;
i
<
bitmapMaps
.
size
();
i
++)
{
for
(
Map
.
Entry
<
String
,
Bitmap
>
mapEntry
:
bitmapMaps
.
get
(
i
).
entrySet
())
{
mPrinter
.
putPrintData
(
printerDeviceBean
.
getIp
(),
mapEntry
.
getValue
());
}
}
}
PrintExecutor
executor
;
/**
* ip設備打印
*/
public
void
ipPrint
(
PrinterDeviceBean
printerDeviceBean
,
List
<
Map
<
String
,
Bitmap
>>
bitmapMaps
)
{
for
(
int
i
=
0
;
i
<
bitmapMaps
.
size
();
i
++)
{
PrintExecutor
executor
=
new
PrintExecutor
(
printerDeviceBean
);
executor
.
setOnPrjPrintResultListener
((
errorCode
,
ids
)
->
{
switch
(
errorCode
)
{
case
PrintSocketHolder
.
ERROR_0
:
//更新狀態
updatePrjSuccess
(
ids
);
break
;
case
PrintSocketHolder
.
ERROR_2
:
updatePrjFailure
(
ids
);
break
;
}
});
PrjPrintMaker
maker
=
new
PrjPrintMaker
(
bitmapMaps
.
get
(
i
));
if
(
executor
==
null
)
{
executor
=
new
PrintExecutor
().
setOnPrjPrintResultListener
((
errorCode
,
ids
)
->
{
switch
(
errorCode
)
{
case
PrintSocketHolder
.
ERROR_0
:
//更新狀態
updatePrjSuccess
(
ids
);
break
;
case
PrintSocketHolder
.
ERROR_2
:
updatePrjFailure
(
ids
);
break
;
}
});
}
PrjPrintMaker
maker
=
new
PrjPrintMaker
(
bitmapMaps
.
get
(
i
),
printerDeviceBean
.
getIp
(),
printerDeviceBean
.
getPort
());
executor
.
doPrinterRequestAsync
(
maker
);
}
}
...
...
@@ -599,10 +586,10 @@ public class PrjService extends Service implements ReceiveListener {
UsbPrint
usbPrint
=
new
UsbPrint
(
mContext
,
(
code
,
printId
)
->
{
//打印結果
if
(
code
==
SendResultCode
.
SEND_SUCCESS
)
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintSuccess
(
null
);
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintSuccess
();
updatePrjSuccess
(
key
);
}
else
if
(
code
==
SendResultCode
.
SEND_FAILED
)
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
code
,
null
);
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
code
);
updatePrjFailure
(
key
);
}
});
...
...
@@ -647,6 +634,12 @@ public class PrjService extends Service implements ReceiveListener {
}
}
/**
* 獲取本次打印的prj id
*
* @param bitmapMaps
* @return
*/
private
String
getPrintIds
(
List
<
Map
<
String
,
Bitmap
>>
bitmapMaps
)
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
bitmapMaps
.
size
();
i
++)
{
...
...
@@ -880,11 +873,11 @@ public class PrjService extends Service implements ReceiveListener {
public
void
onPtrReceive
(
Printer
printer
,
int
i
,
PrinterStatusInfo
printerStatusInfo
,
String
s
)
{
//針式打印回調
if
(
i
==
0
)
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintSuccess
(
null
);
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintSuccess
();
//打印成功
updatePrjSuccess
(
EpsIds
);
}
else
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
i
,
null
);
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrintError
(
i
);
//打印失敗
updatePrjFailure
(
EpsIds
);
}
...
...
component-print/src/main/java/com/joe/print/mvp/ui/activity/PrintActivity.java
View file @
f410baeb
...
...
@@ -14,6 +14,7 @@ import android.view.View;
import
android.view.Window
;
import
android.view.WindowManager
;
import
android.widget.LinearLayout
;
import
android.widget.PopupWindow
;
import
android.widget.TextView
;
import
androidx.annotation.NonNull
;
...
...
@@ -25,11 +26,14 @@ import androidx.recyclerview.widget.RecyclerView;
import
com.billy.cc.core.component.CC
;
import
com.billy.cc.core.component.CCResult
;
import
com.billy.cc.core.component.CCUtil
;
import
com.chad.library.adapter.base.BaseQuickAdapter
;
import
com.chad.library.adapter.base.listener.OnItemClickListener
;
import
com.gingersoft.gsa.cloud.app.GsaCloudApplication
;
import
com.gingersoft.gsa.cloud.common.constans.PrintConstans
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins
;
import
com.gingersoft.gsa.cloud.common.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.print.NewPrintExecutor
;
import
com.gingersoft.gsa.cloud.print.PrintExecutor
;
import
com.gingersoft.gsa.cloud.print.PrintSocketHolder
;
import
com.gingersoft.gsa.cloud.print.bean.PrintContent
;
...
...
@@ -47,6 +51,7 @@ import com.joe.print.R;
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.OpenCashBoxMaker
;
import
com.joe.print.mvp.print.PrintInstruction
;
import
com.joe.print.mvp.print.PrintListener
;
...
...
@@ -55,8 +60,17 @@ import com.joe.print.mvp.print.PrinterRoot;
import
com.joe.print.mvp.print.utils.MyPrintUtils
;
import
com.joe.print.mvp.ui.adapter.DialogPrinterListAdapter
;
import
com.joe.print.mvp.ui.adapter.PrintProgressAdapter
;
import
com.joe.print.mvp.ui.view.SelectPrintDevicePopup
;
import
com.lxj.xpopup.XPopup
;
import
com.lxj.xpopup.core.CenterPopupView
;
import
com.lxj.xpopup.enums.PopupAnimation
;
import
com.lxj.xpopup.impl.LoadingPopupView
;
import
com.xuexiang.rxutil2.rxjava.RxJavaUtils
;
import
com.xuexiang.rxutil2.rxjava.task.RxAsyncTask
;
import
com.xuexiang.rxutil2.rxjava.task.RxUITask
;
import
com.yanzhenjie.recyclerview.widget.DefaultItemDecoration
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -93,7 +107,6 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
public
class
PrintActivity
extends
BaseActivity
<
PrintPresenter
>
implements
PrintContract
.
View
,
DialogInterface
.
OnDismissListener
,
PrintListener
,
PrintSocketHolder
.
OnStateChangedListener
,
PrintExecutor
.
OnPrintResultListener
{
public
final
static
int
ADD_PRINT_CODE
=
1001
;
//添加打印機回調
public
final
static
int
DIMISS_LOADING
=
1002
;
//關閉加載窗
public
final
static
int
FINISH
=
1003
;
//關閉頁面
public
final
static
int
ADD_PRINT_DEVICE
=
1004
;
//添加打印機
public
final
static
int
LACK_OF_PAPER
=
1005
;
//缺紙
...
...
@@ -103,9 +116,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
private
String
callId
;
private
PrinterRoot
printerInIt
;
private
Dialog
mLoadingDialog
;
private
TextView
mTvLoadingTip
;
/**
* 0:上菜紙
* 1:印單
...
...
@@ -117,8 +127,10 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
*/
private
int
type
;
private
String
mOrderNo
;
//是否顯示打印等待彈窗
private
boolean
isShowDialog
;
/**
* 打印進度
*/
private
LoadingPopupView
loadingPopup
;
@Override
public
void
setupActivityComponent
(
@NonNull
AppComponent
appComponent
)
{
...
...
@@ -134,169 +146,182 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
public
int
initView
(
@Nullable
Bundle
savedInstanceState
)
{
getWindow
().
addFlags
(
WindowManager
.
LayoutParams
.
FLAG_NOT_TOUCHABLE
|
WindowManager
.
LayoutParams
.
FLAG_WATCH_OUTSIDE_TOUCH
);
return
0
;
//R.layout.print_bitmap
如果你不需要框架帮你设置 setContentView(id) 需要 自行设置,请返回 0
return
0
;
//R.layout.print_bitmap;
如果你不需要框架帮你设置 setContentView(id) 需要 自行设置,请返回 0
}
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
loadingPopup
=
new
XPopup
.
Builder
(
mContext
)
.
popupAnimation
(
PopupAnimation
.
ScaleAlphaFromCenter
)
.
asLoading
(
"加载中..."
);
loadingPopup
.
show
();
callId
=
CCUtil
.
getNavigateCallId
(
this
);
//獲取打印類型,根據打印類型生成對應的bitmap
type
=
CCUtil
.
getNavigateParam
(
this
,
PrintConstans
.
PRINT_TYPE
,
PrintConstans
.
PRINT_TEST
);
//獲取打印內容
PrintContent
printContent
=
CCUtil
.
getNavigateParam
(
this
,
PrintConstans
.
PRINT_CONTENT
,
null
);
//訂單編號
mOrderNo
=
CCUtil
.
getNavigateParam
(
this
,
PrintConstans
.
PRINT_ORDER_NO
,
""
);
isShowDialog
=
CCUtil
.
getNavigateParam
(
this
,
PrintConstans
.
PRINT_LOADING
,
true
);
//根據打印類型獲取對應的執行類
printerInIt
=
PrinterRoot
.
getPrinterByType
(
type
,
printContent
);
if
(
printerInIt
!=
null
)
{
printerInIt
.
setPrintListener
(
this
);
}
//初始化打印配置
initPrintConfig
(
printContent
);
}
private
int
selectPrint
=
-
1
;
/**
* 如果沒有默認打印機,彈窗彈出讓用戶選擇打印機
*/
private
PrinterDeviceBean
defaultPrint
;
private
void
initPrintConfig
(
PrintContent
printContent
)
{
PrintCurrencyBean
printCurrencyBean
;
PrinterDeviceBean
defaultPrint
;
//獲取通用打印配置,不同的打印
if
(
type
==
PRINT_OTHER_ORDER
||
type
==
PRINT_OTHER_CLOSING
)
{
//外賣的通用打印配置
printCurrencyBean
=
mPresenter
.
getPrintCurrencyBeanByType
(
this
,
PRINT_BILL
);
}
// else if (type == 0 || type == 1 || type == 2) {
// //堂食的通用打印配置
// printCurrencyBean = mPresenter.getPrintCurrencyBeanByType(this, 1);
// }
else
{
printCurrencyBean
=
mPresenter
.
getPrintCurrencyBeanByType
(
this
,
PRINT_SLIP
);
}
//獲取通用打印配置
PrintCurrencyBean
printCurrencyBean
=
getCurrencyConfig
();
//獲取打印機列表
printerDeviceBeans
=
mPresenter
.
getAllPrintList
(
this
);
if
(
type
==
PrintConstans
.
PRINT_TEST
)
{
//如果是打印測試
//如果是打印測試
,就取由頁面傳遞過來的打印機信息
defaultPrint
=
CCUtil
.
getNavigateParam
(
this
,
"deviceBean"
,
null
);
}
else
{
// 獲取默認打印機,如果用戶沒有配置默認打印機,就取最近使用的一個.
// 如果沒有最近使用的打印機,並且當前餐廳只有一台打印機,就用這一台打印機打印
defaultPrint
=
mPresenter
.
getDefaultPrintInList
(
printerDeviceBeans
,
(
String
)
SPUtils
.
get
(
"defaultPrint"
,
""
));
}
//生成餐檯打印的一些信息
PrinterPlugins
.
getOnPrinterFlowHandler
().
onPrinterDataBefore
(
type
,
type
,
GsonUtils
.
GsonString
(
printContent
),
GsonUtils
.
GsonString
(
defaultPrint
));
//廚房單
//
如果是打印
廚房單
if
(
type
==
PrintConstans
.
PRINT_KITCHEN
)
{
List
<
PrjBean
.
DataBean
.
Bean
>
printDatas
=
CCUtil
.
getNavigateParam
(
this
,
"prjBeans"
,
null
);
Map
<
String
,
List
<
PrjBean
.
DataBean
.
Bean
>>
prjMap
=
PrintPrjKitchen
.
getPrjMap
();
String
printLocation
=
null
;
for
(
PrjBean
.
DataBean
.
Bean
prjBean
:
printDatas
)
{
if
(
printLocation
==
null
)
{
if
(
TextUtil
.
isNotEmptyOrNullOrUndefined
(
prjBean
.
getPrintPosition
()))
{
printLocation
=
prjBean
.
getPrintPosition
();
defaultPrint
=
mPresenter
.
getPrinterDeviceBeanByName
(
printerDeviceBeans
,
printLocation
);
if
(
defaultPrint
==
null
)
{
printFailure
(
"未找到對應的打印機"
);
return
;
}
}
else
{
if
(
defaultPrint
==
null
)
{
printLocation
=
""
;
}
else
{
printLocation
=
defaultPrint
.
getName
();
}
}
}
prjBean
.
setPrintPosition
(
printLocation
);
prjBean
.
setCurrentIndex
(
1
);
}
prjMap
.
put
(
""
,
printDatas
);
//設置廚房單的信息,並且獲取到這個廚房單的打印位置
defaultPrint
=
setKitChenPrj
(
defaultPrint
);
}
//如果沒有打印機
if
(
defaultPrint
==
null
)
{
//沒有默認打印機,查看當前餐廳有沒有打印機
//如果當前餐廳有打印機,彈出彈窗讓用戶選擇一個打印機打印
if
(
printerDeviceBeans
!=
null
&&
printerDeviceBeans
.
size
()
>
0
)
{
PrintCurrencyBean
finalPrintCurrencyBean
=
printCurrencyBean
;
new
DialogUtils
(
mContext
,
R
.
layout
.
print_dialog_internet_list
)
{
@Override
public
void
initLayout
(
ViewHepler
hepler
,
Dialog
dialog
)
{
RecyclerView
mRvPrintList
=
hepler
.
getView
(
R
.
id
.
rv_print_list
);
DialogPrinterListAdapter
printListAdapter
=
new
DialogPrinterListAdapter
(
printerDeviceBeans
,
mContext
);
mRvPrintList
.
setLayoutManager
(
new
LinearLayoutManager
(
mContext
));
//分割线
mRvPrintList
.
addItemDecoration
(
new
DefaultItemDecoration
(
ContextCompat
.
getColor
(
mContext
,
R
.
color
.
line_color
)));
mRvPrintList
.
setAdapter
(
printListAdapter
);
printListAdapter
.
setOnItemClickListener
((
adapter
,
view
,
position
)
->
{
//用戶選擇的ip打印機打印
PrinterDeviceBean
defaultPrint
=
MyPrintUtils
.
configPrinterProperties
(
finalPrintCurrencyBean
,
printerDeviceBeans
.
get
(
position
));
printByDevice
(
defaultPrint
);
selectPrint
=
position
;
SPUtils
.
put
(
"defaultPrint"
,
printerDeviceBeans
.
get
(
position
).
getName
());
dialog
.
dismiss
();
});
SelectPrintDevicePopup
selectPrintDevicePopup
=
new
SelectPrintDevicePopup
(
mContext
,
printerDeviceBeans
);
selectPrintDevicePopup
.
setOnItemClickListener
((
adapter
,
view
,
position
)
->
{
//用戶選擇的ip打印機打印
//將打印機和通用配置合併
selectPrintDevicePopup
.
dismiss
();
this
.
defaultPrint
=
MyPrintUtils
.
configPrinterProperties
(
printCurrencyBean
,
printerDeviceBeans
.
get
(
position
));
printByDevice
(
this
.
defaultPrint
);
SPUtils
.
put
(
"defaultPrint"
,
printerDeviceBeans
.
get
(
position
).
getName
());
}).
setOnDismissListener
(()
->
{
//如果彈窗已經關閉,打印機還是為空,說明用戶沒有選擇打印機
if
(
this
.
defaultPrint
==
null
)
{
printFailure
(
"沒有找到打印機,無法打印"
);
finish
();
}
}
.
setHeight
(
ArmsUtils
.
getScreenHeidth
(
mContext
)
/
2
)
.
setWidth
((
int
)
(
ArmsUtils
.
getScreenWidth
(
mContext
)
*
0.8
))
.
setOnDismissListener
(
dialog
->
{
if
(
selectPrint
==
-
1
)
{
printFailure
(
"未選擇打印機"
);
}
})
.
show
();
});
new
XPopup
.
Builder
(
mContext
).
asCustom
(
selectPrintDevicePopup
).
show
();
}
else
{
//沒有打印機
ToastUtils
.
show
(
mContext
,
"沒有打印機,請先添加打印機"
);
}
}
else
{
//將打印機和通用配置合併
defaultPrint
=
MyPrintUtils
.
configPrinterProperties
(
printCurrencyBean
,
defaultPrint
);
printByDevice
(
defaultPrint
);
}
}
/**
* 設置廚房單打印數據
*
* @param defaultPrint 默認打印機
* @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
printLocation
=
null
;
for
(
PrjBean
.
DataBean
.
Bean
prjBean
:
printDatas
)
{
if
(
printLocation
==
null
)
{
if
(
TextUtil
.
isNotEmptyOrNullOrUndefined
(
prjBean
.
getPrintPosition
()))
{
printLocation
=
prjBean
.
getPrintPosition
();
return
mPresenter
.
getPrinterDeviceBeanByName
(
printerDeviceBeans
,
printLocation
);
}
else
{
if
(
defaultPrint
==
null
)
{
printLocation
=
""
;
}
else
{
printLocation
=
defaultPrint
.
getName
();
}
}
}
prjBean
.
setPrintPosition
(
printLocation
);
prjBean
.
setCurrentIndex
(
1
);
}
prjMap
.
put
(
""
,
printDatas
);
return
null
;
}
//打印邏輯,獲取對應的打印配置--打印機或是通用配置
//根據配置生成配置好的圖片----生成圖片邏輯:把打印的單分為幾個模塊,再由不同的單拼接出對應的單,(如果是針式,生成對應的文字)
//再獲取打印方式(IP、本機、USB、藍牙或其他的),調用打印
/**
* 獲取通用打印配置
*/
private
PrintCurrencyBean
getCurrencyConfig
()
{
PrintCurrencyBean
printCurrencyBean
;
if
(
type
==
PRINT_OTHER_ORDER
||
type
==
PRINT_OTHER_CLOSING
)
{
//外賣的通用打印配置
printCurrencyBean
=
mPresenter
.
getPrintCurrencyBeanByType
(
this
,
PRINT_BILL
);
}
// else if (type == 0 || type == 1 || type == 2) {
// //堂食的通用打印配置
// printCurrencyBean = mPresenter.getPrintCurrencyBeanByType(this, 1);
// }
else
{
printCurrencyBean
=
mPresenter
.
getPrintCurrencyBeanByType
(
this
,
PRINT_SLIP
);
}
return
printCurrencyBean
;
}
/**
* 打印邏輯,獲取對應的打印配置--打印機或是通用配置
* 根據配置生成配置好的圖片----生成圖片邏輯:把打印的單分為幾個模塊,再由不同的單拼接出對應的單,(如果是針式,生成對應的文字)
* 再獲取打印方式(IP、本機、USB、藍牙或其他的),調用打印
*
* @param defaultPrint 打印機
*/
private
void
printByDevice
(
PrinterDeviceBean
defaultPrint
)
{
//獲取對應的打印類
if
(
printerInIt
instanceof
PrintInstruction
)
{
//開錢箱
PrintExecutor
executor
=
new
PrintExecutor
(
defaultPrint
);
executor
.
doPrinterRequestAsync
(
new
OpenCashBoxMaker
());
PrintExecutor
executor
=
new
PrintExecutor
();
executor
.
doPrinterRequestAsync
(
new
OpenCashBoxMaker
(
defaultPrint
.
getIp
(),
defaultPrint
.
getPort
()
));
CC
.
sendCCResult
(
callId
,
CCResult
.
success
());
}
else
{
if
(
isShowDialog
)
{
initDialog
();
}
Map
<
String
,
List
<
Bitmap
>>
listMap
;
List
<
Bitmap
>
zoomBitmaps
=
null
;
String
[]
BBPosPrintDatas
=
null
;
if
(
defaultPrint
.
getPrinterDeviceType
()
==
PrinterDeviceBean
.
PRINT_LOCAL
&&
PrintConstans
.
PRINT_MODEL_WISEPOS
.
contains
(
Build
.
MODEL
))
{
//本機打印並且是BBPOS
//獲取打印數據
BBPosPrintDatas
=
printerInIt
.
getPrintDatas
(
mContext
,
defaultPrint
);
if
(
BBPosPrintDatas
==
null
)
{
printFailure
(
"暫不支持打印此單"
);
return
;
}
}
else
{
//獲取打印圖片
listMap
=
printerInIt
.
getPrintBitmapByCount
(
mContext
,
defaultPrint
);
if
(
listMap
!=
null
)
{
zoomBitmaps
=
listMap
.
get
(
""
);
}
else
{
printFailure
(
"
暫不支持打印此單
"
);
printFailure
(
"
打印失敗,生成打印數據失敗
"
);
return
;
}
if
(
zoomBitmaps
!=
null
&&
zoomBitmaps
.
size
()
>
0
)
{
}
else
{
if
(
zoomBitmaps
==
null
)
{
//打印失敗
printFailure
(
"打印失敗,生成打印數據失敗"
);
}
else
{
//保存打印圖片到本地
setPrinterBitmapToLocation
(
type
,
type
,
mOrderNo
,
listMap
);
}
setPrinterBitmapToLocation
(
type
,
type
,
mOrderNo
,
listMap
);
}
//獲得對應的圖片
if
(
defaultPrint
.
getPrinterDeviceType
()
==
PrinterDeviceBean
.
PRINT_IP
)
{
//IP打印
printerInIt
.
ipDevicePrint
(
defaultPrint
,
zoomBitmaps
);
...
...
@@ -306,11 +331,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
else
if
(
defaultPrint
.
getPrinterDeviceType
()
==
PrinterDeviceBean
.
PRINT_USB
)
{
//USB打印打印
printerInIt
.
usbPrint
(
mContext
,
zoomBitmaps
);
}
// else if (defaultPrint.getPrinterDeviceType() == 4) {
// printerInIt.transmitPrjToPc(defaultPrint);
// }
else
{
}
else
{
printFailure
(
"未找到對應的打印類型"
);
}
}
...
...
@@ -326,105 +347,8 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
}
private
Map
<
String
,
List
<
PrjBean
.
DataBean
.
Bean
>>
setPrjIndex
(
Map
<
String
,
List
<
PrjBean
.
DataBean
.
Bean
>>
listMap
,
int
totalPrj
)
{
int
currentIndex
=
0
;
for
(
Map
.
Entry
<
String
,
List
<
PrjBean
.
DataBean
.
Bean
>>
prjMap
:
listMap
.
entrySet
())
{
for
(
PrjBean
.
DataBean
.
Bean
bean
:
prjMap
.
getValue
())
{
bean
.
setTotalPrj
(
totalPrj
);
if
(
bean
.
getStatus
()
==
2
)
{
currentIndex
++;
}
else
{
if
(
currentIndex
==
0
)
{
currentIndex
=
1
;
}
}
bean
.
setCurrentIndex
(
currentIndex
);
}
currentIndex
++;
}
return
listMap
;
}
private
Map
<
String
,
List
<
PrjBean
.
DataBean
.
Bean
>>
printDataToMap
(
List
<
PrjBean
.
DataBean
.
Bean
>
printData
)
{
Map
<
String
,
List
<
PrjBean
.
DataBean
.
Bean
>>
map
=
new
HashMap
<>();
PrinterDeviceBean
defaultPainter
=
null
;
//獲得默認的打印機
for
(
PrinterDeviceBean
printerDeviceBean
:
printerDeviceBeans
)
{
if
(
printerDeviceBean
.
getType
()
==
2
)
{
defaultPainter
=
printerDeviceBean
;
break
;
}
}
//將prj集合通過打印位置轉成map
for
(
PrjBean
.
DataBean
.
Bean
bean
:
printData
)
{
if
(
TextUtil
.
isNotEmptyOrNullOrUndefined
(
bean
.
getPrintPosition
()))
{
List
<
PrjBean
.
DataBean
.
Bean
>
mapByKey
=
map
.
get
(
bean
.
getPrintPosition
());
if
(
mapByKey
!=
null
)
{
mapByKey
.
add
(
bean
);
}
else
{
map
.
put
(
bean
.
getPrintPosition
(),
Collections
.
singletonList
(
bean
));
}
}
else
if
(
defaultPainter
!=
null
)
{
//沒有打印位置的,由默認的位置去打印
bean
.
setPrintPosition
(
defaultPainter
.
getName
());
List
<
PrjBean
.
DataBean
.
Bean
>
mapByKey
=
map
.
get
(
bean
.
getPrintPosition
());
if
(
mapByKey
!=
null
)
{
mapByKey
.
add
(
bean
);
}
else
{
map
.
put
(
bean
.
getPrintPosition
(),
Collections
.
singletonList
(
bean
));
}
}
else
{
ToastUtils
.
show
(
this
,
"未配置打印機"
);
}
}
return
map
;
}
private
PrintProgressAdapter
adapter
;
private
void
setPrintProgress
(
int
state
)
{
if
(
adapter
!=
null
)
{
adapter
.
setProgress
(
state
);
}
}
private
void
initDialog
()
{
try
{
// new DialogUtils(this, R.layout.print_layout_print_progress) {
// @Override
// public void initLayout(ViewHepler hepler, Dialog dialog) {
// List<String> stauts = Arrays.asList("生成數據中", "連接打印機", "開始寫入數據", "打印成功");
// adapter = new PrintProgressAdapter(stauts);
// hepler.setAdapter(R.id.rv_print_progress, new LinearLayoutManager(mContext), adapter);
// }
// }.setWidth((int) (DeviceUtils.getScreenWidth(mContext) * 0.8))
// .show();
View
view
=
LayoutInflater
.
from
(
mContext
).
inflate
(
R
.
layout
.
ui_dialog_loading
,
null
);
mTvLoadingTip
=
view
.
findViewById
(
R
.
id
.
tv_loading_dialog_text
);
mLoadingDialog
=
new
Dialog
(
this
,
R
.
style
.
ui_loading_dialog
);
mLoadingDialog
.
setCancelable
(
true
);
mLoadingDialog
.
setCanceledOnTouchOutside
(
false
);
Window
window
=
mLoadingDialog
.
getWindow
();
window
.
setBackgroundDrawable
(
new
ColorDrawable
(
Color
.
TRANSPARENT
));
mLoadingDialog
.
setContentView
(
view
,
new
LinearLayout
.
LayoutParams
(
LinearLayout
.
LayoutParams
.
MATCH_PARENT
,
LinearLayout
.
LayoutParams
.
MATCH_PARENT
));
if
(!
this
.
isFinishing
())
{
mLoadingDialog
.
show
();
setLoadingText
(
"加載中..."
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
private
void
setLoadingText
(
String
tip
)
{
Observable
.
just
(
1
)
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
integer
->
{
if
(
mLoadingDialog
!=
null
&&
mLoadingDialog
.
isShowing
())
{
mTvLoadingTip
.
setText
(
tip
);
}
});
private
void
addPrintProgress
(
String
printState
)
{
loadingPopup
.
setTitle
(
printState
);
}
@Override
...
...
@@ -440,7 +364,6 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
switch
(
state
)
{
case
PrintSocketHolder
.
ERROR_0
:
tip
=
"打印成功"
;
setPrintProgress
(
3
);
break
;
case
PrintSocketHolder
.
ERROR_1
:
tip
=
"生成打印數據失敗"
;
...
...
@@ -456,26 +379,20 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
tip
=
"必要的參數不能為空"
;
break
;
case
PrintSocketHolder
.
STATE_0
:
setPrintProgress
(
0
);
break
;
case
PrintSocketHolder
.
STATE_1
:
tip
=
"開始創建連接"
;
break
;
case
PrintSocketHolder
.
STATE_2
:
tip
=
"創建連接成功,開始發送數據"
;
setPrintProgress
(
1
);
break
;
case
PrintSocketHolder
.
STATE_3
:
tip
=
"開始寫入數據"
;
setPrintProgress
(
2
);
break
;
case
PrintSocketHolder
.
STATE_4
:
tip
=
"關閉中"
;
finish
();
break
;
case
DIMISS_LOADING:
disLoadingDialog
();
break
;
case
FINISH:
finish
();
break
;
...
...
@@ -485,10 +402,13 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
case
LACK_OF_PAPER:
//缺紙
printFailure
(
"打印機缺紙"
);
tip
=
"打印機缺紙"
;
break
;
default
:
break
;
}
LoganManager
.
w_printer
(
TAG
,
"printStateChanged state--->"
+
tip
);
setLoadingText
(
tip
);
addPrintProgress
(
tip
);
}
/**
...
...
@@ -497,14 +417,8 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
public
void
printSuccess
()
{
LoganManager
.
w_printer
(
TAG
,
"printFailure 打印成功"
);
// if (printCount <= 1) {
CC
.
sendCCResult
(
callId
,
CCResult
.
success
());
disLoadingDialog
();
finish
();
// finish();
// } else {
// printCount--;
// }
}
@Override
...
...
@@ -515,11 +429,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
}
else
{
CC
.
sendCCResult
(
callId
,
CCResult
.
error
(
"print error"
));
}
// if (printCount <= 1) {
finish
();
// } else {
// printCount--;
// }
}
@Override
...
...
@@ -612,28 +522,23 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
disLoadingDialog
();
}
private
void
disLoadingDialog
()
{
Observable
.
just
(
1
)
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
integer
->
{
if
(
mLoadingDialog
!=
null
)
{
mLoadingDialog
.
dismiss
();
mLoadingDialog
=
null
;
}
});
loadingPopup
.
dismiss
();
//關閉打印頁面時,關閉所有打印連接
//關閉ip打印連接
PrintSocketHolder
.
getInstance
().
closeSocket
();
//關閉針式打印連接
EpsonPrint
.
getInstance
().
disconnectPrinter
();
EpsonPrint
.
getInstance
().
finalizeObject
();
}
@Override
public
void
onStateChanged
(
int
state
,
PrinterDeviceBean
printerDeviceBean
)
{
public
void
onStateChanged
(
int
state
)
{
//ip打印狀態修改回調
}
@Override
public
void
onResult
(
int
errorCode
,
PrinterDeviceBean
printerDeviceBean
)
{
public
void
onResult
(
int
errorCode
)
{
//ip打印結果回調
}
...
...
component-print/src/main/java/com/joe/print/mvp/ui/activity/PrintTestActivity.java
View file @
f410baeb
...
...
@@ -259,14 +259,14 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
}
@Override
public
void
onResult
(
int
errorCode
,
PrinterDeviceBean
printerDeviceBean
)
{
public
void
onResult
(
int
errorCode
)
{
if
(
errorCode
==
0
)
{
ToastUtils
.
show
(
PrintTestActivity
.
this
,
"打印失败"
);
}
}
@Override
public
void
onStateChanged
(
int
state
,
PrinterDeviceBean
printerDeviceBean
)
{
public
void
onStateChanged
(
int
state
)
{
}
...
...
component-print/src/main/java/com/joe/print/mvp/ui/adapter/PrintProgressAdapter.java
View file @
f410baeb
package
com
.
joe
.
print
.
mvp
.
ui
.
adapter
;
import
android.content.Context
;
import
androidx.core.content.ContextCompat
;
import
com.chad.library.adapter.base.BaseQuickAdapter
;
import
com.chad.library.adapter.base.viewholder.BaseViewHolder
;
import
com.joe.print.R
;
...
...
@@ -9,36 +13,31 @@ import org.jetbrains.annotations.Nullable;
import
java.util.List
;
/**
* 打印進度
*/
public
class
PrintProgressAdapter
extends
BaseQuickAdapter
<
String
,
BaseViewHolder
>
{
private
int
progress
=
0
;
private
int
completeColor
;
private
int
inProgressColor
;
public
PrintProgressAdapter
(
@Nullable
List
<
String
>
data
)
{
public
PrintProgressAdapter
(
Context
context
,
@Nullable
List
<
String
>
data
)
{
super
(
R
.
layout
.
print_progress_item
,
data
);
}
public
void
setProgress
(
int
progress
)
{
this
.
progress
=
progress
;
super
.
notifyDataSetChanged
();
completeColor
=
ContextCompat
.
getColor
(
context
,
R
.
color
.
order_state0_color
);
inProgressColor
=
ContextCompat
.
getColor
(
context
,
R
.
color
.
theme_333_color
);
}
@Override
protected
void
convert
(
@NotNull
BaseViewHolder
baseViewHolder
,
String
s
)
{
baseViewHolder
.
setText
(
R
.
id
.
tv_print_progressbar
,
s
);
if
(
progress
>
baseViewHolder
.
getAdapterPosition
()
)
{
if
(
baseViewHolder
.
getAdapterPosition
()
==
getItemCount
()
-
1
)
{
baseViewHolder
.
setGone
(
R
.
id
.
pb_print_progressbar
,
true
);
baseViewHolder
.
setTextColor
(
R
.
id
.
tv_print_progressbar
,
R
.
color
.
order_state0_c
olor
);
baseViewHolder
.
setTextColor
(
R
.
id
.
tv_print_progressbar
,
completeC
olor
);
baseViewHolder
.
setGone
(
R
.
id
.
iv_checked
,
false
);
}
else
if
(
progress
==
baseViewHolder
.
getAdapterPosition
())
{
baseViewHolder
.
setGone
(
R
.
id
.
pb_print_progressbar
,
false
);
baseViewHolder
.
setTextColor
(
R
.
id
.
tv_print_progressbar
,
R
.
color
.
theme_333_color
);
baseViewHolder
.
setGone
(
R
.
id
.
iv_checked
,
true
);
}
else
{
baseViewHolder
.
setGone
(
R
.
id
.
pb_print_progressbar
,
tru
e
);
baseViewHolder
.
setTextColor
(
R
.
id
.
tv_print_progressbar
,
R
.
color
.
color_ccc
);
baseViewHolder
.
setGone
(
R
.
id
.
pb_print_progressbar
,
fals
e
);
baseViewHolder
.
setTextColor
(
R
.
id
.
tv_print_progressbar
,
inProgressColor
);
baseViewHolder
.
setGone
(
R
.
id
.
iv_checked
,
true
);
}
}
}
component-print/src/main/java/com/joe/print/mvp/ui/view/PrintProgressPopup.java
0 → 100644
View file @
f410baeb
package
com
.
joe
.
print
.
mvp
.
ui
.
view
;
import
android.content.Context
;
import
androidx.annotation.NonNull
;
import
com.lxj.xpopup.impl.LoadingPopupView
;
/**
* @author 宇航.
* User: admin
* Date: 2021/2/5
* Time: 18:31
* Use:
*/
public
class
PrintProgressPopup
extends
LoadingPopupView
{
/**
* @param context
* @param bindLayoutId layoutId 如果要显示标题,则要求必须有id为tv_title的TextView,否则无任何要求
*/
public
PrintProgressPopup
(
@NonNull
Context
context
,
int
bindLayoutId
)
{
super
(
context
,
bindLayoutId
);
}
}
component-print/src/main/java/com/joe/print/mvp/ui/view/SelectPrintDevicePopup.java
0 → 100644
View file @
f410baeb
package
com
.
joe
.
print
.
mvp
.
ui
.
view
;
import
android.content.Context
;
import
android.widget.PopupMenu
;
import
android.widget.PopupWindow
;
import
androidx.annotation.NonNull
;
import
androidx.core.content.ContextCompat
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.chad.library.adapter.base.listener.OnItemClickListener
;
import
com.gingersoft.gsa.cloud.common.utils.other.SPUtils
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.joe.print.R
;
import
com.joe.print.mvp.print.utils.MyPrintUtils
;
import
com.joe.print.mvp.ui.adapter.DialogPrinterListAdapter
;
import
com.lxj.xpopup.core.CenterPopupView
;
import
com.lxj.xpopup.impl.CenterListPopupView
;
import
com.yanzhenjie.recyclerview.widget.DefaultItemDecoration
;
import
java.util.List
;
/**
* @author 宇航.
* User: admin
* Date: 2021/2/5
* Time: 16:59
* Use:選擇打印彈窗
*/
public
class
SelectPrintDevicePopup
extends
CenterPopupView
{
private
List
<
PrinterDeviceBean
>
printerDeviceBeans
;
private
OnItemClickListener
mOnItemClickListener
;
private
PopupWindow
.
OnDismissListener
onDismissListener
;
public
SelectPrintDevicePopup
(
@NonNull
Context
context
,
List
<
PrinterDeviceBean
>
printerDeviceBeans
)
{
super
(
context
);
this
.
printerDeviceBeans
=
printerDeviceBeans
;
}
@Override
protected
int
getPopupLayoutId
()
{
return
R
.
layout
.
print_dialog_internet_list
;
}
@Override
protected
void
initPopupContent
()
{
RecyclerView
mRvPrintList
=
findViewById
(
R
.
id
.
rv_print_list
);
DialogPrinterListAdapter
printListAdapter
=
new
DialogPrinterListAdapter
(
printerDeviceBeans
,
getContext
());
mRvPrintList
.
addItemDecoration
(
new
DefaultItemDecoration
(
ContextCompat
.
getColor
(
getContext
(),
R
.
color
.
line_color
)));
mRvPrintList
.
setAdapter
(
printListAdapter
);
printListAdapter
.
setOnItemClickListener
(
mOnItemClickListener
);
}
public
SelectPrintDevicePopup
setOnItemClickListener
(
OnItemClickListener
mOnItemClickListener
)
{
this
.
mOnItemClickListener
=
mOnItemClickListener
;
return
this
;
}
public
SelectPrintDevicePopup
setOnDismissListener
(
PopupWindow
.
OnDismissListener
onDismissListener
)
{
this
.
onDismissListener
=
onDismissListener
;
return
this
;
}
@Override
protected
void
onDismiss
()
{
super
.
onDismiss
();
if
(
onDismissListener
!=
null
)
onDismissListener
.
onDismiss
();
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
}
}
component-print/src/main/res/layout/print_bitmap.xml
View file @
f410baeb
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView
xmlns:android=
"http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/alpha_70_black"
android:orientation=
"vertical"
>
<
Image
View
android:id=
"@+id/
iv_bitmap
"
<
androidx.recyclerview.widget.Recycler
View
android:id=
"@+id/
rv_print_progress
"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:scrollbars=
"vertical"
android:scaleType=
"fitXY"
/>
</androidx.core.widget.NestedScrollView>
\ No newline at end of file
android:layout_height=
"match_parent"
android:layout_gravity=
"center"
android:orientation=
"vertical"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
/>
</FrameLayout>
\ No newline at end of file
component-print/src/main/res/layout/print_dialog_internet_list.xml
View file @
f410baeb
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/shape_white_eight_corners_bg"
android:gravity=
"center"
android:orientation=
"vertical"
android:padding=
"@dimen/dp_10"
>
android:layout_height=
"match_parent"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_print_list"
<FrameLayout
android:layout_gravity=
"center"
android:id=
"@+id/centerPopupContainer"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_30"
android:layout_marginRight=
"@dimen/dp_30"
android:background=
"@drawable/shape_white_eight_corners_bg"
android:orientation=
"vertical"
>
</LinearLayout>
\ No newline at end of file
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_print_list"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"center"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
/>
</FrameLayout>
</FrameLayout>
component-print/src/main/res/layout/print_progress_item.xml
View file @
f410baeb
...
...
@@ -3,15 +3,16 @@
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_20"
android:layout_marginBottom=
"@dimen/dp_20"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
android:paddingLeft=
"@dimen/dp_10"
android:paddingTop=
"@dimen/dp_10"
android:paddingRight=
"@dimen/dp_10"
>
<TextView
android:id=
"@+id/tv_print_progressbar"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginRight=
"@dimen/dp_
10
"
android:layout_marginRight=
"@dimen/dp_
5
"
android:textColor=
"@color/theme_333_color"
android:textSize=
"@dimen/dp_16"
tools:text=
"狀態:"
/>
...
...
component-print/src/main/res/layout/printer_dialog_item.xml
View file @
f410baeb
...
...
@@ -3,6 +3,9 @@
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:clickable=
"true"
android:focusable=
"true"
android:foreground=
"?attr/selectableItemBackground"
android:orientation=
"vertical"
android:paddingTop=
"@dimen/dp_10"
android:paddingBottom=
"@dimen/dp_10"
>
...
...
@@ -36,13 +39,13 @@
<TextView
android:id=
"@+id/tv_printer_port"
android:layout_width=
"wrap_content"
android:visibility=
"gone"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_10"
android:singleLine=
"true"
android:text=
"端口號:"
android:textColor=
"@color/normal_color"
android:textSize=
"@dimen/dp_14"
android:visibility=
"gone"
app:layout_constraintHorizontal_weight=
"0.5"
app:layout_constraintLeft_toRightOf=
"@id/tv_printer_ip"
app:layout_constraintRight_toRightOf=
"parent"
...
...
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/presenter/NewSupplierPresenter.java
View file @
f410baeb
...
...
@@ -295,6 +295,8 @@ public class NewSupplierPresenter extends BasePresenter<NewSupplierContract.Mode
public
void
onNext
(
@NonNull
BaseResult
info
)
{
if
(
info
!=
null
)
{
if
(
info
.
isSuccess
())
{
//供應商信息修改後,將購物車食品信息刪除掉,不然食品信息中的採購金額和地址不對
SupplyShoppingCart
.
getInstance
().
removeFoodsBySupplier
(
supplierBean
.
getId
());
mRootView
.
saveSuccess
();
}
else
if
(
TextUtil
.
isNotEmptyOrNullOrUndefined
(
info
.
getErrMsg
()))
{
mRootView
.
showMessage
(
info
.
getErrMsg
());
...
...
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/presenter/WarehousingInventoryPresenter.java
View file @
f410baeb
...
...
@@ -102,10 +102,9 @@ public class WarehousingInventoryPresenter extends BasePresenter<WarehousingInve
/**
* 查詢庫存盤點記錄
*/
public
void
getWarehousingRecord
(
int
pageIndex
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>(
4
);
Constant
.
addRestaurantId
(
map
);
Constant
.
addBrandId
(
map
);
public
void
getWarehousingRecord
(
String
foodNo
,
int
pageIndex
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>(
3
);
map
.
put
(
"foodNo"
,
foodNo
);
Constant
.
addPageSize
(
map
);
map
.
put
(
"pageIndex"
,
pageIndex
*
Constant
.
PAGE_SIZE
);
mModel
.
getWarehousingRecord
(
map
)
...
...
@@ -119,8 +118,7 @@ public class WarehousingInventoryPresenter extends BasePresenter<WarehousingInve
@Override
public
void
onNext
(
BaseResult
baseResult
)
{
if
(
baseResult
!=
null
&&
baseResult
.
isSuccess
())
{
//消耗完之後,關閉頁面
mRootView
.
loadRecord
();
}
else
if
(
baseResult
!=
null
&&
TextUtil
.
isNotEmptyOrNullOrUndefined
(
baseResult
.
getErrMsg
()))
{
mRootView
.
showMessage
(
baseResult
.
getErrMsg
());
}
else
{
...
...
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/activity/SupplyChainMainActivity.java
View file @
f410baeb
package
com
.
gingersoft
.
supply_chain
.
mvp
.
ui
.
activity
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.graphics.Rect
;
import
android.os.Bundle
;
import
android.view.MotionEvent
;
import
android.view.View
;
import
android.view.inputmethod.InputMethodManager
;
import
android.widget.EditText
;
import
androidx.annotation.NonNull
;
...
...
@@ -17,9 +20,11 @@ import com.gingersoft.supply_chain.mvp.contract.SupplyChainMainContract;
import
com.gingersoft.supply_chain.mvp.presenter.SupplyChainMainPresenter
;
import
com.gingersoft.supply_chain.mvp.ui.fragment.FunctionListFragment
;
import
com.gingersoft.supply_chain.mvp.utils.HideUtil
;
import
com.gingersoft.supply_chain.mvp.utils.NotDispatchListener
;
import
com.jess.arms.base.BaseFragmentActivity
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
...
...
@@ -49,6 +54,25 @@ public class SupplyChainMainActivity extends BaseFragmentActivity<SupplyChainMai
loadRootFragment
(
R
.
id
.
layout_supply_chain_content
,
FunctionListFragment
.
newInstance
());
}
@Override
public
boolean
dispatchTouchEvent
(
MotionEvent
event
)
{
if
(
getTopFragment
()
instanceof
NotDispatchListener
)
{
return
super
.
dispatchTouchEvent
(
event
);
}
if
(
event
.
getAction
()
==
MotionEvent
.
ACTION_DOWN
)
{
View
v
=
getCurrentFocus
();
if
(
v
instanceof
EditText
)
{
Rect
outRect
=
new
Rect
();
v
.
getGlobalVisibleRect
(
outRect
);
if
(!
outRect
.
contains
((
int
)
event
.
getRawX
(),
(
int
)
event
.
getRawY
()))
{
v
.
clearFocus
();
InputMethodManager
imm
=
(
InputMethodManager
)
getSystemService
(
Context
.
INPUT_METHOD_SERVICE
);
imm
.
hideSoftInputFromWindow
(
v
.
getWindowToken
(),
0
);
}
}
}
return
super
.
dispatchTouchEvent
(
event
);
}
// @Override
// public boolean dispatchTouchEvent(MotionEvent ev) {
// if (getTopFragment() instanceof NotDispatchListener) {
...
...
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/adapter/SendSupplierMsgAdapter.java
View file @
f410baeb
...
...
@@ -13,6 +13,7 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import
com.gingersoft.supply_chain.R
;
import
com.gingersoft.supply_chain.mvp.bean.SendSupplierMsgBean
;
import
com.gingersoft.supply_chain.mvp.bean.SupplierInfoBean
;
import
com.gingersoft.supply_chain.mvp.utils.DoubleClickUtils
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
...
...
@@ -81,6 +82,9 @@ public class SendSupplierMsgAdapter extends BaseQuickAdapter<SendSupplierMsgBean
viewHolder
.
setText
(
R
.
id
.
tv_item_pic_radio_title
,
SupplierInfoBean
.
SupplierContacts
.
getContractTitleByType
(
item
.
getType
()));
viewHolder
.
setImageResource
(
R
.
id
.
iv_item_pic_radio_pic
,
getContractPicByType
(
item
.
getType
()));
radioButton
.
setOnCheckedChangeListener
((
buttonView
,
isChecked
)
->
{
if
(
DoubleClickUtils
.
isFastDoubleClick
())
{
return
;
}
if
(
isChecked
)
{
setSelectIndex
(
viewHolder
.
getAdapterPosition
());
notifyDataSetChanged
();
...
...
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/fragment/food/FoodIngredientsFragment.java
View file @
f410baeb
...
...
@@ -332,7 +332,12 @@ public class FoodIngredientsFragment extends BaseSupplyChainFragment<FoodIngredi
if
(
foodListAdapter
!=
null
)
{
mPresenter
.
getSelectFood
(
foodListAdapter
.
getIntegerMap
());
}
start
(
ShoppingCatFragment
.
newInstance
());
//需要先判斷是否有食品
if
(
SupplyShoppingCart
.
getInstance
().
getCartFoods
().
size
()
>
0
)
{
start
(
ShoppingCatFragment
.
newInstance
());
}
else
{
showMessage
(
"請選擇食品"
);
}
}
else
if
(
viewId
==
R
.
id
.
btn_food_ingredients_cancel
)
{
//取消
killMyself
();
...
...
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/fragment/order/PurchaseListFragment.java
View file @
f410baeb
...
...
@@ -81,7 +81,7 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
ScreenView
screenView
;
@BindView
(
R2
.
id
.
view_load_bg
)
View
loadBg
;
// @BindView(R2.id.ed_food_ingredients_search)
// @BindView(R2.id.ed_food_ingredients_search)
// EditText edSearch;
@BindView
(
R2
.
id
.
srl_purchase_list
)
SmartRefreshLayout
refreshPurchaseList
;
...
...
@@ -166,7 +166,16 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
RelativeLayout
.
LayoutParams
layoutParams
=
new
RelativeLayout
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
WRAP_CONTENT
,
ViewGroup
.
LayoutParams
.
MATCH_PARENT
);
mTopBar
.
addRightView
(
view
,
R
.
id
.
qmui_shopping_cart
,
layoutParams
);
view
.
setOnClickListener
(
v
->
start
(
ShoppingCatFragment
.
newInstance
()));
view
.
setOnClickListener
(
v
->
{
//需要先判斷是否有食品
if
(
SupplyShoppingCart
.
getInstance
().
getCartFoods
().
size
()
>
0
)
{
start
(
ShoppingCatFragment
.
newInstance
());
}
else
{
//跳轉到下單頁面
showMessage
(
"請先選擇食品"
);
startForResult
(
FoodIngredientsFragment
.
newInstance
(
ADD_ORDER
),
REQUEST_ORDER_DETAILS_CODE
);
}
});
}
private
void
initTabAndData
()
{
...
...
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/ui/fragment/warehouse/WarehousingInventoryFragment.java
View file @
f410baeb
...
...
@@ -91,13 +91,13 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
Bundle
arguments
=
getArguments
();
if
(
arguments
!=
null
)
{
//獲取庫存盤點記錄
getWarehousingRecord
();
int
foodId
=
arguments
.
getInt
(
WarehouseDetailsFragment
.
FOOD_ID_KEY
);
//食品編號
foodNo
=
arguments
.
getString
(
WarehouseDetailsFragment
.
FOOD_NO_KEY
);
//食品庫存總數
foodNum
=
arguments
.
getInt
(
WarehouseDetailsFragment
.
FOOD_NUM_KEY
);
//獲取庫存盤點記錄
getWarehousingRecord
();
//加載食品圖片
loadFoodImage
(
arguments
);
//初始化標題
...
...
@@ -111,7 +111,7 @@ public class WarehousingInventoryFragment extends BaseSupplyChainFragment<Wareho
}
private
void
getWarehousingRecord
()
{
mPresenter
.
getWarehousingRecord
(
pageIndex
);
mPresenter
.
getWarehousingRecord
(
foodNo
,
pageIndex
);
}
private
void
initEdit
()
{
...
...
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/utils/DoubleClickUtils.java
0 → 100644
View file @
f410baeb
package
com
.
gingersoft
.
supply_chain
.
mvp
.
utils
;
/**
* @author 宇航.
* User: admin
* Date: 2021/2/6
* Time: 17:21
* Use:
*/
public
class
DoubleClickUtils
{
private
static
long
lastClickTime
=
0
;
public
static
boolean
isFastDoubleClick
()
{
long
nowTime
=
System
.
currentTimeMillis
();
if
(
nowTime
-
lastClickTime
<
500
)
{
//500ms
return
true
;
}
lastClickTime
=
nowTime
;
return
false
;
}
}
component-supply-chain/src/main/java/com/gingersoft/supply_chain/mvp/utils/HideUtil.java
0 → 100644
View file @
f410baeb
/*
* Copyright 2016 yinglan
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com
.
gingersoft
.
supply_chain
.
mvp
.
utils
;
import
android.app.Activity
;
import
android.app.Dialog
;
import
android.content.Context
;
import
android.graphics.Rect
;
import
android.os.IBinder
;
import
android.util.Log
;
import
android.view.MotionEvent
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.inputmethod.InputMethodManager
;
import
android.widget.AbsListView
;
import
android.widget.EditText
;
import
android.widget.ScrollView
;
import
android.widget.TextView
;
import
androidx.recyclerview.widget.RecyclerView
;
/**
* Created by yinglan
*/
public
class
HideUtil
{
/**
* Initialization method
*
* @param activity
*/
public
static
void
init
(
Activity
activity
)
{
new
HideUtil
(
activity
,
null
);
}
/**
* Can pass the outer layout
*
* @param activity
* @param content
*/
public
static
void
init
(
Activity
activity
,
ViewGroup
content
)
{
new
HideUtil
(
activity
,
content
);
}
/**
* Forced hidden keyboard
*
* @param activity
*/
public
static
void
hideSoftKeyboard
(
Activity
activity
)
{
if
(
null
==
activity
)
{
throw
new
RuntimeException
(
"参数错误"
);
}
View
view
=
activity
.
getCurrentFocus
();
if
(
null
!=
view
)
{
InputMethodManager
inputMethodManager
=
(
InputMethodManager
)
activity
.
getSystemService
(
Activity
.
INPUT_METHOD_SERVICE
);
inputMethodManager
.
hideSoftInputFromWindow
(
view
.
getWindowToken
(),
InputMethodManager
.
HIDE_NOT_ALWAYS
);
}
}
/**
* Forced hidden keyboard
*
* @param view
*/
public
static
void
hideSoftKeyboard
(
View
view
)
{
if
(
null
!=
view
)
{
InputMethodManager
inputMethodManager
=
(
InputMethodManager
)
view
.
getContext
().
getSystemService
(
Activity
.
INPUT_METHOD_SERVICE
);
inputMethodManager
.
hideSoftInputFromWindow
(
view
.
getWindowToken
(),
InputMethodManager
.
HIDE_NOT_ALWAYS
);
}
else
{
throw
new
RuntimeException
(
"参数错误"
);
}
}
/**
* Forced hidden keyboard
*
* @param dialog
*/
public
static
void
hideDialogSoftKeyboard
(
Dialog
dialog
)
{
if
(
null
==
dialog
)
{
throw
new
RuntimeException
(
"参数错误"
);
}
View
view
=
dialog
.
getCurrentFocus
();
if
(
null
!=
view
)
{
InputMethodManager
inputMethodManager
=
(
InputMethodManager
)
dialog
.
getContext
().
getSystemService
(
Activity
.
INPUT_METHOD_SERVICE
);
inputMethodManager
.
hideSoftInputFromWindow
(
view
.
getWindowToken
(),
InputMethodManager
.
HIDE_NOT_ALWAYS
);
}
}
/**
* @param activity
*/
private
HideUtil
(
final
Activity
activity
,
ViewGroup
content
)
{
if
(
content
==
null
)
{
content
=
(
ViewGroup
)
activity
.
findViewById
(
android
.
R
.
id
.
content
);
}
getScrollView
(
content
,
activity
);
content
.
setOnTouchListener
(
new
View
.
OnTouchListener
()
{
@Override
public
boolean
onTouch
(
View
view
,
MotionEvent
motionEvent
)
{
Log
.
e
(
"eee"
,
"出賣人"
);
dispatchTouchEvent
(
activity
,
motionEvent
);
return
false
;
}
});
}
private
void
getScrollView
(
ViewGroup
viewGroup
,
final
Activity
activity
)
{
if
(
null
==
viewGroup
)
{
return
;
}
int
count
=
viewGroup
.
getChildCount
();
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
View
view
=
viewGroup
.
getChildAt
(
i
);
if
(
view
instanceof
ScrollView
)
{
ScrollView
newDtv
=
(
ScrollView
)
view
;
newDtv
.
setOnTouchListener
(
new
View
.
OnTouchListener
()
{
@Override
public
boolean
onTouch
(
View
view
,
MotionEvent
motionEvent
)
{
dispatchTouchEvent
(
activity
,
motionEvent
);
return
false
;
}
});
}
else
if
(
view
instanceof
AbsListView
)
{
AbsListView
newDtv
=
(
AbsListView
)
view
;
newDtv
.
setOnTouchListener
(
new
View
.
OnTouchListener
()
{
@Override
public
boolean
onTouch
(
View
view
,
MotionEvent
motionEvent
)
{
dispatchTouchEvent
(
activity
,
motionEvent
);
return
false
;
}
});
}
else
if
(
view
instanceof
RecyclerView
)
{
RecyclerView
newDtv
=
(
RecyclerView
)
view
;
newDtv
.
setOnTouchListener
(
new
View
.
OnTouchListener
()
{
@Override
public
boolean
onTouch
(
View
view
,
MotionEvent
motionEvent
)
{
dispatchTouchEvent
(
activity
,
motionEvent
);
return
false
;
}
});
}
else
if
(
view
instanceof
ViewGroup
)
{
this
.
getScrollView
((
ViewGroup
)
view
,
activity
);
}
if
(
view
.
isClickable
()
&&
view
instanceof
TextView
&&
!(
view
instanceof
EditText
))
{
view
.
setOnTouchListener
(
new
View
.
OnTouchListener
()
{
@Override
public
boolean
onTouch
(
View
view
,
MotionEvent
motionEvent
)
{
dispatchTouchEvent
(
activity
,
motionEvent
);
return
false
;
}
});
}
}
}
/**
* @param mActivity
* @param ev
* @return
*/
public
boolean
dispatchTouchEvent
(
Activity
mActivity
,
MotionEvent
ev
)
{
if
(
ev
.
getAction
()
==
MotionEvent
.
ACTION_DOWN
)
{
View
v
=
mActivity
.
getCurrentFocus
();
if
(
null
!=
v
&&
isShouldHideInput
(
v
,
ev
))
{
hideSoftInput
(
mActivity
,
v
.
getWindowToken
());
}
}
return
false
;
}
/**
* @param v
* @param event
* @return
*/
private
boolean
isShouldHideInput
(
View
v
,
MotionEvent
event
)
{
if
(
v
instanceof
EditText
)
{
Rect
rect
=
new
Rect
();
v
.
getHitRect
(
rect
);
if
(
rect
.
contains
((
int
)
event
.
getX
(),
(
int
)
event
.
getY
()))
{
return
false
;
}
}
return
true
;
}
/**
* @param mActivity
* @param token
*/
private
void
hideSoftInput
(
Activity
mActivity
,
IBinder
token
)
{
if
(
token
!=
null
)
{
InputMethodManager
im
=
(
InputMethodManager
)
mActivity
.
getSystemService
(
Context
.
INPUT_METHOD_SERVICE
);
im
.
hideSoftInputFromWindow
(
token
,
InputMethodManager
.
HIDE_NOT_ALWAYS
);
}
}
}
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/action/table/PrintServingPaperAction.java
View file @
f410baeb
...
...
@@ -135,12 +135,12 @@ public class PrintServingPaperAction extends TableAction {
* 打印上菜紙
*/
private
void
printParper
(
TableBean
.
DataBean
tableBean
)
{
PrintContent
printContent
=
new
PrintContentAdapter
().
adaptationServingPaperContent
(
DoshokuOrder
.
getInstance
(),
tableBean
);
PrintContent
printContent
=
new
PrintContentAdapter
().
adaptationServingPaperContent
(
DoshokuOrder
.
getInstance
(),
tableBean
);
CC
.
obtainBuilder
(
ComponentName
.
COMPONENT_PRINT
)
.
setActionName
(
"printActivity"
)
.
addParam
(
PrintConstans
.
PRINT_TYPE
,
PrintConstans
.
PRINT_SERVE
)
.
addParam
(
PrintConstans
.
PRINT_CONTENT
,
printContent
)
.
addParam
(
PrintConstans
.
PRINT_ORDER_NO
,
tableBean
.
getOrderId
(
))
.
addParam
(
PrintConstans
.
PRINT_CONTENT
,
printContent
)
.
addParam
(
PrintConstans
.
PRINT_ORDER_NO
,
String
.
valueOf
(
tableBean
.
getOrderId
()
))
.
build
()
.
callAsyncCallbackOnMainThread
((
cc
,
result
)
->
{
//清空賬單數據
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/MealStandPresenter.java
View file @
f410baeb
...
...
@@ -848,6 +848,12 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
});
}
/**
* 點餐送單
*
* @param isPrint
* @param afterToActivity
*/
@Override
public
void
addOrderFood
(
boolean
isPrint
,
Class
<?>
afterToActivity
)
{
List
<
OrderDetail
>
foodLists
=
getOrderFoodLists
();
...
...
@@ -894,8 +900,13 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
//合并主食品
mergeMainFoodNumber
(
mOrderMealList
);
}
PrintContent
printContent
=
new
PrintContentAdapter
().
adaptationServingPaperContent
(
DoshokuOrder
.
getInstance
(),
mTableInfo
);
//餐檯送單
if
(
DoshokuOrder
.
getInstance
().
getNewFoodList
()
==
null
||
DoshokuOrder
.
getInstance
().
getNewFoodList
().
size
()
<=
0
)
{
//沒有新的食品時,不打印送單
IActivity
.
returnBeforeActivity
(
initTable
);
return
;
}
PrintContent
printContent
=
new
PrintContentAdapter
().
adaptationSendOrderPaperContent
(
DoshokuOrder
.
getInstance
(),
mTableInfo
);
CC
.
obtainBuilder
(
ComponentName
.
COMPONENT_PRINT
)
.
setActionName
(
"printActivity"
)
...
...
component-table/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/OrderContentPresenter.java
View file @
f410baeb
...
...
@@ -388,8 +388,17 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
//合并主食品
mergeMainFoodNumber
(
mOrderMealList
);
}
PrintContent
printContent
=
new
PrintContentAdapter
().
adaptationServingPaperContent
(
DoshokuOrder
.
getInstance
(),
mTableInfo
);
//賬單內容送單
if
(
DoshokuOrder
.
getInstance
().
getNewFoodList
()
==
null
||
DoshokuOrder
.
getInstance
().
getNewFoodList
().
size
()
<=
0
)
{
//沒有新的食品時,不打印送單
if
(
afterToActivity
==
null
)
{
mRootView
.
sendSuccess
();
mAppManager
.
killActivity
(
MealStandActivity
.
class
);
}
return
;
}
//賬單內容送單
PrintContent
printContent
=
new
PrintContentAdapter
().
adaptationSendOrderPaperContent
(
DoshokuOrder
.
getInstance
(),
mTableInfo
);
CC
.
obtainBuilder
(
ComponentName
.
COMPONENT_PRINT
)
.
setActionName
(
"printActivity"
)
...
...
config.gradle
View file @
f410baeb
...
...
@@ -7,8 +7,8 @@ ext {
targetSdkVersion
:
29
,
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
versionCode
:
2
3
,
versionName
:
"1.2.
3
"
versionCode
:
2
4
,
versionName
:
"1.2.
4
"
]
version
=
[
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/app/GsaCloudApplication.java
View file @
f410baeb
...
...
@@ -358,12 +358,12 @@ public class GsaCloudApplication extends BaseApplication {
}
@Override
public
void
onPrintSuccess
(
PrinterDeviceBean
printerDeviceBean
)
{
public
void
onPrintSuccess
()
{
LoganManager
.
w_printer
(
TAG
,
"打印成功"
);
}
@Override
public
void
onPrintError
(
int
errorCode
,
PrinterDeviceBean
printerDeviceBean
)
{
public
void
onPrintError
(
int
errorCode
)
{
LoganManager
.
w_printer
(
TAG
,
"打印失敗:"
+
errorCode
);
}
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/constans/PrintConstans.java
View file @
f410baeb
...
...
@@ -23,7 +23,6 @@ public class PrintConstans {
public
static
final
String
PRINT_TYPE
=
"print_type"
;
//打印類型
public
static
final
String
PRINT_CONTENT
=
"print_content"
;
//打印內容
public
static
final
String
PRINT_ORDER_NO
=
"print_order_no"
;
//打印ID(唯一标识即可)
public
static
final
String
PRINT_LOADING
=
"is_show_loading"
;
//是否顯示加載框
public
final
static
int
PRINT_TEST
=
-
1
;
//測試頁
public
final
static
int
PRINT_SERVE
=
0
;
//上菜紙
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/logan/LoganManager.java
View file @
f410baeb
...
...
@@ -69,6 +69,8 @@ public class LoganManager {
private
static
final
String
TABLEMODE_BUSINESS_TAG
=
"tableMode-> "
;
private
static
final
String
ORDER_BUSINESS_TAG
=
"order-> "
;
private
static
final
String
PAY_BUSINESS_TAG
=
"pay-> "
;
private
static
final
String
DELIVERY_PICK_TAG
=
"delivery-> "
;
/*******************************交互事件類型**************************************/
public
static
final
String
EVENT_CLICK
=
"點擊->"
;
...
...
@@ -115,6 +117,9 @@ public class LoganManager {
w_business
(
PAY_BUSINESS_TAG
,
TAG
,
eventAndLog
);
}
public
static
void
w_delivery
(
String
TAG
,
String
...
eventAndLog
)
{
w_business
(
DELIVERY_PICK_TAG
,
TAG
,
eventAndLog
);
}
private
static
void
w_business
(
String
BUSINESS_TAG
,
String
TAG
,
String
...
eventAndLog
)
{
if
(
eventAndLog
!=
null
)
{
if
(
eventAndLog
.
length
>
1
)
{
...
...
library-common/src/main/java/com/gingersoft/gsa/cloud/common/printer/plugins/PrinterFlowListener.java
View file @
f410baeb
...
...
@@ -19,7 +19,7 @@ public interface PrinterFlowListener extends ExternalPrinterConnection {
void
onPrinterBitmapBefore
(
int
orderType
,
int
printType
,
String
directoryName
,
List
<
Bitmap
>
bitmaps
);
void
onPrintSuccess
(
PrinterDeviceBean
printerDeviceBean
);
void
onPrintSuccess
();
void
onPrintError
(
int
errorCode
,
PrinterDeviceBean
printerDeviceBean
);
void
onPrintError
(
int
errorCode
);
}
library-print/src/main/java/com/gingersoft/gsa/cloud/print/PrintDataMaker.java
View file @
f410baeb
...
...
@@ -22,4 +22,8 @@ public interface PrintDataMaker {
List
<
byte
[]>
getPrintData
();
String
getPrjIds
();
String
getIp
();
int
getPort
();
}
library-print/src/main/java/com/gingersoft/gsa/cloud/print/PrintExecutor.java
View file @
f410baeb
/*
* Copyright (C) 2015 AlexMofer
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com
.
gingersoft
.
gsa
.
cloud
.
print
;
import
android.bluetooth.BluetoothDevice
;
import
android.os.AsyncTask
;
import
android.util.Log
;
import
com.elvishew.xlog.XLog
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.
gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.
xuexiang.rxutil2.rxjava.RxJavaUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
io.reactivex.disposables.Disposable
;
/**
* 打印执行者
* Created by Alex on 2016/11/10.
*
* @author admin
*/
public
class
PrintExecutor
{
protected
final
String
TAG
=
this
.
getClass
().
getSimpleName
();
private
PrintSocketHolder
holder
;
private
int
mReconnectTimes
=
0
;
private
int
time
=
0
;
/**
* 存儲所有prj的id集合
*/
private
String
prjIds
;
private
PrintSocketHolder
.
OnStateChangedListener
listener
;
private
OnPrintResultListener
mListener
;
private
OnPrjPrintResultListener
onPrjPrintResultListener
;
public
PrintExecutor
(
BluetoothDevice
device
)
{
holder
=
new
PrintSocketHolder
(
device
);
}
public
PrintExecutor
(
PrinterDeviceBean
printerDeviceBean
)
{
holder
=
new
PrintSocketHolder
(
printerDeviceBean
);
}
public
void
setPrinterDeviceBean
(
PrinterDeviceBean
printerDeviceBean
)
{
if
(
holder
!=
null
)
{
holder
.
setPrinterDeviceBean
(
printerDeviceBean
);
}
public
PrintExecutor
()
{
holder
=
PrintSocketHolder
.
getInstance
();
holder
.
closeSocket
();
printDataMakers
=
new
ArrayList
<>();
}
/**
* 执行打印请求
*
* @return 错误代码
* 需要執行的任務隊列
*/
private
int
doRequest
(
PrintDataMaker
maker
)
{
if
(
mReconnectTimes
==
0
)
{
holder
.
onPrinterStateChanged
(
PrintSocketHolder
.
STATE_0
);
List
<
byte
[]>
data
=
maker
.
getPrintData
();
prjIds
=
maker
.
getPrjIds
();
if
(!
holder
.
isSocketPrepared
())
{
int
prepare
=
holder
.
prepareSocket
();
if
(
prepare
!=
PrintSocketHolder
.
ERROR_0
)
{
return
prepare
;
}
}
return
holder
.
sendData
(
data
);
}
else
{
holder
.
onPrinterStateChanged
(
PrintSocketHolder
.
STATE_0
);
List
<
byte
[]>
data
=
maker
.
getPrintData
();
prjIds
=
maker
.
getPrjIds
();
if
(
holder
.
isSocketPrepared
())
{
if
(
sendData
(
data
))
{
return
PrintSocketHolder
.
ERROR_0
;
}
else
{
return
PrintSocketHolder
.
ERROR_100
;
}
}
else
{
if
(
prepareSocket
()
&&
sendData
(
data
))
{
return
PrintSocketHolder
.
ERROR_0
;
}
else
{
return
PrintSocketHolder
.
ERROR_100
;
}
}
}
}
List
<
PrintDataMaker
>
printDataMakers
;
/**
* 执行打印请求
*
* @return 错误代码
* 重啟打印的服務
*/
public
int
doPrinterRequest
(
PrintDataMaker
maker
)
{
holder
.
setOnStateChangedListener
(
listener
);
return
doRequest
(
maker
);
}
private
boolean
prepareSocket
()
{
time
++;
boolean
prepareSocket
=
time
<
mReconnectTimes
&&
(
holder
.
prepareSocket
()
==
PrintSocketHolder
.
ERROR_0
||
prepareSocket
());
return
prepareSocket
;
}
private
boolean
sendData
(
List
<
byte
[]>
data
)
{
if
(
holder
.
sendData
(
data
)
==
PrintSocketHolder
.
ERROR_0
)
{
time
=
0
;
return
true
;
}
else
{
return
prepareSocket
()
&&
sendData
(
data
);
}
}
private
Disposable
resetPrintDis
;
/**
* 异步执行打印请求
*/
public
void
doPrinterRequestAsync
(
PrintDataMaker
maker
)
{
new
PrintTask
().
execute
(
maker
);
}
/**
* 销毁
*/
public
int
closeSocket
()
{
return
holder
.
closeSocket
();
}
/**
* 设置IP及端口
*/
public
void
setIp
(
PrinterDeviceBean
printerDeviceBean
)
{
holder
.
setIp
(
printerDeviceBean
);
}
/**
* 设置蓝牙
*
* @param device 设备
*/
public
void
setDevice
(
BluetoothDevice
device
)
{
holder
.
setDevice
(
device
);
}
/**
* 设置状态监听
*
* @param listener 监听
*/
public
void
setOnStateChangedListener
(
PrintSocketHolder
.
OnStateChangedListener
listener
)
{
this
.
listener
=
listener
;
if
(
printDataMakers
.
size
()
<=
0
)
{
printDataMakers
.
add
(
maker
);
new
PrintTask
().
execute
(
maker
);
}
else
{
//如果隊列裡有任務在執行,只添加進去,等待執行完成之後,再來執行這個
printDataMakers
.
add
(
maker
);
startReset
();
}
}
/**
* 设置重连次数
*
* @param times 次数
*/
public
void
setReconnectTimes
(
int
times
)
{
mReconnectTimes
=
times
;
private
void
startReset
()
{
resetPrintDis
=
RxJavaUtils
.
delay
(
10
,
aLong
->
{
//如果十秒之後,任務還沒在打印完成方法中取消,可能打印程序卡住了,在這裡執行下一個任務
if
(
printDataMakers
.
size
()
>
0
)
{
new
PrintTask
().
execute
(
printDataMakers
.
get
(
0
));
}
})
;
}
/**
*
设置结果回调
*
执行打印请求
*
* @
param listener 回调
* @
return 错误代码
*/
public
void
setOnPrintResultListener
(
OnPrintResultListener
listener
)
{
this
.
mListener
=
listener
;
}
public
interface
OnPrintResultListener
{
void
onResult
(
int
errorCode
,
PrinterDeviceBean
printerDeviceBean
);
private
int
doRequest
(
PrintDataMaker
maker
)
{
//通知狀態
holder
.
onPrinterStateChanged
(
PrintSocketHolder
.
STATE_0
);
//獲取打印數據
List
<
byte
[]>
data
=
maker
.
getPrintData
();
//如果是打印prj,需要獲取prj的id
prjIds
=
maker
.
getPrjIds
();
//判斷是否連接,如果未連接就先連接
int
prepare
=
holder
.
prepareSocket
(
maker
.
getIp
(),
maker
.
getPort
());
if
(
prepare
!=
PrintSocketHolder
.
ERROR_0
)
{
return
prepare
;
}
return
holder
.
sendData
(
data
);
}
/**
*
PRJ打印結果回調
*
打印任務
*/
public
interface
OnPrjPrintResultListener
{
void
onResult
(
int
errorCode
,
String
ids
);
}
public
void
setOnPrjPrintResultListener
(
OnPrjPrintResultListener
onPrjPrintResultListener
)
{
this
.
onPrjPrintResultListener
=
onPrjPrintResultListener
;
}
private
class
PrintTask
extends
AsyncTask
<
PrintDataMaker
,
Integer
,
Integer
>
implements
PrintSocketHolder
.
OnStateChangedListener
{
@Override
protected
void
onPreExecute
()
{
super
.
onPreExecute
();
Log
.
e
(
"eee"
,
"任務數量:"
+
printDataMakers
.
size
());
holder
.
setOnStateChangedListener
(
this
);
}
@Override
protected
Integer
doInBackground
(
PrintDataMaker
...
makers
)
{
holder
.
closeSocket
();
if
(
makers
==
null
||
makers
.
length
<
1
)
{
return
PrintSocketHolder
.
ERROR_0
;
}
...
...
@@ -212,13 +114,27 @@ public class PrintExecutor {
return
;
}
if
(
listener
!=
null
)
{
listener
.
onStateChanged
(
values
[
0
]
,
holder
.
getPrinterDeviceBean
()
);
listener
.
onStateChanged
(
values
[
0
]);
}
}
@Override
protected
void
onPostExecute
(
Integer
integer
)
{
super
.
onPostExecute
(
integer
);
if
(
resetPrintDis
!=
null
)
{
resetPrintDis
.
dispose
();
}
//移除掉當前任務
if
(
printDataMakers
.
size
()
>
0
)
{
printDataMakers
.
remove
(
0
);
}
//執行下一個任務
if
(
printDataMakers
.
size
()
>
0
)
{
new
PrintTask
().
execute
(
printDataMakers
.
get
(
0
));
startReset
();
}
Log
.
e
(
"eee"
,
"完成後任務數量:"
+
printDataMakers
.
size
());
//返回結果
if
(
integer
!=
null
)
{
onResult
(
integer
);
}
...
...
@@ -232,7 +148,7 @@ public class PrintExecutor {
private
void
onResult
(
int
errorCode
)
{
try
{
if
(
mListener
!=
null
)
{
mListener
.
onResult
(
errorCode
,
holder
.
getPrinterDeviceBean
()
);
mListener
.
onResult
(
errorCode
);
}
if
(
onPrjPrintResultListener
!=
null
)
{
onPrjPrintResultListener
.
onResult
(
errorCode
,
prjIds
);
...
...
@@ -243,26 +159,66 @@ public class PrintExecutor {
}
@Override
public
void
onStateChanged
(
int
state
,
PrinterDeviceBean
printerDeviceBean
)
{
public
void
onStateChanged
(
int
state
)
{
switch
(
state
)
{
case
PrintSocketHolder
.
STATE_0
:
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 生成页面数据"
);
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 生成页面数据"
);
break
;
case
PrintSocketHolder
.
STATE_1
:
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 创建Socket连接"
);
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 创建Socket连接"
);
break
;
case
PrintSocketHolder
.
STATE_2
:
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 获取输出流"
);
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 获取输出流"
);
break
;
case
PrintSocketHolder
.
STATE_3
:
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 写入页面数据"
);
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 写入页面数据"
);
break
;
case
PrintSocketHolder
.
STATE_4
:
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 关闭输出流"
);
LoganManager
.
w_printer
(
TAG
,
"打印機狀態 --> 关闭输出流"
);
break
;
default
:
break
;
}
publishProgress
(
state
);
}
}
/**
* 设置状态监听
*
* @param listener 监听
*/
public
PrintExecutor
setOnStateChangedListener
(
PrintSocketHolder
.
OnStateChangedListener
listener
)
{
this
.
listener
=
listener
;
return
this
;
}
/**
* 设置结果回调
*
* @param listener 回调
*/
public
PrintExecutor
setOnPrintResultListener
(
OnPrintResultListener
listener
)
{
this
.
mListener
=
listener
;
return
this
;
}
/**
* 打印結果回調
*/
public
interface
OnPrintResultListener
{
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
;
}
}
library-print/src/main/java/com/gingersoft/gsa/cloud/print/PrintSocketHolder.java
View file @
f410baeb
/*
* Copyright (C) 2015 AlexMofer
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com
.
gingersoft
.
gsa
.
cloud
.
print
;
import
android.
bluetooth.BluetoothDevice
;
import
android.bluetooth.BluetoothSocket
;
import
android.
util.Log
;
import
com.gingersoft.gsa.cloud.common.constans.PrintConstans
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.common.printer.plugins.PrinterPlugins
;
import
com.gingersoft.gsa.cloud.common.utils.other.TextUtil
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.scwang.smartrefresh.layout.listener.OnStateChangedListener
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.lang.ref.WeakReference
;
import
java.net.InetSocketAddress
;
import
java.net.Socket
;
import
java.util.List
;
import
java.util.UUID
;
/**
* 打印Socket
* Created by Alex on 2016/11/10.
*/
@SuppressWarnings
({
"WeakerAccess"
,
"unused"
})
public
class
PrintSocketHolder
{
private
final
static
PrintSocketHolder
printSocketHolder
=
new
PrintSocketHolder
();
public
static
PrintSocketHolder
getInstance
()
{
synchronized
(
printSocketHolder
)
{
return
printSocketHolder
;
}
}
protected
final
String
TAG
=
this
.
getClass
().
getSimpleName
();
public
static
final
int
STATE_0
=
10
;
// 生成测试页面数据
...
...
@@ -53,41 +45,25 @@ public class PrintSocketHolder {
public
static
final
int
ERROR_6
=
-
6
;
// 关闭Socket出错
public
static
final
int
ERROR_100
=
-
100
;
// 失败
private
static
final
UUID
uuid
=
UUID
.
fromString
(
"00001101-0000-1000-8000-00805F9B34FB"
);
//蓝牙打印UUID
// private String ip;
// private int port = 9100;
private
PrinterDeviceBean
printerDeviceBean
;
private
BluetoothDevice
mDevice
;
private
Socket
socket
;
private
BluetoothSocket
bluetoothSocket
;
private
OutputStream
out
;
private
WeakReference
<
OnStateChangedListener
>
mListener
;
public
PrintSocketHolder
(
BluetoothDevice
device
)
{
setDevice
(
device
);
}
public
PrintSocketHolder
(
PrinterDeviceBean
printerDeviceBean
)
{
setIp
(
printerDeviceBean
);
private
PrintSocketHolder
()
{
}
public
int
createSocket
()
{
public
int
createSocket
(
String
ip
,
int
port
)
{
onPrinterStateChanged
(
STATE_1
);
if
(
mDevice
==
null
&&
(
printerDeviceBean
==
null
||
printerDeviceBean
.
getIp
()
==
null
))
if
(
TextUtil
.
isEmptyOrNullOrUndefined
(
ip
))
{
return
ERROR_5
;
}
try
{
if
(
mDevice
!=
null
)
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionBefore
(
"藍牙打印機"
,
printerDeviceBean
.
getIp
(),
printerDeviceBean
.
getPort
(),
0
,
0
);
bluetoothSocket
=
mDevice
.
createRfcommSocketToServiceRecord
(
uuid
);
bluetoothSocket
.
connect
();
}
else
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionBefore
(
"網絡打印機"
,
printerDeviceBean
.
getIp
(),
printerDeviceBean
.
getPort
(),
PrintConstans
.
SO_TIMEOUT
,
PrintConstans
.
PRINT_TIMEOUT
);
socket
=
new
Socket
();
InetSocketAddress
socketAddress
=
new
InetSocketAddress
(
printerDeviceBean
.
getIp
(),
printerDeviceBean
.
getPort
());
//设置超时时间
socket
.
setSoTimeout
(
PrintConstans
.
SO_TIMEOUT
);
socket
.
connect
(
socketAddress
,
PrintConstans
.
PRINT_TIMEOUT
);
//开始连接ip
}
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionBefore
(
"網絡打印機"
,
ip
,
port
,
PrintConstans
.
SO_TIMEOUT
,
PrintConstans
.
PRINT_TIMEOUT
);
socket
=
new
Socket
();
//建立連接
InetSocketAddress
socketAddress
=
new
InetSocketAddress
(
ip
,
port
);
//设置超时时间
socket
.
setSoTimeout
(
PrintConstans
.
SO_TIMEOUT
);
socket
.
connect
(
socketAddress
,
PrintConstans
.
PRINT_TIMEOUT
);
//开始连接ip
}
catch
(
Exception
e
)
{
closeSocket
();
e
.
printStackTrace
();
...
...
@@ -99,11 +75,7 @@ public class PrintSocketHolder {
public
int
getOutputStream
()
{
onPrinterStateChanged
(
STATE_2
);
try
{
if
(
mDevice
!=
null
)
{
out
=
bluetoothSocket
.
getOutputStream
();
}
else
{
out
=
socket
.
getOutputStream
();
}
out
=
socket
.
getOutputStream
();
}
catch
(
IOException
e
)
{
closeSocket
();
return
ERROR_3
;
...
...
@@ -111,11 +83,19 @@ public class PrintSocketHolder {
return
ERROR_0
;
}
/**
* 是否連接
*/
public
boolean
isSocketPrepared
()
{
boolean
isPrepared
=
(
bluetoothSocket
!=
null
||
socket
!=
null
)
&&
out
!=
null
;
return
isPrepared
;
return
socket
!=
null
&&
out
!=
null
;
}
/**
* 發送數據
*
* @param data 需要發送的數據
* @return 發送狀態:是否成功
*/
public
int
sendData
(
List
<
byte
[]>
data
)
{
onPrinterStateChanged
(
STATE_3
);
if
(
data
==
null
||
data
.
size
()
<=
0
)
{
...
...
@@ -125,7 +105,7 @@ public class PrintSocketHolder {
try
{
out
.
write
(
item
);
out
.
flush
();
}
catch
(
IOException
e
)
{
}
catch
(
IOException
|
NullPointerException
e
)
{
LoganManager
.
w_printer
(
TAG
,
"打印异常: "
+
e
.
getMessage
());
closeSocket
();
return
ERROR_4
;
...
...
@@ -135,38 +115,15 @@ public class PrintSocketHolder {
return
ERROR_0
;
}
public
int
sendData
(
byte
[]
data
)
{
onPrinterStateChanged
(
STATE_3
);
try
{
out
.
write
(
data
);
out
.
flush
();
}
catch
(
IOException
e
)
{
closeSocket
();
return
ERROR_4
;
}
return
ERROR_0
;
}
public
int
sendData
(
byte
[]...
data
)
{
onPrinterStateChanged
(
STATE_3
);
for
(
byte
[]
item
:
data
)
{
try
{
out
.
write
(
item
);
out
.
flush
();
}
catch
(
IOException
e
)
{
closeSocket
();
return
ERROR_4
;
}
}
return
ERROR_0
;
}
public
int
prepareSocket
()
{
LoganManager
.
w_printer
(
TAG
,
"准备尝试连接打印机"
);
int
create
=
createSocket
();
public
int
prepareSocket
(
String
ip
,
int
port
)
{
LoganManager
.
w_printer
(
TAG
,
"准备尝试连接打印机"
+
ip
+
":"
+
port
);
//創建連接
int
create
=
createSocket
(
ip
,
port
);
//判斷連接狀態
if
(
create
!=
PrintSocketHolder
.
ERROR_0
)
{
return
create
;
}
//獲取打印機寫入
int
result
=
getOutputStream
();
if
(
result
==
ERROR_0
)
{
PrinterPlugins
.
getOnPrinterFlowHandler
().
connectionSuccess
();
...
...
@@ -180,13 +137,13 @@ public class PrintSocketHolder {
* 销毁
*/
public
int
closeSocket
()
{
LoganManager
.
w_printer
(
TAG
,
"準備关闭打印机连接"
);
onPrinterStateChanged
(
STATE_4
);
boolean
error
=
false
;
try
{
if
(
out
!=
null
)
{
out
.
close
();
out
=
null
;
LoganManager
.
w_printer
(
TAG
,
"关闭打印机輸出连接"
);
}
}
catch
(
IOException
e
)
{
LoganManager
.
w_printer
(
TAG
,
"关闭打印机连接异常"
);
...
...
@@ -197,22 +154,13 @@ public class PrintSocketHolder {
if
(
socket
!=
null
)
{
socket
.
close
();
socket
=
null
;
LoganManager
.
w_printer
(
TAG
,
"关闭打印机socket连接"
);
}
}
catch
(
IOException
e
)
{
LoganManager
.
w_printer
(
TAG
,
"关闭打印机连接异常"
);
socket
=
null
;
error
=
true
;
}
try
{
if
(
bluetoothSocket
!=
null
)
{
bluetoothSocket
.
close
();
bluetoothSocket
=
null
;
}
}
catch
(
IOException
e
)
{
LoganManager
.
w_printer
(
TAG
,
"关闭打印机连接异常"
);
bluetoothSocket
=
null
;
error
=
true
;
}
PrinterPlugins
.
getOnPrinterFlowHandler
().
disconnect
();
return
error
?
ERROR_6
:
ERROR_0
;
}
...
...
@@ -224,46 +172,15 @@ public class PrintSocketHolder {
*/
public
void
onPrinterStateChanged
(
int
state
)
{
try
{
if
(
mListener
!=
null
&&
mListener
.
get
()
!=
null
)
mListener
.
get
().
onStateChanged
(
state
,
printerDeviceBean
);
if
(
mListener
!=
null
&&
mListener
.
get
()
!=
null
)
{
mListener
.
get
().
onStateChanged
(
state
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
/**
* 设置IP及端口
*/
public
void
setIp
(
PrinterDeviceBean
printerDeviceBean
)
{
this
.
printerDeviceBean
=
printerDeviceBean
;
}
// public String getIp() {
// return ip;
// }
//
// public int getPort() {
// return port;
// }
public
PrinterDeviceBean
getPrinterDeviceBean
()
{
return
printerDeviceBean
;
}
public
void
setPrinterDeviceBean
(
PrinterDeviceBean
printerDeviceBean
)
{
this
.
printerDeviceBean
=
printerDeviceBean
;
}
/**
* 设置蓝牙
*
* @param device 设备
*/
public
void
setDevice
(
BluetoothDevice
device
)
{
this
.
mDevice
=
device
;
}
/**
* 设置状态监听
*
* @param listener 监听
...
...
@@ -273,6 +190,6 @@ public class PrintSocketHolder {
}
public
interface
OnStateChangedListener
{
void
onStateChanged
(
int
state
,
PrinterDeviceBean
printerDeviceBean
);
void
onStateChanged
(
int
state
);
}
}
library-print/src/main/java/com/gingersoft/gsa/cloud/print/bean/adapter/AdaptationContent.java
View file @
f410baeb
...
...
@@ -24,6 +24,8 @@ public interface AdaptationContent {
PrintContent
adaptationPrintSlipContent
(
DoshokuOrder
doshokuOrder
,
TableBean
.
DataBean
tableBean
);
PrintContent
adaptationSendOrderPaperContent
(
DoshokuOrder
doshokuOrder
,
TableBean
.
DataBean
tableBean
);
PrintContent
adaptationServingPaperContent
(
DoshokuOrder
doshokuOrder
,
TableBean
.
DataBean
tableBean
);
PrintContent
adaptationBillContent
(
DoshokuOrder
doshokuOrder
,
TableBean
.
DataBean
tableBean
);
...
...
library-print/src/main/java/com/gingersoft/gsa/cloud/print/bean/adapter/PrintContentAdapter.java
View file @
f410baeb
...
...
@@ -55,6 +55,11 @@ public class PrintContentAdapter implements AdaptationContent {
return
getPrintTakeawayFormContent
(
data
,
2
);
}
/**
* 清機打印
* @param settlementReport
* @return
*/
@Override
public
PrintContent
adaptationPrintCleanMachineContent
(
SettlementReport
settlementReport
)
{
PrintCleanMachineContent
cleanMachineContent
=
new
PrintCleanMachineContent
();
...
...
@@ -68,6 +73,12 @@ public class PrintContentAdapter implements AdaptationContent {
return
cleanMachineContent
;
}
/**
* 印單
* @param doshokuOrder
* @param tableBean
* @return
*/
@Override
public
PrintContent
adaptationPrintSlipContent
(
DoshokuOrder
doshokuOrder
,
TableBean
.
DataBean
tableBean
)
{
PrintSlipContent
slipContent
=
new
PrintSlipContent
();
...
...
@@ -77,15 +88,23 @@ public class PrintContentAdapter implements AdaptationContent {
slipContent
.
setPerson
(
tableBean
.
getPerson
());
slipContent
.
setCreateTime
(
tableBean
.
getCreateTime
());
slipContent
.
setOrderNo
(
doshokuOrder
.
getOrderNo
());
slipContent
.
setFoodItemList
(
orderDetailItemCastPrintFoodItemList
(
doshokuOrder
.
getNewFoodList
()));
// slipContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getNewFoodList()));
slipContent
.
setFoodItemList
(
orderDetailItemCastPrintFoodItemList
(
doshokuOrder
.
getShoppingCart
().
getOrderCommodityList
()));
slipContent
.
setBillItemList
(
billItemCastPrintBillItemList
(
doshokuOrder
.
getShoppingCart
().
getBillItemList
()));
slipContent
.
setWholeAmount
(
doshokuOrder
.
getShoppingCart
().
getWholeAmount
());
slipContent
.
setTotalAmount
(
doshokuOrder
.
getShoppingCart
().
getTotalAmount
());
slipContent
.
setPoliteLanguage
(
"歡迎光臨!"
);
return
slipContent
;
}
/**
* 送單
* @param doshokuOrder
* @param tableBean
* @return
*/
@Override
public
PrintContent
adaptationSe
rving
PaperContent
(
DoshokuOrder
doshokuOrder
,
TableBean
.
DataBean
tableBean
)
{
public
PrintContent
adaptationSe
ndOrder
PaperContent
(
DoshokuOrder
doshokuOrder
,
TableBean
.
DataBean
tableBean
)
{
PrintServingPaperContent
servingPaperContent
=
new
PrintServingPaperContent
();
servingPaperContent
.
setBrand
(
RestaurantInfoManager
.
newInstance
().
getBrandName
());
servingPaperContent
.
setResturantName
(
RestaurantInfoManager
.
newInstance
().
getRestaurantName
());
...
...
@@ -93,11 +112,39 @@ public class PrintContentAdapter implements AdaptationContent {
servingPaperContent
.
setPerson
(
tableBean
.
getPerson
());
servingPaperContent
.
setCreateTime
(
tableBean
.
getCreateTime
());
servingPaperContent
.
setOrderNo
(
doshokuOrder
.
getOrderNo
());
//送單
servingPaperContent
.
setFoodItemList
(
orderDetailItemCastPrintFoodItemList
(
doshokuOrder
.
getNewFoodList
()));
servingPaperContent
.
setPoliteLanguage
(
"歡迎光臨!"
);
return
servingPaperContent
;
}
/**
* 上菜紙
* @param doshokuOrder
* @param tableBean
* @return
*/
@Override
public
PrintContent
adaptationServingPaperContent
(
DoshokuOrder
doshokuOrder
,
TableBean
.
DataBean
tableBean
)
{
PrintServingPaperContent
servingPaperContent
=
new
PrintServingPaperContent
();
servingPaperContent
.
setBrand
(
RestaurantInfoManager
.
newInstance
().
getBrandName
());
servingPaperContent
.
setResturantName
(
RestaurantInfoManager
.
newInstance
().
getRestaurantName
());
servingPaperContent
.
setTableName
(
tableBean
.
getTableName
());
servingPaperContent
.
setPerson
(
tableBean
.
getPerson
());
servingPaperContent
.
setCreateTime
(
tableBean
.
getCreateTime
());
servingPaperContent
.
setOrderNo
(
doshokuOrder
.
getOrderNo
());
// servingPaperContent.setFoodItemList(orderDetailItemCastPrintFoodItemList(doshokuOrder.getNewFoodList()));
servingPaperContent
.
setFoodItemList
(
orderDetailItemCastPrintFoodItemList
(
doshokuOrder
.
getShoppingCart
().
getOrderCommodityList
()));
servingPaperContent
.
setPoliteLanguage
(
"歡迎光臨!"
);
return
servingPaperContent
;
}
/**
* 打印結賬單
* @param doshokuOrder
* @param tableBean
* @return
*/
@Override
public
PrintContent
adaptationBillContent
(
DoshokuOrder
doshokuOrder
,
TableBean
.
DataBean
tableBean
)
{
PrintBillContent
billContent
=
new
PrintBillContent
();
...
...
@@ -107,7 +154,7 @@ public class PrintContentAdapter implements AdaptationContent {
billContent
.
setPerson
(
tableBean
.
getPerson
());
billContent
.
setCreateTime
(
tableBean
.
getCreateTime
());
billContent
.
setOrderNo
(
doshokuOrder
.
getOrderNo
());
billContent
.
setFoodItemList
(
orderDetailItemCastPrintFoodItemList
(
doshokuOrder
.
get
NewFood
List
()));
billContent
.
setFoodItemList
(
orderDetailItemCastPrintFoodItemList
(
doshokuOrder
.
get
ShoppingCart
().
getOrderCommodity
List
()));
billContent
.
setBillItemList
(
billItemCastPrintBillItemList
(
doshokuOrder
.
getShoppingCart
().
getBillItemList
()));
billContent
.
setPayMethodItemList
(
payMethodItemCastPrintBillItemList
(
doshokuOrder
.
getBillMoney
()));
billContent
.
setWholeAmount
(
doshokuOrder
.
getShoppingCart
().
getWholeAmount
());
...
...
library-print/src/main/java/com/gingersoft/gsa/cloud/print/newprint/ConnectPrintUtil.java
View file @
f410baeb
...
...
@@ -60,7 +60,7 @@ public class ConnectPrintUtil {
socketMap
.
put
(
ip
,
socket
);
}
catch
(
IOException
e
)
{
socketMap
.
remove
(
ip
);
setState
(
PrintSocketHolder
.
ERROR_
1
,
"連接失敗"
+
e
.
getMessage
());
setState
(
PrintSocketHolder
.
ERROR_
2
,
"連接失敗"
+
e
.
getMessage
());
e
.
printStackTrace
();
}
}
...
...
library-print/src/main/java/com/gingersoft/gsa/cloud/print/newprint/PrintUtil.java
View file @
f410baeb
package
com
.
gingersoft
.
gsa
.
cloud
.
print
.
newprint
;
import
android.bluetooth.BluetoothDevice
;
import
android.os.AsyncTask
;
import
com.gingersoft.gsa.cloud.common.logan.LoganManager
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.print.PrintDataMaker
;
import
com.gingersoft.gsa.cloud.print.PrintExecutor
;
import
com.gingersoft.gsa.cloud.print.PrintSocketHolder
;
import
java.util.List
;
public
class
PrintUtil
{
protected
final
String
TAG
=
this
.
getClass
().
getSimpleName
();
private
PrintSocketHolder
holder
;
private
int
mReconnectTimes
=
0
;
private
int
time
=
0
;
private
String
prjIds
;
private
PrintSocketHolder
.
OnStateChangedListener
listener
;
private
PrintExecutor
.
OnPrintResultListener
mListener
;
private
PrintExecutor
.
OnPrjPrintResultListener
onPrjPrintResultListener
;
public
PrintUtil
()
{
// holder = new PrintSocketHolder(printerDeviceBean);
}
/**
* 执行打印请求
*
* @return 错误代码
*/
private
int
doRequest
(
PrintDataMaker
maker
)
{
LoganManager
.
w_printer
(
TAG
,
"PrintTask doRequest"
);
if
(
mReconnectTimes
==
0
)
{
holder
.
onPrinterStateChanged
(
PrintSocketHolder
.
STATE_0
);
List
<
byte
[]>
data
=
maker
.
getPrintData
();
prjIds
=
maker
.
getPrjIds
();
if
(!
holder
.
isSocketPrepared
())
{
int
prepare
=
holder
.
prepareSocket
();
if
(
prepare
!=
PrintSocketHolder
.
ERROR_0
)
return
prepare
;
}
return
holder
.
sendData
(
data
);
}
else
{
holder
.
onPrinterStateChanged
(
PrintSocketHolder
.
STATE_0
);
List
<
byte
[]>
data
=
maker
.
getPrintData
();
prjIds
=
maker
.
getPrjIds
();
if
(
holder
.
isSocketPrepared
())
{
if
(
sendData
(
data
))
return
PrintSocketHolder
.
ERROR_0
;
else
return
PrintSocketHolder
.
ERROR_100
;
}
else
{
if
(
prepareSocket
()
&&
sendData
(
data
))
{
return
PrintSocketHolder
.
ERROR_0
;
}
else
{
return
PrintSocketHolder
.
ERROR_100
;
}
}
}
}
/**
* 执行打印请求
*
* @return 错误代码
*/
public
int
doPrinterRequest
(
PrintDataMaker
maker
)
{
holder
.
setOnStateChangedListener
(
listener
);
return
doRequest
(
maker
);
}
private
boolean
prepareSocket
()
{
time
++;
return
time
<
mReconnectTimes
&&
(
holder
.
prepareSocket
()
==
PrintSocketHolder
.
ERROR_0
||
prepareSocket
());
}
private
boolean
sendData
(
List
<
byte
[]>
data
)
{
if
(
holder
.
sendData
(
data
)
==
PrintSocketHolder
.
ERROR_0
)
{
time
=
0
;
return
true
;
}
else
{
return
prepareSocket
()
&&
sendData
(
data
);
}
}
/**
* 异步执行打印请求
*/
public
void
doPrinterRequestAsync
(
PrintDataMaker
maker
)
{
// new PrintExecutor.PrintTask().execute(maker);
}
/**
* 销毁
*/
public
int
closeSocket
()
{
return
holder
.
closeSocket
();
}
/**
* 设置IP及端口
*/
public
void
setIp
(
PrinterDeviceBean
printerDeviceBean
)
{
holder
.
setIp
(
printerDeviceBean
);
}
/**
* 设置蓝牙
*
* @param device 设备
*/
public
void
setDevice
(
BluetoothDevice
device
)
{
holder
.
setDevice
(
device
);
}
/**
* 设置状态监听
*
* @param listener 监听
*/
public
void
setOnStateChangedListener
(
PrintSocketHolder
.
OnStateChangedListener
listener
)
{
this
.
listener
=
listener
;
}
/**
* 设置重连次数
*
* @param times 次数
*/
public
void
setReconnectTimes
(
int
times
)
{
mReconnectTimes
=
times
;
}
/**
* 设置结果回调
*
* @param listener 回调
*/
public
void
setOnPrintResultListener
(
PrintExecutor
.
OnPrintResultListener
listener
)
{
this
.
mListener
=
listener
;
}
public
interface
OnPrintResultListener
{
void
onResult
(
int
errorCode
,
PrinterDeviceBean
printerDeviceBean
);
}
/**
* PRJ打印結果回調
*/
public
interface
OnPrjPrintResultListener
{
void
onResult
(
int
errorCode
,
String
ids
);
}
public
void
setOnPrjPrintResultListener
(
PrintExecutor
.
OnPrjPrintResultListener
onPrjPrintResultListener
)
{
this
.
onPrjPrintResultListener
=
onPrjPrintResultListener
;
}
private
class
PrintTask
extends
AsyncTask
<
PrintDataMaker
,
Integer
,
Integer
>
implements
PrintSocketHolder
.
OnStateChangedListener
{
@Override
protected
void
onPreExecute
()
{
super
.
onPreExecute
();
holder
.
setOnStateChangedListener
(
this
);
}
@Override
protected
Integer
doInBackground
(
PrintDataMaker
...
makers
)
{
if
(
makers
==
null
||
makers
.
length
<
1
)
return
PrintSocketHolder
.
ERROR_0
;
return
doRequest
(
makers
[
0
]);
}
@Override
protected
void
onProgressUpdate
(
Integer
...
values
)
{
super
.
onProgressUpdate
(
values
);
if
(
values
==
null
||
values
.
length
<
1
)
return
;
if
(
listener
!=
null
)
listener
.
onStateChanged
(
values
[
0
],
holder
.
getPrinterDeviceBean
());
}
@Override
protected
void
onPostExecute
(
Integer
integer
)
{
super
.
onPostExecute
(
integer
);
if
(
integer
!=
null
)
{
onResult
(
integer
);
}
}
/**
* 打印结果
*
* @param errorCode 错误代码
*/
private
void
onResult
(
int
errorCode
)
{
try
{
if
(
mListener
!=
null
)
mListener
.
onResult
(
errorCode
,
holder
.
getPrinterDeviceBean
());
if
(
onPrjPrintResultListener
!=
null
)
{
onPrjPrintResultListener
.
onResult
(
errorCode
,
prjIds
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
@Override
public
void
onStateChanged
(
int
state
,
PrinterDeviceBean
printerDeviceBean
)
{
publishProgress
(
state
);
}
}
}
//
package com.gingersoft.gsa.cloud.print.newprint;
//
//
import android.bluetooth.BluetoothDevice;
//
import android.os.AsyncTask;
//
//
import com.gingersoft.gsa.cloud.common.logan.LoganManager;
//
import com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean;
//
import com.gingersoft.gsa.cloud.print.PrintDataMaker;
//
import com.gingersoft.gsa.cloud.print.PrintExecutor;
//
import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
//
//
import java.util.List;
//
//
public class PrintUtil {
//
//
protected final String TAG = this.getClass().getSimpleName();
//
//
private PrintSocketHolder holder;
//
private int mReconnectTimes = 0;
//
private int time = 0;
//
private String prjIds;
//
private PrintSocketHolder.OnStateChangedListener listener;
//
private PrintExecutor.OnPrintResultListener mListener;
//
private PrintExecutor.OnPrjPrintResultListener onPrjPrintResultListener;
//
//
public PrintUtil() {
//
//
holder = new PrintSocketHolder(printerDeviceBean);
//
}
//
//
/**
//
* 执行打印请求
//
*
//
* @return 错误代码
//
*/
//
private int doRequest(PrintDataMaker maker) {
//
LoganManager.w_printer(TAG,"PrintTask doRequest");
//
if (mReconnectTimes == 0) {
//
holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
//
List<byte[]> data = maker.getPrintData();
//
prjIds = maker.getPrjIds();
//
if (!holder.isSocketPrepared()) {
//
int prepare = holder.prepareSocket();
//
if (prepare != PrintSocketHolder.ERROR_0)
//
return prepare;
//
}
//
return holder.sendData(data);
//
} else {
//
holder.onPrinterStateChanged(PrintSocketHolder.STATE_0);
//
List<byte[]> data = maker.getPrintData();
//
prjIds = maker.getPrjIds();
//
if (holder.isSocketPrepared()) {
//
if (sendData(data))
//
return PrintSocketHolder.ERROR_0;
//
else
//
return PrintSocketHolder.ERROR_100;
//
} else {
//
if (prepareSocket() && sendData(data)) {
//
return PrintSocketHolder.ERROR_0;
//
} else {
//
return PrintSocketHolder.ERROR_100;
//
}
//
}
//
}
//
}
//
//
/**
//
* 执行打印请求
//
*
//
* @return 错误代码
//
*/
//
public int doPrinterRequest(PrintDataMaker maker) {
//
holder.setOnStateChangedListener(listener);
//
return doRequest(maker);
//
}
//
//
private boolean prepareSocket() {
//
time++;
//
return time < mReconnectTimes &&
//
(holder.prepareSocket() == PrintSocketHolder.ERROR_0 || prepareSocket());
//
}
//
//
private boolean sendData(List<byte[]> data) {
//
if (holder.sendData(data) == PrintSocketHolder.ERROR_0) {
//
time = 0;
//
return true;
//
} else {
//
return prepareSocket() && sendData(data);
//
}
//
}
//
//
/**
//
* 异步执行打印请求
//
*/
//
public void doPrinterRequestAsync(PrintDataMaker maker) {
//
//
new PrintExecutor.PrintTask().execute(maker);
//
}
//
//
/**
//
* 销毁
//
*/
//
public int closeSocket() {
//
return holder.closeSocket();
//
}
//
//
/**
//
* 设置IP及端口
//
*/
//
public void setIp(PrinterDeviceBean printerDeviceBean) {
//
holder.setIp(printerDeviceBean);
//
}
//
//
/**
//
* 设置蓝牙
//
*
//
* @param device 设备
//
*/
//
public void setDevice(BluetoothDevice device) {
//
holder.setDevice(device);
//
}
//
//
/**
//
* 设置状态监听
//
*
//
* @param listener 监听
//
*/
//
public void setOnStateChangedListener(PrintSocketHolder.OnStateChangedListener listener) {
//
this.listener = listener;
//
}
//
//
/**
//
* 设置重连次数
//
*
//
* @param times 次数
//
*/
//
public void setReconnectTimes(int times) {
//
mReconnectTimes = times;
//
}
//
//
/**
//
* 设置结果回调
//
*
//
* @param listener 回调
//
*/
//
public void setOnPrintResultListener(PrintExecutor.OnPrintResultListener listener) {
//
this.mListener = listener;
//
}
//
//
public interface OnPrintResultListener {
//
void onResult(int errorCode, PrinterDeviceBean printerDeviceBean);
//
}
//
//
/**
//
* PRJ打印結果回調
//
*/
//
public interface OnPrjPrintResultListener {
//
void onResult(int errorCode, String ids);
//
}
//
//
public void setOnPrjPrintResultListener(PrintExecutor.OnPrjPrintResultListener onPrjPrintResultListener) {
//
this.onPrjPrintResultListener = onPrjPrintResultListener;
//
}
//
//
private class PrintTask extends AsyncTask<PrintDataMaker, Integer, Integer> implements
//
PrintSocketHolder.OnStateChangedListener {
//
//
@Override
//
protected void onPreExecute() {
//
super.onPreExecute();
//
holder.setOnStateChangedListener(this);
//
}
//
//
@Override
//
protected Integer doInBackground(PrintDataMaker... makers) {
//
if (makers == null || makers.length < 1)
//
return PrintSocketHolder.ERROR_0;
//
return doRequest(makers[0]);
//
}
//
//
@Override
//
protected void onProgressUpdate(Integer... values) {
//
super.onProgressUpdate(values);
//
if (values == null || values.length < 1)
//
return;
//
if (listener != null)
//
listener.onStateChanged(values[0], holder.getPrinterDeviceBean());
//
}
//
//
@Override
//
protected void onPostExecute(Integer integer) {
//
super.onPostExecute(integer);
//
if (integer != null) {
//
onResult(integer);
//
}
//
}
//
//
/**
//
* 打印结果
//
*
//
* @param errorCode 错误代码
//
*/
//
private void onResult(int errorCode) {
//
try {
//
if (mListener != null)
//
mListener.onResult(errorCode, holder.getPrinterDeviceBean());
//
if (onPrjPrintResultListener != null) {
//
onPrjPrintResultListener.onResult(errorCode, prjIds);
//
}
//
} catch (Exception e) {
//
e.printStackTrace();
//
}
//
}
//
//
@Override
//
public void onStateChanged(int state, PrinterDeviceBean printerDeviceBean) {
//
publishProgress(state);
//
}
//
}
//
}
library-ui/src/main/res/layout/print_item_food.xml
View file @
f410baeb
...
...
@@ -3,6 +3,8 @@
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_marginLeft=
"@dimen/dp_10"
android:layout_marginRight=
"@dimen/dp_10"
android:orientation=
"horizontal"
>
<TextView
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment