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 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"
|
*/
|
synchronized (this){
|
String CODE_PREFIX = CodeGeneratorEnum.Warehouse.getValue();
|
return createCodeByPrefix(CODE_PREFIX,4);
|
}
|
}
|
|
/**
|
* 生成物品编码
|
*
|
* @param classify A,B,C
|
* @param type 1=集采;2=自采
|
* @return 共8位, 一位物品分类(A/B/C)+一位类型(1为集采,2为自采)+6位连续数字号
|
*/
|
public String createGoodsTemplateCode(String classify, int type) {
|
/*
|
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"
|
*/
|
synchronized (this){
|
String prefix = classify + Integer.valueOf(type).toString();
|
return createCodeByPrefix(prefix,6);
|
}
|
}
|
|
/**
|
* 根据前缀获取业务表单编码
|
*
|
* @param codeGeneratorEnum CodeGeneratorEnum
|
* @return 1.两位前缀(如:CG代表采购单)+六位年月日(230226:23年2月26日)+四位数字连号(0002)
|
*/
|
public String createBusinessFormCode(CodeGeneratorEnum codeGeneratorEnum) {
|
|
synchronized (this){
|
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);
|
}
|
}
|
|
|
}
|