系統在開發過程中要給上傳的文件進行順序命名且不能重複的快速解決方案;
例如:文件編號需求如下
- 一級文件編號由股份公司代碼、一級文件代碼、序列號組成,如手冊編號爲:BYG-EnM-01,BYG-EnM-01,
- 二級文件編號由股份公司代碼、二級文件代碼、序列號(01;02;03……)組成,例如《文件和記錄控制程序》文件編號爲爲:BYG-EnP-01,BYG-EnP-02
- 總公司統一使用的三、四級文件的編碼由股份公司代碼、三級文件代碼/四級文件代碼和序列號組成。如BYG-EnR-07
遇到這種情況,使用redis的原子性incr可以簡單高性能完成編號
/**
* 文件編號方法(使用於高併發,集羣部署)
* @param fileLevel
* @return
*/
private String getDocCode(Integer fileLevel) {
String fileCodeRedis="BYG-";
switch(fileLevel){
case 1:fileCodeRedis=fileCodeRedis+CommonContant.FileCode.EnM;break;
case 2:fileCodeRedis=fileCodeRedis+CommonContant.FileCode.EnP;break;
case 3:fileCodeRedis=fileCodeRedis+CommonContant.FileCode.EnW+getDeptFileCode();break;
case 4:fileCodeRedis=fileCodeRedis+CommonContant.FileCode.EnR+getDeptFileCode();break;
case 5:fileCodeRedis=fileCodeRedis+CommonContant.FileCode.EnO;break;
default :break;
}
long incr = redisUtil.incr(fileCodeRedis, 1);
if(incr<10){
fileCodeRedis=fileCodeRedis+"-0"+incr;
}else{
fileCodeRedis=fileCodeRedis+"-"+incr;
}
return fileCodeRedis;
}
注意:方法需要使用redis技術,其中RedisUtil爲jeecgboot自帶方法,在調用時直接@Autowired private RedisUtil redisUtil;應用即可