yshop3.0-alpha版本

This commit is contained in:
hupeng
2020-06-27 16:29:35 +08:00
parent 31189da79e
commit 761840d8f2
1153 changed files with 27921 additions and 33489 deletions

View File

@ -0,0 +1,545 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang;
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 java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @author LionCity
* @date Created in 2020-04-01 10:47
* @description飞鹅打印机
* @modified By
* @version: V1.0
*/
public class Api_java_demo {
public static final String URL = "http://api.feieyun.cn/Api/Open/";//不需要修改
public static final String USER = "18948217680@163.com";//*必填*:账号名
public static final String UKEY = "Fg4Nb6sykhK6wJDj";//*必填*: 飞鹅云后台注册账号后生成的UKEY 【备注这不是填打印机的KEY】
public static final String SN = "918502791";//*必填*打印机编号必须要在管理后台里添加打印机或调用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);
}
//=====================以下是函数实现部分================================================
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<NameValuePair> nvps = new ArrayList<NameValuePair>();
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){
//标签说明:
//单标签:
//"<BR>"为换行,"<CUT>"为切刀指令(主动切纸,仅限切刀打印机使用才有效果)
//"<LOGO>"为打印LOGO指令(前提是预先在机器内置LOGO图片),"<PLUGIN>"为钱箱或者外置音响指令
//成对标签:
//"<CB></CB>"为居中放大一倍,"<B></B>"为放大一倍,"<C></C>"为居中,<L></L>字体变高一倍
//<W></W>字体变宽一倍,"<QR></QR>"为二维码,"<BOLD></BOLD>"为字体加粗,"<RIGHT></RIGHT>"为右对齐
//拼凑订单内容时可参考如下格式
//根据打印纸张的宽度,自行调整内容的格式,可参考下面的样例格式
String content;
content = "<CB>测试打印</CB><BR>";
content += "名称      单价 数量 金额<BR>";
content += "--------------------------------<BR>";
content += "饭       1.0 1 1.0<BR>";
content += "炒饭      10.0 10 10.0<BR>";
content += "蛋炒饭     10.0 10 100.0<BR>";
content += "鸡蛋炒饭    100.0 1 100.0<BR>";
content += "番茄蛋炒饭   1000.0 1 100.0<BR>";
content += "西红柿蛋炒饭  1000.0 1 100.0<BR>";
content += "西红柿鸡蛋炒饭 100.0 10 100.0<BR>";
content += "西红柿鸡蛋炒饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭饭 100.0 10 100.0<BR>";
content += "备注:加辣<BR>";
content += "--------------------------------<BR>";
content += "合计xx.0元<BR>";
content += "送货地点广州市南沙区xx路xx号<BR>";
content += "联系电话13888888888888<BR>";
content += "订餐时间2016-08-08 08:08:08<BR>";
content += "<QR>https://admin.jidanguo10.com/weixin?id=2</QR>";
//通过POST请求发送打印信息到服务器
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(30000)//读取超时
.setConnectTimeout(30000)//连接超时
.build();
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultRequestConfig(requestConfig)
.build();
HttpPost post = new HttpPost(URL);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
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 = "<DIRECTION>1</DIRECTION>";//设定打印时出纸和打印字体的方向n 0 或 1每次设备重启后都会初始化为 0 值设置1正向出纸0反向出纸
content += "<TEXT x='9' y='10' font='12' w='1' h='2' r='0'>#001 五号桌 1/3</TEXT><TEXT x='80' y='80' font='12' w='2' h='2' r='0'>可乐鸡翅</TEXT><TEXT x='9' y='180' font='12' w='1' h='1' r='0'>张三先生 13800138000</TEXT>";//40mm宽度标签纸打印例子打开注释调用标签打印接口打印
//通过POST请求发送打印信息到服务器
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(30000)//读取超时
.setConnectTimeout(30000)//连接超时
.build();
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultRequestConfig(requestConfig)
.build();
HttpPost post = new HttpPost(URL);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
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<NameValuePair> nvps = new ArrayList<NameValuePair>();
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<NameValuePair> nvps = new ArrayList<NameValuePair>();
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<NameValuePair> nvps = new ArrayList<NameValuePair>();
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;
}
}

View File

@ -0,0 +1,22 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class EladminSystemApplicationTests {
@Test
public void contextLoads() {
}
}

