请问如何用java实现

条码标签: 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