全局参数syspara和业务参数businesspara
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/BusinessparaDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/BusinessparaDao.java
new file mode 100644
index 0000000..5bf13d9
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/BusinessparaDao.java
@@ -0,0 +1,25 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TBusinesspara;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Lock;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.jpa.repository.QueryHints;
+import org.springframework.stereotype.Repository;
+
+import javax.persistence.LockModeType;
+import javax.persistence.QueryHint;
+
+@Repository
+public interface BusinessparaDao extends JpaRepository<TBusinesspara, String> {
+  TBusinesspara findByParakey(String parakey);
+
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
+  @Query(value = " from TBusinesspara where parakey=?1 ")
+  TBusinesspara findByParakeyForUpdate(String parakey);
+
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
+  @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="0")})
+  @Query(value = " from TBusinesspara where parakey=?1 ")
+  TBusinesspara findByParakeyForUpdateNowait(String parakey);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/SysparaDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/SysparaDao.java
new file mode 100644
index 0000000..7e20856
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SysparaDao.java
@@ -0,0 +1,25 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TSyspara;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Lock;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.jpa.repository.QueryHints;
+import org.springframework.stereotype.Repository;
+
+import javax.persistence.LockModeType;
+import javax.persistence.QueryHint;
+
+@Repository
+public interface SysparaDao extends JpaRepository<TSyspara, Integer> {
+  TSyspara findByParaid(int paraid);
+
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
+  @Query(value = "from TSyspara where paraid=?1 ")
+  TSyspara findByParaidWithLock(int paraid);
+
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
+  @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="0")})
+  @Query(value = "from TSyspara where paraid=?1 ")
+  TSyspara findByParaidWithLockNowait(int paraid);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TBusinesspara.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TBusinesspara.java
new file mode 100644
index 0000000..6c6691e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TBusinesspara.java
@@ -0,0 +1,41 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "TB_BUSINESSPARA")
+public class TBusinesspara {
+  @Id
+  @Column(name="PARAKEY", nullable = false, length = 60)
+  private String parakey;
+
+  @Column(name="PARAVAL", length = 1000)
+  private String paraval;
+
+  public TBusinesspara() {
+  }
+
+  public TBusinesspara(String parakey, String paraval) {
+    this.parakey = parakey;
+    this.paraval = paraval;
+  }
+
+  public String getParakey() {
+    return parakey;
+  }
+
+  public void setParakey(String parakey) {
+    this.parakey = parakey;
+  }
+
+  public String getParaval() {
+    return paraval;
+  }
+
+  public void setParaval(String paraval) {
+    this.paraval = paraval;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TSyspara.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TSyspara.java
new file mode 100644
index 0000000..50cd0f7
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TSyspara.java
@@ -0,0 +1,158 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.NumberUtil;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.SysparaUtil;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "TB_SYSPARA")
+public class TSyspara {
+  @Id
+  @Column(name = "PARAID", nullable = false, precision = 9)
+  private Integer paraid;
+
+  @Column(name = "PARAVAL", length = 100)
+  private String paraval;
+
+  @Column(name = "PARANAME", length = 90)
+  private String paraname;
+
+  @Column(name = "PARAUNIT", length = 20)
+  private String paraunit;
+
+  @Column(name = "VALUETYPE", length = 10)
+  private String valueType = SysparaUtil.SYSPARA_VALUETYPE_STRING;
+
+  @Column(name = "EDITFLAG", nullable = false, precision = 1)
+  private Integer editflag;
+
+  @Column(name = "DISPLAYFLAG", length = 10)
+  private String displayflag;
+
+  @Column(name = "REMARK", length = 240)
+  private String remark;
+
+  @Column(name = "LASTSAVED", length = 14)
+  private String lastsaved;
+
+  public TSyspara() {
+  }
+
+  public TSyspara(Integer paraid, Integer editflag) {
+    this.paraid = paraid;
+    this.editflag = editflag;
+  }
+
+  public TSyspara(Integer paraid, String paraval, String paraname, String paraunit, String valueType, Integer editflag, String displayflag, String remark, String lastsaved) {
+    this.paraid = paraid;
+    this.paraval = paraval;
+    this.paraname = paraname;
+    this.paraunit = paraunit;
+    this.valueType = valueType;
+    this.editflag = editflag;
+    this.displayflag = displayflag;
+    this.remark = remark;
+    this.lastsaved = lastsaved;
+  }
+
+  public Integer getParaid() {
+    return paraid;
+  }
+
+  public void setParaid(Integer paraid) {
+    this.paraid = paraid;
+  }
+
+  public String getParaval() {
+    return paraval;
+  }
+
+  public void setParaval(String paraval) {
+    this.paraval = paraval;
+  }
+
+  public String getParaname() {
+    return paraname;
+  }
+
+  public void setParaname(String paraname) {
+    this.paraname = paraname;
+  }
+
+  public String getParaunit() {
+    return paraunit;
+  }
+
+  public void setParaunit(String paraunit) {
+    this.paraunit = paraunit;
+  }
+
+  public String getValueType() {
+    return valueType;
+  }
+
+  public void setValueType(String valueType) {
+    this.valueType = valueType;
+  }
+
+  public Integer getEditflag() {
+    return editflag;
+  }
+
+  public void setEditflag(Integer editflag) {
+    this.editflag = editflag;
+  }
+
+  public String getDisplayflag() {
+    return displayflag;
+  }
+
+  public void setDisplayflag(String displayflag) {
+    this.displayflag = displayflag;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+  public String getLastsaved() {
+    return lastsaved;
+  }
+
+  public void setLastsaved(String lastsaved) {
+    this.lastsaved = lastsaved;
+  }
+
+  /**
+   * 判断参数是否非法
+   * @return 非法 -> true; 合法 -> false
+   */
+  public boolean checkValueInvalid() {
+    if (!StringUtil.isEmpty(this.paraval)) {
+      if (SysparaUtil.SYSPARA_VALUETYPE_AMOUNT.equals(this.valueType) && !NumberUtil.isAmount(this.paraval)) {
+        return true; //参数值非金额类型
+      } else if (SysparaUtil.SYSPARA_VALUETYPE_DECIMAL.equals(this.valueType) && !NumberUtil.isDecimal(this.paraval)) {
+        return true; //参数值非数值类型
+      } else if (SysparaUtil.SYSPARA_VALUETYPE_NUMBER.equals(this.valueType) && !NumberUtil.isNumber(this.paraval)) {
+        return true; //参数值非整数
+      } else if (SysparaUtil.SYSPARA_VALUETYPE_SWITCH.equals(this.valueType) && !"1".equals(this.paraval) && !"0".equals(this.paraval)) {
+        return true; //参数值非开关量 0/1
+      } else if (SysparaUtil.SYSPARA_VALUETYPE_DATE.equals(this.valueType) && !DateUtil.checkDatetimeValid(this.paraval, "yyyyMMdd")) {
+        return true; //参数值非日期格式
+      } else if (SysparaUtil.SYSPARA_VALUETYPE_DATETIME.equals(this.valueType) && !DateUtil.checkDatetimeValid(this.paraval, "yyyyMMddHHmmss")) {
+        return true; //参数值非日期时间格式
+      }
+    }
+    return false; //默认字符串格式都合法
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
index 21d2793..23c7172 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.framework.service;
 
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
+import com.supwisdom.dlpay.framework.domain.TBusinesspara;
+import com.supwisdom.dlpay.framework.domain.TSyspara;
 import com.supwisdom.dlpay.framework.domain.TTaskLock;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -40,4 +42,38 @@
   String getTranscodeName(int transocde, String defaultValue);
 
 
+  /********************** 获取【系统参数】【业务参数】通用方法 **********************/
+  String getSysparaValue(int paraid);
+
+  String getSysparaValue(int paraid, String defaultValue);
+
+  boolean getSysparaValueAsBoolean(int paraid);
+
+  int getSysparaValueAsInt(int paraid, int defaultValue);
+
+  double getSysparaValueAsDouble(int paraid, double defaultValue);
+
+  TSyspara getSyspara(int paraid);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  TSyspara getSysparaValueForUpdate(int paraid);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  TSyspara getSysparaValueForUpdateNowait(int paraid);
+
+
+  String getBusinessValue(String parakey);
+
+  String getBusinessValue(String parakey, String defaultValue);
+
+  TBusinesspara getBusiness(String parakey);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  TBusinesspara getBusinessValueForUpdate(String parakey);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  TBusinesspara getBusinessValueForUpdateNowait(String parakey);
+  /********************** 获取【系统参数】【业务参数】通用方法 **********************/
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
index ec021e9..c1d9971 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
@@ -1,15 +1,12 @@
 package com.supwisdom.dlpay.framework.service.impl;
 
 import com.supwisdom.dlpay.framework.core.DatabaseConfig;
-import com.supwisdom.dlpay.framework.dao.SettleCtlDao;
-import com.supwisdom.dlpay.framework.dao.TaskLockDao;
-import com.supwisdom.dlpay.framework.dao.TranscodeDao;
+import com.supwisdom.dlpay.framework.dao.*;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
-import com.supwisdom.dlpay.framework.domain.TSettlectl;
-import com.supwisdom.dlpay.framework.domain.TTaskLock;
-import com.supwisdom.dlpay.framework.domain.TTranscode;
+import com.supwisdom.dlpay.framework.domain.*;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.NumberUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +27,10 @@
   private SettleCtlDao settleCtlDao;
   @Autowired
   private TranscodeDao transcodeDao;
+  @Autowired
+  private SysparaDao sysparaDao;
+  @Autowired
+  private BusinessparaDao businessparaDao;
 
   private static final Logger logger = Logger.getLogger(SystemUtilServiceImpl.class);
 
@@ -149,4 +150,88 @@
     return defaultValue;
   }
 
+  @Override
+  public String getSysparaValue(int paraid) {
+    TSyspara syspara = sysparaDao.findByParaid(paraid);
+    if (null != syspara) return syspara.getParaval();
+    return null;
+  }
+
+  @Override
+  public String getSysparaValue(int paraid, String defaultValue) {
+    String paraval = getSysparaValue(paraid);
+    if (null != paraval) return paraval;
+    return defaultValue;
+  }
+
+  @Override
+  public boolean getSysparaValueAsBoolean(int paraid) {
+    TSyspara syspara = sysparaDao.findByParaid(paraid);
+    if (null != syspara && "1".equals(syspara.getParaval())) return true;
+    return false;
+  }
+
+  @Override
+  public int getSysparaValueAsInt(int paraid, int defaultValue) {
+    TSyspara syspara = sysparaDao.findByParaid(paraid);
+    if (null != syspara && NumberUtil.isNumber(syspara.getParaval())) return Integer.parseInt(syspara.getParaval());
+    return defaultValue;
+  }
+
+  @Override
+  public double getSysparaValueAsDouble(int paraid, double defaultValue) {
+    TSyspara syspara = sysparaDao.findByParaid(paraid);
+    if (null != syspara && NumberUtil.isDecimal(syspara.getParaval())) return Double.parseDouble(syspara.getParaval());
+    return defaultValue;
+  }
+
+  @Override
+  public TSyspara getSyspara(int paraid){
+    return sysparaDao.findByParaid(paraid);
+  }
+
+  @Override
+  public TSyspara getSysparaValueForUpdate(int paraid){
+    return sysparaDao.findByParaidWithLock(paraid);
+  }
+
+  @Override
+  public TSyspara getSysparaValueForUpdateNowait(int paraid){
+    return sysparaDao.findByParaidWithLockNowait(paraid);
+  }
+
+  @Override
+  public String getBusinessValue(String parakey) {
+    if (!StringUtil.isEmpty(parakey)) {
+      TBusinesspara businesspara = businessparaDao.findByParakey(parakey.trim());
+      if (null != businesspara) return businesspara.getParaval();
+    }
+    return null;
+  }
+
+  @Override
+  public String getBusinessValue(String parakey, String defaultValue) {
+    String paraval = getBusinessValue(parakey);
+    if (!StringUtil.isEmpty(paraval)) return paraval;
+    return defaultValue;
+  }
+
+  @Override
+  public TBusinesspara getBusiness(String parakey) {
+    if (!StringUtil.isEmpty(parakey)) return businessparaDao.findByParakey(parakey.trim());
+    return null;
+  }
+
+  @Override
+  public TBusinesspara getBusinessValueForUpdate(String parakey){
+    if (!StringUtil.isEmpty(parakey)) return businessparaDao.findByParakeyForUpdate(parakey.trim());
+    return null;
+  }
+
+  @Override
+  public TBusinesspara getBusinessValueForUpdateNowait(String parakey) {
+    if (!StringUtil.isEmpty(parakey)) return businessparaDao.findByParakeyForUpdateNowait(parakey.trim());
+    return null;
+  }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/NumberUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/NumberUtil.java
new file mode 100644
index 0000000..a8d4390
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/NumberUtil.java
@@ -0,0 +1,65 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class NumberUtil {
+
+  /**
+   * 判断是否是非负整数
+   *
+   * @param str
+   * @return 是 -> true;  否 -> false 如 1 -> true; -1 -> false
+   */
+  public static boolean isDigits(String str) {
+    if (null == str || "".equals(str.trim())) return false;
+    java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("[0-9]*");
+    java.util.regex.Matcher match = pattern.matcher(str.trim());
+    return match.matches();
+  }
+
+  /**
+   * 判断是否是整数(包含正负)
+   *
+   * @param str
+   * @return 是 -> true;  否 -> false  如 -1 -> true; -1.0 -> false
+   */
+  public static boolean isNumber(String str) {
+    if (null == str) return false;
+    try {
+      Integer.valueOf(str);
+      return true;
+    } catch (NumberFormatException ex) {
+      return false;
+    }
+  }
+
+  /**
+   * 判断是否是数字
+   *
+   * @param str
+   * @return 是 -> true;  否 -> false  如 -1 -> true; asd.1sa -> false
+   */
+  public static boolean isDecimal(String str) {
+    if (null == str) return false;
+    try {
+      Double.valueOf(str.trim());
+      return true;
+    } catch (NumberFormatException ex) {
+      return false;
+    }
+  }
+
+  /**
+   * 判断是否是金额(包含正负,最多2位小数)
+   *
+   * @param str
+   * @return 是 -> true;  否 -> false  如 -1.10 -> true; -1.011 -> false
+   */
+  public static boolean isAmount(String str) {
+    if (!isDecimal(str)) return false;
+    if (str.trim().indexOf(".") != -1) {
+      String suffix = str.trim().substring(str.trim().indexOf(".") + 1);
+      if (suffix.length() > 2) return false; //小数位多余2位
+    }
+    return true;
+  }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
new file mode 100644
index 0000000..d3e9b11
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
@@ -0,0 +1,16 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class SysparaUtil {
+  public static final String SYSPARA_VALUETYPE_AMOUNT = "amount"; //金额类型 Double
+  public static final String SYSPARA_VALUETYPE_SWITCH = "switch"; //开关类型 Boolean 0/1
+  public static final String SYSPARA_VALUETYPE_DATE = "date"; //日期类型 yyyyMMdd
+  public static final String SYSPARA_VALUETYPE_DATETIME = "datetime"; //日期+时间 yyyyMMddHHmmss
+  public static final String SYSPARA_VALUETYPE_DECIMAL = "decimal"; //数值
+  public static final String SYSPARA_VALUETYPE_NUMBER = "number "; //整数,包含正负
+  public static final String SYSPARA_VALUETYPE_STRING = "string"; //字符串
+
+
+  public static final int SYSPARAID_NO1 = 1; //paraid=1
+  public static final int SYSPARAID_NO2 = 2; //paraid=2
+
+}