java中执行js

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;
 }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值