⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 numberruledaoimpl.java

📁 《j2ee开发全程实录》随书源码
💻 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 + -