diff --git a/build.gradle b/build.gradle
index 7a92f84..5685846 100644
--- a/build.gradle
+++ b/build.gradle
@@ -55,6 +55,8 @@
     implementation 'commons-dbcp:commons-dbcp:1.4'
 
     annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
+    annotationProcessor 'org.projectlombok:lombok:1.18.8'
+    compileOnly 'org.projectlombok:lombok:1.18.8'
 
     providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
     testImplementation 'org.springframework.boot:spring-boot-starter-test'
diff --git a/config/application-devel-pg-local.properties b/config/application-devel-pg-local.properties
index ef591a9..230ff23 100644
--- a/config/application-devel-pg-local.properties
+++ b/config/application-devel-pg-local.properties
@@ -3,6 +3,8 @@
 spring.jpa.hibernate.ddl-auto=update
 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
 spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
+spring.datasource.continue-on-error=true
+spring.datasource.initialization-mode=always
 # Postgresql settings
 spring.datasource.platform=postgresql
 spring.datasource.url=jdbc:postgresql://localhost:5432/payapi
@@ -20,8 +22,7 @@
 jwt.expiration=3600
 # user password
 auth.password.bcrypt.seed=
-
 security.request.sign=false
 ##################################################
 ## quartz task scheduler
-shopbalance.updater.cron = -
\ No newline at end of file
+shopbalance.updater.cron=-
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java
index 0e94b39..9ffe634 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TApiClient.java
@@ -79,4 +79,12 @@
   public void setThirdurl(String thirdurl) {
     this.thirdurl = thirdurl;
   }
