Java 后台自動生成編碼


展示效果:

 

 

 

 

步驟:

1.在數據庫中建張表(最大值,字符前綴)

 

 sys_assets資產表   

sys_assets_code 自動生成編碼表:下圖

 

 

 

2.mapper中的dao層

/**
 * 資產編碼 數據層
 *
 * @author ruoyi
 */
public interface SysAssetsCodeMapper {

    /**
     * 不存在時insert
     * prefix
     * @return
     */
    public int insertAssetsCode(String prefix);

    /**
     * 根據字符前綴查詢
     * @param prefix
     * @return
     */
    public SysAssetsCode selectByPrefix(String prefix);

 

 

3.mapper.xml文件SQL語句

注:第一個SQL(存在時更新,不存在是添加。具體訪問:):https://www.cnblogs.com/liaojie970/p/6824773.html

  <!-- 不存在時insert -->
    <insert id="insertAssetsCode" parameterType="java.lang.String">
        INSERT INTO sys_assets_code (prefix,maxinx)
        VALUES (#{prefix},1) ON DUPLICATE KEY UPDATE prefix = #{prefix} ,maxinx = maxinx+1
    </insert>

    <!-- 根據字符前綴查詢 -->
    <select id="selectByPrefix" parameterType="java.lang.String" resultMap="SysAssetsCodeResult">
        select t.prefix,t.maxinx  from sys_assets_code t where t.prefix = #{prefix}
    </select>

 

 

4.封裝方法(參數拼接)

public interface ISysAssetsCodeService {
    /**
     * 自動生成編碼
     * @param preFixe  字符
     * @param numCode  最大數值(幾位)
     * @return
     */
    public String getCode(String preFixe,int numCode);
}

 

 

 

5.封裝方法(字符拼接)

@Service
public class SysAssetsCodeService implements ISysAssetsCodeService {
private Lock lock = new ReentrantLock();
@Autowired
private SysAssetsCodeMapper codeMapper;

@Override
@Transactional
public String getCode(String preFixe,int numCode) {
try {
lock.lock();
int result = codeMapper.insertAssetsCode(preFixe);
SysAssetsCode sysAssetsCode = codeMapper.selectByPrefix(preFixe);
if(sysAssetsCode != null && result > 0 ){
//判斷【字符前綴】不為空 && 添加時記錄數大於0 【進行String.format 拼接】
return String.format("%s%"+numCode+"d", preFixe,sysAssetsCode.getMaxinx()).replace(" ", "0");
}else{
throw new RuntimeException("獲取編碼失敗");
}
} finally {
lock.unlock();
}

}
}

6.Controller控制層

/**
* 根據資產編號獲取詳細信息
*/
@PreAuthorize("@ss.hasPermi('system:assets:query')")
@GetMapping(value ={"/", "/{id}"})
public AjaxResult getInfo(@PathVariable(value = "id", required = false) Long id)
{
AjaxResult ajax = AjaxResult.success();
SysAssets assets = null;
if(StringUtils.isNotNull(id)){
assets = assetsService.selectAssetsById(id);
}else{
assets = new SysAssets();
//setCodeId屬性 “YFCX”可自定義看需求;“5” 代表5位數
assets.setCodeId(codeService.getCode("YFCX",5));
}
ajax.put(AjaxResult.DATA_TAG,assets);
return ajax;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM