系统顺序命名解决方案

系统在开发过程中要给上传的文件进行顺序命名且不能重复的快速解决方案;
例如:文件编号需求如下

  • 一级文件编号由股份公司代码、一级文件代码、序列号组成,如手册编号为: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;应用即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章