package com.yijia.station.utils;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/***
*
FeiEPrinterUtil
* 飞鹅打印机工具类
* @date 2021年1月17日
* @Author JK
*/
public class FeiEPrinterUtil {
private static Logger logger =(Logger) LoggerFactory.getLogger(FeiEPrinterUtil.class);
/*飞鹅后台管理登录账号
账号:79800875@qq.com
密码:jk18654585051
*/
public static final String URL = "http://api.feieyun.cn/Api/Open/";//不需要修改
public static final String USER = "79800875@qq.com";//*必填*:账号名
public static final String UKEY = "ScyIqKvntVSJkWhz";//*必填*: 飞鹅云后台注册账号后生成的UKEY 【备注:这不是填打印机的KEY】
//public static final String SN = "*********";//*必填*:打印机编号,必须要在管理后台里添加打印机或调用API接口添加之后,才能调用API
/*
* //================================小票打印功能===========================================//
* ***返回值JSON字符串***
* 成功:{"msg":"ok","ret":0,"data":"xxxxxxx_xxxxxxxx_xxxxxxxx","serverExecutedTime":5}
* 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
* @param sn
* @return
*/
public static String printReceipt(String sn, String content){
//标签说明:
//单标签:
//"
"为换行,""为切刀指令(主动切纸,仅限切刀打印机使用才有效果)
//""为打印LOGO指令(前提是预先在机器内置LOGO图片),""为钱箱或者外置音响指令
//成对标签:
//""为居中放大一倍,""为放大一倍,""为居中,字体变高一倍
//字体变宽一倍,""为二维码,""为字体加粗,""为右对齐
//拼凑订单内容时可参考如下格式
//根据打印纸张的宽度,自行调整内容的格式,可参考下面的样例格式
//String content;
// content = "测试打印
";
// content += "名称 单价 数量 金额
";
// content += "--------------------------------
";
// content += "饭 1.0 1 1.0
";
// content += "炒饭 10.0 10 10.0
";
// content += "蛋炒饭 10.0 10 100.0
";
// content += "鸡蛋炒饭 100.0 1 100.0
";
// content += "番茄蛋炒饭 1000.0 1 100.0
";
// content += "西红柿蛋炒饭 1000.0 1 100.0
";
// content += "西红柿鸡蛋炒饭 100.0 10 100.0
";
// content += "备注:加辣
";
// content += "--------------------------------
";
// content += "合计:xx.0元
";
// content += "送货地点:广州市南沙区xx路xx号
";
// content += "联系电话:13888888888888
";
// content += "订餐时间:2016-08-08 08:08:08
";
// content += "http://www.dzist.com";
//通过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);
logger.info("小票打印功能返回结果信息:" +result);
}
}
}
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;
}
/*
* //================================查询某订单是否打印成功=====================================//
* ***返回值JSON字符串***
* 成功:{"msg":"ok","ret":0,"data":true,"serverExecutedTime":2}//data:true为已打印,false为未打印
* 失败:{"msg":"错误描述","ret":非0, "data":null,"serverExecutedTime":7}
* @param orderid
* @return
*/
public 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);
logger.info("查询某订单是否打印成功信息:" + result);
}
}
}
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;
}
/*
* //=====================查询指定打印机某天的订单详情==========================//
* ***返回值JSON字符串***
* 成功:{"msg":"ok","ret":0,"data":{"print":6,"waiting":1},"serverExecutedTime":9}//print已打印,waiting为打印
* 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
* @param sn
* @param strdate
* @return
*/
public 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);
logger.info("查询指定打印机某天的订单详情: "+result);
}
}
}
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;
}
/*
* //=====================查询打印机的状态==============================//
* ***返回值JSON字符串***
* 成功:{"msg":"ok","ret":0,"data":"状态","serverExecutedTime":4}
* 失败:{"msg":"错误描述","ret":非0,"data":"null","serverExecutedTime":5}
* @param sn
* @return
*/
public 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);
logger.info("查询打印机的状态: "+result);
}
}
}
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;
}
/*
* //==================添加打印机接口(支持批量)==================
* //***返回值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);
* @param snlist
* @return
*/
public 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);
logger.info("添加打印机接口: " + result);
}
}
}
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;
}
/*
* 生成签名字符串
* @param USER
* @param UKEY
* @param STIME
* @return
*/
private static String signature(String USER,String UKEY,String STIME){
String s = DigestUtils.sha1Hex(USER+UKEY+STIME);
return s;
}
}