package com.nanometer.smartlab.service; import com.nanometer.smartlab.dao.SysSequenceDao; import com.nanometer.smartlab.entity.SysSequence; import com.nanometer.smartlab.util.Constants; import com.nanometer.smartlab.util.Utils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.RandomUtils; import org.apache.log4j.Logger; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; /** * Created by johnny on 17/12/13. */ @Service("sysSequenceService") @Scope("singleton") public class SysSequenceServiceImpl implements SysSequenceService { private static Logger logger = Logger.getLogger(SysSequenceService.class); @Resource(name = "sysSequenceDao") SysSequenceDao sysSequenceDao; public synchronized int getNextVal(String seqName) { int result = -1; try { if (seqName!=null) { SysSequence sequence = this.sysSequenceDao.getSysSequenceByName(seqName); int currentVal =0; if (sequence == null) { sequence = new SysSequence(); sequence.setName(seqName); sequence.setMinVal(0); sequence.setMaxVal(99999); sequence.setStep(1); currentVal = sequence.getStep(); sequence.setCurrentVal(currentVal); this.sysSequenceDao.insertSysSequence(sequence); }else{ currentVal = sequence.getCurrentVal() + sequence.getStep(); if (currentVal > sequence.getMaxVal()) { currentVal = sequence.getMinVal(); } sequence.setCurrentVal(currentVal); this.sysSequenceDao.updateSysSequence(sequence); } result = currentVal; } } catch (Exception e) { logger.error(e.getMessage(), e); result = -1; } return result; } @Transactional(propagation = Propagation.REQUIRED) public String getApplyCode() { StringBuffer result = new StringBuffer(""); result.append("SG"); result.append(Utils.formatDateToString(new Date(), "yyyyMMdd")); int seq = this.getNextVal(Constants.SEQ_APPLY_CODE); String seqStr = ""; if (seq == -1) { seqStr = String.valueOf(RandomUtils.nextInt(5)); } else { seqStr = String.valueOf(seq); if (seqStr.length() < 5) { seqStr = String.format("%05d", seq); } } result.append(seqStr); return result.toString(); } public String getOrderCode() { StringBuffer result = new StringBuffer(""); result.append("OD"); result.append(Utils.formatDateToString(new Date(), "yyyyMMdd")); int seq = this.getNextVal(Constants.SEQ_ORDER_CODE); String seqStr = ""; if (seq == -1) { seqStr = String.valueOf(RandomUtils.nextInt(5)); } else { seqStr = String.valueOf(seq); if (seqStr.length() < 5) { seqStr = String.format("%05d", seq); } } result.append(seqStr); return result.toString(); } }