package com.vci.ubcs.code.algorithm;
|
|
import com.alibaba.nacos.common.utils.StringUtils;
|
import com.vci.ubcs.code.annotation.MdmSerialAlgorithm;
|
import com.vci.ubcs.code.annotation.MdmSerialAlgorithmMethod;
|
import com.vci.ubcs.code.dto.CodeCustomSerialDTO;
|
import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
|
import com.vci.ubcs.starter.exception.VciBaseException;
|
import com.vci.ubcs.starter.web.util.VciBaseUtil;
|
|
/****
|
* 自定义罗马流水算法自定义类
|
*/
|
@MdmSerialAlgorithm(text = "自定义罗马流水",serialType="custom_serial_roman",description = "自定义罗马流水算法")
|
public class CustomRomanSerialAlgorithmExample {
|
/**
|
* 生成罗马流水号的方法
|
* @return 流水号的信息
|
*/
|
@MdmSerialAlgorithmMethod
|
public String serialGenerate(CodeCustomSerialDTO codeCustomSerialDTO){
|
//
|
codeCustomSerialDTO.getSerialUnitString();
|
CodeBasicSecVO secVO= codeCustomSerialDTO.getSerialCodeCodeBasicSec();
|
String currentFlowValue=codeCustomSerialDTO.getCurrentFlowValue();
|
|
Double newThisSerialValue = 0d;
|
if(StringUtils.isBlank(currentFlowValue)){
|
//第一个编码
|
newThisSerialValue = VciBaseUtil.getDouble(secVO.getSerialStart());
|
}else {
|
//流水号肯定是数字
|
//将罗马流水转为数字流水
|
int arabicValue=VciBaseUtil.convertRomanToArabic(currentFlowValue);
|
newThisSerialValue = (double)(arabicValue + secVO.getSerialStep()) ;
|
}
|
//要看是否超过最大的流水值
|
if (newThisSerialValue >= secVO.getCodeFillLimit()) {
|
throw new VciBaseException("流水号已经超过允许的最大流水值{0}", new String[]{secVO.getCodeFillLimit().toString()});
|
}
|
//将数字流水转为罗马流水
|
String romanValue=VciBaseUtil.convertArabicToRoman(newThisSerialValue.intValue());
|
return romanValue;
|
}
|
|
}
|