package com.lansi.lojoy.lojoymanage.util;
import com.lansi.lojoy.lojoymanage.common.constants.SerialNumberConstants;
import com.lansi.lojoy.lojoymanage.common.enums.SerialNumberTypeEnum;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SerialNumberUtil {
public static String getSerialNumberPrefix(SerialNumberTypeEnum serialNumberTypeEnum) {
DateTimeFormatter pattern = DateTimeFormatter.ofPattern(serialNumberTypeEnum.getDatePattern());
return serialNumberTypeEnum.getPrefix() + LocalDate.now().format(pattern);
}
public static String getCacheKey(String serialPrefix) {
return SerialNumberConstants.SERIAL_CACHE_PREFIX.concat(serialPrefix);
}
public static String completionSerialNumber(String serialPrefix,Long incrementalSerial,SerialNumberTypeEnum serialNumberTypeEnum) {
StringBuilder result = new StringBuilder(serialPrefix);
Integer length = serialNumberTypeEnum.getSerialLength() - String.valueOf(incrementalSerial).length();
for (int i = 0; i < length; i++) {
result.append("0");
}
result.append(incrementalSerial);
return result.toString();
}
}
package com.lansi.lojoy.lojoymanage.service.impl;
import com.lansi.lojoy.lojoymanage.common.constants.SerialNumberConstants;
import com.lansi.lojoy.lojoymanage.common.enums.SerialNumberTypeEnum;
import com.lansi.lojoy.lojoymanage.entity.PictureLibraryIdentify;
import com.lansi.lojoy.lojoymanage.service.SerialNumberService;
import com.lansi.lojoy.lojoymanage.util.SerialNumberUtil;
import com.lansi.lojoy.lojoymanage.util.basicexpansion.StringUtils;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
@RequiredArgsConstructor
public class SerialNumberServiceImpl implements SerialNumberService {
private final StringRedisTemplate stringRedisTemplate;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public String generateSerialNumber(SerialNumberTypeEnum serialNumberTypeEnum) {
String serialNumberPrefix = SerialNumberUtil.getSerialNumberPrefix(serialNumberTypeEnum);
String cacheKey = SerialNumberUtil.getCacheKey(serialNumberPrefix);
Long increment = stringRedisTemplate.opsForValue().increment(cacheKey);
if (serialNumberTypeEnum.getIsExpire()) {
Long expire = stringRedisTemplate.getExpire(cacheKey);
if (expire < 0) {
logger.info("expire>>>{}", expire);
stringRedisTemplate.expire(cacheKey, SerialNumberConstants.DEFAULT_CACHE_DAYS, TimeUnit.DAYS);
}
}
return SerialNumberUtil.completionSerialNumber(serialNumberPrefix, increment, serialNumberTypeEnum);
}
@Override
public PictureLibraryIdentify getPictureLibraryIdentify(SerialNumberTypeEnum serialNumberTypeEnum) {
String serialNumber = generateSerialNumber(serialNumberTypeEnum);
PictureLibraryIdentify identify = new PictureLibraryIdentify();
identify.setPictureIdentify(serialNumber);
switch (serialNumberTypeEnum) {
case TK_SERIAL_NUMBER:
identify.setPictureFileKey(StringUtils.format("PictureLibrary/Collection/Picture/{0}", serialNumber));
break;
case AL_SERIAL_NUMBER:
identify.setPictureFileKey(StringUtils.format("PictureLibrary/DesignerCase/Picture/{0}", serialNumber));
break;
}
return identify;
}
}
package com.lansi.lojoy.lojoymanage.common.enums;
import com.lansi.lojoy.lojoymanage.common.constants.SerialNumberConstants;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum SerialNumberTypeEnum {
TK_SERIAL_NUMBER("TK", SerialNumberConstants.SERIAL_YY_MM_DD_PREFIX, 5, 13,true),
AL_SERIAL_NUMBER("AL", SerialNumberConstants.SERIAL_YY_MM_DD_PREFIX, 5, 13,true),
TG_SERIAL_NUMBER("TG", SerialNumberConstants.SERIAL_YY_MM_DD_PREFIX, 5, 13,true),
GZH_SERIAL_NUMBER("GZH",SerialNumberConstants.NULL , 5, 8,false),
QA_SERIAL_NUMBER("QA",SerialNumberConstants.NULL , 5, 7,false),
TJW_SERIAL_NUMBER("TJW",SerialNumberConstants.NULL , 5, 7,false),
SP_SERIAL_NUMBER("SP",SerialNumberConstants.NULL , 5, 7,false);
private String prefix;
private String datePattern;
private Integer serialLength;
private Integer totalLength;
private Boolean isExpire;
}
package com.lansi.lojoy.lojoymanage.common.constants;
public class SerialNumberConstants {
public static final String SERIAL_CACHE_PREFIX = "Serial_Number_Cache_";
public static final String SERIAL_YY_MM_DD_PREFIX = "yyMMdd";
public static final String SERIAL_YYYY_MM_DD_PREFIX = "yyyyMMdd";
public static final Integer DEFAULT_CACHE_DAYS = 7;
public static final String NULL = "";
}