diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/cheeroncontroller/CheerInfoController.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/cheeroncontroller/CheerInfoController.java
index 99719b2..877d2c1 100644
--- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/cheeroncontroller/CheerInfoController.java
+++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/cheeroncontroller/CheerInfoController.java
@@ -8,6 +8,7 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.apiBean.OrderPayBean;
import org.jeecg.modules.apiBean.OrderRechargeBean;
import org.jeecg.modules.apiBean.OrderWaterPageBean;
+import org.jeecg.modules.apiUtils.printUtil;
import org.jeecg.modules.apiservice.InfoApiService;
import org.jeecg.modules.hanHaiMember.entity.HanHaiMember;
import org.springframework.web.bind.annotation.*;
@@ -76,4 +77,18 @@ public class CheerInfoController {
}
+ //打印账单
+ @ApiOperation(value="小程序-打印账单", notes="小程序-打印账单")
+ @RequestMapping(value = "/printBill", method = {RequestMethod.GET})
+ public static Result> printBill(){
+ //拼接打印信息
+ String content = printUtil.spellMessage();
+
+ //客户要求打印两次
+ printUtil.printBill(content);
+ printUtil.printBill(content);
+
+ return Result.OK("打印成功");
+ }
+
}
diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiUtils/printUtil.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiUtils/printUtil.java
new file mode 100644
index 0000000..9bb3c40
--- /dev/null
+++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiUtils/printUtil.java
@@ -0,0 +1,560 @@
+package org.jeecg.modules.apiUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+public class printUtil {
+
+
+ public static final String URL = "http://api.feieyun.cn/Api/Open/";//不需要修改
+
+ public static final String USER = "1498259189@qq.com";//*必填*:账号名
+ public static final String UKEY = "hKt4XF8Gnp4skcPn";//*必填*: 飞鹅云后台注册账号后生成的UKEY 【备注:这不是填打印机的KEY】
+ public static final String SN = "922327177";//*必填*:打印机编号,必须要在管理后台里添加打印机或调用API接口添加之后,才能调用API
+
+
+ //**********测试时,打开下面注释掉方法的即可,更多接口文档信息,请访问官网开放平台查看**********
+ public static void main(String[] args) throws Exception{
+
+ //==================添加打印机接口(支持批量)==================
+ //***返回值JSON字符串***
+ //正确例子:{"msg":"ok","ret":0,"data":{"ok":["sn#key#remark#carnum","316500011#abcdefgh#快餐前台"],"no":["316500012#abcdefgh#快餐前台#13688889999 (错误:识别码不正确)"]},"serverExecutedTime":3}
+ //错误:{"msg":"参数错误 : 该帐号未注册.","ret":-2,"data":null,"serverExecutedTime":37}
+
+ //提示:打印机编号(必填) # 打印机识别码(必填) # 备注名称(选填) # 流量卡号码(选填),多台打印机请换行(\n)添加新打印机信息,每次最多100行(台)。
+// String snlist = "sn1#key1#remark1#carnum1\nsn2#key2#remark2#carnum2";
+// String method = addprinter(snlist);
+// System.out.println(method);
+
+
+
+ //==================方法1.小票机打印订单接口==================
+ //***返回值JSON字符串***
+ //成功:{"msg":"ok","ret":0,"data":"xxxxxxx_xxxxxxxx_xxxxxxxx","serverExecutedTime":5}
+ //失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
+
+// String method1 = print(SN);//该接口只能是小票机使用,如购买的是标签机请使用下面方法2,调用打印
+// System.out.println(method1);
+
+
+
+ //==================方法2.标签机专用打印订单接口==================
+ //***返回值JSON字符串***
+ //成功:{"msg":"ok","ret":0,"data":"xxxxxxx_xxxxxxxx_xxxxxxxx","serverExecutedTime":5}
+ //失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
+
+// String method2 = printLabelMsg(SN);//打开注释调用标签机打印接口进行打印,该接口只能是标签机使用,其它型号打印机请勿使用该接口
+// System.out.println(method2);
+
+
+
+ //===========方法3.查询某订单是否打印成功=============
+ //***返回值JSON字符串***
+ //成功:{"msg":"ok","ret":0,"data":true,"serverExecutedTime":2}//data:true为已打印,false为未打印
+ //失败:{"msg":"错误描述","ret":非0, "data":null,"serverExecutedTime":7}
+
+// String orderid = "xxxxxxx_xxxxxxxx_xxxxxxxx";//订单ID,从方法1返回值data获取
+// String method3 = queryOrderState(orderid);
+// System.out.println(method3);
+
+
+
+ //===========方法4.查询指定打印机某天的订单详情============
+ //***返回值JSON字符串***
+ //成功:{"msg":"ok","ret":0,"data":{"print":6,"waiting":1},"serverExecutedTime":9}//print已打印,waiting为打印
+ //失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
+
+// String strdate = "2016-11-12";//注意时间格式为"yyyy-MM-dd"
+// String method4 = queryOrderInfoByDate(SN,strdate);
+// System.out.println(method4);
+
+
+
+ //===========方法5.查询打印机的状态==========================
+ //***返回值JSON字符串***
+ //成功:{"msg":"ok","ret":0,"data":"状态","serverExecutedTime":4}
+ //失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
+
+// String method5 = queryPrinterStatus(SN);
+// System.out.println(method5);
+
+ }
+
+ //打印账单
+ public static void printBill(String content){
+ //添加打印机
+ String snlist = "922327177#sCzbu5AN";
+ String method = addprinter(snlist);
+ System.out.println(method);
+
+ //打印账单
+ String method1 = print(SN, content);//该接口只能是小票机使用,如购买的是标签机请使用下面方法2,调用打印
+ System.out.println(method1);
+ }
+
+ //拼接打印信息
+ public static String spellMessage(){
+ String content;
+
+ content = "加油小票 欢迎光临
";
+ content += "--------------------------------
";
+ content += "消费日期 :2024/8/31 15:26:11
";
+ content += "会员姓名 :佳通车队
";
+ content += "加油金额 :200元
";
+ content += "实收金额 :180元
";
+ content += "油品名称 :95号汽油
";
+ content += "加油单价 :7.02元/升
";
+ content += "--------------------------------
";
+ content += "谢谢惠顾
";
+
+ return content;
+ }
+
+
+
+
+ //=====================以下是函数实现部分================================================
+
+ private static String addprinter(String snlist){
+
+ //通过POST请求,发送打印信息到服务器
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setSocketTimeout(30000)//读取超时
+ .setConnectTimeout(30000)//连接超时
+ .build();
+
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setDefaultRequestConfig(requestConfig)
+ .build();
+
+ HttpPost post = new HttpPost(URL);
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("user",USER));
+ String STIME = String.valueOf(System.currentTimeMillis()/1000);
+ nvps.add(new BasicNameValuePair("stime",STIME));
+ nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME)));
+ nvps.add(new BasicNameValuePair("apiname","Open_printerAddlist"));//固定值,不需要修改
+ nvps.add(new BasicNameValuePair("printerContent",snlist));
+
+ CloseableHttpResponse response = null;
+ String result = null;
+ try
+ {
+ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
+ response = httpClient.execute(post);
+ int statecode = response.getStatusLine().getStatusCode();
+ if(statecode == 200){
+ HttpEntity httpentity = response.getEntity();
+ if (httpentity != null){
+ result = EntityUtils.toString(httpentity);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally{
+ try {
+ if(response!=null){
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ post.abort();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return result;
+
+ }
+
+
+ //方法1
+ private static String print(String sn, String content){
+ //标签说明:
+ //单标签:
+ //"
"为换行,""为切刀指令(主动切纸,仅限切刀打印机使用才有效果)
+ //""为打印LOGO指令(前提是预先在机器内置LOGO图片),""为钱箱或者外置音响指令
+ //成对标签:
+ //""为居中放大一倍,""为放大一倍,""为居中,字体变高一倍
+ //字体变宽一倍,""为二维码,""为字体加粗,""为右对齐
+ //拼凑订单内容时可参考如下格式
+ //根据打印纸张的宽度,自行调整内容的格式,可参考下面的样例格式
+
+// String content;
+//
+// content = "加油小票 欢迎光临
";
+// content += "--------------------------------
";
+// content += "消费日期 :2024/8/30 15:26:11
";
+// content += "会员姓名 :佳通车队
";
+// content += "加油金额 :200元
";
+// content += "实收金额 :180元
";
+// content += "油品名称 :95号汽油
";
+// content += "加油单价 :7.02元/升
";
+// content += "--------------------------------
";
+// content += "谢谢惠顾
";
+
+ //通过POST请求,发送打印信息到服务器
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setSocketTimeout(30000)//读取超时
+ .setConnectTimeout(30000)//连接超时
+ .build();
+
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setDefaultRequestConfig(requestConfig)
+ .build();
+
+ HttpPost post = new HttpPost(URL);
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("user",USER));
+ String STIME = String.valueOf(System.currentTimeMillis()/1000);
+ nvps.add(new BasicNameValuePair("stime",STIME));
+ nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME)));
+ nvps.add(new BasicNameValuePair("apiname","Open_printMsg"));//固定值,不需要修改
+ nvps.add(new BasicNameValuePair("sn",sn));
+ nvps.add(new BasicNameValuePair("content",content));
+ nvps.add(new BasicNameValuePair("times","1"));//打印联数
+
+ CloseableHttpResponse response = null;
+ String result = null;
+ try
+ {
+ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
+ response = httpClient.execute(post);
+ int statecode = response.getStatusLine().getStatusCode();
+ if(statecode == 200){
+ HttpEntity httpentity = response.getEntity();
+ if (httpentity != null){
+ //服务器返回的JSON字符串,建议要当做日志记录起来
+ result = EntityUtils.toString(httpentity);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally{
+ try {
+ if(response!=null){
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ post.abort();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return result;
+
+ }
+
+
+
+ //方法2
+ private static String printLabelMsg(String sn){
+
+ String content;
+ content = "1";//设定打印时出纸和打印字体的方向,n 0 或 1,每次设备重启后都会初始化为 0 值设置,1:正向出纸,0:反向出纸,
+ content += "#001 五号桌 1/3可乐鸡翅张三先生 13800138000";//40mm宽度标签纸打印例子,打开注释调用标签打印接口打印
+
+ //通过POST请求,发送打印信息到服务器
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setSocketTimeout(30000)//读取超时
+ .setConnectTimeout(30000)//连接超时
+ .build();
+
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setDefaultRequestConfig(requestConfig)
+ .build();
+
+ HttpPost post = new HttpPost(URL);
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("user",USER));
+ String STIME = String.valueOf(System.currentTimeMillis()/1000);
+ nvps.add(new BasicNameValuePair("stime",STIME));
+ nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME)));
+ nvps.add(new BasicNameValuePair("apiname","Open_printLabelMsg"));//固定值,不需要修改
+ nvps.add(new BasicNameValuePair("sn",sn));
+ nvps.add(new BasicNameValuePair("content",content));
+ nvps.add(new BasicNameValuePair("times","1"));//打印联数
+
+ CloseableHttpResponse response = null;
+ String result = null;
+ try
+ {
+ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
+ response = httpClient.execute(post);
+ int statecode = response.getStatusLine().getStatusCode();
+ if(statecode == 200){
+ HttpEntity httpentity = response.getEntity();
+ if (httpentity != null){
+ //服务器返回的JSON字符串,建议要当做日志记录起来
+ result = EntityUtils.toString(httpentity);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally{
+ try {
+ if(response!=null){
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ post.abort();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return result;
+
+ }
+
+
+ //方法3
+ private static String queryOrderState(String orderid){
+
+ //通过POST请求,发送打印信息到服务器
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setSocketTimeout(30000)//读取超时
+ .setConnectTimeout(30000)//连接超时
+ .build();
+
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setDefaultRequestConfig(requestConfig)
+ .build();
+
+ HttpPost post = new HttpPost(URL);
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("user",USER));
+ String STIME = String.valueOf(System.currentTimeMillis()/1000);
+ nvps.add(new BasicNameValuePair("stime",STIME));
+ nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME)));
+ nvps.add(new BasicNameValuePair("apiname","Open_queryOrderState"));//固定值,不需要修改
+ nvps.add(new BasicNameValuePair("orderid",orderid));
+
+ CloseableHttpResponse response = null;
+ String result = null;
+ try
+ {
+ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
+ response = httpClient.execute(post);
+ int statecode = response.getStatusLine().getStatusCode();
+ if(statecode == 200){
+ HttpEntity httpentity = response.getEntity();
+ if (httpentity != null){
+ //服务器返回
+ result = EntityUtils.toString(httpentity);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally{
+ try {
+ if(response!=null){
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ post.abort();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return result;
+
+ }
+
+
+
+ //方法4
+ private static String queryOrderInfoByDate(String sn,String strdate){
+
+ //通过POST请求,发送打印信息到服务器
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setSocketTimeout(30000)//读取超时
+ .setConnectTimeout(30000)//连接超时
+ .build();
+
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setDefaultRequestConfig(requestConfig)
+ .build();
+
+ HttpPost post = new HttpPost(URL);
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("user",USER));
+ String STIME = String.valueOf(System.currentTimeMillis()/1000);
+ nvps.add(new BasicNameValuePair("stime",STIME));
+ nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME)));
+ nvps.add(new BasicNameValuePair("apiname","Open_queryOrderInfoByDate"));//固定值,不需要修改
+ nvps.add(new BasicNameValuePair("sn",sn));
+ nvps.add(new BasicNameValuePair("date",strdate));//yyyy-MM-dd格式
+
+ CloseableHttpResponse response = null;
+ String result = null;
+ try
+ {
+ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
+ response = httpClient.execute(post);
+ int statecode = response.getStatusLine().getStatusCode();
+ if(statecode == 200){
+ HttpEntity httpentity = response.getEntity();
+ if (httpentity != null){
+ //服务器返回
+ result = EntityUtils.toString(httpentity);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally{
+ try {
+ if(response!=null){
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ post.abort();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return result;
+
+ }
+
+
+
+ //方法5
+ private static String queryPrinterStatus(String sn){
+
+ //通过POST请求,发送打印信息到服务器
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setSocketTimeout(30000)//读取超时
+ .setConnectTimeout(30000)//连接超时
+ .build();
+
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setDefaultRequestConfig(requestConfig)
+ .build();
+
+ HttpPost post = new HttpPost(URL);
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("user",USER));
+ String STIME = String.valueOf(System.currentTimeMillis()/1000);
+ nvps.add(new BasicNameValuePair("stime",STIME));
+ nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME)));
+ nvps.add(new BasicNameValuePair("apiname","Open_queryPrinterStatus"));//固定值,不需要修改
+ nvps.add(new BasicNameValuePair("sn",sn));
+
+ CloseableHttpResponse response = null;
+ String result = null;
+ try
+ {
+ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
+ response = httpClient.execute(post);
+ int statecode = response.getStatusLine().getStatusCode();
+ if(statecode == 200){
+ HttpEntity httpentity = response.getEntity();
+ if (httpentity != null){
+ //服务器返回
+ result = EntityUtils.toString(httpentity);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally{
+ try {
+ if(response!=null){
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ post.abort();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return result;
+
+ }
+
+
+ //生成签名字符串
+ private static String signature(String USER,String UKEY,String STIME){
+ String s = DigestUtils.sha1Hex(USER+UKEY+STIME);
+ return s;
+ }
+
+
+
+}