📄 numberruledaoimpl.java
字号:
package com.cownew.PIS.base.numberMgr.bizLayer;
import java.math.BigInteger;
import java.util.List;
import org.apache.commons.collections.KeyValue;
import org.apache.commons.lang.StringUtils;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ImporterTopLevel;
import org.mozilla.javascript.JavaScriptException;
import org.mozilla.javascript.Scriptable;
import com.cownew.PIS.base.numberMgr.common.INumberRuleDAO;
import com.cownew.PIS.base.numberMgr.common.NumberRuleException;
import com.cownew.PIS.base.numberMgr.common.NumberRuleInfo;
import com.cownew.PIS.framework.bizLayer.BaseDAOImpl;
import com.cownew.PIS.framework.common.utils.KeyValueList;
import com.cownew.PIS.framework.common.utils.PISKeyValue;
public class NumberRuleDAOImpl extends BaseDAOImpl implements INumberRuleDAO
{
private static final int DEFAULTSNLENGTH = 10;
public NumberRuleDAOImpl()
{
super();
}
protected Class getPersistObjectClass()
{
return NumberRuleInfo.class;
}
public String generateSN(String ruleNumber) throws NumberRuleException
{
return generateSN(ruleNumber, new KeyValueList());
}
public String generateSN(String ruleNumber, KeyValueList params)
throws NumberRuleException
{
// TODO:并发
NumberRuleInfo info = getNumberRuleInfo(ruleNumber);
String curSN = info.getCurSN();
String rule = info.getNumberRule();
boolean useSN = info.getUseSN();
int snLength = info.getSnLength();
Context ctx = Context.enter();
try
{
Scriptable iptScope = new ImporterTopLevel(ctx);
for (int i = 0, n = params.size(); i < n; i++)
{
KeyValue keyValue = params.getKeyValue(i);
Object value = Context.toObject(keyValue.getValue(), iptScope);
iptScope.put(keyValue.getKey().toString(), iptScope, value);
}
if (useSN)
{
curSN = nextSN(curSN, snLength);
info.setCurSN(curSN);
Object value = Context.toObject(curSN, iptScope);
iptScope.put("sn", iptScope, value);
update(info);
}
Object result=null;
try {
result=ctx.evaluateString(iptScope, rule, null, 0, null);
} catch (JavaScriptException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result.toString();
} finally
{
Context.exit();
}
}
private String nextSN(String curSN, int snLength)
{
if (curSN == null)
{
curSN = "0";
}
if (snLength < 1)
{
snLength = DEFAULTSNLENGTH;
}
BigInteger ci = new BigInteger(curSN);
BigInteger ni = ci.add(new BigInteger("1"));
String inStr = ni.toString();
if (inStr.length() > snLength)
{
throw new NumberRuleException(NumberRuleException.SNLENGTHOVERFLOW);
}
// 左边补零,可以做的更灵活一些
return StringUtils.leftPad(inStr, snLength);
}
private NumberRuleInfo getNumberRuleInfo(String ruleNumber)
{
KeyValueList kvList = new KeyValueList();
kvList.add(new PISKeyValue("number", ruleNumber));
List list = load("from " + NumberRuleInfo.class.getName()
+ " nr where number=:number", kvList);
if (list.size() <= 0)
{
throw new NumberRuleException(
NumberRuleException.NUMBERRULENOTEXIST,
new Object[] { ruleNumber });
}
if (list.size() > 1)
{
throw new NumberRuleException(
NumberRuleException.NUMBERRULENUMBERDUP);
}
NumberRuleInfo info = (NumberRuleInfo) list.get(0);
return info;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -