package com.takensoft.common.idgen.service; import com.takensoft.common.idgen.dao.IdgenMapper; import com.takensoft.common.idgen.vo.IdgenVO; import lombok.Getter; import lombok.Setter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; /** * @author takensoft * @since 2025.01.22 * @modification * since | author | description * 2025.01.22 | takensoft | 최초 등록 * * 고유 아이디 관련 서비스 */ @Setter @Getter public class IdgenService { protected Log log = LogFactory.getLog(this.getClass()); private String prefix; // 아이디에 고정적으로 붙일 명칭 private int cipers; // 고정적인 명칭(prefix)를 제외한 아이디의 길이 private char fillChar; // 0 private String tblNm; // 테이블명 @Autowired private IdgenMapper idgenMapper; /** * @return 생성된 고유 아이디 값 * * 지정된 테이블에 대한 다음 고유 ID를 생성하여 반환 * 새로 생성되는 경우 아이디 값은 1부터 시작하며, 기존 값은 1씩 증가하여 업데이트 */ public String getNextStringId() { IdgenVO idgenVO = idgenMapper.selectNextId(tblNm); // 다음 아이디값 조회 boolean firstFlag = false; // 신규 생성인지 확인 if(idgenVO == null) { // 신규 생성일 경우 idgenVO = new IdgenVO(); // 신규 객체 생성 idgenVO.setAftrId(1); // 신규 아이디값 설정 idgenVO.setTblNm(tblNm); // 신규 테이블명 설정 firstFlag = true; // 신규 등록 여부 } // 1. 아이디변수 생성(String) // 2. 아이디 변수 prefix를 넣고 + fillChar를 cipers-prefix.length-id.length 만큼 넣고 + (id + 1)를 넣는다. String nextId = ""; // 아이디값 객체 생성 nextId = prefix; // prefix 설정 // 2번째부터는 1씩 업데이트 if(!firstFlag) { // 기존에 데이터가 존재하는 경우 idgenVO.setTblNm(tblNm); idgenVO.setAftrId(idgenVO.getAftrId() + 1); } idgenMapper.upsertSeqNmg(idgenVO); // 아이디값을 1추가하여 데이터 수정 int fillCharSize = cipers - (int)(Math.log10(idgenVO.getAftrId()) + 1); // 아이디에 0이 들어갈 길이 지정 for(int i = 0 ; i < fillCharSize; i++) { // 아이디에 0 설정 nextId = nextId + fillChar; // ex_ TEST_00 + 0 0이 추가되는중 } nextId = nextId + String.valueOf(idgenVO.getAftrId()); // 아이디 생성 완료 return nextId; } }