条码标签: P:A155V:11123;M:10884217-00/PCS;B:20090902VE;S:000000271974860; PO:5905618100/0040:Q:/10000/17/20:D:2019-10-18;YX:2020-09-07;
解析条码: M: 代表物料号10884217-00D: 代表生产时间2019-10-18 S:000000271974860
需求:产生生产批次格式为:生产日期六位(191018)+四位流水号一一1910180001
要求:相同物料生产日期为同一天的批次相同,不同物料生产日期相同的批次流水码累加+1
package com.eleven;
import java.util.HashMap;
import java.util.Map;
public class ElevenTest {
/**
* 流水号
*/
private static Integer serialNo = 0;
private static Map<String,String> mMap = new HashMap<>();
public static void main(String[] args) {
String str = "P:A155V:11123;M:10884217-00/PCS;B:20090902VE;S:000000271974860; PO:5905618100/0040;Q:/10000/17/20;D:2019-10-18;YX:2020-09-07;";
String str2 = "P:A155V:11123;M:10884217-00/PCA;B:20090902VE;S:000000271974860; PO:5905618100/0040;Q:/10000/17/20;D:2019-10-18;YX:2020-09-07;";
System.out.println(getSerialNo(str));
System.out.println(getSerialNo(str2));
}
private static String getSerialNo(String str){
String[] split = str.split(";");
String m = split[1];
String d = split[split.length - 2];
if (mMap.keySet().contains(m)) {
return mMap.get(m);
}else{
String serial = d.replaceAll("-", "").substring(2) + addZero(++serialNo);
mMap.put(m, serial);
return serial;
}
}
private static String addZero(Integer serial){
String str = serial + "";
while(str.length() < 4){
str = "0" + str;
}
return str;
}
}
参考下这篇,利用redis的自增保证原子性 https://www.cnblogs.com/ading-blog/p/9664533.html https://www.cnblogs.com/ading-blog/p/9664533.html