+
+  public String getTenantId() {
+    return tenantId;
+  }
+
+  public void setTenantId(String tenantId) {
+    this.tenantId = tenantId;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TFunction.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TFunction.java
index d0a4349..352df76 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TFunction.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TFunction.java
@@ -1,11 +1,14 @@
 package com.supwisdom.dlpay.framework.domain;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
 
 @Entity
 @Table(name = "TB_FUNCTION")
-@SequenceGenerator(name = "SEQ_FUNC", sequenceName = "SEQ_FUNC", allocationSize = 1)
+@JsonIgnoreProperties(value={"hibernateLazyInitializer"})
+@SequenceGenerator(name = "SEQ_FUNC", sequenceName = "SEQ_FUNC", allocationSize = 1, initialValue=1000)
 public class TFunction {
   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_FUNC")
@@ -111,4 +114,12 @@
   public void setLastsaved(String lastsaved) {
     this.lastsaved = lastsaved;
   }
+
+  public String getTenantId() {
+    return tenantId;
+  }
+
+  public void setTenantId(String tenantId) {
+    this.tenantId = tenantId;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TPermission.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TPermission.java
index 2c83c18..e6fd9e1 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TPermission.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TPermission.java
@@ -15,7 +15,6 @@
   private String id;
 
   @Column(name = "ROLE_FUNC_ID", length = 32)
-  @NotNull
   private String roleFuncId;
 
   @Column(name = "RESID")
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TRoleFunction.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TRoleFunction.java
index 5aebc73..911ca71 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TRoleFunction.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TRoleFunction.java
@@ -23,7 +23,6 @@
   private Integer functionId;
 
   @Column(name = "PERMISSIONS", length = 200)
-  @NotNull
   private String permissions;
 
   @Column(name = "tenantid", length = 20)
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java
index fad9bbd..49b5df7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java
@@ -9,7 +9,7 @@
     indexes = {@Index(name = "shop_shopaccno_idx", columnList = "shopaccno")})
 public class TShop {
   @Id
-  @SequenceGenerator(name = "shopid", sequenceName = "SEQ_SHOP", allocationSize = 1)
+  @SequenceGenerator(name = "shopid", sequenceName = "SEQ_SHOP", allocationSize = 1, initialValue = 10)
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "shopid")
   @Column(name = "SHOPID", nullable = false, precision = 9)
   private Integer shopid;
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..d110ae7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/security/MyPermissionEvaluator.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.framework.security;
 
 import com.supwisdom.dlpay.framework.domain.*;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.system.service.FunctionService;
@@ -19,53 +20,55 @@
 
 @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());
+                  log.setTenantId(operator.getTenantId());
+                  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/tenant/HibernateConfig.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
index dcf68e8..b44b872 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.framework.tenant;
 
+import lombok.extern.slf4j.Slf4j;
 import org.hibernate.MultiTenancyStrategy;
 import org.hibernate.cfg.Environment;
 import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
@@ -14,13 +15,14 @@
 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
 import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
 
-import javax.persistence.EntityManagerFactory;
 import javax.sql.DataSource;
 import java.util.HashMap;
 import java.util.Map;
 
 @Configuration
+@Slf4j
 public class HibernateConfig {
+
   private final JpaProperties jpaProperties;
 
   private final HibernateProperties hibernateProperties;
@@ -55,11 +57,8 @@
     em.setPackagesToScan("com.supwisdom");
     em.setJpaPropertyMap(properties);
     em.setJpaVendorAdapter(getJpaVendorAdapter());
+    log.info("setup multi-tenant entityManagerFactor");
     return em;
   }
 
-//  @Bean
-//  public EntityManagerFactory entityManagerFactoryBean(LocalContainerEntityManagerFactoryBean localBean) {
-//    return localBean.getObject();
-//  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
index 7a0fb8a..d13ffdb 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantConnectionProviderImpl.java
@@ -34,7 +34,7 @@
     final Connection connection = getAnyConnection();
     try {
       if (tenantIdentifier != null) {
-        connection.createStatement().execute("SET search_path = " + tenantIdentifier + ", public");
+        connection.createStatement().execute("SET search_path = \"" + tenantIdentifier + "\", public");
       } else {
         connection.createStatement().execute("SET search_path =  public");
       }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java b/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java
index 73bdbea..e60b957 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantInterceptor.java
@@ -1,6 +1,9 @@
 package com.supwisdom.dlpay.framework.tenant;
 
+import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.Constants;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@@ -15,7 +18,16 @@
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
       throws Exception {
     String tenantId = request.getHeader(Constants.HEADER_TETANTID);
-    TenantContext.setTenantSchema(tenantId);
+    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
+    if (auth != null && auth.getPrincipal() instanceof TOperator) {
+      TOperator oper = (TOperator) auth.getPrincipal();
+      if (tenantId != null && !oper.getTenantId().equals(tenantId)) {
+        throw new RuntimeException("tenant ID 不匹配");
+      }
+      TenantContext.setTenantSchema(oper.getTenantId());
+    } else {
+      TenantContext.setTenantSchema(tenantId);
+    }
     return true;
   }
 
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java b/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java
index bbd7a5c..05d5977 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/FunctionController.java
@@ -4,6 +4,7 @@
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.framework.domain.TFunction;
 import com.supwisdom.dlpay.framework.domain.TResource;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.system.bean.FunctionSearchBean;
@@ -19,120 +20,126 @@
 @Controller
 public class FunctionController {
 
-    @Autowired
-    private FunctionService functionService;
+  @Autowired
+  private FunctionService functionService;
 
-    @GetMapping("/function/index")
-    public String indexView() {
-        return "system/function/index";
-    }
+  @GetMapping("/function/index")
+  public String indexView() {
+    return "system/function/index";
+  }
 
-    @GetMapping("/function/list")
-    @PreAuthorize("hasPermission('/function/index','')")
-    @ResponseBody
-    public PageResult<TFunction> getDataList(@RequestParam("page") Integer pageNo,
-                                             @RequestParam("limit") Integer pageSize,
-                                             @RequestParam(value = "searchkey", required = false) String searchKey) {
-        try {
-            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
-            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
-            FunctionSearchBean searchBean = new FunctionSearchBean();
-            searchBean.setPageNo(pageNo);
-            searchBean.setFunctioname(searchKey);
-            searchBean.setPageSize(pageSize);
-            return functionService.getFunctionsByKey(searchBean);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return new PageResult<>(99, "系统查询错误");
-        }
+  @GetMapping("/function/list")
+  @PreAuthorize("hasPermission('/function/index','')")
+  @ResponseBody
+  public PageResult<TFunction> getDataList(@RequestParam("page") Integer pageNo,
+                                           @RequestParam("limit") Integer pageSize,
+                                           @RequestParam(value = "searchkey", required = false) String searchKey) {
+    try {
+      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+      FunctionSearchBean searchBean = new FunctionSearchBean();
+      searchBean.setPageNo(pageNo);
+      searchBean.setFunctioname(searchKey);
+      searchBean.setPageSize(pageSize);
+      return functionService.getFunctionsByKey(searchBean);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
     }
+  }
 
-    @GetMapping("/function/loadadd")
-    @PreAuthorize("hasPermission('/function/loadadd','')")
-    public String loadadd() {
-        return "system/function/form";
-    }
+  @GetMapping("/function/loadadd")
+  @PreAuthorize("hasPermission('/function/loadadd','')")
+  public String loadadd() {
+    return "system/function/form";
+  }
 
-    @PostMapping("/function/add")
-    @PreAuthorize("hasPermission('/function/add','')")
-    @ResponseBody
-    public JsonResult add(@RequestBody TFunction function) {
-        if (function != null) {
-            return functionService.saveFunction(function);
-        } else {
-            return JsonResult.error("添加失败");
-        }
+  @PostMapping("/function/add")
+  @PreAuthorize("hasPermission('/function/add','')")
+  @ResponseBody
+  public JsonResult add(@RequestBody TFunction function) {
+    if (function != null) {
+      function.setTenantId(TenantContext.getTenantSchema());
+      return functionService.saveFunction(function);
+    } else {
+      return JsonResult.error("添加失败");
     }
-    @PostMapping("/function/delfunc")
-    @PreAuthorize("hasPermission('/function/delfunc','')")
-    @ResponseBody
-    public JsonResult delfunc(@RequestParam Integer funcid) {
-        return functionService.deleteFunction(funcid);
-    }
+  }
 
-    @GetMapping("/function/checkname")
-    @ResponseBody
-    public JsonResult checkname(@RequestParam String name,
-                                @RequestParam(value = "id", required = false) Integer id) {
-        TFunction function = functionService.getFunctionByNameAndId(name, id);
-        if (function == null) {
-            return JsonResult.ok();
-        } else {
-            return JsonResult.error("功能名称重复");
-        }
-    }
+  @PostMapping("/function/delfunc")
+  @PreAuthorize("hasPermission('/function/delfunc','')")
+  @ResponseBody
+  public JsonResult delfunc(@RequestParam Integer funcid) {
+    return functionService.deleteFunction(funcid);
+  }
 
-    @GetMapping("/function/loadsubadd")
-    @PreAuthorize("hasPermission('/function/loadsubadd','')")
-    public String loadsubadd(Model model) {
-        List<TFunction> functionList = functionService.getParentFunction();
-        model.addAttribute("list", functionList);
-        return "system/function/subform";
+  @GetMapping("/function/checkname")
+  @ResponseBody
+  public JsonResult checkname(@RequestParam String name,
+                              @RequestParam(value = "id", required = false) Integer id) {
+    TFunction function = functionService.getFunctionByNameAndId(name, id);
+    if (function == null) {
+      return JsonResult.ok();
+    } else {
+      return JsonResult.error("功能名称重复");
     }
+  }
 
-    @GetMapping("/function/loadres")
-    @PreAuthorize("hasPermission('/function/loadres','')")
-    public String loadres(@RequestParam Integer functionid, Model model) {
-        TFunction function = functionService.getFunctionById(functionid);
-        List<TResource> resources = functionService.getResources(functionid);
-        model.addAttribute("function", function);
-        model.addAttribute("resources", resources);
-        return "system/function/reslist";
-    }
-    @GetMapping("/function/reslist")
-    @PreAuthorize("hasPermission('/function/loadres','')")
-    @ResponseBody
-    public PageResult<TResource> reslist(@RequestParam Integer functionid, Model model) {
-        List<TResource> resources = functionService.getResources(functionid);
-        return new PageResult<TResource>(resources);
-    }
-    @GetMapping("/function/loadresadd")
-    public String loadresadd(Model model) {
-        List<TFunction> functionList = functionService.getLeafFunction();
-        model.addAttribute("list", functionList);
-        return "system/function/resform";
-    }
+  @GetMapping("/function/loadsubadd")
+  @PreAuthorize("hasPermission('/function/loadsubadd','')")
+  public String loadsubadd(Model model) {
+    List<TFunction> functionList = functionService.getParentFunction();
+    model.addAttribute("list", functionList);
+    return "system/function/subform";
+  }
 
-    @PostMapping("/function/addres")
-    @PreAuthorize("hasPermission('/function/addres','')")
-    @ResponseBody
-    public JsonResult addres(@RequestBody TResource resource) {
-        if (resource != null) {
-            return functionService.saveRes(resource);
-        } else {
-            return JsonResult.error("添加失败");
-        }
+  @GetMapping("/function/loadres")
+  @PreAuthorize("hasPermission('/function/loadres','')")
+  public String loadres(@RequestParam Integer functionid, Model model) {
+    TFunction function = functionService.getFunctionById(functionid);
+    List<TResource> resources = functionService.getResources(functionid);
+    model.addAttribute("function", function);
+    model.addAttribute("resources", resources);
+    return "system/function/reslist";
+  }
+
+  @GetMapping("/function/reslist")
+  @PreAuthorize("hasPermission('/function/loadres','')")
+  @ResponseBody
+  public PageResult<TResource> reslist(@RequestParam Integer functionid, Model model) {
+    List<TResource> resources = functionService.getResources(functionid);
+    return new PageResult<TResource>(resources);
+  }
+
+  @GetMapping("/function/loadresadd")
+  public String loadresadd(Model model) {
+    List<TFunction> functionList = functionService.getLeafFunction();
+    model.addAttribute("list", functionList);
+    return "system/function/resform";
+  }
+
+  @PostMapping("/function/addres")
+  @PreAuthorize("hasPermission('/function/addres','')")
+  @ResponseBody
+  public JsonResult addres(@RequestBody TResource resource) {
+    if (resource != null) {
+      return functionService.saveRes(resource);
+    } else {
+      return JsonResult.error("添加失败");
     }
-    @GetMapping("/function/editres")
-    public String loadresadd(@RequestParam Integer resid,Model model) {
-        List<TFunction> functionList = functionService.getLeafFunction();
-        model.addAttribute("list", functionList);
-        return "system/function/resform";
-    }
-    @PostMapping("/function/delres")
-    @PreAuthorize("hasPermission('/function/delres','')")
-    @ResponseBody
-    public JsonResult delres(@RequestParam Integer resid) {
-        return functionService.deleteResource(resid);
-    }
+  }
+
+  @GetMapping("/function/editres")
+  public String loadresadd(@RequestParam Integer resid, Model model) {
+    List<TFunction> functionList = functionService.getLeafFunction();
+    model.addAttribute("list", functionList);
+    return "system/function/resform";
+  }
+
+  @PostMapping("/function/delres")
+  @PreAuthorize("hasPermission('/function/delres','')")
+  @ResponseBody
+  public JsonResult delres(@RequestParam Integer resid) {
+    return functionService.deleteResource(resid);
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java b/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
index d931676..53af3c4 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
@@ -7,6 +7,7 @@
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.domain.TSyspara;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.service.ParamService;
 import com.supwisdom.dlpay.util.ConstantUtil;
@@ -306,7 +307,7 @@
         apiClient.setSecret(secret);
       }
       if (!StringUtil.isEmpty(roles)) {
-        apiClient.setRoles(roles.replaceAll(",",";"));
+        apiClient.setRoles(roles.replaceAll(",", ";"));
       }
       if (paramService.saveOrUpdateApiClient(apiClient)) {
         return JsonResult.ok("修改成功");
@@ -336,7 +337,8 @@
       apiClient.setAppid(appid.trim());
       apiClient.setSecret(RandomUtils.getUUIDStr());
       apiClient.setStatus(TradeDict.STATUS_NORMAL);
-      apiClient.setRoles(roles.replaceAll(",",";"));
+      apiClient.setTenantId(TenantContext.getTenantSchema());
+      apiClient.setRoles(roles.replaceAll(",", ";"));
       if (paramService.saveOrUpdateApiClient(apiClient)) {
         return JsonResult.ok("新增成功");
       } else {
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
index e58032e..73ce52b 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/OperatorServiceImpl.java
@@ -6,6 +6,7 @@
 import com.supwisdom.dlpay.framework.domain.TOperLog;
 import com.supwisdom.dlpay.framework.domain.TOperRole;
 import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.bean.LogBean;
 import com.supwisdom.dlpay.system.bean.OperatorSearchBean;
@@ -29,145 +30,147 @@
 
 @Service
 public class OperatorServiceImpl implements OperatorService {
-    @Autowired
-    private OperatorDao operatorDao;
-    @Autowired
-    private OperRoleDao operRoleDao;
-    @Autowired
-    private OperLogDao operLogDao;
+  @Autowired
+  private OperatorDao operatorDao;
+  @Autowired
+  private OperRoleDao operRoleDao;
+  @Autowired
+  private OperLogDao operLogDao;
 
-    @Override
-    public PageResult<TOperator> getOperatorsByPage(int pageNo, int pageSize, OperatorSearchBean searchBean) {
-        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.Direction.DESC, "opendate");
-        Page<TOperator> page = operatorDao.findAll(new Specification<TOperator>() {
-            @Override
-            public Predicate toPredicate(Root<TOperator> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
-                List<Predicate> predicates = new ArrayList<>();
-                if (!StringUtil.isEmpty(searchBean.getOpercode())) {
-                    predicates.add(criteriaBuilder.equal(root.get("opercode").as(String.class), searchBean.getOpercode().trim()));
-                }
-                if (!StringUtil.isEmpty(searchBean.getOpername())) {
-                    predicates.add(criteriaBuilder.like(root.get("opername").as(String.class), "%" + searchBean.getOpername().trim() + "%"));
-                }
-                if (!StringUtil.isEmpty(searchBean.getMobile())) {
-                    predicates.add(criteriaBuilder.like(root.get("mobile").as(String.class), "%" + searchBean.getMobile().trim() + "%"));
-                }
-                if (null != searchBean.getDeleteShow() && !searchBean.getDeleteShow()) {
-                    predicates.add(criteriaBuilder.equal(root.get("status").as(String.class), TradeDict.STATUS_NORMAL)); //仅显示正常
-                }
-                return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
-            }
-        }, pageable);
+  @Override
+  public PageResult<TOperator> getOperatorsByPage(int pageNo, int pageSize, OperatorSearchBean searchBean) {
+    Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.Direction.DESC, "opendate");
+    Page<TOperator> page = operatorDao.findAll(new Specification<TOperator>() {
+      @Override
+      public Predicate toPredicate(Root<TOperator> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+        List<Predicate> predicates = new ArrayList<>();
+        if (!StringUtil.isEmpty(searchBean.getOpercode())) {
+          predicates.add(criteriaBuilder.equal(root.get("opercode").as(String.class), searchBean.getOpercode().trim()));
+        }
+        if (!StringUtil.isEmpty(searchBean.getOpername())) {
+          predicates.add(criteriaBuilder.like(root.get("opername").as(String.class), "%" + searchBean.getOpername().trim() + "%"));
+        }
+        if (!StringUtil.isEmpty(searchBean.getMobile())) {
+          predicates.add(criteriaBuilder.like(root.get("mobile").as(String.class), "%" + searchBean.getMobile().trim() + "%"));
+        }
+        if (null != searchBean.getDeleteShow() && !searchBean.getDeleteShow()) {
+          predicates.add(criteriaBuilder.equal(root.get("status").as(String.class), TradeDict.STATUS_NORMAL)); //仅显示正常
+        }
+        return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+      }
+    }, pageable);
 
-        return new PageResult<>(page);
-    }
+    return new PageResult<>(page);
+  }
 
-    @Override
-    public boolean checkOpercodeExists(String opercode, String operid) {
-        TOperator oper = operatorDao.findByOpercode(opercode.trim());
-        if (null != oper && StringUtil.isEmpty(operid)) return true;
-        if (null != oper && !StringUtil.isEmpty(operid) && !operid.trim().equals(oper.getOperid())) return true;
+  @Override
+  public boolean checkOpercodeExists(String opercode, String operid) {
+    TOperator oper = operatorDao.findByOpercode(opercode.trim());
+    if (null != oper && StringUtil.isEmpty(operid)) return true;
+    if (null != oper && !StringUtil.isEmpty(operid) && !operid.trim().equals(oper.getOperid())) return true;
+    return false;
+  }
+
+  @Override
+  public boolean saveOperator(TOperator operator, String roles) {
+    if (StringUtil.isEmpty(operator.getOperid())) {
+      String[] roleids = roles.split(",");
+      operator.setOpendate(DateUtil.getNow("yyyyMMdd"));
+      operator.setStatus(TradeDict.STATUS_NORMAL);
+      operator.setOpertype(WebConstant.OPERTYPE_DEFAULT);
+      operator.setTenantId(TenantContext.getTenantSchema());
+      BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+      operator.setOperpwd(encoder.encode(WebConstant.OPERPWD_DEFAULT));
+      operator = operatorDao.save(operator);
+      for (String role : roleids) {
+        TOperRole operRole = new TOperRole();
+        operRole.setOperid(operator.getOperid());
+        operRole.setRoleId(role);
+        operRoleDao.save(operRole);
+      }
+    } else {
+      Optional<TOperator> temp = operatorDao.findById(operator.getOperid());
+      if (!temp.isPresent()) {
         return false;
+      }
+      TOperator op = temp.get();
+      op.setSex(operator.getSex());
+      op.setEmail(operator.getEmail());
+      op.setMobile(operator.getMobile());
+      op.setOpername(operator.getOpername());
+      op.setOpercode(operator.getOpercode());
+      op.setTenantId(operator.getTenantId());
+      operatorDao.save(op);
+      operRoleDao.deleteByOperid(op.getOperid());
+      String[] roleids = roles.split(",");
+      for (String role : roleids) {
+        TOperRole operRole = new TOperRole();
+        operRole.setOperid(op.getOperid());
+        operRole.setRoleId(role);
+        operRoleDao.save(operRole);
+      }
     }
+    return true;
+  }
 
-    @Override
-    public boolean saveOperator(TOperator operator, String roles) {
-        if (StringUtil.isEmpty(operator.getOperid())) {
-            String[] roleids = roles.split(",");
-            operator.setOpendate(DateUtil.getNow("yyyyMMdd"));
-            operator.setStatus(TradeDict.STATUS_NORMAL);
-            operator.setOpertype(WebConstant.OPERTYPE_DEFAULT);
-            BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
-            operator.setOperpwd(encoder.encode(WebConstant.OPERPWD_DEFAULT));
-            operator = operatorDao.save(operator);
-            for (String role : roleids) {
-                TOperRole operRole = new TOperRole();
-                operRole.setOperid(operator.getOperid());
-                operRole.setRoleId(role);
-                operRoleDao.save(operRole);
-            }
-        } else {
-            Optional<TOperator> temp = operatorDao.findById(operator.getOperid());
-            if (!temp.isPresent()) {
-                return false;
-            }
-            TOperator op = temp.get();
-            op.setSex(operator.getSex());
-            op.setEmail(operator.getEmail());
-            op.setMobile(operator.getMobile());
-            op.setOpername(operator.getOpername());
-            op.setOpercode(operator.getOpercode());
-            operatorDao.save(op);
-            operRoleDao.deleteByOperid(op.getOperid());
-            String[] roleids = roles.split(",");
-            for (String role : roleids) {
-                TOperRole operRole = new TOperRole();
-                operRole.setOperid(op.getOperid());
-                operRole.setRoleId(role);
-                operRoleDao.save(operRole);
-            }
-        }
-        return true;
-    }
+  @Override
+  public TOperator getOperatorByCode(String opercode) {
+    return operatorDao.findByOpercode(opercode);
+  }
 
-    @Override
-    public TOperator getOperatorByCode(String opercode) {
-        return operatorDao.findByOpercode(opercode);
-    }
+  @Override
+  public List<TOperRole> getOperRoleByOperId(String operid) {
+    return operRoleDao.findAllByOperid(operid);
+  }
 
-    @Override
-    public List<TOperRole> getOperRoleByOperId(String operid) {
-        return operRoleDao.findAllByOperid(operid);
+  @Override
+  public boolean resetPwd(String operid) {
+    Optional<TOperator> temp = operatorDao.findById(operid);
+    if (!temp.isPresent()) {
+      return false;
     }
+    TOperator op = temp.get();
+    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+    op.setOperpwd(encoder.encode(WebConstant.OPERPWD_DEFAULT));
+    operatorDao.save(op);
+    return true;
+  }
 
-    @Override
-    public boolean resetPwd(String operid) {
-        Optional<TOperator> temp = operatorDao.findById(operid);
-        if (!temp.isPresent()) {
-            return false;
-        }
-        TOperator op = temp.get();
-        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
-        op.setOperpwd(encoder.encode(WebConstant.OPERPWD_DEFAULT));
-        operatorDao.save(op);
-        return true;
+  @Override
+  public boolean updateState(String operid, String state) {
+    Optional<TOperator> temp = operatorDao.findById(operid);
+    if (!temp.isPresent()) {
+      return false;
     }
+    TOperator op = temp.get();
+    op.setStatus(state);
+    operatorDao.save(op);
+    return true;
+  }
 
-    @Override
-    public boolean updateState(String operid, String state) {
-        Optional<TOperator> temp = operatorDao.findById(operid);
-        if (!temp.isPresent()) {
-            return false;
-        }
-        TOperator op = temp.get();
-        op.setStatus(state);
-        operatorDao.save(op);
-        return true;
-    }
+  @Override
+  public boolean saveOperLog(TOperLog log) {
+    operLogDao.save(log);
+    return true;
+  }
 
-    @Override
-    public boolean saveOperLog(TOperLog log) {
-        operLogDao.save(log);
-        return true;
+  @Override
+  public PageResult<TOperLog> getOperLogs(LogBean param) {
+    Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
+        , Sort.by(Sort.Direction.DESC, "logdate"));
+    if (!StringUtil.isEmpty(param.getOpername())) {
+      return new PageResult<>(operLogDao.findAllByOpernameContaining(param.getOpername(), pageable));
     }
+    return new PageResult<>(operLogDao.findAll(pageable));
+  }
 
-    @Override
-    public PageResult<TOperLog> getOperLogs(LogBean param) {
-        Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
-                , Sort.by(Sort.Direction.DESC,"logdate"));
-        if (!StringUtil.isEmpty(param.getOpername())) {
-            return new PageResult<>(operLogDao.findAllByOpernameContaining(param.getOpername(), pageable));
-        }
-        return new PageResult<>(operLogDao.findAll(pageable));
+  @Override
+  public boolean saveOperator(TOperator operator) {
+    Optional<TOperator> temp = operatorDao.findById(operator.getOperid());
+    if (!temp.isPresent()) {
+      return false;
     }
-
-    @Override
-    public boolean saveOperator(TOperator operator) {
-        Optional<TOperator> temp = operatorDao.findById(operator.getOperid());
-        if (!temp.isPresent()) {
-            return false;
-        }
-        operatorDao.save(operator);
-        return true;
-    }
+    operatorDao.save(operator);
+    return true;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
index f774582..babde31 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/ParamServiceImpl.java
@@ -132,8 +132,8 @@
   }
 
   @Override
-  public boolean saveOrUpdateApiClient(TApiClient apiClient){
-    if(null!=apiClient){
+  public boolean saveOrUpdateApiClient(TApiClient apiClient) {
+    if (null != apiClient) {
       apiClientDao.save(apiClient);
       return true;
     }
@@ -167,8 +167,8 @@
   }
 
   @Override
-  public boolean saveOrUpdatePaytype(TSourceType paytype){
-    if(null!=paytype){
+  public boolean saveOrUpdatePaytype(TSourceType paytype) {
+    if (null != paytype) {
       paytypeDao.save(paytype);
       return true;
     }
@@ -176,8 +176,8 @@
   }
 
   @Override
-  public boolean deletePaytype(TSourceType paytype){
-    if(null!=paytype){
+  public boolean deletePaytype(TSourceType paytype) {
+    if (null != paytype) {
       paytypeDao.delete(paytype);
       return true;
     }
@@ -201,7 +201,8 @@
     for (String key : param.keySet()) {
       String value = param.get(key);
       TPaytypeConfig config = paytypeConfigDao.getByPaytypeAndAndConfigid(tPaytype.getSourceType(), key);
-      if (null == config) throw new WebCheckException("支付能力[" + tPaytype.getSourceType() + "]不存在配置项[" + key + "],请重新查询");
+      if (null == config)
+        throw new WebCheckException("支付能力[" + tPaytype.getSourceType() + "]不存在配置项[" + key + "],请重新查询");
       config.setConfigValue(StringUtil.isEmpty(value) ? null : value.trim());
       paytypeConfigDao.save(config);
     }
@@ -209,5 +210,4 @@
   }
 
 
-
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
index c96485c..66acac4 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/RoleServiceImpl.java
@@ -7,6 +7,7 @@
 import com.supwisdom.dlpay.framework.domain.TResource;
 import com.supwisdom.dlpay.framework.domain.TRole;
 import com.supwisdom.dlpay.framework.domain.TRoleFunction;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
@@ -25,154 +26,156 @@
 
 @Service
 public class RoleServiceImpl implements RoleService {
-    @Autowired
-    private RoleDao roleDao;
+  @Autowired
+  private RoleDao roleDao;
 
-    @Autowired
-    private ResourceDao resourceDao;
+  @Autowired
+  private ResourceDao resourceDao;
 
-    @Autowired
-    private RoleFunctionDao roleFunctionDao;
+  @Autowired
+  private RoleFunctionDao roleFunctionDao;
 
-    @Autowired
-    private PermissionDao permissionDao;
-    @Autowired
-    private OperRoleDao operRoleDao;
+  @Autowired
+  private PermissionDao permissionDao;
+  @Autowired
+  private OperRoleDao operRoleDao;
 
 
-    @Override
-    public List<TRole> findAllRoles() {
-        List<TRole> list = roleDao.getAllRoles();
-        if (!StringUtil.isEmpty(list)) return list;
-        return new ArrayList<>(0);
+  @Override
+  public List<TRole> findAllRoles() {
+    List<TRole> list = roleDao.getAllRoles();
+    if (!StringUtil.isEmpty(list)) return list;
+    return new ArrayList<>(0);
+  }
+
+  @Override
+  public TRole findRoleByRoleid(String roleid) {
+    Optional<TRole> role = roleDao.findById(roleid);
+    if (role.isPresent()) {
+      return role.get();
     }
+    return null;
+  }
 
-    @Override
-    public TRole findRoleByRoleid(String roleid) {
-        Optional<TRole> role = roleDao.findById(roleid);
-        if(role.isPresent()){
-            return role.get();
-        }
-        return null;
+  @Override
+  public TResource findResourceByURI(String uri) {
+    return resourceDao.findByUri(uri);
+  }
+
+  @Override
+  public TRoleFunction findRoleFunctionByRoleIdAndFunctionId(String roleid, Integer functionid) {
+    return roleFunctionDao.findByRoleIdAndFunctionId(roleid, functionid);
+  }
+
+  @Override
+  public PageResult<TRole> getRolesByKey(FunctionSearchBean param) {
+    Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
+        , Sort.by("createtime"));
+    if (!StringUtil.isEmpty(param.getFunctioname())) {
+      return new PageResult<>(roleDao.findAllByRoleNameContaining(param.getFunctioname(), pageable));
     }
+    return new PageResult<>(roleDao.findAll(pageable));
+  }
 
-    @Override
-    public TResource findResourceByURI(String uri) {
-        return resourceDao.findByUri(uri);
+  @Override
+  public JsonResult saveRole(TRole role) {
+    if (!StringUtil.isEmpty(role.getRoleId())) {
+      TRole temp = roleDao.findByRoleNameAndRoleIdNot(role.getRoleName(), role.getRoleId());
+      if (temp != null) {
+        return JsonResult.error("角色名称已存在");
+      }
+      Optional<TRole> opt = roleDao.findById(role.getRoleId());
+      if (opt == null || !opt.isPresent()) {
+        return JsonResult.error("角色已被删除");
+      }
+      temp = opt.get();
+      temp.setRoleName(role.getRoleName());
+      temp.setRoleDesc(role.getRoleDesc());
+//      temp.setRoleCode(role.getRoleCode());
+      temp.setLastsaved(DateUtil.getNow());
+      temp.setTenantId(TenantContext.getTenantSchema());
+      roleDao.save(temp);
+    } else {
+      TRole temp = roleDao.findByRoleName(role.getRoleName());
+      if (temp != null) {
+        return JsonResult.error("角色名称已存在");
+      }
+
+      role.setCreatetime(DateUtil.getNow());
+      role.setEditflag(1);
+      role.setRoleCode("ROLE_ADMIN");
+      role.setTenantId(TenantContext.getTenantSchema());
+      roleDao.save(role);
     }
+    return JsonResult.ok("成功");
+  }
 
-    @Override
-    public TRoleFunction findRoleFunctionByRoleIdAndFunctionId(String roleid, Integer functionid) {
-        return roleFunctionDao.findByRoleIdAndFunctionId(roleid, functionid);
+  @Override
+  public List<TRoleFunction> getRoleFuncByRoleid(String roleId) {
+    return roleFunctionDao.findByRoleId(roleId);
+  }
+
+
+  @Override
+  public TPermission findByRoleIdAndResid(String roleFuncId, Integer resid) {
+    return permissionDao.findByRoleIdAndResid(roleFuncId, resid);
+  }
+
+  @Override
+  public JsonResult saveRoleFuncId(String roleId, String funcs) {
+    Optional<TRole> ret = roleDao.findById(roleId);
+    if (ret == null || !ret.isPresent()) {
+      return JsonResult.error("角色不存在");
     }
-
-    @Override
-    public PageResult<TRole> getRolesByKey(FunctionSearchBean param) {
-        Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
-                , Sort.by("createtime"));
-        if (!StringUtil.isEmpty(param.getFunctioname())) {
-            return new PageResult<>(roleDao.findAllByRoleNameContaining(param.getFunctioname(), pageable));
-        }
-        return new PageResult<>(roleDao.findAll(pageable));
+    roleFunctionDao.deleteByRoleId(roleId);
+    permissionDao.deleteByRoleId(roleId);
+    String[] datas = funcs.split(",");
+    for (String func : datas) {
+      if (func.contains("_res")) {
+        String id = func.replace("_res", "");
+        TPermission permission = new TPermission();
+        permission.setResid(Integer.valueOf(id));
+        permission.setRoleId(roleId);
+        permissionDao.save(permission);
+      } else {
+        TRoleFunction roleFunction = new TRoleFunction();
+        roleFunction.setFunctionId(Integer.valueOf(func));
+        roleFunction.setRoleId(roleId);
+        roleFunctionDao.save(roleFunction);
+      }
     }
+    return JsonResult.ok("成功");
+  }
 
-    @Override
-    public JsonResult saveRole(TRole role) {
-        if (!StringUtil.isEmpty(role.getRoleId())) {
-            TRole temp = roleDao.findByRoleNameAndRoleIdNot(role.getRoleName(), role.getRoleId());
-            if (temp != null) {
-                return JsonResult.error("角色名称已存在");
-            }
-            Optional<TRole> opt = roleDao.findById(role.getRoleId());
-            if (opt == null || !opt.isPresent()) {
-                return JsonResult.error("角色已被删除");
-            }
-            temp = opt.get();
-            temp.setRoleName(role.getRoleName());
-            temp.setRoleDesc(role.getRoleDesc());
-            temp.setRoleCode(role.getRoleCode());
-            temp.setLastsaved(DateUtil.getNow());
-            roleDao.save(temp);
-        } else {
-            TRole temp = roleDao.findByRoleName(role.getRoleName());
-            if (temp != null) {
-                return JsonResult.error("角色名称已存在");
-            }
-
-            role.setCreatetime(DateUtil.getNow());
-            role.setEditflag(1);
-            role.setRoleCode("ROLE_ADMIN");
-            roleDao.save(role);
-        }
-        return JsonResult.ok("成功");
+  @Override
+  public List<ZTreeNode> findByRoleIdNative(String roleId) {
+    List<NodeData> nodeData = roleFunctionDao.findByRoleIdNative(roleId);
+    List<ZTreeNode> ret = new ArrayList<>();
+    for (NodeData data : nodeData) {
+      ZTreeNode zTreeNode = new ZTreeNode();
+      zTreeNode.setpId(data.getPid());
+      zTreeNode.setId(data.getId());
+      zTreeNode.setName(data.getName());
+      zTreeNode.setChecked(data.getChecked() == 0 ? false : true);
+      zTreeNode.setOpen(data.getOpen() == 0 ? false : true);
+      ret.add(zTreeNode);
     }
+    return ret;
+  }
 
-    @Override
-    public List<TRoleFunction> getRoleFuncByRoleid(String roleId) {
-        return roleFunctionDao.findByRoleId(roleId);
+  @Override
+  public JsonResult deleteRole(String roleid) {
+    Optional<TRole> ret = roleDao.findById(roleid);
+    if (ret == null || !ret.isPresent()) {
+      return JsonResult.error("角色不存在");
     }
-
-
-    @Override
-    public TPermission findByRoleIdAndResid(String roleFuncId, Integer resid) {
-        return permissionDao.findByRoleIdAndResid(roleFuncId, resid);
+    if (ret.get().getEditflag() != 1) {
+      return JsonResult.error("该角色不能删除");
     }
-
-    @Override
-    public JsonResult saveRoleFuncId(String roleId, String funcs) {
-        Optional<TRole> ret = roleDao.findById(roleId);
-        if (ret == null || !ret.isPresent()) {
-            return JsonResult.error("角色不存在");
-        }
-        roleFunctionDao.deleteByRoleId(roleId);
-        permissionDao.deleteByRoleId(roleId);
-        String[] datas = funcs.split(",");
-        for (String func : datas) {
-            if (func.contains("_res")) {
-                String id = func.replace("_res", "");
-                TPermission permission = new TPermission();
-                permission.setResid(Integer.valueOf(id));
-                permission.setRoleId(roleId);
-                permissionDao.save(permission);
-            } else {
-                TRoleFunction roleFunction = new TRoleFunction();
-                roleFunction.setFunctionId(Integer.valueOf(func));
-                roleFunction.setRoleId(roleId);
-                roleFunctionDao.save(roleFunction);
-            }
-        }
-        return JsonResult.ok("成功");
-    }
-
-    @Override
-    public List<ZTreeNode> findByRoleIdNative(String roleId) {
-        List<NodeData> nodeData = roleFunctionDao.findByRoleIdNative(roleId);
-        List<ZTreeNode> ret = new ArrayList<>();
-        for (NodeData data : nodeData) {
-            ZTreeNode zTreeNode = new ZTreeNode();
-            zTreeNode.setpId(data.getPid());
-            zTreeNode.setId(data.getId());
-            zTreeNode.setName(data.getName());
-            zTreeNode.setChecked(data.getChecked() == 0 ? false : true);
-            zTreeNode.setOpen(data.getOpen() == 0 ? false : true);
-            ret.add(zTreeNode);
-        }
-        return ret;
-    }
-
-    @Override
-    public JsonResult deleteRole(String roleid) {
-        Optional<TRole> ret = roleDao.findById(roleid);
-        if (ret == null || !ret.isPresent()) {
-            return JsonResult.error("角色不存在");
-        }
-        if(ret.get().getEditflag()!=1){
-            return JsonResult.error("该角色不能删除");
-        }
-        permissionDao.deleteByRoleId(roleid);
-        roleFunctionDao.deleteByRoleId(roleid);
-        operRoleDao.deleteByRoleId(roleid);
-        roleDao.deleteById(roleid);
-        return JsonResult.ok("成功");
-    }
+    permissionDao.deleteByRoleId(roleid);
+    roleFunctionDao.deleteByRoleId(roleid);
+    operRoleDao.deleteByRoleId(roleid);
+    roleDao.deleteById(roleid);
+    return JsonResult.ok("成功");
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
index f2bc236..0594fcc 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
@@ -14,6 +14,7 @@
 import com.supwisdom.dlpay.framework.domain.TShop;
 import com.supwisdom.dlpay.framework.domain.TShopacc;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.Subject;
@@ -128,6 +129,7 @@
       //新增
       SystemDateTime dt = systemUtilService.getSysdatetime();
       shop.setOpendate(dt.getHostdate());
+      shop.setTenantId(TenantContext.getTenantSchema());
       shopDao.save(shop);
       if (shop.getShoptype() == 1) {
         TShopacc shopacc = new TShopacc();
@@ -138,6 +140,7 @@
         shopacc.setStatus(TradeDict.STATUS_NORMAL);
         shopacc.setOpendate(dt.getHostdate());
         shopacc.setBalance(0D);
+        shopacc.setTenantId(shop.getTenantId());
         shopaccDao.save(shopacc);
 
         shop.setShopaccno(shopacc.getShopaccno());
@@ -219,6 +222,7 @@
   @Override
   public boolean saveOrUpdateShopPaytype(TShopPaytype shopPaytype) {
     if (null != shopPaytype) {
+      shopPaytype.setTenantid(TenantContext.getTenantSchema());
       shopPaytypeDao.save(shopPaytype);
       return true;
     }
@@ -270,6 +274,7 @@
           spc.setConfigName(paytypeConfig.getConfigName());
         }
       }
+      spc.setTenantid(shopPaytype.getTenantid());
       shopPaytypeConfigDao.save(spc);
     }
     return true;
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index 1d7b899..1254d32 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -11,6 +11,7 @@
 import com.supwisdom.dlpay.api.domain.TPointsAccount;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.bean.PersonParamBean;
 import com.supwisdom.dlpay.system.service.UserDataService;
@@ -25,153 +26,156 @@
 
 @Service
 public class UserDataServiceImpl implements UserDataService {
-    @Autowired
-    private PersonDao personDao;
-    @Autowired
-    private AccountDao accountDao;
-    @Autowired
-    private PointsAccountDao pointsAccountDao;
-    @Autowired
-    private SystemUtilService systemUtilService;
-    @Autowired
-    private PersonIdentityDao personIdentityDao;
+  @Autowired
+  private PersonDao personDao;
+  @Autowired
+  private AccountDao accountDao;
+  @Autowired
+  private PointsAccountDao pointsAccountDao;
+  @Autowired
+  private SystemUtilService systemUtilService;
+  @Autowired
+  private PersonIdentityDao personIdentityDao;
 
-    @Override
-    public PageResult<TPerson> getPersonsByKey(PersonParamBean param) {
-        Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
-                , Sort.by(Sort.Direction.DESC, "lastsaved"));
-        if (!StringUtil.isEmpty(param.getName())) {
-            return new PageResult<>(personDao.findAllByNameContaining(param.getName(), pageable));
-        }
-        return new PageResult<>(personDao.findAll(pageable));
+  @Override
+  public PageResult<TPerson> getPersonsByKey(PersonParamBean param) {
+    Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
+        , Sort.by(Sort.Direction.DESC, "lastsaved"));
+    if (!StringUtil.isEmpty(param.getName())) {
+      return new PageResult<>(personDao.findAllByNameContaining(param.getName(), pageable));
     }
+    return new PageResult<>(personDao.findAll(pageable));
+  }
 
-    @Override
-    public PageResult<TAccount> getAccountsByKey(PersonParamBean param) {
-        Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize());
-        if (!StringUtil.isEmpty(param.getName())) {
-            return new PageResult<>(accountDao.findAllByAccnameContaining(param.getName(), pageable));
-        }
-        return new PageResult<>(accountDao.findAll(pageable));
+  @Override
+  public PageResult<TAccount> getAccountsByKey(PersonParamBean param) {
+    Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize());
+    if (!StringUtil.isEmpty(param.getName())) {
+      return new PageResult<>(accountDao.findAllByAccnameContaining(param.getName(), pageable));
     }
+    return new PageResult<>(accountDao.findAll(pageable));
+  }
 
-    @Override
-    public PageResult<TPointsAccount> getPointsByKey(PersonParamBean param) {
-        Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize());
-        if (!StringUtil.isEmpty(param.getName())) {
-            return new PageResult<>(pointsAccountDao.findAllByNameContaining(param.getName(), pageable));
-        }
-        return new PageResult<>(pointsAccountDao.findAll(pageable));
+  @Override
+  public PageResult<TPointsAccount> getPointsByKey(PersonParamBean param) {
+    Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize());
+    if (!StringUtil.isEmpty(param.getName())) {
+      return new PageResult<>(pointsAccountDao.findAllByNameContaining(param.getName(), pageable));
     }
+    return new PageResult<>(pointsAccountDao.findAll(pageable));
+  }
 
-    @Override
-    public JsonResult saveUser(TPerson person) {
-        if (!StringUtil.isEmpty(person.getUserid())) {
-            Optional<TPerson> temp = personDao.findById(person.getUserid());
-            if (!temp.isPresent()) {
-                return JsonResult.error("参数错误");
-            }
-            TPerson it = temp.get();
-            if (!person.getIdno().equals(it.getIdno())
-                    || !person.getIdtype().equals(it.getIdtype())) {
-                TPerson has = personDao.findByIdentity(person.getIdtype(), person.getIdno());
-                if (has != null && !has.getUserid().equals(person.getUserid())) {
-                    return JsonResult.error("证件类型、证件号已存在");
-                }
-            }
-            if (!person.getName().equals(it.getName())) {
-                TAccount account = accountDao.findByUserid(person.getUserid());
-                if (account != null) {
-                    account.setAccname(person.getName());
-                    accountDao.save(account);
-                }
-            }
-            if (StringUtil.isEmpty(person.getStatus())) {
-                person.setStatus(TradeDict.STATUS_NORMAL);
-            }
-            personDao.save(person);
-        } else {
-            TPerson has = personDao.findByIdentity(person.getIdtype(), person.getIdno());
-            if (has != null) {
-                return JsonResult.error("证件类型、证件号已存在");
-            }
-            SystemDateTime systemDateTime = systemUtilService.getSysdatetime();
-            person.setStatus(TradeDict.STATUS_NORMAL);
-            person.setLastsaved(systemDateTime.getHostdatetime());
-            person = personDao.save(person);
-
-            TAccount account = new TAccount();
-            account.setAccname(person.getName());
-            account.setSubjno(Subject.SUBJNO_PERSONAL_DEPOSIT);
-            account.setUserid(person.getUserid());
-            account.setTransStatus(person.getStatus());
-            account.setBalance(0.0);
-            account.setAvailbal(0.0);
-            account.setFrozebal(0.0);
-            account.setLowfreeFlag(false);
-            account.setMaxbal(systemUtilService.getSysparaValueAsDouble(SysparaUtil.SYSPARAID_NO1, SysparaUtil.SYSPARA_NO1_DEFAULT));
-            account.setLastdayDpsamt(0.0);
-            account.setLastdayTransamt(0.0);
-            account.setOpendate(systemDateTime.getHostdate());
-            account.setTac(account.generateTac());
-            accountDao.save(account);
+  @Override
+  public JsonResult saveUser(TPerson person) {
+    if (!StringUtil.isEmpty(person.getUserid())) {
+      Optional<TPerson> temp = personDao.findById(person.getUserid());
+      if (!temp.isPresent()) {
+        return JsonResult.error("参数错误");
+      }
+      TPerson it = temp.get();
+      if (!person.getIdno().equals(it.getIdno())
+          || !person.getIdtype().equals(it.getIdtype())) {
+        TPerson has = personDao.findByIdentity(person.getIdtype(), person.getIdno());
+        if (has != null && !has.getUserid().equals(person.getUserid())) {
+          return JsonResult.error("证件类型、证件号已存在");
         }
-        return JsonResult.ok("添加成功");
-    }
-
-    @Override
-    public JsonResult deleteUser(String userid) {
-        TAccount account = accountDao.findByUserid(userid);
+      }
+      if (!person.getName().equals(it.getName())) {
+        TAccount account = accountDao.findByUserid(person.getUserid());
         if (account != null) {
-            if (!TradeDict.STATUS_CLOSED.equals(account.getTransStatus()) && account.getBalance() != 0) {
-                return JsonResult.error("该用户账户未注销且余额不为0，无法删除");
-            } else {
-                accountDao.delete(account);
-            }
+          account.setAccname(person.getName());
+          accountDao.save(account);
         }
-        TPointsAccount pointsAccount = pointsAccountDao.findByUserid(userid);
-        if (pointsAccount != null) {
-            if (pointsAccount.getPoints() != 0) {
-                return JsonResult.error("该用户账户积分不为0，无法删除，若要删除请先删除积分账户");
-            } else {
-                pointsAccountDao.delete(pointsAccount);
-            }
-        }
-        personDao.deleteById(userid);
-        return JsonResult.ok("操作成功");
-    }
+      }
+      if (StringUtil.isEmpty(person.getStatus())) {
+        person.setStatus(TradeDict.STATUS_NORMAL);
+      }
+      person.setTenantid(TenantContext.getTenantSchema());
+      personDao.save(person);
+    } else {
+      TPerson has = personDao.findByIdentity(person.getIdtype(), person.getIdno());
+      if (has != null) {
+        return JsonResult.error("证件类型、证件号已存在");
+      }
+      SystemDateTime systemDateTime = systemUtilService.getSysdatetime();
+      person.setStatus(TradeDict.STATUS_NORMAL);
+      person.setLastsaved(systemDateTime.getHostdatetime());
+      person.setTenantid(TenantContext.getTenantSchema());
+      person = personDao.save(person);
 
-    @Override
-    public JsonResult closeAccount(String accno) {
-        Optional<TAccount> opt = accountDao.findById(accno);
-        if (opt.isPresent()) {
-            TAccount acc = opt.get();
-            acc.setTransStatus(TradeDict.STATUS_CLOSED);
-            accountDao.save(acc);
-            return JsonResult.ok("操作成功");
-        } else {
-            return JsonResult.error("参数错误");
-        }
+      TAccount account = new TAccount();
+      account.setAccname(person.getName());
+      account.setSubjno(Subject.SUBJNO_PERSONAL_DEPOSIT);
+      account.setUserid(person.getUserid());
+      account.setTransStatus(person.getStatus());
+      account.setBalance(0.0);
+      account.setAvailbal(0.0);
+      account.setFrozebal(0.0);
+      account.setLowfreeFlag(false);
+      account.setMaxbal(systemUtilService.getSysparaValueAsDouble(SysparaUtil.SYSPARAID_NO1, SysparaUtil.SYSPARA_NO1_DEFAULT));
+      account.setLastdayDpsamt(0.0);
+      account.setLastdayTransamt(0.0);
+      account.setOpendate(systemDateTime.getHostdate());
+      account.setTac(account.generateTac());
+      account.setTenantid(person.getTenantid());
+      accountDao.save(account);
     }
+    return JsonResult.ok("添加成功");
+  }
 
-    @Override
-    public JsonResult deletePoint(String userid) {
-        Optional<TPointsAccount> pointsAccount = pointsAccountDao.findById(userid);
-        if (pointsAccount.isPresent()) {
-            pointsAccountDao.delete(pointsAccount.get());
-            return JsonResult.ok("操作成功");
-        }else {
-            return JsonResult.error("参数错误");
-        }
+  @Override
+  public JsonResult deleteUser(String userid) {
+    TAccount account = accountDao.findByUserid(userid);
+    if (account != null) {
+      if (!TradeDict.STATUS_CLOSED.equals(account.getTransStatus()) && account.getBalance() != 0) {
+        return JsonResult.error("该用户账户未注销且余额不为0，无法删除");
+      } else {
+        accountDao.delete(account);
+      }
     }
+    TPointsAccount pointsAccount = pointsAccountDao.findByUserid(userid);
+    if (pointsAccount != null) {
+      if (pointsAccount.getPoints() != 0) {
+        return JsonResult.error("该用户账户积分不为0，无法删除，若要删除请先删除积分账户");
+      } else {
+        pointsAccountDao.delete(pointsAccount);
+      }
+    }
+    personDao.deleteById(userid);
+    return JsonResult.ok("操作成功");
+  }
 
-    @Override
-    public List<TPersonIdentity> getPersonIdentity(String userid) {
-        return null;
+  @Override
+  public JsonResult closeAccount(String accno) {
+    Optional<TAccount> opt = accountDao.findById(accno);
+    if (opt.isPresent()) {
+      TAccount acc = opt.get();
+      acc.setTransStatus(TradeDict.STATUS_CLOSED);
+      accountDao.save(acc);
+      return JsonResult.ok("操作成功");
+    } else {
+      return JsonResult.error("参数错误");
     }
+  }
 
-    @Override
-    public PageResult<TPointsAccount> getUserPointDTL(PersonParamBean param) {
-        return null;
+  @Override
+  public JsonResult deletePoint(String userid) {
+    Optional<TPointsAccount> pointsAccount = pointsAccountDao.findById(userid);
+    if (pointsAccount.isPresent()) {
+      pointsAccountDao.delete(pointsAccount.get());
+      return JsonResult.ok("操作成功");
+    } else {
+      return JsonResult.error("参数错误");
     }
+  }
+
+  @Override
+  public List<TPersonIdentity> getPersonIdentity(String userid) {
+    return null;
+  }
+
+  @Override
+  public PageResult<TPointsAccount> getUserPointDTL(PersonParamBean param) {
+    return null;
+  }
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index 6f51928..44598d1 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -1,6 +1,5 @@
 package com.supwisdom.dlpay.api.service.impl
 
-import com.supwisdom.dlpay.api.AccountProxy
 import com.supwisdom.dlpay.api.TransactionBuilder
 import com.supwisdom.dlpay.api.dao.AccountDao
 import com.supwisdom.dlpay.api.dao.TransactionMainDao
@@ -13,6 +12,7 @@
 import com.supwisdom.dlpay.framework.dao.ShopaccDao
 import com.supwisdom.dlpay.framework.dao.SubjectDao
 import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.Subject
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
@@ -78,7 +78,7 @@
                 createTime = systemUtilService.sysdatetime.sysdate
                 operid = builder.operId
                 opertype = builder.operType
-                reverseFlag = builder.reverseType
+                reverseFlag = TradeDict.REVERSE_FLAG_NONE
                 checkable = sourceType.checkable
                 transCode = builder.transCode
                 reverseType = builder.reverseType
@@ -86,6 +86,7 @@
                 refundAmount = 0.0
                 checkDate = null
                 settleDate = null
+                tenantid = TenantContext.getTenantSchema()
                 this.sourceType = sourceType.sourceType
             }
 
@@ -110,6 +111,7 @@
                     oppositeAccName = builder.person().oppositeAccName()
                     this.reverseFlag = TradeDict.REVERSE_FLAG_NONE
                     remark = builder.person().remark
+                    tenantid = transaction.tenantid
                     this.status = status
                 }.also {
                     //                    persondtlDao.save(it)
@@ -138,6 +140,7 @@
                     this.remark = builder.shop().remark
                     this.reverseFlag = TradeDict.REVERSE_FLAG_NONE
                     this.updateBala = false
+                    this.tenantid = transaction.tenantid
                     this.status = status
                 }.also {
                     // save shopdtl
@@ -158,6 +161,7 @@
                     this.transTime = builder.transTime
                     this.oppositeAccNo = builder.subject().oppositeAccNo()
                     this.oppositeAccName = builder.subject().oppositeAccName()
+                    this.tenantid = transaction.tenantid
                     this.status = status
                 }.also {
                     transaction.subjectDtl = it
@@ -176,6 +180,7 @@
                     this.amount = line.amount
                     this.summary = line.summary
                     this.settleDate = null
+                    this.tenantid = transaction.tenantid
                 }
             }.apply {
                 transaction.details = this
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
index 393b5fb..0bb3345 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
@@ -83,15 +83,15 @@
                         .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "API状态错误"))
             }
             get()
-        }.let {
+        }.let { api ->
             val token = generateRandomToken()
             val now = systemUtil.sysdatetime.hostdatetime
-            ApiClientRedis().apply {
-                id = if (clientid == null) appid else "$appid-$clientid"
-                loginTimestamp = now
-                roles = it.roles
-                this.tenantId = tenantId
-                this.token = HmacUtil.HMACSHA256(token, it.secret)
+            ApiClientRedis().also {
+                it.id = if (clientid == null) appid else "$appid-$clientid"
+                it.loginTimestamp = now
+                it.roles = api.roles
+                it.tenantId = tetantId
+                it.token = HmacUtil.HMACSHA256(token, api.secret)
             }.also {
                 apiClientRepository.save(it)
             }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index d898fb7..614f548 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -81,7 +81,7 @@
             url = url.replace(context, "")
         }
         logger.info(url)
-        if(!url.startsWith("/api/")&&!url.startsWith("/mobileapi/")){
+        if (!url.startsWith("/api/") && !url.startsWith("/mobileapi/")){
             filterChain.doFilter(request, response)
             return
         }
diff --git a/src/main/resources/data-postgresql.sql b/src/main/resources/data-postgresql.sql
new file mode 100644
index 0000000..bdea1da
--- /dev/null
+++ b/src/main/resources/data-postgresql.sql
@@ -0,0 +1,14 @@
+--pg--
+INSERT INTO "tb_period" ("period_year", "period_month", "startdate", "enddate", "settleflag" , "tenantid")
+VALUES (to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'), to_char(CURRENT_TIMESTAMP,'yyyyMM')||'01', to_char((to_date(to_char(CURRENT_TIMESTAMP+'1 month','yyyyMM')||'01','yyyyMMdd')-1)::Timestamp,'yyyyMMdd'), 0, '{tenantid}');
+
+insert into TB_SETTLECTL(BOOKSETNO,PERIODYEAR,PERIODMONTH,STATDATE,SETTLEDATE,STATUS,updtime, "tenantid")
+values (1,to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),0,to_char(CURRENT_TIMESTAMP,'yyyyMMddhh24miss'), '{tenantid}');
+
+insert into TB_VOUCHERNOCTL(VOUCHERTYPE,PERIODMONTH,VOUCHERNO,"tenantid")
+values (1,to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),0, , '{tenantid}');
+
+CREATE SEQUENCE seq_refno;
+
+---------  end of script
+commit;
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
new file mode 100644
index 0000000..6b60981
--- /dev/null
+++ b/src/main/resources/data.sql
@@ -0,0 +1,510 @@
+INSERT INTO tb_tenantconfig(cfgid, tenantid, datacenter_id)
+values ('main', '{tenantid}', '01');
+
+INSERT INTO tb_operator(operid, closedate, opendate, opercode, opername, operpwd, opertype, status, tenantid)
+VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', 'normal', '{tenantid}');
+
+
+INSERT INTO tb_role(roleid, createtime, editflag, lastsaved, rolecode, roledesc, rolename, tenantid)
+VALUES ('d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '20190101000000', 0, '', 'ROLE_ADMIN', '超级管理员', '超级管理员', '{tenantid}');
+
+INSERT INTO tb_oper_role(id, operid, roleid, tenantid)
+VALUES ('1', 'LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (1, NULL, 0, NULL, 'layui-icon-home', '#', '主页', 1, -1, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (2, NULL, 1, NULL, 'layui-icon-home', '/home/console', '控制台', 1, 1, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (3, NULL, 0, NULL, 'layui-icon-set', '#', '系统中心', 2, -1, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (5, NULL, 1, NULL, 'layui-icon-set', '/role/index', '角色管理', 2, 3, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (6, NULL, 1, NULL, 'layui-icon-set', '/operator/index', '操作员管理', 4, 3, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (4, NULL, 1, NULL, 'layui-icon-set', '/function/index', '功能维护', 1, 3, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (7, NULL, 0, NULL, 'layui-icon-release', '#', '商户中心', 4, -1, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (9, NULL, 1, NULL, '', '/operator/logs', '操作日志', 4, 3, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (10, NULL, 0, NULL, 'layui-icon-util', '#', '参数管理', 3, -1, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (11, NULL, 1, NULL, 'layui-icon-util', '/param/syspara', '全局参数配置', 1, 10, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (12, NULL, 1, NULL, 'layui-icon-util', '/param/businesspara', '业务参数配置', 2, 10, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (17, NULL, 1, NULL, 'layui-icon-util', '/param/apiclientpara', '应用参数配置', 3, 10, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (18, NULL, 1, NULL, 'layui-icon-util', '/param/paytype', '支付能力配置', 4, 10, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (19, NULL, 0, NULL, 'layui-icon-user', '#', '用户中心', 5, -1, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (20, NULL, 0, NULL, 'layui-icon-rmb', '#', '结算中心', 6, -1, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (21, NULL, 1, NULL, '', '/user/index', '用户管理', 1, 19, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (23, NULL, 1, NULL, '', '/shop/index', '商户管理', 1, 7, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (24, NULL, 1, NULL, '', '/user/point', '积分管理', 3, 19, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (22, NULL, 1, NULL, '', '/user/acc', '账户管理', 2, 19, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (25, NULL, 1, NULL, '', '/shop/config', '商户支付能力配置', 2, 7, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (26, NULL, 0, NULL, 'layui-icon-tabs', '#', '流水管理', 3, -1, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (27, NULL, 1, NULL, '', '/dtl/userdtl', '个人流水查询', 1, 26, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (28, NULL, 1, NULL, '', '/dtl/shopdtl', '商户流水查询', 2, 26, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (29, NULL, 1, NULL, '', '/report/subjectday', '科目汇总表', 1, 20, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (30, NULL, 1, NULL, '', '/report/subjectdetail', '科目明细账', 2, 20, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (31, NULL, 1, NULL, '', '/report/shopbusiness', '商户营业情况表', 3, 20, '{tenantid}');
+
+
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b7955772c0032', 1, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b7955772d0033', 2, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b7955772d0034', 3, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b7955772d0035', 5, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557730003b', 6, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b795577310041', 4, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557732004a', 9, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557732004c', 7, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557732004d', 23, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b795577330052', 25, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557733005a', 20, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557733005b', 29, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557733005d', 30, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557733005f', 31, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b795577340061', 19, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b795577340062', 21, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b795577350068', 24, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557735006a', 22, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557735006c', 26, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557735006d', 27, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557735006f', 28, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b795577350071', 10, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b795577350072', 11, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b795577360074', 17, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b79557736007b', 12, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions", tenantid)
+VALUES ('ff8080816b7947ed016b795577370081', 18, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, '{tenantid}');
+
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (4, '1', 4, '添加功能', '/function/add', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (5, '', 4, '添加父功能', '/function/loadadd', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (6, '1', 6, '查询', '/operator/index', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (7, '', 6, '添加查询', '/operator/load4add', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (8, '', 6, '添加和修改', '/operator/add', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (9, '', 6, '重置密码', '/operator/resetpwd', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (10, '', 4, '查询', '/function/index', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (11, '', 4, '删除', '/function/delfunc', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (12, '', 4, '添加子功能', '/function/loadsubadd', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (13, '', 4, '维护资源', '/function/loadres', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (14, '', 4, '添加资源', '/function/addres', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (15, '', 4, '删除资源', '/function/delres', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (16, '', 5, '查询', '/role/index', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (17, '', 5, '添加', '/role/add', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (19, '', 5, '分配功能', '/role/addfunc', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (20, '', 5, '加载分配功能', '/role/loadfunc', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (21, '', 5, '删除角色', '/role/del', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (22, '', 6, '修改状态', '/operator/updatestate', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (24, '', 9, '查询', '/operator/logslist', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (26, '', 11, '修改', '/param/sysparaupdate', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (27, '', 11, '查询', '/param/syspara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (28, '', 12, '查询', '/param/businesspara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (29, '', 12, '删除', '/param/deletebusinesspara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (30, '', 12, '修改', '/param/businessparaupdate', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (32, '', 12, '新增', '/param/addbusinesspara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (33, '', 12, '新增跳转', '/param/load4addbuspara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (34, '', 17, '查询', '/param/apiclientpara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (35, '', 17, '新增修改跳转', '/param/load4addapiclient', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (36, '', 17, '修改状态', '/param/updateapiclientstate', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (37, '', 17, '删除', '/param/deleteapiclient', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (39, '', 17, '修改', '/param/updateapiclientpara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (40, '', 17, '新增', '/param/addapiclientpara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (41, '', 18, '查询', '/param/paytype', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (42, '', 21, '查询', '/user/list', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (43, '', 18, '新增跳转', '/param/load4addpaytype', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (44, '', 18, '切换状态', '/param/updatepaytypestate', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (45, '', 18, '修改', '/param/updatepaytypename', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (46, '', 18, '删除', '/param/deletepaytype', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (48, '', 18, '配置跳转', '/param/load4paytypeconfig', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (49, '', 18, '配置参数', '/param/addpaytypeconfig', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (50, '', 22, '查询', '/user/account', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (52, '', 24, '查询', '/user/pointlist', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (53, '', 23, '删除', '/shop/deleteshop', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (54, '', 21, '添加', '/user/add', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (56, '', 23, '查询', '/shop/getshopinfo', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (57, '', 23, '商户树', '/shop/index', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (58, '', 23, '新增修改', '/shop/saveorupdate', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (59, '', 21, '删除', '/user/del', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (60, '', 21, '注销账户', '/user/delacc', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (61, '', 21, '删除积分账户', '/user/delpoint', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (63, '', 25, '商户树', '/shop/config', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (64, '', 25, '查询', '/shop/shoppaytypelist', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (65, '', 25, '切换状态', '/shop/updatepaytypestat', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (66, '', 25, '新增跳转', '/shop/load4addpaytype', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (67, '', 25, '新增', '/shop/addshoppaytype', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (68, '', 25, '配置跳转', '/shop/load4paytypepara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (69, '', 25, '配置', '/shop/addpaytypepara', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (70, '', 27, '查询', '/dtl/userdtl', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (71, '', 28, '查询', '/dtl/shopdtl', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (72, '', 29, '查询', '/report/subjectday', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (73, '', 30, '查询', '/report/subjectdetail', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (74, '', 31, '查询', '/report/shopbusiness', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (76, '', 18, '新增', '/param/addpaytype', '{tenantid}');
+
+INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
+VALUES ('ff8080816b7947ed016b795577300036', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
+VALUES ('ff8080816b7947ed016b795577300037', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
+VALUES ('ff8080816b7947ed016b795577300038', 19, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
+VALUES ('ff8080816b7947ed016b795577300039', 20, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
+VALUES ('ff8080816b7947ed016b79557730003a', 21, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
+VALUES ('ff8080816b7947ed016b79557730003c', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
+VALUES ('ff8080816b7947ed016b79557730003d', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557731003e', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557731003f', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577310040', 22, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577310042', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577310043', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577310044', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577310045', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577310046', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577320047', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577320048', 14, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577320049', 15, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557732004b', 24, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557732004e', 53, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557732004f', 57, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577320050', 56, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577320051', 58, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577330053', 63, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+ VALUES ('ff8080816b7947ed016b795577330054', 64, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577330055', 65, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577330056', 66, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+ VALUES ('ff8080816b7947ed016b795577330057', 68, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+ VALUES ('ff8080816b7947ed016b795577330058', 67, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+ VALUES ('ff8080816b7947ed016b795577330059', 69, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557733005c', 72, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557733005e', 73, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577340060', 74, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577340063', 54, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577340064', 60, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577340065', 61, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+ VALUES ('ff8080816b7947ed016b795577350066', 42, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577350067', 59, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577350069', 52, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+ VALUES ('ff8080816b7947ed016b79557735006b', 50, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557735006e', 70, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577350070', 71, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577360073', 27, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577360075', 39, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577360076', 34, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577360077', 40, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577360078', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577360079', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557736007a', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557736007c', 33, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557736007d', 32, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b79557736007e', 28, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+ VALUES ('ff8080816b7947ed016b79557737007f', 30, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577370080', 29, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577370082', 46, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577370083', 48, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577370084', 41, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577370085', 44, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+ VALUES ('ff8080816b7947ed016b795577370086', 49, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577370087', 45, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816b7947ed016b795577370088', 43, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+
+
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('1001', 1, 'y', 1, NULL, 20190430, 1, '库存现金', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('1002', 1, 'y', 1, NULL, 20190430, 1, '银行存款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('1121', 1, 'n', 0, NULL, 20190430, 1, '应收票据', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112101', 1, 'n', 1, '1121', 20190430, 2, '支票', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112102', 1, 'n', 1, '1121', 20190430, 2, '经费本', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('1122', 1, 'y', 0, NULL, 20190430, 1, '应收账款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112201', 1, 'y', 1, '1122', 20190430, 2, '现金充值款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112209', 1, 'y', 1, '1122', 20190617, 2, '其他第三方充值款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112210', 1, 'y', 1, '1122', 20190430, 2, '支付宝充值款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112211', 1, 'y', 1, '1122', 20190430, 2, '微信充值款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112212', 1, 'n', 1, '1122', 20190430, 2, '银联充值款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112213', 1, 'y', 1, '1122', 20190430, 2, '一卡通充值款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112230', 1, 'y', 1, '1122', 20190430, 2, '支付宝支付款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112231', 1, 'y', 1, '1122', 20190430, 2, '微信支付款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112232', 1, 'n', 1, '1122', 20190430, 2, '银联支付款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112233', 1, 'y', 1, '1122', 20190430, 2, '一卡通支付款', 1, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('112234', 1, 'y', 1, '1122', NULL, 2, '市民卡支付款', 1, '{tenantid}');
+--负债
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('2001', 2, 'n', 1, NULL, 20190430, 1, '用户押金', 2, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('2004', 2, 'y', 1, NULL, 20190430, 1, '商户营业款', 2, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('2202', 2, 'y', 0, NULL, 20190430, 1, '应付账款', 2, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('220201', 2, 'y', 1, '2202', 20190430, 2, '个人存款', 2, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('220211', 2, 'n', 1, '2202', 20190430, 2, '销户退款', 2, '{tenantid}');
+--损益
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('6021', 2, 'y', 0, NULL, 20190430, 1, '手续费收入', 6, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('602101', 2, 'y', 1, '6021', 20190430, 2, '支付宝充值手续费', 6, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('602102', 2, 'y', 1, '6021', 20190430, 2, '微信充值手续费', 6, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('602103', 2, 'n', 1, '6021', 20190430, 2, '银联充值手续费', 6, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('6601', 2, 'y', 0, NULL, 20190430, 1, '销售费用', 6, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('660101', 2, 'y', 1, '6601', 20190430, 2, '折扣优惠款', 6, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('660102', 2, 'y', 1, '6601', 20190430, 2, '积分抵扣款', 6, '{tenantid}');
+INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES ('6602', 2, 'y', 1, NULL, 20190430, 1, '管理费收入', 6, '{tenantid}');
+update TB_SUBJECT set opendate = to_number(to_char(CURRENT_TIMESTAMP,'yyyymmdd'),'99999999');
+
+
+INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "tenantid")
+VALUES ('citizenCard', 't', '大理市民卡', 't', 'f', 't', 'f', 't', '{tenantid}');
+INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "tenantid")
+VALUES ('balance', 'f', '账户余额', 't', 'f', 't', 'f', 't', '{tenantid}');
+INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "tenantid")
+VALUES ('thirdpart', 'f', '其他第三方支付', 't', 't', 'f', 'f', 'f', '{tenantid}');
+INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "tenantid")
+VALUES ('yktpay', 't', '一卡通支付', 't', 't', 't', 't', 't', '{tenantid}');
+INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "tenantid")
+VALUES ('alipay', 't', '支付宝', 't', 't', 't', 't', 'f', '{tenantid}');
+INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable", "tenantid")
+VALUES ('wechat', 't', '微信支付', 't', 't', 't', 't', 'f', '{tenantid}');
+
+-- 支付方式
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('yktpay','appid',null,'100005', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('yktpay','appkey',null,'adc4ac6822fd462780f878b86cb94688', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('yktpay','orderurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('yktpay','reverseurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('alipay', 'alipay.gateway', '支付宝网关地址', 'https://openapi.alipay.com/gateway.do', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('alipay', 'enable.paymethod', '支付渠道', 'balance,moneyFund,debitCardExpress,bankPay,pcredit', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('alipay', 'notify.url', '异步通知地址', 'http://ykt.supwisdom.com:9116/epay/zfb/newnotify', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('alipay', 'timeout.express', '支付超时时间', '5m', '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('alipay', 'alipay.public.key', '支付宝商户应用的支付宝公钥', NULL, '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('alipay', 'alipay.rsa.private.key', '支付宝商户应用RSA私钥', NULL, '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('alipay', 'alipay.rsa.public.key', '支付宝商户应用RSA公钥', NULL, '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('alipay', 'appid', '支付宝应用APPID', NULL, '{tenantid}');
+INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE, "tenantid")
+VALUES ('citizenCard', 'bankcardno', NULL, NULL, '{tenantid}');
+
+INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
+VALUES (1, 'yes', 1, '20190514165658', '账户最大余额默认值', '元', '10001', '账户开户时的默认账户最大余额', 'amount', '{tenantid}');
+
+INSERT INTO "tb_task_lock" ("taskcode", "remark", "taskstatus", "tasktime", "tenantid")
+VALUES ('DAYENDSETTLETASK', '日终结算', '0', '20190619100600', '{tenantid}');
+
+INSERT INTO "tb_shop" ("shopid", "shopname", "shoptype", "fshopid", "status", "opendate", "tenantid")
+VALUES (1, '支付中心', 0, 0, 'normal', '20190517', '{tenantid}');
+
+INSERT INTO "tb_transcode" ("transcode", "transname", "tenantid")
+VALUES (3010, '市民卡代扣', '{tenantid}');
+INSERT INTO "tb_transcode" ("transcode", "transname", "tenantid")
+VALUES (3500, '账户充值', '{tenantid}');
+
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('cancel', 1, '冲正', '冲正状态', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('reverse', 1, '手工撤销', '冲正状态', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('none', 1, ' ', '冲正状态', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('init', 2, '初始化', '流水状态', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('success', 2, '交易成功', '流水状态', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('fail', 2, '交易失败', '流水状态', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('wip', 2, '待支付', '流水状态', '{tenantid}');
+INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES ('cancel', 2, '交易取消', '流水状态', '{tenantid}');
+
+----------------------------------------------------
+commit;
\ No newline at end of file
diff --git a/src/main/resources/import.sql b/src/main/resources/import.sql
deleted file mode 100644
index a1161f6..0000000
--- a/src/main/resources/import.sql
+++ /dev/null
@@ -1,280 +0,0 @@
-INSERT INTO tb_tenantconfig(cfgid, tenantid, datacenter_id)
-values ('main', '10000110', '01');
-
-INSERT INTO tb_operator(operid, closedate, opendate, opercode, opername, operpwd, opertype, status)
-VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', 'normal');
-
-
-INSERT INTO tb_role(roleid, createtime, editflag, lastsaved, rolecode, roledesc, rolename)
-VALUES ('d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '20190101000000', 0, '', 'ROLE_ADMIN', '超级管理员', '超级管理员');
-
-INSERT INTO tb_oper_role(id, operid, roleid) VALUES ('1', 'LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (1, NULL, 0, NULL, 'layui-icon-home', '#', '主页', 1, -1);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (2, NULL, 1, NULL, 'layui-icon-home', '/home/console', '控制台', 1, 1);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (3, NULL, 0, NULL, 'layui-icon-set', '#', '系统中心', 2, -1);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (5, NULL, 1, NULL, 'layui-icon-set', '/role/index', '角色管理', 2, 3);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (6, NULL, 1, NULL, 'layui-icon-set', '/operator/index', '操作员管理', 4, 3);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (4, NULL, 1, NULL, 'layui-icon-set', '/function/index', '功能维护', 1, 3);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (7, NULL, 0, NULL, 'layui-icon-release', '#', '商户中心', 4, -1);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (9, NULL, 1, NULL, '', '/operator/logs', '操作日志', 4, 3);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (10, NULL, 0, NULL, 'layui-icon-util', '#', '参数管理', 3, -1);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (11, NULL, 1, NULL, 'layui-icon-util', '/param/syspara', '全局参数配置', 1, 10);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (12, NULL, 1, NULL, 'layui-icon-util', '/param/businesspara', '业务参数配置', 2, 10);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (17, NULL, 1, NULL, 'layui-icon-util', '/param/apiclientpara', '应用参数配置', 3, 10);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (18, NULL, 1, NULL, 'layui-icon-util', '/param/paytype', '支付能力配置', 4, 10);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (19, NULL, 0, NULL, 'layui-icon-user', '#', '用户中心', 5, -1);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (20, NULL, 0, NULL, 'layui-icon-rmb', '#', '结算中心', 6, -1);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (21, NULL, 1, NULL, '', '/user/index', '用户管理', 1, 19);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (23, NULL, 1, NULL, '', '/shop/index', '商户管理', 1, 7);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (24, NULL, 1, NULL, '', '/user/point', '积分管理', 3, 19);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (22, NULL, 1, NULL, '', '/user/acc', '账户管理', 2, 19);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (25, NULL, 1, NULL, '', '/shop/config', '商户支付能力配置', 2, 7);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (26, NULL, 0, NULL, 'layui-icon-tabs', '#', '流水管理', 3, -1);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (27, NULL, 1, NULL, '', '/dtl/userdtl', '个人流水查询', 1, 26);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (28, NULL, 1, NULL, '', '/dtl/shopdtl', '商户流水查询', 2, 26);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (29, NULL, 1, NULL, '', '/report/subjectday', '科目汇总表', 1, 20);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (30, NULL, 1, NULL, '', '/report/subjectdetail', '科目明细账', 2, 20);
-INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (31, NULL, 1, NULL, '', '/report/shopbusiness', '商户营业情况表', 3, 20);
-
-
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b7955772c0032', 1, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b7955772d0033', 2, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b7955772d0034', 3, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b7955772d0035', 5, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557730003b', 6, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b795577310041', 4, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557732004a', 9, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557732004c', 7, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557732004d', 23, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b795577330052', 25, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557733005a', 20, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557733005b', 29, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557733005d', 30, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557733005f', 31, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b795577340061', 19, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b795577340062', 21, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b795577350068', 24, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557735006a', 22, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557735006c', 26, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557735006d', 27, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557735006f', 28, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b795577350071', 10, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b795577350072', 11, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b795577360074', 17, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b79557736007b', 12, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-INSERT INTO "tb_role_function" ("id", "functionid", "roleid", "permissions") VALUES ('ff8080816b7947ed016b795577370081', 18, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL);
-
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (4, '1', 4, '添加功能', '/function/add');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (5, '', 4, '添加父功能', '/function/loadadd');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (6, '1', 6, '查询', '/operator/index');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (7, '', 6, '添加查询', '/operator/load4add');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (8, '', 6, '添加和修改', '/operator/add');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (9, '', 6, '重置密码', '/operator/resetpwd');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (10, '', 4, '查询', '/function/index');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (11, '', 4, '删除', '/function/delfunc');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (12, '', 4, '添加子功能', '/function/loadsubadd');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (13, '', 4, '维护资源', '/function/loadres');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (14, '', 4, '添加资源', '/function/addres');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (15, '', 4, '删除资源', '/function/delres');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (16, '', 5, '查询', '/role/index');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (17, '', 5, '添加', '/role/add');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (19, '', 5, '分配功能', '/role/addfunc');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (20, '', 5, '加载分配功能', '/role/loadfunc');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (21, '', 5, '删除角色', '/role/del');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (22, '', 6, '修改状态', '/operator/updatestate');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (24, '', 9, '查询', '/operator/logslist');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (26, '', 11, '修改', '/param/sysparaupdate');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (27, '', 11, '查询', '/param/syspara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (28, '', 12, '查询', '/param/businesspara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (29, '', 12, '删除', '/param/deletebusinesspara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (30, '', 12, '修改', '/param/businessparaupdate');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (32, '', 12, '新增', '/param/addbusinesspara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (33, '', 12, '新增跳转', '/param/load4addbuspara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (34, '', 17, '查询', '/param/apiclientpara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (35, '', 17, '新增修改跳转', '/param/load4addapiclient');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (36, '', 17, '修改状态', '/param/updateapiclientstate');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (37, '', 17, '删除', '/param/deleteapiclient');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (39, '', 17, '修改', '/param/updateapiclientpara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (40, '', 17, '新增', '/param/addapiclientpara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (41, '', 18, '查询', '/param/paytype');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (42, '', 21, '查询', '/user/list');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (43, '', 18, '新增跳转', '/param/load4addpaytype');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (44, '', 18, '切换状态', '/param/updatepaytypestate');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (45, '', 18, '修改', '/param/updatepaytypename');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (46, '', 18, '删除', '/param/deletepaytype');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (48, '', 18, '配置跳转', '/param/load4paytypeconfig');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (49, '', 18, '配置参数', '/param/addpaytypeconfig');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (50, '', 22, '查询', '/user/account');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (52, '', 24, '查询', '/user/pointlist');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (53, '', 23, '删除', '/shop/deleteshop');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (54, '', 21, '添加', '/user/add');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (56, '', 23, '查询', '/shop/getshopinfo');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (57, '', 23, '商户树', '/shop/index');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (58, '', 23, '新增修改', '/shop/saveorupdate');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (59, '', 21, '删除', '/user/del');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (60, '', 21, '注销账户', '/user/delacc');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (61, '', 21, '删除积分账户', '/user/delpoint');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (63, '', 25, '商户树', '/shop/config');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (64, '', 25, '查询', '/shop/shoppaytypelist');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (65, '', 25, '切换状态', '/shop/updatepaytypestat');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (66, '', 25, '新增跳转', '/shop/load4addpaytype');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (67, '', 25, '新增', '/shop/addshoppaytype');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (68, '', 25, '配置跳转', '/shop/load4paytypepara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (69, '', 25, '配置', '/shop/addpaytypepara');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (70, '', 27, '查询', '/dtl/userdtl');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (71, '', 28, '查询', '/dtl/shopdtl');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (72, '', 29, '查询', '/report/subjectday');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (73, '', 30, '查询', '/report/subjectdetail');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (74, '', 31, '查询', '/report/shopbusiness');
-INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri") VALUES (76, '', 18, '新增', '/param/addpaytype');
-
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577300036', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577300037', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577300038', 19, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577300039', 20, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557730003a', 21, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557730003c', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557730003d', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557731003e', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557731003f', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577310040', 22, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577310042', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577310043', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577310044', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577310045', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577310046', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577320047', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577320048', 14, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577320049', 15, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557732004b', 24, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557732004e', 53, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557732004f', 57, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577320050', 56, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577320051', 58, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577330053', 63, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577330054', 64, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577330055', 65, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577330056', 66, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577330057', 68, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577330058', 67, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577330059', 69, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557733005c', 72, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557733005e', 73, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577340060', 74, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577340063', 54, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577340064', 60, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577340065', 61, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577350066', 42, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577350067', 59, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577350069', 52, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557735006b', 50, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557735006e', 70, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577350070', 71, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577360073', 27, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577360075', 39, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577360076', 34, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577360077', 40, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577360078', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577360079', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557736007a', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557736007c', 33, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557736007d', 32, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557736007e', 28, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b79557737007f', 30, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577370080', 29, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577370082', 46, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577370083', 48, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577370084', 41, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577370085', 44, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577370086', 49, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577370087', 45, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816b7947ed016b795577370088', 43, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-
-
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('1001', 1, 'y', 1, NULL, 20190430, 1, '库存现金', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('1002', 1, 'y', 1, NULL, 20190430, 1, '银行存款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('1121', 1, 'n', 0, NULL, 20190430, 1, '应收票据', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112101', 1, 'n', 1, '1121', 20190430, 2, '支票', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112102', 1, 'n', 1, '1121', 20190430, 2, '经费本', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('1122', 1, 'y', 0, NULL, 20190430, 1, '应收账款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112201', 1, 'y', 1, '1122', 20190430, 2, '现金充值款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112209', 1, 'y', 1, '1122', 20190617, 2, '其他第三方充值款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112210', 1, 'y', 1, '1122', 20190430, 2, '支付宝充值款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112211', 1, 'y', 1, '1122', 20190430, 2, '微信充值款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112212', 1, 'n', 1, '1122', 20190430, 2, '银联充值款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112213', 1, 'y', 1, '1122', 20190430, 2, '一卡通充值款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112230', 1, 'y', 1, '1122', 20190430, 2, '支付宝支付款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112231', 1, 'y', 1, '1122', 20190430, 2, '微信支付款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112232', 1, 'n', 1, '1122', 20190430, 2, '银联支付款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112233', 1, 'y', 1, '1122', 20190430, 2, '一卡通支付款', 1);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('112234', 1, 'y', 1, '1122', NULL, 2, '市民卡支付款', 1);
---负债
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('2001', 2, 'n', 1, NULL, 20190430, 1, '用户押金', 2);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('2004', 2, 'y', 1, NULL, 20190430, 1, '商户营业款', 2);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('2202', 2, 'y', 0, NULL, 20190430, 1, '应付账款', 2);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('220201', 2, 'y', 1, '2202', 20190430, 2, '个人存款', 2);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('220211', 2, 'n', 1, '2202', 20190430, 2, '销户退款', 2);
---损益
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('6021', 2, 'y', 0, NULL, 20190430, 1, '手续费收入', 6);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('602101', 2, 'y', 1, '6021', 20190430, 2, '支付宝充值手续费', 6);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('602102', 2, 'y', 1, '6021', 20190430, 2, '微信充值手续费', 6);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('602103', 2, 'n', 1, '6021', 20190430, 2, '银联充值手续费', 6);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('6601', 2, 'y', 0, NULL, 20190430, 1, '销售费用', 6);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('660101', 2, 'y', 1, '6601', 20190430, 2, '折扣优惠款', 6);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('660102', 2, 'y', 1, '6601', 20190430, 2, '积分抵扣款', 6);
-INSERT INTO "tb_subject" ("subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype") VALUES ('6602', 2, 'y', 1, NULL, 20190430, 1, '管理费收入', 6);
-update TB_SUBJECT set opendate = to_number(to_char(CURRENT_TIMESTAMP,'yyyymmdd'),'99999999');
-
-
-INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable") VALUES ('citizenCard', 't', '大理市民卡', 't', 'f', 't', 'f', 't');
-INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable") VALUES ('balance', 'f', '账户余额', 't', 'f', 't', 'f', 't');
-INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable") VALUES ('thirdpart', 'f', '其他第三方支付', 't', 't', 'f', 'f', 'f');
-INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable") VALUES ('yktpay', 't', '一卡通支付', 't', 't', 't', 't', 't');
-INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable") VALUES ('alipay', 't', '支付宝', 't', 't', 't', 't', 'f');
-INSERT INTO "tb_sourcetype" ("sourcetype", "checkable", "paydesc", "enable", "charge_enable", "consume_enable", "anonymous_enable", "reversable") VALUES ('wechat', 't', '微信支付', 't', 't', 't', 't', 'f');
-
--- 支付方式
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','appid',null,'100005');
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','appkey',null,'adc4ac6822fd462780f878b86cb94688');
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','orderurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay');
-Insert into TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) values ('yktpay','reverseurl',null,'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) VALUES ('alipay', 'alipay.gateway', '支付宝网关地址', 'https://openapi.alipay.com/gateway.do');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) VALUES ('alipay', 'enable.paymethod', '支付渠道', 'balance,moneyFund,debitCardExpress,bankPay,pcredit');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) VALUES ('alipay', 'notify.url', '异步通知地址', 'http://ykt.supwisdom.com:9116/epay/zfb/newnotify');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) VALUES ('alipay', 'timeout.express', '支付超时时间', '5m');
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) VALUES ('alipay', 'alipay.public.key', '支付宝商户应用的支付宝公钥', NULL);
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) VALUES ('alipay', 'alipay.rsa.private.key', '支付宝商户应用RSA私钥', NULL);
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) VALUES ('alipay', 'alipay.rsa.public.key', '支付宝商户应用RSA公钥', NULL);
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) VALUES ('alipay', 'appid', '支付宝应用APPID', NULL);
-INSERT INTO TB_PAYTYPE_CONFIG (PAYTYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE) VALUES ('citizenCard', 'bankcardno', NULL, NULL);
-
-INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype") VALUES (1, 'yes', 1, '20190514165658', '账户最大余额默认值', '元', '10001', '账户开户时的默认账户最大余额', 'amount');
-
-INSERT INTO "tb_task_lock" ("taskcode", "remark", "taskstatus", "tasktime") VALUES ('DAYENDSETTLETASK', '日终结算', '0', '20190619100600');
-
-INSERT INTO "tb_shop" ("shopid", "shopname", "shoptype", "fshopid", "status", "opendate") VALUES (1, '支付中心', 0, 0, 'normal', '20190517');
-
-INSERT INTO "tb_transcode" ("transcode", "transname") VALUES (3010, '市民卡代扣');
-INSERT INTO "tb_transcode" ("transcode", "transname") VALUES (3500, '账户充值');
-
-INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('cancel', 1, '冲正', '冲正状态');
-INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('reverse', 1, '手工撤销', '冲正状态');
-INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('none', 1, ' ', '冲正状态');
-INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('init', 2, '初始化', '流水状态');
-INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('success', 2, '交易成功', '流水状态');
-INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('fail', 2, '交易失败', '流水状态');
-INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('wip', 2, '待支付', '流水状态');
-INSERT INTO "tb_dictionary" ("dictval", "dicttype", "dictcaption", "dicttypename") VALUES ('cancel', 2, '交易取消', '流水状态');
-
---pg--
-INSERT INTO "tb_period" ("period_year", "period_month", "startdate", "enddate", "settleflag")
-VALUES (to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'), to_char(CURRENT_TIMESTAMP,'yyyyMM')||'01', to_char((to_date(to_char(CURRENT_TIMESTAMP+'1 month','yyyyMM')||'01','yyyyMMdd')-1)::Timestamp,'yyyyMMdd'), 0);
-
-insert into TB_SETTLECTL(BOOKSETNO,PERIODYEAR,PERIODMONTH,STATDATE,SETTLEDATE,STATUS,updtime)
-values (1,to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),0,to_char(CURRENT_TIMESTAMP,'yyyyMMddhh24miss'));
-
-insert into TB_VOUCHERNOCTL(VOUCHERTYPE,PERIODMONTH,VOUCHERNO)
-values (1,to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),0);
----------  end of script
-commit;
