编号的生成

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();

猜你喜欢

转载自blog.csdn.net/supershuyun/article/details/86300592