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
c3c5c732
Commit
c3c5c732
authored
Aug 01, 2020
by
Wyh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
8.01 1、食品是否打印至賬單功能 2、外賣接單多種支付方式 3、登陸接口錯誤報警 4、優化外送結賬打印
Signed-off-by: Wyh <1239658231>
parent
19692ff3
Show whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
443 additions
and
909 deletions
+443
-909
base-module/src/main/java/com/gingersoft/gsa/cloud/base/application/GsaCloudApplication.java
+1
-1
base-module/src/main/java/com/gingersoft/gsa/cloud/base/common/bean/OrderDetail.java
+82
-8
base-module/src/main/java/com/gingersoft/gsa/cloud/base/utils/okhttpUtils/OkHttp3Utils.java
+1
-1
base-module/src/main/java/com/gingersoft/gsa/cloud/base/utils/view/ImageUtils.java
+0
-56
base-module/src/main/java/com/gingersoft/gsa/cloud/constans/AppConstans.java
+3
-3
base-module/src/main/java/com/gingersoft/gsa/cloud/constans/ExpandConstant.java
+5
-1
base-module/src/main/java/com/gingersoft/gsa/cloud/print/bean/OrderDetails.kt
+27
-3
config.gradle
+2
-2
login-module/src/main/java/com/gingersoft/gsa/cloud/login/mvp/presenter/BaseLoginPresenter.java
+0
-1
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/WeatherRepository.kt
+19
-5
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/model/bean/UpdateOrderStatusBean.kt
+12
-0
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/network/CoolWeatherNetwork.kt
+6
-1
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/network/ServiceCreator.kt
+10
-0
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/network/api/WeatherService.kt
+3
-0
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/model/viewModel/PageViewModel.kt
+52
-8
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/ui/activity/OrderDetailsActivity.kt
+2
-2
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/ui/activity/PayActivity.kt
+8
-1
print-module/src/main/java/com/joe/print/mvp/print/EpsonPrint.java
+6
-6
print-module/src/main/java/com/joe/print/mvp/print/LocationPrintStatus.java
+0
-1
print-module/src/main/java/com/joe/print/mvp/print/PrintBill.java
+12
-0
print-module/src/main/java/com/joe/print/mvp/print/PrintOtherOrder.java
+7
-20
print-module/src/main/java/com/joe/print/mvp/print/PrintOtherOrderClosing.java
+60
-7
print-module/src/main/java/com/joe/print/mvp/print/PrintSlip.java
+12
-0
print-module/src/main/java/com/joe/print/mvp/print/PrintTest.java
+33
-1
print-module/src/main/java/com/joe/print/mvp/print/PrinterRoot.java
+21
-7
print-module/src/main/java/com/joe/print/mvp/print/PrinterUtil.java
+0
-402
print-module/src/main/java/com/joe/print/mvp/print/SendPrint.java
+0
-344
print-module/src/main/java/com/joe/print/mvp/print/TestPrintMaker.java
+22
-1
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrintActivity.java
+4
-6
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrintAddCurrencyActivity.java
+3
-12
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrintTestActivity.java
+21
-9
print-module/src/main/res/layout/activity_print_test.xml
+1
-0
print-module/src/main/res/layout/print_confirm_order_view.xml
+8
-0
No files found.
base-module/src/main/java/com/gingersoft/gsa/cloud/base/application/GsaCloudApplication.java
View file @
c3c5c732
...
...
@@ -376,7 +376,7 @@ public class GsaCloudApplication extends BaseApplication {
}
public
static
String
getGsPosShopId
(
Context
context
)
{
return
(
String
)
SPUtils
.
get
(
context
,
UserConstans
.
gsPosShopId
,
""
);
return
(
String
)
SPUtils
.
get
(
context
,
UserConstans
.
gsPosShopId
,
"
-1
"
);
}
public
static
String
getAppName
()
{
...
...
base-module/src/main/java/com/gingersoft/gsa/cloud/base/common/bean/OrderDetail.java
View file @
c3c5c732
...
...
@@ -689,31 +689,105 @@ public class OrderDetail implements Serializable {
List
<
OrderDetail
>
orderDetailList
=
new
ArrayList
<>();
if
(
productnameBeans
!=
null
)
{
for
(
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
productnameBean
:
productnameBeans
)
{
if
(!(
productnameBean
.
getPrintToBill
()
==
0
&&
Double
.
valueOf
(
productnameBean
.
getPRICE
())
==
0
)
||
isPrint
(
productnameBean
.
getPrintTo
(),
type
))
{
//食品金額不為0的不打印
//或者printTo成立
//打印
orderDetailList
.
add
(
getOrderDetailByProductnameBean
(
productnameBean
.
getPRODUCT_NAME
(),
Integer
.
parseInt
(
productnameBean
.
getNum
()),
Double
.
valueOf
(
productnameBean
.
getPRICE
()),
1
));
//遍歷食品信息,查詢是否需要打印
//沒有價格的情況下,勾選了就打印,沒勾選就不打印
//有價格的情況下,就會打印,不管有沒有勾選,如果是細項就只打印細項,如果是主項就只打印主項
//
//只要勾選了打印,不論有沒有價格都會打印
//細項只要勾選了,主項就會打印
//如果細項勾選了,則不管主項的配置,都會打印主項
//如果細項沒勾選,就判斷是否有價格,修改isPrint
boolean
isCheck
=
false
;
boolean
isCheck2
=
false
;
//二級細項
if
(
productnameBean
.
getChild
()
!=
null
)
{
for
(
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
.
ChildBeanX
childBeanX
:
productnameBean
.
getChild
())
{
if
(
childBeanX
!=
null
)
{
orderDetailList
.
add
(
getOrderDetailByProductnameBean
(
childBeanX
.
getPRODUCT_NAME
(),
Integer
.
parseInt
(
childBeanX
.
getNum
()),
Double
.
valueOf
(
childBeanX
.
getPRICE
()),
2
));
//判斷是否打印,為true的時候會同時打印主項
if
(
isPrint
(
childBeanX
.
getPrintTo
(),
type
))
{
isCheck
=
true
;
break
;
}
if
(
childBeanX
.
getChild
()
!=
null
)
{
for
(
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
.
ChildBeanX
.
ChildBean
childBean
:
childBeanX
.
getChild
())
{
orderDetailList
.
add
(
getOrderDetailByProductnameBean
(
childBean
.
getPRODUCT_NAME
(),
Integer
.
parseInt
(
childBean
.
getNum
()),
Double
.
valueOf
(
childBean
.
getPRICE
()),
3
));
//判斷是否打印,為true的時候會同時打印主項
if
(
isPrint
(
childBean
.
getPrintTo
(),
type
))
{
isCheck2
=
true
;
break
;
}
}
}
}
}
}
if
(
isCheck
||
isPrint
(
productnameBean
.
getPrintToBill
(),
Double
.
valueOf
(
productnameBean
.
getPRICE
()),
productnameBean
.
getPrintTo
(),
type
))
{
// 細項勾選了||主項勾選了||主項價格不為0 主項就會打印
orderDetailList
.
add
(
getOrderDetailByProductnameBean
(
productnameBean
.
getPRODUCT_NAME
(),
Integer
.
parseInt
(
productnameBean
.
getNum
()),
Double
.
valueOf
(
productnameBean
.
getPRICE
()),
1
));
addFoodItem
(
type
,
orderDetailList
,
productnameBean
,
isCheck2
);
}
else
{
//主項沒勾選&&主項價格為0&&細項也沒勾選
//那麼,不打印主項,查詢細項如果有價格就會打印
addFoodItem
(
type
,
orderDetailList
,
productnameBean
,
isCheck2
);
}
}
}
return
orderDetailList
;
}
/**
* 添加細項
*
* @param type
* @param orderDetailList
* @param productnameBean
* @param isCheck2
*/
private
static
void
addFoodItem
(
int
type
,
List
<
OrderDetail
>
orderDetailList
,
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
productnameBean
,
boolean
isCheck2
)
{
if
(
productnameBean
.
getChild
()
==
null
)
{
return
;
}
for
(
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
.
ChildBeanX
childBeanX
:
productnameBean
.
getChild
())
{
if
(
childBeanX
!=
null
)
{
if
(
isCheck2
||
isPrint
(
childBeanX
.
getPrintToBill
(),
Double
.
valueOf
(
childBeanX
.
getPRICE
()),
childBeanX
.
getPrintTo
(),
type
))
{
// 二級細項勾選了||細項勾選了||細項價格不為0 主項就會打印
orderDetailList
.
add
(
getOrderDetailByProductnameBean
(
childBeanX
.
getPRODUCT_NAME
(),
Integer
.
parseInt
(
childBeanX
.
getNum
()),
Double
.
valueOf
(
childBeanX
.
getPRICE
()),
2
));
addSecondFood
(
type
,
orderDetailList
,
childBeanX
);
}
else
{
//二級細項沒勾選 && 細項也沒勾選了 && 細項價格為0
//那麼,不打印細項,查詢二級細項如果有價格就會打印
addSecondFood
(
type
,
orderDetailList
,
childBeanX
);
}
}
}
}
/**
* 添加二級細項
*
* @param type
* @param orderDetailList
* @param childBeanX
*/
private
static
void
addSecondFood
(
int
type
,
List
<
OrderDetail
>
orderDetailList
,
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
.
ChildBeanX
childBeanX
)
{
if
(
childBeanX
.
getChild
()
!=
null
)
{
for
(
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
.
ChildBeanX
.
ChildBean
childBean
:
childBeanX
.
getChild
())
{
if
(
isPrint
(
childBeanX
.
getPrintToBill
(),
Double
.
valueOf
(
childBeanX
.
getPRICE
()),
childBeanX
.
getPrintTo
(),
type
))
{
//如果二級細項勾選了||價格不為0 二級細項就打印
orderDetailList
.
add
(
getOrderDetailByProductnameBean
(
childBean
.
getPRODUCT_NAME
(),
Integer
.
parseInt
(
childBean
.
getNum
()),
Double
.
valueOf
(
childBean
.
getPRICE
()),
3
));
}
}
}
}
private
static
boolean
isPrint
(
int
printToBill
,
double
price
,
int
printTo
,
int
type
)
{
//printTo和price不為0 都會打印
return
(!(
printToBill
==
0
&&
price
==
0
)
||
isPrint
(
printTo
,
type
));
}
/**
* 是否打印
*
* @param printTo
...
...
base-module/src/main/java/com/gingersoft/gsa/cloud/base/utils/okhttpUtils/OkHttp3Utils.java
View file @
c3c5c732
...
...
@@ -260,7 +260,7 @@ public class OkHttp3Utils {
.
add
(
"code"
,
errCode
)
//錯誤碼
.
add
(
"shopId"
,
GsaCloudApplication
.
getGsPosShopId
(
GsaCloudApplication
.
getAppContext
()))
.
add
(
"source"
,
GsaCloudApplication
.
getAppName
()
+
""
)
//錯誤來源
.
add
(
"pushContent"
,
pushContent
+
""
)
//推送內容
.
add
(
"pushContent"
,
"報錯內容:"
+
pushContent
)
//推送內容
.
add
(
"version"
,
DeviceUtils
.
getVersionName
(
GsaCloudApplication
.
getAppContext
()))
//系統版本
.
build
();
OkHttp3Utils
.
post
(
HttpsConstans
.
ROOT_URL
+
"/member-web/api/monitor/pushAlarm"
,
requestBody
)
...
...
base-module/src/main/java/com/gingersoft/gsa/cloud/base/utils/view/ImageUtils.java
View file @
c3c5c732
...
...
@@ -78,62 +78,6 @@ public class ImageUtils {
return
gray
;
}
/* *************************************************************************
* 假设一个240*240的图片,分辨率设为24, 共分10行打印
* 每一行,是一个 240*24 的点阵, 每一列有24个点,存储在3个byte里面。
* 每个byte存储8个像素点信息。因为只有黑白两色,所以对应为1的位是黑色,对应为0的位是白色
**************************************************************************/
/**
* 把一张Bitmap图片转化为打印机可以打印的字节流
*
* @param bmp
* @return
*/
public
static
byte
[]
draw2PxPoint
(
Bitmap
bmp
)
{
//用来存储转换后的 bitmap 数据。为什么要再加1000,这是为了应对当图片高度无法
//整除24时的情况。比如bitmap 分辨率为 240 * 250,占用 7500 byte,5:5455,3,5447,4,5427
//但是实际上要存储11行数据,每一行需要 24 * 240 / 8 =720byte 的空间。再加上一些指令存储的开销,
//所以多申请 1000byte 的空间是稳妥的,不然运行时会抛出数组访问越界的异常。
int
extra
=
bmp
.
getWidth
()
*
24
/
8
;
int
size
=
bmp
.
getWidth
()
*
bmp
.
getHeight
()
/
8
+
extra
;
byte
[]
data
=
new
byte
[
size
];
int
k
=
0
;
//设置行距为0的指令
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x33
;
data
[
k
++]
=
0x00
;
// 逐行打印
for
(
int
j
=
0
;
j
<
bmp
.
getHeight
()
/
24
f
;
j
++)
{
//打印图片的指令
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x2A
;
data
[
k
++]
=
33
;
data
[
k
++]
=
(
byte
)
(
bmp
.
getWidth
()
%
256
);
//nL
data
[
k
++]
=
(
byte
)
(
bmp
.
getWidth
()
/
256
);
//nH
//对于每一行,逐列打印
for
(
int
i
=
0
;
i
<
bmp
.
getWidth
();
i
++)
{
//每一列24个像素点,分为3个字节存储
for
(
int
m
=
0
;
m
<
3
;
m
++)
{
//每个字节表示8个像素点,0表示白色,1表示黑色
for
(
int
n
=
0
;
n
<
8
;
n
++)
{
byte
b
=
px2Byte
(
i
,
j
*
24
+
m
*
8
+
n
,
bmp
);
data
[
k
]
+=
data
[
k
]
+
b
;
}
k
++;
}
}
data
[
k
++]
=
10
;
//换行
}
// long a=System.currentTimeMillis();
// byte[] data1 = new byte[k];
// System.arraycopy(data, 0, data1, 0, k);
// long b=System.currentTimeMillis();
// System.out.println("结束字节:"+k+"---"+data.length+"耗时:"+(b-a));
return
data
;
}
public
int
getStatus
()
{
return
errorcode
;
}
...
...
base-module/src/main/java/com/gingersoft/gsa/cloud/constans/AppConstans.java
View file @
c3c5c732
...
...
@@ -7,9 +7,9 @@ public class AppConstans {
public
static
final
String
RP_HEART_ERROR
=
"RP_HD001"
;
//心跳斷開錯誤碼
public
static
final
String
RP_ORDER_LIST_ERROR
=
"RP_OL002"
;
//訂單列表錯誤碼
public
static
final
String
RP_THIRE_LOGISTICS_ERROR
=
"RP_WL003"
;
//
訂單列表
錯誤碼
public
static
final
String
RP_UPDATE_ORDER_STATE_ERROR
=
"RP_UO
_
"
;
//修改訂單狀態失敗錯誤碼
public
static
final
String
RP_LOGIN_ERROR
=
"RP_LOGIN"
;
//
修改訂單狀態失敗
錯誤碼
public
static
final
String
RP_THIRE_LOGISTICS_ERROR
=
"RP_WL003"
;
//
第三方物流接口
錯誤碼
public
static
final
String
RP_UPDATE_ORDER_STATE_ERROR
=
"RP_UO
004
"
;
//修改訂單狀態失敗錯誤碼
public
static
final
String
RP_LOGIN_ERROR
=
"RP_LOGIN"
;
//
登陸報錯
錯誤碼
public
static
final
String
SECRETKEY_VALUES
=
"2309485937845783"
;
...
...
base-module/src/main/java/com/gingersoft/gsa/cloud/constans/ExpandConstant.java
View file @
c3c5c732
...
...
@@ -2,7 +2,11 @@ package com.gingersoft.gsa.cloud.constans;
public
class
ExpandConstant
{
public
final
static
String
DeliveryPrintCount
=
"DeliveryPrintCount"
;
public
final
static
String
DeliveryPrintCount
=
"DeliveryPrintCount"
;
//外送印單打印次數
public
final
static
String
DeliveryClosingPC
=
"DeliveryClosingPC"
;
//外送結賬打印次數
public
final
static
String
TableModePrintCount
=
"TableModePrintCount"
;
//餐檯印單打印次數
public
final
static
String
TableModeClosingPC
=
"TableModeClosingPC"
;
//餐檯模式結賬單打印次數
public
final
static
String
Rounding
=
"Rounding"
;
public
final
static
String
RoundingDecimal
=
"RoundingDecimal"
;
...
...
base-module/src/main/java/com/gingersoft/gsa/cloud/print/bean/OrderDetails.kt
View file @
c3c5c732
...
...
@@ -75,9 +75,17 @@ class OrderDetails {
var
order_type
:
Int
=
0
var
orderPayType
:
Int
=
0
//0店內支付,1為貨到付款,2是在線支付
var
isDelete
:
Int
=
1
//默認為1,為0是第三方物流,其他則是本店配送
var
payTime
:
String
?
=
null
//
var
payType
:
Int
=
0
//1:積分支付;2:支付寶;3:财付通;4:微信支付;5:貨到付款;6:其他支付
var
payName
:
String
?
=
null
var
payTime
:
String
?
=
null
var
payAmount
:
Double
=
0.0
//
// var payType2: Int = 0//1:積分支付;2:支付寶;3:财付通;4:微信支付;5:貨到付款;6:其他支付
// var payName2: String? = null
// var payAmount2: Double = 0.0
var
PRODUCT_NAME
:
List
<
PRODUCTNAMEBean
>?
=
null
var
couponList
:
List
<
CouponBean
>?
=
null
...
...
@@ -88,7 +96,7 @@ class OrderDetails {
var
addPoints
:
Double
=
0
.
toDouble
()
//本次加多少積分
var
oldPoints
:
Double
=
0
.
toDouble
()
//之前有多少積分
var
nowPoints
:
Double
=
0
.
toDouble
()
//現在有多少積分
var
orderPayInfoVO
:
List
<
OrderPayAmountVo
>?
=
null
var
curStat
:
Int
=
0
//訂單已創建 1
// * * Order Assigned To Delivery Man - 配送員已接單 2
// * * Delivery Man Reached Pickup Point Nearby - 配送員已到達店鋪附近 3
...
...
@@ -116,12 +124,14 @@ class OrderDetails {
var
PRODUCT_NAME
:
String
?
=
null
var
child
:
List
<
ChildBeanX
>?
=
null
var
printseting
:
String
?
=
null
var
printToBill
:
Int
=
1
//當金額=0時,是否打印在賬單上 0 否 1 是
//0食品清单打印 账单打印
//1食品清单不打印 账单不打印
//2食品清单打印 账单不打印
//3食品清单不打印 账单打印
var
P
rintTo
:
Int
=
0
var
p
rintTo
:
Int
=
0
class
ChildBeanX
:
Serializable
{
/**
...
...
@@ -139,6 +149,12 @@ class OrderDetails {
var
PRODUCT_NAME
:
String
?
=
null
var
child
:
List
<
ChildBean
>?
=
null
var
printseting
:
String
?
=
null
var
printToBill
:
Int
=
1
//當金額=0時,是否打印在賬單上 0 否 1 是
//0食品清单打印 账单打印
//1食品清单不打印 账单不打印
//2食品清单打印 账单不打印
//3食品清单不打印 账单打印
var
printTo
:
Int
=
0
class
ChildBean
:
Serializable
{
/**
...
...
@@ -154,10 +170,17 @@ class OrderDetails {
var
pid
:
String
?
=
null
var
PRODUCT_NAME
:
String
?
=
null
var
printseting
:
String
?
=
null
var
printToBill
:
Int
=
1
//當金額=0時,是否打印在賬單上 0 否 1 是
//0食品清单打印 账单打印
//1食品清单不打印 账单不打印
//2食品清单打印 账单不打印
//3食品清单不打印 账单打印
var
printTo
:
Int
=
0
}
}
}
data class
OrderPayAmountVo
(
var
payTypeId
:
Int
,
var
amount
:
Double
,
var
payName
:
String
)
:
Serializable
data class
CouponBean
(
val
couponName
:
String
,
val
discount_amount
:
Float
)
:
Serializable
}
}
\ No newline at end of file
config.gradle
View file @
c3c5c732
...
...
@@ -7,8 +7,8 @@ ext {
targetSdkVersion
:
28
,
//正式版: 1.0.3 3
//內部測試版:1.2.0 20
versionCode
:
2
0
,
versionName
:
"1.2.
0
"
versionCode
:
2
1
,
versionName
:
"1.2.
1
"
]
version
=
[
...
...
login-module/src/main/java/com/gingersoft/gsa/cloud/login/mvp/presenter/BaseLoginPresenter.java
View file @
c3c5c732
...
...
@@ -85,7 +85,6 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
}
else
{
GsaCloudApplication
.
isLogin
=
false
;
mRootView
.
showMessage
(
info
.
getErrMsg
());
OkHttp3Utils
.
noticePersonnel
(
AppConstans
.
RP_LOGIN_ERROR
,
info
.
getErrMsg
());
if
(
IAcitivity
instanceof
LoginActivity
)
{
...
...
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/WeatherRepository.kt
View file @
c3c5c732
package
com.gingersoft.gsa.other_order_mode.data
import
com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
import
com.gingersoft.gsa.cloud.base.utils.JsonUtils
import
com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils
import
com.gingersoft.gsa.cloud.constans.AppConstans
import
com.gingersoft.gsa.cloud.print.bean.OrderDetails
import
com.gingersoft.gsa.other_order_mode.R
import
com.gingersoft.gsa.other_order_mode.data.model.bean.ThirdItem
import
com.gingersoft.gsa.other_order_mode.data.model.bean.UpdateOrderStatusBean
import
com.gingersoft.gsa.other_order_mode.data.network.CoolWeatherNetwork
import
com.google.gson.Gson
import
com.jess.arms.utils.DeviceUtils
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.withContext
import
okhttp3.FormBody
import
okhttp3.MediaType
import
okhttp3.MultipartBody
import
okhttp3.RequestBody
import
kotlin.Pair
as
Pair1
...
...
@@ -78,11 +84,11 @@ class WeatherRepository private constructor(private val network: CoolWeatherNetw
// }
suspend
fun
gsUpdateOrderStatus
(
orderId
:
String
,
status
:
Int
,
orderType
:
Int
,
type
:
Int
,
sendDate
:
String
?
,
sender
:
String
,
sendmobile
:
String
,
reasonId
:
String
,
reasonDesc
:
String
,
confirmationType
:
Int
,
orderFrom
:
Int
,
payTypeId
:
Int
=
0
)
=
withContext
(
Dispatchers
.
IO
)
{
suspend
fun
gsUpdateOrderStatus
(
orderId
:
Int
,
status
:
Int
,
orderType
:
Int
,
type
:
Int
,
sendDate
:
String
=
""
,
sender
:
String
=
""
,
sendmobile
:
String
=
""
,
reasonId
:
String
=
""
,
reasonDesc
:
String
=
""
,
confirmationType
:
Int
=
1
,
orderFrom
:
Int
=
0
)
=
withContext
(
Dispatchers
.
IO
)
{
val
requestBody
=
FormBody
.
Builder
()
.
add
(
"orderId"
,
orderId
)
//訂單id
.
add
(
"orderId"
,
orderId
.
toString
()
)
//訂單id
.
add
(
"status"
,
status
.
toString
())
//订单状态#0:未支付;1:待確認(已支付, 待餐廳確認);2:制作中(餐廳确認);3:派送中;4:确認收貨(完成);5:是否評論;6:取消;
.
add
(
"orderType"
,
orderType
.
toString
())
//訂單類型#1:餐廳訂單;2:線上外賣訂單3:扫码点餐;4固定二维码订单;5:预点餐;6:積分訂單;7:自取订单'
.
add
(
"type"
,
type
.
toString
())
//通知類型:1.未定,2:外賣
...
...
@@ -91,13 +97,21 @@ class WeatherRepository private constructor(private val network: CoolWeatherNetw
.
add
(
"sendmobile"
,
sendmobile
)
//送餐員電話
.
add
(
"reasonId"
,
reasonId
)
//原因id
.
add
(
"reasonDesc"
,
reasonDesc
)
//原因描敘
.
add
(
"payTypeId"
,
payTypeId
.
toString
())
.
add
(
"confirmationType"
,
confirmationType
.
toString
())
//接單類型,1 手動接單 2,自動接單
.
add
(
"orderFrom"
,
orderFrom
.
toString
())
//订单来源#1:ios;2:安卓;3:gspos;4:web;5:第三方POS A;6:第三方POS B;
.
build
()
network
.
gsUpdateOrderStatus
(
requestBody
)
}
suspend
fun
updateOrderPay
(
orderId
:
Int
,
status
:
Int
,
orderType
:
Int
,
type
:
Int
,
sendDate
:
String
=
""
,
sender
:
String
=
""
,
sendmobile
:
String
=
""
,
reasonId
:
String
=
""
,
reasonDesc
:
String
=
""
,
confirmationType
:
Int
=
1
,
orderFrom
:
Int
=
0
,
orderPayInfoVO
:
List
<
OrderDetails
.
DataBean
.
OrderPayAmountVo
>?
=
null
)
=
withContext
(
Dispatchers
.
IO
)
{
val
updateOrderStatusBean
=
UpdateOrderStatusBean
(
orderFrom
,
orderId
,
orderPayInfoVO
,
sendDate
,
sender
,
sendmobile
,
status
,
type
,
orderType
,
reasonId
,
reasonDesc
,
confirmationType
)
val
payRequest
=
GsonUtils
.
GsonString
(
updateOrderStatusBean
)
val
requestBody
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json"
),
payRequest
)
network
.
updateOrderPay
(
requestBody
)
}
suspend
fun
updateIsRead
(
orderId
:
String
)
=
withContext
(
Dispatchers
.
IO
)
{
network
.
updateIsRead
(
getBody
(
"id"
to
orderId
))
}
...
...
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/model/bean/UpdateOrderStatusBean.kt
0 → 100644
View file @
c3c5c732
package
com.gingersoft.gsa.other_order_mode.data.model.bean
import
com.gingersoft.gsa.cloud.print.bean.OrderDetails
/**
* 更新訂單狀態提交數據類
* http://gingersoft.tpddns.cn:53000/project/24/interface/api/5716
*/
data class
UpdateOrderStatusBean
(
var
orderFrom
:
Int
,
var
orderId
:
Int
,
var
orderPayInfoVO
:
List
<
OrderDetails
.
DataBean
.
OrderPayAmountVo
>?,
var
sendDate
:
String
,
var
sender
:
String
,
var
sendmobile
:
String
,
var
status
:
Int
,
var
type
:
Int
,
var
orderType
:
Int
,
var
reasonId
:
String
,
var
reasonDesc
:
String
,
var
confirmationType
:
Int
)
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/network/CoolWeatherNetwork.kt
View file @
c3c5c732
...
...
@@ -2,7 +2,6 @@ package com.gingersoft.gsa.other_order_mode.data.network
import
com.gingersoft.gsa.other_order_mode.data.network.api.AppService
import
com.gingersoft.gsa.other_order_mode.data.network.api.WeatherService
import
okhttp3.FormBody
import
okhttp3.RequestBody
import
retrofit2.Call
import
retrofit2.Callback
...
...
@@ -22,6 +21,9 @@ class CoolWeatherNetwork {
private
val
gsposService
=
ServiceCreator
.
create3
(
WeatherService
::
class
.
java
)
private
val
cloudService
=
ServiceCreator
.
create4
(
WeatherService
::
class
.
java
)
private
val
orderPayService
=
ServiceCreator
.
create5
(
WeatherService
::
class
.
java
)
//獲取訂單列表
suspend
fun
fetchOrderList
(
requestBody
:
RequestBody
)
=
orderService
.
getOrderList
(
requestBody
).
await
()
...
...
@@ -43,6 +45,9 @@ class CoolWeatherNetwork {
//gspost修改訂單狀態
suspend
fun
gsUpdateOrderStatus
(
requestBody
:
RequestBody
)
=
service
.
gsUpdateOrderStatus
(
requestBody
).
await
()
//支付
suspend
fun
updateOrderPay
(
requestBody
:
RequestBody
)
=
orderPayService
.
updateOrderPay
(
requestBody
).
await
()
//第三方配送接口
suspend
fun
thirdDelivery
(
requestBody
:
RequestBody
)
=
gsposService
.
thirdDelivery
(
requestBody
).
await
()
...
...
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/network/ServiceCreator.kt
View file @
c3c5c732
...
...
@@ -31,6 +31,9 @@ object ServiceCreator {
private
var
BASE_URL
=
"$ROOT_URL/ricepon-wechat/api/"
private
var
BASE_URL2
=
"$ROOT_URL/member-web/api/"
private
var
BASE_URL3
=
"$ROOT_URL/member-web/ricepon-gsa/api/"
private
var
BASE_URL4
=
"$ROOT_URL/ricepon-order/api/"
private
val
builder
=
Retrofit
.
Builder
()
.
baseUrl
(
BASE_URL
)
.
client
(
httpClient
.
build
())
...
...
@@ -55,6 +58,11 @@ object ServiceCreator {
.
addConverterFactory
(
ScalarsConverterFactory
.
create
())
.
addConverterFactory
(
GsonConverterFactory
.
create
())
private
val
builder5
=
Retrofit
.
Builder
()
.
baseUrl
(
BASE_URL4
)
.
client
(
httpClient
.
build
())
.
addConverterFactory
(
ScalarsConverterFactory
.
create
())
.
addConverterFactory
(
GsonConverterFactory
.
create
())
fun
<
T
>
create
(
serviceClass
:
Class
<
T
>):
T
=
builder
.
build
().
create
(
serviceClass
)
fun
<
T
>
create2
(
serviceClass
:
Class
<
T
>):
T
=
builder2
.
build
().
create
(
serviceClass
)
...
...
@@ -63,6 +71,8 @@ object ServiceCreator {
fun
<
T
>
create4
(
serviceClass
:
Class
<
T
>):
T
=
builder4
.
build
().
create
(
serviceClass
)
fun
<
T
>
create5
(
serviceClass
:
Class
<
T
>):
T
=
builder5
.
build
().
create
(
serviceClass
)
/**
* 添加请求头
*/
...
...
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/data/network/api/WeatherService.kt
View file @
c3c5c732
...
...
@@ -30,6 +30,9 @@ interface WeatherService {
@POST
(
"order/updateOrderStatus"
)
fun
gsUpdateOrderStatus
(
@Body
requestBody
:
RequestBody
):
Call
<
MessageBean
>
@POST
(
"order/updateOrderPay"
)
fun
updateOrderPay
(
@Body
requestBody
:
RequestBody
):
Call
<
MessageBean
>
@POST
(
"gsa/shipAnyOrdersNew"
)
fun
thirdDelivery
(
@Body
requestBody
:
RequestBody
):
Call
<
ThirdSend
>
...
...
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/model/viewModel/PageViewModel.kt
View file @
c3c5c732
...
...
@@ -15,6 +15,7 @@ import androidx.recyclerview.widget.GridLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
com.billy.cc.core.component.CC
import
com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
import
com.gingersoft.gsa.cloud.base.common.bean.PayMethod
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage
import
com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils
import
com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils
...
...
@@ -35,6 +36,9 @@ import com.jess.arms.utils.ArmsUtils
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
import
org.json.JSONArray
import
org.json.JSONException
import
org.json.JSONObject
import
java.lang.NullPointerException
class
PageViewModel
(
private
val
repository
:
WeatherRepository
)
:
ViewModel
()
{
...
...
@@ -319,7 +323,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
BtnBuilder
.
ProductionCompletedBtn
->
{
//製作完成
repository
.
gsUpdateOrderStatus
(
dataBean
.
ID
.
toString
()
,
3
,
dataBean
.
order_type
,
1
,
""
,
""
,
""
,
"0"
,
""
,
1
,
0
).
apply
{
repository
.
gsUpdateOrderStatus
(
dataBean
.
ID
,
3
,
dataBean
.
order_type
,
1
,
""
,
""
,
""
,
"0"
,
""
,
1
,
0
).
apply
{
listener
.
invoke
(
getMsgBean
(
ProductionComplete
,
errorMsg
,
code
==
"1"
))
}
}
...
...
@@ -333,12 +337,39 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
})
}
fun
closingBill
(
orderDetails
:
OrderDetails
.
DataBean
,
payMethods
:
List
<
PayMethod
>,
listener
:
(
Int
,
Boolean
)
->
Unit
)
{
launch
({
val
orderPayInfoVO
=
ArrayList
<
OrderDetails
.
DataBean
.
OrderPayAmountVo
>()
payMethods
.
forEach
{
orderPayInfoVO
.
add
(
OrderDetails
.
DataBean
.
OrderPayAmountVo
(
it
.
id
,
it
.
payMoney
,
it
.
payName
))
}
repository
.
updateOrderPay
(
orderDetails
.
ID
,
4
,
orderDetails
.
order_type
,
3
,
orderPayInfoVO
=
orderPayInfoVO
).
apply
{
orderDetails
.
orderPayInfoVO
=
orderPayInfoVO
orderDetails
.
payTime
=
TimeUtils
.
getCurrentTimeInString
(
TimeUtils
.
DEFAULT_DATE_FORMAT
)
val
bean
=
GsonUtils
.
GsonToBean
(
GsonUtils
.
GsonString
(
data
),
OrderClosingBean
::
class
.
java
)
if
(
bean
!=
null
)
{
orderDetails
.
oldPoints
=
bean
.
oldPoints
orderDetails
.
nowPoints
=
bean
.
nowPoints
orderDetails
.
addPoints
=
bean
.
addPoints
}
printOrderClosing
(
orderDetails
,
listener
)
}
},
{
listener
.
invoke
(
OrderDelivery
,
false
)
it
.
printStackTrace
()
Log
.
e
(
"eee"
,
"gsUpdateOrderStatus報錯:"
+
it
.
message
)
// integralBean.postValue(null)
})
}
fun
gsUpdateOrderStatus
(
orderDetails
:
OrderDetails
.
DataBean
,
payTypeId
:
Int
=
0
,
payName
:
String
?,
listener
:
(
Int
,
Boolean
)
->
Unit
)
{
fun
gsUpdateOrderStatus
(
orderDetails
:
OrderDetails
.
DataBean
,
orderPayInfoVO
:
List
<
OrderDetails
.
DataBean
.
OrderPayAmountVo
>?,
listener
:
(
Int
,
Boolean
)
->
Unit
)
{
launch
({
repository
.
gsUpdateOrderStatus
(
orderDetails
.
ID
.
toString
(),
4
,
orderDetails
.
order_type
,
3
,
""
,
""
,
""
,
"0"
,
""
,
1
,
0
,
payTypeId
).
apply
{
orderDetails
.
payType
=
payTypeId
orderDetails
.
payName
=
payName
repository
.
gsUpdateOrderStatus
(
orderDetails
.
ID
,
4
,
orderDetails
.
order_type
,
3
,
orderFrom
=
0
).
apply
{
orderDetails
.
orderPayInfoVO
=
orderPayInfoVO
// orderDetails.payType = payTypeId
// orderDetails.payName = payName
orderDetails
.
payTime
=
TimeUtils
.
getCurrentTimeInString
(
TimeUtils
.
DEFAULT_DATE_FORMAT
)
val
bean
=
GsonUtils
.
GsonToBean
(
GsonUtils
.
GsonString
(
data
),
OrderClosingBean
::
class
.
java
)
orderDetails
.
oldPoints
=
bean
.
oldPoints
...
...
@@ -354,12 +385,24 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
})
}
fun
converToJson
(
vararg
pair
:
Pair
<
String
,
String
>):
String
{
val
array
=
JSONArray
()
array
.
apply
{
pair
.
forEach
{
val
obj
=
JSONObject
()
obj
.
put
(
it
.
first
,
it
.
second
)
put
(
obj
)
}
}
return
array
.
toString
()
}
/**
* 修改訂單狀態並打印
*/
private
suspend
fun
updateOrderAndPrint
(
restaurantId
:
String
,
dataBean
:
OrderDetails
.
DataBean
,
status
:
Int
,
listener
:
(
MessageBean
)
->
Unit
)
{
launch
({
repository
.
gsUpdateOrderStatus
(
dataBean
.
ID
.
toString
()
,
status
,
dataBean
.
order_type
,
1
,
""
,
""
,
""
,
"0"
,
""
,
1
,
0
).
apply
{
repository
.
gsUpdateOrderStatus
(
dataBean
.
ID
,
status
,
dataBean
.
order_type
,
1
,
""
,
""
,
""
,
"0"
,
""
,
1
,
0
).
apply
{
if
(
status
==
0
||
status
==
1
||
status
==
2
)
{
//確認送單
//添加數據到prj
...
...
@@ -385,6 +428,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
}
launch
({
//添加PRJ
//單獨包起來,哪怕這接口報錯也不要影響到正常的邏輯
repository
.
addPrj
(
dataBean
.
Order_ID
.
toString
(),
restaurantId
,
ids
.
toString
())
GetInfoUpdateService
.
loginfo
.
append
(
"添加PRJ:orderId:"
+
dataBean
.
Order_ID
.
toString
()
+
"restaurantId:"
+
restaurantId
+
"orderDetailsIds:"
+
ids
.
toString
())
...
...
@@ -417,7 +461,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
}
},
{
OkHttp3Utils
.
noticePersonnel
(
AppConstans
.
RP_UPDATE_ORDER_STATE_ERROR
+
status
,
it
.
message
)
OkHttp3Utils
.
noticePersonnel
(
AppConstans
.
RP_UPDATE_ORDER_STATE_ERROR
,
"訂單狀態"
+
status
+
it
.
message
)
listener
.
invoke
(
getMsgBean
(
OrderDelivery
,
""
,
false
))
})
}
...
...
@@ -548,7 +592,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
confirmBtn
.
setOnClickListener
{
if
(
selectIndex
!=
-
1
)
{
launch
({
repository
.
gsUpdateOrderStatus
(
dataBean
.
ID
.
toString
()
,
status
,
dataBean
.
order_type
,
1
,
""
,
deliveryBean
!!
.
data
[
deliveryAdapter
.
selectIndex
].
userName
,
deliveryBean
!!
.
data
[
deliveryAdapter
.
selectIndex
].
mobile
,
"0"
,
""
,
1
,
0
).
apply
{
repository
.
gsUpdateOrderStatus
(
dataBean
.
ID
,
status
,
dataBean
.
order_type
,
1
,
""
,
deliveryBean
!!
.
data
[
deliveryAdapter
.
selectIndex
].
userName
,
deliveryBean
!!
.
data
[
deliveryAdapter
.
selectIndex
].
mobile
,
"0"
,
""
,
1
,
0
).
apply
{
if
(
code
==
"1"
)
{
dialog
?.
dismiss
()
//回調
...
...
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/ui/activity/OrderDetailsActivity.kt
View file @
c3c5c732
...
...
@@ -144,7 +144,7 @@ class OrderDetailsActivity : BaseActivity() {
btnList
.
add
(
BtnBuilder
().
getSureBtn
())
btnList
.
add
(
BtnBuilder
().
getCancelBtn
())
orderStatusText
=
"待確認"
tv_order_state
.
setTextColor
(
resources
.
getColor
(
R
.
color
.
order_state0_color
))
tv_order_state
.
setTextColor
(
ContextCompat
.
getColor
(
this
@OrderDetailsActivity
,
R
.
color
.
order_state0_color
))
}
}
if
(
orderDetails
.
orderPayType
==
2
&&
orderDetails
.
payName
!=
null
)
{
...
...
@@ -178,7 +178,7 @@ class OrderDetailsActivity : BaseActivity() {
BtnBuilder
.
closingBtn
->
{
//如果是在線支付的訂單,就直接修改訂單狀態
if
(
orderPayType
!=
1
)
{
gsUpdateOrderStatus
(
orderDetails
,
orderDetails
.
order_type
,
orderDetails
.
payName
)
{
status
,
isSuccess
->
gsUpdateOrderStatus
(
orderDetails
,
null
)
{
status
,
isSuccess
->
if
(
isSuccess
)
{
finish
()
}
else
{
...
...
other_order_mode/src/main/java/com/gingersoft/gsa/other_order_mode/ui/activity/PayActivity.kt
View file @
c3c5c732
...
...
@@ -71,11 +71,18 @@ class PayActivity : BaseActivity() {
hepler
.
getView
<
TextView
>(
R
.
id
.
tv_dialog_confirm
).
setOnClickListener
{
dialog
.
dismiss
()
showLoading
()
pageViewModel
.
gsUpdateOrderStatus
(
orderDetails
,
payMethods
[
0
].
id
,
payMethods
[
0
].
name
)
{
_
,
_
->
pageViewModel
.
closingBill
(
orderDetails
,
payMethods
){
_
,
_
->
cancelDialogForLoading
()
setResult
(
RESULT_OK
)
finish
()
}
// pageViewModel.gsUpdateOrderStatus(orderDetails, payMethods[0].id, payMethods[0].name) { _, _ ->
// cancelDialogForLoading()
// setResult(RESULT_OK)
// finish()
// }
}
hepler
.
getView
<
TextView
>(
R
.
id
.
tv_dialog_cancel
).
setOnClickListener
{
dialog
.
dismiss
()
...
...
print-module/src/main/java/com/joe/print/mvp/print/EpsonPrint.java
View file @
c3c5c732
...
...
@@ -43,13 +43,13 @@ public class EpsonPrint implements ReceiveListener {
* @return
*/
public
boolean
initializeObject
(
Context
context
,
ReceiveListener
receiveListener
)
{
if
(
mPrinter
!=
null
)
{
return
true
;
}
//
if (mPrinter != null) {
//
return true;
//
}
try
{
this
.
receiveListener
=
receiveListener
;
//第一個參數是機型,第二個參數是語言,
mPrinter
=
new
Printer
(
Printer
.
TM_U220
,
Printer
.
MODEL_
TAIW
AN
,
context
);
mPrinter
=
new
Printer
(
Printer
.
TM_U220
,
Printer
.
MODEL_
KORE
AN
,
context
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
...
...
@@ -295,7 +295,6 @@ public class EpsonPrint implements ReceiveListener {
}
mPrinter
.
addFeedLine
(
1
);
}
mPrinter
.
addPulse
(
Printer
.
DRAWER_LOW
,
Printer
.
PULSE_100
);
mPrinter
.
addCut
(
Printer
.
CUT_FEED
);
mPrinter
.
sendData
(
Printer
.
PARAM_DEFAULT
);
}
catch
(
Exception
e
)
{
...
...
@@ -304,13 +303,14 @@ public class EpsonPrint implements ReceiveListener {
mPrinter
.
clearCommandBuffer
();
}
}
private
int
location
=
0
;
private
void
print
(
PrintInfoBean
printInfoBean
,
int
i
,
int
paperWidth
)
throws
Epos2Exception
{
if
(
i
==
0
)
{
location
=
0
;
}
int
textSize
=
(
int
)
MyPrintUtils
.
getContentByLength
(
printInfoBean
.
getSize
(),
i
);
int
textSize
=
Double
.
valueOf
(
String
.
valueOf
(
MyPrintUtils
.
getContentByLength
(
printInfoBean
.
getSize
(),
i
))).
intValue
(
);
//是否傾斜字體
int
isItalic
=
((
Boolean
)
MyPrintUtils
.
getContentByLength
(
printInfoBean
.
getIsItalic
(),
i
))
?
1
:
0
;
...
...
print-module/src/main/java/com/joe/print/mvp/print/LocationPrintStatus.java
View file @
c3c5c732
...
...
@@ -68,7 +68,6 @@ public class LocationPrintStatus {
switch
(
status
)
{
case
0
:
//可以打印
// N5PrintCallback printCallBack = new N5PrintCallback(context);
// PrinterUtil.registerCallback(printCallBack);
return
true
;
case
-
1009
:
//打印未完成
String
notCompleted
=
LanguageUtils
.
get_language_system
(
context
,
"print.not.completed"
,
"打印未完成"
);
...
...
print-module/src/main/java/com/joe/print/mvp/print/PrintBill.java
View file @
c3c5c732
...
...
@@ -12,7 +12,10 @@ import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage
;
import
com.gingersoft.gsa.cloud.base.utils.MoneyUtil
;
import
com.gingersoft.gsa.cloud.base.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.constans.ExpandConstant
;
import
com.gingersoft.gsa.cloud.database.bean.ExpandInfo
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.database.utils.ExpandInfoDaoUtils
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
...
...
@@ -36,6 +39,15 @@ public class PrintBill extends PrinterRoot {
@Override
public
int
getPrintCount
(
Context
context
)
{
ExpandInfoDaoUtils
expandInfoDaoUtils
=
new
ExpandInfoDaoUtils
(
context
);
List
<
ExpandInfo
>
expandInfos
=
expandInfoDaoUtils
.
queryAllExpandInfo
();
if
(
expandInfos
!=
null
)
{
for
(
ExpandInfo
expandInfo
:
expandInfos
)
{
if
(
expandInfo
.
getSettingName
().
equals
(
ExpandConstant
.
TableModeClosingPC
))
{
return
expandInfo
.
getValueInt
();
}
}
}
return
1
;
}
...
...
print-module/src/main/java/com/joe/print/mvp/print/PrintOtherOrder.java
View file @
c3c5c732
...
...
@@ -52,7 +52,9 @@ public class PrintOtherOrder extends PrinterRoot {
List
<
Bitmap
>
bitmaps
=
new
ArrayList
<>();
// Bitmap bitmap = initPrintView(mContext, dataBean);
Bitmap
bitmap
=
getBitmap
(
mContext
,
dataBean
,
deviceBean
);
// for (int i = 0; i < getPrintCount(mContext); i++) {
bitmaps
.
add
(
bitmap
);
// }
merge2ResultMap
(
bitmapMaps
,
""
,
bitmaps
);
return
bitmapMaps
;
}
...
...
@@ -63,15 +65,14 @@ public class PrintOtherOrder extends PrinterRoot {
public
int
getPrintCount
(
Context
context
)
{
ExpandInfoDaoUtils
expandInfoDaoUtils
=
new
ExpandInfoDaoUtils
(
context
);
List
<
ExpandInfo
>
expandInfos
=
expandInfoDaoUtils
.
queryAllExpandInfo
();
int
printCount
=
1
;
if
(
expandInfos
!=
null
)
{
for
(
ExpandInfo
expandInfo
:
expandInfos
)
{
if
(
expandInfo
.
getSettingName
().
equals
(
ExpandConstant
.
DeliveryPrintCount
))
{
printCount
=
expandInfo
.
getValueInt
();
return
expandInfo
.
getValueInt
();
}
}
}
return
printCount
;
return
1
;
}
private
void
addCountBitmap
(
List
<
Bitmap
>
bitmaps
,
int
count
,
Bitmap
bitmap
)
{
...
...
@@ -138,7 +139,7 @@ public class PrintOtherOrder extends PrinterRoot {
layout
.
addView
(
getTakeawayOrderInfo
(
mContext
,
data
));
//食品
layout
.
addView
(
getTextLine
(
mContext
,
"項目"
));
layout
.
addView
(
getDiningFoodList
(
mContext
,
OrderDetail
.
productMameBeanToOrderDetail
(
0
,
data
.
getPRODUCT_NAME
()),
deviceBean
,
1
,
true
));
layout
.
addView
(
getDiningFoodList
(
mContext
,
OrderDetail
.
productMameBeanToOrderDetail
(
0
,
data
.
getPRODUCT_NAME
()),
deviceBean
,
1
,
true
));
layout
.
addView
(
getLine
(
mContext
));
//訂單金額信息
List
<
PrintBillBean
>
billData
=
new
ArrayList
<>();
...
...
@@ -163,26 +164,12 @@ public class PrintOtherOrder extends PrinterRoot {
layout
.
addView
(
getTakeawayLargeAmount
(
mContext
,
"支付金額:"
,
MONETARY_UNIT
+
MoneyUtil
.
sub
(
Double
.
parseDouble
(
data
.
getTOTAL_AMOUNT
()),
data
.
getDiscount_amount
())
+
""
));
layout
.
addView
(
getLine
(
mContext
));
//用戶信息
String
address
=
""
;
String
receiver
=
""
;
if
(
data
.
getOrder_type
()
==
2
)
{
//收貨地址
address
=
"地址:"
+
data
.
getAddressDetail
();
//收貨人
receiver
=
"收貨人:"
+
data
.
getRECEIVER
();
}
if
(!
TextUtil
.
isEmptyOrNullOrUndefined
(
address
))
{
layout
.
addView
(
getTakeawayTextView
(
mContext
,
address
));
}
if
(!
TextUtil
.
isEmptyOrNullOrUndefined
(
receiver
))
{
layout
.
addView
(
getTakeawayTextView
(
mContext
,
receiver
));
}
layout
.
addView
(
getTakeawayTextView
(
mContext
,
"手機號:"
+
data
.
getPHONE
()));
getTakeawayReceiver
(
mContext
,
data
,
layout
);
//尾部
return
viewToZoomBitmap
(
mContext
,
layout
,
deviceBean
);
}
private
Bitmap
initPrintView
(
Context
context
,
OrderDetails
.
DataBean
data
)
{
View
view
=
LayoutInflater
.
from
(
context
).
inflate
(
R
.
layout
.
print_confirm_order_view
,
null
,
false
);
TextView
tvOrderClosing
=
view
.
findViewById
(
R
.
id
.
tv_order_closing
);
...
...
print-module/src/main/java/com/joe/print/mvp/print/PrintOtherOrderClosing.java
View file @
c3c5c732
...
...
@@ -4,14 +4,17 @@ import android.content.Context;
import
android.graphics.Bitmap
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
;
import
com.gingersoft.gsa.cloud.base.common.bean.OrderDetail
;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage
;
import
com.gingersoft.gsa.cloud.base.utils.MoneyUtil
;
import
com.gingersoft.gsa.cloud.base.utils.other.TextUtil
;
import
com.gingersoft.gsa.cloud.base.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.constans.ExpandConstant
;
import
com.gingersoft.gsa.cloud.database.bean.ExpandInfo
;
...
...
@@ -39,7 +42,7 @@ public class PrintOtherOrderClosing extends PrinterRoot {
if
(
dataBean
!=
null
)
{
Map
<
String
,
List
<
Bitmap
>>
bitmapMaps
=
new
HashMap
<>();
List
<
Bitmap
>
bitmaps
=
new
ArrayList
<>();
bitmaps
.
add
(
initPrintView
(
mContext
,
dataBean
,
deviceBean
));
bitmaps
.
add
(
getBitmap
(
mContext
,
dataBean
,
deviceBean
));
bitmapMaps
.
put
(
""
,
bitmaps
);
return
bitmapMaps
;
}
...
...
@@ -50,15 +53,14 @@ public class PrintOtherOrderClosing extends PrinterRoot {
public
int
getPrintCount
(
Context
context
)
{
ExpandInfoDaoUtils
expandInfoDaoUtils
=
new
ExpandInfoDaoUtils
(
context
);
List
<
ExpandInfo
>
expandInfos
=
expandInfoDaoUtils
.
queryAllExpandInfo
();
int
printCount
=
1
;
if
(
expandInfos
!=
null
)
{
for
(
ExpandInfo
expandInfo
:
expandInfos
)
{
if
(
expandInfo
.
getSettingName
().
equals
(
ExpandConstant
.
Delivery
PrintCount
))
{
printCount
=
expandInfo
.
getValueInt
();
if
(
expandInfo
.
getSettingName
().
equals
(
ExpandConstant
.
Delivery
ClosingPC
))
{
return
expandInfo
.
getValueInt
();
}
}
}
return
printCount
;
return
1
;
}
private
Bitmap
initPrintView
(
Context
context
,
OrderDetails
.
DataBean
data
,
PrinterDeviceBean
deviceBean
)
{
...
...
@@ -72,6 +74,7 @@ public class PrintOtherOrderClosing extends PrinterRoot {
TextView
lineMember
=
view
.
findViewById
(
R
.
id
.
line_member_info
);
TextView
tvOrderClosing
=
view
.
findViewById
(
R
.
id
.
tv_order_closing
);
TextView
tvBillNumber
=
view
.
findViewById
(
R
.
id
.
tv_bill_number
);
TextView
tvPayMethodTwo
=
view
.
findViewById
(
R
.
id
.
tv_pay_amount_text_two
);
//品牌名
setText
(
view
,
R
.
id
.
tv_brand_name
,
GsaCloudApplication
.
getBrandName
(
context
));
//餐廳名
...
...
@@ -134,7 +137,8 @@ public class PrintOtherOrderClosing extends PrinterRoot {
setText
(
view
,
R
.
id
.
tv_pay_type
,
"店內支付"
);
}
else
if
(
data
.
getOrderPayType
()
==
2
)
{
setText
(
view
,
R
.
id
.
tv_pay_type
,
"在線支付"
);
setText
(
view
,
R
.
id
.
tv_pay_amount_text
,
data
.
getPayName
()
+
":"
+
amountUnit
+
MoneyUtil
.
sub
(
Double
.
parseDouble
(
data
.
getTOTAL_AMOUNT
()),
data
.
getDiscount_amount
()));
// setText(view, R.id.tv_pay_amount_text, data.getPayName() + ":" + amountUnit + MoneyUtil.sub(Double.parseDouble(data.getTOTAL_AMOUNT()), data.getDiscount_amount()));
setText
(
view
,
R
.
id
.
tv_pay_amount_text
,
data
.
getPayName
()
+
":"
+
amountUnit
+
data
.
getPayAmount
());
}
if
(
data
.
getPayTime
()
!=
null
)
{
tvOrderClosing
.
setText
(
"結賬時間:"
+
data
.
getPayTime
());
...
...
@@ -188,11 +192,58 @@ public class PrintOtherOrderClosing extends PrinterRoot {
return
viewToZoomBitmap
(
context
,
view
,
deviceBean
);
}
private
Bitmap
getBitmap
(
Context
mContext
,
OrderDetails
.
DataBean
data
,
PrinterDeviceBean
deviceBean
)
{
LinearLayout
layout
=
new
LinearLayout
(
mContext
);
layout
.
setOrientation
(
LinearLayout
.
VERTICAL
);
//頭部
layout
.
addView
(
getHeader
(
mContext
));
//訂單信息
layout
.
addView
(
getTakeawayOrderInfo
(
mContext
,
data
));
//食品
layout
.
addView
(
getTextLine
(
mContext
,
"項目"
));
layout
.
addView
(
getDiningFoodList
(
mContext
,
OrderDetail
.
productMameBeanToOrderDetail
(
1
,
data
.
getPRODUCT_NAME
()),
deviceBean
,
1
,
true
));
layout
.
addView
(
getLine
(
mContext
));
//訂單金額信息
List
<
PrintBillBean
>
billData
=
new
ArrayList
<>();
billData
.
add
(
getBillBean
(
"合計:"
,
MONETARY_UNIT
+
MoneyUtil
.
sub
(
MoneyUtil
.
sub
(
Double
.
parseDouble
(
data
.
getTOTAL_AMOUNT
()),
data
.
getLunchbox
()),
data
.
getDELIVERY_CHARGE
())));
if
(
data
.
getLunchbox
()
!=
0
)
{
billData
.
add
(
getBillBean
(
"餐盒費:"
,
MONETARY_UNIT
+
data
.
getLunchbox
()));
}
if
(
data
.
getDELIVERY_CHARGE
()
!=
0
)
{
billData
.
add
(
getBillBean
(
"送貨費:"
,
MONETARY_UNIT
+
data
.
getDELIVERY_CHARGE
()));
}
if
(
data
.
getCouponList
()
!=
null
&&
data
.
getCouponList
().
size
()
>
0
)
{
for
(
OrderDetails
.
DataBean
.
CouponBean
coupon
:
data
.
getCouponList
())
{
billData
.
add
(
getBillBean
(
coupon
.
getCouponName
()
+
":"
,
"-"
+
MONETARY_UNIT
+
coupon
.
getDiscount_amount
()));
}
}
layout
.
addView
(
getTakeawayBillInfoView
(
mContext
,
billData
));
layout
.
addView
(
getLine
(
mContext
));
//總金額34sp
layout
.
addView
(
getTakeawayLargeAmount
(
mContext
,
"總金額:"
,
MONETARY_UNIT
+
data
.
getTOTAL_AMOUNT
()));
layout
.
addView
(
getLine
(
mContext
));
//多種支付方式
if
(
data
.
getOrderPayInfoVO
()
!=
null
){
for
(
OrderDetails
.
DataBean
.
OrderPayAmountVo
orderPayAmountVo
:
data
.
getOrderPayInfoVO
())
{
layout
.
addView
(
getTakeawayLargeAmount
(
mContext
,
orderPayAmountVo
.
getPayName
(),
MONETARY_UNIT
+
orderPayAmountVo
.
getAmount
()));
}
}
// layout.addView(getTakeawayLargeAmount(mContext, "支付金額:", MONETARY_UNIT + MoneyUtil.sub(Double.parseDouble(data.getTOTAL_AMOUNT()), data.getDiscount_amount()) + ""));
layout
.
addView
(
getLine
(
mContext
));
//會員信息
layout
.
addView
(
getTakeawayMemberIntegerView
(
mContext
,
data
));
layout
.
addView
(
getLine
(
mContext
));
getTakeawayReceiver
(
mContext
,
data
,
layout
);
return
viewToZoomBitmap
(
mContext
,
layout
,
deviceBean
);
}
private
PrintBillBean
getBillBean
(
String
title
,
String
value
)
{
return
new
PrintBillBean
(
title
,
value
);
}
private
String
getReplaceAfter
(
String
str
)
{
if
(
str
!=
null
&&
str
.
length
()
>
0
)
{
int
replaceStrCount
=
str
.
length
()
/
2
;
...
...
@@ -210,4 +261,5 @@ public class PrintOtherOrderClosing extends PrinterRoot {
return
""
;
}
}
\ No newline at end of file
print-module/src/main/java/com/joe/print/mvp/print/PrintSlip.java
View file @
c3c5c732
...
...
@@ -12,7 +12,10 @@ import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage
;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage
;
import
com.gingersoft.gsa.cloud.base.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.constans.ExpandConstant
;
import
com.gingersoft.gsa.cloud.database.bean.ExpandInfo
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.database.utils.ExpandInfoDaoUtils
;
import
com.joe.print.R
;
import
java.util.ArrayList
;
...
...
@@ -44,6 +47,15 @@ public class PrintSlip extends PrinterRoot {
@Override
public
int
getPrintCount
(
Context
context
)
{
ExpandInfoDaoUtils
expandInfoDaoUtils
=
new
ExpandInfoDaoUtils
(
context
);
List
<
ExpandInfo
>
expandInfos
=
expandInfoDaoUtils
.
queryAllExpandInfo
();
if
(
expandInfos
!=
null
)
{
for
(
ExpandInfo
expandInfo
:
expandInfos
)
{
if
(
expandInfo
.
getSettingName
().
equals
(
ExpandConstant
.
TableModePrintCount
))
{
return
expandInfo
.
getValueInt
();
}
}
}
return
1
;
}
...
...
print-module/src/main/java/com/joe/print/mvp/print/PrintTest.java
View file @
c3c5c732
...
...
@@ -2,12 +2,15 @@ package com.joe.print.mvp.print;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.view.Gravity
;
import
android.view.View
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
com.gingersoft.gsa.cloud.base.common.bean.OrderDetail
;
import
com.gingersoft.gsa.cloud.base.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.print.bean.OrderDetails
;
import
com.joe.print.R
;
import
java.util.ArrayList
;
...
...
@@ -25,7 +28,7 @@ public class PrintTest extends PrinterRoot {
public
Map
<
String
,
List
<
Bitmap
>>
getPrintBitmap
(
Context
mContext
,
PrinterDeviceBean
deviceBean
)
{
Map
<
String
,
List
<
Bitmap
>>
bitmapMaps
=
new
HashMap
<>();
List
<
Bitmap
>
bitmaps
=
new
ArrayList
<>();
bitmaps
.
add
(
get
TestPrint
Bitmap
(
mContext
,
deviceBean
));
bitmaps
.
add
(
getBitmap
(
mContext
,
deviceBean
));
bitmapMaps
.
put
(
""
,
bitmaps
);
return
bitmapMaps
;
}
...
...
@@ -49,4 +52,33 @@ public class PrintTest extends PrinterRoot {
return
viewToZoomBitmap
(
context
,
view
,
deviceBean
);
}
public
Bitmap
getBitmap
(
Context
mContext
,
PrinterDeviceBean
deviceBean
){
LinearLayout
layout
=
new
LinearLayout
(
mContext
);
layout
.
setOrientation
(
LinearLayout
.
VERTICAL
);
layout
.
addView
(
getTextView
(
mContext
,
"炒爐打印測試"
,
Gravity
.
CENTER_HORIZONTAL
,
getDimensionPixelSize
(
mContext
,
R
.
dimen
.
dp_10
)));
layout
.
addView
(
getTextView
(
mContext
,
"時間:"
+
TimeUtils
.
getCurrentDate
(
TimeUtils
.
DEFAULT_DATE_FORMAT
),
Gravity
.
LEFT
,
getDimensionPixelSize
(
mContext
,
R
.
dimen
.
dp_8
)));
layout
.
addView
(
getTextLine
(
mContext
,
"項目"
));
List
<
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
>
productnameBeans
=
new
ArrayList
<>();
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
productnameBean
=
new
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
();
productnameBean
.
setPRODUCT_NAME
(
"測試食品"
);
productnameBean
.
setNum
(
"1"
);
productnameBean
.
setPRICE
(
"10.0"
);
List
<
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
.
ChildBeanX
>
childBeanXES
=
new
ArrayList
<>();
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
.
ChildBeanX
childBeanX
=
new
OrderDetails
.
DataBean
.
PRODUCTNAMEBean
.
ChildBeanX
();
childBeanX
.
setPRODUCT_NAME
(
"測試子食品"
);
childBeanX
.
setNum
(
"1"
);
childBeanX
.
setPRICE
(
"10.0"
);
childBeanXES
.
add
(
childBeanX
);
productnameBean
.
setChild
(
childBeanXES
);
productnameBeans
.
add
(
productnameBean
);
layout
.
addView
(
getDiningFoodList
(
mContext
,
OrderDetail
.
productMameBeanToOrderDetail
(
0
,
productnameBeans
),
deviceBean
,
0
,
true
));
layout
.
addView
(
getTextLine
(
mContext
,
"Powered by Gingersoft"
));
// layout.addView(getTextView(mContext, "(USB)", Gravity.CENTER_HORIZONTAL, getDimensionPixelSize(mContext, R.dimen.dp_8)));
return
viewToZoomBitmap
(
mContext
,
layout
,
deviceBean
);
}
}
print-module/src/main/java/com/joe/print/mvp/print/PrinterRoot.java
View file @
c3c5c732
...
...
@@ -197,6 +197,8 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
//有打印位置
hasPrinterSettingPrint
(
entry
.
getKey
(),
entry
.
getValue
(),
deviceBeans
);
}
}
}
}
...
...
@@ -536,13 +538,6 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
for
(
int
j
=
0
;
j
<
bitmaps
.
size
();
j
++)
{
mPrinter
.
putPrintData
(
printerDeviceBean
.
getIp
(),
bitmaps
.
get
(
j
));
}
// if (printListener != null) {
// if (state == 2) {
// printListener.printStateChanged(PrintActivity.LACK_OF_PAPER);
// } else {
// printListener.printStateChanged(PrintActivity.FINISH);
// }
// }
}
else
{
PrintExecutor
executor
=
new
PrintExecutor
(
printerDeviceBean
);
executor
.
setOnStateChangedListener
(
stateChangedListener
);
...
...
@@ -987,6 +982,25 @@ public abstract class PrinterRoot implements PrintSocketHolder.OnStateChangedLis
return
layout
;
}
protected
void
getTakeawayReceiver
(
Context
mContext
,
OrderDetails
.
DataBean
data
,
LinearLayout
layout
)
{
String
address
=
""
;
String
receiver
=
""
;
if
(
data
.
getOrder_type
()
==
2
)
{
//收貨地址
address
=
"地址:"
+
data
.
getAddressDetail
();
//收貨人
receiver
=
"收貨人:"
+
data
.
getRECEIVER
();
}
if
(!
TextUtil
.
isEmptyOrNullOrUndefined
(
address
))
{
layout
.
addView
(
getTakeawayTextView
(
mContext
,
address
));
}
if
(!
TextUtil
.
isEmptyOrNullOrUndefined
(
receiver
))
{
layout
.
addView
(
getTakeawayTextView
(
mContext
,
receiver
));
}
layout
.
addView
(
getTakeawayTextView
(
mContext
,
"手機號:"
+
data
.
getPHONE
()));
}
protected
View
getTakeawayTextView
(
Context
mContext
,
String
text
)
{
return
getTextView
(
mContext
,
text
,
Gravity
.
LEFT
,
26
,
getColor
(
mContext
,
R
.
color
.
black
));
}
...
...
print-module/src/main/java/com/joe/print/mvp/print/PrinterUtil.java
deleted
100644 → 0
View file @
19692ff3
package
com
.
joe
.
print
.
mvp
.
print
;
import
android.os.Message
;
import
android.util.Log
;
import
java.io.DataOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.io.OutputStreamWriter
;
import
java.net.Socket
;
public
class
PrinterUtil
{
//定义编码方式
private
static
String
encoding
=
null
;
private
String
ip
;
private
Socket
sock
=
null
;
// 通过socket流进行读写
private
OutputStream
socketOut
=
null
;
private
OutputStreamWriter
writer
=
null
;
/**
* 初始化Pos实例
*
* @param ip 打印机IP
* @param port 打印机端口号
* @param encoding 编码
*/
public
PrinterUtil
(
String
ip
,
int
port
,
String
encoding
)
{
try
{
this
.
ip
=
ip
;
boolean
isSocketConnect
=
false
;
if
(
sock
!=
null
)
{
closeIOAndSocket
();
}
else
{
sock
=
new
Socket
(
ip
,
port
);
}
sock
.
setSoTimeout
(
1000
*
3
);
socketOut
=
new
DataOutputStream
(
sock
.
getOutputStream
());
PrinterUtil
.
encoding
=
encoding
;
writer
=
new
OutputStreamWriter
(
socketOut
,
encoding
);
isSocketConnect
=
true
;
}
catch
(
Exception
e
)
{
Log
.
e
(
"king"
,
e
.
toString
());
}
}
/**
* 获取打印机状态
*
* @return
*/
public
String
getPosStatus
()
{
try
{
Socket
sock
=
new
Socket
(
ip
,
4000
);
// ip and port of printer
sock
.
setSoTimeout
(
1000
);
OutputStream
outStream
=
sock
.
getOutputStream
();
outStream
.
write
(
new
byte
[]{
0x1B
,
0x76
});
outStream
.
flush
();
InputStream
stream
=
sock
.
getInputStream
();
byte
[]
bytes
=
new
byte
[
4
];
stream
.
read
(
bytes
);
Message
msg
=
new
Message
();
stream
.
close
();
outStream
.
close
();
sock
.
close
();
return
bytes
[
0
]
+
","
+
bytes
[
1
]
+
","
+
bytes
[
2
]
+
","
+
bytes
[
3
]
+
","
;
}
catch
(
IOException
e
)
{
Message
msg
=
new
Message
();
e
.
printStackTrace
();
}
return
"error"
;
}
/**
* 关闭IO流和Socket
*
* @throws IOException
*/
public
void
closeIOAndSocket
()
{
try
{
writer
.
close
();
socketOut
.
close
();
sock
.
close
();
}
catch
(
Exception
e
)
{
}
}
/**
* 判断socket连接状态
*/
public
boolean
isSocketConnect
()
throws
IOException
{
boolean
connected
=
sock
.
isConnected
();
return
connected
;
}
/**
* 打印二维码
*
* @param qrData 二维码的内容
* @throws IOException
*/
public
void
qrCode
(
String
qrData
)
throws
IOException
{
int
moduleSize
=
8
;
int
length
=
qrData
.
getBytes
(
encoding
).
length
;
//打印二维码矩阵
writer
.
write
(
0x1D
);
// init
writer
.
write
(
"(k"
);
// adjust height of barcode
writer
.
write
(
length
+
3
);
// pl
writer
.
write
(
0
);
// ph
writer
.
write
(
49
);
// cn
writer
.
write
(
80
);
// fn
writer
.
write
(
48
);
//
writer
.
write
(
qrData
);
writer
.
write
(
0x1D
);
writer
.
write
(
"(k"
);
writer
.
write
(
3
);
writer
.
write
(
0
);
writer
.
write
(
49
);
writer
.
write
(
69
);
writer
.
write
(
48
);
writer
.
write
(
0x1D
);
writer
.
write
(
"(k"
);
writer
.
write
(
3
);
writer
.
write
(
0
);
writer
.
write
(
49
);
writer
.
write
(
67
);
writer
.
write
(
moduleSize
);
writer
.
write
(
0x1D
);
writer
.
write
(
"(k"
);
writer
.
write
(
3
);
// pl
writer
.
write
(
0
);
// ph
writer
.
write
(
49
);
// cn
writer
.
write
(
81
);
// fn
writer
.
write
(
48
);
// m
writer
.
flush
();
}
/**
* 进纸并全部切割
*
* @throws IOException
*/
public
void
feedAndCut
()
throws
IOException
{
writer
.
write
(
0x1D
);
writer
.
write
(
86
);
writer
.
write
(
65
);
// writer.write(0);
//切纸前走纸多少
writer
.
write
(
100
);
writer
.
flush
();
//另外一种切纸的方式
// byte[] bytes = {29, 86, 0};
// socketOut.write(bytes);
}
/**
* 打印换行
*
* @return length 需要打印的空行数
* @throws IOException
*/
public
void
printLine
(
int
lineNum
)
throws
IOException
{
for
(
int
i
=
0
;
i
<
lineNum
;
i
++)
{
writer
.
write
(
"\n"
);
}
writer
.
flush
();
}
/**
* 打印换行(只换一行)
*
* @throws IOException
*/
public
void
printLine
()
throws
IOException
{
writer
.
write
(
"\n"
);
writer
.
flush
();
}
/**
* 打印空白(一个Tab的位置,约4个汉字)
*
* @param length 需要打印空白的长度,
* @throws IOException
*/
public
void
printTabSpace
(
int
length
)
throws
IOException
{
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
writer
.
write
(
"\t"
);
}
writer
.
flush
();
}
/**
* 打印空白(一个汉字的位置)
*
* @param length 需要打印空白的长度,
* @throws IOException
*/
public
void
printWordSpace
(
int
length
)
throws
IOException
{
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
writer
.
write
(
" "
);
}
writer
.
flush
();
}
/**
* 打印位置调整
*
* @param position 打印位置 0:居左(默认) 1:居中 2:居右
* @throws IOException
*/
public
void
printLocation
(
int
position
)
throws
IOException
{
writer
.
write
((
char
)
27
);
writer
.
write
((
char
)
97
);
writer
.
write
((
char
)
position
);
writer
.
flush
();
}
/**
* 绝对打印位置
*
* @throws IOException
*/
public
void
printLocation
(
int
light
,
int
weight
)
throws
IOException
{
writer
.
write
(
0x1B
);
writer
.
write
(
0x24
);
writer
.
write
(
light
);
writer
.
write
(
weight
);
writer
.
flush
();
}
/**
* 打印文字
*
* @param text
* @throws IOException
*/
public
void
printText
(
String
text
)
throws
IOException
{
String
s
=
text
;
byte
[]
content
=
s
.
getBytes
(
"gbk"
);
socketOut
.
write
(
content
);
socketOut
.
flush
();
}
/**
* 新起一行,打印文字
*
* @param text
* @throws IOException
*/
public
void
printTextNewLine
(
String
text
)
throws
IOException
{
//换行
writer
.
write
(
"\n"
);
writer
.
flush
();
String
s
=
text
;
byte
[]
content
=
s
.
getBytes
(
"gbk"
);
socketOut
.
write
(
content
);
socketOut
.
flush
();
}
/**
* 初始化打印机
*
* @throws IOException
*/
public
void
initPos
()
throws
IOException
{
writer
.
write
(
0x1B
);
writer
.
write
(
0x40
);
writer
.
flush
();
}
/**
* 加粗
*
* @param flag false为不加粗
* @return
* @throws IOException
*/
public
void
bold
(
boolean
flag
)
throws
IOException
{
if
(
flag
)
{
//常规粗细
writer
.
write
(
0x1B
);
writer
.
write
(
69
);
writer
.
write
(
0xF
);
writer
.
flush
();
}
else
{
//加粗
writer
.
write
(
0x1B
);
writer
.
write
(
69
);
writer
.
write
(
0
);
writer
.
flush
();
}
}
public
void
fontSize
(
int
size
)
throws
IOException
{
writer
.
write
(
CMD_FontSize
(
size
));
writer
.
flush
();
}
/**
* 睡几秒
*/
private
void
sleep
(
int
time
)
throws
InterruptedException
{
Thread
.
sleep
(
time
);
}
/**
* 打开钱箱
*/
public
void
openCashBox
()
throws
IOException
{
writer
.
write
(
0x1B
);
writer
.
write
(
0x70
);
writer
.
write
(
0
);
writer
.
write
(
100
);
writer
.
write
(
80
);
writer
.
flush
();
}
/// <summary>
/// 字体的大小
/// </summary>
/// <param name="nfontsize">0:正常大小 1:两倍高 2:两倍宽 3:两倍大小 4:三倍高 5:三倍宽 6:三倍大小 7:四倍高 8:四倍宽 9:四倍大小 10:五倍高 11:五倍宽 12:五倍大小</param>
/// <returns></returns>
public
String
CMD_FontSize
(
int
nfontsize
)
{
String
_cmdstr
=
""
;
//设置字体大小
switch
(
nfontsize
)
{
case
-
1
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
0
).
toString
();
//29 33
break
;
case
0
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
0
).
toString
();
//29 33
break
;
case
1
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
1
).
toString
();
break
;
case
2
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
16
).
toString
();
break
;
case
3
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
17
).
toString
();
break
;
case
4
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
2
).
toString
();
break
;
case
5
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
32
).
toString
();
break
;
case
6
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
34
).
toString
();
break
;
case
7
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
3
).
toString
();
break
;
case
8
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
48
).
toString
();
break
;
case
9
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
51
).
toString
();
break
;
case
10
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
4
).
toString
();
break
;
case
11
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
64
).
toString
();
break
;
case
12
:
_cmdstr
=
new
StringBuffer
().
append
((
char
)
29
).
append
((
char
)
33
).
append
((
char
)
68
).
toString
();
break
;
}
return
_cmdstr
;
}
}
print-module/src/main/java/com/joe/print/mvp/print/SendPrint.java
deleted
100644 → 0
View file @
19692ff3
package
com
.
joe
.
print
.
mvp
.
print
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.graphics.Matrix
;
import
android.graphics.Rect
;
import
com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils
;
import
com.gingersoft.gsa.cloud.print.PrintDataMaker
;
import
com.gingersoft.gsa.cloud.print.PrinterWriter
;
import
com.gingersoft.gsa.cloud.print.PrinterWriter58mm
;
import
com.gingersoft.gsa.cloud.print.PrinterWriter80mm
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Created by Wyh on 2020/1/9.
* ip打印類
*/
public
class
SendPrint
implements
PrintDataMaker
{
private
Context
mContext
;
private
int
parting
=
255
;
//高度分割值,
private
int
width
;
// 打印的圖片寬度,紙張寬度
private
int
printType
;
public
SendPrint
(
Context
context
,
int
parting
,
int
width
,
int
type
)
{
this
.
mContext
=
context
;
this
.
parting
=
parting
;
this
.
width
=
width
;
this
.
printType
=
type
;
}
@Override
public
List
<
byte
[]>
getPrintData
()
{
ArrayList
<
byte
[]>
data
=
new
ArrayList
<>();
try
{
PrinterWriter
printer
;
printer
=
new
PrinterWriter58mm
(
parting
,
width
);
printer
.
setAlignCenter
();
data
.
add
(
printer
.
getDataAndReset
());
List
<
Bitmap
>
bitmaps
=
PrintUtils
.
getPrintBitmap
(
mContext
,
printType
,
width
);
//根據打印類型獲得不同的bitmap
if
(
bitmaps
.
size
()
<=
0
)
{
ToastUtils
.
show
(
mContext
,
"打印失敗"
);
return
null
;
}
for
(
int
i
=
0
;
i
<
bitmaps
.
size
();
i
++)
{
// printer.getImageByte(bitmaps.get(i));
// data.addAll(PrinterUtils.decodeBitmapToDataList(bitmaps.get(i), parting));
ArrayList
<
byte
[]>
image1
=
printer
.
getImageByte
(
bitmaps
.
get
(
i
));
data
.
addAll
(
image1
);
//draw2PxPoint2(bitmaps.get(i)
printer
.
printLineFeed
();
printer
.
printLineFeed
();
printer
.
printLineFeed
();
printer
.
printLineFeed
();
printer
.
printLineFeed
();
printer
.
feedPaperCutPartial
();
data
.
add
(
printer
.
getDataAndReset
());
}
// String bitmapPath = FileUtils.getExternalFilesDir(context, "Temp") + "tmp_qr.jpg";
// if (QRCodeUtil.createQRImage(qr, 380, 380, null, bitmapPath)) {
// ArrayList<byte[]> image2 = printer.getImageByte(bitmapPath);
// data.addAll(image2);
// } else {
// ArrayList<byte[]> image2 = printer
// .getImageByte(context.getResources(), R.drawable.ic_printer_qr);
// data.addAll(image2);
// }
data
.
add
(
printer
.
getDataAndClose
());
return
data
;
}
catch
(
Exception
e
)
{
return
new
ArrayList
<>();
}
}
@Override
public
String
getPrjIds
()
{
return
null
;
}
/*************************************************************************
* 假设一个240*240的图片,分辨率设为24, 共分10行打印
* 每一行,是一个 240*24 的点阵, 每一列有24个点,存储在3个byte里面。
* 每个byte存储8个像素点信息。因为只有黑白两色,所以对应为1的位是黑色,对应为0的位是白色
**************************************************************************/
/**
* 把一张Bitmap图片转化为打印机可以打印的字节流
*
* @param bmp
* @return
*/
public
void
draw2PxPoint
(
Bitmap
bmp
)
throws
IOException
{
//用来存储转换后的 bitmap 数据。为什么要再加1000,这是为了应对当图片高度无法
//整除24时的情况。比如bitmap 分辨率为 240 * 250,占用 7500 byte,
//但是实际上要存储11行数据,每一行需要 24 * 240 / 8 =720byte 的空间。再加上一些指令存储的开销,
//所以多申请 1000byte 的空间是稳妥的,不然运行时会抛出数组访问越界的异常。
int
size
=
bmp
.
getWidth
()
*
bmp
.
getHeight
()
/
8
+
1000
;
byte
[]
data
=
new
byte
[
size
];
int
k
=
0
;
//设置行距为0的指令
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x33
;
data
[
k
++]
=
0x00
;
// 逐行打印
for
(
int
j
=
0
;
j
<
bmp
.
getHeight
()
/
24
f
;
j
++)
{
//打印图片的指令
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x2A
;
data
[
k
++]
=
33
;
data
[
k
++]
=
(
byte
)
(
bmp
.
getWidth
()
%
256
);
//nL
data
[
k
++]
=
(
byte
)
(
bmp
.
getWidth
()
/
256
);
//nH
//对于每一行,逐列打印
for
(
int
i
=
0
;
i
<
bmp
.
getWidth
();
i
++)
{
//每一列24个像素点,分为3个字节存储
for
(
int
m
=
0
;
m
<
3
;
m
++)
{
//每个字节表示8个像素点,0表示白色,1表示黑色
for
(
int
n
=
0
;
n
<
8
;
n
++)
{
byte
b
=
px2Byte
(
i
,
j
*
24
+
m
*
8
+
n
,
bmp
);
data
[
k
]
+=
data
[
k
]
+
b
;
}
k
++;
}
}
data
[
k
++]
=
10
;
//换行
}
// socketOut.write(data);
// socketOut.flush();
}
/*************************************************************************
* 我们的热敏打印机是RP-POS80S或RP-POS80P或RP-POS80CS或RP-POS80CP打印机
* 360*360的图片,8个字节(8个像素点)是一个二进制,将二进制转化为十进制数值
* y轴:24个像素点为一组,即360就是15组(0-14)
* x轴:360个像素点(0-359)
* 里面的每一组(24*360),每8个像素点为一个二进制,(每组有3个,3*8=24)
**************************************************************************/
/**
* 把一张Bitmap图片转化为打印机可以打印的bit(将图片压缩为360*360)
* 效率很高(相对于下面)
*
* @param bit
* @return
*/
public
static
byte
[]
draw2PxPoint2
(
Bitmap
bit
)
{
byte
[]
data
=
new
byte
[
16290
];
int
height
=
bit
.
getHeight
()
+
(
24
-
bit
.
getHeight
()
%
24
);
int
y
=
height
/
24
;
int
k
=
0
;
for
(
int
j
=
0
;
j
<
y
;
j
++)
{
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x2A
;
data
[
k
++]
=
33
;
// m=33时,选择24点双密度打印,分辨率达到200DPI。
data
[
k
++]
=
0x68
;
data
[
k
++]
=
0x01
;
for
(
int
i
=
0
;
i
<
bit
.
getWidth
();
i
++)
{
for
(
int
m
=
0
;
m
<
3
;
m
++)
{
for
(
int
n
=
0
;
n
<
8
;
n
++)
{
byte
b
=
px2Byte
(
i
,
j
*
24
+
m
*
8
+
n
,
bit
);
data
[
k
]
+=
data
[
k
]
+
b
;
}
k
++;
}
}
data
[
k
++]
=
10
;
}
return
data
;
}
/**
* 把一张Bitmap图片转化为打印机可以打印的bit
*
* @param bit
* @return
*/
public
static
byte
[]
pic2PxPoint
(
Bitmap
bit
)
{
long
start
=
System
.
currentTimeMillis
();
byte
[]
data
=
new
byte
[
16290
];
int
k
=
0
;
for
(
int
i
=
0
;
i
<
15
;
i
++)
{
data
[
k
++]
=
0x1B
;
data
[
k
++]
=
0x2A
;
data
[
k
++]
=
33
;
// m=33时,选择24点双密度打印,分辨率达到200DPI。
data
[
k
++]
=
0x68
;
data
[
k
++]
=
0x01
;
for
(
int
x
=
0
;
x
<
360
;
x
++)
{
for
(
int
m
=
0
;
m
<
3
;
m
++)
{
byte
[]
by
=
new
byte
[
8
];
for
(
int
n
=
0
;
n
<
8
;
n
++)
{
byte
b
=
px2Byte
(
x
,
i
*
24
+
m
*
8
+
7
-
n
,
bit
);
by
[
n
]
=
b
;
}
data
[
k
]
=
(
byte
)
changePointPx1
(
by
);
k
++;
}
}
data
[
k
++]
=
10
;
}
long
end
=
System
.
currentTimeMillis
();
long
str
=
end
-
start
;
return
data
;
}
/**
* 图片二值化,黑色是1,白色是0
*
* @param x 横坐标
* @param y 纵坐标
* @param bit 位图
* @return
*/
public
static
byte
px2Byte
(
int
x
,
int
y
,
Bitmap
bit
)
{
byte
b
;
if
(
y
>=
bit
.
getHeight
())
{
return
0
;
}
int
pixel
=
bit
.
getPixel
(
x
,
y
);
int
red
=
(
pixel
&
0x00ff0000
)
>>
16
;
// 取高两位
int
green
=
(
pixel
&
0x0000ff00
)
>>
8
;
// 取中两位
int
blue
=
pixel
&
0x000000ff
;
// 取低两位
int
gray
=
RGB2Gray
(
red
,
green
,
blue
);
if
(
gray
<
128
)
{
b
=
1
;
}
else
{
b
=
0
;
}
return
b
;
}
/**
* 图片灰度的转化
*
* @param r
* @param g
* @param b
* @return
*/
private
static
int
RGB2Gray
(
int
r
,
int
g
,
int
b
)
{
int
gray
=
(
int
)
(
0.29900
*
r
+
0.58700
*
g
+
0.11400
*
b
);
//灰度转化公式
return
gray
;
}
/**
* 对图片进行压缩(去除透明度)
*
* @param bitmapOrg
*/
public
static
Bitmap
compressPic
(
Bitmap
bitmapOrg
)
{
// 获取这个图片的宽和高
int
width
=
bitmapOrg
.
getWidth
();
int
height
=
bitmapOrg
.
getHeight
();
// 定义预转换成的图片的宽度和高度
int
newWidth
=
360
;
int
newHeight
=
360
;
Bitmap
targetBmp
=
Bitmap
.
createBitmap
(
newWidth
,
newHeight
,
Bitmap
.
Config
.
ARGB_8888
);
Canvas
targetCanvas
=
new
Canvas
(
targetBmp
);
targetCanvas
.
drawColor
(
0xffffffff
);
targetCanvas
.
drawBitmap
(
bitmapOrg
,
new
Rect
(
0
,
0
,
width
,
height
),
new
Rect
(
0
,
0
,
newWidth
,
newHeight
),
null
);
return
targetBmp
;
}
/**
* 对图片进行压缩(不去除透明度)
*
* @param bitmapOrg
*/
public
static
Bitmap
compressBitmap
(
Bitmap
bitmapOrg
)
{
// 加载需要操作的图片,这里是一张图片
// Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.alipay);
// 获取这个图片的宽和高
int
width
=
bitmapOrg
.
getWidth
();
int
height
=
bitmapOrg
.
getHeight
();
// 定义预转换成的图片的宽度和高度
int
newWidth
=
360
;
int
newHeight
=
360
;
// 计算缩放率,新尺寸除原始尺寸
float
scaleWidth
=
((
float
)
newWidth
)
/
width
;
float
scaleHeight
=
((
float
)
newHeight
)
/
height
;
// 创建操作图片用的matrix对象
Matrix
matrix
=
new
Matrix
();
// 缩放图片动作
matrix
.
postScale
(
scaleWidth
,
scaleHeight
);
// 创建新的图片
Bitmap
resizedBitmap
=
Bitmap
.
createBitmap
(
bitmapOrg
,
0
,
0
,
width
,
height
,
matrix
,
true
);
// 将上面创建的Bitmap转换成Drawable对象,使得其可以使用在ImageView, ImageButton中
// BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
return
resizedBitmap
;
}
/**
* 将[1,0,0,1,0,0,0,1]这样的二进制转为化十进制的数值(效率更高)
*
* @param arry
* @return
*/
public
static
int
changePointPx1
(
byte
[]
arry
)
{
int
v
=
0
;
for
(
int
j
=
0
;
j
<
arry
.
length
;
j
++)
{
if
(
arry
[
j
]
==
1
)
{
v
=
v
|
1
<<
j
;
}
}
return
v
;
}
/**
* 将[1,0,0,1,0,0,0,1]这样的二进制转为化十进制的数值
*
* @param arry
* @return
*/
public
byte
changePointPx
(
byte
[]
arry
)
{
byte
v
=
0
;
for
(
int
i
=
0
;
i
<
8
;
i
++)
{
v
+=
v
+
arry
[
i
];
}
return
v
;
}
/**
* 得到位图的某个点的像素值
*
* @param bitmap
* @return
*/
public
byte
[]
getPicPx
(
Bitmap
bitmap
)
{
int
[]
pixels
=
new
int
[
bitmap
.
getWidth
()
*
bitmap
.
getHeight
()];
// 保存所有的像素的数组,图片宽×高
bitmap
.
getPixels
(
pixels
,
0
,
bitmap
.
getWidth
(),
0
,
0
,
bitmap
.
getWidth
(),
bitmap
.
getHeight
());
for
(
int
i
=
0
;
i
<
pixels
.
length
;
i
++)
{
int
clr
=
pixels
[
i
];
int
red
=
(
clr
&
0x00ff0000
)
>>
16
;
// 取高两位
int
green
=
(
clr
&
0x0000ff00
)
>>
8
;
// 取中两位
int
blue
=
clr
&
0x000000ff
;
// 取低两位
System
.
out
.
println
(
"r="
+
red
+
",g="
+
green
+
",b="
+
blue
);
}
return
null
;
}
}
print-module/src/main/java/com/joe/print/mvp/print/TestPrintMaker.java
View file @
c3c5c732
package
com
.
joe
.
print
.
mvp
.
print
;
import
android.graphics.Bitmap
;
import
com.gingersoft.gsa.cloud.base.utils.view.ImageUtils
;
import
com.gingersoft.gsa.cloud.print.PrintDataMaker
;
import
com.gingersoft.gsa.cloud.print.PrinterWriter
;
import
com.gingersoft.gsa.cloud.print.PrinterWriter80mm
;
import
com.joe.print.mvp.model.bean.PrintInfoBean
;
import
com.joe.print.mvp.print.utils.MyPrintUtils
;
...
...
@@ -18,15 +22,30 @@ public class TestPrintMaker implements PrintDataMaker {
private
PrinterWriter
printer
;
private
List
<
PrintInfoBean
>
printInfoBeans
;
private
Bitmap
bitmap
;
public
TestPrintMaker
(
PrinterWriter
printer
,
List
<
PrintInfoBean
>
printInfoBeans
)
{
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
;
}
@Override
public
List
<
byte
[]>
getPrintData
()
{
ArrayList
<
byte
[]>
data
=
new
ArrayList
<>();
try
{
ArrayList
<
byte
[]>
data
=
new
ArrayList
<>();
if
(
printer
==
null
)
{
printer
=
new
PrinterWriter80mm
(
255
);
}
for
(
PrintInfoBean
printInfoBean
:
printInfoBeans
)
{
//如果打印多列內容,並且字體大小配置多個,則每一列取自己對應的字體大小
for
(
int
i
=
0
;
i
<
printInfoBean
.
getContent
().
length
;
i
++)
{
...
...
@@ -34,6 +53,8 @@ public class TestPrintMaker implements PrintDataMaker {
}
printer
.
print
(
"\n"
);
}
// data.add(ImageUtils.draw2PxPoint(bitmap));
printer
.
printLineFeed
();
printer
.
printLineFeed
();
printer
.
feedPaperCutPartial
();
...
...
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrintActivity.java
View file @
c3c5c732
...
...
@@ -203,14 +203,11 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
if
(
isShowDialog
)
{
initDialog
();
}
//
先在這裡壓縮,之後在每個類自己生成的時候壓縮
//
獲得對應的圖片
List
<
Bitmap
>
zoomBitmaps
=
printerInIt
.
getPrintBitmap
(
mContext
,
defaultPrint
).
get
(
""
);
// List<Bitmap> zoomBitmaps = new ArrayList<>();
// for (Bitmap bitmap : bitmaps) {
// Bitmap zoomBitmap = printerInIt.zoomBitmap(defaultPrint, bitmap);
// zoomBitmaps.add(zoomBitmap);
// }
if
(
zoomBitmaps
!=
null
&&
zoomBitmaps
.
size
()
>
0
)
{
int
printCount
=
printerInIt
.
getPrintCount
(
mContext
);
for
(
int
i
=
0
;
i
<
printCount
;
i
++)
{
if
(
defaultPrint
.
getPrinterDeviceType
()
==
1
)
{
//IP打印
printerInIt
.
ipDevicePrint
(
defaultPrint
,
zoomBitmaps
);
...
...
@@ -224,6 +221,7 @@ public class PrintActivity extends BaseActivity<PrintPresenter> implements Print
ToastUtils
.
show
(
mContext
,
"未找到對應的打印類型"
);
printFile
();
}
}
}
else
{
//打印失敗
Log
.
e
(
"eee"
,
"打印失敗,沒有生成對應的圖片"
);
...
...
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrintAddCurrencyActivity.java
View file @
c3c5c732
package
com
.
joe
.
print
.
mvp
.
ui
.
activity
;
import
android.app.Dialog
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.view.Gravity
;
import
android.view.View
;
import
android.view.WindowManager
;
import
android.widget.Switch
;
import
android.widget.TextView
;
...
...
@@ -25,10 +22,10 @@ import com.joe.print.di.component.DaggerPrintAddCurrencyComponent;
import
com.joe.print.di.module.PrintAddCurrencyModule
;
import
com.joe.print.mvp.contract.PrintAddCurrencyContract
;
import
com.joe.print.mvp.presenter.PrintAddCurrencyPresenter
;
import
com.gingersoft.gsa.cloud.ui.view.WheelView
;
import
com.qmuiteam.qmui.widget.QMUITopBar
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
butterknife.BindView
;
...
...
@@ -248,14 +245,8 @@ public class PrintAddCurrencyActivity extends BaseActivity<PrintAddCurrencyPrese
}
private
void
showSelectFoodFontSize
(
TextView
view
)
{
List
<
String
>
types
=
new
ArrayList
<>();
types
.
add
(
"1"
);
types
.
add
(
"2"
);
types
.
add
(
"3"
);
types
.
add
(
"4"
);
types
.
add
(
"5"
);
types
.
add
(
"6"
);
DialogUtils
.
showSelectPopop
(
this
,
types
,
"字體大小"
,
0
,
i
->
view
.
setText
(
types
.
get
(
i
)));
List
<
String
>
fontSize
=
Arrays
.
asList
(
"預設"
,
"6"
,
"7"
,
"8"
,
"9"
,
"10"
,
"11"
,
"12"
,
"13"
,
"14"
,
"15"
,
"16"
,
"17"
,
"18"
,
"19"
,
"20"
,
"21"
,
"22"
,
"23"
,
"24"
,
"25"
,
"26"
,
"27"
,
"28"
,
"29"
,
"30"
);
DialogUtils
.
showSelectPopop
(
this
,
fontSize
,
"字體大小"
,
0
,
i
->
view
.
setText
(
fontSize
.
get
(
i
)));
}
@OnClick
({
R2
.
id
.
printer_add_currency
,
R2
.
id
.
layout_currency_add_table_mode
,
R2
.
id
.
layout_currency_add_food_color
,
R2
.
id
.
layout_currency_add_food_item_color
,
R2
.
id
.
layout_currency_add_food_font_size
,
R2
.
id
.
layout_currency_add_food_item_font_size
})
...
...
print-module/src/main/java/com/joe/print/mvp/ui/activity/PrintTestActivity.java
View file @
c3c5c732
package
com
.
joe
.
print
.
mvp
.
ui
.
activity
;
import
android.graphics.Bitmap
;
import
android.os.Bundle
;
import
android.util.Log
;
import
android.widget.EditText
;
...
...
@@ -17,6 +18,7 @@ import com.gingersoft.gsa.cloud.print.PrintSocketHolder;
import
com.joe.print.R
;
import
com.joe.print.mvp.model.bean.PrintInfoBean
;
import
com.joe.print.mvp.print.EpsonPrint
;
import
com.joe.print.mvp.print.PrintTest
;
import
com.joe.print.mvp.print.common.PrinterFinderCallback
;
import
com.joe.print.mvp.print.common.SendCallback
;
import
com.joe.print.mvp.print.common.SendResultCode
;
...
...
@@ -139,18 +141,28 @@ public class PrintTestActivity extends AppCompatActivity implements PrintSocketH
printerFinder
.
startFinder
();
List
<
PrintInfoBean
>
printInfoBeans
=
new
ArrayList
<>();
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"EnglishEnglishEnglish"
},
new
String
[]{
"en"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"日語伐採に加えて"
},
new
String
[]{
"ja"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"简体字简体字简体字"
},
new
String
[]{
"cn"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"繁体字繁体字繁体字"
},
new
String
[]{
"tw"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"한국어.한국어.한국어."
},
new
String
[]{
"ko"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"ภาษาไทยภาษาไทย"
},
new
String
[]{
"th"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"ViệtNameViệtName"
},
new
String
[]{
"vi"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"\n\n\nEnglishに加えて简体字繁体字한국어ภาษาไทยViệtName"
},
new
String
[]{
"multi"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"EnglishEnglishEnglish"
},
new
Double
[]{
2
d
},
new
String
[]{
"en"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"日語伐採に加えて"
},
new
Double
[]{
2
d
},
new
String
[]{
"ja"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"简体字简体字简体字"
},
new
Double
[]{
2
d
},
new
String
[]{
"cn"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"繁体字繁体字繁体字"
},
new
Double
[]{
2
d
},
new
String
[]{
"tw"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"한국어.한국어.한국어."
},
new
Double
[]{
2
d
},
new
String
[]{
"ko"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"ภาษาไทยภาษาไทย"
},
new
Double
[]{
2
d
},
new
String
[]{
"th"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"ViệtNameViệtName"
},
new
Double
[]{
2
d
},
new
String
[]{
"vi"
}));
printInfoBeans
.
add
(
new
PrintInfoBean
(
new
String
[]{
"\n\n\nEnglishに加えて简体字繁体字한국어ภาษาไทยViệtName"
},
new
Double
[]{
2
d
},
new
String
[]{
"multi"
}));
PrinterDeviceBean
printerDeviceBean
=
new
PrinterDeviceBean
();
printerDeviceBean
.
setIp
(
"192.168.1.203"
);
printerDeviceBean
.
setPort
(
9100
);
Bitmap
bitmap
=
new
PrintTest
().
getTestPrintBitmap
(
this
,
printerDeviceBean
);
findViewById
(
R
.
id
.
btn_test
).
setOnClickListener
(
view
->
{
//打印測試
EpsonPrint
mPrinter
=
EpsonPrint
.
getInstance
();
// PrintExecutor executor = new PrintExecutor(printerDeviceBean);
// executor.setOnStateChangedListener(stateChangedListener);
// executor.setOnPrintResultListener(resultListener);
// TestPrintMaker maker = new TestPrintMaker(printInfoBeans);
// executor.doPrinterRequestAsync(maker);
EpsonPrint
mPrinter
=
new
EpsonPrint
();
mPrinter
.
initializeObject
(
GsaCloudApplication
.
getAppContext
(),
this
);
mPrinter
.
putPrintString
(
ed_ip
.
getText
().
toString
(),
42
,
printInfoBeans
,
this
);
});
...
...
print-module/src/main/res/layout/activity_print_test.xml
View file @
c3c5c732
...
...
@@ -14,6 +14,7 @@
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_50"
android:layout_marginTop=
"@dimen/dp_20"
android:text=
"192.168.1.203"
android:hint=
"请输入IP地址"
/>
<Button
...
...
print-module/src/main/res/layout/print_confirm_order_view.xml
View file @
c3c5c732
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
...
...
@@ -231,6 +232,13 @@
android:text=
"支付金額:"
/>
<TextView
android:id=
"@+id/tv_pay_amount_text_two"
style=
"@style/print_other_order_thirty_bold_style"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
tools:text=
"支付金額2:"
/>
<TextView
android:id=
"@+id/tv_pay_amount_line"
style=
"@style/print_other_order_twenty_six_style"
android:layout_width=
"wrap_content"
...
...
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