1.在日常工作中,编号用处有很多地方,以下是一个编号的生成代码:
标号规则:1、按照年份排序 2、删除不影响编号顺序
思路:
1、需要借助一个外表去统计编号,此处用到的是:KM_OT_NUMBER;字段至少需要id、numberType(区分编号类别,方便其他模块复用)、year、count(统计编号)
2、根据模块名及类别去查询是否存在此模块的记录。
2.1、如果没有,则返回编号为1,同时插入编号表中1条编号为1的记录;
2.2、如果存在,则查询count的值,自增,更新此条记录,返回自增后的编号;
3、一般情况删除不影响编号,即删除某条数据,后续编号不变,如遇删除后续编号与前面连续,只需要在删除的时候去维护一下编号表的count值即可。
/**
* 保存生成一个编号格式为:{xxxx-num}
* @param numberType 编号类型
* @param year 年
* @return 编号
*/
@Override
public Integer creatorCode(String numberType,Integer year){
String sql="select t.count from KM_OT_NUMBER t where t.numberType= :numberType and t.year= :year ";
Map<String, Object> paramMap = new HashMap<String, Object>() {{
put("numberType", numberType);
put("year", year);
}};
List list = elereportDao.findBySQL(null, sql, paramMap);
if(list.size()!= 0){
Integer count = Integer.parseInt(list.get(0).toString());
count++;
String upsql = "update KM_OT_NUMBER t set t.count='"+count+"' where t.numberType='"+numberType+"' and t.year= '"+year+"'";
elereportDao.executeSQL(upsql,null);
return count;
}else {
String uuid=new RandomGUID().getUUID();
String insertSql ="insert into KM_OT_NUMBER (ID, NUMBERTYPE, YEAR, COUNT) values ('"+uuid+"', '"+numberType+"', '"+year+"', '1') ";
elereportDao.executeSQL(insertSql,null);
return Integer.parseInt("1");
}
}
调用:
String code = this.codeService.creatorCode(numberType, year).toString();