商品批次号解析工具类

背景:商品的批次号规则为恒定为八位日期数字“yyyyMMdd”,如“20200520”,代表着该商品是2020年05月20日生产的,该商品的效期是恒定的,单位为月

需求:批次号输入的时候校验格式,通过批次号和效期得到生产日期和失效日期

方法:

   一、建立批号工具类(BatchNumberUtil)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @ClassName BatchNumberUtil
 * @Description 批次号工具
 * @Author 北海派
 * @Date 2020/5/20 12:25
 * @Version 1.0
 **/
public class BatchNumberUtil {

    private static final Logger log = LoggerFactory.getLogger("BatchNumberUtil.class");

    /**
     * 校验格式
     *
     * @param batchNumber 20200508
     * @return
     */
    public static boolean isValidDate(String batchNumber) {
        boolean result = true;
        if (!StringUtils.isEmpty(batchNumber)) {
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
            try {
                format.setLenient(false);
                format.parse(batchNumber);
            } catch (ParseException e) {
                result = false;
                log.error("批次号格式异常:{}", batchNumber);
            }
        } else {
            result = false;
        }
        return result;
    }

    /**
     * 获取生产日期和失效日期
     *
     * @param batchNumber 批次号
     * @param month       效期(月数)
     * @return
     */
    public static List<Date> getDates(String batchNumber, Integer month) {

        List<Date> dateList = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
        Date production = null;
        Date invalid;
        if (!StringUtils.isEmpty(batchNumber) && month != null && month > 0) {
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
            try {
                format.setLenient(false);
                production = format.parse(batchNumber);
            } catch (ParseException e) {
                log.error("批次号格式异常:{}", batchNumber);
            }
            if (null != production) {
                calendar.setTime(production);
                calendar.add(Calendar.MONTH, month);
                invalid = calendar.getTime();

                dateList.add(0, production);
                dateList.add(1, invalid);
            }
        }
        return dateList;

    }
}