添加字典,导入payapi framework,修改页面的id
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;
         });