java中执行js
2012-06-26 14:41
169 查看
public class CnnicRegistrarServiceImpl implements RegistrarService {
//注入pricePolicyScript
@Required
public void setPricePolicyScript(Resource pricePolicyScript) {
this.pricePolicyScript = pricePolicyScript;
}
//p:pricePolicyScript="file:///${web.root}${cnnic.registrarService.pricePolicy}"
//properties文件中的键值对:cnnic.registrarService.pricePolicy = WEB-INF/cnnic/pricePolicy.js
private Resource pricePolicyScript;
//加载bean后执行的方法 ,可心写多个@PostConstruct方法.
@PostConstruct
public void reloadPricePolicy() throws ScriptException, IOException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
Reader reader = new InputStreamReader(pricePolicyScript.getInputStream(), "UTF-8");
engine.eval(reader);
engine.put("registrarId", registrarId);
scriptEngine = (Invocable) engine;
registrationPriceCache.clear();
log.info("[" + registrarId + "] Price policy loaded.");
}
public DomainPrice getDeletionPrice(String suffix, double registrationPrice, double settlementPrice, Date registrationDate, Date expirationDate, int userClass) {
try {
DomainPrice price = (DomainPrice) scriptEngine.invokeFunction("getDeletionPrice", suffix, registrationPrice, settlementPrice, registrationDate.getTime(), expirationDate.getTime(), userClass);
if (price == null) {
return null;
} else {
return price;
}
} catch (ScriptException e) {
log.error("Error in price policy script.", e);
} catch (NoSuchMethodException e) {
log.error("Error in price policy script.", e);
} catch (ClassCastException e) {
log.error("Error in price policy script.", e);
}
return null;
}
}
***********************************************************************************************************************
importPackage(com.zunmi.domain);
/*
* 用户级别(userClass)说明:
* 1: 系统
* 2: 管理员
* 3: 普通用户
* 4: 分销商
* 5: 战略分销商
* 6: 高级用户
* 7: 游客
*/
var basePrices = [0, 0, 0, 100, 45, 35, 50, 50];
var renewDiscounts = [0, 0, 0, 0, 0, 0, 0, 0];
var settlementPrice = 30;
function getRegistrationPriceList(suffix, userClass) {
if (suffix != ".cn") {
return null;
} else {
var priceList = new Array();
for (var i = 1; i <= 10; i++) {
var price = new DomainPrice();
price.setId(registrarId + "-REG11-" + i + "Y");
price.setPeriod(i);
price.setUnit("Y");
price.setPrice(i * basePrices[userClass]);
price.setSettlementPrice(i * settlementPrice);
price.setRemark("CN域名2011年注册价格");
priceList.push(price);
}
return priceList;
}
}
function getRenewalPriceList(suffix, registrationDate, expirationDate, userClass) {
if (suffix != ".cn") {
return null;
} else {
var priceList = new Array();
var maxDate = new Date();
var expDate = new Date();
expDate.setTime(expirationDate);
var maxYears = maxDate.getFullYear() - expDate.getFullYear() + 10;
for (var i = 1; i <= maxYears; i++) {
var price = new DomainPrice();
price.setId(registrarId + "-RENEW11-" + i + "Y");
price.setPeriod(i);
price.setUnit("Y");
price.setPrice(i * basePrices[userClass]);
price.setSettlementPrice(i * settlementPrice);
price.setRemark("CN域名2011年续费价格");
priceList.push(price);
}
return priceList;
}
}
function getDeletionPrice(suffix, regPrice, setPrice, registrationDate, expirationDate, userClass) {
if (suffix != ".cn") {
return null;
} else {
var price = null;
var d = new Date();
switch (userClass) {
case 1:
if (expirationDate < d) {
price = new DomainPrice();
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
}
break;
case 2:
price = new DomainPrice();
if (expirationDate < d) {
// 允许删除已过期域名
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
} else {
// 管理员允许删除任意时间的域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-A");
price.setPeriod(0);
price.setUnit("");
price.setPrice(-regPrice);
d.setDate(d.getDate() - 5);
if (registrationDate > d) {
price.setSettlementPrice(-setPrice);
price.setRemark("CN域名管理员删除,100%退费");
} else {
price.setSettlementPrice(0.0);
price.setRemark("CN域名管理员删除");
}
}
break;
case 4:
case 5:
// 分销商和战略分销商
if (expirationDate < d) {
// 允许删除已过期域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
} else {
d.setDate(d.getDate() - 4);
if (registrationDate > d) {
// 只允许删除4天内新注册的域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-R");
price.setPeriod(0);
price.setUnit("");
price.setPrice(regPrice * -0.9);
price.setSettlementPrice(-setPrice);
price.setRemark("CN域名4天内删除扣除90%手续费");
}
}
break;
case 6:
// 高级用户
if (expirationDate < d) {
// 允许删除已过期域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
} else {
d.setDate(d.getDate() - 3);
if (registrationDate > d) {
// 只允许删除3天内新注册的域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-U");
price.setPeriod(0);
price.setUnit("");
price.setPrice(regPrice * -0.9);
price.setSettlementPrice(-setPrice);
price.setRemark("CN域名3天内删除扣除90%手续费");
}
}
break;
default:
// 普通用户和游客
if (expirationDate < d) {
// 允许删除已过期域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
}
}
return price;
}
}
//注入pricePolicyScript
@Required
public void setPricePolicyScript(Resource pricePolicyScript) {
this.pricePolicyScript = pricePolicyScript;
}
//p:pricePolicyScript="file:///${web.root}${cnnic.registrarService.pricePolicy}"
//properties文件中的键值对:cnnic.registrarService.pricePolicy = WEB-INF/cnnic/pricePolicy.js
private Resource pricePolicyScript;
//加载bean后执行的方法 ,可心写多个@PostConstruct方法.
@PostConstruct
public void reloadPricePolicy() throws ScriptException, IOException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
Reader reader = new InputStreamReader(pricePolicyScript.getInputStream(), "UTF-8");
engine.eval(reader);
engine.put("registrarId", registrarId);
scriptEngine = (Invocable) engine;
registrationPriceCache.clear();
log.info("[" + registrarId + "] Price policy loaded.");
}
public DomainPrice getDeletionPrice(String suffix, double registrationPrice, double settlementPrice, Date registrationDate, Date expirationDate, int userClass) {
try {
DomainPrice price = (DomainPrice) scriptEngine.invokeFunction("getDeletionPrice", suffix, registrationPrice, settlementPrice, registrationDate.getTime(), expirationDate.getTime(), userClass);
if (price == null) {
return null;
} else {
return price;
}
} catch (ScriptException e) {
log.error("Error in price policy script.", e);
} catch (NoSuchMethodException e) {
log.error("Error in price policy script.", e);
} catch (ClassCastException e) {
log.error("Error in price policy script.", e);
}
return null;
}
}
***********************************************************************************************************************
importPackage(com.zunmi.domain);
/*
* 用户级别(userClass)说明:
* 1: 系统
* 2: 管理员
* 3: 普通用户
* 4: 分销商
* 5: 战略分销商
* 6: 高级用户
* 7: 游客
*/
var basePrices = [0, 0, 0, 100, 45, 35, 50, 50];
var renewDiscounts = [0, 0, 0, 0, 0, 0, 0, 0];
var settlementPrice = 30;
function getRegistrationPriceList(suffix, userClass) {
if (suffix != ".cn") {
return null;
} else {
var priceList = new Array();
for (var i = 1; i <= 10; i++) {
var price = new DomainPrice();
price.setId(registrarId + "-REG11-" + i + "Y");
price.setPeriod(i);
price.setUnit("Y");
price.setPrice(i * basePrices[userClass]);
price.setSettlementPrice(i * settlementPrice);
price.setRemark("CN域名2011年注册价格");
priceList.push(price);
}
return priceList;
}
}
function getRenewalPriceList(suffix, registrationDate, expirationDate, userClass) {
if (suffix != ".cn") {
return null;
} else {
var priceList = new Array();
var maxDate = new Date();
var expDate = new Date();
expDate.setTime(expirationDate);
var maxYears = maxDate.getFullYear() - expDate.getFullYear() + 10;
for (var i = 1; i <= maxYears; i++) {
var price = new DomainPrice();
price.setId(registrarId + "-RENEW11-" + i + "Y");
price.setPeriod(i);
price.setUnit("Y");
price.setPrice(i * basePrices[userClass]);
price.setSettlementPrice(i * settlementPrice);
price.setRemark("CN域名2011年续费价格");
priceList.push(price);
}
return priceList;
}
}
function getDeletionPrice(suffix, regPrice, setPrice, registrationDate, expirationDate, userClass) {
if (suffix != ".cn") {
return null;
} else {
var price = null;
var d = new Date();
switch (userClass) {
case 1:
if (expirationDate < d) {
price = new DomainPrice();
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
}
break;
case 2:
price = new DomainPrice();
if (expirationDate < d) {
// 允许删除已过期域名
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
} else {
// 管理员允许删除任意时间的域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-A");
price.setPeriod(0);
price.setUnit("");
price.setPrice(-regPrice);
d.setDate(d.getDate() - 5);
if (registrationDate > d) {
price.setSettlementPrice(-setPrice);
price.setRemark("CN域名管理员删除,100%退费");
} else {
price.setSettlementPrice(0.0);
price.setRemark("CN域名管理员删除");
}
}
break;
case 4:
case 5:
// 分销商和战略分销商
if (expirationDate < d) {
// 允许删除已过期域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
} else {
d.setDate(d.getDate() - 4);
if (registrationDate > d) {
// 只允许删除4天内新注册的域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-R");
price.setPeriod(0);
price.setUnit("");
price.setPrice(regPrice * -0.9);
price.setSettlementPrice(-setPrice);
price.setRemark("CN域名4天内删除扣除90%手续费");
}
}
break;
case 6:
// 高级用户
if (expirationDate < d) {
// 允许删除已过期域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
} else {
d.setDate(d.getDate() - 3);
if (registrationDate > d) {
// 只允许删除3天内新注册的域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-U");
price.setPeriod(0);
price.setUnit("");
price.setPrice(regPrice * -0.9);
price.setSettlementPrice(-setPrice);
price.setRemark("CN域名3天内删除扣除90%手续费");
}
}
break;
default:
// 普通用户和游客
if (expirationDate < d) {
// 允许删除已过期域名
price = new DomainPrice();
price.setId(registrarId + "-DEL-EXPIRED");
price.setPeriod(0);
price.setUnit("");
price.setPrice(0.0);
price.setSettlementPrice(0.0);
price.setRemark("CN域名过期删除");
}
}
return price;
}
}
相关文章推荐
- selenium测试(Java)--执行JS(十八)
- swt 嵌入 xulrunner 中文目录不能正常执行js调用java
- 关于在jsp中java代码和js以及html代码的执行顺序
- Java那些事之执行js
- java执行js代码
- java利用JDK调用并执行js源码
- java调用js文件并执行方法示例
- java执行js文件
- 【javaweb:js前端】两个及以上的window.location.href,只执行最后一个的问题!
- jsp中java代码、jsp代码、js代码执行的顺序
- JAVA使用脚本引擎执行JS
- jsp中java代码、jsp代码、js代码执行的顺序
- 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分
- C C++ Java C# JS编译、执行过程的原理入门分析
- selenium测试(Java)--执行JS(十八)
- Java 后能执行JS(JSF)
- 在java代码中执行js
- JAVA使用脚本引擎执行JS
- Java调用某一js文件中的方法,执行并返回结果
- jsp中java代码、jsp代码、js代码执行的顺序