View File

@ -0,0 +1,104 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang;
import cn.hutool.core.img.ImgUtil;
import org.springframework.web.multipart.MultipartFile;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* @author LionCity
* @date Created in 2020-03-24 16:45
* @description
* @modified By
* @version:
*/
public class FileTest {
public static void main(String[] args) throws IOException {
readfile("D:/upload");
}
public static void readfile(String filepath) throws FileNotFoundException, IOException {
try {
File file = new File(filepath);
if (!file.isDirectory()) {
System.out.println("文件");
System.out.println("path=" + file.getPath());
System.out.println("absolutepath=" + file.getAbsolutePath());
System.out.println("name=" + file.getName());
File targetFile = new File(file.getPath().replace("upload","uploadZip"));
if (!targetFile.getParentFile().exists()) {
targetFile.getParentFile().mkdirs();
}
ImgUtil.scale(file,targetFile,getAccuracy(file.length()/ 1024));
} else if (file.isDirectory()) {
System.out.println("文件夹");
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File readfile = new File(filepath + "\\" + filelist[i]);
if (!readfile.isDirectory()) {
System.out.println("path=" + readfile.getPath());
System.out.println("absolutepath="
+ readfile.getAbsolutePath());
System.out.println("name=" + readfile.getName());
File targetFile = new File(readfile.getPath().replace("upload","uploadZip"));
System.out.println("path2=" + targetFile.getPath());
System.out.println("fileSize=" + targetFile.length());
if (!targetFile.getParentFile().exists()) {
targetFile.getParentFile().mkdirs();
}
ImgUtil.scale(readfile,targetFile,getAccuracy(file.length()/ 1024));
} else if (readfile.isDirectory()) {
readfile(filepath + "\\" + filelist[i]);
}
}
}
} catch (FileNotFoundException e) {
System.out.println("readfile() Exception:" + e.getMessage());
}
}
public static BufferedImage inputImage(MultipartFile file) {
BufferedImage srcImage = null;
try {
FileInputStream in = (FileInputStream) file.getInputStream();
srcImage = javax.imageio.ImageIO.read(in);
} catch (IOException e) {
System.out.println("读取图片文件出错!" + e.getMessage());
}
return srcImage;
}
/**
* 自动调节精度(经验数值)
*
* @param size 源图片大小
* @return 图片压缩质量比
*/
public static float getAccuracy(long size) {
float accuracy;
if (size < 400) {
accuracy = 0.85f;
} else if (size < 900) {
accuracy = 0.75f;
} else if (size < 2047) {
accuracy = 0.6f;
} else if (size < 3275) {
accuracy = 0.44f;
} else {
accuracy = 0.4f;
}
return accuracy;
}
}

View File

