62,620
社区成员
发帖
与我相关
我的任务
分享
…其它字段赋值略
result = cxRegDAO.saveCxReg(Sequence.saveReg(reg)); //保存的同时先生成流水号
package cn.ls.ggt.common;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import cn.ls.ggt.config.Constant;
import cn.ls.ggt.dao.ICxRegDAO;
import cn.ls.ggt.model.cx.CxReg;
import cn.ls.ggt.servlet.cx.regcase.AddCase;
import cn.ls.util.DaoFactory;
import cn.ls.util.HibernateDAO;
public class Sequence extends HibernateDAO {
static Integer xhIndex;
private static Log log = LogFactory.getLog(Sequence.class);
static{
xhIndex = makeMaxSequence();
log.error("重新从数据库中取得序列号!");
}
//从数据库中取得最大流水号并赋给xh_index静态变量
/**
数据库表结构如下
Regid
…其它字段略
xh_index 当前的流水号,即最大的记录号
xh_year 当前年份,因为流水号为当年最大流水号,新的一年流水号从0重新记
*/
public static Integer makeMaxSequence(){
ICxRegDAO cxRegDAO = (ICxRegDAO)DaoFactory.getDao("cxRegDao");
Integer maxSequence = cxRegDAO.getMaxIndex();
//此方法生成的sql语句为:select top 1 xh_index from cx_reg where xh_year='2009' order by xh_index desc
if(maxSequence == null){
maxSequence = 0;
}
maxSequence++;
return maxSequence;
}
/**功能:生成最大序列号
* @return 数组中第一个元素为未补位的序号,第二个元素为补位后的序号
*/
public synchronized static String makeSequence(){
String result = null;
Integer maxSequence = 0;
if(xhIndex == 0){
maxSequence = makeMaxSequence();
xhIndex = maxSequence;
log.error("重新从数据库中取得序列号!");
}else{
maxSequence = xhIndex++;
}
log.error("xh xhIndex="+xhIndex+" maxSequence="+maxSequence);
String max = maxSequence.toString();
String tmp = "";
for(int i=max.length();i<6;i++){
tmp += "0";
}
result = tmp+max;
return result;
}
public static CxReg saveReg(CxReg cxReg){
String seqArr = Sequence.makeSequence();
log.error("saveReg sequence:"+seqArr);
Calendar c = Calendar.getInstance();
String xhYear = String.valueOf(c.get(Calendar.YEAR));
String xhMonth = (c.get(Calendar.MONTH)+1)<10?"0"+(c.get(Calendar.MONTH)+1):String.valueOf(c.get(Calendar.MONTH)+1);
String regID = Constant.STRART_WITH+xhYear+xhMonth+seqArr+cxReg.getConsignUnit();
cxReg.setXhYear(xhYear);
cxReg.setXhIndex(Integer.valueOf(seqArr));
cxReg.setRegId(regID); //完整流水号
log.error("saveReg end:"+regID);
return cxReg;
}
}