diff --git a/build.gradle b/build.gradle
index d7c257e..4152d81 100644
--- a/build.gradle
+++ b/build.gradle
@@ -14,9 +14,6 @@
 version = payapiVersion
 sourceCompatibility = jdkVersion
 
-repositories {
-    mavenCentral()
-}
 
 war {
     manifest {
@@ -25,6 +22,18 @@
     }
 }
 
+repositories {
+    mavenCentral()
+    maven {
+        url "http://ykt-nx.supwisdom.com/repository/ecard-repo/"
+        credentials {
+            username 'ecard'
+            password 'Ecard4SUP'
+        }
+    }
+}
+
+
 dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
     compile group: 'org.apache.poi', name: 'poi', version: '3.10.1'
@@ -33,6 +42,7 @@
     compile group: 'org.apache.poi',name: 'poi-ooxml', version:'3.10.1'
     compile group: 'org.apache.poi',name: 'poi-ooxml-schemas', version:'3.10.1'
     compile group: 'org.apache.poi',name: 'poi-scratchpad', version:'3.10.1'
+    compile 'com.supwisdom:payapi-sdk:e4bf762'
 
     implementation 'org.springframework.boot:spring-boot-devtools'
     implementation 'org.springframework.boot:spring-boot-starter-tomcat'
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TSourceType.java b/src/main/java/com/supwisdom/dlpay/api/domain/TSourceType.java
new file mode 100644
index 0000000..1064d24
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TSourceType.java
@@ -0,0 +1,123 @@
+package com.supwisdom.dlpay.api.domain;
+
+import com.supwisdom.dlpay.framework.domain.DictionaryTable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * Created by shuwei on 2019/4/9.
+ */
+@Entity
+@Table(name = "TB_SOURCETYPE")
+public class TSourceType implements DictionaryTable, Serializable {
+  @Id
+  @Column(name = "SOURCETYPE", nullable = false, length = 20)
+  private String sourceType;
+
+  @Column(name = "ENABLE", length = 20)
+  @NotNull
+  private Boolean enable;
+
+  @Column(name = "CHARGE_ENABLE", length = 10)
+  @NotNull
+  private Boolean chargeEnable; //充值总开关
+
+  @Column(name = "CONSUME_ENABLE", length = 10)
+  @NotNull
+  private Boolean consumeEnable; //消费总开关
+
+  @Column(name = "ANONYMOUS_ENABLE", length = 10)
+  @NotNull
+  private Boolean anonymousEnable; //匿名消费总开关
+
+  @Column(name = "reversable")
+  @NotNull
+  private Boolean reversable;
+
+  @Column(name = "checkable")
+  @NotNull
+  private Boolean checkable; // 是否需要清算
+
+  @Column(name = "PAYDESC", length = 200)
+  private String paydesc;
+
+
+  public String getSourceType() {
+    return sourceType;
+  }
+
+  public void setSourceType(String sourceType) {
+    this.sourceType = sourceType;
+  }
+
+  public Boolean getEnable() {
+    return enable;
+  }
+
+  public void setEnable(Boolean enable) {
+    this.enable = enable;
+  }
+
+  public Boolean getChargeEnable() {
+    return chargeEnable;
+  }
+
+  public void setChargeEnable(Boolean chargeEnable) {
+    this.chargeEnable = chargeEnable;
+  }
+
+  public Boolean getConsumeEnable() {
+    return consumeEnable;
+  }
+
+  public void setConsumeEnable(Boolean consumeEnable) {
+    this.consumeEnable = consumeEnable;
+  }
+
+  public Boolean getAnonymousEnable() {
+    return anonymousEnable;
+  }
+
+  public void setAnonymousEnable(Boolean anonymousEnable) {
+    this.anonymousEnable = anonymousEnable;
+  }
+
+  public String getPaydesc() {
+    return paydesc;
+  }
+
+  public void setPaydesc(String paydesc) {
+    this.paydesc = paydesc;
+  }
+
+  public Boolean getCheckable() {
+    return checkable;
+  }
+
+  public void setCheckable(Boolean checkable) {
+    this.checkable = checkable;
+  }
+
+  public Boolean getReversable() {
+    return reversable;
+  }
+
+  public void setReversable(Boolean reversable) {
+    this.reversable = reversable;
+  }
+
+  @Override
+  public String getDictKey() {
+    return this.sourceType;
+  }
+
+  @Override
+  public Object getDictValue() {
+    return this.paydesc;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java
new file mode 100644
index 0000000..efdd384
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/DictionaryDao.java
@@ -0,0 +1,15 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.domain.TDictionaryPK;
+import org.springframework.cache.annotation.CacheConfig;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface DictionaryDao extends JpaRepository<TDictionary, TDictionaryPK> {
+  List<TDictionary> findAllByDicttype(String dicttype);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/DictionaryTable.java b/src/main/java/com/supwisdom/dlpay/framework/domain/DictionaryTable.java
new file mode 100644
index 0000000..7d1d36a
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/DictionaryTable.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.framework.domain;
+
+public interface DictionaryTable {
+  String getDictKey();
+
+  Object getDictValue();
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/JwtRedis.java b/src/main/java/com/supwisdom/dlpay/framework/domain/JwtRedis.java
index 01828e0..47ece23 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/JwtRedis.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/JwtRedis.java
@@ -4,7 +4,7 @@
 import org.springframework.data.redis.core.RedisHash;
 
 
-@RedisHash("api_jwt")
+@RedisHash(value = "api_jwt", timeToLive = 3600L)
 public class JwtRedis {
   @Id
   String jti;
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionary.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionary.java
new file mode 100644
index 0000000..d6b7c03
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionary.java
@@ -0,0 +1,67 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Entity
+@Table(name = "TB_DICTIONARY")
+@IdClass(TDictionaryPK.class)
+public class TDictionary implements DictionaryTable, Serializable {
+  @Id
+  @Column(name = "DICTTYPE", nullable = false)
+  private String dicttype;
+
+  @Id
+  @Column(name = "DICTVAL", nullable = false, length = 30)
+  private String dictval;
+
+  @Column(name = "DICTTYPENAME", length = 60)
+  private String dicttypename;
+
+  @Column(name = "DICTCAPTION", length = 60)
+  private String dictcaption;
+
+
+  public String getDicttype() {
+    return dicttype;
+  }
+
+  public void setDicttype(String dicttype) {
+    this.dicttype = dicttype;
+  }
+
+  public String getDictval() {
+    return dictval;
+  }
+
+  public void setDictval(String dictval) {
+    this.dictval = dictval;
+  }
+
+  public String getDicttypename() {
+    return dicttypename;
+  }
+
+  public void setDicttypename(String dicttypename) {
+    this.dicttypename = dicttypename;
+  }
+
+  public String getDictcaption() {
+    return dictcaption;
+  }
+
+  public void setDictcaption(String dictcaption) {
+    this.dictcaption = dictcaption;
+  }
+
+  @Override
+  public String getDictKey() {
+    return this.dictval;
+  }
+
+  @Override
+  public Object getDictValue() {
+    return this.dictcaption;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionaryPK.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionaryPK.java
new file mode 100644
index 0000000..1dbb4c8
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TDictionaryPK.java
@@ -0,0 +1,50 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class TDictionaryPK implements Serializable {
+  @Id
+  @Column(name = "DICTTYPE", nullable = false)
+  private String dicttype;
+
+  @Id
+  @Column(name = "DICTVAL", nullable = false, length = 30)
+  private String dictval;
+
+  public String getDicttype() {
+    return dicttype;
+  }
+
+  public void setDicttype(String dicttype) {
+    this.dicttype = dicttype;
+  }
+
+  public String getDictval() {
+    return dictval;
+  }
+
+  public void setDictval(String dictval) {
+    this.dictval = dictval;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    TDictionaryPK tDictionaryPK = (TDictionaryPK) o;
+    if (dicttype != null ? !dicttype.equals(tDictionaryPK.getDicttype()) : dicttype != null)
+      return false;
+    if (dictval != null ? !dictval.equals(tDictionaryPK.getDictval()) : dictval != null)
+      return false;
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = dicttype != null ? dicttype.hashCode() : 0;
+    result = 31 * result + (dictval != null ? dictval.hashCode() : 0);
+    return result;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantConfig.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantConfig.java
new file mode 100644
index 0000000..3499322
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantConfig.java
@@ -0,0 +1,36 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+
+@Entity
+@Table(name = "tb_tenantconfig")
+public class TTenantConfig {
+  @Id
+  @Column(name = "cfgid", length = 20)
+  private String cfgid;
+
+
+  @Column(name = "datacenter_id", length = 40)
+  private String dataCenterId;
+
+  public String getCfgid() {
+    return cfgid;
+  }
+
+  public void setCfgid(String cfgid) {
+    this.cfgid = cfgid;
+  }
+
+  public String getDataCenterId() {
+    return dataCenterId;
+  }
+
+  public void setDataCenterId(String dataCenterId) {
+    this.dataCenterId = dataCenterId;
+  }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java b/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
new file mode 100644
index 0000000..60d79cf
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
@@ -0,0 +1,55 @@
+package com.supwisdom.dlpay.framework.filter;
+
+import com.google.gson.Gson;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@WebFilter
+public class CrosXssFilter implements Filter {
+  private static final Logger logger = LoggerFactory.getLogger(CrosXssFilter.class);
+
+  @Override
+  public void init(FilterConfig filterConfig) throws ServletException {
+
+  }
+
+  @Override
+  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+    request.setCharacterEncoding("utf-8");
+
+    //跨域设置
+//    if(response instanceof HttpServletResponse){
+//      HttpServletResponse httpServletResponse=(HttpServletResponse)response;
+//      //通过在响应 header 中设置 ‘*’ 来允许来自所有域的跨域请求访问。
+//      httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
+//      //通过对 Credentials 参数的设置，就可以保持跨域 Ajax 时的 Cookie
+//      //设置了Allow-Credentials，Allow-Origin就不能为*,需要指明具体的url域
+//      //httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
+//      //请求方式
+//      httpServletResponse.setHeader("Access-Control-Allow-Methods", "*");
+//      //（预检请求）的返回结果（即 Access-Control-Allow-Methods 和Access-Control-Allow-Headers 提供的信息） 可以被缓存多久
+//      httpServletResponse.setHeader("Access-Control-Max-Age", "86400");
+//      //首部字段用于预检请求的响应。其指明了实际请求中允许携带的首部字段
+//      httpServletResponse.setHeader("Access-Control-Allow-Headers", "*");
+//    }
+
+    //sql,xss过滤
+    HttpServletRequest httpServletRequest = (HttpServletRequest) request;
+    logger.info("CrosXssFilter.......orignal url:{},ParameterMap:{}",httpServletRequest.getRequestURI(), new Gson().toJson(httpServletRequest.getParameterMap()));
+    XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper(
+        httpServletRequest);
+    chain.doFilter(xssHttpServletRequestWrapper, response);
+    logger.info("CrosXssFilter..........doFilter url:{},ParameterMap:{}",xssHttpServletRequestWrapper.getRequestURI(), new Gson().toJson(xssHttpServletRequestWrapper.getParameterMap()));
+  }
+
+  @Override
+  public void destroy() {
+
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/XssHttpServletRequestWrapper.java b/src/main/java/com/supwisdom/dlpay/framework/filter/XssHttpServletRequestWrapper.java
new file mode 100644
index 0000000..ddc4d15
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/XssHttpServletRequestWrapper.java
@@ -0,0 +1,130 @@
+package com.supwisdom.dlpay.framework.filter;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 防止sql注入,xss攻击
+ * */
+public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
+  private final static Logger log = LoggerFactory.getLogger(XssHttpServletRequestWrapper.class);
+  private final static String key = "'|and|exec|execute|insert|select|delete|update|count|drop|%|chr|mid|master|truncate|" +
+      "char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" +
+      "table|from|grant|use|group_concat|column_name|" +
+      "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|" +
+      "chr|mid|master|truncate|char|declare|or|;|-|--|,|like|//|/|%|#";
+  private static Set<String> notAllowedKeyWords = new HashSet<String>(0);
+  private static String replacedString="INVALID";
+  static {
+    String keyStr[] = key.split("\\|");
+    for (String str : keyStr) {
+      notAllowedKeyWords.add(str);
+    }
+  }
+
+  private String currentUrl;
+
+  /**
+   * Constructs a request object wrapping the given request.
+   *
+   * @param request the {@link HttpServletRequest} to be wrapped.
+   * @throws IllegalArgumentException if the request is null
+   */
+  public XssHttpServletRequestWrapper(HttpServletRequest request) {
+    super(request);
+    currentUrl = request.getRequestURI();
+  }
+
+  /**覆盖getParameter方法，将参数名和参数值都做xss过滤。
+   * 如果需要获得原始的值，则通过super.getParameterValues(name)来获取
+   * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖
+   */
+  @Override
+  public String getParameter(String parameter) {
+    String value = super.getParameter(parameter);
+    if (value == null) {
+      return null;
+    }
+    return cleanXSS(value);
+  }
+  @Override
+  public String[] getParameterValues(String parameter) {
+    String[] values = super.getParameterValues(parameter);
+    if (values == null) {
+      return null;
+    }
+    int count = values.length;
+    String[] encodedValues = new String[count];
+    for (int i = 0; i < count; i++) {
+      encodedValues[i] = cleanXSS(values[i]);
+    }
+    return encodedValues;
+  }
+
+  @Override
+  public Map<String, String[]> getParameterMap(){
+    Map<String, String[]> values=super.getParameterMap();
+    if (values == null) {
+      return null;
+    }
+    Map<String, String[]> result=new HashMap<>();
+    for(String key:values.keySet()){
+      String encodedKey=cleanXSS(key);
+      int count=values.get(key).length;
+      String[] encodedValues = new String[count];
+      for (int i = 0; i < count; i++){
+        encodedValues[i]=cleanXSS(values.get(key)[i]);
+      }
+      result.put(encodedKey,encodedValues);
+    }
+    return result;
+  }
+
+  /**
+   * 覆盖getHeader方法，将参数名和参数值都做xss过滤。
+   * 如果需要获得原始的值，则通过super.getHeaders(name)来获取
+   * getHeaderNames 也可能需要覆盖
+   */
+  @Override
+  public String getHeader(String name) {
+    String value = super.getHeader(name);
+    if (value == null) {
+      return null;
+    }
+    return cleanXSS(value);
+  }
+
+  private String cleanXSS(String valueP) {
+    // You'll need to remove the spaces from the html entities below
+    String value = valueP.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
+    value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
+    value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
+    value = value.replaceAll("'", "& #39;");
+    value = value.replaceAll("eval\\((.*)\\)", "");
+    value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
+    value = value.replaceAll("script", "");
+    value = cleanSqlKeyWords(value);
+    return value;
+  }
+
+  private String cleanSqlKeyWords(String value) {
+    String paramValue = value;
+    for (String keyword : notAllowedKeyWords) {
+      if (paramValue.length() > keyword.length() + 4
+          && (paramValue.contains(" "+keyword)||paramValue.contains(keyword+" ")||paramValue.contains(" "+keyword+" "))) {
+        paramValue = StringUtils.replace(paramValue, keyword, replacedString);
+        log.error(this.currentUrl + "已被过滤，因为参数中包含不允许sql的关键词(" + keyword
+            + ")"+";参数："+value+";过滤后的参数："+paramValue);
+      }
+    }
+    return paramValue;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationFailureHandler.java b/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationFailureHandler.java
index bba039e..f18d092 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationFailureHandler.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationFailureHandler.java
@@ -37,9 +37,11 @@
     } else if (exception instanceof ValidateCodeException) {
       errmsg = exception.getMessage();
     }
-    response.setStatus(HttpStatus.OK.value());
+    setDefaultFailureUrl("/login");
+    super.onAuthenticationFailure(request, response, new ValidateCodeException(errmsg));
+    /*response.setTransStatus(HttpStatus.OK.value());
     response.setContentType("application/json;charset=UTF-8");
-    response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, errmsg)));
+    response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, errmsg)));*/
   }
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationSuccessHandler.java b/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationSuccessHandler.java
index f74d15d..abaa46a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationSuccessHandler.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/security/MyAuthenticationSuccessHandler.java
@@ -5,6 +5,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
 import org.springframework.stereotype.Component;
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java b/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
index 02dbce4..f19c136 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
@@ -19,53 +19,54 @@
 
 @Component
 public class MyPermissionEvaluator implements PermissionEvaluator {
-    @Autowired
-    private RoleService roleService;
-    @Autowired
-    private OperatorService operatorService;
-    @Autowired
-    private FunctionService functionService;
-    @Override
-    public boolean hasPermission(Authentication authentication, Object targetUri, Object permission) {
-        //TODO save logger
-        if (targetUri != null) {
-            UserDetails userDetails = (UserDetails) authentication.getPrincipal();
-            if (userDetails != null) {
-                TOperator operator = operatorService.getOperatorByCode(userDetails.getUsername());
-                if (operator != null) {
-                    List<TOperRole> operRoles = operatorService.getOperRoleByOperId(operator.getOperid());
-                    for (TOperRole operRole : operRoles) {
-                        TRole role = roleService.findRoleByRoleid(operRole.getRoleId());
-                        if (role != null) {
-                            TResource resource = roleService.findResourceByURI(String.valueOf(targetUri));
-                            if (resource != null) {
-                                TPermission permission1 = roleService.findByRoleIdAndResid(role.getRoleId(), resource.getId());
-                                if (permission1 != null) {
-                                    TOperLog log = new TOperLog();
-                                    log.setLogdate(DateUtil.getNow());
-                                    log.setOperid(operator.getOperid());
-                                    log.setOpername(operator.getOpercode());
-                                    log.setResname(resource.getName());
-                                    log.setRespath(resource.getUri());
-                                    TFunction function  =functionService.getFunctionById(resource.getFunctionId());
-                                    if(function!=null){
-                                        log.setFunctionid(function.getId());
-                                        log.setFunctionname(function.getName());
-                                    }
-                                    operatorService.saveOperLog(log);
-                                    return true;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return false;
-    }
+  @Autowired
+  private RoleService roleService;
+  @Autowired
+  private OperatorService operatorService;
+  @Autowired
+  private FunctionService functionService;
 
-    @Override
-    public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
-        return false;
+  @Override
+  public boolean hasPermission(Authentication authentication, Object targetUri, Object permission) {
+    //TODO save logger
+    if (targetUri != null) {
+      UserDetails userDetails = (UserDetails) authentication.getPrincipal();
+      if (userDetails != null) {
+        TOperator operator = operatorService.getOperatorByCode(userDetails.getUsername());
+        if (operator != null) {
+          List<TOperRole> operRoles = operatorService.getOperRoleByOperId(operator.getOperid());
+          for (TOperRole operRole : operRoles) {
+            TRole role = roleService.findRoleByRoleid(operRole.getRoleId());
+            if (role != null) {
+              TResource resource = roleService.findResourceByURI(String.valueOf(targetUri));
+              if (resource != null) {
+                TPermission permission1 = roleService.findByRoleIdAndResid(role.getRoleId(), resource.getId());
+                if (permission1 != null) {
+                  TOperLog log = new TOperLog();
+                  log.setLogdate(DateUtil.getNow());
+                  log.setOperid(operator.getOperid());
+                  log.setOpername(operator.getOpercode());
+                  log.setResname(resource.getName());
+                  log.setRespath(resource.getUri());
+                  TFunction function = functionService.getFunctionById(resource.getFunctionId());
+                  if (function != null) {
+                    log.setFunctionid(function.getId());
+                    log.setFunctionname(function.getName());
+                  }
+                  operatorService.saveOperLog(log);
+                  return true;
+                }
+              }
+            }
+          }
+        }
+      }
     }
+    return false;
+  }
+
+  @Override
+  public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
+    return false;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/security/ValidateCodeSecurityConfig.java b/src/main/java/com/supwisdom/dlpay/framework/security/ValidateCodeSecurityConfig.java
index 56782db..3941628 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/security/ValidateCodeSecurityConfig.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/security/ValidateCodeSecurityConfig.java
@@ -11,7 +11,7 @@
 
 @Component("validateCodeSecurityConfig")
 public class ValidateCodeSecurityConfig  extends SecurityConfigurerAdapter<DefaultSecurityFilterChain,HttpSecurity> {
-	
+
 	@Autowired
 	private Filter validateCodeFilter;
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java b/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
new file mode 100644
index 0000000..17dd6bc
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
@@ -0,0 +1,11 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class Constants {
+  //  HTTP HEADER define
+  public static final String HEADER_TETANTID = "X-TENANT-ID";
+
+  // define
+  public static final String JWT_CLAIM_TENANTID = "tenantId";
+  public static final String JWT_CLAIM_UID = "uid";
+  public static final String JWT_CLAIM_AUTHORITIES = "authorities";
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java b/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
new file mode 100644
index 0000000..46377e9
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
@@ -0,0 +1,15 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class Dictionary {
+  // dictionary 表字典
+  public static final String REVERSE_FLAG = "reverseflagList";
+  public static final String DTL_STATUS = "dtlStatusList";
+  public static final String IDTYPE = "idtypeList";
+  public static final String SEX = "sexList";
+  public static final String ACCOUNT_STATUS = "accountStatusList";
+
+  /////////////////////////////////////
+  public static final String SOURCE_TYPE = "sourcetypeList";
+  public static final String TRANS_CODE = "transcodeList";
+  public static final String PAY_TYPE = "paytypelist";
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
index 9ca1800..9d44ea9 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
@@ -120,14 +120,16 @@
   }
 
   public static boolean isCharAndNum(String inputStr) {
-    Pattern p = Pattern.compile("\\w+");
+    //有问题
+    /*Pattern p = Pattern.compile("\\w+");
     Matcher m = p.matcher(inputStr);
     if (m.matches()) {
       // 除字母和数字外还包含其它字符
       return false;
     } else {
       return true;
-    }
+    }*/
+    return true;
   }
 
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java b/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java
index 4a46b28..e80344a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java
@@ -28,6 +28,11 @@
   public static final String SUBJNO_RECHARGE_CASH = "112201";
 
   /**
+   * 应收账款 - 其他第三方充值款
+   */
+  public static final String SUBJNO_RECHARGE_OTHER = "112209";
+
+  /**
    * 应收账款 - 支付宝充值款
    */
   public static final String SUBJNO_RECHARGE_ALIPAY = "112210";
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
index 07e4aaf..3ccb2a7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java
@@ -13,6 +13,10 @@
   public static final int SYSPARAID_NO1 = 1; //系统默认最大余额限制的ID
   public static final int SYSPARAID_NO2 = 2; //paraid=2
 
+  public static final int SYSPARAID_NO2019 = 2019; //与卡管系统对接的应用ID
+  public static final int SYSPARAID_NO2020 = 2020; //与卡管系统对接的应用appkey
+  public static final int SYSPARAID_NO2021 = 2021; //与卡管系统对接的业务参数deskey
+
   public static final double SYSPARA_NO1_DEFAULT = 10000.0; // 系统默认最大余额限制
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
index 20cd922..cc1b344 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
@@ -12,6 +12,9 @@
   public static final int TRANSCODE_WECHAT=1001;
 
 
-  public static final int TRANSTYPE_PAY = 311;
-  public static final int TRANSTYPE_YKTPAY=1000;
+  public static final int TRANSCODE_ERCHARGE = 3500; //账户充值
+
+
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index 7bec421..d5c3eda 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -31,7 +31,27 @@
   public static final String DTL_STATUS_FAIL = "fail";
   public static final String DTL_STATUS_CANCEL = "cancel";
   public static final String DTL_STATUS_WIP = "wip";
+  public static final String DTL_STATUS_NONE = "none";
 
+
+  /**
+   * 操作员类型
+   * person - 个人
+   * shop - 商户
+   * operator - 操作员
+   */
+
+  public static final String OPERTYPE_PERSON = "person";
+  public static final String OPERTYPE_SHOP = "shop";
+  public static final String OPERTYPE_OPER = "operator";
+
+  /**
+   * 收支
+   * out - 支出
+   * in - 收入
+   */
+  public static final String TRADE_FLAG_OUT = "out";
+  public static final String TRADE_FLAG_IN = "in";
   /**
    * 交易借方
    */
@@ -48,6 +68,7 @@
   public static final String PAYTYPE_WECHAT = "wechat"; //市民卡
   public static final String PAYTYPE_CITIZEN_CARD = "citizenCard"; //市民卡
   public static final String PAYTYPE_YKT_CARD = "yktpay"; //一卡通
+  public static final String PAYTYPE_OTHER_THIRDPART = "thirdpart"; //其他第三方
 
 
   /**
@@ -61,4 +82,14 @@
 
   public static final String PAYTYPE_RECHARGE_COUPON = "coupon";  // 充值优惠
   public static final String PAYTYPE_RECHARGE_SERVICEFEE = "servicefee"; //收服务费
+
+  /**
+   * refund flag
+   * - none : 无
+   * - cancel : 冲正
+   * - refund : 手工撤销
+   */
+  public static final String REVERSE_FLAG_NONE = "none";
+  public static final String REVERSE_FLAG_CANCEL = "cancel";
+  public static final String REVERSE_FLAG_REFUND = "refund";
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
index 6fd831b..dff10a3 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
@@ -12,7 +12,7 @@
 
   /**
    * 账户不存在
-   * */
+   */
   public static final int ACCOUNT_NOT_EXISTS = 10001;
 
   /**
@@ -36,83 +36,88 @@
   public static final int TRANSACTION_IS_FINISHED = 10005;
 
   /**
+   * 交易状态错误，正在处理
+   */
+  public static final int TRANSACTION_HAS_BEEN_PROCESS = 100030;
+
+  /**
    * 交易已冲正
    */
   public static final int TRANSACTION_HAS_CANCELED = 10006;
   /**
    * 商户不存在
-   * */
+   */
   public static final int SHOP_NOT_EXISTS = 10007;
 
   /**
    * 科目不存在
-   * */
+   */
   public static final int SUBJECT_NOT_EXISTS = 10008;
 
   /**
    * 外部流水号重复
-   * */
+   */
   public static final int OUTTRADENO_ALREADY_EXISTS = 10009;
 
   /**
    * 账户TAC校验异常
-   * */
+   */
   public static final int ACCOUNT_TAC_ERROR = 10010;
 
   /**
    * 账户余额超上限
-   * */
+   */
   public static final int OVERFLOW_BALANCE_ERROR = 10011;
 
   /**
    * 未指定明确的交易结束状态
-   * */
+   */
   public static final int TRANSDTL_STATUS_ERROR = 10012;
 
   /**
    * 非初始化流水
-   * */
+   */
   public static final int TRANSDTL_STATUS_NOT_INIT = 10013;
 
   /**
    * 账户交易繁忙
-   * */
+   */
   public static final int ACCOUNT_TRADE_BUSY = 10014;
 
   /**
    * 非等待锁查询超时异常
-   * */
+   */
   public static final int LOCK_READ_TIMEOUT = 10015;
 
   /**
-   *  卡已挂失
-   * */
+   * 卡已挂失
+   */
   public static final int ACCOUNT_IS_LOSS = 10016;
 
   /**
-   *  卡已锁定
-   * */
+   * 卡已锁定
+   */
   public static final int ACCOUNT_IS_LOCKED = 10017;
 
   /**
    * 费用类别未定义
-   * */
+   */
   public static final int FEETYPE_NOT_EXISTS = 10018;
 
   /**
    * 费用类别不支持
-   * */
+   */
   public static final int FEETYPE_NOT_NOSUPPORT = 10019;
 
 
   /**
    * 请求参数错误
-   * */
+   */
   public static final int REQUEST_PARAM_ERROR = 20000;
 
   /**
    * 请求参数错误签名错误
-   * */
+   */
   public static final int REQUEST_SIGN_ERROR = 20001;
 
   /**
@@ -131,6 +136,9 @@
 
   public static final int BUSINESS_PAYTYPE_NOSUPPORT = 30003; //支付方式不支持
 
+  public static final int SQL_EXCEPTION = 30004; // SQL处理异常
+
+  public static final int REQUEST_PARAM_EEROR = 30005; // 请求参数实体位置错误
 
   //================= POS消费业务 ==================//
   public static final int POS_TIMESTAMP_ERROR = 40000; //业务处理错误
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java b/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
index 38695bc..66deb65 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java
@@ -7,91 +7,95 @@
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-import java.io.*;
-import java.util.*;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class XmlUtils {
-	public static <T> String getObjectToXml(T object) throws IOException {
-		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-		
-		try {
-			JAXBContext context = JAXBContext.newInstance(object.getClass());
-			// 将对象转变为xml Object------XML
-			// 指定对应的xml文件
-			Marshaller marshaller = context.createMarshaller();
-			marshaller.setProperty(Marshaller.JAXB_ENCODING,"gbk");//编码格式 
-			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);// 是否格式化生成的xml串
-			marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);// 是否省略xml头信息
+  public static <T> String getObjectToXml(T object) throws IOException {
+    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
 
-			// 将对象转换为对应的XML文件
-			marshaller.marshal(object, byteArrayOutputStream);
-		} catch (JAXBException e) {
+    try {
+      JAXBContext context = JAXBContext.newInstance(object.getClass());
+      // 将对象转变为xml Object------XML
+      // 指定对应的xml文件
+      Marshaller marshaller = context.createMarshaller();
+      marshaller.setProperty(Marshaller.JAXB_ENCODING, "gbk");//编码格式 
+      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);// 是否格式化生成的xml串
+      marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);// 是否省略xml头信息
 
-			e.printStackTrace();
-		}
-		// 转化为字符串返回
-		String xmlContent = new String(byteArrayOutputStream.toByteArray(),
-				"gbk");
-		return xmlContent;
-	}
+      // 将对象转换为对应的XML文件
+      marshaller.marshal(object, byteArrayOutputStream);
+    } catch (JAXBException e) {
 
-	public static <T> T getXmlToObject(String xmlContent, Class clazz) {
-		try {
-			JAXBContext context = JAXBContext.newInstance(clazz);
-			// xml转换为对象 XML------Object
-			InputStream inputStream;
-			try {
-				inputStream = new ByteArrayInputStream(
-						xmlContent.getBytes("GBK"));
-				Unmarshaller um = context.createUnmarshaller();
+      e.printStackTrace();
+    }
+    // 转化为字符串返回
+    String xmlContent = new String(byteArrayOutputStream.toByteArray(),
+        "gbk");
+    return xmlContent;
+  }
 
-				return (T) um.unmarshal(inputStream);
-			} catch (UnsupportedEncodingException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}catch (Exception e) {
-				e.printStackTrace();
-			}
-		} catch (JAXBException e) {
+  /*
+    public static <T> T getXmlToObject(String xmlContent, Class clazz) {
+      try {
+        JAXBContext context = JAXBContext.newInstance(clazz);
+        // xml转换为对象 XML------Object
+        InputStream inputStream;
+        try {
+          inputStream = new ByteArrayInputStream(
+              xmlContent.getBytes("GBK"));
+          Unmarshaller um = context.createUnmarshaller();
 
-			e.printStackTrace();
-		}
-		return null;
-	}
-	
-	public static <T> T getXmlToObject(String xmlContent,String charset, Class clazz) {
-		try {
-			JAXBContext context = JAXBContext.newInstance(clazz);
-			// xml转换为对象 XML------Object
-			InputStream inputStream;
-			try {
-				inputStream = new ByteArrayInputStream(
-						xmlContent.getBytes(charset));
-				Unmarshaller um = context.createUnmarshaller();
+          @Suppress("UNCHECKED_CAST")
+          return (T) um.unmarshal(inputStream);
+        } catch (UnsupportedEncodingException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+        }catch (Exception e) {
+          e.printStackTrace();
+        }
+      } catch (JAXBException e) {
 
-				return (T) um.unmarshal(inputStream);
-			} catch (UnsupportedEncodingException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}catch (Exception e) {
-				e.printStackTrace();
-			}
-		} catch (JAXBException e) {
+        e.printStackTrace();
+      }
+      return null;
+    }
 
-			e.printStackTrace();
-		}
-		return null;
-	}
+    public static <T> T getXmlToObject(String xmlContent,String charset, Class clazz) {
+      try {
+        JAXBContext context = JAXBContext.newInstance(clazz);
+        // xml转换为对象 XML------Object
+        InputStream inputStream;
+        try {
+          inputStream = new ByteArrayInputStream(
+              xmlContent.getBytes(charset));
+          Unmarshaller um = context.createUnmarshaller();
 
-	public static Map<String, String> parseXml(String xml) throws Exception {
-		Map<String, String> map = new HashMap<String, String>();
-		Document document = DocumentHelper.parseText(xml);
-		Element root = document.getRootElement();
-		List<Element> elementList = root.elements();
-		for (Element e : elementList)
-			map.put(e.getName(), e.getText());
-		return map;
-	}
+          return (T) um.unmarshal(inputStream);
+        } catch (UnsupportedEncodingException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+        }catch (Exception e) {
+          e.printStackTrace();
+        }
+      } catch (JAXBException e) {
+
+        e.printStackTrace();
+      }
+      return null;
+    }
+  */
+  public static Map<String, String> parseXml(String xml) throws Exception {
+    Map<String, String> map = new HashMap<String, String>();
+    Document document = DocumentHelper.parseText(xml);
+    Element root = document.getRootElement();
+    List<Element> elementList = root.elements();
+    for (Element e : elementList)
+      map.put(e.getName(), e.getText());
+    return map;
+  }
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java
index 2663282..2ed7649 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java
@@ -73,7 +73,7 @@
     @PostMapping("/delete")
     @PreAuthorize("hasPermission('/customer/delete','')")
     @ResponseBody
-    public JsonResult delete(@RequestParam Integer  custid) {
+    public JsonResult delete(@RequestParam String  custid) {
         return customerService.deleteCustomer(custid);
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlFormController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlFormController.java
index 7757bd8..09de88a 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlFormController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlFormController.java
@@ -12,6 +12,8 @@
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 
 @Controller
 @RequestMapping("/transdtlform")
@@ -33,10 +35,13 @@
     @PreAuthorize("hasPermission('/transdtlform/index','')")
     @ResponseBody
     public PageResult<TTransDtlFormResult> getDataList(@RequestParam(value = "startdate", required = false) String startdate,
-                                                       @RequestParam(value = "enddate", required = false) String enddate,
-                                                       @RequestParam(value = "devphyid") Integer devphyid) {
+                                                 @RequestParam(value = "enddate", required = false) String enddate,
+                                                 @RequestParam(value = "devphyid") Integer devphyid) {
         try {
-            return transDtlFormService.getTransDtlFormResult(devphyid,startdate,enddate);
+            List<TTransDtlFormResult> t=transDtlFormService.getTransDtlFormResult(devphyid,startdate,enddate);
+            PageResult p=new PageResult(0,"");
+            p.setData(t);
+            return p;
         } catch (Exception e) {
             e.printStackTrace();
             return new PageResult<>(99, "系统查询错误");
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/CustomerDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/CustomerDao.java
index d5f8378..d0091cb 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/CustomerDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/CustomerDao.java
@@ -10,13 +10,13 @@
 import java.util.List;
 
 @Repository
-public interface CustomerDao extends JpaRepository<TCustomer, Integer> {
+public interface CustomerDao extends JpaRepository<TCustomer, String> {
 
 
     Page<TCustomer> findAllByCustnameContaining(String custname, Pageable pageable);
 
 
-    Integer countByCardno(String cardno);
+    Integer countByCardno(Integer cardno);
 
     Integer countByBankcardno(String bankcardno);
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
index e848ae9..8527d61 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
@@ -13,7 +13,7 @@
 @Repository
 public interface DeviceDao extends JpaSpecificationExecutor<TDevice>,JpaRepository<TDevice, Integer> {
 
-    Page<TDevice> findAllByIdContaining(Integer id, Pageable pageable);
+    Page<TDevice> findAllById(Integer id, Pageable pageable);
 
     Page<TDevice> findAllByDevgroupid(Integer devgroupid, Pageable pageable);
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
index 12ef45b..f518615 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
@@ -2,14 +2,35 @@
 
 
 import com.supwisdom.dlpay.restaurant.domain.TTransDtl;
+import com.supwisdom.dlpay.restaurant.domain.TTransDtlFormResult;
+import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface TransDtlDao extends JpaRepository<TTransDtl, String>, JpaSpecificationExecutor<TTransDtl> {
 
 
+    @Query(value = "SELECT d.devicename,t.transtype,count(d.id) as cnt,sum(t.amount) as totalamount from tb_transdtl t " +
+            "left JOIN tb_device d " +
+            "on t.termid =d.id " +
+            "where d.devgroupid in (" +
+            "WITH RECURSIVE r AS (" +
+            "SELECT * FROM tb_devicegroup WHERE devgroupid =?1 " +
+            "union ALL " +
+            "SELECT t.* FROM tb_devicegroup t, r WHERE t.pid = r.devgroupid)" +
+            "SELECT devgroupid FROM r )" +
+            "and t.status=1 " +
+            "and d.state=1" +
+            "and t.transdate > ?2" +
+            "and t.transdate <?3"+
+            "GROUP BY d.devicename,t.transtype " +
+            "ORDER BY d.devicename",nativeQuery = true)
+    List<TTransDtlFormResult> getFormResult(Integer devgroupid, String startdate, String enddate);
+
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlFormDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlFormDao.java
deleted file mode 100644
index 87b6b4a..0000000
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlFormDao.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.supwisdom.dlpay.restaurant.dao;
-
-
-import com.supwisdom.dlpay.restaurant.domain.TTransDtlFormResult;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Repository
-public interface TransDtlFormDao extends JpaRepository<TTransDtlFormResult, Integer> {
-
-
-    @Query("SELECT d.devicename,t.transtype,count(d.id) as cnt,sum(t.amount) as totalamount from tb_transdtl t " +
-            "left JOIN tb_device d " +
-            "on t.termid =d.id " +
-            "where d.devgroupid in (" +
-            "WITH RECURSIVE r AS (" +
-            "SELECT * FROM tb_devicegroup WHERE devgroupid =?1 " +
-            "union ALL " +
-            "SELECT t.* FROM tb_devicegroup t, r WHERE t.pid = r.devgroupid)" +
-            "SELECT devgroupid FROM r )" +
-            "and t.status=1 " +
-            "and d.state=1" +
-            "and t.transdate > ?2" +
-            "and t.transdate <?3"+
-            "GROUP BY d.devicename,t.transtype " +
-            "ORDER BY d.devicename")
-    Page<TTransDtlFormResult> getFormResult(Integer devgroupid, String startdate, String enddate);
-
-}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCustomer.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCustomer.java
index 43cf487..14da984 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCustomer.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCustomer.java
@@ -1,31 +1,34 @@
 package com.supwisdom.dlpay.restaurant.domain;
 
 
+import org.hibernate.annotations.GenericGenerator;
+
 import javax.persistence.*;
 
 @Entity
 @Table(name = "TB_CUSTOMER")
-@SequenceGenerator(name="SEQ_CUSTOMER",sequenceName="SEQ_CUSTOMER",allocationSize=1,initialValue = 100000)
 public class TCustomer {
-    private Integer custid;
+    private String custid;
     private Integer custtype;
     private String custname;
     private String operid;
     private Integer cardno;
     private String idno;
+    private String idtype;
     private String bankcardno;
     private String phone;
     private String batchno;
-
+    private String lastsaved;
+    private String status;
 
     @Id
-    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_CUSTOMER")
-    @Column(name = "custid", unique = true, nullable = false, length = 9)
-    public Integer getCustid() {
+    @GenericGenerator(name = "idGenerator", strategy = "uuid")
+    @GeneratedValue(generator = "idGenerator")
+    @Column(name = "custid", nullable = false, length = 32)
+    public String getCustid() {
         return custid;
     }
-
-    public void setCustid(Integer custid) {
+    public void setCustid(String custid) {
         this.custid = custid;
     }
 
@@ -103,7 +106,26 @@
         return phone;
     }
 
+
     public void setPhone(String phone) {
         this.phone = phone;
     }
+
+    @Column(name = "IDTYPE", length = 10)
+    public String getIdtype() {
+        return idtype;
+    }
+
+    public void setIdtype(String idtype) {
+        this.idtype = idtype;
+    }
+
+    @Column(name = "LASTSAVED", length = 14)
+    public String getLastsaved() {
+        return lastsaved;
+    }
+
+    public void setLastsaved(String lastsaved) {
+        this.lastsaved = lastsaved;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TMealtype.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TMealtype.java
new file mode 100644
index 0000000..2a5ad35
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TMealtype.java
@@ -0,0 +1,53 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "TB_MEALTYPE")
+public class TMealtype {
+
+    @Id
+    @Column(name="MEALTYPE", nullable = false, precision = 9)
+    private String mealtype;
+    @Column(name="MEALNAME", nullable = false, precision = 20)
+    private String mealname;
+    @Column(name="ENDTIME", nullable = false, precision = 6)
+    private String endtime;
+    @Column(name="LASTSAVED", nullable = false, precision = 14)
+    private String lastsaved;
+
+    public String getMealtype() {
+        return mealtype;
+    }
+
+    public void setMealtype(String mealtype) {
+        this.mealtype = mealtype;
+    }
+
+    public String getMealname() {
+        return mealname;
+    }
+
+    public void setMealname(String mealname) {
+        this.mealname = mealname;
+    }
+
+    public String getEndtime() {
+        return endtime;
+    }
+
+    public void setEndtime(String endtime) {
+        this.endtime = endtime;
+    }
+
+    public String getLastsaved() {
+        return lastsaved;
+    }
+
+    public void setLastsaved(String lastsaved) {
+        this.lastsaved = lastsaved;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java
index 661b328..d0821d5 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java
@@ -23,7 +23,7 @@
 
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    JsonResult deleteCustomer(Integer custid);
+    JsonResult deleteCustomer(String custid);
 
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlFormService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlFormService.java
index f930bfe..7decd6c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlFormService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlFormService.java
@@ -12,6 +12,6 @@
 
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
-    PageResult<TTransDtlFormResult> getTransDtlFormResult(Integer devgroupid, String startdate, String enddate);
+    List<TTransDtlFormResult> getTransDtlFormResult(Integer devgroupid, String startdate, String enddate);
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
index c67bdc2..5e5b565 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
@@ -37,13 +37,12 @@
 
     @Autowired
     private SystemUtilService systemUtilService;
-
+/*
     @Autowired
     private CardDao cardDao;
 
     @Autowired
-    private CardverDao cardverDao;
-
+    private CardverDao cardverDao;*/
 
     @Override
     public PageResult<TCustomer> getCustomerByCustname(CustomerSearchBean param) {
@@ -56,9 +55,9 @@
     }
     @Override
     public JsonResult saveCustomer(TCustomer customer) {
-
+        customer.setLastsaved(DateUtil.getNow("yyyyMMddHHmmss"));
         TCustomer cus=customerDao.save(customer);
-        if(null !=cus){
+       /* if(null !=cus){
             String cardverno= systemUtilService.getCardverno();
             String date=DateUtil.getNow("yyyyMMdd");
             TCard card=new TCard();
@@ -71,11 +70,12 @@
 
 
             saveCardver(cardverno, date, cus);
-        }
+        }*/
 
         return JsonResult.ok("成功");
     }
 
+/*
     private void saveCardver(String cardverno, String date, TCustomer cus) {
         TCardver tCardver=new TCardver();
         tCardver.setAccdate(date);
@@ -88,18 +88,19 @@
         tCardver.setCardverno(cardverno);
         cardverDao.save(tCardver);
     }
+*/
 
     @Override
-    public JsonResult deleteCustomer(Integer custid) {
+    public JsonResult deleteCustomer(String custid) {
 
         TCustomer customer=customerDao.findById(custid).get();
         String cardverno= systemUtilService.getCardverno();
-        TCard card=cardDao.findById(customer.getCardno()).get();
+       /* TCard card=cardDao.findById(customer.getCardno()).get();
         card.setStatus(RestaurantConstant.STATUS_CARD_CANCEL);
         card.setCardverno(cardverno);
         cardDao.save(card);
         String date=DateUtil.getNow("yyyyMMdd");
-        saveCardver(cardverno,date,customer);
+        saveCardver(cardverno,date,customer);*/
 
 
         customerDao.deleteById(custid);
@@ -133,7 +134,7 @@
 
                 if (StringUtil.isEmpty((String) data[i][0]) || StringUtil.isEmpty((String) data[i][1]) || StringUtil.isEmpty((String) data[i][2])) {
                     msg = msg + "第" + i + "行，关键字段缺失。<br/>";
-                } else if (customerDao.countByCardno((String) data[i][1]) >0) {
+                } else if (customerDao.countByCardno(Integer.parseInt((String) data[i][1])) >0) {
                     msg = msg + "第" + i + "行，该市名卡已存在。<br/>";
                 }
                 else{
@@ -153,8 +154,10 @@
         // resp.setMsg("成功导入了"+sList.size()+"条信息");
         resp.setMsg(String.format(Locale.CHINESE, msg));
         return resp;*/
+        String batchno=DateUtil.getNow("yyyyMMddHHmmss");
         if(StringUtil.isEmpty(msg)){
             for(TCustomer d:sList){
+                d.setBatchno(batchno);
                 saveCustomer(d);
             }
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
index 6eedce3..cafc853 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
@@ -160,7 +160,7 @@
     return null;
   }
 
-  private boolean checkRuleTimeError(String starttime, String endtime, String cardno, Integer custid) {
+  private boolean checkRuleTimeError(String starttime, String endtime, String cardno, String custid) {
     Query query = entityManager.createNativeQuery("select count(a.id) from tb_discount_detail a, tb_discount_rule b where a.ruleid=b.ruleid and (b.status='uncheck' or b.status='normal') " +
         "and a.cardno=:cardno and ((b.starttime<:starttime and b.endtime>:starttime) or (b.starttime<:endtime and b.endtime>:endtime)) ");
     query.setParameter("cardno", cardno);
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java
index a38c246..37be9e7 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java
@@ -71,7 +71,7 @@
         Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
                 , Sort.by("id"));
         if (null != param.getId()) {
-            return new PageResult<>(deviceDao.findAllByIdContaining(param.getId(), pageable));
+            return new PageResult<>(deviceDao.findAllById(param.getId(), pageable));
         }
         return new PageResult<>(deviceDao.findAll(pageable));
     }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlFormServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlFormServiceImpl.java
index cc64d39..0377d16 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlFormServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlFormServiceImpl.java
@@ -1,31 +1,24 @@
 package com.supwisdom.dlpay.restaurant.service.impl;
 
-import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.dlpay.restaurant.bean.AreaSearchBean;
-import com.supwisdom.dlpay.restaurant.dao.AreaDao;
-import com.supwisdom.dlpay.restaurant.dao.TransDtlFormDao;
-import com.supwisdom.dlpay.restaurant.domain.TArea;
+import com.supwisdom.dlpay.restaurant.dao.TransDtlDao;
 import com.supwisdom.dlpay.restaurant.domain.TTransDtlFormResult;
-import com.supwisdom.dlpay.restaurant.service.AreaService;
 import com.supwisdom.dlpay.restaurant.service.TransDtlFormService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
 
+
 @Service
 public class TransDtlFormServiceImpl implements TransDtlFormService {
     @Autowired
-    private TransDtlFormDao transDtlFormDao;
+    private TransDtlDao transDtlFormDao;
 
     @Override
-    public PageResult<TTransDtlFormResult> getTransDtlFormResult(Integer devgroupid,String startdate,String enddate) {
+    public List<TTransDtlFormResult> getTransDtlFormResult(Integer devgroupid, String startdate, String enddate) {
 
         if(StringUtil.isEmpty(startdate)){
             startdate= DateUtil.getNewDay(-7, "yyyyMMdd");
@@ -34,7 +27,7 @@
             enddate=DateUtil.getNow("yyyyMMdd");
         }
 
-        return new PageResult<>(transDtlFormDao.getFormResult(devgroupid,startdate,enddate));
+        return transDtlFormDao.getFormResult(devgroupid,startdate,enddate);
 
     }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java b/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java
index ca616de..af00076 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/DictPoolAction.java
@@ -1,7 +1,8 @@
 package com.supwisdom.dlpay.system.controller;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.system.common.DictPool;
+import com.supwisdom.dlpay.system.service.DictionaryDataService;
+import com.supwisdom.dlpay.system.service.DictionaryProxy;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -13,18 +14,16 @@
 @RestController
 public class DictPoolAction {
   @Autowired
-  private DictPool dictPool;
+  private DictionaryProxy dictionaryProxy;
 
   @GetMapping("/dictpool")
   public Map getDictDataByDicttype(@FormParam("dicttype") String dictType, HttpServletRequest request) {
     dictType = request.getParameter("dicttype");
-    Map res = DictPool.getDictMap(dictType);
-    return res;
+    return dictionaryProxy.getDictionaryAsMap(dictType);
   }
 
   @GetMapping("/dictrefresh")
   public JsonResult refreshDict() {
-    dictPool.init();
     return JsonResult.ok();
   }
 
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java b/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
index 752db9d..48cc4df 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
@@ -1,7 +1,13 @@
 package com.supwisdom.dlpay.system.service;
 
-import java.util.HashMap;
+import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.domain.TTranscode;
+
+import java.util.List;
 
 public interface DictionaryDataService {
+  List<TDictionary> getDictionaryByDictType(String dicttype);
+
+  List<TTranscode> getTransCode();
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/DictionaryProxy.java b/src/main/java/com/supwisdom/dlpay/system/service/DictionaryProxy.java
new file mode 100644
index 0000000..723e954
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/service/DictionaryProxy.java
@@ -0,0 +1,50 @@
+package com.supwisdom.dlpay.system.service;
+
+import com.supwisdom.dlpay.framework.domain.DictionaryTable;
+import com.supwisdom.dlpay.framework.util.Dictionary;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class DictionaryProxy {
+  private final DictionaryDataService dictionaryDataService;
+
+  private final ParamService paramService;
+
+  public DictionaryProxy(DictionaryDataService dictionaryDataService, ParamService paramService) {
+    this.dictionaryDataService = dictionaryDataService;
+    this.paramService = paramService;
+  }
+
+  @SuppressWarnings("UNCHECKED_CAST")
+  public <T> Map<String, T> getDictionaryObject(String dictType) {
+    List<T> list = getDictionaryAsList(dictType);
+    Map<String, T> result = new HashMap<>();
+    for (Object item : list) {
+      if (item instanceof DictionaryTable) {
+        result.put(((DictionaryTable) item).getDictKey(), (T) item);
+      }
+    }
+    return result;
+  }
+
+  public Map<String, Object> getDictionaryAsMap(String dictType) {
+    List list = getDictionaryAsList(dictType);
+    Map<String, Object> result = new HashMap<>();
+    for (Object item : list) {
+      if (item instanceof DictionaryTable) {
+        DictionaryTable it = (DictionaryTable) item;
+        result.put(it.getDictKey(), it.getDictValue());
+      }
+    }
+    return result;
+  }
+
+  @SuppressWarnings("UNCHECKED_CAST")
+  public <T> List<T> getDictionaryAsList(String dictType) {
+      return (List<T>) dictionaryDataService.getDictionaryByDictType(dictType);
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
index dae1a04..523bded 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
@@ -1,10 +1,45 @@
 package com.supwisdom.dlpay.system.service.impl;
 
+import com.supwisdom.dlpay.framework.dao.DictionaryDao;
+import com.supwisdom.dlpay.framework.dao.TranscodeDao;
+import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.domain.TTranscode;
 import com.supwisdom.dlpay.system.service.DictionaryDataService;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Service
 public class DictionaryDataServiceImpl implements DictionaryDataService {
+  private final DictionaryDao dictionaryDao;
+  private final TranscodeDao transcodeDao;
 
+  public DictionaryDataServiceImpl(DictionaryDao dictionaryDao,
+                                   TranscodeDao transcodeDao) {
+    this.dictionaryDao = dictionaryDao;
+    this.transcodeDao = transcodeDao;
+  }
+
+  @Override
+  @Cacheable(cacheNames = "dicationary_cache", key = "#p0")
+  public List<TDictionary> getDictionaryByDictType(String dicttype) {
+    List<TDictionary> list = dictionaryDao.findAllByDicttype(dicttype);
+    if (!list.isEmpty()) {
+      return list;
+    }
+    return new ArrayList<>();
+  }
+
+
+  @Override
+  @Cacheable(cacheNames = "trans_code_cache")
+  public List<TTranscode> getTransCode() {
+    List<TTranscode> list = transcodeDao.findAll();
+    if (!list.isEmpty()) {
+      return list;
+    }
+    return new ArrayList<>();
+  }
 }
diff --git a/src/main/resources/static/custom/module/index.js b/src/main/resources/static/custom/module/index.js
index d82ed09..df14f67 100755
--- a/src/main/resources/static/custom/module/index.js
+++ b/src/main/resources/static/custom/module/index.js
@@ -5,7 +5,7 @@
     var baseUrl = window.location.pathname;
 
     var index = {
-        pageTabs: false,  // 是否开启多标签
+        pageTabs: true,  // 是否开启多标签
         // 路由注册
         initRouter: function () {
             // 自动扫描side菜单注册
diff --git a/src/main/resources/static/libs/custom.js b/src/main/resources/static/libs/custom.js
index 208bf94..bb28ba5 100644
--- a/src/main/resources/static/libs/custom.js
+++ b/src/main/resources/static/libs/custom.js
@@ -21,7 +21,7 @@
                         data: "dicttype=" + dictType,
                         contentType: "application/x-www-form-urlencoded",
                         success: function (data) {
-                            if (data == null || data == "") {
+                            if (data == null || data === "") {
                                 that.storage.removeItem(dictType);
                             } else {
                                 that.storage.setItem(dictType, JSON.stringify(data));
@@ -60,15 +60,20 @@
             },
             initAll: function (url) {
                 this.url = url;
-                this.addNewDict("allReverseflagList");
+                this.addNewDict("transtypeList")
+                    .addNewDict("reverseFlagList")
+                    .addNewDict("transtatusList")
+                    .addNewDict("idtypeList")
+                    .addNewDict("sexList")
+                    .addNewDict("accountStatusList")
             },
             getDict: function (dictType) {
                 var dict, that = this;
-                if (that.pool[dictType] != undefined) {
+                if (that.pool[dictType] !== undefined) {
                     return that.pool[dictType];
                 } else {
                     dict = that.storage.getItem(dictType);
-                    if (dict == undefined) {
+                    if (dict === undefined) {
                         return null;
                     } else {
                         that.pool[dictType] = JSON.parse(dict);
@@ -83,7 +88,7 @@
                     return code;
                 } else {
                     var c = "" + code;
-                    return dict[c] == undefined ? code : dict[c];
+                    return dict[c] === undefined ? code : dict[c];
                 }
             }
         }
diff --git a/src/main/resources/templates/restaurant/customer/index.html b/src/main/resources/templates/restaurant/customer/index.html
index 5d0a890..09fc1f2 100644
--- a/src/main/resources/templates/restaurant/customer/index.html
+++ b/src/main/resources/templates/restaurant/customer/index.html
@@ -9,14 +9,14 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="search-value" class="layui-input search-input" type="text" placeholder="输入姓名"/>&emsp;
-            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <input id="customer-search-value" class="layui-input search-input" type="text" placeholder="输入姓名"/>&emsp;
+            <button id="customer-btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加人员</button>
-            <button id="btn-import" class="layui-btn icon-btn" ><i class="layui-icon"></i>批量导入</button>
+            <button id="customer-btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加人员</button>
+            <button id="customer-btn-import" class="layui-btn icon-btn" ><i class="layui-icon"></i>批量导入</button>
 
         </div>
-        <table class="layui-table" id="table" lay-filter="table"></table>
+        <table class="layui-table" id="customer-table" lay-filter="table"></table>
     </div>
 </div>
 
@@ -32,7 +32,7 @@
 
         // 渲染表格
         table.render({
-            elem: '#table',
+            elem: '#customer-table',
             url: '[[@{/customer/list}]]',
             page: true,
             cols: [
@@ -52,14 +52,14 @@
             ]
         });
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
-            let key = $('#search-value').val();
-            table.reload('table', {where: {searchkey: key}, page: {curr: 1}});
+        $('#customer-btn-search').click(function () {
+            let key = $('#customer-search-value').val();
+            table.reload('customer-table', {where: {searchkey: key}, page: {curr: 1}});
         });
-        $('#btn-add').click(function () {
+        $('#customer-btn-add').click(function () {
             showModel();
         });
-        $('#btn-import').click(function () {
+        $('#customer-btn-import').click(function () {
             showDownload();
         });
         let showDownload = function () {
@@ -68,7 +68,7 @@
                 title: title,
                 path: '[[@{/customer/loadimport}]]',
                 finish: function () {
-                    table.reload('table', {});
+                    table.reload('customer-table', {});
                 }
             });
         };
@@ -79,7 +79,7 @@
                 title: title,
                 path: '[[@{/customer/loadadd}]]',
                 finish: function () {
-                    table.reload('table', {});
+                    table.reload('customer-table', {});
                 }
             });
         };
@@ -118,7 +118,7 @@
                     } else {
                         layer.msg(data.msg, {icon: 2});
                     }
-                    table.reload('table', {});
+                    table.reload('customer-table', {});
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
diff --git a/src/main/resources/templates/restaurant/device/index.html b/src/main/resources/templates/restaurant/device/index.html
index 1cc4d60..69479ec 100644
--- a/src/main/resources/templates/restaurant/device/index.html
+++ b/src/main/resources/templates/restaurant/device/index.html
@@ -9,14 +9,14 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="search-value" class="layui-input search-input" type="text" placeholder="输入终端编号"/>&emsp;
-            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <input id="device-search-value" class="layui-input search-input" type="text" placeholder="输入终端编号"/>&emsp;
+            <button id="device-btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加设备</button>
-            <button id="btn-import" class="layui-btn icon-btn" ><i class="layui-icon"></i>批量导入</button>
+            <button id="device-btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加设备</button>
+            <button id="device-btn-import" class="layui-btn icon-btn" ><i class="layui-icon"></i>批量导入</button>
 
         </div>
-        <table class="layui-table" id="table" lay-filter="table"></table>
+        <table class="layui-table" id="device-table" lay-filter="table"></table>
     </div>
 </div>
 
@@ -35,7 +35,7 @@
 
         // 渲染表格
         table.render({
-            elem: '#table',
+            elem: '#device-table',
             url: '[[@{/device/list}]]',
             page: true,
             cols: [
@@ -54,14 +54,14 @@
             ]
         });
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
-            let key = $('#search-value').val();
-            table.reload('table', {where: {searchkey: key}, page: {curr: 1}});
+        $('#device-btn-search').click(function () {
+            let key = $('#device-search-value').val();
+            table.reload('device-table', {where: {searchkey: key}, page: {curr: 1}});
         });
-        $('#btn-add').click(function () {
+        $('#device-btn-add').click(function () {
             showModel();
         });
-        $('#btn-import').click(function () {
+        $('#device-btn-import').click(function () {
             showDownload();
         });
         let showDownload = function () {
@@ -70,7 +70,7 @@
                 title: title,
                 path: '[[@{/device/loadimport}]]',
                 finish: function () {
-                    table.reload('table', {});
+                    table.reload('device-table', {});
                 }
             });
         };
@@ -81,7 +81,7 @@
                 title: title,
                 path: '[[@{/device/loadadd}]]',
                 finish: function () {
-                    table.reload('table', {});
+                    table.reload('device-table', {});
                 }
             });
         };
@@ -119,7 +119,7 @@
                     } else {
                         layer.msg(data.msg, {icon: 2});
                     }
-                    table.reload('table', {});
+                    table.reload('device-table', {});
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
diff --git a/src/main/resources/templates/restaurant/devicegroup/index.html b/src/main/resources/templates/restaurant/devicegroup/index.html
index f215d11..5b9efad 100644
--- a/src/main/resources/templates/restaurant/devicegroup/index.html
+++ b/src/main/resources/templates/restaurant/devicegroup/index.html
@@ -5,10 +5,10 @@
     </div>
     <div class="layui-card-body">
         <div class="layui-form toolbar">
-            <button id="btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加设备组</button>
+            <button id="devicegroup-btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加设备组</button>
         </div>
-        <div id="menuContent" class="menuContent " style="position: absolute;">
-            <ul id="ztree-menu" class="ztree" style="margin-top:0;"></ul>
+        <div id="devicegroup-menuContent" class="menuContent " style="position: absolute;">
+            <ul id="devicegroup-ztree-menu" class="ztree" style="margin-top:0;"></ul>
         </div>
     </div>
 </div>
@@ -25,16 +25,16 @@
 
     <div class="layui-card-body ">
         <div class="layui-form toolbar">
-            <input id="search-value" class="layui-input search-input" type="hidden"/>&emsp;
+            <input id="devicegroup-search-value" class="layui-input search-input" type="hidden"/>&emsp;
             <!--    <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
                 </button>-->
 
         </div>
-        <table class="layui-table" id="table" lay-filter="table"></table>
+        <table class="layui-table" id="devicegroup-table" lay-filter="table"></table>
     </div>
 </div>
 
-<script type="text/html" id="dev-tpl-state">
+<script type="text/html" id="devicegroup-dev-tpl-state">
     <input type="checkbox" lay-filter="dev-tpl-state" value="{{d.id}}" lay-skin="switch" lay-text="正常|注销" disabled
            {{d.state=='1'?'checked':''}} />
 </script>
@@ -49,7 +49,7 @@
 
         // 渲染表格
         table.render({
-            elem: '#table',
+            elem: '#devicegroup-table',
             url: '[[@{/devicegroup/listDevice}]]',
             page: true,
             cols: [
@@ -58,17 +58,17 @@
                     {field: 'devicename', title: '设备名称',width: 160, sort: true},
                     {field: 'devphyid', sort: true, width: 120, title: '设备物理id'},
                     {field: 'shopid', sort: true, width: 100, title: '商户id'},
-                    {field: 'factoryid', sort: true, width: 150, title: '设备厂商'},
+                    {field: 'factoryid', sort: true, width: 100, title: '设备厂商'},
                     {field: 'state', title: '状态', sort: true, width: 100, templet: '#dev-tpl-state'},
                 ]
             ]
         });
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
+        $('#devicegroup-btn-search').click(function () {
             let key = $('#search-value').val();
-            table.reload('table', {where: {searchkey: key}, page: {curr: 1}});
+            table.reload('devicegroup-table', {where: {searchkey: key}, page: {curr: 1}});
         });
-        $('#btn-add').click(function () {
+        $('#devicegroup-btn-add').click(function () {
             showModel();
         });
 
@@ -77,7 +77,7 @@
             admin.putTempData('t_devgroup', data);
             admin.popupCenter({
                 title: title,
-                path: '/devicegroup/loadadd',
+                path: '[[@{/devicegroup/loadadd}]]',
                 finish: function () {
                     loadTree();
                 }
@@ -116,7 +116,7 @@
                     } else {
                         layer.msg(data.msg, {icon: 2});
                     }
-                    table.reload('table', {});
+                    table.reload('devicegroup-table', {});
                 }, function (ret) {
                     console.log(ret);
                     layer.closeAll('loading');
@@ -127,7 +127,7 @@
 
         function OnGrpClick(e, treeId, treeNode) {
             console.log(treeNode.id);
-            table.reload('table', {where: {searchkey: treeNode.id}, page: {curr: 1}});
+            table.reload('devicegroup-table', {where: {searchkey: treeNode.id}, page: {curr: 1}});
 
         }
         function loadZTree(eNodes) {
@@ -162,7 +162,7 @@
                     beforeRemove: beforeRemove
                 }
             };
-            $.fn.zTree.init($("#ztree-menu"), menuSetting, eNodes);
+            $.fn.zTree.init($("#devicegroup-ztree-menu"), menuSetting, eNodes);
         }
 
         $(document).ready(function () {
diff --git a/src/main/resources/templates/restaurant/devicemanage/index.html b/src/main/resources/templates/restaurant/devicemanage/index.html
index 7ca7cc3..92c05ad 100644
--- a/src/main/resources/templates/restaurant/devicemanage/index.html
+++ b/src/main/resources/templates/restaurant/devicemanage/index.html
@@ -9,24 +9,24 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             设备名称：
-            <input id="devicename" class="layui-input search-input" type="text"/>&emsp;
+            <input id="devicemanage-devicename" class="layui-input search-input" type="text"/>&emsp;
             终端ID：
-            <input id="termid" class="layui-input search-input" type="text" />&emsp;
+            <input id="devicemanage-termid" class="layui-input search-input" type="text" />&emsp;
             设备物理ID：
-            <input id="devphyid" class="layui-input search-input" type="text" />&emsp;
+            <input id="devicemanage-devphyid" class="layui-input search-input" type="text" />&emsp;
               设备厂商：
-            <select name="factoryid" id="factoryid" lay-verify="required">
+            <select name="factoryid" id="devicemanage-factoryid" lay-verify="required">
                 <option  value="XKP">新开普</option>
             </select>
-            <button id="btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            <button id="devicemanage-btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
 
         </div>
-        <table class="layui-table" id="table" lay-filter="table"></table>
+        <table class="layui-table" id="devicemanage-table" lay-filter="table"></table>
     </div>
 </div>
 
-<script type="text/html" id="dev-tpl-state">
+<script type="text/html" id="devicemanage-dev-tpl-state">
     <input type="checkbox" lay-filter="dev-tpl-state" value="{{d.id}}" lay-skin="switch" lay-text="正常|注销"
            {{d.state=='1'?'checked':''}} />
 </script>
@@ -41,7 +41,7 @@
 
         // 渲染表格
         table.render({
-            elem: '#table',
+            elem: '#devicemanage-table',
             url: '[[@{/devicemanage/list}]]',
             page: true,
             cols: [
@@ -61,12 +61,12 @@
             ]
         });
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
-            let devphyid = $('#devphyid').val();
-            let id = $('#termid').val();
-            let factoryid = $('#factoryid').val();
-            let devicename = $('#devicename').val();
-            table.reload('table', {where: {
+        $('#devicemanage-btn-search').click(function () {
+            let devphyid = $('#devicemanage-devphyid').val();
+            let id = $('#devicemanage-termid').val();
+            let factoryid = $('#devicemanage-factoryid').val();
+            let devicename = $('#devicemanage-devicename').val();
+            table.reload('devicemanage-table', {where: {
                 devphyid: devphyid,
                 id:id,
                 factoryid:factoryid,
@@ -81,7 +81,7 @@
                 title: title,
                 path: '[[@{/devicemanage/loadupdate}]]',
                 finish: function () {
-                    table.reload('table', {});
+                    table.reload('devicemanage-table', {});
                 }
             });
         };
diff --git a/src/main/resources/templates/restaurant/transdtl/index.html b/src/main/resources/templates/restaurant/transdtl/index.html
index 6c720d1..d5c1b20 100644
--- a/src/main/resources/templates/restaurant/transdtl/index.html
+++ b/src/main/resources/templates/restaurant/transdtl/index.html
@@ -8,17 +8,17 @@
     </div>
     <div class="layui-card-body">
         <div class="layui-form toolbar">
-            <form id="form"  >
+            <form id="transdtl-form"  >
                 <div class="layui-form-item">
                     <div class="layui-inline">
                         <label class="layui-form-label">交易日期：</label>
                         <div class="layui-input-inline">
                             <input type="text" name="startdate" class="layui-input" th:value="${startDate}"
-                                   id="startdate" placeholder="yyyy-MM-dd">
+                                   id="transdtl-startdate" placeholder="yyyy-MM-dd">
                         </div>
                         <div class="layui-input-inline">
                             <input type="text" name="enddate" class="layui-input" th:value="${endDate}"
-                                   id="enddate" placeholder="yyyy-MM-dd">
+                                   id="transdtl-enddate" placeholder="yyyy-MM-dd">
                         </div>
                     </div>
                 </div>
@@ -26,19 +26,19 @@
                     <div class="layui-inline">
                         <label class="layui-form-label"> 姓名：</label>
                         <div class="layui-input-inline">
-                            <input id="custname" name="custname" class="layui-input" type="text"/>
+                            <input id="transdtl-custname" name="custname" class="layui-input" type="text"/>
                         </div>
                     </div>
                     <div class="layui-inline">
                         <label class="layui-form-label"> 交易号：</label>
                         <div class="layui-input-inline">
-                            <input id="refno" name="refno" class="layui-input " type="text"/>
+                            <input id="transdtl-refno" name="refno" class="layui-input " type="text"/>
                         </div>
                     </div>
                     <div class="layui-inline">
                         <label class="layui-form-label">终端号：</label>
                         <div class="layui-input-inline">
-                            <input id="termid" name="termid" class="layui-input " type="text"/>
+                            <input id="transdtl-termid" name="termid" class="layui-input " type="text"/>
                         </div>
                     </div>
                 </div>
@@ -47,7 +47,7 @@
                     <div class="layui-inline">
                         <label class="layui-form-label"> 商户：</label>
                         <div class="layui-input-inline">
-                            <select name="shopid" id="shopid">
+                            <select name="shopid" id="transdtl-shopid">
                                 <option th:each="shop : ${shoplistForSelect}" th:value="${shop.shopid}">[[${shop.shopname}]]</option>
                             </select>
                         </div>
@@ -55,7 +55,7 @@
                     <div class="layui-inline">
                         <label class="layui-form-label">流水状态：</label>
                         <div class="layui-input-inline">
-                            <select name="status" id="status">
+                            <select name="status" id="transdtl-status">
                                 <option value="" selected>全部</option>
                                 <option value="1">已入账</option>
                                 <option value="0">未入账</option>
@@ -63,26 +63,26 @@
                         </div>
                     </div>
                     <div class="layui-inline" style="margin-left:5%">
-                        <button id="btn-search" class="layui-btn icon-btn" data-type="search">
+                        <button id="transdtl-btn-search" class="layui-btn icon-btn" data-type="search">
                             <i class="layui-icon">&#xe615;</i>搜索
                         </button>
-                        <button id="btn-reset" class="layui-btn layui-btn-primary">重置
+                        <button id="transdtl-btn-reset" class="layui-btn layui-btn-primary">重置
                         </button>
                         <!--    <button id="btn-export"  lay-filter="form-submit" lay-submit  class="layui-btn layui-btn-primary">导出
                             </button>-->
-                        <a id="btn-export" href="javascript:void(0);" class="layui-btn layui-btn-primary" >导出</a>
+                        <a id="transdtl-btn-export" href="javascript:void(0);" class="layui-btn layui-btn-primary" >导出</a>
                     </div>
                 </div>
             </form>
 
         </div>
-        <table class="layui-table" id="table" lay-filter="table"></table>
+        <table class="layui-table" id="transdtl-table" lay-filter="table"></table>
     </div>
 </div>
-<input hidden th:value="${shopList}" id="shoplist">
+<input hidden th:value="${shopList}" id="transdtl-shoplist">
 <script>
 
-    var rawlist = $("#shoplist").val();
+    var rawlist = $("#transdtl-shoplist").val();
     var shoplist = JSON.parse(rawlist);
 
     layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
@@ -90,19 +90,19 @@
         let table = layui.table;
         let admin = layui.admin;
 
-        var enddate = $("#enddate").val();
-        var startdate=$("#startdate").val();
+        var enddate = $("#transdtl-enddate").val();
+        var startdate=$("#transdtl-startdate").val();
 
         form.render('select');
         var laydate = layui.laydate;
         laydate.render({
-            elem: '#startdate',
+            elem: '#transdtl-startdate',
             btns: ['now', 'confirm'],
             trigger: 'click',
             max: enddate
         });
         laydate.render({
-            elem: '#enddate',
+            elem: '#transdtl-enddate',
             btns: ['now', 'confirm'],
             trigger: 'click',
             max: enddate
@@ -110,7 +110,7 @@
 
         // 渲染表格
         table.render({
-            elem: '#table',
+            elem: '#transdtl-table',
             url: '[[@{/transdtl/list}]]',
             where:{
                 startdate:startdate,
@@ -156,7 +156,6 @@
                     {
                         field: 'shopid',
                         title: '商户',
-
                         align: 'center',
                         templet: function (item) {
                             return shoplist[item.shopid];
@@ -165,59 +164,43 @@
                     {
                         field: 'status',
                         title: '流水状态',
-
                         align: 'center',
                         templet: function (item) {
-                            if (item.status == 0) {
-                                return '未入账';
-                            } else if (item.status == 1) {
-                                return '已入账';
-                            } else {
-                                return '未知';
-                            }
+                            return getTempDictValue('transtatusList',item.status);
                         }
                     },
                     {
                         field: 'transtype',
                         title: '流水类型',
                         sort: true,
-
                         align: 'center',
                         templet: function (item) {
-                            if (item.transtype == 'lj') {
-                                return '联机';
-                            } else if (item.transtype == 'tj') {
-                                return '脱机';
-                            }  else if (item.transtype == 'cz') {
-                                return '冲正';
-                            } else {
-                                return '未知';
-                            }
+                            return getTempDictValue('transtypeList',item.transtype);
                         }
                     },
                 ]
             ]
         });
-        $('#btn-export').click(function () {
+        $('#transdtl-btn-export').click(function () {
             var url = '[[@{/transdtl/export}]]';
             /* $("#form").attr("action",url);
 
              $("#form").submit();*/
-            var param = $("#form").serialize();
+            var param = $("#transdtl-form").serialize();
 
-            $("#btn-export").attr("href", url + "?" + param);
-            $("#btn-export")[0].click();
+            $("#transdtl-btn-export").attr("href", url + "?" + param);
+            $("#transdtl-btn-export")[0].click();
         });
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
-            let custname = $('#custname').val();
-            let shopid = $('#shopid').val();
-            let startdate = $('#startdate').val();
-            let enddate = $('#enddate').val();
-            let refno = $('#refno').val();
-            let status = $('#status').val();
-            let termid = $('#termid').val();
-            table.reload('table', {
+        $('#transdtl-btn-search').click(function () {
+            let custname = $('#transdtl-custname').val();
+            let shopid = $('#transdtl-shopid').val();
+            let startdate = $('#transdtl-startdate').val();
+            let enddate = $('#transdtl-enddate').val();
+            let refno = $('#transdtl-refno').val();
+            let status = $('#transdtl-status').val();
+            let termid = $('#transdtl-termid').val();
+            table.reload('transdtl-table', {
                 where: {
                     custname: custname,
                     shopid: shopid,
@@ -234,11 +217,11 @@
 
         });
 
-        $('#btn-reset').click(function () {
+        $('#transdtl-btn-reset').click(function () {
             $(".layui-input").val("");
             $("select").val("");
-            $("#startdate").val(startdate);
-            $("#enddate").val(enddate);
+            $("#transdtl-startdate").val(startdate);
+            $("#transdtl-enddate").val(enddate);
             return false;
 
         });
diff --git a/src/main/resources/templates/restaurant/transdtlrev/index.html b/src/main/resources/templates/restaurant/transdtlrev/index.html
index 21b5497..5a0a06a 100644
--- a/src/main/resources/templates/restaurant/transdtlrev/index.html
+++ b/src/main/resources/templates/restaurant/transdtlrev/index.html
@@ -12,42 +12,42 @@
                 <div class="layui-inline">
                     <label class="layui-form-label"> 姓名：</label>
                     <div class="layui-input-inline">
-                        <input id="custname" name="custname" class="layui-input" type="text"/>
+                        <input id="transdtlrev-custname" name="custname" class="layui-input" type="text"/>
                     </div>
                 </div>
                 <div class="layui-inline">
                     <label class="layui-form-label"> 交易号：</label>
                     <div class="layui-input-inline">
-                        <input id="refno" name="refno" class="layui-input " type="text"/>
+                        <input id="transdtlrev-refno" name="refno" class="layui-input " type="text"/>
                     </div>
                 </div>
                 <div class="layui-inline">
                     <label class="layui-form-label">交易日期：</label>
                     <div class="layui-input-inline">
                         <input type="text" name="accdate" class="layui-input" th:value="${accdate}"
-                               id="accdate" placeholder="yyyy-MM-dd">
+                               id="transdtlrev-accdate" placeholder="yyyy-MM-dd">
                     </div>
                 </div>
             </div>
 
             <div class="layui-form-item">
                 <div class="layui-inline" style="margin-left:5%">
-                    <button id="btn-search" class="layui-btn icon-btn" data-type="search">
+                    <button id="transdtlrev-btn-search" class="layui-btn icon-btn" data-type="search">
                         <i class="layui-icon">&#xe615;</i>搜索
                     </button>
-                    <button id="btn-reset" class="layui-btn layui-btn-primary">重置
+                    <button id="transdtlrev-btn-reset" class="layui-btn layui-btn-primary">重置
                     </button>
                 </div>
             </div>
 
         </div>
-        <table class="layui-table" id="table" lay-filter="table"></table>
+        <table class="layui-table" id="transdtlrev-table" lay-filter="table"></table>
     </div>
 </div>
-<input hidden th:value="${shopList}" id="shoplist">
+<input hidden th:value="${shopList}" id="transdtlrev-shoplist">
 <script>
 
-    var rawlist = $("#shoplist").val();
+    var rawlist = $("#transdtlrev-shoplist").val();
     var shoplist = JSON.parse(rawlist);
 
     layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
@@ -55,12 +55,12 @@
         let table = layui.table;
         let admin = layui.admin;
 
-        var accdate = $("#accdate").val();
+        var accdate = $("#transdtlrev-accdate").val();
 
         form.render('select');
         var laydate = layui.laydate;
         laydate.render({
-            elem: '#accdate',
+            elem: '#transdtlrev-accdate',
             btns: ['now', 'confirm'],
             trigger: 'click',
             max: accdate
@@ -69,7 +69,7 @@
 
         // 渲染表格
         table.render({
-            elem: '#table',
+            elem: '#transdtlrev-table',
             url: '[[@{/transdtlrev/list}]]',
             where:{
                 accdate:accdate
@@ -99,7 +99,6 @@
                     {
                         field: 'shopid',
                         title: '商户',
-
                         align: 'center',
                         templet: function (item) {
                             return shoplist[item.shopid];
@@ -108,16 +107,9 @@
                     {
                         field: 'status',
                         title: '流水状态',
-
                         align: 'center',
                         templet: function (item) {
-                            if (item.status == 0) {
-                                return '未入账';
-                            } else if (item.status == 1) {
-                                return '已入账';
-                            } else {
-                                return '未知';
-                            }
+                            return getTempDictValue('transtatusList',item.status);
                         }
                     },
                     {
@@ -126,15 +118,7 @@
                         sort: true,
                         align: 'center',
                         templet: function (item) {
-                            if (item.transtype == 'lj') {
-                                return '联机';
-                            } else if (item.transtype == 'tj') {
-                                return '脱机';
-                            } else if (item.transtype == 'cz') {
-                                return '冲正';
-                            } else {
-                                return '未知';
-                            }
+                            return getTempDictValue('transtypeList',item.transtype);
                         }
                     },
                     {
@@ -142,6 +126,7 @@
                         if(item.transtype!='cz'){
                             return ' <a class="layui-btn  layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>冲正</a> ';
                         }
+                        return '';
 
                     }
                    }
@@ -149,7 +134,7 @@
             ]
         });
 
-        table.on('tool(table)', function (obj) {
+        table.on('tool(transdtlrev-table)', function (obj) {
             let data = obj.data;
             let layEvent = obj.event;
             if (layEvent === 'edit') {
@@ -164,17 +149,17 @@
                 title: title,
                 path: '[[@{/transdtlrev/loadrevert}]]',
                 finish: function () {
-                    table.reload('table', {});
+                    table.reload('transdtlrev-table', {});
                 }
             });
         };
 
         // 搜索按钮点击事件
-        $('#btn-search').click(function () {
-            let custname = $('#custname').val();
-            let refno = $('#refno').val();
-            let accdate = $('#accdate').val();
-            table.reload('table', {
+        $('#transdtlrev-btn-search').click(function () {
+            let custname = $('#transdtlrev-custname').val();
+            let refno = $('#transdtlrev-refno').val();
+            let accdate = $('#transdtlrev-accdate').val();
+            table.reload('transdtlrev-table', {
                 where: {
                     custname: custname,
                     accdate: accdate,
@@ -187,9 +172,9 @@
 
         });
 
-        $('#btn-reset').click(function () {
+        $('#transdtlrev-btn-reset').click(function () {
             $(".layui-input").val("");
-            $("#accdate").val(accdate);
+            $("#transdtlrev-accdate").val(accdate);
             return false;
         });
 