@ -0,0 +1,42 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang;
public class Order {
private String title;
private String price;
private String num;
public Order() {
}
public Order(String title, String price, String num) {
this.title = title;
this.price = price;
this.num = num;
}
@Override
public String toString() {
return "Order [title=" + title + ", price=" + price + ", num=" + num + "]";
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
}

View File

@ -0,0 +1,351 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang;
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 java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@SuppressWarnings("static-access")
public class PrintUtil4 {
static PrintUtil4 p = new PrintUtil4();
public static final String URL = "http://api.feieyun.cn/Api/Open/";//不需要修改
public static final String USER = "18948217680@163.com";//*必填*:账号名
public static final String UKEY = "Fg4Nb6sykhK6wJDj";//*必填*: 飞鹅云后台注册账号后生成的UKEY 【备注这不是填打印机的KEY】
public static final String SN = "918502791";//*必填*打印机编号必须要在管理后台里添加打印机或调用API接口添加之后才能调用API
public static void main(String[] args) {
// ======================1.多个打印机同时打印======================================
// List<String> list = new ArrayList<>();
// list.add(SN);
// list.add(SN2);
// for (String sn : list) {
// String method1 = p.print(sn);
// System.out.println(method1);
// }
// ======================2单个打印机打印======================================
String result = p.print(SN);
System.out.println(result);
// p.writeFile("E:/retlog.txt", result);
// System.out.println("返回json数据已保存至 E:/retlog.txt 文件,有需要请查看");
}
// =====================打印订单排版Demo==========================
private static String print(String sn) {
// =====================1.字体大小效果测试=====================================
// String s1 = "<C><DB>放大两倍</DB></C><BR>";
// String s2 = "<C><B>放大一倍</B></C><BR>";
// String s3 = "<C><L>变高一倍</L></C><BR>";
// String s4 = "<C><W>变宽一倍</W></C><BR>";
// String s5 = "<C><BOLD>字体加粗</BOLD></C><BR>";
// String s6 = "<C>默认不加标签最小效果</C><BR>";
// String s7 = "<C><L><BOLD>变高一倍加粗</BOLD></L></C><BR>";
// String s8 = "<C><W><BOLD>变宽一倍加粗</BOLD></W></C><BR>";
//
// String content = s1+s2+s3+s4+s5+s6+s7+s8;
// =====================1.end===================================
// =====================2.字体行间距测试======================================
// String content = "<CB>飞鹅云测试</CB><BR>";
// content += "名称 单价 数量 金额<BR>";
// content += "--------------------------------<BR>";
// content += "鸡蛋炒饭1   100.0 1 100.0<BR>";
// content += "鸡蛋炒饭2   100.0 2 200.0<BR>";
// content += "鸡蛋炒饭3   100.0 3 300.0<BR>";
// byte[] spaces = new byte[3];
// spaces[0] = 0x1b;
// spaces[1] = 0x33;
// spaces[2] = 0x30;//7f => 50 行距距离设置最小值为\x50 最大值为\x7f
// String ls = new String(spaces);//行距开始
// byte[] spacee = new byte[2];
// spacee[0] = 0x1b;
// spacee[1] = 0x32;
// String le = new String(spacee);//行距结束
// content += ls+content+le;
// =====================2.end======================================
// =====================3.字体大小测试===========================================
// String content = "鸡蛋炒饭 数量:1 单价:100.0 总额:100.0<BR>";
// byte[] start = new byte[3];
// start[0] = 0x1d;
// start[1] = 0x21;
// start[2] = 0x11;//7f => 50 行距距离设置最小值为\x50 最大值为\x7f
// String ls = new String(start);//行距开始
// byte[] end = new byte[4];
// end[0] = 0x0d;
// end[1] = 0x0a;
// end[2] = 0x1b;
// end[3] = 0x40;
// String le = new String(end);//行距结束
// content += ls+content+le;
// =====================3.end=======================================
// *********************4.排版测试*******************************************************************
Order order1 = new Order("青头鸭", "100.4", "10");
/* Order order2 = new Order("小蘑菇音乐铃 JSN-3022 -文创 UP+", "10.3", "10");
Order order3 = new Order("功夫小子 手机座 JSN-1002-文创 UP+", "10.5", "10");
Order order4 = new Order("zsfhjksgh菜名四dk", "10.0", "8");
Order order5 = new Order("zsfhjksghd菜名五hjk", "100.2", "8");*/
List<Order> orderList = new ArrayList<>();
orderList.add(order1);
/*orderList.add(order2);
orderList.add(order3);
orderList.add(order4);
orderList.add(order5);*/
String content = p.getOrder(orderList, 14, 6, 3, 6);//orderList为数组 b1代表名称列占用14个字节 b2单价列6个字节 b3数量列3个字节 b4金额列6个字节-->这里的字节数可按自己需求自由改写14+6+3+6再加上代码写的3个空格就是32了58mm打印机一行总占32字节
// 通过POST请求发送打印信息到服务器
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(30000)// 读取超时
.setConnectTimeout(30000)// 连接超时
.build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build();
HttpPost post = new HttpPost(URL);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("user", USER));
String STIME = String.valueOf(System.currentTimeMillis() / 1000);
nvps.add(new BasicNameValuePair("stime", STIME));
nvps.add(new BasicNameValuePair("sig", p.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 {
p.close(response, post, httpClient);
}
return result;
}
public void writeFile(String path, String content) {
content = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date()) + ",保存的订单日志信息为: " + content;
FileOutputStream fos = null;
try {
fos = new FileOutputStream(path, true);
fos.write(content.getBytes());
fos.write("\r<BR>".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static String signature(String USER, String UKEY, String STIME) {
return DigestUtils.sha1Hex(USER + UKEY + STIME);
}
//飞鹅技术支持
//#########################################################################################################
//进行订单的多列排版demo实现商品超出字数的自动换下一行对齐处理同时保持各列进行对齐
//排版原理是统计字符串字节数,补空格换行处理
//58mm的机器,一行打印16个汉字,32个字母;80mm的机器,一行打印24个汉字,48个字母
//#########################################################################################################
//orderList为数组 b1代表名称列占用字节 b2单价列 b3数量列 b4金额列-->这里的字节数可按自己需求自由改写详细往上看112行调用实际例子运用
public static String getOrder(List<Order> orderList, int b1, int b2, int b3, int b4) {
String orderInfo = "<CB>预养订单测试</CB><BR>";
orderInfo += "名称 单价 数量 金额<BR>";
orderInfo += "--------------------------------<BR>";
double totals = 0.0;
for (int i = 0; i < orderList.size(); i++) {
String title = orderList.get(i).getTitle();
String price = orderList.get(i).getPrice();
String num = orderList.get(i).getNum();
String total = "" + Double.valueOf(price) * Integer.parseInt(num);
totals += Double.parseDouble(total);
price = p.addSpace(price, b2);
num = p.addSpace(num, b3);
total = p.addSpace(total, b4);
String otherStr = " " + price + num + " " + total;
int tl = 0;
try {
tl = title.getBytes("GBK").length;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
int spaceNum = (tl / b1 + 1) * b1 - tl;
if (tl < b1) {
for (int k = 0; k < spaceNum; k++) {
title += " ";
}
title += otherStr;
} else if (tl == b1) {
title += otherStr;
} else {
List<String> list = null;
if (p.isEn(title)) {
list = p.getStrList(title, b1);
} else {
list = p.getStrList(title, b1 / 2);
}
String s0 = p.titleAddSpace(list.get(0));
title = s0 + otherStr + "<BR>";// 添加 单价 数量 总额
String s = "";
for (int k = 1; k < list.size(); k++) {
s += list.get(k);
}
try {
s = p.getStringByEnter(b1, s);
} catch (Exception e) {
e.printStackTrace();
}
title += s;
}
orderInfo += title + "<BR>";
}
orderInfo += "--------------------------------<BR>";
orderInfo += "合计:" + totals + "元<BR>";
orderInfo += "送货地点广州市南沙区xx路xx号<BR>";
orderInfo += "联系电话020-39004606<BR>";
orderInfo += "订餐时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "<BR>";
orderInfo += "备注:加辣<BR>";
orderInfo += "<QR>https://admin.jidanguo10.com/weixin?id=2</QR>";
return orderInfo;
}
public String titleAddSpace(String str) {
int k = 0;
int b = 14;
try {
k = str.getBytes("GBK").length;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
for (int i = 0; i < b - k; i++) {
str += " ";
}
return str;
}
public static String getStringByEnter(int length, String string) throws Exception {
for (int i = 1; i <= string.length(); i++) {
if (string.substring(0, i).getBytes("GBK").length > length) {
return string.substring(0, i - 1) + "<BR>" + getStringByEnter(length, string.substring(i - 1));
}
}
return string;
}
public static String addSpace(String str, int size) {
int len = str.length();
if (len < size) {
for (int i = 0; i < size - len; i++) {
str += " ";
}
}
return str;
}
public static Boolean isEn(String str) {
Boolean b = false;
try {
b = str.getBytes("GBK").length == str.length();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return b;
}
public static List<String> getStrList(String inputString, int length) {
int size = inputString.length() / length;
if (inputString.length() % length != 0) {
size += 1;
}
return getStrList(inputString, length, size);
}
public static List<String> getStrList(String inputString, int length, int size) {
List<String> list = new ArrayList<String>();
for (int index = 0; index < size; index++) {
String childStr = substring(inputString, index * length, (index + 1) * length);
list.add(childStr);
}
return list;
}
public static String substring(String str, int f, int t) {
if (f > str.length())
return null;
if (t > str.length()) {
return str.substring(f, str.length());
} else {
return str.substring(f, t);
}
}
public static void close(CloseableHttpResponse response, HttpPost post, CloseableHttpClient httpClient) {
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();
}
}
}

View File

@ -0,0 +1,25 @@
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class YshopSystemApplicationTests {
@Test
public void contextLoads() {
}
public static void main(String[] args) {
}
}