提交 48b0757a authored 作者: 133's avatar 133

[rfid] 代码待h提交

上级 4af60f3a
...@@ -31,8 +31,6 @@ import java.util.Date; ...@@ -31,8 +31,6 @@ import java.util.Date;
@Where(clause = "delete_tag = 0") @Where(clause = "delete_tag = 0")
@ApiModel("RFID修改日志") @ApiModel("RFID修改日志")
public class RfidChangeLog { public class RfidChangeLog {
/** /**
* 主键id * 主键id
*/ */
...@@ -114,6 +112,7 @@ public class RfidChangeLog { ...@@ -114,6 +112,7 @@ public class RfidChangeLog {
@ApiModelProperty(value = "区块链记录id") @ApiModelProperty(value = "区块链记录id")
private String recordId; private String recordId;
public RfidChangeLog(Integer deviceId, String unit, Integer userAId, Integer userBId, String oldCardId, String newCardId, Integer rfidChangeBillId, Integer validTag) { public RfidChangeLog(Integer deviceId, String unit, Integer userAId, Integer userBId, String oldCardId, String newCardId, Integer rfidChangeBillId, Integer validTag) {
this.deviceId = deviceId; this.deviceId = deviceId;
this.unit = unit; this.unit = unit;
......
package com.tykj.dev.rfid.entity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author HuangXiahao
* @version V1.0
* @class SplitStringInfo
* @packageName com.tykj.dev.rfid.entity.vo
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SplitStringInfo {
private String splitString;
private Integer stringLineNumber;
}
...@@ -6,6 +6,7 @@ import com.tykj.dev.misc.exception.ApiException; ...@@ -6,6 +6,7 @@ import com.tykj.dev.misc.exception.ApiException;
import com.tykj.dev.misc.utils.ResultUtil; import com.tykj.dev.misc.utils.ResultUtil;
import com.tykj.dev.rfid.entity.vo.RfidCreateVo; import com.tykj.dev.rfid.entity.vo.RfidCreateVo;
import com.tykj.dev.rfid.entity.vo.RfidPrintVo; import com.tykj.dev.rfid.entity.vo.RfidPrintVo;
import com.tykj.dev.rfid.entity.vo.SplitStringInfo;
import com.tykj.dev.rfid.service.RfidService; import com.tykj.dev.rfid.service.RfidService;
import com.zebra.sdk.comm.Connection; import com.zebra.sdk.comm.Connection;
import com.zebra.sdk.comm.ConnectionException; import com.zebra.sdk.comm.ConnectionException;
...@@ -25,6 +26,7 @@ import java.io.FileOutputStream; ...@@ -25,6 +26,7 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.regex.Pattern;
/** /**
* 描述:用于调用RFID打印机打印标签 * 描述:用于调用RFID打印机打印标签
...@@ -36,6 +38,8 @@ import java.util.List; ...@@ -36,6 +38,8 @@ import java.util.List;
@Slf4j @Slf4j
public class RfidServiceImpl implements RfidService { public class RfidServiceImpl implements RfidService {
private static final int RFID_MAX_LENGTH= 24;
private static final int RFID_LINE_LENGTH = 24;
private static final Integer DEFAULT_USB_INDEX = 0; private static final Integer DEFAULT_USB_INDEX = 0;
private static ZebraPrinter printer; private static ZebraPrinter printer;
@Resource @Resource
...@@ -86,7 +90,7 @@ public class RfidServiceImpl implements RfidService { ...@@ -86,7 +90,7 @@ public class RfidServiceImpl implements RfidService {
@Override @Override
public boolean printString(String makeNumber,String deviceNumber,String content) { public boolean printString(String makeNumber,String deviceNumber,String content) {
try { try {
Connection connection = new TcpConnection("10.153.4.16", 6101); Connection connection = new TcpConnection("192.168.000.222", 6101);
connection.open(); connection.open();
printer = ZebraPrinterFactory.getInstance(connection); printer = ZebraPrinterFactory.getInstance(connection);
String demoFile = createDemoFile(printer.getPrinterControlLanguage(),makeNumber,deviceNumber, content, 60, 55); String demoFile = createDemoFile(printer.getPrinterControlLanguage(),makeNumber,deviceNumber, content, 60, 55);
...@@ -98,70 +102,43 @@ public class RfidServiceImpl implements RfidService { ...@@ -98,70 +102,43 @@ public class RfidServiceImpl implements RfidService {
} catch (IOException e) { } catch (IOException e) {
throw new ApiException(ResultUtil.failed("生成打印文件失败")); throw new ApiException(ResultUtil.failed("生成打印文件失败"));
} }
return true; return true;
} }
/** /**
* @param pl 打印机语言 * @param pl 打印机语言
* @param content 打印内容 * @param str1 空格一
* @param str2 空格二
* @param rfidContent 标签数据区内容
* @param marginLeft 标签左边距 * @param marginLeft 标签左边距
* @param marginTop 标签顶部边距 * @param marginTop 标签顶部边距
* @return 拼接成功的打印机ZPL * @return 拼接成功的打印机ZPL
* @throws IOException IO错误 * @throws IOException IO错误
*/ */
private String createDemoFile(PrinterLanguage pl,String makeNumber,String deviceNumber, String content, int marginLeft, int marginTop) throws IOException { private static String createDemoFile(PrinterLanguage pl,String rfidContent ,String str1,String str2, int marginLeft, int marginTop) throws IOException {
if (!checkRFID(rfidContent)){
throw new ApiException("");
}
File tmpFile = File.createTempFile("TEST_ZEBRA", "LBL"); File tmpFile = File.createTempFile("TEST_ZEBRA", "LBL");
FileOutputStream os = new FileOutputStream(tmpFile); FileOutputStream os = new FileOutputStream(tmpFile);
byte[] configLabel = null; byte[] configLabel = null;
SplitStringInfo deviceNumberSplit = spiltLineString(str1, null);
SplitStringInfo contentSplit = spiltLineString(str2, deviceNumberSplit.getStringLineNumber());
//补零
rfidContent = completeRfidStr(rfidContent);
if (pl == PrinterLanguage.ZPL) { if (pl == PrinterLanguage.ZPL) {
configLabel = ("^XA\n" + configLabel = ("^XA\n" +
// "~SD25\n" +
"^CW1,E:SIMSUN.FNT"+ "^CW1,E:SIMSUN.FNT"+
"~TA000\n" + "^RS,B30\n"+
"~JSN\n" +
"^LT0\n" +
"^MD30\n" +
"^MNW\n" +
"^MTT\n" +
"^PON\n" +
"^PMN\n" +
"^LH0,0\n" +
"^JMA\n" +
"^PR6,6\n" +
"~SD15\n" +
"^JUS\n" +
"^LRN\n" +
"^CI28\n" +
"^PA0,1,1,0\n" +
"^XZ\n" +
"^XA\n" +
"^MMT\n" +
"^PW428\n" +
"^LL264\n" +
"^LS0\n" +
"\n" +
"^FS" +
"^RFW,H\n" + "^RFW,H\n" +
"^FD"+content+"\n" + "^FD"+rfidContent+"\n" +
"^FS" + "^FS\n" +
"^LH" + marginLeft + "," + marginTop + "\n" + "^LH" + marginLeft + "," + marginTop + "\n" +
// "^A1N,22,,E:SIM000.FNT^FR^FD\n" + deviceNumberSplit.getSplitString()+
// "^LH"+marginLeft+",+"+marginTop + contentSplit.getSplitString()+
// "^FDxx测试^FS\n" +
"^A1N,25,,E:SIM000.FNT^FR^FD\n" +
"^FO0,0^FD生产号:"+makeNumber+"^FS\n" +
"^A1N,25,,E:SIM000.FNT^FR^FD\n" +
"^FO0,30^FD装备号:"+deviceNumber+"^FS\n" +
"^A1N,25,,E:SIM000.FNT^FR^FD\n" +
"^FO0,60^FD表面号:^FS"+
"^A1N,25,,E:SIM000.FNT^FR^FD\n" +
"^FO0,90^FD"+content+"^FS"+
"^PQ1,0,1,Y\n" + "^PQ1,0,1,Y\n" +
"^XZ\n" +
"^XZ").getBytes(); "^XZ").getBytes();
} }
os.write(configLabel); os.write(configLabel);
...@@ -170,6 +147,90 @@ public class RfidServiceImpl implements RfidService { ...@@ -170,6 +147,90 @@ public class RfidServiceImpl implements RfidService {
return tmpFile.getAbsolutePath(); return tmpFile.getAbsolutePath();
} }
public static String completeRfidStr(String rfidStr){
int needCompleteLength = RFID_MAX_LENGTH - rfidStr.length();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < needCompleteLength; i++) {
stringBuilder.append("0");
}
return stringBuilder.append(rfidStr).toString().toUpperCase();
}
/**
* 计算RFID每行的ZPL
* @param content
* @return
*/
public static SplitStringInfo spiltLineString(String content, Integer firstLine){
//中文占两个字符,使用正则匹配所有的非字符并将lenght*2
StringBuilder resultStringBuild = new StringBuilder();
Integer line = firstLine!=null?firstLine:0;
int totalLine = getLineNum(content,RFID_LINE_LENGTH);
for (int i = 0; i < totalLine; i++) {
String cutedStr = cutStr(content, RFID_LINE_LENGTH);
resultStringBuild.append("^A1N,25,,E:SIM000.FNT^FR^FD\n^FO0,"+line*30+"^FD"+cutedStr+"^FS\n");
content = content.substring(cutedStr.length());
line = line+1;
}
return new SplitStringInfo(resultStringBuild.toString(),line);
}
public static int getLineNum(String str, int cutLength){
int changedStrLenght = str.replaceAll("[^\\x00-\\xff]","**").length();
int num = changedStrLenght/cutLength;
if (changedStrLenght%cutLength>0){
num++;
}
return num;
}
public static String cutStr(String str , int cutLength){
int strlen = str.length();
int chrlen = str.replaceAll("[^\\x00-\\xff]","**").length();
if(chrlen<=cutLength){
return str;
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0, j=0; i < strlen; i++) {
Character chr = str.charAt(i);
if(chr<=255&&chr>=0){
j++; // ascii码为0-255,一个字符就是一个字节的长度
}else {
j+=2;
}
if(j<=cutLength){ // 当加上当前字符以后,如果总字节长度小于等于L,则将当前字符真实的+在result后
stringBuilder.append(chr);
}else{ // 反之则说明result已经是不拆分字符的情况下最接近L的值了,直接返回
return stringBuilder.toString();
}
}
return "";
}
/**
* 校验RFID的格式
* @param rfidStr 写入标签的数据
* @return
*/
public static Boolean checkRFID(String rfidStr){
int length = rfidStr.length();
if (length>24){
return false;
}
String pattern = "^[A-Z0-9]+";
return Pattern.matches(pattern, rfidStr);
}
public static void main(String[] args) throws ConnectionException, ZebraPrinterLanguageUnknownException, IOException {
Connection connection = new TcpConnection("192.168.0.222", 6101);
connection.open();
printer = ZebraPrinterFactory.getInstance(connection);
String demoFile = createDemoFile(printer.getPrinterControlLanguage(),"1234","装备号:xxxxxxxxxxxxxxxxxxxxxxxx", "内容:ABCD", 60, 80);
printer.sendFileContents(demoFile);
}
/** /**
* 描述:生成装备的RFID表面号 * 描述:生成装备的RFID表面号
* *
...@@ -250,4 +311,6 @@ public class RfidServiceImpl implements RfidService { ...@@ -250,4 +311,6 @@ public class RfidServiceImpl implements RfidService {
return stringBuffer.toString(); return stringBuffer.toString();
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论