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); } } }