Commit a769defa sunke

条码规则修正

1 个父辈 0f9be23a
...@@ -95,6 +95,8 @@ public class BarcodeRule { ...@@ -95,6 +95,8 @@ public class BarcodeRule {
} }
public static BarcodeRule newRule(String ruleStr){ public static BarcodeRule newRule(String ruleStr){
BarcodeRule newRule = new BarcodeRule(); BarcodeRule newRule = new BarcodeRule();
newRule.ruleStr = ruleStr; newRule.ruleStr = ruleStr;
...@@ -369,14 +371,14 @@ public class BarcodeRule { ...@@ -369,14 +371,14 @@ public class BarcodeRule {
} }
if(!Strings.isNullOrEmpty(contains)){ if(!Strings.isNullOrEmpty(contains)){
//不是以endWith结尾 //不包含contains
if(!codeValue.contains(contains)){ if(!codeValue.contains(contains)){
return null; return null;
} }
} }
if(!Strings.isNullOrEmpty(endWith)){ if(!Strings.isNullOrEmpty(endWith)){
//不包含contains //不是以endWith结尾
if(!codeValue.endsWith(endWith)){ if(!codeValue.endsWith(endWith)){
return null; return null;
} }
...@@ -449,6 +451,11 @@ public class BarcodeRule { ...@@ -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 { ...@@ -560,6 +567,7 @@ public class BarcodeRule {
codeBean.setError("smfcore.error.barcode.noRule","解析规则未定义"); codeBean.setError("smfcore.error.barcode.noRule","解析规则未定义");
return codeBean; return codeBean;
} }
codeStr = codeBean.getCodeStr();
String[] codeArr = new String[]{codeStr}; String[] codeArr = new String[]{codeStr};
if(!Strings.isNullOrEmpty(separator)){ if(!Strings.isNullOrEmpty(separator)){
codeArr = codeStr.split(separator,-1); codeArr = codeStr.split(separator,-1);
...@@ -742,8 +750,8 @@ public class BarcodeRule { ...@@ -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]"; //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 = "锘緿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;"; // 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;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]"; //rule = "1>PN[-1:0:6]>3>RI[-1:0:6]";
//codeStr = "<ckdh>CC200612000194</ckdh><jybh>ADK20-\n" +"JY19060012~/jybh>"; //codeStr = "<ckdh>CC200612000194</ckdh><jybh>ADK20-\n" +"JY19060012~/jybh>";
...@@ -753,35 +761,35 @@ public class BarcodeRule { ...@@ -753,35 +761,35 @@ public class BarcodeRule {
//803 //803
//rule = "PN[6:0:-1],EXPDATEyyyy-MM-dd[-1:0:-1],BATCH,RI"; //rule = "PN[6:0:-1],EXPDATEyyyy-MM-dd[-1:0:-1],BATCH,RI";
//codeStr = "ALPHA OL107E,2021-11-11,00714026Z,002"; //codeStr = "ALPHA OL107E,2021-11-11,00714026Z,002";
codeStr = "IAC;6013A0073981;20200810;R2032E1128;10000;MI020A600568;"; // codeStr = "IAC;6013A0073981;20200810;R2032E1128;10000;MI020A600568;";
//codeStr = "IAC;B23D45;20200204;DCRFFD;45;WER23;"; // //codeStr = "IAC;B23D45;20200204;DCRFFD;45;WER23;";
rule = "SP;PN;PRODATEyyw[0:4:0];BATCH;QTY;RI;"; // rule = "SP;PN;PRODATEyyw[0:4:0];BATCH;QTY;RI;";
//rule = "SP;PN;PRODATEyyyyMMdd[0:8:0];BATCH;QTY;RI;"; // //rule = "SP;PN;PRODATEyyyyMMdd[0:8:0];BATCH;QTY;RI;";
//
codeStr = "IAC;6014A0489701;HI1206T161R-10;2047;AC20NKA0448KA;2000;VBG204768056"; // codeStr = "IAC;6014A0489701;HI1206T161R-10;2047;AC20NKA0448KA;2000;VBG204768056";
rule = "SP;PN;3;PRODATEyyw;BATCH;QTY;RI"; // 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="TJM210215000771&10446507326&15000&2021-01-18&NAUK11263MAB&&10446&&R107920210124A13OG"; // codeStr = "=7x8=140032005 18B030918B 200.000 614A 0001045024 0001 20200414-141329";
rule="RI&PN&QTY&PRODATEyyyy-MM-dd&5&6&7&8&9"; // rule = "PN BATCH QTY[-1:0:1] RI ";
codeStr="=7x8=TJM210308001935&10446500253&10000&2021-01-01&Z573226594&&10446&&R05242021030201596"; // 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="RI&PN&QTY&PRODATEyyyy-MM-dd&5&&6&&7"; // 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"; // codeStr = "792.664-0001000aq0fK792.664-00";
rule = "PN[0_2:10:0]RI[0_2:10:0]"; // 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 { ...@@ -789,10 +797,10 @@ public class BarcodeRule {
//截取补全后条码:00000A2C7363430200@0702043942@SX00010346575 (料号补全至18位,供应商代码补全至10位,Package 13位不变) //截取补全后条码:00000A2C7363430200@0702043942@SX00010346575 (料号补全至18位,供应商代码补全至10位,Package 13位不变)
//PN:PA2C7363430200,SP:V702043942,RI:3SSX00010346575,QTY:Q30NAR000 //PN:PA2C7363430200,SP:V702043942,RI:3SSX00010346575,QTY:Q30NAR000
//截取补全后条码:00000A2C7363430200@0702043942@SX00010346575 (料号补全至18位,供应商代码补全至10位,Package 13位不变) //截取补全后条码: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@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@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@@"; // 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"; // 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 //菲律宾料仓Reel ID : B11111Y934
// //
...@@ -803,15 +811,31 @@ public class BarcodeRule { ...@@ -803,15 +811,31 @@ public class BarcodeRule {
//Vendor: MURATA //Vendor: MURATA
// //
//Quantity: 10000 //Quantity: 10000
codeStr = "B11111Y9341PGDM0300013451T1TPC7N22AF11VMURATA1DNA1Q10000"; //codeStr = "B11111Y9341PGDM0300013451T1TPC7N22AF11VMURATA1DNA1Q10000";
//codeStr = "B11111Y9341PGDM03000"; //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); BarcodeRule br = BarcodeRule.newRule(rule);
Barcode b = br.toCodeBean(codeStr).getBarcode(); Barcode b = br.toCodeBean(codeStr).getBarcode();
if(b != null){ if(b != null){
System.out.println("PN:"+b.getPartNumber()); System.out.println("PN:"+b.getPartNumber());
System.out.println("RI:"+b.getBarcode()); 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("BATCH:"+b.getBatch());
System.out.println("MSL:"+b.getMsl()); System.out.println("MSL:"+b.getMsl());
System.out.println("PRODATE:"+b.getProduceDate()); System.out.println("PRODATE:"+b.getProduceDate());
...@@ -844,4 +868,72 @@ public class BarcodeRule { ...@@ -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; ...@@ -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.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil; import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.annotation.AnonymousPostMapping; import com.neotel.smfcore.security.annotation.AnonymousPostMapping;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -48,7 +49,8 @@ public class NeotelController { ...@@ -48,7 +49,8 @@ public class NeotelController {
@ApiOperation("6.1创建需求单") @ApiOperation("6.1创建需求单")
@AnonymousPostMapping("/outInfo") @RequestMapping("/outInfo")
@AnonymousAccess
public ResultBean outInfo(@RequestBody List<Map<String, Object>> paramList) { public ResultBean outInfo(@RequestBody List<Map<String, Object>> paramList) {
log.info("{}收到数据为:{}", "创建需求单outInfo", JsonUtil.toJsonStr(paramList)); log.info("{}收到数据为:{}", "创建需求单outInfo", JsonUtil.toJsonStr(paramList));
if (!paramList.isEmpty()) { if (!paramList.isEmpty()) {
...@@ -95,7 +97,8 @@ public class NeotelController { ...@@ -95,7 +97,8 @@ public class NeotelController {
} }
@ApiOperation("6.2关闭需求单") @ApiOperation("6.2关闭需求单")
@AnonymousPostMapping("/closeOutInfo") @RequestMapping("/closeOutInfo")
@AnonymousAccess
public ResultBean closeOutInfo(@RequestBody Map<String, String> paramMap) { public ResultBean closeOutInfo(@RequestBody Map<String, String> paramMap) {
String orderNo = paramMap.get("hSerial"); //需求工单 String orderNo = paramMap.get("hSerial"); //需求工单
if (ObjectUtils.isEmpty(orderNo)) { if (ObjectUtils.isEmpty(orderNo)) {
...@@ -110,7 +113,8 @@ public class NeotelController { ...@@ -110,7 +113,8 @@ public class NeotelController {
} }
@ApiOperation("6.3 获取实时库存") @ApiOperation("6.3 获取实时库存")
@AnonymousPostMapping("/inventory") @RequestMapping("/inventory")
@AnonymousAccess
public ResultBean inventory(@RequestBody Map<String, List<String>> paramMap) { public ResultBean inventory(@RequestBody Map<String, List<String>> paramMap) {
List<String> partNums = paramMap.get("partNums"); List<String> partNums = paramMap.get("partNums");
List<String> reelIds = paramMap.get("reelIds"); List<String> reelIds = paramMap.get("reelIds");
...@@ -157,7 +161,8 @@ public class NeotelController { ...@@ -157,7 +161,8 @@ public class NeotelController {
} }
@ApiOperation("6.4 设备状态获取") @ApiOperation("6.4 设备状态获取")
@AnonymousPostMapping("/deviceStatus") @RequestMapping("/deviceStatus")
@AnonymousAccess
public ResultBean deviceStatus(@RequestBody Map<String, Object> paramMap) { public ResultBean deviceStatus(@RequestBody Map<String, Object> paramMap) {
Collection<Storage> storageList = Lists.newArrayList(); Collection<Storage> storageList = Lists.newArrayList();
List<String> deviceKeyList = paramMap.get("deviceKeyList") == null ? null : JsonUtil.toList(paramMap.get("deviceKeyList").toString(), String.class); List<String> deviceKeyList = paramMap.get("deviceKeyList") == null ? null : JsonUtil.toList(paramMap.get("deviceKeyList").toString(), String.class);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!