cy
2023-12-02 b7a353e571a503a3dfb970af069efc0a65208839
consum-base/src/main/java/com/consum/base/core/CodeGeneratorService.java
@@ -1,22 +1,21 @@
package com.consum.base.core;
import com.consum.base.core.tools.SqlParameter;
import com.consum.base.core.utils.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;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
 * 编码统一生成服务
 */
@Service
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public class CodeGeneratorService extends BaseServiceImpl {
@@ -58,7 +57,7 @@
     *
     * @return 仓库编码规则为:WH+四位数字连号(0001)
     */
    public String createWarehouseCode() {
    public synchronized String createWarehouseCode() {
      /*
        1.SELECT CODE_INDEX from BASE_CODE_INDEXING where CODE_PREFIX=:CODE_PREFIX
          CODE_PREFIX是"WH"
@@ -66,20 +65,17 @@
          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);
        }
        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) {
    public synchronized String createGoodsTemplateCode(String classify) {
        /*
        1.SELECT CODE_INDEX from BASE_CODE_INDEXING where CODE_PREFIX=:CODE_PREFIX
          CODE_PREFIX是 prefix
@@ -87,10 +83,8 @@
          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);
        }
        String prefix = classify;
        return createCodeByPrefix(prefix,6);
    }
    /**
@@ -99,16 +93,14 @@
     * @param codeGeneratorEnum CodeGeneratorEnum
     * @return 1.两位前缀(如:CG代表采购单)+六位年月日(230226:23年2月26日)+四位数字连号(0002)
     */
    public String createBusinessFormCode(CodeGeneratorEnum codeGeneratorEnum) {
    public synchronized 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);
        }
        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);
    }