ludc
2023-11-17 ac8e8998235f247365280d1a1632115c43b10037
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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;
    }
 
}