读书人

请问一个有关问题系统自动生成的一个

发布时间: 2012-09-18 16:21:42 作者: rapoo

请教一个问题,系统自动生成的一个流水码,由今年年份数字4位+从0001-9999每次递增1的4位数字组成的8位字符串。。。
该编号由当年年份的4位数字(如2010)+0001-9999的4位每次递增1的4位数字(如0002)组成的8位字符串(20100002)
这个是写在DaoImpl内的。。具体该怎么做。。感谢指导

[解决办法]
我这有个差不多的,利用数据库生成的,可以参考下

Java code
package com.hhh.platform.beton.tm.share;import java.util.Calendar;import java.util.HashMap;import java.util.Map;import com.hhh.platform.beton.tm.dao.current_number.Current_numberDao;/** * 编号生成器(暂用,以后再做进一步修改) * 默认生成格式为:yyyy-xxxxx格式 * @author 3hlgw * */public class NumberGenerater {    private static final String TIME_FORMATER = "yyyy";         //时间格式    private static final String SERIAL_NUMBER = "XXXXX";        //流水号格式    private static final String NUMBER_FORMATER = TIME_FORMATER+"-"+SERIAL_NUMBER; //编码格式    private static final String SERIAL_CHAR="X";    private  static NumberGenerater numberGenerater    =    null;        private NumberGenerater(){            }        /**     * 取得NumberGenerater的单例实现     * @return     */    public static NumberGenerater getInstance(){        if(numberGenerater==null){            synchronized(NumberGenerater.class){                if(numberGenerater==null){                    numberGenerater = new NumberGenerater();                }            };        }        return numberGenerater;    }        /**     * 生成下一个编号     * @param type     * @param customer_id     * @return     */    public synchronized String geneterNextNumber(int type,String customer_id){        Current_numberDao current_numberDao = new Current_numberDao();        //判断项目是否已经有编号存在        boolean isExist = this.isExistNumber(type, customer_id);                //取得序列号格式化字符串//        int serial_start_index    =    NUMBER_FORMATER.indexOf(SERIAL_CHAR);//        int serial_end_index = NUMBER_FORMATER.lastIndexOf(SERIAL_CHAR);        int count =SERIAL_NUMBER.length();        StringBuilder sb = new StringBuilder();        for(int i=0;i<count;i++){            sb.append("0");        }                java.text.DecimalFormat df = new java.text.DecimalFormat(sb.toString());                //如果存在        if(isExist){                        //取得数据库中现存的编号            Map<String,Object> parametersMap = new HashMap<String,Object>();            parametersMap.put("TYPE", type);            parametersMap.put("CUSTOMER_ID", customer_id);                        Map resultMap = current_numberDao.getCurrent_number(parametersMap);            String old_current_number = (String) resultMap.get("CURRENT_NUMBER");                        //数据库所存的编号的年            String year_str = old_current_number.substring(0,4);            int current_number_year = Integer.parseInt(year_str);            //数据库所存的编号的流水号            String seriou_num_str = old_current_number.substring(5,10);            int current_number_seriou = Integer.parseInt(seriou_num_str);                        //当前系统时间的年份            Calendar nowCalendar = Calendar.getInstance();            int year = nowCalendar.get(Calendar.YEAR);                            if(year>current_number_year){                                int current_serial =1 ;                    //生成当前的流水号                String current_serial_number = df.format(current_serial);                String current_number = year+"-"+current_serial_number;                                this.updateCurrent_Number(type, customer_id, current_number);                                return current_number;            }else{                int current_serial =1+current_number_seriou ;                //生成当前的流水号                String current_serial_number = df.format(current_serial);                String current_number = year+"-"+current_serial_number;                                    this.updateCurrent_Number(type, customer_id, current_number);                                    return current_number;                    }                    //不存在            }else{            int current_serial =1 ;                        //当前的流水号            String current_serial_number = df.format(current_serial);            //取得当前所在年份            Calendar nowCalendar = Calendar.getInstance();            int year = nowCalendar.get(Calendar.YEAR);                String current_number = year+"-"+current_serial_number;                        this.updateCurrent_Number(type, customer_id, current_number);                        return current_number;        }    }            /**     * 修改当前编号     * @param type 项目ID     * @param customer_id      * @param current_number     */    public void updateCurrent_Number(int type,String customer_id,String current_number){        Map<String, Object> parametersMap = new HashMap<String, Object>();        parametersMap.put("TYPE", type);        parametersMap.put("CUSTOMER_ID", customer_id);        parametersMap.put("CURRENT_NUMBER", current_number);                boolean isExist = this.isExistNumber(type, customer_id);        Current_numberDao current_numberDao = new Current_numberDao();        if(isExist){            current_numberDao.updateCurrent_number(parametersMap);        }else{            current_numberDao.saveCurrent_number(parametersMap);        }    }            /**     *      * 判断指定用户指定类型的当前编号是否已经存在     * @param type     * @param customer_id     * @return     */    private boolean isExistNumber(int type,String customer_id){        boolean isExist = false;        Current_numberDao current_numberDao = new Current_numberDao();                Map<String, Object> parametersMap = new HashMap<String, Object>();        parametersMap.put("TYPE", type);        parametersMap.put("CUSTOMER_ID", customer_id);                Map resultMap = current_numberDao.countCurrent_number(parametersMap);                if(resultMap==null){            isExist =false;        }else{            java.math.BigDecimal total = (java.math.BigDecimal) resultMap.get("TOTAL");            if(total.longValue()>0){                isExist =true;            }else{                isExist =false;            }        }        return isExist;    }    } 


[解决办法]
你首先要获取最大的那个流水号,具体的就不说了
String str = "";
String aa = "20100054";
String bb = aa.substring(4,8);
long cc = new Long(bb) + 1;
if (cc < 10) {
str = "000"+cc;
}else if (cc < 100) {
str = "00"+cc;
}else if (cc < 1000) {
str = "0"+cc;
}else {
str = ""+cc;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
String returnString = dateFormat.format(new Date()) + str;
[解决办法]
我这没文档,你自己查一下,不过有个思路

Java code
Date date = new Date();date.setTime(System.currentIimeMills());//毫秒数设置当前时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy");String year = sdf.format();/*这里你应该定义一个方法getMaxCode(),是返回数据库最新一条数据的id,就是你那个流水码*/String maxCode = getMaxCode();String str = maxCode.subString(4);//截取最后4位字符int num = Integer.parseInt(str);num++;String numCode = "";if(num >= 0 && num < 10) {    numCode = "000" + num;} else if(num >= 10 && num < 100) {    numCode = "00" + num;} else if(num >= 100 && num < 1000) {    numCode = "0" + num;} else {    numCode = "" + num;}String resultCode = maxCode + numCode;/*入库*/
[解决办法]

Java code

Date date = new Date();
date.setTime(System.currentIimeMills());//毫秒数设置当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String year = sdf.format();

这种是一般的做法,根据日前生成。
[解决办法]
这个流水码的数据应该在数据库中有保存的吧,那么直接用DB的写一个function不就可以了啊
SQL code
BEGIN  --定义一个8位的流水码临时变量  DECLARE NWE_ID VARCHAR(8);.  --定义一个4位的年份变量  DECLARE YYYY  VARCHAR(4);  SET  NWE_ID=NULL;  -- 取得当前的年份  SET YYYY = DATE_FORMAT(NOW(), '%Y');  --  SELECT SCOUT_CODE INTO NWE_ID   FROM CONSIGN   -- 以指定年份V_YEAR取得最大流水码  WHERE LEFT(SCOUT_CODE,4) = V_YEAR  ORDER BY SCOUT_CODE   DESC LIMIT 1 ;    --递增1  IF NWE_ID IS NULL THEN  SET NWE_ID = CONCAT(YYYY,'0001');  ELSE  SET NWE_ID = CONCAT(YYYY,LPAD((RIGHT(NWE_ID,4)+1),4,'0'));  END IF;  RETURN NWE_ID;END 

读书人网 >Java Web开发

热点推荐