luqingyang
2023-10-24 cb642724c54d7d850aec5e5ee27fcc7186f352d7
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.consum.base.core;
 
 
import com.consum.base.core.tools.SqlParameter;
import com.consum.model.po.BaseCodeIndexing;
import com.walker.infrastructure.utils.DateUtils;
import com.walker.infrastructure.utils.NumberGenerator;
import com.walker.jdbc.service.BaseServiceImpl;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.IdGenerator;
 
import java.util.List;
 
/**
 * 编码统一生成服务
 */
@Service
public class CodeGeneratorService extends BaseServiceImpl {
 
 
    public static void main(String[] args) {
        String prefix = "RK";
        int[] days = DateUtils.getCurrentYearMonthDay();
        prefix +=  StringUtils.removeStart(Integer.valueOf(days[0]).toString(),"20");
        prefix += days[1] < 9 ? "0" + Integer.valueOf(days[1]).toString() : days[1];
        prefix += days[2] < 9 ? "0" + Integer.valueOf(days[2]).toString() : days[2];
        System.out.println(prefix);
    }
 
    private String createCodeByPrefix(String prefix,int length){
        String CODE_PREFIX = prefix;
        String sql = "SELECT * from BASE_CODE_INDEXING where CODE_PREFIX=:CODE_PREFIX";
 
        BaseCodeIndexing  codeIndexing = get(sql,new SqlParameter().put("CODE_PREFIX",CODE_PREFIX),new BaseCodeIndexing());
        if (codeIndexing == null){
            codeIndexing = new BaseCodeIndexing();
            codeIndexing.setId(NumberGenerator.getLongSequenceNumber());
            codeIndexing.setCodePrefix(CODE_PREFIX);
            codeIndexing.setCodeIndex(1);
            insert(codeIndexing);
        } else {
            codeIndexing.setCodeIndex(codeIndexing.getCodeIndex()+1);
            update(codeIndexing);
        }
 
        String index = codeIndexing.getCodeIndex().toString();
        String intPrefix = "0";
        for (int i=1;i<(length-index.length());i++){
            intPrefix += "0";
        }
        return CODE_PREFIX+intPrefix+index;
    }
 
    /**
     * 获取仓库编码
     *
     * @return 仓库编码规则为:WH+四位数字连号(0001)
     */
    public synchronized String createWarehouseCode() {
      /*
        1.SELECT CODE_INDEX from BASE_CODE_INDEXING where CODE_PREFIX=:CODE_PREFIX
          CODE_PREFIX是"WH"
          如果获取不到,就从1开始,但需要补全前面的"0"返回 "0001";同时需要插入数据库
          insert BASE_CODE_INDEXING CODE_INDEX=1 CODE_PREFIX是="WH"  where CODE_PREFIX=:CODE_PREFIX;
         2.如果能够获取到,则将CODE_INDEX=CODE_INDEX+1后更新到数据库,补全前面的"0"返回 "0001"
         */
        String CODE_PREFIX = CodeGeneratorEnum.Warehouse.getValue();
        return createCodeByPrefix(CODE_PREFIX,4);
    }
 
    /**
     * 生成物品编码
     *
     * @param classify A,B,C
     * @return 共8位, 一位物品分类(A/B/C)+一位类型(1为集采,2为自采)+6位连续数字号
     */
    public synchronized String createGoodsTemplateCode(String classify) {
        /*
        1.SELECT CODE_INDEX from BASE_CODE_INDEXING where CODE_PREFIX=:CODE_PREFIX
          CODE_PREFIX是 prefix
          如果获取不到,就从1开始,但需要补全前面的"0"返回 "000001";同时需要插入数据库
          insert BASE_CODE_INDEXING CODE_INDEX=1 CODE_PREFIX是=:prefix  where CODE_PREFIX=:CODE_PREFIX;
         2.如果能够获取到,则将CODE_INDEX=CODE_INDEX+1后更新到数据库,补全前面的"0"返回 "000001"
         */
        String prefix = classify;
        return createCodeByPrefix(prefix,6);
    }
 
    /**
     * 根据前缀获取业务表单编码
     *
     * @param codeGeneratorEnum CodeGeneratorEnum
     * @return 1.两位前缀(如:CG代表采购单)+六位年月日(230226:23年2月26日)+四位数字连号(0002)
     */
    public synchronized String createBusinessFormCode(CodeGeneratorEnum codeGeneratorEnum) {
 
        String prefix = codeGeneratorEnum.getValue();
        int[] days = DateUtils.getCurrentYearMonthDay();
        prefix +=  StringUtils.removeStart(Integer.valueOf(days[0]).toString(),"20");
        prefix += days[1] < 9 ? "0" + Integer.valueOf(days[1]).toString() : days[1];
        prefix += days[2] < 9 ? "0" + Integer.valueOf(days[2]).toString() : days[2];
        return createCodeByPrefix(prefix,4);
    }
 
 
}