package biz.code.segment;
|
|
import biz.code.CodeRule;
|
import biz.code.SegmentCreator;
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
import foundation.util.ID;
|
import foundation.util.Util;
|
import foundation.variant.provider.IVariantsProvider;
|
|
|
public class NoSegment extends SegmentCreator {
|
|
public static String SQLName_NextVal = "code_next_sequence";
|
public static String SQLName_CurrVal = "code_curr_sequence";
|
public static String SQLName_NextSync = "code_next_sync";
|
private String ruleCode;
|
private NamedSQL nextvalSQL;
|
private NamedSQL currvalSQL;
|
private NamedSQL nextsyncSQL;
|
private String cachedValue;
|
|
public static String SQL_GetPeriodSequence = "getPeriodSequence";
|
public static String SQL_UpdatePeriodSequence = "updatePeriodSequence";
|
public static String SQL_InsertPeriodSequence = "insertPeriodSequence";
|
private NamedSQL getPeriodSequence;
|
private NamedSQL updatePeriodSequence;
|
private NamedSQL insertPeriodSequence;
|
|
public NoSegment() {
|
|
}
|
|
@Override
|
protected void init(CodeRule rule) {
|
ruleCode = rule.getCode();
|
|
try {
|
nextvalSQL = NamedSQL.getInstance(SQLName_NextVal);
|
nextvalSQL.setParam("code", ruleCode);
|
|
nextsyncSQL = NamedSQL.getInstance(SQLName_NextSync);
|
nextsyncSQL.setParam("code", ruleCode);
|
|
currvalSQL = NamedSQL.getInstance(SQLName_CurrVal);
|
currvalSQL.setParam("code", ruleCode);
|
|
getPeriodSequence = NamedSQL.getInstance(SQL_GetPeriodSequence);
|
getPeriodSequence.setParam("code", ruleCode);
|
|
updatePeriodSequence = NamedSQL.getInstance(SQL_UpdatePeriodSequence);
|
updatePeriodSequence.setParam("code", ruleCode);
|
|
insertPeriodSequence = NamedSQL.getInstance(SQL_InsertPeriodSequence);
|
insertPeriodSequence.setParam("code", ruleCode);
|
}
|
catch(Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
@Override
|
public String getNextSequenceValue(String dynamic, IVariantsProvider... entitys) {
|
try {
|
int value = 0 ;
|
if(!Util.isEmpty(dynamic)){
|
value = getPeriodNextSequenceNo(dynamic);
|
}
|
else {
|
SQLRunner.execSQL(nextsyncSQL);
|
value = SQLRunner.getInteger(currvalSQL);
|
}
|
|
|
String result = String.valueOf(value);
|
result = format(result);
|
|
cachedValue = result;
|
return result;
|
}
|
catch (Exception e) {
|
return null;
|
}
|
}
|
|
private int getPeriodNextSequenceNo(String dynamic) throws Exception {
|
//1. 如果内存中没有记录,就获取一次,并插入一条记录
|
NamedSQL namedSQL = getPeriodSequence.createInstance();
|
namedSQL.setParam("periodNo", dynamic);
|
namedSQL.setParam("code", ruleCode);
|
int sequenceNo = SQLRunner.getInteger(namedSQL);
|
|
//2. 如果数据库中没有记录,就插入一条记录(只有第一次会运行)
|
if (sequenceNo == 0) {
|
sequenceNo = 1;
|
|
namedSQL = insertPeriodSequence.createInstance();
|
namedSQL.setParam("id", ID.newValue());
|
namedSQL.setParam("periodNo", dynamic);
|
namedSQL.setParam("code", ruleCode);
|
namedSQL.setParam("sequenceValue", sequenceNo);
|
SQLRunner.execSQL(namedSQL);
|
}
|
|
//3. 如果数据库中没有记录,就插入一条记录(只有第一次会运行)
|
else {
|
sequenceNo = sequenceNo + 1;
|
|
namedSQL = updatePeriodSequence.createInstance();
|
namedSQL.setParam("value", sequenceNo);
|
namedSQL.setParam("periodNo", dynamic);
|
namedSQL.setParam("code", ruleCode);
|
SQLRunner.execSQL(namedSQL);
|
}
|
|
// //4. 返回结果
|
// String result = String.valueOf(sequenceNo);
|
// result = format(result);
|
//
|
// cachedValue = result;
|
return sequenceNo;
|
}
|
|
@Override
|
public String getCurrSequenceValue(String dynamic, IVariantsProvider... entitys) {
|
try {
|
int value = SQLRunner.getInteger(nextvalSQL);
|
String result = String.valueOf(value);
|
result = format(result);
|
|
cachedValue = result;
|
return result;
|
}
|
catch (Exception e) {
|
return null;
|
}
|
}
|
|
@Override
|
public String getTempValue(String dynamic, IVariantsProvider... entitys) {
|
String result = format("#");
|
return result;
|
}
|
|
@Override
|
protected void setCodeRule(CodeRule codeRule) {
|
ruleCode = codeRule.getCode();
|
super.setCodeRule(codeRule);
|
}
|
|
@Override
|
public String toString() {
|
return codeRule.getCode() + " : " + cachedValue;
|
}
|
|
}
|