Commit a769defa sunke

条码规则修正

1 个父辈 0f9be23a
......@@ -95,6 +95,8 @@ public class BarcodeRule {
}
public static BarcodeRule newRule(String ruleStr){
BarcodeRule newRule = new BarcodeRule();
newRule.ruleStr = ruleStr;
......@@ -369,14 +371,14 @@ public class BarcodeRule {
}
if(!Strings.isNullOrEmpty(contains)){
//不是以endWith结尾
//不包含contains
if(!codeValue.contains(contains)){
return null;
}
}
if(!Strings.isNullOrEmpty(endWith)){
//不包含contains
//不是以endWith结尾
if(!codeValue.endsWith(endWith)){
return null;
}
......@@ -449,6 +451,11 @@ public class BarcodeRule {
}
}
public static void toRule(String codeStr){
String[] codeArr = new String[]{codeStr};
}
/**
* 从条码中解析尺寸和条码
*/
......@@ -560,6 +567,7 @@ public class BarcodeRule {
codeBean.setError("smfcore.error.barcode.noRule","解析规则未定义");
return codeBean;
}
codeStr = codeBean.getCodeStr();
String[] codeArr = new String[]{codeStr};
if(!Strings.isNullOrEmpty(separator)){
codeArr = codeStr.split(separator,-1);
......@@ -742,8 +750,8 @@ public class BarcodeRule {
//rule = "1;2;PN;BATCH[2:0:-1];5;6;EXPDATEyyyy/MM/dd[2:0:8];QTY[2:0:-1];8;9;10;RI[2:0:-1]";
//codeStr = "锘緿M;IN13浠跺\uE69C缁勮灪涓濇壒09913涓栬揪;BM;PH11A-ZZG02;DDDDMO180525;GG624-71;SX2019/8/25 0:00:00;SL2;HG;DL;ZP;QT90CECB112D1448DA91F485D0AA984B08";
codeStr = "??M8431CZ8133ZHMJQ21EJ3545-2016;IN?????BM6005K01;PH20012005;SC;CJ;LH;DDMO20072200041;CB;SX2023-2-27 0:00:00;SL1;JL;KG;HG;DL;ZP;QT;XT1001AS10000000517DT2;";
rule = "1;2;PN[-1:0:-1];BATCH[-1:0:-1];5;6;7;8;9;EXPDATEyyyy-MM-dd[2:0:8];QTY[2:0:-1];12;13;14;15;16;17;RI[-1:0:-1]";
// codeStr = "??M8431CZ8133ZHMJQ21EJ3545-2016;IN?????BM6005K01;PH20012005;SC;CJ;LH;DDMO20072200041;CB;SX2023-2-27 0:00:00;SL1;JL;KG;HG;DL;ZP;QT;XT1001AS10000000517DT2;";
// rule = "1;2;PN[-1:0:-1];BATCH[-1:0:-1];5;6;7;8;9;EXPDATEyyyy-MM-dd[2:0:8];QTY[2:0:-1];12;13;14;15;16;17;RI[-1:0:-1]";
//rule = "1>PN[-1:0:6]>3>RI[-1:0:6]";
//codeStr = "<ckdh>CC200612000194</ckdh><jybh>ADK20-\n" +"JY19060012~/jybh>";
......@@ -753,35 +761,35 @@ public class BarcodeRule {
//803
//rule = "PN[6:0:-1],EXPDATEyyyy-MM-dd[-1:0:-1],BATCH,RI";
//codeStr = "ALPHA OL107E,2021-11-11,00714026Z,002";
codeStr = "IAC;6013A0073981;20200810;R2032E1128;10000;MI020A600568;";
//codeStr = "IAC;B23D45;20200204;DCRFFD;45;WER23;";
rule = "SP;PN;PRODATEyyw[0:4:0];BATCH;QTY;RI;";
//rule = "SP;PN;PRODATEyyyyMMdd[0:8:0];BATCH;QTY;RI;";
codeStr = "IAC;6014A0489701;HI1206T161R-10;2047;AC20NKA0448KA;2000;VBG204768056";
rule = "SP;PN;3;PRODATEyyw;BATCH;QTY;RI";
codeStr = "=7x8=140032005 18B030918B 200.000 614A 0001045024 0001 20200414-141329";
rule = "PN BATCH QTY[-1:0:1] RI ";
codeStr = "[)>@06@12S0002@P791.704-06@1PGCJ21BR71H105KA01L@31P791.704-06@12V100@10VJPN-IA@2P@20P@6D20210727@14D20220727@30PY@Z1@K0@16K0@V48200085@3SSIA1715LS0N1S@Q3000NAR000@20T1@1TIA1715LS0@2T@1Z@@";
rule = "1@2@3@PN[1:0:-1]@5@6@7@8@9@10@11@12@13@14@15@16@RI[1:0:-1]@18@QTY[1:4:-1]@20@21@22@23@@";
codeStr = "792.664-0001000aq0fK792.664-00";
rule = "PN[-1:10:-1]QTY[10:5:-1]RI[15:5:-1]";
codeStr = "327203324369301963";
rule = "PN[-1_32:0:-1_3]RI[-1:0:-1]";
// codeStr = "IAC;6013A0073981;20200810;R2032E1128;10000;MI020A600568;";
// //codeStr = "IAC;B23D45;20200204;DCRFFD;45;WER23;";
// rule = "SP;PN;PRODATEyyw[0:4:0];BATCH;QTY;RI;";
// //rule = "SP;PN;PRODATEyyyyMMdd[0:8:0];BATCH;QTY;RI;";
//
// codeStr = "IAC;6014A0489701;HI1206T161R-10;2047;AC20NKA0448KA;2000;VBG204768056";
// rule = "SP;PN;3;PRODATEyyw;BATCH;QTY;RI";
codeStr="TJM210215000771&10446507326&15000&2021-01-18&NAUK11263MAB&&10446&&R107920210124A13OG";
rule="RI&PN&QTY&PRODATEyyyy-MM-dd&5&6&7&8&9";
// codeStr = "=7x8=140032005 18B030918B 200.000 614A 0001045024 0001 20200414-141329";
// rule = "PN BATCH QTY[-1:0:1] RI ";
codeStr="=7x8=TJM210308001935&10446500253&10000&2021-01-01&Z573226594&&10446&&R05242021030201596";
rule="RI&PN&QTY&PRODATEyyyy-MM-dd&5&&6&&7";
// codeStr = "[)>@06@12S0002@P791.704-06@1PGCJ21BR71H105KA01L@31P791.704-06@12V100@10VJPN-IA@2P@20P@6D20210727@14D20220727@30PY@Z1@K0@16K0@V48200085@3SSIA1715LS0N1S@Q3000NAR000@20T1@1TIA1715LS0@2T@1Z@@";
// rule = "1@2@3@PN[1:0:-1]@5@6@7@8@9@10@11@12@13@14@15@16@RI[1:0:-1]@18@QTY[1:4:-1]@20@21@22@23@@";
codeStr = "2720332436";
rule = "PN[0_2:10:0]RI[0_2:10:0]";
// codeStr = "792.664-0001000aq0fK792.664-00";
// rule = "PN[-1:10:-1]QTY[10:5:-1]RI[15:5:-1]";
//
// codeStr = "327203324369301963";
// rule = "PN[-1_32:0:-1_3]RI[-1:0:-1]";
//
//
// codeStr="TJM210215000771&10446507326&15000&2021-01-18&NAUK11263MAB&&10446&&R107920210124A13OG";
// rule="RI&PN&QTY&PRODATEyyyy-MM-dd&5&6&7&8&9";
//
// codeStr="=7x8=TJM210308001935&10446500253&10000&2021-01-01&Z573226594&&10446&&R05242021030201596";
// rule="RI&PN&QTY&PRODATEyyyy-MM-dd&5&&6&&7";
//
// codeStr = "2720332436";
// rule = "PN[0_2:10:0]RI[0_2:10:0]";
//大陆科技
//条码截取规则:
......@@ -789,10 +797,10 @@ public class BarcodeRule {
//截取补全后条码:00000A2C7363430200@0702043942@SX00010346575 (料号补全至18位,供应商代码补全至10位,Package 13位不变)
//PN:PA2C7363430200,SP:V702043942,RI:3SSX00010346575,QTY:Q30NAR000
//截取补全后条码:00000A2C7363430200@0702043942@SX00010346575 (料号补全至18位,供应商代码补全至10位,Package 13位不变)
codeStr = "[)>@06@12S0002@PA2C4000670322@1P700042761@31PCGA4F2X7R2A103KT5Y2A@12V700042761@10VJPN-AKITA@2P1@20P25gsm@6D20210826@14D20220314@30PN@ZN@K0@16K0@V000000000@3SS100000000068@Q1KGM000@20T1@1T1@2T@1Z1@@";
codeStr = "[)>@06@12S0002@PA2C7363430200@1P28.5823-0813.1@31P2858230813100@12VC11001844@10VCHN-KUNSHAN@2P@20P@6D20220208@14D20220916@30PY@ZN@K5100012719@16K0@V702043942@3SSX00010346575@Q30NAR000@20T2@1TPEax98-02@2T2204-002@1ZOrigin: CN215300@@";
codeStr = "[)>@06@12S0002@PA2C4000670322@1P700042761@31PCGA4F2X7R2A103KT5Y2A@12V700042761@10VJPN-AKITA@2P1@20P25gsm@6D20210826@14D20220314@30PN@ZN@K0@16K0@V000000000@3SS100000000068@Q1KGM000@20T1@1T1@2T@1Z1@@";
rule = "1@2@3@PPN@5@6@7@8@9@10@6DPRODATEyyyyMMdd@14DEXPDATEyyyyMMdd@13@14@15@16@VSP@3SRI@QQTYKGM000@20@1TBATCH@22@23@24@25";
// codeStr = "[)>@06@12S0002@PA2C4000670322@1P700042761@31PCGA4F2X7R2A103KT5Y2A@12V700042761@10VJPN-AKITA@2P1@20P25gsm@6D20210826@14D20220314@30PN@ZN@K0@16K0@V000000000@3SS100000000068@Q1KGM000@20T1@1T1@2T@1Z1@@";
// codeStr = "[)>@06@12S0002@PA2C7363430200@1P28.5823-0813.1@31P2858230813100@12VC11001844@10VCHN-KUNSHAN@2P@20P@6D20220208@14D20220916@30PY@ZN@K5100012719@16K0@V702043942@3SSX00010346575@Q30NAR000@20T2@1TPEax98-02@2T2204-002@1ZOrigin: CN215300@@";
// codeStr = "[)>@06@12S0002@PA2C4000670322@1P700042761@31PCGA4F2X7R2A103KT5Y2A@12V700042761@10VJPN-AKITA@2P1@20P25gsm@6D20210826@14D20220314@30PN@ZN@K0@16K0@V000000000@3SS100000000068@Q1KGM000@20T1@1T1@2T@1Z1@@";
// rule = "1@2@3@PPN@5@6@7@8@9@10@6DPRODATEyyyyMMdd@14DEXPDATEyyyyMMdd@13@14@15@16@VSP@3SRI@QQTYKGM000@20@1TBATCH@22@23@24@25";
//菲律宾料仓Reel ID : B11111Y934
//
......@@ -803,15 +811,31 @@ public class BarcodeRule {
//Vendor: MURATA
//
//Quantity: 10000
codeStr = "B11111Y9341PGDM0300013451T1TPC7N22AF11VMURATA1DNA1Q10000";
//codeStr = "B11111Y9341PGDM0300013451T1TPC7N22AF11VMURATA1DNA1Q10000";
//codeStr = "B11111Y9341PGDM03000";
rule = "RI[-1:10:-1]PN[12:-14:-1]BATCH[28:9:-1]SP[39:6:-1]QTY[-1:-5:-1]";
//rule = "RI[-1:10:-1]PN[12:-14:-1]BATCH[28:9:-1]SP[39:6:-1]QTY[-1:-5:-1]";
rule ="BATCH;PRODATEyyyy-MM-dd[1:10:-1]EXPD[-1:-4:-1];PN[1:12:-1]SP[13:5:-1]QTY[-1:-5:-1];RI";
codeStr = "L00002019090199951797;E2019-09-01 0365;B8C.R2003.V81506072019090103000;R506072019102200356";
Map<String,String> filedMap = new HashMap<>();
filedMap.put("RI","R506072019102200356");
filedMap.put("PN","8C.R2003.V81");
filedMap.put("BATCH","L00002019090199951797");
filedMap.put("SP","50607");
filedMap.put("QTY","3000");
filedMap.put("PRODATEyyyy-MM-dd","2019-09-01");
filedMap.put("EXPD","0365");
System.out.println("====="+toCodeRule(codeStr,filedMap));
codeStr = "=1+0x0-13x12=SU100PM0JPR";
rule = "PN[-1_SU:2:-1][RI]";
BarcodeRule br = BarcodeRule.newRule(rule);
Barcode b = br.toCodeBean(codeStr).getBarcode();
if(b != null){
System.out.println("PN:"+b.getPartNumber());
System.out.println("RI:"+b.getBarcode());
System.out.println("Amount:"+b.getAmount());
System.out.println("QTY:"+b.getAmount());
System.out.println("BATCH:"+b.getBatch());
System.out.println("MSL:"+b.getMsl());
System.out.println("PRODATE:"+b.getProduceDate());
......@@ -844,4 +868,72 @@ public class BarcodeRule {
}
private static String toCodeRule(String codeStr, Map<String,String> fieldValueMap){
String separator = findSeparator(codeStr);
String[] codeArr = new String[]{codeStr};
if(!Strings.isNullOrEmpty(separator)){
codeArr = codeStr.split(separator);
}
String[] ruleArr = new String[codeArr.length];
for (String fieldName : fieldValueMap.keySet()) {
String fieldValue = fieldValueMap.get(fieldName);
for (int i = 0; i < codeArr.length; i++) {
String code = codeArr[i];
int index = code.indexOf(fieldValue);
if(index >=0){
//包含字段值,
String oldRule = ruleArr[i];
if(oldRule == null){
oldRule = "";
}
oldRule = oldRule+ fieldName;
if(!code.equals(fieldValue)){
oldRule = oldRule + "["+index+":"+fieldValue.length()+":-1]";
}
ruleArr[i] = oldRule;
break;
}
}
}
String result = "";
for (int i = 0; i < ruleArr.length; i++) {
String ruleItem = ruleArr[i];
if(ruleItem == null){
ruleItem = "" + (i+1);
}
result = result + ruleItem;
if(i < ruleArr.length - 1){
result = result + separator;
}
}
System.out.println("=====" + result);
return result;
}
private static String findSeparator(String str){
//先找分割符,分割出来数组数量最多的放第一个
String trySeparator = "";
String result = "";
//找最多的字符
String[] tempArr = new String[]{};
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(!Character.isLetterOrDigit(c)){
//不是字母和数字才可以作为分割符
String separator = toRegexStr(c + "");
if(trySeparator.indexOf(c) == -1){
String[] ss = str.split(separator,-1);
if(ss.length > tempArr.length){
trySeparator = c + trySeparator;
result =separator;
tempArr = ss;
}else{
trySeparator = trySeparator + c;
}
};
}
}
return result;
}
}
......@@ -18,6 +18,7 @@ import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.annotation.AnonymousPostMapping;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -48,7 +49,8 @@ public class NeotelController {
@ApiOperation("6.1创建需求单")
@AnonymousPostMapping("/outInfo")
@RequestMapping("/outInfo")
@AnonymousAccess
public ResultBean outInfo(@RequestBody List<Map<String, Object>> paramList) {
log.info("{}收到数据为:{}", "创建需求单outInfo", JsonUtil.toJsonStr(paramList));
if (!paramList.isEmpty()) {
......@@ -95,7 +97,8 @@ public class NeotelController {
}
@ApiOperation("6.2关闭需求单")
@AnonymousPostMapping("/closeOutInfo")
@RequestMapping("/closeOutInfo")
@AnonymousAccess
public ResultBean closeOutInfo(@RequestBody Map<String, String> paramMap) {
String orderNo = paramMap.get("hSerial"); //需求工单
if (ObjectUtils.isEmpty(orderNo)) {
......@@ -110,7 +113,8 @@ public class NeotelController {
}
@ApiOperation("6.3 获取实时库存")
@AnonymousPostMapping("/inventory")
@RequestMapping("/inventory")
@AnonymousAccess
public ResultBean inventory(@RequestBody Map<String, List<String>> paramMap) {
List<String> partNums = paramMap.get("partNums");
List<String> reelIds = paramMap.get("reelIds");
......@@ -157,7 +161,8 @@ public class NeotelController {
}
@ApiOperation("6.4 设备状态获取")
@AnonymousPostMapping("/deviceStatus")
@RequestMapping("/deviceStatus")
@AnonymousAccess
public ResultBean deviceStatus(@RequestBody Map<String, Object> paramMap) {
Collection<Storage> storageList = Lists.newArrayList();
List<String> deviceKeyList = paramMap.get("deviceKeyList") == null ? null : JsonUtil.toList(paramMap.get("deviceKeyList").toString(), String.class);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!